DeepSeek Harness is an open-source runtime for building and running coding agents. Its defining idea is simple: the model, tools, session log, agent loop and user interface are all replaceable parts.
One shared context. Many replaceable capabilities.
Cordis is the plugin framework underneath dsh. Plugins contribute services, typed events and reversible effects to a shared context.
The important shift: there is no privileged “core feature” you have to patch. You mount a plugin beside the others, and its registrations unwind when it unloads.
A running dsh process is a plugin tree assembled from ordered layers. You can see the tree, patch it, and reuse the same composition across launch surfaces.
Rule to remember: a patch replaces a row’s whole config. Later layers win, so restate the settings you want to keep.
bundle
Reusable distribution layer. A package of Cordis config rows plus the code they mount.
profile
Named application recipe. For example: web, headless, sdk, or acp.
patch
Your overlay. Insert a plugin, replace a provider, or change a policy without editing the core.
Launch the Web UI, choose a project directory, and ask the agent to inspect, edit, test or explain the workspace. Approval prompts sit in the workflow when an operation needs permission.
dsh web → Settings → Models → Choose workspace → send a task
Plugins stay small because the harness supplies the seams.
A plugin declares what it needs, then contributes one focused capability. Here, the plugin asks for the tools service and registers a model-callable greeting tool.
inject keeps the plugin pending until the required service exists.
defineTool gives the model a schema, validates arguments, and separates the returned value from rendered result content.
Unload is reversible. The registration disposer is attached to the plugin lifecycle.
Start from the repository’s Cordis tutorial. It demonstrates the smallest useful path: a TypeScript plugin, a composition file, and the real harness tool pipeline.
cordis.yml
# Compose the dependencies first
- name: '@deepseek-ai/dsh-system-prompt'
- name: '@deepseek-ai/dsh-tools'
- name: './tool-logger.ts'
- name: './greet-tool.ts'
1. Creategreet-tool.ts and register greet.
2. Compose the system-prompt and tools providers plus your plugin.
3. Run the Cordis tutorial launcher, then observe the tool result event.
4. Graduate the plugin into a dsh patch overlay once the behaviour is useful.
Use it when you want the agent to be a system, not a chat box.
DeepSeek Harness gives you a composable runtime: choose a surface, keep a durable session stream, and extend the system through explicit seams.
Good fit
Developer tools, local coding workflows, CI agents, product integrations, event-triggered reviews, and experiments where you want to swap parts without rewriting the whole harness.
Be cautious
Untrusted workloads, sensitive credentials, production-critical automation, or any environment where the current developer-preview status and sandbox limits are unacceptable.