skill-wb-exec:在 DSH 中把有邊界的編碼任務委託給 CLI 執行體

前言

在 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 倉庫。

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜