Claude Code 的對話紀錄都去哪了?我做了一個 Viewer 來找回它們
Claude Code對話紀錄常因自動壓縮而遺失重要細節,影響開發者回顧。作者開發了Claude JSONL Viewer,一款純前端工具,能解析本機JSONL檔案,以友善介面呈現完整對話歷史,並提供子代理分離、搜尋等功能,且本地運行保障隱私。它旨在幫助開發者找回Claude Code的思考軌跡,提升開發效率。
用 Claude Code 寫程式的人,應該都經歷過一個很幹的瞬間:你花了兩小時跟 Claude 討論一個複雜架構,中間讓它開了好幾個 subagent 去做研究、review code、跑測試,一切都進展得很順利。然後你隔天早上打開終端機,想回頭看看昨天到底改了什麼——發現什麼都找不到了。
Context window 被 compact 了,對話摘要裡只剩幾行模糊的描述,而那些真正有價值的推理過程、設計決策、subagent 回報的分析結果,全部消失在 auto-compaction 的黑洞裡。
這就是我做 Claude JSONL Viewer(AIChain ContextVault) 的原因。

痛點:Context Window 是一個會自我毀滅的工作記憶
如果你是 Claude Code 的重度使用者,你一定對以下場景不陌生。
Claude Code 的 context window 上限是 200K tokens(部分模型在 beta 中已支援到 1M),看起來很大,但實際上根本不夠用。每一次 tool call 的輸入輸出、每一段程式碼的讀取和修改、每一個 subagent 的啟動和回傳,全部都在吃 context。社群中有開發者實測發現,auto-compact 的緩衝區本身就要消耗大約 45K tokens,相當於你還沒開始寫程式,就已經燒掉了 22.5% 的 context window。
更痛的是,當 context 接近上限時,Claude Code 會自動觸發 compaction——它會把你前面的對話「摘要」成一段精簡的文字,然後把原始內容丟掉。這個機制的設計初衷是好的,讓對話可以無限延續下去。但副作用是:你失去了所有的細節。那些 Claude 做出某個設計決策的推理過程、它在 debug 時嘗試過哪些路徑、subagent 回傳的完整分析報告——通通被壓縮成一兩句話。
這就像你跟一個很厲害的工程師 pair programming 了一整天,但他離開前把白板上所有的圖和筆記都擦掉了,只留下一張便利貼寫著「完成了 API 重構」。
但其實紀錄一直都在
這裡有一個很多人不知道的事實:Claude Code 其實會把所有對話完整記錄在本機的 JSONL 檔案裡。它們就靜靜躺在 ~/.claude/projects/ 目錄下,每個 session 一個 .jsonl 檔案,裡面包含了每一條訊息的完整內容——包括被 compact 掉的部分。
問題是,這些 JSONL 檔案根本不是給人看的。打開來就是一行接一行的 JSON 物件,訊息類型混雜在一起,user、assistant、system、tool_use、tool_result 交錯排列,要從中找到有價值的資訊簡直是大海撈針。
所以我做了 Claude JSONL Viewer。
我到底做了什麼
Claude JSONL Viewer 是一個純前端的 web 應用,你只要把 ~/.claude/projects/ 資料夾拖進去,它就會把所有對話以類似 ChatGPT 的介面呈現出來。不需要安裝任何東西,不需要跑後端,不需要上傳任何資料到任何地方——所有解析都在你的瀏覽器裡完成。
但它不只是一個「JSONL 轉好看介面」的工具。我在設計時特別針對幾個 Claude Code 使用者的核心痛點做了處理:
Main Agent 與 Subagent 對話分離
這是我覺得最重要的功能。Claude Code 的 subagent 機制很強大——它可以把探索程式碼、搜尋文件、code review 這些任務 delegate 給獨立的 subagent,每個 subagent 有自己的 context window,做完後把結果回傳給主對話。
但在原始 JSONL 裡,main agent 和 subagent 的訊息是混在一起的。你根本分不清哪些是主對話的脈絡,哪些是某個 subagent 的內部過程。這在回顧時非常痛苦,尤其當一個 session 裡 spawn 了好幾個 subagent 的時候。
我在 Viewer 裡加了 filter tabs:Main、All、Subagent。你可以只看主對話的流程,也可以切換去看特定 subagent 做了什麼。這讓回顧變得清晰很多——你可以先看 main agent 的決策脈絡,再 drill down 去看 subagent 的執行細節。
對話搜尋
當你的 projects 資料夾裡有幾十、甚至上百個 session 時,光是找到「那一次我們討論 OAuth 整合的對話」就是一個挑戰。Viewer 內建了全文搜尋,可以搜標題、專案名稱、訊息內容,按 Enter 就能搜,一鍵就能清除。
專案分組 + 對話列表
你的對話會自動按專案分組顯示在側邊欄,點擊就能切換。不需要手動去翻資料夾結構。
程式碼區塊的閱讀體驗
Claude Code 的對話有大量程式碼,所以我特別做了 copy、collapse/expand、全螢幕檢視這些功能,讓你在回顧 code-heavy 的對話時不會痛苦。
跳轉控制與自訂命名
長對話可以一鍵跳到最前面或最後面。對話標題覺得不夠直覺?可以直接在 Viewer 裡重新命名,存在 localStorage 裡,下次打開還在。
隱私考量
我知道很多人(包括我自己)在用 Claude Code 處理的是公司內部程式碼或私人專案。把對話 log 上傳到第三方服務?不可能的事。
所以 Viewer 從第一天就是 local-first 的設計。純前端,沒有後端,沒有任何網路請求。你的 JSONL 檔案不會離開你的電腦。打開 index.html 就能用,連 npm install 都不需要。
未來規劃
目前的版本已經能解決我自己最在意的幾個痛點,但腦中還有一些想法還沒動手。要不要做、先做哪個,老實說我想看看大家的需求再決定。以下是我目前在考慮的方向,如果你覺得哪個對你有幫助,歡迎直接到 GitHub 開 issue 或留言告訴我:
- 虛擬化渲染:對於特別長的對話(幾千條訊息以上),目前的渲染效能還有優化空間。導入虛擬滾動來處理超大 session。
- Token 用量統計:JSONL 裡其實有每條訊息的 token 使用資訊,可以視覺化呈現每個 session 的 token 消耗,幫助你理解 context 是怎麼被吃掉的。
- 對話匯出:將篩選後的對話匯出為 Markdown 或 HTML,方便歸檔或分享給團隊成員。
- 時間軸檢視:以視覺化時間軸的方式瀏覽對話歷史,快速定位特定時間段的工作紀錄。
- 更多鍵盤快捷鍵:讓重度使用者能更快速地在對話和專案間切換。
- 佈景主題:深色模式和其他主題選項。
- 跨 Session 關聯分析:自動識別跨 session 的相關對話,追蹤一個功能或 bug 在多個 session 中的演進。
- Diff 檢視:對 Claude Code 執行的檔案修改提供更好的 diff 顯示,一眼看出每次 edit 改了什麼。
這個專案本身就是從我自己的需求出發的,但我相信每個人的工作流程不同,痛點也不一樣。與其我自己悶著頭做,不如讓真正在用的人來決定優先順序。
寫在最後
在我看來,Claude Code 最被低估的資產不是它的程式碼產出能力,而是它在過程中留下的「思考紀錄」——那些推理、嘗試、失敗、修正的完整軌跡。這些紀錄對於理解為什麼做了某個決策、下次遇到類似問題時該怎麼處理、甚至是 onboarding 新的團隊成員,都有巨大的價值。
但 context window 的限制讓這些紀錄在「當下使用」時就被丟棄了。Claude JSONL Viewer 做的事情很簡單:把這些已經存在但難以存取的紀錄,用一個人類友善的方式呈現出來。
如果你也是 Claude Code 使用者,歡迎試試看,也歡迎給我回饋或發 PR。
參考資料