Claude Code 把 scratchpad 放在哪裡,它又為什麼會消失
每個 Claude Code 會話都會宣布一個 scratchpad 目錄,然後再也不提。這裡給出它在 macOS、Linux 和 Windows 上的確切路徑、旁邊還有什麼、為什麼一次重啟或一次臨時檔案清理就會把它抹掉、哪些能配置哪些不能,以及我們給每晚往裡寫東西的七個代理定下的唯一一條規則。
每個 Claude Code 會話都以一行你多半會一掃而過的文字開頭。今晚我們的這一行是這樣的:
Scratchpad directory: /private/tmp/claude-501/-Users-jbchauvin-Projets-AgentsRoom/5a506305-…/scratchpad
之後 CLI 就再也不提它了。沒有命令列出它,沒有面板開啟它,等到哪天你去找代理說寫在那裡的那份 CSV,資料夾可能已經沒了。
我們每晚在一台 Mac mini 上跑七個定時代理,每一個都往那個資料夾裡寫東西。所以我們去看了看它到底是什麼、在每個系統上位於哪裡、什麼會刪掉它,以及我們讓代理怎麼應對。下面的一切都在 2026 年 9 月 19 日於 Claude Code 2.1.278 上核實過,也核對了那些在裡面丟過工作的人開的 GitHub issue。可配置的部分此後有了變化,所以這一部分在 2026 年 11 月 3 日於 Claude Code 2.1.314 上重新核實過。
Claude Code 對代理說了什麼
這一行是系統提示詞的一部分。在當前版本里,緊隨其後的指令說:臨時檔案,也就是不屬於專案的中間結果、腳本和輸出,要始終使用這個目錄,而不是 /tmp 或其他任何系統臨時目錄;它是會話專屬的,與專案隔離;一般可以在沒有權限提示的情況下使用;而 /tmp 只有在你明確要求時才用。
對你有用的是最後這一部分。寫進 scratchpad 裡的檔案不會觸發寫入權限對話方塊,這就是代理把輔助腳本和匯出檔案放在那裡、而不是每次都來問你的原因。這也是為什麼從來沒有人問你、也從來沒有人告訴你它們去了哪裡。
如果你想在一個正在執行的會話裡拿到這條路徑,問代理就行。「列印你的 scratchpad 目錄」會直接從系統提示詞裡得到回答,不用執行任何東西。
路徑,逐個系統看
這個資料夾位於作業系統的臨時目錄下,它的名字編碼了你是誰、你在哪個專案裡、以及這是哪一個會話。
在 macOS 和 Linux 上:
/tmp/claude-<uid>/<斜槓換成短橫線的專案路徑>/<會話 id>/scratchpad
在 Mac 上,/tmp 是指向 /private/tmp 的連結,所以同一個資料夾顯示為 /private/tmp/claude-501/…。那個數字是你的使用者 id,也就是 id -u 列印出來的:Mac 上第一個帳戶是 501,大多數 Linux 發行版是 1000,root 是 0。我們下面引用的 Linux 報告顯示的是 /tmp/claude-0/,因為那條流水線是在容器裡以 root 身份執行的。2026 年早些時候開的 issue 顯示的是完全沒有 uid 的 /tmp/claude/<專案 slug>/…,所以這個後綴是後來加上的。如果你用的是舊版本,把它去掉就行。
在 Windows 上,按 2026 年 7 月在 Windows 11 上的報告:
%TEMP%\claude\<專案 slug>\<會話 id>\scratchpad
它通常展開為 C:\Users\<你>\AppData\Local\Temp\claude\…。這條路徑來自 TEMP 變數,所以如果你把 TEMP 指向別處,scratchpad 也會跟著走,除非設定了 CLAUDE_CODE_TMPDIR,那樣以它為準。
專案 slug 就是你的工作目錄,其中每個斜槓都換成了短橫線。我們的儲存庫在 /Users/jbchauvin/Projets/AgentsRoom,所以 slug 是 -Users-jbchauvin-Projets-AgentsRoom。每個專案一個資料夾,裡面每個會話再一個資料夾。
要在 Mac 或 Linux 機器上列出當前使用者還留著的所有會話資料夾:
ls /tmp/claude-$(id -u)/
旁邊還有什麼
會話資料夾裡不只有 scratchpad。在跑我們夜間代理的那台機器上,當天九個會話資料夾裡有七個包含兩項:scratchpad 和 tasks。tasks 資料夾是後台任務輸出落地的地方,也就是代理分離執行、稍後再讀的那些命令。
還有第三個地方你應該知道,它根本不在臨時目錄下:~/.claude/projects/<專案 slug>/<會話 id>/tool-results/。當一個工具返回的內容超過上下文能容納的量時,Claude Code 會把完整輸出儲存到那裡,並把路徑交給代理。今晚,一份 68 KB 的 Search Console 匯出就去了那裡,而不是 scratchpad。那個位置是永久的,就在會話記錄旁邊。所以分工是這樣的:會話記錄和過大的工具輸出放在 ~/.claude 下,會留下;腳本、中間檔案和後台任務輸出放在臨時目錄下,不會留下。
它為什麼會消失
因為對每個作業系統來說,臨時目錄都意味著「可以放心刪除」,而 Claude Code 裡沒有任何東西反對這一點。
在 Linux 上,systemd-tmpfiles 會執行 /usr/lib/tmpfiles.d/tmp.conf 裡寫的任何規則。有一位報告者在主機重啟時丟掉了一條跑了 24 小時的資料生成流水線的全部輸出,包括評審結論、腳本和一個 Python virtualenv:那個 Debian 容器上的規則是 D /tmp 1777 root root 30d,它會在每次開機時把 /tmp 重建為空。那時是 Claude Code 2.1.260,系統提示詞對易失性只字未提。用 cat /usr/lib/tmpfiles.d/tmp.conf 檢查你自己的規則:D 開頭的行在開機時清空,像 10d 這樣的期限則按計時刪除舊檔案。
在 Windows 上,這個資料夾位於 %TEMP% 下,儲存感知和磁碟清理都會清掃它。2026 年 7 月,有人在兩個會話都在執行時跑了一次磁碟清理,丟掉了兩個代理正在其中工作的 git worktree,未提交的修改也一併沒了。那些修改之所以能找回來,只是因為它們還留在對話上下文裡。
在 macOS 上,/private/tmp 在重啟時被清空,舊檔案由系統刪除。今晚在我們的 Mac mini 上,/private/tmp/claude-501 裡有這個專案的九個會話資料夾,452 個檔案,25 MB,沒有任何東西比當天更早。前幾晚的代理留在那裡的東西都已經沒了。
這一切都不是「有什麼出了錯」意義上的 bug。資料夾就在 CLI 說的位置上,作業系統也只是對臨時資料夾做了它一貫做的事。問題出在提示詞把它叫作 scratchpad,而 scratchpad 聽起來像是你會留著的東西。
哪些能配置,哪些不能
從 Claude Code 2.1.314 起(2026 年 11 月 3 日核實),有一個變數可以移動 scratchpad:CLAUDE_CODE_TMPDIR。Claude Code 把資料夾構造為 <CLAUDE_CODE_TMPDIR>/claude-<uid>/<專案 slug>/<會話 id>/scratchpad,在 Windows 上用 claude 代替 claude-<uid>。沒有這個變數時,根目錄在 macOS 上是 /tmp(無論 TMPDIR 是什麼),在 Linux 和 Windows 上是系統臨時目錄,所以 Linux 上的 TMPDIR 和 Windows 上的 TEMP 仍然能挪動它。請在你的 shell 裡或 ~/.claude/settings.json 的 env 塊中設定它:Claude Code 會忽略專案設定和本地設定裡的這個變數。把它指向臨時目錄之外、屬於你自己的資料夾,scratchpad 就能挺過重啟和清理。
我們最初在 2.1.278 上寫這篇文章時,情況不同:這個變數是為其他臨時檔案而存在的,據報告並不能移動 scratchpad;要求 CLAUDE_CODE_SCRATCHPAD_DIR 變數的請求,以及把預設位置放到 ~/.claude/scratchpad/ 下的請求,都已以不計劃實現為由關閉。
Claude Code 還會檢查這個資料夾歸誰所有。如果 /tmp/claude-<uid> 是另一個帳戶建立的,它會拒絕使用,並提示 Temp directory /tmp/claude-1000 is owned by uid 0, expected 1000,接著是 Set CLAUDE_CODE_TMPDIR to a directory you control, or ask an administrator to remove it. 在沒有會話使用它時以其所有者身份刪除這個資料夾,或者設定這個變數。
另外還有兩件事不需要任何設定就管用。恢復的會話(claude --resume)保留它的會話 id,所以它會去找同一個資料夾,只要中間沒有東西刪掉它就能找到。另外,你可以用大白話讓代理把某個檔案寫到一個永久的地方。我們的解決辦法就只有這些。
我們給夜間代理定的規則
七個代理在同一台機器上於 20:00 啟動:SEO、產品、社交、一個 fixer、一個文件管理員、一份 CEO 報告,還有一個在 22:00 把當晚摘要用郵件發出去的 rapporteur。每一個都會產生大量中間材料:Search Console 匯出、過濾後的 JSON、在二十個語言版本里數字串的腳本。這些全都進 scratchpad,而且是有意為之,因為它們都不屬於儲存庫,也都不該在凌晨兩點觸發一次權限提示。
每個提示詞裡的規則只有一句話:scratchpad 存放下一條命令需要的東西,儲存庫存放下一個晚上需要的東西。凡是代理明天想再讀的東西,它的報告、它的執行標記、它正在編輯的檔案,都寫到 reports/nuit/<date>/ 下,並在完成後立刻提交,而不是等到執行結束。一個在任務中途被切斷的代理,會在 git 裡留下一份不完整的報告,外加 25 MB 沒人會想念的草稿檔案。
這條規則的鏡像,就是那位 Linux 報告者付出代價才學到的:絕不要讓一個長任務把唯一的一份副本堆在 scratchpad 裡。如果一條流水線要跑一天,它的輸出應該去你選定的路徑,scratchpad 只留輔助檔案。
不離開應用就開啟這個資料夾
如果你在 AgentsRoom 裡執行 Claude Code,File > Open File (Cmd/Ctrl+O) 可以在預覽裡開啟該資料夾的任何檔案,並標記為「專案之外」,免得你把它誤認為受跟蹤的檔案。這是我們找到的最快的辦法,可以讀到代理剛生成的匯出,而不用往終端裡粘一條 /private/tmp 路徑。
最後把名字的事說清楚:AgentsRoom Scratchpad 是另一樣東西。它是內建在代理 composer 裡的提示詞編輯器,長提示詞在那裡撰寫,並在會話之間為每個代理保留為草稿。同一個詞,在 Claude Code 用它來稱呼一個資料夾之前就選定了。一個是你寫給代理的地方;另一個是代理寫給自己的地方。
常見問題
在 macOS 和 Linux 上,Claude Code 的 scratchpad 在哪裡?
在系統臨時目錄下:/tmp/claude-<你的 uid>/<斜槓換成短橫線的專案路徑>/<會話 id>/scratchpad。在 macOS 上,同一個資料夾會顯示為 /private/tmp/claude-501/…,因為 /tmp 是指向 /private/tmp 的連結。你的 uid 就是 id -u 列印出的數字:Mac 上第一個使用者是 501,大多數 Linux 發行版是 1000,root 是 0。舊版本用的是不帶 uid 後綴的 /tmp/claude/。
在 Windows 上,Claude Code 的 scratchpad 在哪裡?
在 TEMP 資料夾下:%TEMP%\claude\<專案 slug>\<會話 id>\scratchpad,通常展開為 C:\Users\<你>\AppData\Local\Temp\claude\…。修改 TEMP 環境變數就能把它挪走,CLAUDE_CODE_TMPDIR 也可以,而且它優先於 TEMP。
我的 Claude Code scratchpad 為什麼消失了?
因為它位於臨時目錄下,而所有作業系統都認為臨時目錄可以放心刪除。在 Linux 上,systemd-tmpfiles 會執行 /usr/lib/tmpfiles.d/tmp.conf 裡寫的規則,通常是開機時清空或若干天後刪除。macOS 在重啟時清空 /private/tmp,並刪除舊檔案。在 Windows 上,儲存感知和磁碟清理會清掃 %TEMP%。Claude Code 裡沒有任何東西能讓這個資料夾躲過這些。
我能改變 Claude Code 放置 scratchpad 的位置嗎?
可以,用 CLAUDE_CODE_TMPDIR 環境變數。Claude Code 會在它後面加上 claude-<你的 uid>(Windows 上是 claude),scratchpad 也隨之移動:這是 2026 年 11 月 3 日在 Claude Code 2.1.314 上核實的,而在 2.1.278 中這個變數還不能移動它。請在你的 shell 裡或 ~/.claude/settings.json 的 env 塊中設定它,因為 Claude Code 會忽略專案設定和本地設定裡的這個變數。不設定時,根目錄在 macOS 上是 /tmp(無論 TMPDIR 是什麼),在 Linux(TMPDIR)和 Windows(TEMP)上是系統臨時目錄。把它指向臨時目錄之外、屬於你自己的資料夾,scratchpad 就能挺過重啟和清理。
為什麼 Claude Code 說它的臨時目錄屬於另一個 uid?
Claude Code 拒絕使用屬於其他帳戶的臨時資料夾。報錯是:Temp directory /tmp/claude-1000 is owned by uid 0, expected 1000,接著是 Set CLAUDE_CODE_TMPDIR to a directory you control, or ask an administrator to remove it. 資料夾 /tmp/claude-<你的 uid> 存在,但一個以其他使用者身份執行的程序搶先建立了它,這裡是 root,也就是 uid 0。有兩種解決辦法:在沒有任何 Claude Code 會話使用它時,以其所有者身份刪除這個資料夾(sudo rm -rf /tmp/claude-1000),或者把 CLAUDE_CODE_TMPDIR 設為一個屬於你的資料夾。已在 Claude Code 2.1.314 上核實。
scratchpad 和 ~/.claude/projects 是同一個東西嗎?
不是。~/.claude/projects/<專案 slug>/ 存放會話記錄,並且每個會話有一個 tool-results 資料夾,用來儲存過大的工具輸出。那個位置是永久的。臨時目錄下的 scratchpad 是代理用來放腳本和中間檔案的工作空間,那一個是易失的。
這就是 AgentsRoom 的 Scratchpad 嗎?
同一個詞,兩回事。AgentsRoom Scratchpad 是內建在代理 composer 裡的提示詞編輯器,你在那裡為每個代理撰寫並保留一份草稿。Claude Code 的 scratchpad 是 CLI 為每個會話建立的一個資料夾。AgentsRoom 可以用 File > Open File 開啟該資料夾裡的任何檔案,並標記為「專案之外」。
下載 AgentsRoom
在一個視窗中執行你所有專案的所有 AI 代理。
配套應用:隨時隨地監控你的 Agent
使用 Claude、Codex、Antigravity CLI 或其他 AI 提供商。
把 Bug 和需求直接傳送到您的公開待辦清單。
繼續閱讀
減少 MCP 令牌消耗:我們如何把工具定義削減 60%
代理能呼叫的每個 MCP 工具,都是模型可能在每次請求時讀取的一段 JSON。我們的工具大約有 95,000 個令牌。本文介紹如何在兩分鐘內測量你自己的工具,我們在不刪除任何工具的前提下削減了什麼,以及防止它再次膨脹的預算檢查。
閱讀全文如何看到 AI 編碼代理在你的伺服器上執行了什麼
代理正在一台生產伺服器上幹活,終端裡只顯示它在呼叫一個工具。它到底執行了哪條命令,機器又返回了什麼?會話轉錄事後會告訴你。本文講我們如何讓這一切在發生時就可見,最初試過什麼,以及不用我們的應用也能做到同樣效果的方法。
閱讀全文Claude Code的Remote Control會多用令牌嗎?Codex有沒有同樣的東西?
自從Anthropic推出Remote Control,人們開始在Google裡敲兩個問題:從手機上操控一個Claude Code會話會不會多花令牌,以及Codex有沒有對應的功能。簡短的回答:不會,一個回合就是一個回合,不管你在哪裡敲;有,但只存在一半。這裡講清楚Remote Control到底是什麼,怎樣用四條命令自己測出令牌問題的答案,codex remote-control今天能做什麼,以及一個從不和提供商說話的手機遙控器如何改變這筆帳。
閱讀全文