跳到主要內容
maxstudioNews
AI 自動化DEV Community (Codex)約 11 分鐘

Claude Code 用量耗盡?四步驟將專案交棒給 Codex 續行

當 Claude Code 達到用量限制時,開發者可能會面臨專案中斷的困境。本文提供一個實用指南,教你如何透過四個簡單的指令,將未完成的 Git 工作樹無縫交接給 Codex 繼續開發。 這個方法能確保程式碼、環境設定和測試狀態順利轉移,避免因 AI 工具用量限制而停擺。

Claude Code 用量耗盡?四步驟將專案交棒給 Codex 續行
圖片來源:DEV Community (Codex)

當 Claude Code 在重構程式碼到第三個檔案時,突然顯示「用量限制已達,正在收尾。」Anthropic 關於 Pro 和 Max 方案的說明文章解釋了這代表什麼:你在回應中途達到了用量限制(五小時會話限制或每週限制),因此 Claude 可能會完成它正在執行的步驟。

這個收尾僅涵蓋該次回應,Anthropic 表示這項功能正在逐步推出。它不適用於新的訊息;若要在重置前繼續使用,文章列出了升級、用量點數或 Console 帳戶等選項。所以,你現在有一個半成品分支,有兩個測試失敗,而接下來的開發計畫則存在於一個你無法繼續的對話中,直到用量限制重置為止。

如果你也設定了 Codex,你可以將相同的工作樹交給它,然後繼續開發。這只需要四個指令,其中最後兩個指令會告訴你交接是否成功。

什麼會轉移,什麼會留下

所有 Git 能看到的內容都會轉移。Codex 會在相同的資料夾中啟動,因此它也會取得你的 .env 和 node_modules,這些 Claude Code 已經在使用。這就是為什麼要交接相同的工作樹,而不是啟動一個全新的工作樹。一個新的工作樹只包含追蹤檔案,因此你的忽略檔案必須先複製過去。

有三樣東西會留下:對話、Claude 的自動記憶和 CLAUDE.md。

對話。Codex 不會從 Claude 說過的任何內容開始。下一步的計畫、Claude 已經嘗試過的死胡同、測試故意失敗的原因:除非你把它們寫下來,否則這些都會消失。

Claude 的自動記憶。Claude Code 會為每個儲存庫保留它自己寫下的筆記,並在不同工作樹之間共用。這些筆記屬於 Claude。Codex 不會讀取它們。

CLAUDE.md。Codex 會從專案根目錄向下讀取 AGENTS.md 到它執行的資料夾,以及你在 project_doc_fallback_filenames 中列出的任何備用名稱。不在該列表中的檔案將被忽略。如果一個儲存庫的規則只存在於 CLAUDE.md 中,Codex 將無法取得任何專案規則。

在你需要它之前,先修正最後一個問題。將你的建置指令、測試指令和內部規範移到 AGENTS.md 中,並在 CLAUDE.md 的頂部放一行,讓 Claude Code 匯入相同的檔案:@AGENTS.md。

對話和 Claude 的記憶是交接檔案所取代的內容。Git 已經記錄了已完成的工作,下面的腳本會捕捉測試狀態,所以下一步是你唯一需要寫的一行。對話會留在第一個代理那裡。分支和書面筆記是傳遞的內容。

一次性設定:交接腳本

將此腳本儲存為 handoff.sh,放在你的 PATH 環境變數中的某個位置,在儲存庫之外,並使用 chmod +x 設定為可執行。它會列印 Markdown 格式的內容,因此你可以將其導向到一個檔案:

```bash

#!/bin/sh

usage: handoff.sh "next step" [base] > HANDOFF.md

next="$1"

base="${2:-main}"

tests="${TEST_CMD:-npm test}"

echo "# Handoff: $(git branch --show-current)"

echo

echo "## Next step"

echo "$next"

echo

echo "## Commits since $base"

git log --oneline "$base"..HEAD

echo

echo "## Files changed since $base"

git diff --stat "$base"...HEAD

echo

echo "## TODOs added on this branch"

git diff "$base"...HEAD | grep '^+.*TODO' \

|| echo "(none)"

echo

echo "## Tests at handoff: $tests"

sh -c "$tests" 2>&1 | tail -n 30 | sed 's/^/ /'

echo

echo "Rules are in AGENTS.md. Run the tests first."

```

腳本中有一些刻意的選擇。git log 使用兩個點,因此它只列出你分支上的提交。git diff 使用三個點,因此它會與分支從 main 分岔的點進行比較,並忽略自那以後在 main 上發生的任何變動。TODO grep 只讀取此分支添加的行,因此程式碼庫中舊的 TODO 不會被包含在內。

測試輸出縮排四個空格,這使其在 Markdown 中成為一個程式碼區塊,無需巢狀圍欄。如果你的專案不是執行 npm test,請設定 TEST_CMD="pytest -q"(或任何你的專案執行的指令)。

腳本會在你的機器上自行執行測試,在任何代理再次觸碰分支之前。該輸出是第四個指令檢查的基準線。然後,永遠將 HANDOFF.md 排除在你的提交之外:

```bash

echo HANDOFF.md >> "$(git rev-parse --git-path info/exclude)"

```

info/exclude 是用於特定於個人工作流程且不應共用的忽略模式的地方。在連結的工作樹中,你無法猜測 Git 將其保存在何處,這就是為什麼 git-worktree 文件告訴你要使用 git rev-parse --git-path 來解析此類路徑的原因。它位於共用的 Git 目錄中,因此一行即可涵蓋儲存庫的所有工作樹。

四個指令

讓 Claude Code 完成其收尾工作。如果它列印的最後一個內容是一個計畫,/copy 會將其最新回覆複製到你的剪貼簿,這就是你的「下一步」行。然後使用 /exit 離開會話,這樣在你提交時就沒有任何東西仍在寫入檔案。

1. 檢查點儲存工作。 首先查看 git status --short。git add -A 會將所有 Git 未忽略的內容暫存,因此請確保 .env 已被 .gitignore 涵蓋,然後再依賴它。git add -A && git commit --no-verify -m "wip: handoff" --no-verify 會跳過 pre-commit 和 commit-msg 鉤子。

半成品程式碼通常會導致 Lint 鉤子失敗,而這個提交是一個檢查點,你將在發送 Pull Request 之前進行壓縮。它還會跳過任何秘密掃描鉤子,因此在提交之前請閱讀 git status --short 和暫存差異。你的實際提交仍會通過鉤子。

2. 撰寫交接內容。 handoff.sh "Add the refund route and its test" > HANDOFF.md。閱讀一次檔案。在這裡花三十秒比讓 Codex 困惑一輪更划算。

3. 啟動 Codex。 互動式 Codex 接受一個可選的第一個提示詞,而 -s 和 -a 設定沙盒和批准策略(命令列介面參考):codex -s workspace-write -a on-request "Read HANDOFF.md. Run the test command it names, compare with 'Tests at handoff', report, then stop. Do not edit files until I say go."

4. 檢查沒有任何變動。 git status --short。在 Codex 編輯任何內容之前檢查交接。指令 3 讓 Codex 證明它正在查看與你相同的分支,指令 4 確認它在沒有更改任何內容的情況下到達了那裡。將 Codex 的報告與「交接時的測試」區塊進行比較。

相同的失敗,相同的計數:這就是 Codex 位於正確的資料夾、正確的提交、具有相同的依賴項和環境的信號。告訴它繼續執行下一步。如果結果不同,則表示環境中存在問題,你需要在任何編輯之前了解這一點。通常是以下情況之一:

  • Codex 的沙盒。 workspace-write 模式預設關閉網路存取,因此存取資料庫或 API 的測試在 Codex 下可能會失敗,但在你的 Shell 中會通過。如果你的測試需要網路,請使用 -c 'sandbox_workspace_write.network_access=true' 啟動 Codex。
  • Codex 在另一個資料夾中啟動。 從工作樹根目錄執行它,或者使用 -C 參數指定路徑。
  • 只有 Claude 的 Shell 才有的東西, 例如匯出變數或執行中的資料庫容器。
  • 依賴時間或順序的測試。 在責怪交接之前,自己執行兩次。

git status --short 應該不會列印任何內容,因為 HANDOFF.md 已被排除,並且 Codex 被告知不要編輯。如果它列出檔案,請在繼續之前閱讀差異。寫入未追蹤產物的測試執行也會出現在這裡,這是一個你無論如何都會想要的 .gitignore 修正。

當你的 Claude 視窗重置時,交接會反向進行。使用指令 1 再次建立檢查點,以便 Codex 更改的任何內容都在 handoff.sh 可以讀取的提交中。然後在相同的資料夾中執行 handoff.sh 和 claude -c。它會載入該目錄中最新的對話,因此 Claude 會恢復其舊的上下文。告訴它 Codex 自上次輪次以來一直在分支上工作,並將其指向 HANDOFF.md。

Hermes IDE 中的相同交接

我開發了 Hermes IDE,因此在閱讀本節時請考慮這一點。Hermes 在其自己的工作樹中,為每個任務啟動一個 hermes/<名稱> 分支,你可以在 ⌘N 啟動器(Windows 和 Linux 上為 Ctrl+Shift+N)中為每個任務選擇代理、模型、工作量和帳戶。

README 列出了本文討論的情況:當一個代理達到用量限制時,你可以在另一個代理中繼續任務。它還支援每個代理多個帳戶。⌘N 新任務表單開啟了代理選擇器:已選擇 Claude Code(已安裝),Codex 已安裝,其他支援的代理標記為未安裝。

由於每個任務都已存在於自己的分支和工作樹中,並且每個代理輪次都已儲存,以便你可以比較或還原它,因此本文中的 Git 帳務管理在達到限制之前大部分都已完成。每個代理都在真實終端機中執行自己的介面,因此 Claude 的對話會留在 Claude Code 中。

Codex 獲得的是分支和你寫下的任何內容,因此 AGENTS.md 和 HANDOFF.md 的習慣在 Hermes 內部也值得保留。Hermes 從不自行在代理的終端機中輸入,因此 Codex 會從你這裡獲得第一個提示詞。Codex 和 Claude Code 並排顯示,每個都在自己的 hermes/ 工作樹中,側邊欄顯示每個會話的狀態、上下文使用、成本和分支。

側邊欄還顯示每個會話的支出,由代理報告或標記為估計值。當前版本為 2.3.4,於 10 月 15 日發布。它可以免費下載,在 BSL 1.1 許可下開放原始碼,可在 macOS、Windows 和 Linux 上運行,並且不隸屬於 Nous Research、Anthropic、OpenAI 或任何代理供應商。以上所有內容也適用於純終端機。

何時等待而不是交接

交接並非沒有代價。Codex 的呼叫方式與 Claude 不同,而且包含兩種代理風格的分支需要更長時間審查。如果重置時間不到一小時,或者下一步是一個微妙的步驟,依賴 Claude 從未寫下的推理,那麼等待通常是更好的選擇。在工作儲存庫上,請檢查你的團隊是否允許程式碼交由兩家供應商處理,然後再進行交接。

這也不是唯一的解決方案。本文開頭的說明文章中提到的付費選項仍然適用。關於團隊為何一開始就可能需要準備第二家供應商,我在這裡提出了論點。今天就將你的規則移到 AGENTS.md 中並儲存 handoff.sh,趁 Claude 還有配額。

如果這篇文章對你有用

HANDOFF.md 是一個提示詞,只是從 Git 組裝而不是從記憶中輸入,而 AGENTS.md 中的規則是另一種形式的上下文工程。Prompt Engineering Pocket Guide 涵蓋了如何編寫這兩者,以便從未見過你的儲存庫的模型在第一次嘗試時就能正確執行。

它是 Pocket Guides for Developers 系列中 8 本袖珍指南之一,涵蓋了代理、RAG、提示詞、可觀察性、事件、資料庫和系統設計。如果你在相同的儲存庫上運行 Claude Code 和 Codex,Hermes IDE 是免費的,在 GitHub 上點星有助於其他開發者找到它。

Share

覺得值得一看?分享給朋友。

以上為 AI 自動翻譯導讀。原文版權歸 DEV Community (Codex) 所有, 建議透過「閱讀原文」前往原始網站,以取得最完整資訊並支持原作者。

Newsletter

不用每天追,AI 重點每週寄給你

43 個來源、每 2 小時更新,太多看不完。電子報每週挑最值得看的幾則,附上 Max 的看法。

每週一封。Email 只用來寄電子報,每封信都能一鍵退訂。