怎么删 Claude Code 的会话文件,以及会失去什么
它们就是 ~/.claude/projects 下的文件:rm 就是全部操作,而 cleanupPeriodDays 会定时替你删
智能体跑的每一次会话,都会在进行时写到磁盘上。Claude Code 把 JSONL 放在 ~/.claude/projects,一个项目一个目录、一个会话一个文件;Codex 写在 ~/.codex/sessions/**/rollout-*.jsonl;Cursor 把聊天放进 SQLite 数据库。其余工具见历史文件在哪里。
在它们变大之前,没有人会告诉你这些文件存在——下面那台笔记本上是 875 个文件、1.6 GB,其中单个文件有 586 MB。
怎么删
没有专门的命令:会话就是文件,删掉文件就是全部操作。目录名是把工作目录的斜杠换成短横线,文件名就是会话 id。
# 先看看有什么,最新的在前
ls -t ~/.claude/projects/-Users-you-project/*.jsonl
# 删一个会话
rm ~/.claude/projects/-Users-you-project/<session-id>.jsonl
# 删一个项目的全部会话
rm -rf ~/.claude/projects/-Users-you-project
# 全删
rm -rf ~/.claude/projects/*
# 或者交给 Claude Code 自己定时删:超过 N 天的会话自动消失
# ~/.claude/settings.json
{ "cleanupPeriodDays": 7 }
三件事和多数人的预期不一样。删掉的会话会立刻从 claude --resume 的列表里消失——那个列表就是读这些文件生成的。你的提问历史是另一个文件 ~/.claude/history.jsonl,不删它就还在。而且没有归档:--resume 里不见了的会话,是被 cleanupPeriodDays 清掉的,文件是删了,不是存到别处了。
它们到底能长到多大
一位开发者的 ~/.claude/projects:十三个项目,两个月的高强度日常使用。
| 指标 | 数值 |
|---|---|
| 会话文件数 | 875 |
| 总大小 | 1.6 GB |
| 中位大小 | 304 KB |
| 90 分位 | 644 KB |
| 最大的单个文件 | 586 MB |
有意思的是分布:一次普通会话大约三分之一兆,而少数几个失控的会话占掉了大部分空间。决定体积的是工具输出,不是你打了多少字——cat 过大文件、或者跑过一个啰嗦构建的会话,比一次纯粹讨论设计的会话大几个数量级。
查你自己的:
du -sh ~/.claude/projects find ~/.claude/projects -name '*.jsonl' -size +50M
文件里面是什么
Claude Code 的会话文件是 JSON Lines:一行一个 JSON 对象,会话进行时不断追加。每条记录带着角色、时间戳、会话 id 和内容——你的提问、助手的回复,或者一次工具调用及其结果。Codex、Copilot CLI 和 Antigravity 用的是同样的一行一条结构、不同的字段名;Cursor、Zed、Goose 和 Hermes 用的是 SQLite。格式登记表逐字段记录了每一种。
两个值得知道的后果。它是纯文本,所以 grep 能用,你自己写的工具也能用。以及它是原样记录:终端里滚过去的东西都在里面,包括命令打印出来的任何内容——请把这个目录当成你的 shell 历史来对待。
Claude Code 会替你删
默认情况下,Claude Code 只保留 30 天,之后自行删除——设置项是 ~/.claude/settings.json 里的 cleanupPeriodDays。清理时不会有任何提示;人们通常是在 --resume 里找不到六月那次会话时才发现。想让文件留下来,就在这个月过去之前把数字调大:
{ "cleanupPeriodDays": 3650 }
deja 索引过的内容会留下:被清理掉的记录仍然可以搜到,因为索引不跟着某一个文件一起消失——只有 deja forget 会有意地把一个会话丢掉。但文件本身确实没了,--resume 也跟着没了。
这个清理是 Claude Code 自己做的,不是 cron,而且在客户端无法确定保留期时会暂停——这就是为什么上面那台按默认设置的机器上,仍然留着 69 个超过 31 天的文件。别把这当成安全:文档写的行为是 30 天后删除,清理真正跑起来的那天,六月那次会话就没了。
自己删可以吗
可以,智能体不会因此出问题。你失去的是:
- 恢复会话。
claude --resume的列表就是读这些文件来的,删一个就少一个。 - 以后对历史的任何检索。凡是回答「这个问题我以前遇到过吗」的东西,读的都是这些文件。删掉的记录无法恢复,也无法重新推导出来——智能体不会替你把它重建。
- 你自己的审计记录。它是智能体在你仓库里究竟跑过什么的唯一凭据,见审计智能体。
如果只是想腾空间,请精准地删,而不是清空整个目录:
# 那几个异常大的文件,通常腾出的空间就够了 find ~/.claude/projects -name '*.jsonl' -size +100M -ls # 一个你再也不会打开的项目 rm -rf ~/.claude/projects/-Users-you-old-project
按时间删是最诱人也最该避免的做法:越老的会话恰恰是你已经不记得的那些,按每字节的价值算,它们最值钱。
让它们有用,而不只是占地方
这些文件已经是你解决过的每一个问题的完整记录,缺的只是一个入口——从 875 个文件里找出该打开的那 300 KB,没人会手动做这件事。
curl -fsSL https://raw.githubusercontent.com/vshulcz/deja-vu/main/install.sh | sh deja install --auto
deja 在本地为这些记录建一份索引——这台机器上的每一个智能体,包括它装上之前的会话——然后以毫秒级从里面作答。几个 GB 的记录大约十秒建完。没有任何内容被上传,凭据在建索引时就被脱敏。在上面那台机器上,1.6 GB 的记录对应 204 MB 的索引。
智能体记得之前的对话吗 · 历史文件在哪里 · 快速开始