Connect dsh to Chorus
August 25, 2026 · View on GitHub
This guide connects DeepSeek Harness (dsh) to Chorus through the public
@chorus-aidlc/chorus-dsh npm bundle. Chorus does not distribute a hosted dsh
installer or copy plugin files and credentials into $DSH_HOME.
Prerequisites
- A reachable Chorus instance, such as
http://localhost:8637 - DeepSeek Harness
0.1.0-rc.7available asdsh - pnpm available on
PATH(the dsh plugin command delegates package management to pnpm) - A Chorus agent API key created under Settings -> Agents
Interactive profile
Export the connection for the shell that launches dsh:
export CHORUS_URL="http://localhost:8637"
export CHORUS_API_KEY="cho_your_api_key"
Add the bundle to the profile you use (the -w flag is required — a dsh profile
is a pnpm workspace root, so pnpm refuses to add a dependency without it):
dsh plugin --profile <name> add @chorus-aidlc/chorus-dsh -w
dsh owns this profile's package state. Its base/profile installation satisfies the bundle's four peer plugins:
@deepseek-ai/dsh-mcp-client@deepseek-ai/dsh-skill-filesystem@deepseek-ai/dsh-tool-skill@deepseek-ai/dsh-persona
Provision your Chorus credentials with chorus agents add:
chorus agents add --agents dsh --dsh-profile <name>
chorus agents add validates your key and seeds CHORUS_URL + CHORUS_API_KEY into
~/.chorus/daemon.json (mode 0600), and adds the @chorus-aidlc/chorus-dsh
bundle to the profile if it is not already present. It reads the values from the
shell environment above and prompts for anything missing on a TTY. Don't have
the chorus CLI yet? Install it globally with npm install -g @chorus-aidlc/chorus@0.17.0,
then run chorus agents add --agents dsh --dsh-profile <name>.
For a dsh agent, chorus agents add ALSO writes CHORUS_URL, CHORUS_API_KEY,
and CHORUS_AGENT_PROFILE (this agent's UUID) into $DSH_HOME/.env (default
~/.dsh/.env, mode 0600, preserving any unrelated lines). This is dsh's own
credential channel: dsh scrubs credential-shaped variables from tool subprocesses,
so the OpenSpec document-mirror wrapper cannot read the URL/key from the shell. The
wrapper prefers the chorus mcp CLI when it is on PATH; where the CLI is absent —
for example when chorus agents add was run via npx rather than a global install,
which does not persist chorus on PATH — it reads CHORUS_URL / CHORUS_API_KEY
from $DSH_HOME/.env. (This restores what the retired dsh-credentials.sh bootstrap
used to write.)
CHORUS_AGENT_PROFILE is not a secret, so dsh does NOT scrub it: dsh loads
$DSH_HOME/.env into the session and the profile reaches tools directly on the
environment. It names WHICH agent this profile acts as, so on a machine with several
configured agents the wrapper deterministically acts as this one — it delegates
chorus mcp call --agent <profile>, resolving the key from ~/.chorus/daemon.json.
Because it is persisted here, you do NOT need to export CHORUS_AGENT_PROFILE by
hand for dsh (the other agents, which have no .env channel, still get that export
hint from chorus agents add).
Launch the same profile:
dsh --profile <name>
Then ask it to check in to chorus. It should call chorus_checkin and return
its identity, permissions, and assignments.
Bundle contents
The npm package carries the Chorus lifecycle integration, inline persona and instructions, MCP configuration, and these 14 packaged skills:
chorus, idea-chorus, proposal-chorus, develop-chorus, yolo-chorus,
review-chorus, quick-dev-chorus, brainstorm-chorus,
openspec-aware-chorus, orchestrate-chorus, docs-chorus,
proposal-reviewer-chorus, task-reviewer-chorus, and
code-reviewer-chorus.
Chorus daemon
Unattended daemon wakes via the dsh backend are not available in this release. The dsh daemon backend is temporarily offline while the plugin ships first; use dsh interactively (above) for now. Daemon support will return in a later release.
Filesystem ownership
- dsh owns profile package state created by
dsh plugin. - Chorus writes no package, skill, preset, or instruction file beneath
$DSH_HOME. The one exception is credentials/identity:chorus agents addwrites$DSH_HOME/.env(CHORUS_URL+CHORUS_API_KEY+CHORUS_AGENT_PROFILE, mode 0600, unrelated lines preserved) — dsh's sanctioned channel, read by the document-mirror wrapper when thechorusCLI is unavailable.
Troubleshooting
dshorpnpmnot found: install both prerequisites and open a new shell.- Package not found: verify registry access and the package name, then rerun
the
dsh plugin --profile <name> addcommand. - Peer resolution failed: update the profile to rc.7-compatible dsh packages.
- Authentication failed: export a reachable
CHORUS_URLand the correctcho_agent key in the launching environment. - Check-in failed after a profile update: restart that dsh profile so the effective composition reloads.