前言¶
在 DeepSeek Harness(DSH)裏做實現類工作時,常見做法是宿主智能體自己改文件、自己跑測試。邊界清楚的小任務也能這麼做,但模型調用與上下文都壓在主會話上;若再交給另一個 CLI 智能體,往往只有一段自然語言摘要,很難和倉庫裏的真實 diff 對上。
wb-exec(倉庫名 skill-wb-exec)是 DSH 側的技能包插件:宿主繼續負責規劃、監督和評審,把編碼、重構、補測試等有明確邊界的子任務交給本機上的無頭 CLI 執行體,回收結構化 result.json 和由 git diff 生成的真實補丁。默認執行體爲 WorkBuddy / CodeBuddy(固定 DeepSeek V4.1 Flash、effort 爲 max);也可用 --executor 切換到 codex、claude、aider 或 custom。
維護者爲 Luminousyyh;在 SkillHub 目錄 中歸類爲工作流,GitHub 上約 101 stars。源碼與文檔見 Luminousyyh/skill-wb-exec。插件包版本見倉庫 package.json(當前爲 1.4.0),許可證 MIT。SkillHub 爲社區目錄,與 DeepSeek、幻方無官方從屬關係。
這是什麼¶
wb-exec 把「任務包 JSON → 派發 → 監督 → 收集結果」做成可腳本化的流程。執行體只在其被允許的 owned_paths 內改文件;在 Git 倉庫上默認在獨立 worktree(分支形如 wb-exec/<id8>)裏動手,不提交、不推送、不自動合併。插件不會替宿主集成改動:宿主需要自己讀補丁、跑驗收命令,再決定是否 git apply。
依賴面較剋制:僅需 Python 3.10+(標準庫,無需 pip install)、本機已安裝的某一支持執行體,以及可選的 Git(用於 worktree 與 diff;非 Git 目錄會退化爲原地執行)。
核心能力¶
下面按 README 中已寫明的行爲歸納,便於和宿主側職責對齊。
路徑白名單與越界檢測¶
任務包中的 owned_paths 定義執行體可寫路徑。改動落在名單外會進入 result.violations,而不是被悄悄接受。空列表表示只能新增文件,仍會檢查對已存在文件的修改或刪除。
隔離、鎖與可觀測性¶
- Worktree 隔離:Git 倉庫上默認
--worktree auto,與主工作區未提交改動隔離。 - 路徑級派發鎖:若新任務的
owned_paths與運行中任務重疊,派發被拒絕(PATHS_LOCKED,退出碼 4);不重疊路徑可並行。jobs子命令只讀列出當前佔用與近期歷史,不擅自清理鎖文件。 - 真實 diff 優先:
change.patch與changed_files_git來自實際git diff;與執行體summary不一致時以 diff 爲準。 - 結構化輸出:通過 schema 約束執行體輸出,併合並 diff、越界檢查;結果含
needs_human(是否必須由人介入),避免從摘要裏猜狀態。 - 遞歸防護:子進程設置
WB_SUBAGENT=1,腳本檢測到該變量會拒絕再次派發(退出碼 3)。 - 失敗仍可收集:派發或監督失敗時仍會寫入
exit.json/result.json,任務以failed落地而非消失。
子命令一覽¶
| 子命令 | 作用 |
|---|---|
doctor |
檢查 CLI、Git、狀態目錄與可用後端 |
dispatch |
後臺派發,立即返回 job_id |
run |
前臺執行並等待收集 |
status |
查詢任務狀態 |
collect |
取回結果(可加 --wait) |
cancel |
請求取消 |
jobs |
只讀查看鎖與歷史 |
默認 --timeout 爲 1800 秒;日誌總量上限 64 MiB(可用環境變量 WB_EXEC_LOG_CAP 覆蓋)。狀態目錄默認爲 ~/.wb-exec/,可用 WB_EXEC_HOME 覆蓋。
安裝與啓用¶
倉庫通過 package.json 聲明 dsh.bundle;安裝後由 DSH 的 ctx.skills 提供方發佈 skills/wb-exec/ 技能。
推薦:在 DSH Desktop 打開 Plugins → Plugin Market 安裝;或在終端執行(將 <profile> 換成你的 profile 名):
dsh plugin --profile <profile> add github:Luminousyyh/skill-wb-exec
說明:Desktop 與 CLI 可能使用不同 profile;若在桌面端使用,優先在 Settings → Plugins 安裝,避免裝到 CLI 默認的 profiles/web 等與桌面不一致的位置。
環境自檢(須先在本機安裝所選執行體;插件不會替你裝 CLI 或改配置):
python <SKILL_DIR>/scripts/wb_exec.py doctor
python <SKILL_DIR>/scripts/wb_exec.py doctor --executor codex
返回 JSON 中 ok=false 或 cli_error 非空時應停止後續派發,把原始輸出交給使用者處理。
安裝與運行發生在當前 DSH 進程所擁有的操作系統權限下。安裝前建議閱讀倉庫源碼與 MIT 許可證,確認委派範圍與路徑白名單符合你的安全策略。
典型用法¶
經過上面的安裝與 doctor 檢查,可按「寫任務包 → 派發 → 監督 → 收集 → 宿主評審」走通一條鏈。
1. 編寫任務包¶
保存爲例如 .wb-exec/tasks/001.json(字段含義見 README「Task package protocol」):
{
"goal": "Rate-limit failed logins on /login: lock an account for 10 minutes after 5 consecutive failures within 5 minutes, and return 429",
"context": "The rate-limiting middleware lives in src/auth/mw.py. A Redis client wrapper already exists in src/common/redis.py; reuse it and do not create a new connection pool.",
"inputs": ["src/auth/mw.py", "src/common/redis.py", "tests/test_auth.py"],
"owned_paths": ["src/auth/", "tests/test_auth.py"],
"acceptance": ["pytest -q tests/test_auth.py"],
"notes": "Do not add dependencies. Count failures with Redis INCR + EXPIRE under the key auth:fail:<account>."
}
注意:goal 寫「做完後世界長什麼樣」,不要寫實現步驟;acceptance 必須是可執行命令。
2. 可選 dry-run¶
python <SKILL_DIR>/scripts/wb_exec.py dispatch --task .wb-exec/tasks/001.json --cwd <repo> --dry-run
3. 派發與監督¶
長任務後臺派發:
python <SKILL_DIR>/scripts/wb_exec.py dispatch --task .wb-exec/tasks/001.json --cwd <repo>
短任務可前臺等待:
python <SKILL_DIR>/scripts/wb_exec.py run --task .wb-exec/tasks/001.json --cwd <repo> --timeout 600
python <SKILL_DIR>/scripts/wb_exec.py status --job <JOB_ID>
4. 收集與評審¶
python <SKILL_DIR>/scripts/wb_exec.py collect --job <JOB_ID> --wait
宿主側評審紀律(README 強調):先讀 artifacts.patch;violations 非空不要自行悄悄接受或回滾;執行體報告的測試通過不等於你已驗收——集成後應在主工作區自己跑 acceptance;默認不要代用戶 git commit / git push。
切換後端示例:
python <SKILL_DIR>/scripts/wb_exec.py dispatch --task t.json --cwd <repo> --executor claude
適用場景與注意¶
適合:目標清晰、文件集合可枚舉、適合用較便宜執行體批量實現、且希望在獨立 worktree 裏改完再人工審 patch 再集成的任務。
不適合:探索性需求、架構級大改、跨模塊重寫等仍應留在宿主會話。
其他注意:
- 所選 CLI 必須已裝在同一臺機器;
workbuddy後端需要賬戶/plan 允許使用deepseek-v4.1-flash。 - 不要在 WorkBuddy / CodeBuddy 交互會話內部再調用
dispatch,可能與守護進程衝突導致長時間無輸出。 - 非 Git 目錄且
isolated=false時,唯有owned_paths約束改動,任務包必須寫嚴。 - 鎖文件爲協作防碰撞,不是安全邊界;惡意進程可無視它。
結尾¶
skill-wb-exec 把 DSH 宿主與外部 CLI 執行體的分工寫進協議:白名單路徑、worktree、結構化結果與真實 diff 一起返回,集成與提交仍由人與宿主掌握。若要瀏覽分類或一鍵安裝入口,見 SkillHub 插件頁;實現細節與協議全文見 GitHub 倉庫。