Dogtiti/dsh-subagent-bridge ↗★ 5
dsh-subagent-bridge
Subagent bridge: lets Codex delegate a task to DeepSeek Harness the way it would spawn a subagent (one call, waits for the answer), plus a codex_dispatch tool for the reverse direction.
설치
$
npx -p @deepseek-ai/dsh dsh plugin --profile web add github:Dogtiti/dsh-subagent-bridgeUsage
// Synchronous: wait for the turn, get the answer
dsh_task({ prompt: "Review the error handling in src/bridge.ts", cwd: "/repo" })
// Asynchronous: hand out work, then wait for all of it
dsh_spawn({ task_name: "audit_api", message: "…", cwd: "/repo" })
dsh_spawn({ task_name: "audit_ui", message: "…", cwd: "/repo" })
dsh_wait({ targets: ["audit_api", "audit_ui"], timeoutMs: 240000 })
// Continue an existing worker
dsh_followup({ worker: "audit_api", message: "Expand item 3 and attach a patch" })
Configuration
- insert:
- id: subagent-bridge
name: 'dsh-subagent-bridge'
config:
port: 47821
| Key | Default | Description |
|---|---|---|
enabled | true | Master switch; when off, no listener and no endpoint file |
port | 47821 | Loopback port; fixed so the client URL survives restarts |
endpointFile | ~/.dsh/bridge/endpoint.json | Where the endpoint and token are written |
maxResultChars | 20000 | Cap on a single result payload (the head is kept) |
taskTimeoutSeconds | 300 | dsh_task wait cap (client may override, max 240) |
assumeDefaults | true | Append the decide-and-continue instruction |
assumptionPolicy | (empty) | Replacement text for the instruction; empty uses the built-in English default |
workersFile | ~/.dsh/bridge/workers.json | Worker registry (0600) |
maxHops | 1 | Delegation depth limit |
dispatchPerMinute | 10 | Dispatches allowed per window |
dispatchWindowMs | 60000 | Window length |
maxWorkersPerRoot | 4 | Workers per working directory |
maxWorkers | 12 | Global worker cap |
workerTtlMs | 86400000 | Records stop counting once stale |
waitTimeoutMs | 240000 | Default dsh_wait timeout |
readWaitSeconds | 25 | Default dsh_read_result long-poll |
codexBin | codex | Codex executable; a value with / is resolved strictly |
codexSandbox | workspace-write | Default sandbox for codex_dispatch |
codexTimeoutMs | 300000 | Per-run timeout |
claudeBin | claude | Claude Code executable |
claudeModel | (empty) | Empty means the CLI's own setting |
claudeTimeoutMs | 300000 | Per-run timeout |
A busy port is reported, not silently replaced: the endpoint file gets an error field and the host log prints subagent-bridge: could not start on port ….