怎么找回被删掉的 Claude Code 会话
claude --resume 里找不到那次会话的四个原因,其中三个并不是删除
claude --resume 的列表是从磁盘上的文件生成的,所以列表里没有那次会话,意味着 Claude Code 找的那个地方没有那个文件。这不等于它没了。在接受最坏的那种可能之前,有三个便宜的解释值得先排除。
它是被删了,还是去了别的地方
四种原因,按实际发生的顺序:
- 30 天的定时清理。
~/.claude/settings.json里的cleanupPeriodDays默认保留 30 天,到期删掉更早的会话记录,不会有任何提示。如果是这个原因,文件确实没了——见这个清理会做什么。 - 项目被移动或改名了。
~/.claude/projects下的目录名编码的是项目的绝对路径,分隔符和路径里原有的短横线都变成-。仓库改名之后,旧会话还在旧编码名的目录下面;新路径里的--resume没有东西可列。 - 配置目录不同。在一个 shell 里设置了
CLAUDE_CONFIG_DIR而在另一个里没设,你的历史就分成了两棵树。 - 无头或 SDK 会话。这类会话写在
<config>/transcripts/下面而不是projects/,由 Xcode 托管的 Claude 则写在~/Library/Developer/Xcode/CodingAssistant/ClaudeAgentConfig下面。
把文件找出来
# 所有会话记录,按文件新旧排序 find ~/.claude -name '*.jsonl' -type f -print0 | xargs -0 ls -t | head # 看项目目录,找出编码着旧路径的那个 ls ~/.claude/projects | grep -i <repo-name> # 有会话 id 的话(从日志或截图里拿到的),直接按内容搜 grep -rl '<session-id>' ~/.claude 2>/dev/null
如果文件出现在一个编码着旧路径的目录里,把它移进当前目录,会话就回到了 --resume 的列表里:那个列表就是这个目录,不是数据库。
真正能找回的是什么
文件确实没了的话,诚实的清单很短。文件还在时拍下的文件系统快照或备份。从访达里删掉(而不是用 rm)时进的废纸篓。以及任何在文件消失之前读过它的东西。
最后一种是唯一可靠的答案,而且它必须在事前就已经就位。deja 给这台机器上每个智能体写下的会话记录建索引,所以它已经读过的会话,在原件被清理或删除之后仍然可以搜索——先用 deja "那次会话在做什么" 搜到它,再用 deja show <id> 打开它留下的记录。只有 deja forget 会主动丢掉一个会话。从来没有被任何东西读过的会话,没有任何办法找回。
curl -fsSL https://raw.githubusercontent.com/vshulcz/deja-vu/main/install.sh | sh deja install --auto
第一次建索引读的就是磁盘上已有的历史,所以它覆盖的是你现在拥有的那些会话,而不是从今天才开始。