Claude Code 如何恢復工作階段與查看歷程
了解如何用名稱、ID 或選取器恢復 Claude Code 工作階段,並找到 agent 實際執行機器上儲存的純文字轉錄檔。
如何恢復 Claude Code 工作階段
若要恢復 Claude Code 工作階段,請執行 claude --continue,開啟目前目錄中最近的對話;或執行 claude --resume,從清單中選取較早的對話。在已執行中的工作階段內,/resume 指令可在不結束工作階段的情況下切換至其他對話。縮寫形式為 -c 和 -r。
claude --continue
claude --resume
claude --resume auth-refactor如果已知道工作階段名稱或 ID,請將其作為引數傳入。Claude Code 會直接開啟該工作階段,不顯示選取器。
以下內容均符合截至 August 2026 的官方工作階段文件。Claude Code 經常發布新版本,旗標名稱與鍵盤快速鍵也會隨版本變更。因此,若本頁內容與終端機顯示不一致,請以 claude --help 和該文件頁面為準。
工作階段的實際意義
工作階段是繫結至專案目錄的一段已儲存對話。它會保留完整的訊息歷程,包括 Claude Code 執行的工具呼叫,以及這些呼叫傳回的結果。Claude Code 會在工作期間持續將內容寫入磁碟,而不是等到結束時才寫入。因此,即使關閉終端機或 SSH 連線中斷,對話仍會保留。
恢復工作階段時,還原的不只是文字內容。完整的對話歷程會恢復,工作階段使用的模型也會恢復;如果使用 --agent 啟動工作階段,啟動時使用的 subagent 也會恢復。權限模式同樣會恢復,但基於安全性有例外:plan mode 和 bypass-permissions mode 永遠不會恢復。因此,原本處於其中一種模式的工作階段,恢復時會使用新工作階段的預設啟動模式。
部分內容不會恢復,因為它們是啟動時的旗標,而不是已儲存的狀態。使用 --add-dir 加入的目錄,以及 --mcp-config、--settings 和 --plugin-dir 等選項,都必須在恢復工作階段時再次傳入。settings.json 等設定檔會在啟動時重新讀取,因此其中的設定不需要再次指定。
為什麼工作階段歷程在 VPS 上更重要
有一項事實常讓人感到意外:轉錄內容會寫入執行 agent 的機器。它不會保存在你的帳戶中,也不會同步到雲端。它只是該機器磁碟上的檔案。
因此,你留在 VPS 上某個 tmux 視窗中的工作階段,不會出現在筆記型電腦的選取器中;筆記型電腦上的工作階段也不會出現在 VPS 上。兩者之間不會傳輸任何內容。如果你和多數人一樣,在 VPS 上的 tmux 中執行 Claude Code,伺服器就是實際累積對話歷程的地方,而你在本機看到的選取器則會顯示另一組小得多的項目。
不同介面之間也有相同的區隔。桌面應用程式和 VS Code 擴充功能各自保留工作階段歷程,兩者都不是 CLI 的歷程。Claude Code on the web 也有自己的歷程。
在同一台機器上,搜尋範圍比你預期的更廣。claude --resume <session-id> 會先搜尋目前的專案目錄及其 git worktrees,接著搜尋該機器上的其他所有專案。請記住「在該機器上」這個條件。來自其他主機的工作階段 ID 不會解析到任何內容,Claude Code 會以 No conversation found with session ID: <session-id> 告知你這一點。
Claude Code 將工作階段歷程記錄儲存在哪裡
根據預設,工作階段逐字記錄會儲存在 Claude Code 設定目錄下,路徑格式為 ~/.claude/projects/<project>/<session-id>.jsonl。
<project> 是將所有非英數字元替換為連字號後的工作目錄路徑。因此,在 /home/deploy/apps/api 中啟動的工作階段會儲存在名為 -home-deploy-apps-api 的目錄下。如果轉換後的名稱超過 200 個字元,Claude Code 會截斷名稱,並附加完整路徑的雜湊值,讓目錄名稱維持在檔案系統限制內。
檔案格式為 JSONL:每行包含一個 JSON 物件,每行代表一則訊息、一次工具使用或一筆中繼資料。這是可讀取的文字檔,直接讀取沒有問題。
但不應針對此檔案格式撰寫解析器。項目格式屬於 Claude Code 的內部實作,可能隨版本變更,因此直接讀取這些檔案的指令碼可能在任何更新後失效。Anthropic 官方文件建議改用 /export 或有文件說明的指令碼介面,原因正是如此。
有兩項設定會改變儲存位置與保留期限。CLAUDE_CONFIG_DIR 會重新指定整個設定目錄,適合將逐字記錄放在獨立磁碟區或加密磁碟區中。cleanupPeriodDays 位於 settings.json 中,用來控制逐字記錄的保留時間;預設為 30 天,最短為 1 天。
那些 transcript 檔案實際包含哪些內容
每個工具結果都會被記錄,因此 transcript 會包含 Claude 讀取的檔案內容,以及 Claude 執行指令的輸出。Anthropic 的 資料使用頁面 明確說明:Claude Code 會以純文字格式,將工作階段 transcript 儲存在 ~/.claude/projects/ 下。
請思考這在伺服器上代表什麼。如果 Claude 讀取 .env 檔案來判斷服務無法啟動的原因,該檔案的內容現在就會存放在您家目錄中的 JSONL 檔案裡。如果某個指令輸出了連線字串,該字串也會在其中。這不代表內容已外洩。transcript 只是記錄發生過的事情,這正是它存在的目的;也正因如此,您必須將它納入威脅模型。
- 備份:直接備份
/home或/root時,transcript 也會被複製到備份目的地。請加入排除規則,或接受提示內容與檔案內容的副本現在會存放在備份儲存區中。 - Snapshot 與映像檔:無論基於何種原因建立的 VPS snapshot,都會包含整個目錄。您複製來建立第二台伺服器的映像檔也一樣。
- 該主機上的其他帳戶:請使用
ls -ld ~/.claude ~/.claude/projects自行檢查權限模式,不要假設權限設定嚴格。 - 主動上傳:
/feedback指令會刻意將對話記錄傳送給 Anthropic,而/bug與/share也會透過相同路徑回報。這些都是您選擇執行的動作,因此在確認前,請先了解您同意的內容。
如果您不希望建立 transcript,CLAUDE_CODE_SKIP_PROMPT_HISTORY 會停用 transcript 寫入功能;--no-session-persistence 則會在單次非互動式 claude -p 執行中停用該功能。設定任一選項前,請先確認其中的取捨。resume 會讀取 transcript,因此沒有 transcript 就無法 resume。
如何尋找舊對話
使用 claude --resume 開啟選取器,或在執行中的工作階段內使用 /resume。每列會顯示工作階段名稱(若有設定),或系統產生的標題(若未設定),以及距離上次活動的時間、git 分支和檔案大小。
選取器支援搜尋。按下 /,或直接開始輸入,即可篩選清單。值得熟悉的快捷鍵是可擴大搜尋範圍的快捷鍵:Ctrl+A 會顯示這台機器上所有專案的工作階段,Ctrl+W 會顯示目前 repository 的所有 worktree,而 Ctrl+B 會篩選至目前的 git 分支。按下 Space 可在選定工作階段前預覽其內容,按下 Ctrl+R 可重新命名反白的工作階段。
為工作階段命名會讓上述操作容易許多。使用 claude -n auth-refactor 啟動工作階段,或在進行到一半、發現對話已經變成實際工作項目時執行 /rename auth-refactor。之後即可直接從 shell 依名稱恢復已命名的工作階段。
未命名的工作階段仍會取得系統產生的標題。這個標題由背景請求交給小型且快速的模型產生,用來摘要你的第一個提示。該標題可協助你在選取器中辨識工作階段,但不能作為恢復工作階段的識別名稱。claude --resume <name> 只會比對你自行設定的名稱。
搜尋逐字稿以找出正確工作階段
有時只記得某個片語,其他資訊都想不起來。逐字稿是文字檔,因此可以搜尋。
grep -rl "nftables" ~/.claude/projects/這會列出符合的逐字稿路徑。不含 .jsonl 副檔名的檔名就是工作階段 ID,而 claude --resume <session-id> 可接受此 ID。使用 grep 判斷要使用哪個工作階段,再恢復該工作階段或將其匯出,以實際閱讀內容。
有兩點需要注意。內容採用 JSON 跳脫格式,因此包含引號的片語,或跨越換行的片語,可能無法以字面字串比對。此外,若比對結果出現在工具結果中,表示 Claude 看到了該文字,不代表有人輸入過該文字。
讀取及匯出對話
/export 會將目前的對話轉換為純文字,並以易讀格式寫出訊息與工具輸出,而不是輸出 JSON。不加引數時,會開啟選單,讓您選擇剪貼簿或檔案。指定檔名時,/export handover.txt 會直接寫入該路徑。若要將對話從伺服器移至筆記型電腦,或將對話附加至工單,應使用這個方式。
如需自動化,請使用設計上可維持穩定的介面。Hooks 和 status line commands 會接收 transcript_path 欄位作為輸入,因此 SessionEnd hook 可以在工作階段結束時封存 transcript。您也可以在不開啟已儲存工作階段的情況下,向它提出問題:
claude -p --resume <session-id> --output-format json "summarize what we changed" | jq -r '.result'這會將後續提示送入舊對話,並回傳結構化 JSON。相較於解析可能在下一個版本中變更的 JSONL 格式,這是穩定得多的基礎。
從頭開始有時比繼續工作更好
繼續工作會還原完整歷史,而後續每個請求都會帶上這份完整歷史。昨天執行了四小時的對話,今天繼續使用時成本很高;長工作階段如何累積 token 用量說明了這些成本的實際來源。
Claude Code 有時會提供折衷方案。在 Pro 或 Max 方案中,若工作階段閒置約一小時,且包含超過 100,000 個 token,繼續工作時會在你輸入第一則訊息前開啟對話框。此時 prompt cache 已經過期,因此無論選擇哪個選項,下一個請求都會重新處理完整歷史一次。
- Resume from summary 會立即執行壓縮,因此後續請求只會帶上摘要,而不是完整歷史。每個請求的成本較低,但摘要省略的內容將無法再使用。
- Resume full session as-is 會原樣載入完整工作階段,保留所有細節;每個請求的成本會隨對話大小增加。
第三個選項會以完整內容繼續工作,並停止在之後繼續工作時顯示此對話框。
判斷方式其實比看起來簡單。如果你接下來要輸入的內容取決於先前已經說過的內容,就繼續工作;如果不取決於先前內容,就從頭開始。只要留意,就很容易發現內容逐漸偏離:例如 Claude 提到你一小時前刪除的檔案,或重新爭論你在工作階段開頭已經定案的決定。這就是過時的內容,同時保留它會增加 token 成本,也會降低準確性。
如果舊對話中有你之後還會用到的決定或事實,不要依賴繼續工作來保留它。請將內容寫在每個工作階段都能查看的位置;這正是Claude Code 的記憶檔案的用途。
這裡也值得了解 /branch。它會複製目前為止的對話,並切換到副本,同時保留原始對話;原始對話仍會出現在選擇器中。你可以用它嘗試第二種方法,而不會失去第一種方法。
resume 與 compaction 及 memory 的差異
這些功能經常被混淆,但它們解決的是不同問題。
resume 用於在離開、重新開機或轉而處理其他工作後,重新開啟原本的對話。compaction 用於處理進行中對話的 context window:/compact 會以摘要取代 Claude 目前保留的內容,讓後續請求傳送較少 token。如果問題是 context window 已滿,應使用 compaction;管理 Claude Code context window 會完整說明相關做法。
memory 又是另一回事。CLAUDE.md 檔案和 auto memory 會在每個 session 開始時載入指示與資訊,因此它們不是可返回的對話。它們是你記錄下來的內容,讓你不必再返回某個對話。
如果你要的是同時執行兩個對話並讓它們互相協調,那是另一種機制。Claude Code session 可以互相傳送訊息,前提是兩個 session 都仍在執行;這與從磁碟重新取回昨天的 session 是不同的問題。
FAQ
Claude Code 將工作階段歷程儲存在哪裡?
預設會儲存在設定目錄下的 ~/.claude/projects/<project>/<session-id>.jsonl,其中 <project> 是將工作目錄路徑中的非英數字元替換為連字號後的結果。每個檔案都是 JSONL:每行包含一個 JSON 物件,代表訊息、工具使用紀錄或中繼資料項目。CLAUDE_CONFIG_DIR 可將設定目錄移至其他位置,而 cleanupPeriodDays 設定於 settings.json 中,用來指定逐字稿的保留時間;預設為 30 天,最短為 1 天。
為什麼我在筆電的選取器中看不到 VPS 工作階段?
因為逐字稿會寫入執行 agent 的機器磁碟,機器之間不會同步這些檔案。你在 VPS 的 tmux 中進行的對話只存在於 VPS 上。請透過 SSH 在該 VPS 上繼續工作階段;如果需要本機記錄,可在其中執行 /export,再將文字檔複製到本機。
我可以繼續不同目錄中開始的工作階段嗎?
可以,只要你有該工作階段的 ID。claude --resume <session-id> 會先在目前的專案目錄及其 git worktree 中搜尋,再搜尋同一台機器上的其他專案。在選取器中,Ctrl+A 會將清單擴大到機器上的所有專案,而 Ctrl+W 會將清單擴大到目前 repository 的所有 worktree。如果沒有符合項目,Claude Code 會回報 No conversation found with session ID: <session-id>。
我應該繼續舊工作階段,還是開始新的工作階段?
如果下一則訊息取決於該對話中已經提供的內容,請繼續原工作階段。如果不相依,請開始新的工作階段,因為繼續工作階段會重新載入完整歷程,之後的每個請求都會攜帶這些內容。請注意內容偏移:如果工作階段持續提到你已刪除的檔案,表示其中仍帶有過時的上下文,而這些上下文會在每次互動中消耗 token,並降低準確性。
可以阻止 Claude Code 將逐字稿寫入磁碟嗎?
可以。CLAUDE_CODE_SKIP_PROMPT_HISTORY 會禁止寫入逐字稿,而 --no-session-persistence 會在單次非互動式 claude -p 執行中禁止寫入。請先了解這項取捨,因為 resume 會讀取逐字稿;停用寫入後,--continue 和 --resume 將沒有可載入的內容。如果你在意的是檔案儲存位置,而不是完全不保留檔案,請將 CLAUDE_CONFIG_DIR 指向加密磁碟區,並改為縮短 cleanupPeriodDays。