Preface¶
DeepSeek Harness (dsh) is an agent runtime open-sourced by DeepSeek AI, with the architectural slogan “Everything is a plugin”: model adapters, tools, sessions, approval policies, and even the UI are all made into replaceable plugin layers. It is currently in developer preview, and the official repository notes that there will be breaking compatibility changes.
On the other hand, Multica uses a native daemon to schedule pre-installed AI programming tools: Claude Code, Codex, and Cursor Agent can all be discovered and tasked by it. DeepSeek Harness is also on its detection list, with the command name dsh. The problem is that dsh’s default Web UI or interactive sessions cannot be directly called by Multica as a runtime. A standardized protocol is needed between the two sides, rather than modifying the DeepSeek Harness itself.
dsh-multica-runtime is this external bridge. It is built on top of @deepseek-ai/dsh-base, uses a versioned JSONL protocol over stdio, and allows the Multica daemon to treat dsh as a runtime that can be detected, canceled, and resume sessions. This article is collated based on the plugin directory page, GitHub repository README/source code, and Multica official documentation.
The community plugin directory deepseek-harness-plugin.com is an independent site and has no official affiliation with DeepSeek / FunRec. Do not treat it as an official app store.
What is this¶
dsh-multica-runtime is a DSH plugin of the “Development & Runtime” category. The directory page lists the maintainer as forrestchang, with an inclusion date of 2026-08-15. The GitHub repository address was originally written as forrestchang/dsh-multica-runtime, but the actual current ownership is under the multica-ai organization. Visiting the original URL redirects to multica-ai/dsh-multica-runtime. The repository topics include dsh and dsh-plugin, and as of the verification for this article (2026-08-18), GitHub shows 46 stars.
The problem it solves can be summed up in one sentence: provide Multica with a callable dsh runtime without modifying or embedding DeepSeek Harness source code. The README refers to it as an out-of-tree runtime bridge, and the repository only contains the Multica integration layer, with dependent @deepseek-ai/dsh-* packages from the public npm registry. The currently verified version is @deepseek-ai/dsh@0.1.0-rc.6 and its sibling packages.
The npm package name is @multica-ai/dsh-runtime, version 0.1.0-private.1, with private set to true in package.json and the license field marked UNLICENSED. There is no SPDX license listed on GitHub either. The directory page states that “you can view the source code and install and use it for free”, which is not equivalent to this license statement. You should read the source code and license terms yourself before installing.
Core Features¶
Combination method without modifying DSH itself¶
DeepSeek Harness runtime instances are composed of profiles: first load @deepseek-ai/dsh-base, then load external bundles. This plugin declares a dsh.bundle.patch in package.json, pointing to cordis.patch.yml. The patch does several things different from the Web UI:
- Disable hmr to avoid conflicts between hot updates and process exit after a task completes.
- Disable telemetry-otel, as explicitly stated in the README that DSH telemetry is disabled by this bundle patch.
- The session persistence directory reads the environment variable MULTICA_DSH_SESSION_ROOT first.
- Insert the headless-runner, with the package name @multica-ai/dsh-runtime mounted, without exposing an HTTP listener.
- The system prompt specifies that this is a headless runtime, do not call ask_user_question; when user approval is truly needed, include the options in the final response.
In the source code, approval requests are handled as one-time allowances (allowed-once), with no interactive question-and-answer interface. This matches Multica’s model of “daemon launches CLI, retrieves results”.
Versioned JSONL Protocol¶
The protocol version is hardcoded to 1, with one JSON line per query, sent over stdin/stdout. Diagnostic information is only written to stderr, and stdout only carries protocol frames. Multica will only register this runtime after dsh --profile multica --probe returns protocol version 1.
Upon successful detection, stdout will output a frame similar to the following (fields come from source code constants, plugin_version is currently 0.1.0-private.1):
{"v":1,"type":"probe","runtime":"dsh","plugin_version":"0.1.0-private.1","protocol_version":1}
In stdio mode, the process first sends a ready frame, then waits for a single execute command. The capabilities declared in the ready frame include: session resumption, collaborative cancellation, model discovery, thinking intensity, token usage, tool events, and two transports for MCP: stdio and streamable-http.
One process only accepts one execute. Subsequent cancel commands with the same request_id will cancel the running agent. Commands larger than 8 MiB or with a protocol version other than 1 will be rejected with a protocol_error.
Available fields for execute include the working directory cwd (must be an absolute path), prompt, optional resume_session_id, model and thinking intensity, and a set of MCP server configurations. When resuming a session, if the original session’s working directory does not match the current cwd, it will fail with DSH_RESUME_REJECTED instead of silently changing the directory and continuing.
During runtime, the bridge layer translates DSH session events into protocol frames: text, thinking, tool_call, tool_result, usage, and the final result (completed / failed / aborted / cancelled). Tool outputs larger than 256 KiB will be truncated and marked with truncated.
Models, MCP and Task Tokens¶
The model list is not hardcoded in the plugin, but queried from DSH’s own LLM service. The Multica documentation requires using dsh --profile multica --list-models to get the list, with model IDs in the format deepseek-official/deepseek-chat, and the full ID must be used when selecting a model. The environment variable MULTICA_DSH_MODEL can also specify the default model, with the value also in the provider/model format.
For MCP, the servers configured by Multica in the agent configuration will be passed to this execution via the protocol. The bridge layer then converts them into DSH’s @deepseek-ai/dsh-mcp-client: local processes use stdio, and remote ones use streamable-HTTP. In Multica’s tool comparison table, the DeepSeek Harness row has “Multica-managed MCP” and “Session Resumption” both checked; the Skill injection directory is .dsh/skills/.
DSH will by default clear environment variables that look like secrets from the subprocess environment. This plugin adds a very narrow exception: only allow MULTICA_TOKEN issued by Multica that starts with mat_, so that the multica command in tasks can still carry the task attribution. API keys for model service providers will not go through this path. DEEPSEEK_API_KEY is read by DSH’s own credential mechanism during runtime, and the README explicitly requires not to commit it to this repository.
Installation and Activation¶
The installation command given on the directory page is as follows, executed in the DeepSeek Harness terminal:
dsh plugin add github:forrestchang/dsh-multica-runtime
For reproducible installations, the directory page recommends pinning the commit hash:
dsh plugin add github:forrestchang/dsh-multica-runtime#commit
Replace #commit with the actual commit hash. The current dsh CLI requires --profile when managing plugins. Both the Multica documentation and this repository’s README install the plugin into a profile named multica, and the daemon uses this profile for detection. The actual usage command should be:
dsh plugin --profile multica add github:forrestchang/dsh-multica-runtime
To install from a local checkout, first build the project then add it using an absolute path. The steps from the README are:
pnpm install
pnpm check
pnpm build
dsh plugin --profile multica add /absolute/path/to/multica-dsh-runtime
pnpm check will run type checking, tests, and build in sequence. Replace the path with the absolute path to your local repository.
The Multica side also requires that dsh itself is already installed on the local machine. The official installation instructions are: first install Node.js, then run npm install -g @deepseek-ai/dsh. There are two separate version requirements to note: the Multica documentation requires Node.js 20+; this repository’s package.json specifies engines as ^22.19.0 || >=24.0.0. If building from this repository’s source code, prepare Node.js according to the latter requirement.
Set DEEPSEEK_API_KEY before starting the daemon, or save it in dsh’s own settings. If the dsh installation path is not in your PATH, pass the absolute path to the launcher to the daemon:
export MULTICA_DSH_PATH=/absolute/path/to/dsh
The plugin directory page reminds users that the plugin runs with the permissions of the current dsh process, and may execute code during installation. Inspect the source repository and license before installing.
Typical Usage¶
After installing into the multica profile, first confirm that the protocol detection passes. The daemon will only register DeepSeek Harness after this command succeeds:
dsh --profile multica --probe
View the model list reported by the runtime itself:
dsh --profile multica --list-models
The stdio mode is the entry point used by Multica when actually launching tasks, and generally does not need to be manually run; you can run it separately for troubleshooting:
dsh --profile multica --stdio
After confirming that dsh is accessible on your local terminal and the model credentials have been configured, restart Multica’s daemon:
multica daemon start
If the daemon is already running, restart it:
multica daemon restart
Then open Multica’s runtime page, and DeepSeek Harness should appear under the target machine with an online status. You can then select this runtime when creating or editing an agent. Please select models from the full IDs returned by list-models; if no model is selected, dsh’s default model will be used.
Applicable Scenarios and Notes¶
This tool is suitable for users who are already using Multica to schedule local coding agents and want their tasks to run on DeepSeek Harness. It is not a skin for the dsh Web UI, nor a general-purpose MCP gateway. The repository has a very narrow scope: it only acts as a bridge between Multica and dsh.
There are several key points to remember before use:
1. Permissions and Licensing. The plugin runs with the permissions of the current dsh process. The package.json license is UNLICENSED, and no SPDX license is stated on GitHub. Do not assume it uses the MIT license and redistribute it.
2. Preview Version Compatibility. DeepSeek Harness is in developer preview, and official notes state that there will be breaking changes. This repository currently verifies compatibility with @deepseek-ai/dsh@0.1.0-rc.6. After upgrading dsh, re-run pnpm check and --probe.
3. No Interactive Approval. The runtime is headless: no prompts will pop up, and approvals are handled as one-time allowances. It is not suitable for workflows that require manual confirmation at each step.
4. One Task Per Process. Repeated execute commands will be rejected by the protocol. Session resumption also requires matching working directories.
5. Do Not Commit Secrets. API keys, MCP secrets, session logs, and generated profiles should not be committed. stdout is the protocol channel; use stderr for troubleshooting.
6. Node.js and PATH. Being able to run dsh in your terminal does not mean that the Desktop or background daemon can find it. Use MULTICA_DSH_PATH to specify the absolute path if necessary.
Summary¶
dsh-multica-runtime connects DeepSeek Harness to Multica in a restrained way: without modifying upstream code or embedding source code, it only uses a bundle layer on the profile, and exposes a version 1 JSONL protocol via stdio. After successful detection, the model list can be retrieved, and the API key is ready, Multica can treat dsh as a local runtime alongside other coding CLIs.
Directory page: https://deepseek-harness-plugin.com/zh-CN/plugins/dsh-multica-runtime-forrestchang/
GitHub: https://github.com/forrestchang/dsh-multica-runtime (currently redirects to https://github.com/multica-ai/dsh-multica-runtime)