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。

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 也会跟着走。

项目 slug 就是你的工作目录,其中每个斜杠都换成了短横线。我们的仓库在 /Users/jbchauvin/Projets/AgentsRoom,所以 slug 是 -Users-jbchauvin-Projets-AgentsRoom。每个项目一个文件夹,里面每个会话再一个文件夹。

要在 Mac 或 Linux 机器上列出当前用户还留着的所有会话文件夹:

ls /tmp/claude-$(id -u)/

旁边还有什么

会话文件夹里不只有 scratchpad。在跑我们夜间代理的那台机器上,当天九个会话文件夹里有七个包含两项:scratchpadtaskstasks 文件夹是后台任务输出落地的地方,也就是代理分离运行、稍后再读的那些命令。

还有第三个地方你应该知道,它根本不在临时目录下:~/.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 听起来像是你会留着的东西。

哪些能配置,哪些不能

截至 2.1.278,没有关于 scratchpad 位置的设置。文件夹跟随临时目录,所以 Windows 上的 TEMP 和 Unix 上的 TMPDIR 能把它挪走。为其他临时文件而存在的 CLAUDE_CODE_TMPDIR,据报告并不能移动 scratchpad,而那条请求已经以不计划实现为由关闭。要求 CLAUDE_CODE_SCRATCHPAD_DIR 变量的请求,以及把默认位置放到 ~/.claude/scratchpad/ 下的请求,也是同样的结局。在桌面应用里显示一个可见的 scratchpad 文件夹,则是一条仍然开放的功能请求。

今天有两件事是管用的。恢复的会话(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 环境变量就能把它挪走,因为这条路径来自 TEMP,而不是来自 Claude Code 的某个设置。

我的 Claude Code scratchpad 为什么消失了?

因为它位于临时目录下,而所有操作系统都认为临时目录可以放心删除。在 Linux 上,systemd-tmpfiles 会执行 /usr/lib/tmpfiles.d/tmp.conf 里写的规则,通常是开机时清空或若干天后删除。macOS 在重启时清空 /private/tmp,并删除旧文件。在 Windows 上,存储感知和磁盘清理会清扫 %TEMP%。Claude Code 里没有任何东西能让这个文件夹躲过这些。

我能改变 Claude Code 放置 scratchpad 的位置吗?

截至 Claude Code 2.1.278,没有专门的设置。这个文件夹跟随操作系统的临时目录,所以在 Windows 上挪动 TEMP、在 Unix 上挪动 TMPDIR 就能把它挪走。要求单独一个变量、或者在 ~/.claude 下放一个持久位置的请求,都已经以不计划实现为由关闭。可靠的做法是告诉代理,凡是重要的东西都写进项目里。

scratchpad 和 ~/.claude/projects 是同一个东西吗?

不是。~/.claude/projects/<项目 slug>/ 存放会话记录,并且每个会话有一个 tool-results 文件夹,用来保存过大的工具输出。那个位置是永久的。临时目录下的 scratchpad 是代理用来放脚本和中间文件的工作空间,那一个是易失的。

这就是 AgentsRoom 的 Scratchpad 吗?

同一个词,两回事。AgentsRoom Scratchpad 是内置在代理 composer 里的提示词编辑器,你在那里为每个代理撰写并保留一份草稿。Claude Code 的 scratchpad 是 CLI 为每个会话创建的一个文件夹。AgentsRoom 可以用 File > Open File 打开该文件夹里的任何文件,并标记为“项目之外”。

下载 AgentsRoom

在一个窗口中运行你所有项目的所有 AI 代理。

免费下载 AgentsRoom

配套应用:随时随地监控你的 Agent

使用 Claude、Codex、Antigravity CLI 或其他 AI 提供商。

获取扩展程序
Chrome Web Store

把 Bug 和需求直接发送到您的公开待办清单。

多项目管理
多供应商
多代理运行
实时状态
文件差异与提交
移动应用
实时预览
代理团队
浏览器自动化
Backlog 驱动开发
提示词库
技能库
查看所有功能

继续阅读