dsh-web
zhu1090093659/dsh-webDeepSeek Harness(DSH)Web 插件聚合生态包 · 一切皆插件,创意工坊分发(dsh-market.com)
#dsh-plugin Durable agent swarms for DeepSeek Harness: one-command planning, peer collaboration, independent verification, and an embedded sidebar.
English · 简体中文
Describe what you want to build, fix or investigate. Agent Swarm brings a team of collaborating agents into DeepSeek Harness, with shared objectives, visible activity, independent review and a clear path back to your project.
/agent-swarm Fix the duplicate search results. Preserve the API, add regression tests, and independently verify the change.
The primary agent inspects your project, organizes the work and chooses the team and resource budgets. You follow the mission in the sidebar and inspect the result when it is ready.
v0.7.0 · MIT · Local Git projects · Native Harness integration
Get started · See the UI · How it works · 中文介绍
| Your goal | How the team helps |
|---|---|
| Fix a difficult bug | Investigate the cause, implement a repair and have another member check the edge cases. |
| Deliver a feature across several parts of a project | Split independent work, coordinate dependencies and assemble a reviewed result. |
| Understand unfamiliar code | Gather evidence, compare findings and produce an analysis without changing the code when requested. |
You describe the outcome. The primary agent manages the collaboration. There is no required team-size form or token-budget setup before each mission. Members can exchange findings, ask questions, challenge evidence and hand off partial work within the mission's scope.
Existing edits remain part of the baseline, so they are not presented as new swarm output. Detected merge conflicts are reported before applying changes.
The sidebar answers three practical questions: Who is working? What just changed? What needs attention?
The UI follows host state without making model requests to render updates. Operation activity is a liveness signal, not a guarantee that useful work has finished.
Captured on September 15, 2026 with simulated tasks and events. The surrounding page is a local preview shell, not the Harness application. Click an image to enlarge it.
Current plugin components — these screenshots render the actual ActivityPanel with simulated data.
Design previews — the shared avatars and live activity components are integrated into the plugin. The complete simplified layout below remains a renderer prototype.
A long task needs more than a launch button. Agent Swarm keeps assignments, evidence, decisions and recovery state on disk so the team can continue through supported interruption and restart paths.
Repair without losing the task's purpose. When an independent review rejects a task, the primary reworks it in place: swarm_control with action: "resume" re-opens the rejected task for its author, who stays pinned to it and resumes from the rejected commit, and re-opens the review that rejected it with the same reviewer, so the resubmission is reviewed at once without a new review task. A task can be reworked maxRework times (default 2; raise it in swarm_control changes); after that, a replacement proposed with replaces answers for every criterion of the task it replaces, the mission criteria it covers included, without copying them; downstream dependencies follow the accepted repair, and accepting it retires the whole chain it replaced. The rejected commit, the rejection reason and the claims of that round stay on the task and its review as archived history: they cannot be challenged again and never block completion. A challenge disputes only a claim a verdict can still judge: a claim the rejection refuted (before the rework too), one a verified claim superseded, one of cancelled work and a review's own evidence are refused with [evidence_not_judgeable], which names where the dispute can still go (a live claim to challenge instead, the primary's rework or replacement, or swarm_escalate to the primary), so such a dispute can no longer cancel the review that rejected a task or re-open accepted work. The primary can also revise execution allowances and unsubmitted task policy on the same task, repair a failed saved plan at a new revision, and strengthen submitted checks in place without changing the artifact.
Bring decisions back to the primary agent. Rejections, blocked work, provider problems and exhausted limits can generate durable notices. The primary agent can revise the plan, arrange a repair or adjust a budget with a recorded reason. Ordinary recovery decisions do not require you to configure the swarm again.
Completion keeps its meaning. Unfinished synthesis and review tasks stay on the board and bring the primary back to repair them. An empty runnable queue cannot silently cancel required work or mark the mission complete.
Keep resource use visible. The primary agent chooses team size, task limits, step and token budgets, recovery allowances and verification timeouts. Usage is tracked across the team, with cache and output breakdowns and the primary conversation's usage shown separately. Resuming does not reset consumption. If a native worker session must be recreated, a durable accounting generation keeps new usage separate from the old watermark while preserving lifetime totals.
Recovery runs within the mission's limits. Notifications remain queued while the primary agent is offline, and a stuck native model call may delay when it can process them. Provider-reported usage and estimates for requests still in flight can also allow a budget overshoot.
The primary agent chooses the direction. The runtime coordinates the work. Harness runs the agents.
flowchart TD
G["Your goal"] --> P["Primary agent · plan, team and budgets"]
P -->|Plan and decisions| R["Swarm runtime · durable coordination"]
R -->|Decision notices| P
R -->|Ready assignments| W["Native workers · parallel collaboration"]
W -->|Submitted artifact and evidence| V["Independent review + host checks"]
V -->|Verdict or repair needed| R
R -->|Accepted deliverable| D["Inspect changes · apply to your project"]
Freedom inside a clear contract. Workers share evidence and propose further work; the runtime checks scope, dependencies and review requirements. Peer messages cannot expand permissions, raise budgets or waive independent review.
Recovery is part of coordination. Durable state links each task to its attempt, artifact and decisions. When an attempt is interrupted, the runtime fences stale writes and uses the supported checkpoint, retry or reassignment path. Cases that need judgment return to the primary agent. Accepted replacements become the prerequisites for downstream work.
Native execution, one visible mission. Harness supplies model execution, sessions, the inbox, tools and sandboxing. The plugin owns mission coordination and verification policy; the sidebar projects mission state and observed activity. Collaboration messages use the native inbox and session log, while coordination records live in SQLite. No Harness core fork is required.
For the implementation contracts and their origins, see design notes.
Agent Swarm currently ships as a source plugin. You need:
^22.19.0 || >=24.0.0, Git, and macOS or Linux. Work happens in local Git repositories.0.2.1-rc.2 (npm latest and next), at the commit in the exact compatibility matrix. Point DSH_HARNESS_ROOT (or DSH_SOURCE) at the checkout you mean. Without it the scripts take the first built checkout of that release among ~/.dsh/source/current and the sibling deepseek-harness-021rc2 directory, in that order; a checkout of any other release is skipped.git clone https://github.com/TT-Wang/dsh-agent-swarm.git
cd dsh-agent-swarm
export DSH_HARNESS_ROOT="/absolute/path/to/deepseek-harness"
npm run link:dsh
npm run build
node "$DSH_HARNESS_ROOT/apps/cli/lib/bin.js" plugin --profile web add "link:$PWD"
Start Harness from the project you want to work on:
cd /absolute/path/to/your-project
node "$DSH_HARNESS_ROOT/apps/cli/lib/bin.js" --profile web
Open the authenticated launch URL printed by Harness, choose a model in a conversation, and enter /agent-swarm followed by your goal. The command appears in native autocomplete.
Agent Swarm lives in the native right sidebar. The sidebar starts collapsed; send /agent-swarm with your goal to open it automatically, or use the persistent Agent Swarm button at the bottom of the left navigation to open it again. The right sidebar belongs to one conversation: after opening a worker's conversation, open its read-only swarm view with the same button. The UI supports English, Chinese, light and dark themes.
For bundle installation, upgrades, startup recovery and configuration, see the operations guide.
The tests come in two tiers. In a fresh clone, npm ci && npm test runs the hermetic tier, which needs no Harness checkout: package-lock.json pins every package it uses, the 0.2.1-rc.2 Harness packages from npm included. A fresh clone has no node_modules above it, and the hermetic tier and npm run verify refuse a checkout that has one, since packages there would stand in for what npm ci did not install. The host tier and most other suites also need the built checkout, linked with npm run link:dsh after npm ci. npm run verify runs every suite of the gate manifest (the gate block of package.json) whose prerequisites the machine has, and records the others as skipped with the reason. The hosted CI runs it from a fresh clone on macOS, so CI covers only the suites that need no checkout, sandbox or browser; see development and verification.
ba9a758, a root the composed plugin row did not configure stayed in ~/.dsh/agent-swarm whatever DSH_HOME or DSH_AGENT_SWARM_ROOT said: always on the direct mount, and on the bundle mount when a later layer replaced the row's config without both roots. Such an install that ran with another DSH_HOME or with DSH_AGENT_SWARM_ROOT set opens a new, empty store after the upgrade, and nothing on a stock profile says so; nothing adopts the old store, and the storage roots notes give the step that keeps it. Retained worktrees and artifact refs need explicit cleanup; verification checkouts a crash left behind are reclaimed by the mission's next verification that runs declared checks; a registration git left locked before recording its path must be removed by hand.@deepseek-ai/dsh-* peer ranges name only 0.2.1-rc.2. The Harness plugin manager compares them with the running release and, when they exclude it, refuses to install the plugin and skips or disables a mounted one, unless its owner exempts that exact plugin version. 0.1.7-rc.1 introduced this gate, so it no longer runs this plugin unless exempted. Earlier releases have no such check: the plugin logs that the host is unsupported and is not expected to work there, so on them the supported release is a documented claim, not an enforced one. The plugin declares no engines.dsh, so the host reads the same ranges npm does; the profile bundle's requires.harness is declarative.0.1.5-rc.3 and 0.1.7-rc.1 are no longer supported; a28b116 is the last plugin revision that runs on them. 0.2.1-rc.2 reads their session logs but writes session events they refuse: a single bash call can make a session unreadable to them. Back up $DSH_HOME/sessions and the plugin's state before the first start on 0.2.1-rc.2, and do not move a home with live missions back; going back also means going back to a plugin revision up to a28b116. See the move notes.swarm_submit.deliverables (or optional swarm_verify.deliverables for a separate review report); the host can capture those files even when Git ignores them, without changing the source checkout's ignore rules. Submission returns commit-bound blob IDs and sizes. Reviewers use the pinned source commit and host checks run in a fresh checkout of it, so later author edits cannot change the reviewed report. Reassigned reviews retain saved drafts for the same source. A review that deferred or rejected passes on the record its verdict captured, and a reworked task given to another member starts from its rejected commit; nothing the previous member wrote after its verdict or submission is taken from its worktree, and that member is not stopped. Every task also declares outputs, the files it must produce; the host captures each declared output even when Git ignores it, refuses a submission whose declared output is missing with [output_missing], preserves declared drafts across a handoff, and refuses to launch a plan task that declares none ([] marks analysis-only work). Nothing is inferred from the task text: an ignored file that is neither declared nor listed is not captured. Unlisted ignored collisions stop the workspace switch and name the conflicting paths; arbitrary ignored files and secrets are not swept into snapshots.swarm_publish on that review attempt. A recorded tool run alone, or a reading through swarm_observe (never a recorded run), is refused with [review_evidence_required], so the reviewer inspects the submitted commit in its review checkout. Every acceptance records its basis on task/accepted, its verdict rows, the accepting review and the artifact registry: checks with the host check runs, or review-evidence with the reviewer's claims; an acceptance recorded by an earlier build has none. The owner can add checks to a submitted artifact on its own task instead of cancelling and recreating it. Existing accepted history is not retroactively re-reviewed by an upgrade. Verification copies installed dependencies by default, including common virtualenv interpreters, but may still depend on host system libraries. Unsupported external dependency links require a self-contained installation or an explicit host opt-in; this is not a fresh CI environment.task_budget_exhausted until the allowance is raised; the re-opened review starts each round with a fresh allowance. A resubmission must change the commit or bring new host-backed claims, otherwise it is refused with [rework_unchanged]. The member a re-opened review is bound to can never take the rework; if it is the only live member left, the task waits until the primary adds a member or reassigns the review.maxTasks. A review counts as a live review path only while a member that is not stopped may own it independently, so a plan whose only live members authored the deliverable wakes the owner with [review_path_missing] after submission. An added review copies no criteria: it checks what its deliverable must satisfy, and an override's acceptance adds review-only criteria. Omitted review override fields default to unassigned, the host's review objective, no extra criteria, the deliverable's maxRecoveryAttempts, and the default maxSteps.c1, c2, … in order, and a deliverable cites the ids it satisfies in covers; in a plan a review's covers move to its source, and swarm_propose refuses them on a review. A new deliverable needs covers or its own acceptance; a review and a repair need neither. A task stores only its own criteria: its worker and reviewers see those, the text of the criteria it covers, and everything the tasks it replaces answer for. The primary agent reads the stored task wherever a task is returned to it (the results of swarm_propose, swarm_control and swarm_cancel, swarm_observe, the panel's snapshot and swarm_registry): its own acceptance, its covers and its replaces, with each id resolved by the criteria a fresh swarm_observe overview lists; a worker never reads an id. Completion counts only the ids that accepted deliverables cite, their own and those of the tasks they replace; copied criterion text covers nothing. covers cannot be amended, so a deliverable accepted without them leaves its criteria to another deliverable that cites them. The draft editor lists the criteria as numbered rows, gives each deliverable a Covers box per criterion, and renumbers covers when a criterion is removed; only an automatic launch refuses a criterion no deliverable cites, so a draft launched from the editor with an unchecked criterion runs and cannot complete until another deliverable cites it. Criteria are fixed once a mission exists: a staged-draft repair must resend them unchanged. A store written by an earlier version is rewritten once, when it is opened: each existing task and draft plan task keeps only its own criteria (a repair drops what it inherited from the tasks it replaces, a review what its source already supplies), each deliverable cites by id the mission criteria whose text it had copied, and a staged mission takes the criteria of its saved draft, as its relaunch would have. A saved draft rewritten this way becomes a new revision, so an editor page left open across the upgrade reloads it and cannot save its older copy over the ids.authorizedWorkspaces; a matched grant is recorded as workspaceGrantRoot. A later working_directory cd does not move it. Agents cannot grant themselves a new root through swarm tools. Confinement follows Harness's sandbox, and each worker starts every activation in its member worktree without the host tools that would move it or schedule a later turn (working_directory, create_worktree, schedule_*); the plugin adds no independent network or credential isolation.