session recall

本地优先 · 只读 · macOS

把那次会话找回来。

Session Recall 在你 Mac 上为所有编码 Agent 的会话维护一份本地全文索引。八个 Agent,一个搜索框。 找到你只记得一半的那一轮,精确打开它,再交回给你的 Agent。

v1.3.0 · macOS 11+ · 26.7 MB · MIT

  • 无需账号
  • 无遥测
  • 不写入 Agent 存储
Session Recall 的搜索结果窗口。搜索“reconnect backoff”返回 2 次会话、5 个轮次,命中的词以绿色高亮,每条结果都标出 Agent、项目和日期。

真实的 App 界面,索引为合成的演示会话。 查询“reconnect backoff”在 1.2 毫秒内返回 2 次会话、5 个轮次,命中的词全部高亮。 侧边栏是 Agent 列表、项目筛选和日期范围。

可检索以下 Agent 的会话

  • omp
  • pi
  • OpenCode
  • Cursor
  • Alma
  • Cindy
  • Claude Code
  • Codex

工作原理

八个 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——没有同步,也没有账号。

筛选 Agent · 项目 · 日期范围 · 提问/回答角色

界面截图

为半个模糊的查询而做。

同一份索引的两个视图:跳到找到的那一轮,以及围绕一次失败检索进程输出。 两者都跑在合成的演示会话索引上。

深色主题下的 Session Recall 会话详情页,停在并高亮了第 02 轮。转写内容上方的一条栏写着 CONTINUE IN Claude Code,后面跟着恢复命令,以及 Copy 和 Copy handoff 两个按钮。
会话详情。转写内容上方那条栏给出 Continue in 命令——这里是 cd '/Users/demo/demo-app' && claude --resume——旁边是 Copy 和 Copy handoff,下一次提问就能接着你找到的那次会话走。
深色主题下的 Session Recall 进程搜索页。搜索 timeout 返回 3 次会话、3 条进程记录,用时 0.7 毫秒;每条都显示从失败测试中提取的错误行,命中的词已高亮。
进程搜索。用 timeout 搜工具调用、命令和错误输出——3 次会话、3 条进程记录、 0.7 毫秒。每条记录都标出 Agent、项目和日期。

安装

两分钟,开始第一次搜索。

  1. 下载、解压、拖进“应用程序”。

    选 Apple 芯片版或 Intel 版都行,它们是同一个 App。打包好的 App 约 67 MB, 自带运行时,不需要预先安装别的东西。

  2. 清除隔离标记。

    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
  3. 打开就能搜。

    App 启动时会扫描 Agent 存储,打开期间每 90 秒刷新一次索引。输入你记得的词; 有精确短语就加上引号。

需要 macOS 11 或更高版本。打包的 App 自带运行时;只有使用 CLI、MCP 服务器或从源码构建时才需要 Bun 1.3+。
索引位置:~/Library/Application Support/session-recall/index.db

给 Agent 用

你的 Agent 也能搜它。

bun run mcp 通过 stdio 把同一份索引交给任何 MCP 客户端——不开端口,不走网络。 把你的客户端指向绝对路径:

MCP 服务器文档
{
  "mcpServers": {
    "session-recall": {
      "command": "bun",
      "args": ["run", "/absolute/path/to/session-recall/src/cli.ts", "mcp"]
    }
  }
}

常见问题

安装前大家会问的问题。

会有数据离开我的 Mac 吗?
不会。没有账号、没有同步、也没有遥测。会话从 Agent 存储读进本地 SQLite 索引 ~/Library/Application Support/session-recall/index.db,不会上传到任何地方。
支持哪些 Agent?
八个:omp、pi、OpenCode、Cursor、Alma、Cindy、Claude Code 和 Codex。omp 与官方 pi 共用一套 JSONL 格式,其余的从各自的存储读取。每个适配器都是只读的,并且会排除该 Agent 的私密记录。
会改动我的历史记录吗?
不会。Agent 存储以只读方式打开,永不写入。Session Recall 只写自己的索引文件; 就算删掉索引,代价也只是重新扫描的时间。
为什么 macOS 首次启动会警告?
App 是 ad-hoc 签名而不是公证,所以 Gatekeeper 会把新拷贝当成不可信,并报告为已损坏。 每份拷贝执行一次清除隔离属性的命令—— xattr -dr com.apple.quarantine "/Applications/Session Recall.app"—— macOS 之后就会认它。
选 Apple 芯片版还是 Intel 版?
Apple 芯片版 26.7 MB,Intel 版 29.5 MB,都是 v1.3.0,都需要 macOS 11 或更高版本。 不确定自己是哪台 Mac,点开苹果菜单里的“关于本机”就能看到。
有 Windows 和 Linux 版吗?
没有。Session Recall 是 macOS 应用,检索的是 macOS 上的 Agent 存储位置。 CLI 和 MCP 服务器跑在 Bun 上,但目前没有发布 Windows 或 Linux 版本。
索引有多新?
App 启动时扫描,打开期间每 90 秒刷新一次。当索引超过五分钟没更新时,MCP 服务器会在后台 刷新,并在每次回复里带上索引的新鲜度。
怎么更新?
从 Releases 下载新的压缩包,替换“应用程序”里的 App,再为新拷贝清除一次隔离标记。 索引在 App 之外,会被继续使用,不用从头重扫。