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).

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

  1. Stable Session Identity: Provides a stable plumb session ID for each DSH conversation, workspace, and subagent.
  2. Transport-Layer Enforcement: Enforces identity at the MCP transport layer rather than relying on instructions.
  3. Active Declaration: Proactively sends session_start requests and adds _meta markers to tools/call.
  4. Fail-Open: If the SDK is missing or the declaration is rejected, it remains fail-open and does not interrupt tool calls.
  5. 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

  1. Dependency Versions: Requires DSH 0.1.1-rc.2+ and plumb 0.17.x.
  2. Installation Conflicts: Installing the bundle and manually adding an insert entry cause a conflict (duplicate loader entry ID). If switching methods, first remove the entry added by the other method.
  3. Environment Exclusion: Setting excludeEnv to ['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.