全部作品

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 的請求在沒有明確未來接口前視為越界。