前言¶
在 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 仓库。