Skip to content

如何搜索和管理 Claude Code 会话历史

你用 Claude Code 写了几周代码。这个工具很强大——它能读取整个仓库、理解架构、生成高质量的代码变更。但然后问题来了:你需要找回上周二解决的那个 OAuth token 刷新逻辑,却怎么也找不到。

本文介绍 Claude Code 存储会话的位置、内置功能的局限,以及管理会话历史的实用方法。


Claude Code 会话存储位置

Claude Code 将所有会话数据存储在本地 JSON 文件中。默认位置是:

~/.claude/projects/<project-hash>/

每个项目根据项目路径获得唯一的 hash。目录内是 .jsonl 文件——每个会话一个文件。这些文件包含:

  • 每条消息(用户和助手)
  • 工具调用及其结果
  • 文件读写操作
  • 每次交互的时间戳

数据是人类可读的。你可以用文本编辑器打开任何 .jsonl 文件浏览对话内容。


内置功能的局限

Claude Code 提供 --resume 来继续上次会话。但这有显著局限:

1. 只能续上次会话

--resume 只能继续最近的对话。如果三个会话之前有一个突破性的解决方案,你无法通过这个功能找回。

2. 没有搜索功能

没有办法跨会话搜索。如果你记得解决过 OAuth 问题但不记得是哪个会话,你需要手动浏览文件。

3. 没有跨项目索引

每个项目的会话是隔离的。如果上个月在另一个项目中解决了类似问题,从当前项目无法找到。

4. 没有代码状态上下文

会话文件包含对话内容,但不包含对话时的代码状态。你能看到 AI 建议了什么,但看不到建议时的代码库是什么样子。


会话管理的实用方法

方法 1:手动浏览文件

最直接的方法是直接浏览会话文件:

bash
# 列出项目的所有会话
ls ~/.claude/projects/<project-hash>/

# 在所有会话中搜索关键词
grep -r "OAuth" ~/.claude/projects/

# 查看特定会话
cat ~/.claude/projects/<project-hash>/session-123.jsonl | jq .

优点:无需额外工具,完全访问原始数据。

缺点:耗时,无索引,无代码状态关联。

方法 2:grep + Shell 脚本

你可以创建 shell 别名来加速常见搜索:

bash
# 添加到 .bashrc 或 .zshrc
alias cch-search='grep -r'
alias cch-list='ls ~/.claude/projects/ | head -20'

优点:比手动浏览更快,可脚本化。

缺点:仍无索引,会话多时结果会很杂乱。

方法 3:专用会话管理工具

已经出现了一些专门解决这个问题的工具。它们通常提供:

  • 全文搜索所有会话
  • 跨项目会话索引
  • 时间线可视化
  • 代码状态关联

其中一个工具是 Mantra,提供:

  • Universal Search:同时搜索 Claude Code、Cursor、Gemini CLI、Codex 的会话
  • Time Travel:查看每次对话时的代码状态
  • Local-first:所有数据留在本地,零网络请求
  • 永久免费:核心功能永久免费,无需注册

会话管理最佳实践

无论选择哪种方法,以下实践都有帮助:

1. 使用描述性的提交信息

当 Claude Code 做出更改时,提交信息要引用正在解决的问题。这在会话和代码更改之间建立联系。

2. 保留决策日志

对于重要的架构决策,在单独的文件(如 DECISIONS.md)中记录,并引用做出决策的会话。

3. 导出重要会话

对于特别有价值的会话,导出为 Markdown 或笔记应用。即使会话文件丢失,也能访问。

4. 定期备份

~/.claude/projects/ 中的会话文件应该包含在备份策略中。它们包含花费大量时间积累的宝贵知识。


更大的图景:会话管理成为一等公民

随着 AI 编程工具在开发工作流中变得越来越核心,会话管理正在从"事后考虑"演变为"核心关注点"。

你与 AI 的对话不是一次性的——它们是调试过程、架构推理和问题解决方法的记录。丢失它们意味着丢失积累的知识。

无论你使用手动方法、Shell 脚本还是专用工具,关键是将 AI 编程会话视为值得保存和检索的宝贵资产。


Mantra 是一个本地优先的 AI 编程会话查看器,支持 Claude Code、Cursor、Gemini CLI 和 Codex。核心功能永久免费。从 mantra.gonewx.com 下载。