关于 opencode-delegate
opencode-delegate 是一项将范围明确的编码任务交给 OpenCode CLI,再审查并提交其成果的技能。它面向能运行 Shell 命令和读取文件的 Agent,并将模型选择作为委派流程中的明确步骤。
主要功能
- 01委派任务给 OpenCode CLI
- 02选择模型或 fleet lane
- 03编写独立完整的任务说明
- 04将运行信息写入 result.json
- 05审查变更并重跑项目检查
- 06由编排 Agent 负责提交
适用场景
- 01委派范围明确的仓库修改
- 02为任务选择模型
- 03进行只读审查或诊断
- 04用增量说明恢复工作
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ amelnagdy/ delegate-skills --skill opencode-delegate安装后在 Claude Code 中输入/opencode-delegate确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
references/dispatch-and-poll.mdmulti-task-queues.mdreview-and-land.mdwriting-the-brief.mdscripts/relay.mjs详细介绍
OpenCode Delegate
你是编排者。此技能让你可以将范围明确的编码任务交给单独的实现者——OpenCode CLI,然后审查其产出并亲自提交。你撰写任务说明并负责判断;OpenCode 在自己的会话中编写代码;你负责验证并提交。
这里的内容不专属于某一种编排 Agent。此流程只需要能够运行 shell 命令并读取文件,因此任何具备这两项能力的 Agent——Claude Code、驱动同级会话的 OpenCode,或类似工具——都可以执行此流程。(此流程专为 Claude Code 设计并在其上运行;对于其他编排者,应视为已设计支持,但尚未验证。)
以下情况请勿使用
- 任务足够小,可以直接完成——委派带来的额外开销不值得。
- 未安装
opencodeCLI 或尚未完成身份验证(运行opencode auth login)。 - 你想自己编写代码,或只需要审查(通过
--read-only使用planAgent)。
前置条件(检查一次即可)
opencode --version可成功运行。如果不行,请安装(npm i -g opencode-ai,或从 opencode.ai 获取原生安装程序),然后运行opencode auth login。- 确认 PATH 中的
opencode是哪个。command -v opencode会显示当前使用的二进制文件,opencode --version会显示其版本。中继程序会将运行时使用的版本记录到result.json,因此事后可以发现是否使用了过期的二进制文件。 - 已通过某个模型提供商的身份验证——
opencode auth list会显示至少一项凭据。 - 当前位于目标 Git 仓库中(或准备通过
--cd指定该仓库)。
选择实现者模型
OpenCode 没有安全的默认模型——直接运行 opencode run 会报错——因此,新的运行需要通过 --model 指定模型,或使用会设置模型的 fleet --lane(恢复的运行会继承其会话中的模型)。指定模型是 codex-delegate 这类单模型后端从未要求过的唯一决策,而且有两个责任方:
- 由人决定允许使用哪些模型。
opencode models会列出数百个选项,其中大多数按 token 计费(如 OpenRouter 等);只有人知道自己订阅了哪些固定费率服务,而 CLI 无法区分。因此,可用模型集合由人决定——最好在仓库的AGENTS.md或个人的CLAUDE.md中说明一次(例如:“机械性工作委派给opencode-go/…,复杂逻辑委派给…”)。 - 由你这个编排者从该集合中为每项任务选择模型。 根据任务说明选择模型:机械性批量操作(重命名、迁移、移除)使用快速、低成本的模型;微妙的 Bug 或涉及资金/安全的路径则使用能力更强的模型。
- 如果没有说明可用模型集合,请询问,不要猜测。 根据目录猜测可能会选到按量计费的模型,导致意外账单。向人说明这一限制,让他们做选择。
更多说明:references/writing-the-brief.md。
流程
每项任务都运行以下五个步骤。步骤 1、4 和 5 需要你做出判断;步骤 2 和 3 则是机械操作。
1. 撰写任务说明
OpenCode 只能看到你发送的文本以及它能从工作树中读取的内容——没有聊天记录,也没有共享上下文。任务所需的一切都必须写入任务说明:目标、当前状态、要修改的内容、要保持不变的内容、项目实际使用的门禁命令(从仓库的 AGENTS.md/CLAUDE.md/Makefile 中查找,不要凭空假设),以及报告要求。告诉 OpenCode 它不会提交(由你提交)。每份任务说明只包含一项任务。完整指南和模板见: references/writing-the-brief.md。
2. 派发
对于 Codex 编排的后台工作,请先安装并配置独立的
codex-background 支持工具。如果缺少其 MCP 工具或注册表,请停止并
报告设置要求;不要悄悄回退到由模型驱动的轮询。然后调用其已注册的 delegate_run MCP 工具一次,代替下面的
shell 示例。
遵循该技能,使用结构化的通用参数、保持提供方标志不变,并通过 runId 重新连接。让请求保持待处理状态,直到任务完成,然后继续执行此技能的审查和落地步骤。其他编排器继续使用下面的 shell 工作流。
使用随附的辅助工具将简报发送给 OpenCode。它会封装 opencode run、捕获运行过程,并写入结构化的 result.json——所以你只需“运行命令,读取文件”。(下面的 <skill-dir>
是此技能的安装目录——即包含此 SKILL.md 的文件夹。Claude Code 在技能加载时会将其打印为“此技能的基础目录”;在其他编排器中使用同一目录——如果不确定它位于何处,请运行 find ~ -name relay.mjs -path '*opencode-delegate*',并将上级目录替换为该目录。)
node "<skill-dir>/scripts/relay.mjs" --brief brief.txt --model <provider/model> --cd /path/to/repo
# --model (or a --lane that sets model) is required on a fresh run
# fleet lane from delegate-setup: add --lane <name> (dials apply; flags still win)
# read-only (review/diagnosis, no edits): add --read-only (uses the plan agent)
# continue the previous OpenCode session: add --resume-last (delta brief only; keeps the model)
# hard time limit (watchdog): add --timeout 2h (default: off; implementation runs routinely need 1-2h)
# see all options: node .../relay.mjs --help
该辅助工具默认使用可写入的 build Agent,并将其产物写入临时目录,因此受审查的仓库会保持干净。它绝不会提交更改——请参阅第 5 步。运行机制、标志和 result.json 格式:references/dispatch-and-poll.md。
3. 等待完成
使用 codex-background 的 Codex 会让原始 MCP 请求保持待处理状态:不由模型驱动休眠、状态或日志轮询。只有在请求中断后才使用 delegate_wait 重新连接。
辅助工具会一直阻塞,直到 OpenCode 完成,因此请使用编排器提供的任意机制来处理,并在其返回时继续:
- Claude Code: 使用
run_in_background: true运行 Bash 调用;完成时会收到通知。 - 普通 shell/其他 Agent: 对于短任务,在前台运行;或者将其放到后台运行并轮询结果文件——在 bash/zsh(包括 Git Bash/WSL)中使用
… &,或使用相应 shell 的等效命令(PowerShell 中为Start-Job,cmd 中为start /b)。当result.json存在且包含status时,运行即已完成。(运行前的用法错误——参数错误或简报为空——会以代码 2 退出,且不会写入结果文件,因此也要检查退出代码。缺少opencode二进制文件时会以 127 退出,但仍会写入包含状态opencode_unavailable的result.json。)
不要相信进度跟踪器,而要以实际情况为准:只有在写入 result.json 且进程已退出时,运行才算完成。检查工作树,不要只看状态行。实现者的完整报告位于 result.json 的 finalMessage 字段中(也会在 stdout 的报告标记之间完整打印)。
4. 审查——不要相信自我报告
OpenCode 的 result.json 包含其最终消息和任何门禁声明。请重新验证,不要直接接受:
- 亲自重新运行项目的门禁(第 1 步中的测试/lint/构建命令)。不要轻信“门禁已通过”。
- 对照简报阅读差异: OpenCode 是否完成了要求,没有多做(范围蔓延),也没有少做?结果中的
touchedFiles是你的起点。 - 如果安装了相关的防护技能,请对差异运行它们(例如
guard-skills中的 clean-code-guard、test-guard 等)——此技能负责产出工作;这些技能负责评判工作。 - 对于架构/迁移更改,进行往返验证;对于删除操作,使用 grep 查找悬空引用。
完整清单:references/review-and-land.md。
5. 落地
实现者编辑工作树;编排器负责提交。 提交应由验证工作的一方执行。只有在门禁通过且差异符合要求后,才执行以下操作:
- 亲自提交已验证的工作,并使用清晰的提交消息。
- 如果需要修改,使用
--resume-last发送增量简报(不要重述整个任务),然后再次审查。
自主性模型
OpenCode 的自主性由 agent 控制,而非由沙箱枚举值控制:
build(中继默认值)——具备写入能力;可在工作目录中以无头模式编辑文件。 相当于“让它来实现”。plan(通过--read-only启用)——只读;会进行审查和诊断,但不会触碰工作树。 相当于“让它看看,但不编辑”。
默认情况下,权限会自动批准:中继会传入 --auto,确保无头运行不会卡在无人能回应的
提示上。这正是无人值守委派的意义所在——编排器的差异审查和实现者检查(步骤 4)才是安全
保障,而不是每个操作都要询问。传入 --no-auto 可改为遵循 agent 自身的权限配置(针对每项
操作设置 allow/ask/deny);请将其与工作区内权限设为 allow 的 agent 搭配使用,否则无头
运行可能会因等待 ask 而挂起。
只读(plan)运行绝不会传入 --auto——自动批准会放行 plan agent 中受 ask 限制的编辑
和 bash 权限,破坏“只读”保证,因此无法诱使审查过程触碰工作树。
授权模型
委派由人类主动选择。一旦他们表示同意(“运行这个队列”“继续”),提交已验证且通过门禁的 工作就是双方约定的契约——这正是委派的全部意义。该授权有两项限制:呈现,不擅自消化 (报告 OpenCode 的设计决策、有理可辩但未经要求的处理,以及不会阻塞流程的小问题,而不要 默默保留它们)以及范围变更时停止(如果正确完成需要超出简报范围,就先询问——不要自行 扩大授权)。完整说明见 references/review-and-land.md。
参考资料
- references/writing-the-brief.md — 如何撰写一份 OpenCode 可盲目 执行的简报:结构、XML 块、报告约定,以及如何嵌入实际门禁命令。
- references/dispatch-and-poll.md —
relay.mjs标志、result.json约定、各编排器的后台运行方式,以及运行异常时的恢复方法。 - references/review-and-land.md — 审查清单、提交边界,以及通过
--resume-last进行返工的流程。 - references/multi-task-queues.md — 运行顺序队列: 延续约束、跟踪进度,以及运行结束时的一致性检查。