← 返回首页

/history-session:再也不怕找不回 Claude Code 历史会话

Claude Code 有个不起眼但很实用的功能:claude --resume <session-id>。它能让你恢复一个历史会话,完整的上下文、之前讨论的代码、未完成的任务——全部回来了。

问题是,你得先知道那个 session ID 是什么

Claude Code 在会话结束时会打印 Session ID: xxxxxxxx,但窗口一关就消失了。下次想继续某个任务,要么靠记忆,要么去 ~/.claude/projects/ 里翻文件——这体验并不好。

history-session skill 解决的就是这个问题。在任意目录输入 /history-session,立刻看到该目录下的所有历史会话:

📋 历史会话(当前目录)
1. [今天] [main] 实现用户认证模块与 JWT 集成
   claude --resume a3f8c2d1
2. [昨天] 修复 API 响应缓存导致的数据不一致问题
   claude --resume 9e4b7f20
3. [3天前] 重构数据库连接池,优化并发性能
   claude --resume c1d5a890
(共 7 条,显示最近 10 条)

Claude Code 其实已经记录了一切

这个 skill 之所以能做到这些,是因为 Claude Code 本身就在自动维护一份会话索引。

每个项目目录,Claude Code 都会在 ~/.claude/projects/<slug>/ 下保存两类文件:

  • sessions-index.json:索引文件,包含每条会话的 sessionId、AI 自动生成的 summary、时间戳、git 分支等元信息
  • *.jsonl:原始会话文件,逐行记录完整的对话消息

其中 slug 是把项目路径的所有非字母数字字符替换为 - 得到的,例如 /Users/you/Code/myapp 对应 -Users-you-Code-myapp

history-session skill 所做的,就是读取这些文件,格式化后呈现给你。

三层查找策略

这个 skill 在设计上花了不少心思,目标是在正确性速度之间取得平衡。

策略一:直接定位(O(1))

用当前路径生成 slug,直接读对应目录的 sessions-index.json。这是最快的路径,覆盖了 95% 以上的情况——只要你在这个目录用过 Claude Code,文件基本都在。

策略二:补充扫描

索引文件并不总是完整的。有些早期会话、或者从来没有 --resume 过的会话,只有 .jsonl 文件,没有 index 条目。策略二会扫描同一目录下的所有 .jsonl,把 index 中没有的会话补进来。

为了性能,每个 .jsonl 文件最多只读 200 行——summary 条目或第一条用户消息都出现在文件开头,完全够用。策略一和策略二的结果会合并去重,以 session UUID 为 key,统一排序呈现。

策略三:全目录回退(兜底)

极少数情况下,路径中含有特殊字符导致 slug 碰撞(比如 /foo/bar/foo-bar 生成相同 slug)。这时才会触发全扫描:遍历 ~/.claude/projects/ 下所有目录,用 originalPath 字段精确匹配。

输出设计的细节

相对时间

比起 2026-03-113天前 更符合人的直觉。skill 会把绝对日期转换为:今天 / 昨天 / N天前 / N周前 / N个月前 / N年前。

Git 分支

如果会话发生时有 git 分支信息,会以 [branch-name] 的形式附在日期后面。对于多分支并行开发的项目,能快速识别某条会话是在哪个分支上进行的。

总数提示

历史会话超过 10 条时,末尾会显示 (共 X 条,显示最近 10 条),让你知道还有更多记录。

使用方式

在 Claude Code 中直接输入:

/history-session

也可以用自然语言触发:

查看历史会话
看看之前在这个目录做了什么
history session

看到列表后,复制对应的 claude --resume xxxxxxxx 命令,在终端执行即可恢复会话。

一个典型场景

周一在 myapp 目录开了个会话,优化了数据库查询,处理到一半因为有别的事情中断了。周三回来,不记得 session ID,也不记得当时讨论到哪了。

输入 /history-session,看到:

2. [2天前] [feature/db-opt] 优化用户查询性能,增加索引...
   claude --resume 7a3f9c12

分支名 feature/db-opt、摘要里的关键词,立刻确认这就是那个会话。claude --resume 7a3f9c12,上下文全回来了,继续。

Skill 结构

history-session 遵循标准 Claude Skill 格式,逻辑与声明分离:

history-session/
├── SKILL.md                 # 触发条件与执行步骤(声明层)
└── scripts/
    └── history_session.py   # 查找逻辑(实现层,可独立运行)

SKILL.md 只有两步:运行脚本、展示结果。所有查找逻辑都在 history_session.py 中,仅依赖 Python 3 标准库,可以直接在终端独立调试:

python3 history_session.py /path/to/your/project

小结

history-session 没有做任何"额外"的事——它只是把 Claude Code 自己维护的数据,用一种人能看懂的方式展示出来。

这正是好工具的特质:不引入新的复杂性,只是让已有的能力变得触手可及。

history-session
Claude Code Skill · SKILL.md + scripts/

解压后将 history-session/ 目录放入 ~/.claude/skills/,重启 Claude Code 即可使用。仅依赖 Python 3 标准库,无需额外安装。