Back to directory

dsh-team-control

In a curated listMaintenance: Active

hunmer/dsh-team-control

Orchestrates real DSH sub-agents through a local sidecar with DAG dispatch, per-member permissions, approvals, a task board, and SSE observability.

View on GitHub
$ dsh plugin --profile web add dsh-team-control

15

stars

1

forks

TypeScript

Language

MIT

License

2026-10-28

Created

2026-11-13

Last push

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

  1. 01

    Install the prebuilt npm package: `dsh plugin --profile web add dsh-team-control`

    $ dsh plugin --profile web add dsh-team-control

  2. 02

    Optionally add the GUI board: `dsh plugin --profile web add dsh-team-control-ui`

    $ dsh plugin --profile web add dsh-team-control-ui

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

  4. 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 integrationNative runtime

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 store
  • Approval 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 decision
  • Workspace 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 database
  • SSE 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 origin
  • Event-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.
2026-10-282026-11-11Not specified by the author

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.

08Data and sources

  • Author-claimedgithub.com1bc7d8835e98…

    给 DeepSeek Harness 的 Agent Team 加一个独立 sidecar——成员上限可配、DAG 依赖自动派发、按成员分配 DSH 权限预设(permission presets)、成员审批转发给 Lead 决定、事件流可…

  • Author-claimedgithub.com1bc7d8835e98…

    sidecar 是独立 Node 进程(`bin/dsh-team.mjs`,默认只监听 `127.0.0.1:4317`),由 Host 插件按需拉起;每个成员都是一个真的 DSH 子会话。

  • Author-claimedgithub.com1bc7d8835e98…

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

DSH Plugins is an independent community directory of DeepSeek Harness plugins. Not affiliated with or endorsed by DeepSeek. Third-party plugins are not security-audited — review the source before installing.

New DeepSeek Harness plugins, weekly. No spam.