你的 AI 编码 Agent 每轮都从零开始?Ctx 让 Claude Code 和 Codex 继承之前所有会话记忆
你有没有遇到过这种情况:Claude Code 花了一个小时排查一个 API 兼容性问题,找到了根因,修复了它。然后你切到另一个分支,启动新的 Agent 会话,它完全不知道刚才发生过什么——重新掉进同一个坑,把同样的错误路径又走了一遍。
这不是 Agent 不聪明,这是每轮对话本质上从零开始的设计缺陷。你的电脑上其实存着所有 Agent 会话的完整转录(Claude Code 的 ~/.claude/、Codex 的 SQLite 日志、Cursor 的会话记录),但没有任何工具让当前 Agent 去检索它们。
Ctx 就是补上这一环的工具。它是一个开源的本地 CLI,把你电脑上所有 Agent 的历史会话索引到 SQLite 中,然后让当前运行的 Agent 用自然语言搜索过去的工作——决策、失败尝试、命令、测试结果,全部可回溯。
为什么 Agent 需要「会话记忆」?
每个 AI 编码 Agent 都擅长在当前对话中维持上下文,但跨会话的记忆几乎为零。典型的场景:
- 重复 Debug:上周排查过的 Build 失败原因,这周换了个 Agent 实例,得从头查起
- 决策丢失:讨论后决定用 SQLite 而非 PostgreSQL 的原因,下个迭代被推翻重来
- 命令遗忘:之前跑过的
docker compose up参数、数据库迁移命令、测试命令——全在旧会话里,新 Agent 找不到 - 失败模式:某个 API 调用方式已被确认不可行,新 Agent 又试了一遍
这些看似是小问题,但在 Agent 协作开发的场景中,信息断层会不断放大——每个新会话都在花时间”重新发现”前一个 Agent 已经知道的事情。
Ctx 的做法很直接:不是给 Agent 加记忆插件,而是让 Agent 可以用 CLI 搜索自己过去的轨迹。
安装与初始化
Ctx 用 Rust 编写,单一二进制,无运行时依赖。安装极简:
curl -fsSL https://ctx.rs/install | sh
安装后第一件事是索引已有的 Agent 历史:
ctx setup
这条命令会自动扫描你电脑上所有已知 Agent Harness 的日志目录,把历史会话导入本地的 SQLite 索引。支持哪些 Agent?目前列表已经有近 40 种,涵盖主流和细分工具:
| 类别 | 工具 |
|---|---|
| 主流编码 Agent | Claude Code、Codex、Cursor、Pi |
| 代码助手 | GitHub Copilot CLI、OpenCode、Gemini CLI |
| 开源框架 | Cline/Roo Code、OpenClaw、Continue、Windsurf |
| 其他 | Hermes Agent、Warp、Zed、Tabnine CLI、Kimi Code CLI…… |
整个索引过程在本地完成,数据不会离开你的机器。
实战:让 Agent 搜索过去的自己
Ctx 的核心命令是 ctx search。你(或你的 Agent)可以用自然语言提问:
ctx search "failed migration" ctx search --file src/database/migrate.go ctx search --term "API 兼容性" --term "timeout" --term "rollback"
返回的结果包含匹配的会话 ID、事件 ID、以及相关的上下文片段。Agent 看到这些结果后,可以用两条命令深入挖掘:
ctx show event evt_01hABCD1234 --window 3 ctx show session ses_01hEFGH5678
这些 和 是持久化的标识符——即使 Agent 重启、切换分支、甚至换了台机器(如果索引同步了),同一个 ID 仍然指向同一段历史。
对高级用户,Ctx 甚至支持直接 SQL 查询索引:
ctx sql "SELECT provider, COUNT(*) AS sessions FROM ctx_sessions GROUP BY provider"
这条命令可以让你看到:哪个 Agent 产生了最多历史会话、某段时间内的活动密度等分析数据。
效率优势:比原始日志搜索省 50 倍 Token
有人可能会说:「直接 grep 历史日志文件不就行了?」Ctx 的 README 提供了一个非常有说服力的对比:
- 原始日志搜索:返回 45,734 token 的原始文本
- Ctx 结构化搜索:返回 917 token 的结构化结果(片段 + ID)
原因是 Ctx 不是全文搜索——它对会话做了结构化处理(拆分为 events、metadata、touched-files),然后返回最相关的片段和可追溯的 ID。Agent 拿到 ID 后按需展开,而不是一次性把整段历史塞进上下文。
这对 Token 成本的影响是实实在在的:在 Claude Code 或 Codex 的计费模式下,每次搜索省下 40K+ Token,一天下来差距显著。
Agent 端集成:让 Agent 自动搜索
要让你的 Claude Code 或 Codex 在每次工作前自动搜索相关历史,可以安装 Ctx Skill:
ctx install skills
安装后,Agent 会自动在需要时调用 ctx search 检索历史。在 Claude Code 中,它会像调用普通工具一样搜索——你不需要手动切窗口翻旧日志。
对于想深度集成的团队,Ctx 也提供了 SDK(TypeScript、Python、Rust、Go),可以构建自定义的历史搜索工作流:
ctx docs search "API" ctx docs show cli-reference
与「记忆工具」的区别
市面上还有不少 Agent 记忆工具(Mem0、Zep、Cortex 等),但它们和 Ctx 解决的问题不同:
| 维度 | 记忆工具(Mem0/Graphify) | Ctx |
|---|---|---|
| 存储内容 | 紧凑的事实、摘要、向量 | 完整的会话事件和决策链 |
| 查询方式 | 语义检索、向量相似度 | 关键词 + 结构化字段 + SQL |
| 适用场景 | 长期偏好、用户画像 | Debug 回溯、决策溯源 |
| Token 效率 | 高(返回摘要) | 高(返回 ID + 片段) |
| Agent 覆盖 | 本工具生态 | 近 40 种 Agent 日志 |
简单说:记忆工具适合记「你叫什么名字」,Ctx 适合查「上次那个奇怪的 bug 到底怎么修的」。
隐私与安全
Ctx 的设计原则是本地优先、不上传。索引文件存储在 ~/.ctx/ 目录下,不会发送到任何云端服务,不需要 API Key,也不会向你的 Git 仓库写入数据。
需要注意的是:Ctx 保留日志中的原始文本(包括本地路径和可能的密钥认证信息)。如果你需要把历史上下文分享给其他人(比如在 PR 描述中引用),建议先检查再复制——官方文档也明确提醒了这一点。
总结
Ctx 解决的是一个看似简单但实际影响巨大的问题:AI 编码 Agent 的跨会话记忆断裂。它不依赖任何记忆模型或 RAG 管道,而是直接索引 Agent 已经产生的日志,用极低的 Token 成本让当前 Agent 可以”翻旧账”。
如果你在团队中频繁使用 Claude Code、Codex 或 Cursor,并且遇到过”Agent 又查了一遍旧 bug”的情况,Ctx 是一个即装即用的实用工具。一条 curl 加一条 ctx setup 就能让所有 Agent 历史变得可搜索——这对开发效率的提升是立竿见影的。
相关链接