dsh-doctor
asdf17128
Find what your DeepSeek Harness (dsh) patches silently broke — dead patches, config fields dropped by whole-config repla…
shaokeyibb/dsh-plugin-product-subagents
Role-based Codex / Claude Code / ACP subagent providers for the DeepSeek Harness — continuable children, durable session recovery, per-role product permissions, and delegation with a permission ceiling.
PROJECT TOPICS
PROJECT README
English | 简体中文
Role-based Codex / Claude Code / ACP subagent providers for the DeepSeek Harness. Turns external agent CLIs into durable, continuable subagents with a declarative role library, per-role product permissions, delegation with a permission ceiling, and cross-platform process launching.
send_message, list_agents, interrupt_agent; attach synchronously with
product_wait).roles/*.json) — general (default), code-review,
explore (never delegates), debug. Delegation defaults ON; a role can ban
it. Unknown roles fall back to general.permissionMode (readonly / default / full) applies to the
remote product and is mapped to each product's own CLI flags.agent acp), CodeBuddy (cbc --acp),
Gemini (gemini --acp) and more via config.providers; no code needed..cmd shims, Windows-safe path escaping;
CI runs macOS / Ubuntu / Windows.PATH and authenticated: claude, codex, or
an ACP CLI (opencode, agent, cbc, …).Paste this to your DeepSeek Harness agent (or any coding agent with shell and file access to the harness home) — it performs every step itself:
Install the
dsh-plugin-product-subagentsplugin into my DeepSeek Harness web profile: runnpm i dsh-plugin-product-subagentsin~/.dsh/profiles/web, then append this row to~/.dsh/profiles/web/cordis.patch.yml—- insert: [{id: product-subagents, name: 'dsh-plugin-product-subagents', config: {idleTimeoutMs: 600000}}]— then tell me to restart the harness so the plugin loads.
That one prompt covers: installing the package into the profile, wiring the
host-plane row, and flagging the required restart. (Before the package is
published, use the local variant: point the row's name at this repo's
lib/index.js instead of the package name.)
npm i dsh-plugin-product-subagents
Then add a host-plane row to your profile's cordis.patch.yml:
- insert:
- id: product-subagents
name: 'dsh-plugin-product-subagents'
config:
idleTimeoutMs: 600000
providers:
cursor: { type: acp, command: agent, args: [acp] }
codebuddy: { type: acp, command: cbc, args: [--acp] }
In a session, the model has six tools:
| Tool | Purpose |
|---|---|
product_delegate |
delegate a task under a role (sync or continuable) |
product_roles |
list the role library |
product_submit |
per-child bridge (continuable children only) |
subagent_progress |
status + internal trace of one child |
product_wait |
block until a child settles, return its answer |
product_agents |
provider availability + live children |
product_delegate role=general task="Refactor demo-project/calc.js and run its tests"
product_wait subagent_id=<childId>
config:
providers: { cursor: { type: acp, command: agent, args: [acp] } }
idleTimeoutMs: 600000 # settled children release their remote session
# after this idle period (0 disables)
maxConcurrentChildren: 8 # cap on simultaneous continuable children
rolesDir: <path> # declarative role library (default: roles/)
registryPath: <path> # durable remote-session registry
Each role file:
{
"id": "code-review",
"description": "Review code for bugs, security, maintainability (read-only).",
"provider": "claude-code",
"permissionMode": "readonly",
"allowDelegation": true,
"instructions": "You are a code reviewer. READ-ONLY: never modify files. …"
}
permissionMode maps to product flags: readonly (claude
--permission-mode plan / codex --sandbox read-only), full (claude
--dangerously-skip-permissions / codex
--dangerously-bypass-approvals-and-sandbox).readonly < default < full; a child cannot spawn
a descendant with a higher mode.config.providers accepts any ACP-capable CLI — the generic bridge handles a
persistent process, session/load resume, and dead-process reconnect:
providers:
cursor: { type: acp, command: agent, args: [acp] } # Cursor CLI
codebuddy: { type: acp, command: cbc, args: [--acp] } # CodeBuddy
gemini: { type: acp, command: gemini, args: [--acp] } # Gemini CLI
opencode: { type: acp, command: opencode, args: [acp] } # opencode
Providers appear in the delegation enum only when their command is detected
on PATH. Built-ins (claude-code, codex, acp) can be overridden with
the same keys.
npm install
npm test # node:test — pure logic + fake bridge, no CLIs or keys
npm run lint # syntax-check every module
See docs/ARCHITECTURE.md for the bridge contract, the permission model, and how to add products. CI runs the suite on macOS / Ubuntu / Windows × Node 18/20/22.
This is a configuration-as-trust-boundary tool: it spawns whatever CLIs
you configure, and full passes the products' own "bypass all permission
checks" flags. See SECURITY.md.
MIT
CLASSIFICATION EVIDENCE
系统优先读取 GitHub Topics,再与站内分类词典和词根规则比对。