2026年6月23日 2 分钟阅读

如何让 AI 编码 Agent 记住过去的所有会话?Agent-Historian 跨 Agent 历史搜索实战

tinyash 0 条评论

你有没有遇到过这种情况:AI 编码 Agent 刚在上一轮会话中找到了某个棘手 Bug 的根因、跑了三组调试命令、最终定位到配置文件的一行错误——然后新开一个会话,它又从零开始,重新读文件、重新跑命令、重新推导结论?

如果你同时使用多个 Agent(OpenCode 写代码、Claude Code 做 Code Review、Codex CLI 跑实验),情况更糟——每个 Agent 只记得自己当前的会话,彼此之间完全是信息孤岛。

这个问题不是配置失误,而是当前几乎所有 AI 编码 Agent 的设计限制:它们大多会话间无状态。每次新会话都是一张白纸。

为什么这是个大问题?

以一串真实工作流为例:

  1. 早上你在 OpenCode 中排查了一个 go.sum 合并冲突,找到了 go mod tidy 的正确命令
  2. 下午换到 Claude Code 做 Code Review,又遇到同样的 go.sum 冲突
  3. Claude Code 不知道你早上已经解决过——它重新分析、重新尝试、甚至可能给出错误的手动合并方案

这就浪费了:重复的 Token 费用(重新读文件+重新推理)+ 你的时间(等待 Agent 重复工作)+ 出错风险(不同 Agent 给出不同方案)

现有的解决方案都不够好

方案原理问题
--resume / --continue加载一个完整会话一次性全塞进上下文,没有搜索能力;只能恢复单个 Agent
记忆层(mem0, OpenMemory 等)Agent 自行摘要并存储关键事实Agent 只保存它认为重要的东西,大量的命令、错误日志、调试过程被遗漏;摘要可能有损耗
RAG / 向量数据库将对话分块+嵌入,语义搜索需要额外搭建基础设施(嵌入模型+向量库+索引管道),成本高
手动翻日志grep ~/.claude/projects/*格式不统一,不同 Agent 的日志结构不同

有没有一种方案:开箱即用、零基础设施、只读不写、跨 Agent、精确回溯真实文本

有——Agent-Historian

Agent-Historian:给 AI Agent 装上一个「历史搜索引擎」

Agent-Historian 是一个 MIT 许可的 CLI 工具,核心能力就一句话:通过命令行搜索和读取过去所有 Agent 的会话记录——不分 Agent、不需要索引、不修改任何数据。

它的设计哲学非常清晰:

不给 Agent 装「记忆」,而是让它读自己已经写下的真实记录

因为每次 Agent 会话的所有命令、输出、错误、决策已经原原本本地保存在磁盘上了(OpenCode 的 SQLite 库、Claude Code 的 JSONL 文件、Codex 的会话目录),Agent-Historian 只是提供了一层统一搜索接口。

安装

npm install -g agent-historian      # 安装后得到 ochist 命令

或者用 Homebrew:

brew install adlternative/tap/agent-historian

或者不安装直接运行:

npx agent-historian sources

要求 Node ≥ 18。如果你要搜索 OpenCode 的会话,需要 Node ≥ 22.5(内置 node:sqlite);不满足时 OpenCode 源会被自动禁用,其他 Agent 源不受影响。

快速上手:先看看 Agent-Historian 能「看到」什么

安装后第一个命令:

ochist sources

它会自动检测本地安装了哪些 AI 编码 Agent,并报告每个源的状态:

  • OpenCode(opencode.db
  • Claude Code(~/.claude/projects/*.jsonl
  • Qoder(~/.qoder/projects/**/*.jsonl
  • Codex CLI(~/.codex/sessions/**/rollout-*.jsonl

目前支持 4 种主流 Agent,架构设计上支持扩展新 Agent——只需实现一个 HistorySource 接口,注册到注册表即可。

核心用法:四种搜索模式

Agent-Historian 设计了渐进式披露(progressive disclosure)的工作流,目的是让 Agent 只把真正需要的行拉入上下文窗口,而不是一股脑倾倒整份会话记录。

1. 搜索——找到候选会话

ochist grep "ssh authorized_keys" --limit 5

返回匹配的会话 ID、片段、以及匹配行所在的 part_id。支持正则和子串匹配,默认只在当前项目目录搜索(--global 扩大到所有项目)。

2. 确认——查看元信息

ochist meta 

返回可靠的结构化元数据:会话时间、工作目录、使用的 Agent、总消息数。不依赖 LLM 摘要,直接从存储层读取。

3. 定位——浏览消息概览

ochist show  | grep -i "ssh-copy-id"

每行一条消息的概要(角色 + 前几个字),方便快速定位目标消息。可配合 grep / head / wc 做过滤。

4. 读取——获取完整内容

ochist part 

只读取某一条消息的完整文本——所有命令、输出和决策记录原样呈现,没有摘要、没有重写、没有损耗。

让 Agent 自动使用历史搜索:安装 Agent Skill

Agent-Historian 最实用的功能之一,是附带了 Agent Skill——教 AI 编码 Agent「在开始新研究之前,先检查历史记录」。

安装方式有三种:

推荐方式(跨 Agent):

npx skills add adlternative/agent-historian -g

这会安装到 OpenCode、Claude Code、Cursor、Codex 等所有支持 Skills 的 Agent 中。

版本锁定方式(与 CLI 版本同步):

ochist skill install --global --all

安装后,当你对 Agent 说「我之前改过哪里」「上次的命令是什么」「看看我们之前怎么解决的」,Agent 就会自动调用 ochist 搜索本地会话历史,而不是从零开始重新研究。

实际案例:合并冲突不再重复解决

README 中有一个真实案例:

一个 go.sum 冲突——正确的修复方式是 go mod tidy 而非手动编辑。上一轮会话中 Agent 已经执行过这个命令。新一轮会话它忘了,试图手动合并并出错。让它查 Agent-History 后,它找到了之前的命令,立即做了正确的事。

为什么记忆层没有捕获这个?因为 Agent 只保存它决定要记住的东西——除非你明确告诉它「记住这个修复命令」,否则这个细节永远不会进入记忆库。而本地会话文件永远有每一条命令和输出,Agent-Historian 读取的是这个「地真」。

Agent-Historian vs 其他方案:什么时候用什么

场景推荐方案
需要找到之前_确切执行过_的命令和结果Agent-Historian(精确回溯)
想让 Agent 记住「用户偏爱 pnpm」「部署走 staging」等持久偏好记忆层(mem0 等,携带结构化知识)
需要在大规模语料库上做语义搜索RAG/向量库(需要额外基础设施)
只想恢复最近一个会话--resume / --continue(免费、无搜索)

Agent-Historian 和记忆层是互补的——前者回答「给我看上次到底做了什么」,后者回答「帮我记住用户喜欢什么」。

为什么选择 CLI + Skill 而非 MCP 服务器?

这个设计决策值得一提:Agent-Historian 最初是 MCP 服务器,后来主动转向 CLI + Skill。原因很有启发性:

  • Agent 已经有 Shell 了:CLI 方式下 Agent 可以自然地组合 ochist grep ... | head -5 | grep -i error | jq,而 MCP 需要预先定义每个过滤参数
  • 零常驻成本:CLI 按需运行,MCP 服务器在整个会话期间占用上下文(工具 Schema 每轮都在)
  • Skill 教「何时用」「怎么用」:MCP 只暴露能力,Skill 承载了 locate → orient → scan → read 的完整工作流
  • 人类和 Agent 用同样的方式:人直接在终端跑 ochist,Agent 在 Shell 里跑完全相同的命令,输出也一样

隐私与透明度

Agent-Historian 只读取本地会话文件,不会联网。它有一个可选的用量统计(~/.agent-historian/usage.log),只记录时间戳、子命令、是否有查询,不记录查询文本、结果、路径。可以通过 AGENT_HISTORIAN_NO_TELEMETRY=1DO_NOT_TRACK=1 完全关闭。

局限与未来

需要诚实地说:Agent-Historian 读取的是各 Agent 的本地存储格式,而这些格式大多未经正式文档化。Agent 版本更新可能导致读取器需要适配。并且它是纯文本搜索(词法匹配),不支持语义理解——如果你想搜索「修复了性能问题」但会话中用的是「优化了查询速度」,词法搜索就帮不上忙了。

开发者自己也坦言:

最理想的终局是 Agent 自身内置这个能力——OpenCode 的 session show、Claude Code 的 --resume 进化成可读可搜的原生命令。如果那样,Agent-Historian 就不再需要了——而那是好事

在那之前,Agent-Historian 填补了一个真实且迫切的空白:跨 Agent、只读、零基础设施的会话历史搜索。

总结

如果你同时使用多个 AI 编码 Agent,或者即使只用其中一个但经常跨会话工作,Agent-Historian 值得一试。它的安装成本几乎为零(npm install -g agent-historian),带来的价值却可能帮你节省大量的重复 Token 和时间。

核心要点:

  • 安装npm install -g agent-historian
  • 主要命令ochist grep(搜索)、ochist show(浏览)、ochist part(读取)
  • 安装 Agent Skillnpx skills add adlternative/agent-historian -g
  • 开源许可:MIT
  • GitHub:https://github.com/adlternative/agent-historian

发表评论

你的邮箱地址不会被公开,带 * 的为必填项。