What Is DeepSeek-Harness? A Complete Introduction DeepSeek AI released DeepSeek-Harness (dsh), an open-source agent harness in developer preview version 0.1.0-rc.5, where every feature—tools, commands, skills, and MCP connections—is implemented as a plugin on top of the Cordis plugin framework. The harness supports profiles for separate configurations and includes official bridge plugins for Claude Code and Codex hooks, allowing reuse of existing hook configs. What is DeepSeek-Harness? A Complete Introduction DeepSeek-Harness dsh is DeepSeek's open-source agent harness where every feature — tools, commands, skills, MCP — is a plugin. Here's how it works. DeepSeek-Harness, commonly shortened to dsh , is an open-source agent harness built by DeepSeek AI. Its defining idea is "everything is a plugin": the CLI, the web UI, tool access, slash commands, skills, and even MCP server connections are all implemented as plugins on top of a general-purpose plugin framework called Cordis https://github.com/cordiverse/cordis . There is no separate manifest format for each capability type — one plugin mechanism covers all of them. dsh is currently in developer preview version 0.1.0-rc.5 at the time of writing . The project's own README is explicit about what that means: expect compatibility-breaking changes as the framework iterates. "Everything is a plugin" — what that actually means everything-is-a-plugin--what-that-actually-means Most agent tools split their extensibility into separate systems: one format for tools, another for slash commands, another for skills, another for MCP configuration. dsh collapses all of that into a single concept. A plugin is just a JS/TS module that exports an apply ctx, config function, and depending on what it registers on ctx , it can become any of the following: | You want to add... | The plugin registers... | |---|---| | A tool the model can call | ctx.tools.register | A slash command /xxx for the UI | ctx.commands | | A skill injected prompt + tool | a prompt section plus a tool, injected on invocation | | An MCP server's tools | one plugin per MCP server, discovering and registering its tools via ctx.tools.register | | A hook into agent/tool lifecycle events | a listener on extension points like agent/pre-step or tools/pre-execute | | A new LLM provider | a LlmAdapter registered via ctx.llm.registerAdapter | | A background/cron job | ctx.jobs | Notably, dsh ships official bridge plugins — dsh-hooks-claude-code and dsh-hooks-codex — that translate an existing Claude Code or Codex hooks.json into dsh's own hook extension points, so hook configs from those ecosystems can be reused rather than rewritten. If you've used a harness where skills, commands, and MCP connections each need their own config file, this is the biggest conceptual shift: in dsh, they're all just code that calls ctx . Installing dsh installing-dsh The fastest way to try it is to run it straight from npm, no clone required: npx @deepseek-ai/dsh web This starts the web UI, listening by default on http://127.0.0.1:3080 . If you want to work from source instead — useful if you're developing your own plugin against the latest framework code — clone and build the repo directly: git clone https://github.com/deepseek-ai/deepseek-harness.git cd deepseek-harness pnpm install pnpm run build pnpm dsh web Profiles: how dsh keeps configurations separate profiles-how-dsh-keeps-configurations-separate A profile is a named, runnable configuration — a directory under $DSH HOME/profiles/