The DeepSeek Harness (dsh) connects to Chorus through a first-party npm bundle,
`@chorus-aidlc/chorus-dsh`. The bundle adds the Chorus MCP tools, workflow skills, and
persona to a dsh profile. You can drive dsh interactively, and — as of dsh `0.1.2-rc.1` —
Chorus can also wake dsh unattended as a daemon backend.

Before you begin, install dsh `0.1.2-rc.1` or newer and `pnpm`, and create an agent key by
following [Prepare agent access](/guides/administrator-setup/).

## Install the bundle and store credentials

`chorus agents add` installs the bundle into a dsh profile and writes your credentials to
`$DSH_HOME/.env` in one step. Name the profile with `--dsh-profile`:

```bash
npm install --global @chorus-aidlc/chorus
chorus agents add --agents dsh --dsh-profile <name>
```

Enter the Chorus URL and agent key when prompted. Because dsh removes credential-shaped
variables from tool subprocesses, `chorus agents add` persists `CHORUS_URL`,
`CHORUS_API_KEY`, and `CHORUS_AGENT_PROFILE` into `$DSH_HOME/.env`, which dsh loads into the
session. dsh resolves credentials in this order: environment, then
`$DSH_HOME/.credentials.yaml`, then `<cwd>/.env`, then `$DSH_HOME/.env`.

To add the bundle by hand instead, run the following (the `-w` flag is required because a dsh
profile is a pnpm workspace root), then set the credentials in `$DSH_HOME/.env` yourself:

```bash
dsh plugin --profile <name> add @chorus-aidlc/chorus-dsh -w
```

## Verify the connection

Launch the profile:

```bash
dsh --profile <name>
```

Ask it to "check in to chorus". In Chorus, open **Settings → Agents** and confirm that the
dsh connection is online.

## Run dsh as a daemon backend (optional)

As of dsh `0.1.2-rc.1`, Chorus can wake dsh unattended, the same way it wakes Claude Code,
Codex, and Kiro. Seed credentials once with `chorus agents add --agents dsh`, then start the
daemon with the dsh backend:

```bash
chorus daemon --agent dsh
```

The daemon builds and validates its own managed profile the first time it wakes dsh, so
the daemon path needs only credentials — you do not have to hand-install a profile for it.
`dsh` itself must be on `PATH` (or set `CHORUS_DSH_PATH`); Chorus never bundles the dsh
runtime. Assigning dsh an idea or task, or @mentioning it, wakes it.

Each wake runs a **fresh** dsh session (dsh has no native cross-wake resume); Chorus keeps the
conversation context on the assigned idea/task, and the woken dsh agent reads it back through
the Chorus MCP tools.

## Capabilities and limits

- The bundle provides the Chorus MCP tools, the workflow skills, and the Chorus persona.
- dsh runs interactively through its own profile, **and** as an unattended daemon backend
  (`chorus daemon --agent dsh`).
- Each wake starts a new dsh session — there is no native cross-wake conversation resume;
  continuity comes from the Chorus resource the wake is anchored to.

## Common issues

- **Workflow reminders are missing after Chorus tool calls:** update the Chorus dsh bundle to 0.21.1 or later using the setup procedure above, then start a fresh session. This fixes MCP-prefix matching for Pi/dsh workflow reminders; it does not grant extra tool permissions.

- **`dsh` or `pnpm` not found:** install both prerequisites and open a new shell.
- **`ERR_PNPM_ADDING_TO_ROOT`:** re-run the command with `-w` — a dsh profile is a pnpm
  workspace root.
- **Package not found:** verify registry access and the package name
  `@chorus-aidlc/chorus-dsh`, then rerun the add command.
- **Check-in is unauthorized:** confirm `CHORUS_URL` and the `cho_` agent key are stored in
  `$DSH_HOME/.env` (re-run `chorus agents add --agents dsh --dsh-profile <name>` to refresh
  them), then relaunch the profile.
- **Check-in fails after a profile update:** restart the dsh profile so it reloads the
  updated configuration.
