MIT-licensed DSH host plugin plus loopback sidecar that runs agent teams with DAG dispatch, permission presets, Lead-owned approvals, a task board and SSE observability.
DSH integration
Native runtime
Author-claimed
Safety audit
Unaudited
Last verified
2026-11-14
License
MIT
01What can it help you accomplish?
Run a multi-agent team inside one DeepSeek Harness session with a hard member cap and dependency-ordered dispatch
A team whose members are real DSH sub-sessions; tasks dispatch as their DAG dependencies clear, and `team_status` shows member state plus the DAG critical path
DSH users who need several agents working one deliverable without hand-managing each sub-session
Keep approval decisions with the Lead instead of letting a background process grant permissions
Member actions that need approval are forwarded to the Lead and resolved with `team_approve` (allow / deny); the sidecar's `approval` table only mirrors and audits the decision
Teams that must be able to show who authorised what during an agent run
Watch a run as it happens and get an auditable report afterwards
A panel at 127.0.0.1:4317/panel (trace, DAG, approvals) fed by SSE with `lastEventId` resume, plus `team_report` exporting a Markdown run report and audit table
Operators and reviewers who need to replay or explain how a team run unfolded
02How to install into DeepSeek Harness
Prerequisites
- Node.js ≥ 22.15 — the README cites `node:sqlite` ≥ 22.5 and Worker `module.registerHooks` ≥ 22.15, tested on v24.22
- A DSH profile to install into (`--profile web` in every README command)
- Zero dependencies and zero build — no `npm install` needed
Installation steps
- 01
Install the prebuilt npm package: `dsh plugin --profile web add dsh-team-control`
$ dsh plugin --profile web add dsh-team-control
- 02
Optionally add the GUI board: `dsh plugin --profile web add dsh-team-control-ui`
$ dsh plugin --profile web add dsh-team-control-ui
- 03
From a local checkout instead: `git clone https://github.com/hunmer/dsh-team-control.git ~/dsh-team-control`, then `dsh plugin --profile web add "$HOME/dsh-team-control/dsh-plugin"` (and `.../dsh-plugin-ui` for the board)
$ git clone https://github.com/hunmer/dsh-team-control.git ~/dsh-team-control
- 04
Restart DSH (or disable and re-enable the plugin under Settings → Plugins) so the `team_*` tools and the two entries appear
Verify the integration
- After the restart, the `team_*` tools plus the separate 「编排」 and 「任务看板」 entries show up
- `node demo/run-demo.mjs` runs 3 members, a DAG, one approval and one interrupt/resume; `node tests/run-all.mjs` runs the AC-01 ~ AC-19 acceptance suite
Rollback
- `dsh plugin --profile web remove dsh-team-control` — the same applies to the UI package
03DSH integration and capability boundaries
DSH host plugin (`dsh-plugin/` bundle) exposing 20 `team_*` and 4 `board_*` tools; it starts a local sidecar Node process on 127.0.0.1:4317 and drives real DSH sub-sessions via `subagents.startActivation`
Team orchestration tools (`team_*`)
natural-language instructions that the model turns into `team_create` / `team_spawn` / `team_task` / `team_status` / `team_report` / `team_approve` calls→a team of real DSH sub-sessions with a member cap, DAG dependencies and per-member task briefs including acceptance criteria
spawns additional DSH sub-sessions that consume model quotastarts the sidecar process on first usewrites events and task state into the sidecar's SQLite storeApproval forwarding to the Lead
a member sub-session hitting a `permissionPreset` = ask action→the request forwarded to the Lead, resolved with `team_approve` allow / deny and mapped onto the host's `allowed-once` / `rejected`
the sidecar's `approval` table mirrors and audits every decisionWorkspace task board (`board_*`)
tasks queued on the same sidecar→a queue running `todo → planning → planned → inprogress → done / failed`, planned before it executes and sharing the team's event stream
board state is persisted in the sidecar's SQLite databaseSSE panel and CLI observability
the sidecar's event store→a `/panel` view of trace, DAG and approvals with `lastEventId` resume after a disconnect, and the equivalent `dsh-team` CLI (`status` / `dag` / `logs` / `report`)
the sidecar serves the panel's built assets from the same originEvent-sourced state with rebuild
every state change recorded as an `event`→`member_state` as a materialised view that can be fully rebuilt after a crash, with an event stream that can be replayed
state is written to the sidecar's SQLite database under the workspace
04Who is it for? When not to use it?
Good for
- DSH users who need several agents working one deliverable without hand-managing each sub-session
- Teams that must be able to show who authorised what during an agent run
- Operators and reviewers who need to replay or explain how a team run unfolded
Not for
- Node.js ≥ 22.15 is required (`node:sqlite` ≥ 22.5 and Worker `module.registerHooks` ≥ 22.15); the README tested v24.22 and notes there are no dependencies and no build step.
- Tool / skill / MCP composition comes from the DSH `agentPreset`: the team sets a default and members may override it, but only `fresh` members support an independent preset because `fork` inherits the Lead's composition.
05Compatibility, maintenance and safety notes
- Node.js ≥ 22.15 is required (`node:sqlite` ≥ 22.5 and Worker `module.registerHooks` ≥ 22.15); the README tested v24.22 and notes there are no dependencies and no build step.
- The sidecar is a separate Node process listening only on 127.0.0.1:4317, started by the host plugin on demand; the panel and CLI reach it over REST + SSE at that loopback address.
- Tool / skill / MCP composition comes from the DSH `agentPreset`: the team sets a default and members may override it, but only `fresh` members support an independent preset because `fork` inherits the Lead's composition.
- Every team member is a real DSH sub-session, so a team run spawns N additional model sessions on top of the Lead — the member cap and DAG dispatch bound that cost but do not remove it.
MIT · README evidence only, no GitHub release, no security audit
06Frequently asked questions
How do I install dsh-team-control into DeepSeek Harness?
Run `dsh plugin --profile web add dsh-team-control`, and optionally `dsh plugin --profile web add dsh-team-control-ui` for the GUI board. Then restart DSH (or disable and re-enable the plugin under Settings → Plugins) so the `team_*` tools and the separate 编排 / 任务看板 entries appear. Node.js ≥ 22.15 is required, and there is no `npm install` or build step.
Does the sidecar take over permissions?
No. `permissionPreset` is applied to the member sub-session, approval requests are forwarded by the plugin to the Lead, and the sidecar's `approval` table only mirrors and audits the decision — `team_approve` maps to the host's `allowed-once` or `rejected`.
What exactly is a team member in DSH terms?
A real DSH sub-session: the plugin starts it with `subagents.startActivation` and the member writes back with `team_report_task`, which lets the sidecar advance dependencies and wake the next wave. Because of that, a team of N members runs N extra model sessions.
How do I check the install and watch a run?
Run `node demo/run-demo.mjs` for a 3-member DAG with one approval and one interrupt/resume, or `node tests/run-all.mjs` for the AC-01 ~ AC-19 acceptance suite. At runtime the panel is at `http://127.0.0.1:4317/panel` once the plugin has started the sidecar, and `team_report` exports a Markdown run report plus audit table.
How do I remove it again?
`dsh plugin --profile web remove dsh-team-control`, and the same for the UI package. The README states the removal command but does not describe what happens to the sidecar's stored events and task board.
07Related DSH workflows
archify
by tt-a1i
Turn any idea, plan, or codebase into a beautiful interactive diagram. An agent skill for Claude Code, Codex, and more.
openviking
by volcengine
Self-evolving Context Database for AI Agents. Unify Agent Memory, Knowledge RAG and Skills.
aitoearn
by yikart
Let's use AI to Earn!
learn-harness-engineering
by walkinglabs
Harness engineering beginner tutorial, from 0 to 1
08Data and sources
给 DeepSeek Harness 的 Agent Team 加一个独立 sidecar——成员上限可配、DAG 依赖自动派发、按成员分配 DSH 权限预设(permission presets)、成员审批转发给 Lead 决定、事件流可…
sidecar 是独立 Node 进程(`bin/dsh-team.mjs`,默认只监听 `127.0.0.1:4317`),由 Host 插件按需拉起;每个成员都是一个真的 DSH 子会话。
`dsh-plugin/` | DSH Host bundle:20 个 `team_*` + 4 个 `board_*` 工具 + sidecar 生命周期 + 子会话成员调度 + 审批转发
This page is generated from the project’s public documentation, repository metadata and a structured parse of DSH Plugins; last verified on 2026-11-14. Found an error? Submit a correction.
Best DeepSeek Harness Plugins
Twelve plugins worth installing first — picked from the whole catalog, across every category.
