Shared multi-agent task board (create/claim/transition/query) over a Cordis service key.
Install
# from npm (prebuilt)
dsh plugin --profile web add @dsh-suite/plugin-team-board
# from GitHub (first run asks for allowBuilds approval — follow the hint, retry)
dsh plugin --profile web add github:whyihaveyou/dsh-suite#path:/packages/plugins/plugin-team-board
Any plugin you install runs third-party code with your own permissions — it can read your files, use your credentials, and reach the network, and tool approvals don’t sandbox it. GitHub-sourced plugins also run build scripts at install time — pnpm blocks those until you allow them, so an install can stop with ERR_PNPM_GIT_DEP_PREPARE_NOT_ALLOWED or ERR_PNPM_IGNORED_BUILDS; dsh prints the exact key to add under allowBuilds in your profile’s pnpm-workspace.yaml, and the install works on the next run. Allowing a build is a trust decision: only install sources you trust, and pin a commit (github:owner/repo#sha).
README
This plugin publishes its README in Chinese only.
DSH 插件:多 agent / subagent 共享的持久任务看板。通过一个 Cordis 服务键
ctx.teamBoard物化 共享状态(不是模块级全局变量),用defineTool暴露task_create/task_claim/task_update/task_list/task_delete,内置可视化看板面板(Settings → Plugins → Team Board), 快照文件落盘$DSH_HOME/team-board/board.json跨重启恢复。生态位空白:ccteam是独立产品, 没人做成 DSH 原生插件。
DSH plugin: a shared, durable task board for multi-agent / subagent collaboration. Shared state is materialized as a Cordis service key
ctx.teamBoard(not a module global), exposed throughdefineToolastask_create/task_claim/task_update/task_list/task_delete, with a visual kanban panel (Settings → Plugins → Team Board) and restart-safe persistence via a snapshot file at$DSH_HOME/team-board/board.json. A DSH-native board — an empty niche (ccteamis a standalone product, nobody built the DSH-native one).
特性 / Features
共享状态 = 协作用键(设计准则 #2/#10):看板状态活在
TeamBoardService(ctx.teamBoard), 跨会话/subagent 可见;插件闭包里没有全局可变态。可视化看板面板(0.2.0):Settings → Plugins → Team Board tab,任务按状态三列分列 (todo / doing / done),面板内创建任务、点卡片按钮流转状态,改动立即持久化。
跨重启持久化:每次变更把整板快照写入
$DSH_HOME/team-board/board.json,启动时优先从该文件 恢复;board/snapshot会话事件日志保留为进程内审计轨迹(ctx.sessions是纯内存存储, 日志会话本身不保证跨进程复活,文件快照才是重启后的真相源)。5 个工具(
defineTool):创建 / 认领 / 状态流转 / 查询 / 删除。注册即 effect:工具经
ctx.tools.register注册,卸载自动反注册。Shared state as a service key (principles #2/#10): board state lives in
TeamBoardService(ctx.teamBoard), visible across sessions/subagents; no module-level mutable state.Visual kanban panel (0.2.0): Settings → Plugins → Team Board tab — three status columns (todo / doing / done), create tasks in-panel, click a card to transition; changes persist instantly.
Restart-safe persistence: every mutation writes a full-board snapshot to
$DSH_HOME/team-board/board.json, which is the source of truth on boot; theboard/snapshotsession-event journal stays as the in-process audit trail (ctx.sessionsis an in-memory store, so the journal alone does not survive a process restart — the file does).5 tools (
defineTool): create / claim / transition / query / delete.Registrations are effects: tools go through
ctx.tools.registerand unregister on unload.
任务模型 / Task model
{ id, subject, status: todo|doing|done, owner?, deps: string[], createdAt, updatedAt }
工具 / Tools
| 工具 / Tool | 参数 / Params | 行为 / Behavior |
|---|---|---|
task_create |
subject(必), owner?, deps? |
建任务,状态 todo,生成 id |
task_claim |
id(必), owner? |
认领:状态 → doing,owner 缺省为调用方 agent id |
task_update |
id(必), subject?/status?/owner?/deps? |
只改传入字段 |
task_list |
status?, owner? |
按创建时间排序,可按状态/owner 过滤 |
task_delete |
id(必) |
删除任务 |
安装 / Install
dsh plugin --profile <name> add @dsh-suite/plugin-team-board
(本地开发:dsh plugin --profile <name> add ./packages/plugins/plugin-team-board)
无配置项。程序化消费者可用 ctx.teamBoard.createTask/claimTask/updateTask/listTasks 直接调用。
No config. Programmatic consumers call ctx.teamBoard.createTask / claimTask / updateTask / listTasks.
改动 / Changelog
- 0.2.1——DSH Web 样式契约适配(research/ui-compat-protocol.md):面板颜色全部改经
--dsw-alias-*设计令牌引用(保留暗色字面量仅作 token 缺失时的兜底),亮色主题不再破相; 根节点输出data-dsh-plugin="plugin-team-board"+data-dsh-surface="settings-modal", 卡片/列/按钮/徽章/输入框标data-dsh-part(L2 语义属性,供皮肤中心完整换肤)。 - 0.2.0——可视化看板面板(Settings → Plugins → Team Board:三列分列 / 面板内创建 / 点按流转);
修复跨进程重启丢状态:
ctx.sessions实为纯内存存储(持久化插件只 flush 存活会话), 仅靠board/snapshot日志在重启后恢复不了看板。现在每次变更同时写$DSH_HOME/team-board/board.json快照文件,启动优先从文件恢复(日志保留为进程内审计)。 - 0.1.1(issue #11)——修复部分字段更新污染快照:task_update 只传 id+status 时未显式传字段
会带入 undefined 键,跟着 spread 进任务并写进 board/snapshot,使 append-only JSONL 无法序列化、
看板「坏掉」。修法:
update()只合并undefined被过滤的字段;snapshot()对所有任务做 strip-undefined 规范化(历史污染记录重载自愈)。回归于 scripts/board-smoke.mjs(断言缩到 「快照可序列化 + 无 undefined」,不依赖狭义的存储内键集)。
验证 / Verification
- ✅ 纯 ESM 编译(
pnpm build) - ✅ 核心逻辑 smoke:
scripts/board-smoke.mjs15/15 断言(create/claim/update/list/delete/snapshot 回放) - ✅ 真实装载:
dsh plugin add→--dump-config含team-board行 → headless boottask_create listed=true(Service 实例化 + 工具注册成功) - ✅ 面板实测(0.2.0,playwright):Team Board tab 渲染、三列分列、面板内创建、点按改状态(API 复核 已持久化)、页面重开状态保持;截图 research/team-board-screenshots/
- ✅ 跨进程重启恢复(0.2.0):kill 进程 → 重启 →
/team-board/list从board.json复原全部任务 - ⚠️ 端到端「模型调 task_create → 看板状态」需
DEEPSEEK_API_KEY(无 key 时 headless 停在 MISSING_CREDENTIAL)
设计准则 / Design principles
遵守 dsh-plugin-design-principles.md:共享状态物化为协作用键(#2)、长命状态放依赖不放闭包(#10)、
inject 声明依赖(#3)、注册即 effect(#1)、事件走类型化 session/event + declaration merging(#15)。
Known Limitations / 已知局限
- MVP 为单进程内共享看板(跨进程/跨机器同步是 v2,架构蓝图 §5.3 已注明)。
- 看板状态以「整板快照」形式持久化(每次写 O(n)),任务量级小(几十条)时足够;海量任务可改为 per-task 事件流。
Theme & Skin Compatibility / 主题与皮肤兼容
This plugin follows the DSH Web styling contract
(docs/web-styling.md):
all colors come from --dsw-alias-* design tokens (dark literals only as fallback), with no
per-theme CSS selectors. It also implements the
dsh-web Skin Center compatibility contract
L1 (token coverage) + L2 (semantic attributes) — cards/columns/buttons/badges/inputs emit
data-dsh-part, so third-party skins get full coverage without relying on unstable class names.
本插件遵循 DSH Web 样式契约:颜色全部经 --dsw-alias-* 设计令牌引用(暗色字面量仅作兜底),无按主题分支的 CSS 选择器;
并实现 dsh-web 皮肤中心兼容契约 L1(令牌覆盖)+ L2(语义属性)——卡片/列/按钮/徽章/输入框标注
data-dsh-part,第三方皮肤无需依赖不稳定类名即可完整换肤。
Links
More in this category
Q00/ouroboros#integrations/dsh-plugin★ 6144
Config-only bundle that mounts Ouroboros through the DSH MCP client, exposing 36 interview, Seed, execution, evaluation, and evolution workflow tools in DSH.
loopx-project/loopx#dsh-loopx-plugin★ 6111
LoopX, a provider-neutral, local-first state kernel and control plane for long-horizon agents: keeps Goal, Todo, gate, evidence, quota, recovery, and handoff state above DeepSeek Harness, while the plugin bootstraps the CLI and skills, admits bounded same-session continuation, and adds a loopback GoalBar for the exact bound loop.
chuspeeism/dashi-taskboard#deepseek-harness★ 3262
Embeds the active installed Codex Taskboard runtime in the DeepSeek Harness sidebar, using its launcher runtime descriptor instead of a fixed port.
NanmiCoder/dsh-agent-teams★ 1848
AgentTeams multi-agent teams.
EthanYoQ/AI-Novel-Writer#dsh-ai-novel-writer★ 1205
Installs a dedicated AI novel-writing preset and workbench: revisioned local project assets, a compact side drawer, and native approval-gated single-file changes.
tong-io/tongflow#dsh-tongflow★ 1034
TongFlow film-crew studio for image, voice, music and video production: the agent writes per-asset TongFlow workflow files (.tongflow.json) that run through TongFlow plugins, with an embedded workflow canvas, a shot/character/take project layout and a manga-drama template; sessions starting with @tongflow open the Studio view.
Community comments
Comments are public GitHub Discussions. Loading them connects to GitHub and Giscus; a GitHub account is required to post.