用了 Claude Code 三个月,积累了 400+ 会话、数万条消息。上周那个巧妙的 Hook 方案是怎么写的?上个月调的那个诡异 Bug 最后怎么解决的?翻遍文件夹也找不到——直到有了这个工具。
痛点
Claude Code 把所有对话存在 ~/.claude/projects/ 下的 JSONL 文件里。几百个 UUID 命名的文件,没有标题,没有搜索,没有索引。想回溯一段对话?要么靠记忆找到 session ID 手动 claude --resume,要么一个个文件 grep。
Claude History Search 解决这个问题。
它能做什么
秒级全文搜索
输入关键词,即时搜索所有会话。支持中英文混合、多词 AND 匹配。搜索结果自动跳转到匹配的那条消息,关键词黄底高亮——不只是找到文件,而是精确定位到那句话。
按 ⌘G 在所有匹配结果间跳转,跨会话、跨页面,像在 IDE 里 Find Next 一样流畅。
语义搜索(本地运行)
记不清关键词?用自然语言描述:"上次讨论的 APK 逆向方案"、"关于数据库性能优化的建议"。
基于 Qwen3-Embedding-0.6B 模型,在你的 Mac 上本地运行(MLX + Metal 加速),不发送任何数据到云端。索引增量构建,支持断点续传——20000 条消息的索引,几分钟建好,之后每次只需编码新增的几十条。
原生 Qt 界面
不是 Electron,不是 Web。原生 C++ Qt6,QPainter 自绘聊天气泡,启动快、滚动顺滑、内存占用小。
- 深色/浅色模式一键切换 (
⌘T) - 超长消息自动折叠,搜索时只展示关键词上下文
- Tool Result(命令输出、文件内容)也纳入搜索范围并显示
- 一键复制
claude --resume <id>,直接回到那个会话继续对话
完整的快捷键体系
| 操作 | 快捷键 |
|---|---|
| 搜索 | ⌘F → 输入 → Enter |
| 语义搜索 | ⌘⇧F |
| 下一个/上一个结果 | ⌘G / ⌘⇧G |
| 翻页 | ⌘[ / ⌘] |
| 复制 Resume 命令 | ⌘⇧C |
| 切换深色/浅色 | ⌘T |
安装
# Homebrew 一行安装
brew tap JuneLeGency/claude-history-search
brew install claude-history-search
或从源码编译(需要 Qt6 和 CMake):
git clone https://github.com/JuneLeGency/claude-history-search.git
cd claude-history-search/qt
mkdir build && cd build
cmake .. -DCMAKE_BUILD_TYPE=Release
cmake --build . --config Release
open claude-his-search.app
技术亮点
- C++ JSONL 解析器 — QtConcurrent 并行解析,400+ 会话秒级加载
- 结构化内容提取 — 不只搜索聊天文本,还包括
tool_result(grep 输出、文件内容、编译日志等) - CJK 分词 — 中文全角标点作为搜索分词边界,中日韩文本精确匹配
- 三重匹配策略 — 原始文本匹配 → normalize 匹配(
-_/视为空格)→ searchText 匹配 - 增量嵌入索引 — 每 5 个 batch 落盘一次,进程中断后从断点继续
它不做什么
- 不修改你的 Claude 历史文件(只读)
- 不发送数据到任何服务器(完全本地)
- 不需要 Claude API Key(直接读本地文件)
- 不需要 Python(除非你要用语义搜索)
开源
MIT 协议。代码在 GitHub。
如果你也是 Claude Code 重度用户,试试看。找回那些被遗忘在 JSONL 里的灵感和方案。