現在很多人同時在用 Claude Code 和 Codex。同業問我:「我本來用 Claude Code,今天開始用 Codex,指定同一個資料夾會不會衝突?還是分開兩個資料夾好?」
我的答案是同一個資料夾。分開兩個資料夾,你累積的習慣、流程、資料就分家了:這邊改過的東西那邊看不到,換一個模型接手就錯亂,你還得多一個動作幫它們互相同步,那是多此一舉。
再來是額度。一邊的額度快用完,要換另一邊接著做,兩邊就得看到同一份東西,而且接手的那個要知道做到哪了。另一位同業問的正是這個:「額度用完換另一個模型接手,它怎麼知道進度?每次都要寫交接手冊嗎?」
最後是互踩。兩個 AI 同時做事,會改到同一份檔案,也會互相看不見對方做過什麼。我自己就撞過:8 月 8 日晚上 Codex 跑完一輪稽核,一個多小時後 Claude 又派了一個工兵做同一件事,兩邊都沒做錯,就是互相看不見,那一次重工是真的花掉的額度。所以要有規矩:先登記再做、同一份檔案同一時間只有一個人寫、做完的結果回到原本那個對話。這頁要裝的東西,就是把這三條規矩做成一個小程式。
這些「沒有」是完整版才有的東西。完整版綁死在作者自己的環境裡搬不出去,這裡放的是照同一套方法重寫的最小版。
會用這個的人,電腦上一定已經有 Claude Code 或 Codex。所以最簡單的裝法不是你打指令,是叫它裝。做完一步就打勾,勾勾會記在你的瀏覽器裡。
這一步決定這個東西會不會被你用起來。不要另外開一個測試夾裝完就丟——裝在你平常真的在累積東西的那個資料夾,以後 Claude 和 Codex 都從這裡開始,資料才會一直長在同一個地方。
兩種常見選法,挑一種:
做完會看到:一個資料夾。之後裝好的東西、待辦清單、紀錄全部都在這個資料夾裡,不會跑到別的地方。建議順手讓 AI 在這個資料夾 git init,多一層「有沒有改到不該改的檔」的檢查。
桌面 App 用「開啟資料夾」選第 0 步那個資料夾。用終端機的人先 cd 進那個資料夾,再打 claude 或 codex。以後每次都從這裡開,這是整件事的關鍵。
做完會看到:AI 的對話框,而且它顯示的工作目錄就是那個資料夾。位置不對就先關掉重開,因為待辦清單會裝在它當下站的那個資料夾。
請先檢查這台電腦有沒有 Python 3.10 以上,沒有就用白話告訴我怎麼裝,裝好再繼續。然後把 https://github.com/Nouischen/one-folder-two-agents 複製到一個暫存位置,讀它的 BUILD_SPEC.md,把 aiq.py 複製進我現在這個專案資料夾,照 BUILD_SPEC.md 第 7 節跑驗收 T1 到 T7,全部通過後用白話告訴我怎麼用。改我的 hook 設定之前先問我。不要碰這個資料夾以外的檔案。整句照貼就好,一個字都不用改。
接下來會發生的事:它先檢查 Python,然後下載程式、讀施工圖、把 aiq.py 放進你的資料夾、跑七項驗收。中間如果它問你「可不可以執行這個指令」,按允許。整個過程大約十分鐘。
三個徵象同時出現就是裝好了:
aiq.py 和一個 .aiq 資料夾(Mac 的 Finder 預設看不到點開頭的資料夾,按 Cmd+Shift+. 就會顯示)它的回報大概長這樣:
建了什麼:aiq.py 放在你的專案資料夾,資料都在 .aiq 裡。以後在這個資料夾的對話裡說「這個你排進去做」「還有什麼沒做完」就好,要改哪些檔我會自己判斷再告訴你。 驗收結果:T1 通過、T2 通過、T3 通過、T4 通過、T5 通過、T6 通過、T7 通過。 做不到的:暫存區寫入、整波盤點、另一引擎審查、儀表板、多台電腦。 hook 還沒接。要不要我幫你把「結果自動出現在下一句對話」接上?改之前我會先備份。
想看它真的動一次?回它「跑 T8」。那會真的派一件小任務給引擎做(在資料夾裡建一個 hello.txt),會用掉一點點額度。
它問「要不要接 hook」的時候,回它這句:
好,先備份再改它會先把要加的內容印給你看,備份原本的設定檔,然後改 Claude Code 的 settings.json 或 Codex 的 hooks.json。
做完會看到:之後你在同一個資料夾開的任何 Claude Code 或 Codex 對話,每說一句話,還沒讀過的工作結果就會自己出現在 AI 的脈絡裡,它會主動轉述給你。
~/.claude/settings.json 的 hooks.UserPromptSubmit 加一個 command hook,指令是 python <aiq.py 的絕對路徑> hook,timeout 10 秒。已經有其他 hook 就附加在後面,不會覆蓋。改之前先把原檔複製一份 settings.json.bak-<日期>。~/.codex/hooks.json 的 UserPromptSubmit 加同樣的指令。加完要回到 Codex 裡打 /hooks,把它檢視並信任一次才會生效,之後 hook 內容有改要再信任一次。少了這步,Codex 那邊會安靜地完全沒反應。hook 指令永遠正常結束、任何錯誤都吞掉:資料庫壞了、檔案不在、權限不對,都安靜退出,絕對不會弄壞你的對話。python 這個名字有時是一層殼,不是真正跑程式的那個;hook 裡寫 Python 的完整路徑比較穩,AI 會處理。macOS 上沒有 python 這個指令,要用 python3 或完整路徑。先講清楚什麼時候用得到。如果你從頭到尾只開一個 AI、一個對話,那你不需要這個東西,直接叫它做就好。它是為了「同一個資料夾會有第二個人動手」而存在的:另一個 AI、另一個對話,或是你等一下換過去的那一邊。
它是禮讓規則,不是門鎖。保護靠兩邊的 AI 自願先查清單。這一點被獨立紅隊拆過:規則只用一行指過去時,AI 會直接跳過、先改再說;把規則整段寫進資料夾的設定檔之後重測,它就會先查、發現有人在做就停手並問你要怎麼辦。現在的版本是修好的那一版,但這仍然是「AI 照規矩走」,不是程式把檔案鎖起來。
另外,資料夾不是 git repo,或那個檔本來就有還沒存檔的修改時,改錯檔案抓不到(新版會在結果裡明講「這次沒有做越界檢查」,但還是抓不到)。它讓互踩變少,不讓互踩變成不可能。重要的東西請照樣 commit 或備份。
裝好之後不用記指令,也不用背暗號。你正常交辦,AI 讀得到安裝時留下的說明,自己知道要走這份共用清單。三個真的會用到的時刻:
你講你要什麼,加一句「這個你排進去做」。它會先把「會動到哪幾個檔」登記起來把那幾個檔佔住,然後自己動手做。
report.md 第一段太囉唆了,幫我改短一點,這個你排進去做佔住之後才是重點。你同時在另一邊(Codex,或另一個對話)做別的事,那邊動手前會先看一眼這份清單,發現這幾個檔有人佔著就不會碰。這是我實測過的原話,我請一個全新的 Codex 去改同一個檔,它回:
report.md 已有另一邊排隊中的同一項修改,我先不碰,避免兩邊互相覆寫。你要我等那邊完成,還是改做其他事?
檔案完全沒被動到。要動哪些檔不用你想,AI 看完你的要求和資料夾自己判斷,登記完會告訴你一聲。你有特別在意的才補一句「只能動這個檔」。
Claude 快沒額度時,你先把還沒做的交辦下去,然後在同一個資料夾開 Codex,講這句:
我 Claude 額度快用完了,這邊還有什麼沒做完的嗎?有的話你接著做它會自己看到清單上還有什麼、用它自己的額度接著做,不用你重講一次背景。交辦的內容存在清單裡,所以不用你重講一次背景。反過來從 Codex 換回 Claude 也一樣。(「從上次進度接下去」只有在你把工作交給背景執行時才有,對話裡直接做的那種被中斷就是重做。)這段我也實測過:Codex 收到這句話之後自己找到沒做完的那件、做完、記錄完成,全程一次額度。
隔天或換個對話回來,直接問就好。
還有什麼沒做完的?它會列出每一件的狀態:排隊中、進行中、完成、失敗、等你決定。接了 hook 的話,做完的結果會自己出現在你下一句對話裡,連問都不用問。
任務要跑指令或測試時:預設只放行「改專案內的檔案」,引擎連跑一個測試都會被擋。這種任務叫 AI 用 --allow-all 跑,那會跳過引擎的所有權限確認,只在你信得過這件任務時用。
這件任務需要跑指令或測試,跑的時候加 --allow-all想指定模型時:不指定就用各 CLI 自己的預設模型。要指定就叫 AI 用 --model。
跑的時候用 --model 指定〈模型名稱〉這是這頁最重要的一段。裝完如果你隔天又回去用原本的資料夾,這東西就白裝了——它只認得裝它的那個資料夾。要讓它有用,只需要養成一個習慣:
桌面 App 就用「開啟資料夾」選它;終端機就先 cd 進去再打指令。兩邊都從這裡開,於是兩邊看到的是同一份東西:同樣的檔案、同樣的參考資料、同樣的待辦清單、同樣做過的紀錄。
你累積的東西會從這個資料夾長出來,而不是散在各處、這邊一份那邊一份。這也是為什麼第 0 步要選「你真的會一直用」的那個資料夾。
參考資料、你的寫作範例、常用的規格與範本、正在進行的專案,都放在這個資料夾(或它的子資料夾)底下。兩個引擎都讀得到,換哪一邊接手都不用重新交代。
安裝時 AI 會在這裡留一份 AIQ.md,並在 CLAUDE.md 與 AGENTS.md 各寫一段規則。這三個檔就是「這個資料夾的規矩」——以後任何新對話一進來就會讀到,不用你交代。你自己的其他習慣也可以寫進 CLAUDE.md/AGENTS.md,一起長。
在這個資料夾開一個新對話,隨便問一句,如果它知道這裡有待辦清單,就對了:
這個資料夾有什麼規矩?還有什麼沒做完的?如果它一臉茫然,通常是你開錯資料夾了,或是安裝時那三個檔沒有建起來。
誠實提醒:清單是跟著資料夾走的。你在別的資料夾工作時,這裡的東西幫不上忙,也不會干擾你(結果只在你人在這個資料夾時才會出現)。所以「都從同一個地方開始」不是建議,是它能不能發揮作用的前提。
五種最常見的卡法。每一種都附一句可以直接貼給 AI 的話。
電腦上沒有 Python 3.10 以上。不是你的錯,叫它教你裝。
請檢查這台電腦有沒有 Python 3.10 以上,沒有就用白話一步一步教我裝;裝好之後再把 aiq.py 的驗收 T1 到 T7 跑一次給我看。引擎沒裝,或裝了但系統的 PATH 找不到它。
請確認這台電腦上 claude 和 codex 這兩個指令找不找得到(PATH 裡有沒有)。找不到的話,用白話告訴我是沒裝還是路徑沒設,以及要怎麼修。三種常見原因:引擎結束但沒寫結果檔;改到宣告範圍外的檔案;Codex 說設定檔裡的模型需要新版 CLI 而秒退。真正的原因寫在 .aiq/tasks/<任務id>/engine.log,叫 AI 去讀。
有任務變成 needs_decision。請讀 .aiq/tasks/那件任務的id/engine.log,用白話告訴我原因。如果是 Codex 說模型需要新版 CLI,就用 --model 指定一個目前能跑的模型,把那件任務 requeue 之後再跑一次。「引擎有沒有改到不該改的檔」這層檢查靠 git。不是 git repo 就只剩 prompt 裡的範圍宣告,還是能用,只是少一層保護。
請確認這個專案資料夾是不是 git repo。不是的話先 git init,並把 .aiq/ 加進 .gitignore,這樣越界改動的檢查才會生效。清單先進先出,會先做最早登記、還沒做完的那件。前面測試留下來的先收掉,再跑你要的。
先列出待辦清單裡所有還沒做完的任務。前面測試留下來、我不需要的,幫我標成完成或失敗收掉,剩下我真的要做的再跑。一樣在那個資料夾的對話裡跟 AI 說一句:
請幫我移除這個待辦清單:先備份,然後刪掉這個資料夾裡的 aiq.py、AIQ.md 和 .aiq 資料夾,把 CLAUDE.md 與 AGENTS.md 裡那行「請先讀 AIQ.md」拿掉(這兩個檔如果只剩那一行就整個刪掉),再把 Claude Code 的 settings.json(或 Codex 的 hooks.json)裡呼叫 aiq.py hook 的那一段拿掉。改設定檔之前先備份一份。沒接過 hook 的人,它只會刪那兩樣東西。你專案裡其他檔案不會被動到。
這頁裝的是最小版:一個檔案,兩成的效果,夠一個人在同一台電腦上讓兩個 AI 不互踩。它是怎麼設計的、完整版多了什麼、踩過哪些雷,都寫在 GitHub 的設計筆記裡。