前言¶
用 DSH 跑本地編碼代理(Claude Code、Codex、OpenCode、ZCode 等)時,常見的問題是「看不見」和「認不清」:任務分給了哪個代理、代理實際做了什麼、提交是誰產生的、哪一步該驗收,事後很難回溯。宥於本地環境,多數方案要麼往雲端導數據,要麼需要自己寫腳本拼日誌。
下面介紹的插件 ningl32/agent-workbench 走的是另一條路:它以 DSH 客戶端插件的形式,把本地多個代理的會話、提交和任務放進同一個只讀觀察面板裏,數據只留在你機器上。README 裏把核心循環概括爲 See → Understand → Attribute → Accept,本文按這個思路展開。
這是什麼¶
一句話定位:一個 local-first 的 DSH 工作臺插件,把你的本地 AI 編碼代理變成一個「可觀測、可追責的代理團隊」。
- 維護者:ningl32(GitHub 倉庫 ningL32/agent-workbench)
- 插件名:fde-console,README 中顯示爲 fde-console — Super Workbench,package.json 版本 2.9.68
- 許可證:MIT
- 分類:客戶端(社區目錄 SkillHub 歸類)
- 星標:0(截至 2026-11-07)
設計上有幾條明確約束,是它的核心價值,也是後面安裝時要注意的前提:
- 零雲依賴、零第三方運行時依賴,只用 Node 內置模塊(
node:sqlite)。 - 所有數據落在自有目錄(默認
~/.dsh/fde-console/),數據結構爲data/+ 配置。 - 對代理是隻讀觀察,工作臺不會寫進你的代理進程。
- 憑據不落盤:git 憑據通過運行時讀取 git config 獲得,所有輸出做 redaction,所有出站請求走 SSRF 白名單。
核心功能¶
README 列出的能力較多,下面只挑與日常使用直接相關的幾項。
任務面板。 看板式任務管理,帶 timeline、驗收人籤核(acceptor sign-off)、深鏈接、優先級、截止日期,每個任務還有每日 diary。
代理觀測。 通過六個會話來源適配本地代理,提供會話列表、逐條 transcript 閱讀器、running-now 檢測、按項目分頁;面板裏能看到每個會話背後的 dispatch prompt(啓動時的原始人類指令)。
提交歸屬。 AI 產生的提交可以按三種約定自動掛到任務上:分支名 task/<id>、提交信息裏帶 [#<id>]、或把任務綁定到項目目錄。倉庫側有跨倉庫誤匹配的防護。約定細節在 docs/ATTRIBUTION.md,附一段可直接粘貼進 AGENTS.md 的片段和 commit-msg hook。
證據與驗收。 每個任務上掛 timeline 和會話證據,證據按任務打分並支持一鍵或批量確認;另有自動生成的日報 / 週報,可導出爲 Markdown。再用 Ctrl+K 在任務標題、會話標題、提交信息、diary 之間做全局搜索。
面板視圖。 共七個視圖:Overview、Task Radar(會議轉寫 → AI 拆解任務 → inbox 閘門)、Task Board、Agents、Members、Team Activity(多來源 commit/PR 流 + 任務歸屬)、Settings。
擴展接口。 MCP server 通過 stdio 暴露只讀工具(列任務 / 搜工作 / 查代理狀態),供任何 MCP 客戶端使用;另有 webhook 出站、飛書 / 釘釘機器人通知、Gitea/GitHub/Gitee 動態流。想接 Cursor、Trae、Aider 等未覆蓋的來源,可按 docs/ADAPTERS.md 自己寫適配器。
熱力圖與積分卡(28 天活動網格、SVG 積分卡 endpoint)也屬於觀測層,適合做團隊週會展示。
安裝與啓用¶
環境要求¶
README 明確列出:
- Node.js ≥ 22.13(使用內置
node:sqlite) - DSH 0.2.1-rc.2(
@deepseek-ai/dsh) - pnpm 在 PATH 上(插件安裝會轉發給它)
安裝步驟¶
第一個坑:新 profile 默認只有 @deepseek-ai/dsh-base,Web 界面 bundle 是分開的。少了這一步插件會加載但不會激活,日誌裏是 fde-console: pending (waiting for service: webServer),端口不監聽。README 給的命令如下,注意版本號要和你本地 dsh --version 對齊:
# 1. install / update the plugin into a profile (the profile is created on first use)
dsh plugin --profile fde-dev add <this repo path>
# 2. 安裝與 dsh 版本對齊的 web surface bundle
dsh plugin --profile fde-dev add @deepseek-ai/dsh-web-app@0.2.1-rc.2 # ← use `dsh --version`
# 3. start(不要寫 dsh --profile fde-dev web,web 是保留的 alias profile)
dsh --profile fde-dev --port 38082
第二個坑同樣在 README 裏:add @deepseek-ai/dsh-web-app@0.2.1-rc.2 如果不固定版本,會解析到一個不兼容的舊構建,所以版本號必須釘住。
啓動後打開打印出的 URL(含 auth token),側邊欄會出現 Super Workbench。本地代理會自動被發現,第一個會話零配置就能看到。
數據目錄與存儲遷移¶
數據位於 <DSH_HOME|~/.dsh>/fde-console/。新數據目錄先用 JSON 存儲;要把自有單元遷到 SQLite + WAL,在所有實例停止的情況下運行遷移腳本:
node scripts/migrate-storage.js # 所有實例先停掉再跑
JSON 仍是導出和互操作格式。README 另提供 docs/VERIFY.md,按 測試門檻 → 插件加載 → API 往返 → UI 的順序做驗收。
用合成數據試玩¶
在正式接代理之前想先看一個填滿數據的面板,可以灌一份完全合成的種子數據(佔位名字、零網絡請求):
node scripts/seed-demo.js # 默認數據目錄 ~/.dsh/fde-console/data
node scripts/seed-demo.js --data-dir <dir> --force # 自定義目錄 / 覆蓋
種子腳本走 JSON 存儲通道,因此只接受未遷移的空目錄;如果目標是遷移後的 SQLite 目錄,腳本會拒絕並提示改用新目錄。想重置就刪掉種子寫入的 JSON 文件。
典型用法¶
1. 在 AGENTS.md 裏落地歸屬約定。 把 docs/ATTRIBUTION.md 裏的片段貼進項目,讓代理按 task/<id> 分支名或 [#<id>] 提交信息產出,提交就會自動掛到對應任務,Team Activity 裏可以直接驗收。
2. 用 MCP server 讓代理查詢看板。 在 MCP 客戶端配置里加:
{ "mcpServers": { "fde": { "command": "node", "args": ["<repo>/scripts/mcp-server.mjs"] } } }
這樣代理可以自己查任務列表、搜工作項、看代理狀態,形成「任務板 ↔ 代理」的雙向查詢。
3. 跑測試保持基線。 README 給的命令是 npm test,即 node --test test/*.test.js,400+ 用例、零網絡。
適用場景與注意¶
適合誰:本地同時跑多個編碼代理、需要按任務看板管理進度和驗收、且不想把會話數據傳上雲的 DSH 用戶;也適合想把代理活動做成日報 / 週報的團隊。
務必注意的幾點:
- 插件以當前 dsh 進程權限運行。安裝前下載並檢查源碼與許可證(MIT),確認
cordis.patch.yml、plugin/、scripts/的內容符合你的安全要求。 - 端口以
--port顯式指定(示例 38082),URL 帶 auth token,注意別把它暴露到公網;出站請求走 SSRF 白名單,涉及 webhook 和 IM 通知時要預先配好白名單。 - Node 版本和 DSH 版本都卡得比較死(≥ 22.13、0.2.1-rc.2 系),升級前先看
docs/下的說明;@deepseek-ai/dsh-web-app必須釘版本。 - 星標爲 0、維護者爲單人,屬於早期個人項目,採用前建議在測試 profile 上先跑一遍
npm test和docs/VERIFY.md。
結尾¶
ningl32/agent-workbench 的價值不在新概念,而是把本地代理的觀測、提交歸屬、驗收和報告收斂到同一個只讀、本地優先的面板裏,且不引入第三方運行時依賴。如果你已經在用 DSH 跑多個本地代理,值得放進一個專屬 profile 試一輪。
目錄頁:https://www.skillhub.cn/plugins/ningL32/agent-workbench
GitHub:https://github.com/ningL32/agent-workbench