dsh-agent-team gives DeepSeek Harness agents that don't reset. Each agent is a durable Member with its own memory, notes, and skills — the Member you set up last week is still the same one this week, after its session ended, its context rolled over, or DSH restarted. You set the direction; Workspaces organize teams per project, Channels route responsibilities, and Task Threads keep one line of progress.
An opt-in plugin for DeepSeek Harness: install it only where Team mode is needed; ordinary DSH sessions keep their normal preset roster.
- Agents are first-class team members, not just sessions. Each member keeps its own memory, responsibility boundaries, and private space (memory, notes, and skills), while all agents collaborate in one shared project Workspace; multiple Workspaces manage multiple teams.
- Workspaces organize everything. Different projects live in different Workspaces, each managing its own Agents and Channels.
- The Human routes Channels and responsibilities. You decide who is in which channel and what they own; mentions route work to the right agent.
- Task Threads carry one line of progress. Claims set the direction, Threads hold the context, and multiple session agents advance the same line of work without talking past each other — the facts of the work live in one Thread.
- No context babysitting. Members manage their own context: roll over to a fresh one and stay on duty (
context_rollover), or return to a past anchor (context_timeline/context_checkpoint); pending work survives switches and restarts, and memory and notes keep accumulating — a member carries its full memory into every new context.
Team mode lives inside the ordinary DSH Web UI: Channels carry the discussion, the Inbox gathers what needs you, and Task Threads keep one line of progress.
The Human Inbox leads with unread Threads that need you, followed by recently active ones:
A Task Thread keeps Claims, Agent handoffs, Human acceptance, and follow-up replies in one durable context.
If this looks useful, a star on GitHub helps other DSH users find it.
This release is certified against DSH 0.1.5-rc.1. If dsh is not installed yet, start DSH with the official package:
npx @deepseek-ai/dsh webStop it, then install Agent Team into the web profile:
dsh plugin --profile web add @wowyuarm/dsh-agent-teamdsh webDo not start DSH from its source checkout (pnpm dsh web): source mode loads a second copy of the scope module, so every member reports selected preset is not team-enabled. Always start the compiled CLI.
Agent Team is opt-in. Installing it adds the bundle to the web profile; it does not modify the Harness installation or shipped defaults.
Before starting the UI, you can inspect the composed profile:
dsh --profile web --dump-configThe output should include Team rows such as wowyuarm-agent-team-scope and wowyuarm-agent-team-client. In the browser, enter Team mode from the DSH navigation. The first useful path is:
Team mode
└── select a Workspace
├── Channels -> New Channel -> send the first message
└── Agents -> Add Agent -> choose its initial Channels
Create an Agent only in a trusted Workspace. The Team Member preset intentionally grants managed Agent Sessions danger-full-access.
Three other DSH plugins carry similar names and solve a different problem — one of them may fit you better:
| Plugin | What it is | Its unit of work |
|---|---|---|
NanmiCoder/dsh-agent-teams |
Turns the current DSH session into a captain that assembles sub-agents, splits a goal into dependency-aware tasks, and coordinates them through direct messages | one session |
toolclub/dsh-agent-team-gui |
A reusable plan → implement → review team with a model chosen per member, and a Run Center for token usage | one workflow run |
limuyang2/agent-team — publishes @limuyang2/dsh-agent-team |
Builds a team of independent root agents inside one DSH window: mix models and providers, assign one Leader, and let every member work in its own conversation over a shared Workspace | one assembled team |
dsh-agent-team (this plugin) |
Every agent is a durable Member identity with its own private memory, notes and skills; Channels and responsibilities are yours to assign, and a Task Thread is one line of progress | a standing team |
The practical difference: a Member you created last week is still the same Member today — same memory, same responsibilities, same private notes — after its session ended, its context rolled over, or DSH restarted. In the other three, a team is assembled around the work at hand — a session, a workflow run, or a Leader-led team.
Remove the bundle from the profile; this also removes its composed layers:
dsh plugin --profile web remove @wowyuarm/dsh-agent-team- A durable single-host Team with Channels, Messages, Tasks, Threads, Claims, and Agent membership.
- A Web Client for Human control: create Channels and Agents, manage membership, send Messages, open Threads, and handle Tasks.
- An isolated
team-memberpreset with five model-facing tools:team_inbox,team_thread,team_message,team_claim, andteam_view. - A pull-based collaboration protocol. Agent Inbox admission is durable, but it does not claim that the model has already processed the update.
The Team is one collaboration domain per DSH home. Its append-only operation ledger is the authority; UI, Remote responses, tools, Inbox, and other projections derive from committed operations. Ordinary DSH Sessions keep the profile's normal preset roster and do not receive Team tools or guidance.
For development, install the local bundle into the same profile:
dsh plugin --profile web add /absolute/path/to/dsh-agent-team
dsh webPublished packages include built artifacts. A local checkout needs the adjacent Harness repository only for development checks, not for end-user installation.
Read docs/README.md for the maintained documentation index. The usual checks are:
corepack pnpm install
npm run typecheck
npm test
npm run build
npm run lint
npm run test:browser
npm pack --dry-runnpm run test:browser uses the adjacent ../deepseek-harness checkout, an isolated temporary profile, and /usr/bin/google-chrome (override with CHROME_PATH). It does not need provider credentials. For manual checks, npm run preview:ui loads Team fixtures without model streaming; DEEPSEEK_API_KEY=... npm run preview starts the real provider preview. Both preview commands clean up their temporary state on Ctrl+C.
Architecture and the collaboration contract are documented in docs/architecture.md and docs/team-collaboration.md.
The collaboration shape of dsh-agent-team — named agent members, Channels, Task Threads, @mention routing, and per-member memory — originates from and borrows several design ideas from Raft. Thank you for the work.


