SSD Nodes Learn Hosting plans →
指南 Matt Connor作者: Matt Connor · 已更新 2026-09-12

Claude Code 如何恢復工作階段與查找歷程

使用名稱、ID 或選取器恢復 Claude Code 工作階段,並找出代理程式實際執行所在機器上的純文字對話記錄。

如何恢復 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 執行的工具呼叫,以及這些呼叫傳回的結果。Claude Code 會在工作期間持續將內容寫入磁碟,而不是等到最後才寫入。因此,即使關閉終端機或 SSH 連線中斷,對話仍可保留。

恢復工作階段時,還原的不只是文字。完整的對話記錄會恢復,工作階段使用的模型也會恢復;如果使用 --agent 啟動工作階段,啟動時使用的子代理程式也會恢復。權限模式同樣會恢復,但基於安全性有例外:永遠不會恢復 plan mode 和 bypass-permissions mode。因此,原本處於其中一種模式的工作階段,恢復時會使用新工作階段預設啟動的模式。

部分設定不會恢復,因為它們是啟動時的旗標,而不是已儲存的狀態。使用 --add-dir 加入的目錄,以及 --mcp-config、--settings 和 --plugin-dir 等選項,都必須在恢復工作階段時再次傳入。settings.json 等設定檔會在啟動時重新讀取,因此其中的設定不必重複指定。

憑證也屬於同一類。Claude Code 會在啟動時根據您的登入狀態與環境決定驗證方式,不會隨對話一併還原。因此,如果您在 VPS 上恢復工作階段,而 shell 中意外出現 ANTHROPIC_API_KEY,就會遇到無效 API key 錯誤,即使該工作階段上次執行時一切正常。

為什麼 VPS 上的工作階段歷程更重要

有一點常讓人感到意外:對話記錄會寫入代理程式執行所在的機器。它不會儲存在你的帳戶中,也不會同步到雲端,而是該主機磁碟上的檔案。

因此,你留在 VPS 的 tmux 視窗中的工作階段,不會出現在筆電的選取器中;筆電上的工作階段也不會出現在 VPS 上。兩者之間不會傳輸任何資料。如果你和多數人一樣,在 VPS 的 tmux 中執行 Claude Code,伺服器就是實際累積對話歷程的地方,而你在本機看到的選取器只會顯示另一組、規模小得多的項目。

不同介面之間也有相同的分隔。桌面應用程式與 VS Code 擴充功能各自保存工作階段歷程,兩者都不是 CLI 的歷程。Claude Code on the web 也有自己的歷程。Cowork 的位置更為獨立,它是在 Anthropic sandbox 中執行,而不是在你擁有的硬體上執行。因此,如果你正在比較 Cowork 與 Claude Code,對話記錄最後儲存在哪裡也是決策的一部分。

在同一台機器上,搜尋範圍比你預期的更廣。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 或有文件說明的指令碼介面,正是基於這個原因。

有 2 個設定會改變儲存位置與保留期限。CLAUDE_CONFIG_DIR 會重新指定整個設定目錄,可用來將逐字稿放到獨立磁碟區或加密磁碟區。cleanupPeriodDays 位於 settings.json 中,用來控制逐字稿的保留時間;預設為 30 天,最短為 1 天。

轉錄檔中實際包含哪些內容

每個工具結果都會被記錄,因此轉錄檔包含 Claude 讀取的檔案內容,以及 Claude 執行的命令輸出。Anthropic 的資料使用頁面明確說明:Claude Code 會以純文字格式,將工作階段轉錄檔儲存在本機的 ~/.claude/projects/ 下。

請思考這在伺服器上代表什麼。如果 Claude 讀取 .env 檔案來判斷服務無法啟動的原因,該檔案的內容現在就會位於家目錄中的 JSONL 檔案。如果某個命令列印了連線字串,該字串也會出現在其中。這不是資料外洩。轉錄檔記錄了實際發生的事情,這正是它存在的目的;也正因如此,您必須將它納入威脅模型。

  • 備份:直接備份 /home 或 /root 時,轉錄檔也會被複製到備份目的地。請加入排除規則,或接受提示內容與檔案內容的副本會儲存在備份系統中。
  • Snapshot 與映像檔:無論基於何種原因建立 VPS snapshot,都會包含整個目錄。您複製來建立第二台伺服器的映像檔也一樣。
  • 該主機上的其他帳戶:請使用 ls -ld ~/.claude ~/.claude/projects 自行檢查權限模式,不要假設權限限制得當。
  • 刻意上傳:/feedback 命令會刻意將對話歷程傳送至 Anthropic,/bug 和 /share 也會透過相同路徑回報。這些都是您主動選擇的操作,因此在確認前,請先了解自己同意的內容。

如果您不希望產生任何轉錄檔,CLAUDE_CODE_SKIP_PROMPT_HISTORY 會禁止寫入轉錄檔,而 --no-session-persistence 會在單次非互動式 claude -p 執行期間禁止寫入。設定任一選項前,請先確認其中的取捨。resume 會讀取轉錄檔,因此沒有轉錄檔就無法 resume。

如何尋找舊對話

使用 claude --resume 開啟選擇器;在執行中的工作階段內,則使用 /resume。每一列會顯示工作階段名稱(如果有設定),或系統產生的標題(如果沒有設定),以及距離上次活動的時間、git 分支和檔案大小。

選擇器支援搜尋。按下 /,或直接開始輸入,即可篩選清單。值得熟悉的快速鍵是可以擴大範圍的那些:Ctrl+A 會顯示這台電腦上所有專案的工作階段,Ctrl+W 會顯示目前儲存庫的所有 worktree,而 Ctrl+B 會篩選目前的 git 分支。按下 Space 可在選定工作階段前預覽其內容,按下 Ctrl+R 可重新命名反白的工作階段。

為工作階段命名會讓整個流程簡單許多。使用 claude -n auth-refactor 啟動工作階段,或在進行到一半、發現對話已經變成實際工作時執行 /rename auth-refactor。之後即可直接從 shell 依名稱恢復已命名的工作階段。

未命名的工作階段仍會取得系統產生的標題。系統會在背景中請求一個小型、快速的模型,摘要你的第一個提示並產生標題。這個標題能協助你在選擇器中辨識該列,但不能用來恢復工作階段。claude --resume <name> 只會比對你自行設定的名稱。

使用 grep 找出正確的工作階段

有時你只記得某個片語,其他資訊都想不起來。逐字稿是文字檔,因此可以搜尋。

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 可以在工作階段結束時封存文字記錄。您也可以不開啟已儲存的工作階段,直接向它提問:

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,恢復該工作階段時,Claude Code 會在你傳送第一則訊息前開啟對話框。此時提示快取已過期,因此無論選擇哪個選項,下一個請求都會重新處理完整歷史記錄一次。

  • 從摘要恢復會立即執行壓縮,因此之後的請求會攜帶摘要,而不是完整歷史記錄。每個請求的成本較低,但摘要捨棄的內容將無法再使用。
  • 原樣恢復完整工作階段會載入未變更的對話,保留所有細節,但每個請求的成本會隨對話大小增加。

第三個選項會完整恢復工作階段,並避免之後再次恢復時顯示此對話框。

判斷方式其實很簡單。如果你接下來要輸入的內容取決於先前已說過的內容,就恢復工作階段;如果不取決於,就重新開始。只要留意相關跡象,就很容易發現內容偏移:例如 Claude 提到你一小時前刪除的檔案,或重新爭論你在工作階段一開始就已經定案的決策。這就是過時的內容,同時沿用它會增加 token 用量,也會降低準確性。

如果舊對話中有你之後還會需要的決策或事實,不要依賴恢復工作階段來保留這些內容。請將它記錄在每個工作階段都能讀取的位置,這就是Claude Code 的記憶檔案的用途。

/branch在這裡也值得了解。它會複製目前為止的對話,並將你切換到副本,同時保留原始工作階段,讓它繼續出現在選擇器中。你可以用它嘗試第二種做法,而不會失去第一種做法。

resume 與 compaction 及 memory 的差異

這些功能經常被混淆,但解決的是不同問題。

resume 用於在離開、重新開機或轉而處理其他工作後,重新開啟原本的對話。compaction 則處理仍在進行中的對話所使用的 context window:/compact 會以摘要取代 Claude 目前保留的內容,讓後續請求傳送較少的 tokens。如果問題是 context window 已滿,應使用 compaction;管理 Claude Code context window 會完整說明相關作法。

memory 又是另一回事。CLAUDE.md 檔案和 auto memory 會在每個 session 開始時載入 instructions 和 facts,因此它們不是供你返回的對話,而是你記錄下來、之後就不必再返回對話的內容。

如果你想同時執行兩個對話並讓它們互相協調,那是另一種機制。Claude Code sessions 可以互相傳送訊息,前提是兩個 session 都仍在執行中;這和從磁碟重新載入昨天的 session,是不同的問題。

FAQ

Claude Code 將工作階段歷史記錄儲存在哪裡?

預設會儲存在設定目錄下的 ~/.claude/projects/<project>/<session-id>.jsonl,其中 <project> 是將非英數字元替換為連字號後的工作目錄路徑。每個檔案都是 JSONL:每行包含一個 JSON 物件,代表訊息、工具使用或中繼資料項目。CLAUDE_CONFIG_DIR 可將設定目錄移至其他位置,而 cleanupPeriodDays 在 settings.json 中設定文字記錄的保留時間,預設為 30 天,最短為 1 天。

為什麼我在筆記型電腦的選取器中看不到 VPS 工作階段?

因為文字記錄會寫入執行代理程式之電腦的磁碟,且不會在不同電腦之間同步。您在 VPS 的 tmux 中進行的對話只存在於 VPS 上。請透過 SSH 在該處繼續工作;如果需要本機記錄,也可以在其中執行 /export,再將文字檔複製到本機。

我可以繼續使用在其他目錄中開始的工作階段嗎?

可以,只要您有該工作階段的 ID。claude --resume <session-id> 會先在目前專案目錄及其 git worktree 中搜尋,再搜尋同一台電腦上的其他專案。在選取器中,Ctrl+A 會將清單擴大到電腦上的所有專案,而 Ctrl+W 會將清單擴大到目前儲存庫的所有 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。