開源・單檔 Python・不裝套件・不用 API 金鑰・只走訂閱

一個資料夾、兩個 AI

讓 Claude Code 和 Codex 共用同一個工作區,又不互相踩到。你不用看懂程式,也不用打指令:貼一句話給你的 AI,它自己裝,大約十分鐘。

貼一句話就裝好 看程式碼與設計筆記

來龍去脈:為什麼會有這個東西

現在很多人同時在用 Claude Code 和 Codex。同業問我:「我本來用 Claude Code,今天開始用 Codex,指定同一個資料夾會不會衝突?還是分開兩個資料夾好?」

我的答案是同一個資料夾。分開兩個資料夾,你累積的習慣、流程、資料就分家了:這邊改過的東西那邊看不到,換一個模型接手就錯亂,你還得多一個動作幫它們互相同步,那是多此一舉。

再來是額度。一邊的額度快用完,要換另一邊接著做,兩邊就得看到同一份東西,而且接手的那個要知道做到哪了。另一位同業問的正是這個:「額度用完換另一個模型接手,它怎麼知道進度?每次都要寫交接手冊嗎?」

最後是互踩。兩個 AI 同時做事,會改到同一份檔案,也會互相看不見對方做過什麼。我自己就撞過:8 月 8 日晚上 Codex 跑完一輪稽核,一個多小時後 Claude 又派了一個工兵做同一件事,兩邊都沒做錯,就是互相看不見,那一次重工是真的花掉的額度。所以要有規矩:先登記再做、同一份檔案同一時間只有一個人寫、把進度與結果留在共同清單。這頁要裝的東西,就是把這三條規矩做成一個小程式。

你在對話裡講人話「這個你排進去做」「還有什麼沒做完」
本機待辦清單一個 SQLite 檔,Claude Code 與 Codex 讀同一份;登記、領取、進度都記在這
引擎去做事目前對話直接做,需要時才另外開背景引擎;依宣告範圍改檔
結果回到對話隨時可查;接好 hook 後提示未讀摘要

它做什麼,不做什麼

做的事

  • 登記:每件工作先進待辦清單,不管誰要做、你在不在旁邊看
  • 搶單:同一件事只有一個人搶得到;四個行程同時搶,永遠只有一個贏家
  • 領取憑證:每次領取都有自己的憑證;工作不因時間到就被搶走,舊對話也不能替新一輪結案
  • 一檔一 writer:每件任務先宣告要改哪些檔;同一份檔案同一時間只有一個人寫,範圍重疊又沒先後順序就直接拒收
  • 續作:AI 隨里程碑保存進度;確認原引擎停手後,接手者讀進度、核對成果再繼續
  • 結果可讀回:直接請 AI 查結果;選配 hook 可在同資料夾下一個觸發它的對話提示未讀摘要
  • 訂閱登入:啟動前移除已知 API 環境變數;仍請確認 CLI 已登入訂閱,沒有另外設定自訂 API provider

沒有不做的事

  • 沒有暫存區寫入:引擎直接在你的資料夾裡改檔,不是先改副本再搬回來
  • 沒有整波盤點:不會在每一波結束後把整個資料夾掃一遍抓越界;只靠宣告和事後的 git 檢查
  • 沒有另一引擎審查:做完不會自動請另一個 AI 再驗一次
  • 沒有儀表板、不支援多台電腦
  • 沒有常駐服務:你交辦它才做,不會自己在背景一直轉
  • 它擋的是兩個聽話的 AI 不小心互踩,不是安全邊界;故意搗蛋的程式它擋不住

這些「沒有」是完整版才有的東西。完整版綁死在作者自己的環境裡搬不出去,這裡放的是照同一套方法重寫的最小版。

你需要什麼

安裝:貼一句話給你的 AI,它自己裝

會用這個的人,電腦上一定已經有 Claude Code 或 Codex。所以最簡單的裝法不是你打指令,是叫它裝。做完一步就打勾,勾勾會記在你的瀏覽器裡。

這一步決定這個東西會不會被你用起來。不要另外開一個測試夾裝完就丟——裝在你平常真的在累積東西的那個資料夾,以後 Claude 和 Codex 都從這裡開始,資料才會一直長在同一個地方。

兩種常見選法,挑一種:

  • 母資料夾(推薦給大部分人):在「文件」底下開一個 AI工作區,以後每個題目在裡面開子資料夾(講稿、衛教文、投資筆記、某個專案…)。裝一次,一份清單管理其下的主題;子資料夾不要再裝另一份清單來管理同一批檔案。兩個 AI 都從母資料夾開啟,才會用到同一份規則。
  • 單一專案:你已經有一個固定在用的專案資料夾(而且它自己是個 git repo),就直接裝在那裡。互不重疊的獨立專案可以各裝一份;每份清單只知道自己的工作。

做完會看到:一個資料夾。之後裝好的東西、待辦清單、紀錄全部都在這個資料夾裡,不會跑到別的地方。建議順手讓 AI 在這個資料夾 git init,多一層「有沒有改到不該改的檔」的檢查。

桌面 App 用「開啟資料夾」選第 0 步那個資料夾。用終端機的人先 cd 進那個資料夾,再打 claudecodex以後每次都從這裡開,這是整件事的關鍵。

做完會看到:AI 的對話框,而且它顯示的工作目錄就是那個資料夾。位置不對就先關掉重開,因為待辦清單會裝在它當下站的那個資料夾。

請先檢查 Python 3.10 以上,把 https://github.com/Nouischen/one-folder-two-agents 下載到新建的暫存位置,讀 BUILD_SPEC.md。在下載副本跑第 7 節完整驗收,測試不要碰我的真實清單。確認目前資料夾是我要長期用的工作區後,備份既有檔案與清單,把 aiq.py 安裝或更新到這裡,再執行 install 產生兩邊共用的規則,保留個人設定與原任務。完成後用白話告訴我怎麼用。全域 hook 是選配,改之前先讓我看內容並問一次;除了下載與測試的暫存位置,不要改這個工作區以外的檔案。

整句照貼就好,一個字都不用改。

接下來會發生的事:它先檢查 Python,然後下載程式、讀施工圖、在暫存副本跑完整驗收,再把 aiq.py 和兩邊共用的規則裝進你的資料夾。中間如果它問你「可不可以執行這個指令」,按允許。整個過程大約十分鐘。

如果它說沒有 Python 或版本太舊:它會用白話教你怎麼裝。照做完,跟它說「裝好了,繼續」。想自己先確認:Windows 打開「命令提示字元」輸入 python --version,跳出微軟商店的視窗就代表還沒裝,到 python.org 下載安裝就好。

三個徵象同時出現就是裝好了:

  1. 它回報 T1 到 T7 全部通過
  2. 資料夾裡有 aiq.pyAIQ.md,以及包含共用規則的 CLAUDE.mdAGENTS.md.aiq 資料夾(Mac 的 Finder 預設看不到點開頭的資料夾,按 Cmd+Shift+. 就會顯示)
  3. 在兩個工具各開一個新對話,問「這裡有什麼沒做完的?」;它們都找得到同一份清單。Hook 沒接也能使用

它的回報大概長這樣:

建了什麼:aiq.py 放在你的專案資料夾,資料都在 .aiq 裡。以後在這個資料夾的對話裡說「這個你排進去做」「還有什麼沒做完」就好,要改哪些檔我會自己判斷再告訴你。

驗收結果:T1 通過、T2 通過、T3 通過、T4 通過、T5 通過、T6 通過、T7 通過。

做不到的:暫存區寫入、整波盤點、另一引擎審查、儀表板、多台電腦。
hook 還沒接。要不要我幫你把「結果自動出現在下一句對話」接上?改之前我會先備份。

想看它真的動一次?回它「跑 T8」。那會在另一個暫存工作區派一件小任務給引擎做,會用掉一點額度,不會把測試工作留在你的正式清單。

它問「要不要接 hook」的時候,回它這句:

好,先備份再改

它會先把要加的內容印給你看,備份原本的設定檔,然後改 Claude Code 的 settings.json 或 Codex 的 hooks.json

做完會看到:之後你在支援並啟用 hook 的 CLI 中,同資料夾下一個觸發它的對話會讀到未讀摘要。它沒有原對話定址,也不會自己叫醒 AI;別的 App 是否支援要另測。結果隨時可以再請 AI 讀回。

想自己看它會加什麼?展開
  • Claude Code:在 ~/.claude/settings.jsonhooks.UserPromptSubmit 加一個 command hook,指令是 python <aiq.py 的絕對路徑> hook,timeout 10 秒。已經有其他 hook 就附加在後面,不會覆蓋。改之前先把原檔複製一份 settings.json.bak-<日期>
  • Codex:在 ~/.codex/hooks.jsonUserPromptSubmit 加同樣的指令。加完要回到 Codex 裡打 /hooks,把它檢視並信任一次才會生效,之後 hook 內容有改要再信任一次。少了這步,Codex 那邊會安靜地完全沒反應。
  • 這個 hook 指令永遠正常結束、任何錯誤都吞掉:資料庫壞了、檔案不在、權限不對,都安靜退出,絕對不會弄壞你的對話。
  • Windows 上 python 這個名字有時是一層殼,不是真正跑程式的那個;hook 裡寫 Python 的完整路徑比較穩,AI 會處理。macOS 上沒有 python 這個指令,要用 python3 或完整路徑。
  • 這個 hook 掛上去是整台電腦生效的,但程式只會在你人就在這個專案資料夾時才出聲;在別的專案講話不會被灌進這裡的結果。

平常怎麼用

先講清楚什麼時候用得到。如果你從頭到尾只開一個 AI、一個對話,那你不需要這個東西,直接叫它做就好。它是為了「同一個資料夾會有第二個人動手」而存在的:另一個 AI、另一個對話,或是你等一下換過去的那一邊。

先說清楚它擋得住什麼、擋不住什麼

它是禮讓規則,不是門鎖。保護靠兩邊的 AI 自願先查清單。這一點被獨立紅隊拆過:規則只用一行指過去時,AI 會直接跳過、先改再說;把規則整段寫進資料夾的設定檔之後重測,它就會先查、發現有人在做就停手並問你要怎麼辦。安裝程式現在會把完整操作規則寫進兩邊的設定檔,也會在領取與重排時再次檢查衝突;仍需要 AI 照規矩走。

互動工作和背景工作都會做 Git 事後檢查,包含原本已修改檔案的內容變更。沒有 Git 就沒有這層檢查;Git 忽略的檔案、巢狀專案和兩邊同時寫入,也無法完整判斷責任。程式不會復原改動。它讓互踩變少,不讓互踩變成不可能。重要的東西請照樣 commit 或備份。

裝好之後不用記指令,也不用背暗號。你正常交辦,AI 讀得到安裝時留下的說明,自己知道要走這份共用清單。三個真的會用到的時刻:

一、你要交辦一件會動到檔案的事,而且待會另一邊也要做事

你講你要什麼,加一句「這個你排進去做」。它會先把「會動到哪幾個檔」登記起來把那幾個檔佔住,然後自己動手做。

report.md 第一段太囉唆了,幫我改短一點,這個你排進去做

佔住之後才是重點。你同時在另一邊(Codex,或另一個對話)做別的事,那邊動手前會先看一眼這份清單,發現這幾個檔有人佔著就不會碰。這是我實測過的原話,我請一個全新的 Codex 去改同一個檔,它回:

report.md 已有另一邊排隊中的同一項修改,我先不碰,避免兩邊互相覆寫。你要我等那邊完成,還是改做其他事?

檔案完全沒被動到。要動哪些檔不用你想,AI 看完你的要求和資料夾自己判斷,登記完會告訴你一聲。你有特別在意的才補一句「只能動這個檔」。

二、額度快用完,換另一邊接手

Claude 快沒額度時,先跟它說「把進度存好,交給另一邊接」,讓它保存成果並停手。然後在同一個資料夾開 Codex,講這句:

我 Claude 額度快用完了,這邊還有什麼沒做完的嗎?有的話你接著做

它會讀同一份清單、目標和進度,用它自己的額度繼續;互動對話也能保存交接進度。若原對話已突然中斷,接手者會先確認舊引擎已停止,再核對現有檔案。時間到了不會自動把還有人在做的工作搶走;沒有保存的部分也不會憑空回來。這是工作摘要的交接,完整聊天記錄不會自動搬過去。

三、回頭看還有什麼沒做完

隔天或換個對話回來,直接問就好。

還有什麼沒做完的?

它會列出每一件的狀態:排隊中、進行中、完成、失敗、等你決定。接好 hook 的 CLI 可在同資料夾下一個觸發它的對話提示未讀摘要;任何對話都能再請 AI 查結果。

背景任務遇到權限問題

平常在目前對話直接交辦即可。只有你要它另外開引擎做,才用背景執行。若背景任務卡在指令或測試權限,先讓 AI 讀錯誤原因,改由目前對話完成,或只開必要的權限。

這件背景工作卡在權限,請讀原因,改由目前對話接著做,或告訴我需要開哪一項權限。

進階選項 --allow-all 會跳過引擎的整套權限保護;一般安裝或測試不需要預設開啟。想指定背景模型時可請 AI 使用 --model;不指定就沿用 CLI 設定。

怎麼讓它真的變成你的固定工作流

這是這頁最重要的一段。裝完如果你隔天又回去用原本的資料夾,這東西就白裝了——它只認得裝它的那個資料夾。要讓它有用,只需要養成一個習慣:

以後不管開 Claude 還是 Codex,都從這個資料夾開始

桌面 App 就用「開啟資料夾」選它;終端機就先 cd 進去再打指令。兩邊都從這裡開,於是兩邊看到的是同一份東西:同樣的檔案、同樣的參考資料、同樣的待辦清單、同樣做過的紀錄。

你累積的東西會從這個資料夾長出來,而不是散在各處、這邊一份那邊一份。這也是為什麼第 0 步要選「你真的會一直用」的那個資料夾。

把常用的東西也放進來

參考資料、你的寫作範例、常用的規格與範本、正在進行的專案,都放在這個資料夾(或它的子資料夾)底下。兩個引擎都讀得到。工作目標與決策也請 AI 隨進度記下,接手時才知道該怎麼用。

安裝時 AI 會在這裡留一份 AIQ.md,並在 CLAUDE.mdAGENTS.md 各寫一段規則。這三個檔就是「這個資料夾的規矩」——以後任何新對話一進來就會讀到,不用你交代。你自己的其他習慣也可以寫進 CLAUDE.mdAGENTS.md,一起長。

一句話檢查你有沒有走對

在這個資料夾開一個新對話,隨便問一句,如果它知道這裡有待辦清單,就對了:

這個資料夾有什麼規矩?還有什麼沒做完的?

如果它一臉茫然,通常是你開錯資料夾了,或是安裝時那三個檔沒有建起來。

誠實提醒:清單是跟著資料夾走的。你在別的資料夾工作時,這裡的東西幫不上忙,也不會干擾你(結果只在你人在這個資料夾時才會出現)。所以「都從同一個地方開始」不是建議,是它能不能發揮作用的前提。

兩個 AI 怎麼共用

開同一個資料夾,就是同一個待辦清單。Claude Code 登記的任務 Codex 看得到,反過來也一樣,因為兩邊讀的是資料夾裡同一個 .aiq。你累積的檔案、參考資料、做過的紀錄都在同一處,不會分家。

換手就是換額度。接手的那一邊會用自己的額度去跑沒指定引擎的任務,不會把已用掉的額度搬過去,也不會自動切換正在執行的任務。

兩個可以同時做事。你在 Claude 那邊叫它做一件,同時在 Codex 那邊叫它做另一件,兩邊會各拿一件、同時進行。程式會在登記、重排、領取時檢查衝突;有先後順序的工作可以一起排隊,執行時依序進行。前提是兩邊都遵守「成功領取才動手」的規則。

兩件任務要改同一份檔案:登記第二件時會被擋下來,AI 會告訴你跟哪一件衝突。你只要說「這件等那件做完再做」,它就會加上先後順序,兩件都能進待辦清單。

卡住怎麼辦

幾種常見的卡法。每一種都附一句可以直接貼給 AI 的話。

卡住它說找不到 Python,或版本太舊

電腦上沒有 Python 3.10 以上。不是你的錯,叫它教你裝。

請檢查這台電腦有沒有 Python 3.10 以上,沒有就用白話一步一步教我裝;裝好之後再把 aiq.py 的驗收 T1 到 T7 跑一次給我看。

卡住它說「這台電腦沒有 claude 也沒有 codex」

引擎沒裝,或裝了但系統的 PATH 找不到它。

請確認這台電腦上 claude 和 codex 這兩個指令找不找得到(PATH 裡有沒有)。找不到的話,用白話告訴我是沒裝還是路徑沒設,以及要怎麼修。

等決定任務變成 needs_decision

常見原因:引擎非正常結束、結果檔空白、逾時,或改到宣告範圍外。先請 AI 讀任務結果;背景任務另有 engine.log。檢查已做的改動後再決定續作,不能把半成品當成完成。

請找出需要處理的任務,讀它的結果、進度和背景紀錄,核對目前檔案後用白話說明原因。確定可以續作才重新排入,不要重複已發布或已寄出的動作。

沒保護它說這個資料夾不是 git repo,沒有越界檢查

「引擎有沒有改到不該改的檔」這層檢查靠 git。不是 git repo 就只剩 prompt 裡的範圍宣告,還是能用,只是少一層保護。

請確認這個專案資料夾是不是 git repo。不是的話先 git init,並把 .aiq/ 加進 .gitignore,這樣越界改動的檢查才會生效。

順序它做的不是我剛交辦的那件

背景清單先進先出;目前對話交辦的工作應該領取它自己的任務。新版驗收只在暫存區跑,正式清單不應留測試工作。

請先核對我剛交辦的是哪一件,領取正確的任務再做;若有舊版測試留下的工作,先辨認清楚再取消,不要把真正沒做完的工作標成完成。

已經裝過的人,怎麼更新

先讓兩邊正在執行的工作停手或完成,再貼一次第 2 步的安裝說明。AI 會備份、更新程式和兩邊的規則,保留原任務與個人設定。

這次更新補上互動式交接進度、每次領取的憑證,以及重排時的衝突檢查。舊版只更新程式還不夠,三份共用規則也要一起更新;安裝程式會處理。

若有舊任務一直顯示進行中,告訴 AI「舊對話已停止,請核對進度後接手」。只有在舊引擎確實停手時才這樣說。

之後想移除

一樣在那個資料夾的對話裡跟 AI 說一句:

請幫我移除這個待辦清單:先確認兩邊都停手,列出這份安裝的精確範圍並備份,讓我確認後才刪除 aiq.py 和 .aiq(裡面有全部進度與結果)。AIQ.md、CLAUDE.md 與 AGENTS.md 只移除 AIQ:BEGIN 到 AIQ:END 的區段,保留我的其他規則;舊版沒有標記就先辨認舊 AIQ 段落。全域設定只移除確實指向這份安裝的 hook,保留其他專案的設定。

備份裡會保留你的進度與結果。其他專案檔案和個人規則保留;沒有接過 hook 就不需要修改全域設定。

這不是完整版

這頁裝的是最小版:一個檔案,兩成的效果,夠一個人在同一台電腦上讓兩個 AI 不互踩。它是怎麼設計的、完整版多了什麼、踩過哪些雷,都寫在 GitHub 的設計筆記裡。