opencode-plugin-codex — 在 Codex 里使用 OpenCode
- TypeScript
- Node.js
- MCP
- Codex Plugin
- OpenCode CLI
- Vitest
一个公开 Codex plugin,让 OpenCode 能在 Codex 里支援代码审查、问题排查与交接任务。它用 job 状态、取消能力与收窄的隐私边界,让协作保持可控。
一眼看懂
角色 独立开发者 — Codex plugin 打包、MCP tool surface、OpenCode CLI 编排、transcript 边界、测试
问题
Codex 与 OpenCode 各有优势,但手动切换通常会丢上下文,也让审查难以追踪。这个项目的目标,是把 OpenCode 变成 Codex 里可控的协作方,并保留清楚的 job control 与窄隐私边界。
解法
我把 OpenCode 包成 Codex 里的 MCP 工具,加入能力检查、后台 job 状态、取消能力与 transcript 边界。OpenCode 可以审查或排障,但文件、git 与最终验证仍由 Codex 控制。
成果
公开 Codex plugin · 已测试 MCP tools · Codex 内的 OpenCode 审查支援
我的工作
- Codex plugin 暴露 OpenCode MCP 工具:check、run、continue、rescue、review、adversarial review、transfer、status、result、cancel
- Background OpenCode job 编排,让长时间 review 可在 Codex 内轮询、检查或取消
- 有意识的 transcript 隐私边界:opencode_transfer 默认只传可见 user/assistant 对话,不传隐藏 system、developer 或 tool output
- Review 与 adversarial-review helper,让 OpenCode 可作为 diff 发出前的第二轮工程审查者
- 加入 prompt before file 的讯息顺序处理、file attachment guard,以及对要求 OpenCode 检查 Codex private runtime paths 的提示阻挡指引
技术证据
- TypeScript 编写的 bundled stdio MCP server,打包为 Codex plugin
- OpenCode CLI 发现、版本检查、背景进程管理、job ledger、timeout handling 与结果取回
- 按设计收窄 context transfer:除非未来有明确接口支持,plugin 不把 tool output 与隐藏指令传给 OpenCode
- 公开后的安全加固:任务文本保持在 prompt before file 的顺序中,file attachment guard 拒绝把提示词当文件传入,Codex private runtime paths 不进入 OpenCode 的读取范围
- 用 Vitest 覆盖 MCP tools 与 transcript-transfer 边界
为什么做它
实际用途是协作,而不是新奇:当 Codex 已深入一个 repo 时,OpenCode 可以作为第二个 agent 做 review、rescue 或 adversarial critique。这个 plugin 用 job status、job result 与 cancel tools 让协作可见、可控、可审计。
关键边界在于什么不被转移。opencode_transfer 有意只涵盖可见对话,避免把私有 system/developer instructions 与 tool output 静默转发。
公开后的加固也收紧了本地委派机制:prompt 保持在 files 之前,file attachment 会被检查为真实文件附件,而针对 Codex private runtime paths 的请求在没有明确未来接口前视为越界。