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 仓库。

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

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

Xiaoye