搜你记得的那几个词。
对提问和回答做全文检索,底层是 SQLite FTS5;三元组(trigram)分词器负责中文短语、子串和 代码标识符,英文回退到 porter。精确短语加引号,多个词之间是 AND 关系。
本地优先 · 只读 · macOS
Session Recall 在你 Mac 上为所有编码 Agent 的会话维护一份本地全文索引。八个 Agent,一个搜索框。 找到你只记得一半的那一轮,精确打开它,再交回给你的 Agent。
真实的 App 界面,索引为合成的演示会话。 查询“reconnect backoff”在 1.2 毫秒内返回 2 次会话、5 个轮次,命中的词全部高亮。 侧边栏是 Agent 列表、项目筛选和日期范围。
可检索以下 Agent 的会话
工作原理
每次会话都被拆成轮次——你问的问题和得到的回答——再加上第二层范围里的进程事件。
这些都存在一个 SQLite 文件里,你可以随时移动、备份或删除:
~/Library/Application Support/session-recall/index.db。
对提问和回答做全文检索,底层是 SQLite FTS5;三元组(trigram)分词器负责中文短语、子串和 代码标识符,英文回退到 porter。精确短语加引号,多个词之间是 AND 关系。
切到进程范围,可以搜工具调用、命令行、stdout 和 stderr,以及从里面提取出来的错误行。 推理内容被排除在外,所以留下来的都是真正发生过的事。
每条结果都深链到 sessionrecall://session/<id>?turn=N,并高亮你搜的词。
会话页面带着精确的恢复命令,以及一张可复制的 Markdown 交接卡片。
索引是一份独立的 SQLite 文件。Agent 的存储以只读方式打开,永不写入;会话也不会离开这台 Mac——没有同步,也没有账号。
界面截图
同一份索引的两个视图:跳到找到的那一轮,以及围绕一次失败检索进程输出。 两者都跑在合成的演示会话索引上。
cd '/Users/demo/demo-app' && claude --resume——旁边是
Copy 和 Copy handoff,下一次提问就能接着你找到的那次会话走。
timeout 搜工具调用、命令和错误输出——3 次会话、3 条进程记录、
0.7 毫秒。每条记录都标出 Agent、项目和日期。
安装
选 Apple 芯片版或 Intel 版都行,它们是同一个 App。打包好的 App 约 67 MB, 自带运行时,不需要预先安装别的东西。
Session Recall 做了 ad-hoc 签名,但没有公证——公证需要付费的 Apple 开发者账号。 所以 macOS 会拦下首次启动,并说这个应用已损坏。每份拷贝执行一次下面的命令, 之后就能正常打开:
xattr -dr com.apple.quarantine \
"/Applications/Session Recall.app"
open -a "Session Recall"
# 从克隆的仓库出发,使用 CLI 与 MCP 服务器
bun run scan
bun run sr "websocket" --limit 3
bun run mcp
App 启动时会扫描 Agent 存储,打开期间每 90 秒刷新一次索引。输入你记得的词; 有精确短语就加上引号。
需要 macOS 11 或更高版本。打包的 App 自带运行时;只有使用 CLI、MCP 服务器或从源码构建时才需要 Bun 1.3+。
索引位置:~/Library/Application Support/session-recall/index.db
给 Agent 用
bun run mcp 通过 stdio 把同一份索引交给任何 MCP 客户端——不开端口,不走网络。
把你的客户端指向绝对路径:
{
"mcpServers": {
"session-recall": {
"command": "bun",
"args": ["run", "/absolute/path/to/session-recall/src/cli.ts", "mcp"]
}
}
}
常见问题
~/Library/Application Support/session-recall/index.db,不会上传到任何地方。
xattr -dr com.apple.quarantine "/Applications/Session Recall.app"——
macOS 之后就会认它。