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-11,3天前 更符合人的直觉。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/skills/,重启 Claude Code 即可使用。仅依赖 Python 3 标准库,无需额外安装。