TL;DR
Claude Code 透過 MCP 可以直接「叫」Codex 幫忙跑子任務 — 我下 prompt、Codex 在同一台機器上讀檔/跑指令/回報。
但這是結構化輪流問答(one-shot + threadId 延續),不是兩個 AI 自己聊起來的自由對話。
本篇紀錄我今天接通的全程:怎麼驗證「真的接通了」、怎麼用 tmux pane 即時看 Codex 在幹嘛、哪裡卡住(read-only sandbox)、以及「對等」到底對等在哪、不對等在哪。
📌 目錄
- 先講結論:對等在哪、不對等在哪
- 接通的方式:MCP 通道與 threadId
- 怎麼證明「真的接通了」而不是我自己腦補
- 用 tmux pane 即時看另一個 AI 在想什麼
- 踩坑:read-only sandbox 擋住寫檔
- 時間軸:這次協作實際發生了什麼
- 學到什麼:雙 AI 分工的真實邊界
- ❓ 常見問題
- 🔗 延伸資源
⭐ 先講結論:對等在哪、不對等在哪 {#先講結論}
我今天做的事,是讓 Claude Code(我這邊)透過 MCP 直接呼叫本機的 Codex session,把一個子任務丟過去、讓它在同一個 repo 上動手、再把結果拿回來整合。
「對等」這個詞容易讓人想像兩個 AI 像同事一樣自由對話。實際接起來之後,我會把話說清楚:
| 維度 | 真實情況 | 是不是「對等聊天」 |
|---|---|---|
| 通道 | Claude Code → MCP → Codex,雙向有回傳 | ✓ 雙向 |
| 對話節奏 | 我送 prompt,Codex 執行+回報,一來一回 | △ 結構化輪流,不是自由流 |
| 主動性 | Codex 不會主動 ping 我,要我問才回 | ✗ 不是同事互相搭話 |
| 動手能力 | Codex 預設 read-only,要寫檔得另開權限 | ✗ 嘴上能聊、手上被綁 |
🔗 接通的方式:MCP 通道與 threadId {#接通的方式}
接點是 MCP(Model Context Protocol)。Claude Code 這端掛了一個 codex MCP server,曝出兩個工具:
codex— 開一個新的 Codex 對話,回一個threadIdcodex-reply— 帶著threadId對同一個 session 繼續講,Codex 記得前面的上下文
threadId 串起來的,不是真的有一條長連線在那邊閒聊。整個流程長這樣:
關鍵字先講清楚:這是 one-shot 問答 + session 延續。每一輪我都得明確發問,Codex 才會動。它不會「想到什麼就跟我說」,這跟人類同事在 Slack 上隨手丟一句很不一樣。
至於模型,這個 Codex session 實際跑的是 gpt-5.5(它自己回報為 GPT-5 Codex)。我一開始試 gpt-5.4 跟 gpt-5.2-codex,在 ChatGPT 帳號下不支援,換 gpt-5.5 才通 — 這是踩過的第一個坑。
🧠 怎麼證明「真的接通了」而不是我自己腦補 {#怎麼證明}
這是我最在意的一點。MCP 工具回個漂亮的字串很容易,但那有可能只是模型在演。要證明 Codex 真的在「我這台機器」上動手,我設計了三個它編不出來的驗證題,一次發過去:
1. 讀 src/game/types.ts,告訴我 GemType 那一行完整列出哪幾個字串值。
算一下 40 + 30 + 20 + 10 等於多少。
跑 pwd 跟 git log --oneline -1,把輸出原樣貼給我。
第 1 題逼它真的讀我本機的檔(那行內容只有我這台有);第 3 題逼它跑 git log,回傳的 commit hash 我可以對。Codex 回來的東西:GemType 的六個值一字不差、算術正確、commit hash 是 6cf8254 — 跟我本機 git log 對得上。
這就是我說的 round-trip:不是看到「connected」就算數,是從輸入端進、輸出端出、我拿真實產物去對。handshake 不等於真的在幹活,這條對 AI 協作一樣成立。
⚡ 用 tmux pane 即時看另一個 AI 在想什麼 {#用-tmux}
光看 MCP 回傳的最終結果,我看不到 Codex 中間「想了什麼、跑了哪些指令」。但 Codex 會把每個 session 寫成 JSONL rollout log,丟在 ~/.codex/sessions/YYYY/MM/DD/ 底下。
所以我寫了一支 watcher 腳本,自動 follow 最新那份 log,把三種事件染色印出來:
# ~/.codex/watch-codex.sh 的核心:每 2 秒看一次最新 log,自動切到新 thread
tail -f "$(latest_log)" | python3 parse_and_colorize.py
# 🧠 = agent_reasoning(它的推理)
# ⚙️ = function_call(它跑的指令)
# 💬 = agent_message(它的回話)
把這支丟進一個 tmux pane,我這邊跟 Codex 對話的同時,旁邊那格就即時滾出它在 rg 找型別定義、npx tsc --noEmit 編譯檢查、git status 看改了什麼。這才是「看到另一個 AI 在工作」最接近的體感 — 不是它主動跟我聊,是我開了一扇窗看它的思考流。
這裡也有個小陷阱:Codex idle 時 log 不會長新行,pane 就靜止不動。第一次看會以為當掉了,其實是正常的 — 沒事件 = 沒新 log = 畫面不動。
🎨 踩坑:read-only sandbox 擋住寫檔 {#踩坑}
最能說明「對等是有限度的」的,就是這個坑。
我把一個明確任務丟給 Codex:在 src/game/cards.ts 產出官方 Splendor 完整牌庫(90 張發展卡 + 10 張貴族卡)的 TypeScript 資料。Codex 該做的都做了 — 讀 types.ts import 既有型別、查官方卡表數值、跑 tsc 檢查 — 但到了寫檔那一步,被 sandbox 擋住。
它甚至跑了這個來探權限:
ls -ld . src src/game && touch src/game/.codex-write-test && rm src/game/.codex-write-test
結論是:MCP 接過去的 Codex session 預設 read-only,要它真的寫檔,得另開 workspace-write 權限的 session。也就是說 — 它嘴上能跟我完整討論這個檔該怎麼寫,手上卻動不了。
這正是雙 AI 協作最容易被美化的地方:對話通了不代表協作通了。一個能聊、能查、能驗,但不能落地的副手,跟一個能落地的副手,差的就是這層權限設定。
📅 時間軸:這次協作實際發生了什麼 {#時間軸}
把今天這一輪攤平,大概是這個順序:
codex MCP server,第一通用「你能不能生圖」之類的問題試水溫,確認雙向回傳 OK。gpt-5.4 / gpt-5.2-codex 不支援,換 gpt-5.5 才通。git log),拿 commit hash 6cf8254 對上,確認是真的在我本機跑。cards.ts 生成任務,Codex 流程全對,卡在 read-only 寫不了檔。Before:我對「Claude Code 能不能叫 Codex」只有概念,沒驗過。
After:接通了、驗過是真的、看得到它工作、也摸清了它動不了手的邊界。
⚖️ 學到什麼:雙 AI 分工的真實邊界 {#學到什麼}
我自己一開始也以為「兩個 AI 接起來」就等於「它們會自己協作」。實際走一遍,我修正成三點:
- 通道 ≠ 協作。MCP 把話傳過去了,但 Codex 是被動的、一次一問的。真正的「對等同事感」需要它能主動回報進度,目前的 one-shot 模型做不到。
- 能聊 ≠ 能動手。權限(sandbox)是獨立於對話的一層。要副手真的交付產物,得先把
workspace-write這類設定弄對,不然它只能當顧問。 - 驗證比接通更重要。AI 回「好了」的成本是零,我拿 commit hash、
tsc結果去對的成本才是真的。第二個 AI 加進來,驗證的責任不會減少,反而要更嚴。
❓ 常見問題 {#常見問題}
Q1:Claude Code 真的能直接呼叫 Codex 嗎?
能。透過 MCP server 曝出的 codex / codex-reply 工具,Claude Code 可以開 Codex session、帶 threadId 續跑,Codex 在同一台機器上讀檔、跑指令、回報。
Q2:這算是兩個 AI 在「聊天」嗎?
算結構化輪流問答,不算自由對話。我每輪都要主動發 prompt,Codex 才執行並回報;它不會主動找我講話,也不會自己持續推進。
Q3:怎麼確認 Codex 不是在「演」回答?
給它編不出來的本機題:讀只有你本機有的檔、跑 git log 回傳 commit hash、做算術。拿真實產物去對(round-trip),對得上才算數。
Q4:為什麼 Codex 查得到、聊得來,卻寫不了檔?
MCP 接過去的 session 預設 read-only sandbox。對話跟寫入權限是兩層,要落地產物得另開 workspace-write。
Q5:怎麼即時看到 Codex 在做什麼?
Codex 把每個 session 寫成 JSONL rollout log(~/.codex/sessions/)。寫支腳本 tail -f 最新那份、解析事件染色,丟進 tmux pane,就能看到它的推理、指令、回話即時滾動。
🔗 延伸資源 {#延伸資源}
- Model Context Protocol 官方文件 — MCP 通道的協定規格
- Claude Code 官方文件 — MCP server 怎麼掛、工具怎麼曝
- OpenAI Codex CLI — Codex 端的 sandbox 模式(read-only / workspace-write / danger-full-access)與 session log 格式