Introduction¶
DeepSeek Harness (DSH) reuses each conversation onto a single plumb serve connection. DSH’s MCP client does not send identity: there is no per-conversation session ID and no per-call _meta. Plumb’s isolation layer (agent workspace sharding, read tracking, and email addressing) relies on claimed identity, so unrecognized conversations can force-lock each other’s workspaces. The common mitigation is to add instructions in ~/.dsh/AGENTS.md, but this only applies to the main conversation. DSH subagents run in-process with separate system prompts and no parent context, so they are structurally anonymous.
The dsh-plumb-identity plugin solves this problem by providing a stable plumb session identity for each DSH conversation, workspace, and subagent. It enforces this identity at the transport layer rather than relying on instructions.
Installation and Activation¶
This plugin depends on a running plumb daemon (plumb serve is available as an MCP server named plumb).
Recommended Method: Configuration Bundle Installation¶
The default plugin installation includes a dsh.bundle patch, which is mounted automatically and applies the default configuration. It must be installed under both the web and headless profiles:
dsh plugin --profile web add dsh-plumb-identity
dsh plugin --profile headless add dsh-plumb-identity
After installation, restart the dsh process because a running process does not reload the patch layer.
Alternative Method: Manual Patch¶
If the bundle is not installed, manually append the patch lines to ~/.dsh/cordis.patch.yml:
- insert:
- id: dsh-plumb-identity
name: dsh-plumb-identity
config:
serverName: plumb
Development Debugging¶
If pointing to a local checkout, first remove or disable the bundle mount to avoid duplicate loader entry IDs:
- insert:
- id: dsh-plumb-identity
name: 'file:///absolute/path/to/dsh-plumb-identity/dsh-plumb-identity.mjs'
config: { serverName: plumb, logEvents: true }
Core Features¶
- Stable Session Identity: Provides a stable plumb session ID for each DSH conversation, workspace, and subagent.
- Transport-Layer Enforcement: Enforces identity at the MCP transport layer rather than relying on instructions.
- Active Declaration: Proactively sends
session_startrequests and adds_metamarkers totools/call. - Fail-Open: If the SDK is missing or the declaration is rejected, it remains fail-open and does not interrupt tool calls.
- Flexible Configuration: Supports adjusting behavior through configuration options or using a bundle for one-click installation.
Configuration Options¶
All configuration options are optional. The plugin uses plumb as the default MCP server name.
| Field | Default | Description |
|---|---|---|
serverName |
plumb |
The name of the MCP server to protect (tool calls must match mcp__<serverName>__*) |
idPrefix |
dsh |
The first segment of the generated ID |
purpose |
dsh |
The purpose label for the conversation session_start |
subagentPurpose |
dsh-subagent |
The purpose label when the session header shows parentSession/delegationDepth |
detail |
brief |
The payload size for the proactive session_start |
excludeEnv |
["PAUTA_RUN_ID"] |
When any listed environment variable is set, completely exclude that environment |
connectMarker |
plumb |
The substring used to match the stdio command to identify a plumb connection |
logEvents |
false |
Whether to output a debug line for stamp/capture on each call |
sdkPath |
DSH profile tree | The absolute path to the MCP SDK (client/index.js), used for nonstandard installations |
Notes¶
- Dependency Versions: Requires DSH 0.1.1-rc.2+ and plumb 0.17.x.
- Installation Conflicts: Installing the bundle and manually adding an
insertentry cause a conflict (duplicate loader entry ID). If switching methods, first remove the entry added by the other method. - Environment Exclusion: Setting
excludeEnvto['PAUTA_RUN_ID']completely excludes that environment. No plugins are mounted in excluded environments, and their plumb calls have no identity, which may cause workspace pin conflicts.