Bundle
@wuxie233/dsh-agent-teams
AgentTeams for DSH (Wuxie233 fork): per-member model routing, read-only role deny lists
- Source
- Wuxie233
- License
- MIT
- Updated
- Updated 8 days ago
Readme
<p align="right">
<strong>English</strong> · <a href="./README_ZH.md">简体中文</a>
</p>
<p align="center">
<img src="./assets/readme/hero.svg" width="100%" alt="dsh-agent-teams turns one DeepSeek Harness session into a coordinated multi-agent team">
</p>
<p align="center">
<a href="https://www.npmjs.com/package/@nanmicoder/dsh-agent-teams"><img src="https://img.shields.io/npm/v/@nanmicoder/dsh-agent-teams.svg" alt="npm version"></a>
<a href="./LICENSE"><img src="https://img.shields.io/npm/l/@nanmicoder/dsh-agent-teams.svg" alt="MIT license"></a>
<img src="https://img.shields.io/badge/DeepSeek%20Harness-plugin-202724" alt="DeepSeek Harness plugin">
</p>
## One prompt. A working team.
`dsh-agent-teams` turns the current DeepSeek Harness session into a captain that can assemble durable sub-agents, split a goal into dependency-aware tasks, and coordinate work through direct messages.
Ask in natural language. The plugin provides the team protocol, ten coordination tools, persistent state, and a live Web UI—without requiring a separate workflow engine.
<p align="center">
<img src="./assets/ui.png" width="100%" alt="DeepSeek Harness conversation with the AgentTeams live activity panel, members, tasks, dependencies, and reports">
</p>
## Why AgentTeams?
| Capability | What it changes |
| --- | --- |
| **Captain-led delegation** | The current session creates the team, assigns roles, and consolidates the final result. |
| **Durable members** | Members are continuable DSH sub-agents that can be woken for focused follow-up turns. |
| **Dependency-aware tasks** | Tasks move through explicit states and cannot be claimed before their dependencies finish. |
| **Direct messaging** | Members send durable mailbox messages directly to teammates or the captain—no relay required. |
| **Live activity panel** | The Web UI shows roles, current work, unread messages, task dependencies, and archived team history. |
## Install
> [!NOTE]
> Requires an existing [DeepSeek Harness](https://github.com/deepseek-ai/deepseek-harness) installation.
### npm
```sh
dsh plugin --profile web add @nanmicoder/dsh-agent-teams
```
### Build from source
```sh
git clone https://github.com/NanmiCoder/dsh-agent-teams.git
cd dsh-agent-teams
pnpm install
pnpm build
dsh plugin --profile web add .
```
Run `pnpm build` again after changing the source. The local plugin install remains linked to this checkout.
Validate the composed profile, restart DSH, and refresh the Web UI:
```sh
dsh --profile web --dump-config
dsh web
```
Then ask for a team directly:
> Use AgentTeams to review the commits after v0.5.3 from performance, security, and product perspectives. Return one consolidated report.
## How it works
1. The current session creates a team and becomes its captain.
2. The captain adds role-specific members backed by continuable sub-agents. Each add creates and claims that member's first task.
3. Later tasks use only returned ids (`t1`, `t2`, …) and assignees that already exist.
4. The spawn brief starts the first task. Later mailbox messages barge in with new instructions; pass `mode=queue` only to wait out the current turn.
5. Members work, update task state, and report directly to the captain or one another.
6. The captain presents the combined result, then archives the complete team record.
Team state is stored under `<workspace>/.agent-teams/`; the Web panel reads that disk truth and combines it with live sub-agent activity.
Member creation is zero-interaction by default: the plugin snapshots the LLM provider, model, and reasoning effort actually used by the captain's current step, and restores that snapshot on later continuations. Only an explicit heterogeneous-team request (for example, “backend on provider A/model X, frontend on provider B/model Y”) supplies a member-specific `provider` + `model`; there is no per-member model or reasoning prompt.
## Configuration
Defaults work without extra setup. A trusted profile can override member behavior:
```yaml
- id: agent-teams
config:
stateDir: .agent-teams
memberProvider: spawn
memberModel: deepseek-v4
memberMaxDepth: 1
# maxMembers: 8 # optional live-member cap; omit for no cap
```
`memberProvider` is the sub-agent runtime backend (`spawn` / `fork`), not an LLM provider. Cross-LLM-provider routing uses the optional `provider` + `model` fields of `agent_teams_add_member`; `memberModel` is only a model default for all members. Omitting `maxMembers` means no live-member cap; an explicit number still rejects overflow.
## Boundaries
- One captain leads one active team at a time.
- Members act only after they are woken; mail remains durable while a participant is idle.
- State is file-backed and serialized within one DSH process; concurrent processes editing the same team are not coordinated.
- The activity panel reports persisted state as-is. Models may occasionally finish work without performing the expected task-state update.
See [docs/usage.md](./docs/usage.md) for the full tool reference, state model, Web UI behavior, configuration, and known limits.
## Plugin development Skill
The repository also ships the open Agent Skills package [`dsh-plugin-development`](./skills/dsh-plugin-development/SKILL.md):
```sh
npx skills add NanmiCoder/dsh-agent-teams --skill dsh-plugin-development
```
## Documentation
| Guide | Covers |
| --- | --- |
| [Usage](./docs/usage.md) | Architecture, UI behavior, tools, configuration, limits, and validation |
| [Self-iteration](./docs/self-iteration-spec.md) | Captain-owned plugin-defect reports filed to this fork's issue tracker |
| [Verification](./docs/verification-guide.md) | Offline, composition, real e2e, and GUI verification |
| [Plugin development](./docs/developing-dsh-plugins.md) | Human-readable guide built from this plugin |
| [README writing](./docs/readme-writing-guide.md) | Repository documentation conventions |
## Development
```sh
pnpm install
pnpm build
pnpm verify
```
## License
[MIT](./LICENSE)
Install
dsh plugin --profile web add github:Wuxie233/dsh-plugin-agent-teams
Profile: web
With the hub plugin installed, ask your agent to install it by name — it resolves the same plan shown here.
dsh plugin --profile web add github:stvlynn/dsh.fish#path:packages/dsh-plugin-hub
install wuxie233-dsh-agent-teams from the hub
- This package builds from source on install. pnpm will ask you to allow its build script — that is permission to run the package’s code on your machine, outside the agent sandbox. Only allow sources you trust.
- This source has no pinned commit, so a later push upstream changes what installs. Prefer pinning a commit.