AI 工具 12 min read ★ Featured

兩個 AI 真能「對等聊天」?Claude Code × Codex MCP 協作的真實邊界

Claude Code 透過 MCP 可以直接呼叫本機 Codex 跑子任務——我下 prompt、Codex 在同一台機器讀檔/跑指令/回報。但這是「結構化輪流問答」(one-shot + threadId 延續),不是兩個 AI 自由聊起來。這篇紀錄我接通的全程:怎麼用三題本機驗證確認「真的接通而不是腦補」(它回傳 commit hash 6cf8254 我去對)、怎麼用 tmux pane 即時看 Codex 的推理與指令、以及最能說明「對等有限度」的坑——MCP 接過去的 Codex 預設 read-only sandbox,嘴上能聊手上卻寫不了檔。結論:接通 ≠ 協作,能聊 ≠ 能動手。

本文目錄 · 10
TL;DR
Claude Code 透過 MCP 可以直接「叫」Codex 幫忙跑子任務 — 我下 prompt、Codex 在同一台機器上讀檔/跑指令/回報。
但這是結構化輪流問答(one-shot + threadId 延續),不是兩個 AI 自己聊起來的自由對話。
本篇紀錄我今天接通的全程:怎麼驗證「真的接通了」、怎麼用 tmux pane 即時看 Codex 在幹嘛、哪裡卡住(read-only sandbox)、以及「對等」到底對等在哪、不對等在哪。

📌 目錄

⭐ 先講結論:對等在哪、不對等在哪 {#先講結論}

Claude Code 透過 MCP 呼叫 Codex 雙 AI 協作

我今天做的事,是讓 Claude Code(我這邊)透過 MCP 直接呼叫本機的 Codex session,把一個子任務丟過去、讓它在同一個 repo 上動手、再把結果拿回來整合。

「對等」這個詞容易讓人想像兩個 AI 像同事一樣自由對話。實際接起來之後,我會把話說清楚:

維度真實情況是不是「對等聊天」
通道Claude Code → MCP → Codex,雙向有回傳✓ 雙向
對話節奏我送 prompt,Codex 執行+回報,一來一回△ 結構化輪流,不是自由流
主動性Codex 不會主動 ping 我,要我問才回✗ 不是同事互相搭話
動手能力Codex 預設 read-only,要寫檔得另開權限✗ 嘴上能聊、手上被綁
所以這篇的誠實版標題其實是:兩個 AI 可以「結構化分工」,但「自由聊天」是包裝過頭的講法。我把過程攤開,你自己判斷這算不算對等。

🔗 接通的方式:MCP 通道與 threadId {#接通的方式}

接點是 MCP(Model Context Protocol)。Claude Code 這端掛了一個 codex MCP server,曝出兩個工具:

  • codex — 開一個新的 Codex 對話,回一個 threadId
  • codex-reply — 帶著 threadId 對同一個 session 繼續講,Codex 記得前面的上下文
所以「延續對話」是靠 threadId 串起來的,不是真的有一條長連線在那邊閒聊。整個流程長這樣:
Codex (gpt-5.5)codex MCP serverClaude CodeCodex (gpt-5.5)codex MCP serverClaude Codecodex(prompt)開 session, 執行回報 + threadId結果codex-reply(threadId, 下一個 prompt)帶上下文續跑回報結果

關鍵字先講清楚:這是 one-shot 問答 + session 延續。每一輪我都得明確發問,Codex 才會動。它不會「想到什麼就跟我說」,這跟人類同事在 Slack 上隨手丟一句很不一樣。

至於模型,這個 Codex session 實際跑的是 gpt-5.5(它自己回報為 GPT-5 Codex)。我一開始試 gpt-5.4gpt-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 對上,確認是真的在我本機跑。

  • 開觀測窗 — 寫 watcher 腳本 + tmux pane,即時看 Codex 的 reasoning / 指令 / 回話。

  • 派活卡關 — 派 cards.ts 生成任務,Codex 流程全對,卡在 read-only 寫不了檔。
  • Before:我對「Claude Code 能不能叫 Codex」只有概念,沒驗過。
    After:接通了、驗過是真的、看得到它工作、也摸清了它動不了手的邊界。

    ⚖️ 學到什麼:雙 AI 分工的真實邊界 {#學到什麼}

    我自己一開始也以為「兩個 AI 接起來」就等於「它們會自己協作」。實際走一遍,我修正成三點:

    • 通道 ≠ 協作。MCP 把話傳過去了,但 Codex 是被動的、一次一問的。真正的「對等同事感」需要它能主動回報進度,目前的 one-shot 模型做不到。
    • 能聊 ≠ 能動手。權限(sandbox)是獨立於對話的一層。要副手真的交付產物,得先把 workspace-write 這類設定弄對,不然它只能當顧問。
    • 驗證比接通更重要。AI 回「好了」的成本是零,我拿 commit hash、tsc 結果去對的成本才是真的。第二個 AI 加進來,驗證的責任不會減少,反而要更嚴。
    所以「Claude Code 跟 Codex 可以對等聊天」這句,準確版是:可以結構化分工、可以即時觀測、可以互相驗證,但不是自由對話、也不是無條件落地。知道邊界在哪,才用得起來。

    ❓ 常見問題 {#常見問題}

    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,就能看到它的推理、指令、回話即時滾動。

    🔗 延伸資源 {#延伸資源}

    author
    陳彥彤

    AI 工程師 · AI 顧問。Java 後端 8 年、AI 工程師 2 年。AI 內訓 · AI 導入顧問 · 前後端與雲端培訓。

    support

    覺得文章有用可以到 GitHub 給個 star,或是透過信箱聊聊 AI 內訓、AI 導入顧問或前後端 / 雲端培訓。

    related

    相關文章

    [AI 工具] · 19min
    CodeGraph vs grep:AI 讀 codebase 少 81% 工具呼叫的知識圖譜
    CodeGraph 把整個 codebase 預先建成一張「程式碼知識圖譜」(symbol 節點 + call 邊),讓 Claude Code、Codex、Cursor 這類 AI agent 不用一個一個檔案爬,一次 codegraph_explore 就拿到相關 source、call path 跟改動波及範圍。官方在 7 個真實開源專案實測:VS Code 少 81% tool call、少 64% token,Alamofire 便宜 40%、快 33%。這篇把它是什麼、三層架構(tree-sitter + SQLite + file watcher)、安裝三件套、跟 grep / LSP 的差別、以及我接的時候要注意的點寫一遍。100% 本機跑、MIT、支援 23 種語言、8 個 agent。
    [AI 工具] · 25min
    Claude Code ultrawork 是什麼?官方 dynamic workflows vs 社群 plugin 完整對照(2026-05)
    ultrawork 是 OpenCode 社群造的詞,Anthropic 2026-05-29 推出的 dynamic workflows + /effort ultracode(v2.1.154)才是官方答案,最多召喚 1,000 個 subagents。社群兩個 Claude Code plugin(TechDufus 157★、zephyrpersonal 0★)都源自 oh-my-opencode,2026/01 Anthropic ToS 行動之後才大量移植。本文釐清詞源、列三柱對照、給選擇建議。
    [AI 工具] · 12min
    AI agent 額度爆了不用乾等:ccs 多帳號無縫切換(Claude Code + Codex,同一場對話接得起來)
    額度撞 rate limit 最痛的不是要等刷新,是對話脈絡斷掉。ccs 這套把這個痛點直接做掉——一鍵切到第二個帳號,把同一串對話搬過去用它的額度繼續跑,脈絡完全不斷。核心原理 provider-agnostic:每一場對話其實是一個 .jsonl 檔躺在硬碟上,用 CLAUDE_CONFIG_DIR / CODEX_HOME 環境變數隔離兩個帳號身份,撞 limit 時把那場對話檔複製到第二個帳號目錄、再用它 resume 就好,額度算第二個帳號的、歷史一字不差。支援 Claude Code 與 Codex,連 Codex 斷了用 Claude 接的跨工具接力都涵蓋。安全上用「按需複製單一對話檔」而非 symlink 整個資料夾(後者雙開會 corrupt),token 永遠留在你自己的 Keychain、不被搬移。本文最後一段可以直接複製貼給 Claude Code,它會自己 git clone + 跑 install.sh 幫你裝好——唯一要你自己按的只有第二個帳號的 login。