OKF Agent Memory:GIT 原生持久化记忆协议,以及 Coding Agent 长生命周期上下文的工程基线
过去一个月,Hacker News 上有一个 80 分、32 条评论的 Show HN 把"AI 编程 Agent 的长期记忆"这件事重新带回了工程社区的讨论中心——OKF Agent Memory,2026 年 9 月 5 日发布。这不是又一个向量数据库或者又一个"记忆层中间件",它把 Google 在 Open Knowledge Format(OKF)v0.2 这份规范里定义的"结构化、可校验、Git 原生"的知识表示,做成了一个零依赖的 Go 单二进制,并通过内嵌的 stdio MCP server 直接接进 Claude Code、Cursor、Windsurf 这类 coding agent 的工作流。本文把 OKF Agent Memory 的官方 Launch HN 帖(2026-09-05)和官方落地页(okf-memory.dev)合并改写,回答三个工程问题:这种 Git 原生记忆协议到底解决了什么、为什么这件事对 coding agent 至关重要、以及企业要把 coding agent 落到生产里应该怎么用这种"长生命周期上下文"的基线。
一、Coding Agent 为什么需要长期记忆
先回到一个朴素的事实:Claude Code、Cursor、Windsurf 这些 coding agent 都是基于上下文窗口(context window)工作的。窗口一关闭,会话一重置,Agent 就把上一轮记住的所有事情——架构决策、领域知识、操作规则——全部忘掉。对开发者来说,这意味着每次开新会话都要重新给 Agent 解释项目背景;对团队来说,意味着每个 Agent 都在从零学起,人类程序员积累下来的"项目记忆"无法被沉淀给下一个 Agent。
这件事的工程难度远大于"写一个 README"。README 写到一定规模就会失控——一个项目的真实记忆可能是几百个 ADR(架构决策记录)、几百条 bug 复盘、几十条 CI 规则、几百条客户特殊约定,这些加起来轻易就是上万个 Markdown 文件、几十万个 token。任何试图把全部记忆"塞进上下文"的方案都会撞到三堵墙:上下文窗口的 token 上限、模型注意力的"lost in the middle"现象、以及每次会话重开时所有这些 token 都要重新计费的烧钱速度。
OKF Agent Memory 的作者在 Launch HN 的原帖里把这件事总结得很到位:"现有的方案要么是 ad-hoc 的扁平文件(CLAUDE.md、AGENTS.md、.cursorrules),膨胀到 20k token 之后就开始稀释注意力;要么是向量数据库 + 后台守护进程(Mem0、Letta、Zep),引入了重型运行时、容器、私有存储和每次检索 200-800 毫秒的延迟。"这两条路线都不是 coding agent 在工程上能接受的。OKF 选择走第三条路——把 Git 仓库本身变成结构化、可校验的知识库。
二、OKF v0.2:把知识表示做成规范,不是产品
OKF Agent Memory 不是凭空发明了一套格式,而是直接实现 Google 在 2026 年发布的 Open Knowledge Format(OKF)v0.2 规范。OKF 本身定义的是"什么样的 Markdown + YAML frontmatter 是结构化、可被工具解析、可以被 Git diff 的"。它的几个核心约束是:
- 每个知识条目是一个 Markdown 文件,顶部带 YAML frontmatter,包含 title、description、tags、id、type、aliases 等字段
- 条目之间通过 `[[wiki-links]]` 互相引用,引用名解析到 id.md 或者 id/_index.md
- 类型系统区分 Decision(决策)、Entity(实体)、Procedure(流程)、Preference(偏好)等
- frontmatter 里有 trust 字段,严格区分"人写的权威规则"和"Agent 生成的草稿"
OKF 把这套规范变成"git 原生的知识语料"——`knowledge/` 目录下全是人读得懂的 Markdown 文件,目录就是 schema,文件名就是 id,git diff 就能看到 Agent 的记忆变化。这种表示方法的好处是双重的:对开发者来说,Agent 的记忆不是黑盒,你可以像 review 代码一样 review Agent 的记忆;对 Agent 来说,搜索就是 git grep + BM25,根本不需要起数据库、不需要起 embedding 服务、不需要起容器。
OKF Agent Memory 选择把规范实现成一个 Go 单二进制,有三个工程理由。第一,Go 的冷启动时间可以压到 4 毫秒以下,内存常驻不到 15MB,这对 coding agent 的"开箱即用"是硬性指标——任何起一个 Python 进程都要 1.5-3 秒的方案,在 agent 的每一次 tool call 里都是延迟成本。第二,Go 标准库自带完善的文件系统、YAML 解析、并发原语,实现 BM25 这种经典 IR 算法根本不需要第三方依赖,这意味着 OKF Agent Memory 没有依赖地狱、没有供应链风险、没有 license 争议,符合"Git 原生"的精神。第三,Go 的单一静态二进制让"cURL 一行安装"成为可能,这是开发者工具的标准交付形态。
三、Progressive Disclosure:80% 的 token 是怎么省下来的
OKF Agent Memory 最核心的工程创新是"渐进披露(Progressive Disclosure)"模式。传统的 coding agent 工作方式是:每次会话开始,把全部记忆(20k token 的 CLAUDE.md 或者向量数据库拉回来的几十个 chunk)塞进系统 prompt,然后让模型自己在这一堆文本里找需要的。OKF 反过来——它不把任何记忆主动塞给 Agent,而是给 Agent 提供一组 MCP 工具,让 Agent 自己在需要的时候去搜索、读取、创建、校验知识条目。
这条路线带来两个直接收益。第一个是 token 开销直线下降。在官方落地页公布的基准测试里,传统的"monolith dump"模式每次 prompt 消耗 3,034 个 token,OKF 的 progressive disclosure 模式只消耗 603 个 token,降幅 80.1%。这个数字看起来惊人,但其实是必然——传统的方案是把所有知识当"上下文",OKF 只把"当前任务需要的那个概念"当上下文,二者的工作量差距就是知识总量 vs 知识条目数。第二个收益是本地模型的可玩性直线上升。同样这份基准测试里,在 Mistral Ministral 14B 这种 14B 推理模型上,OKF 把 TTFT(Time To First Token)从 9,227ms 降到 8,682ms,完整一轮对话时长从 15.9 秒降到 14.9 秒;在更大的模型上 TTFT 提升更明显,因为传统的 20k token prompt prefill 在本地 Metal GPU 上要 18 秒以上,直接吃掉整个交互体验。OKF 把每次 prompt prefill 的 token 量压到 600 左右,本地模型也能流畅跑 coding agent。
这套 progressive disclosure 的工程实现是 BM25。BM25 是 1990 年代提出的经典文档检索算法,在小到中等规模(几万到几百万文档)的语料上检索质量不输向量检索,而且快几个数量级。OKF Agent Memory 把 BM25 实现成内存索引(<300 微秒返回),索引在启动时一次性加载,后续每次 query 都是纯内存操作。这意味着 Agent 调用 `okf_search` 的延迟比一次 LLM 推理的 TTFT 低 4 个数量级,Agent 完全可以在每一轮对话里多次调用搜索而不会产生任何体感延迟。
四、Trust Tiers:Agent 不能覆盖人的规则
OKF Agent Memory 设计里最容易被低估、但工程含义最大的一条,是 Trust Tiers(信任等级)。规范在 frontmatter 里明确区分两类知识:`verified: human:...` 标识的"权威规则"和 `generated: agent:...` 标识的"Agent 草稿"。这条设计在生产环境里意味着:Agent 不能修改、不能覆盖、不能"重新生成"任何被标记为 human-verified 的知识条目;反过来,Agent 自己产出的知识条目会被自动标记为 generated,人类 reviewer 可以事后决定哪些要被晋升到 verified。
这条性质直接对治了一个非常现实的工程问题:Agent 在长期运行中会不断"重新发现"项目里的规则,如果它的发现和最初人设定的规则冲突,它会把人定的规则覆盖掉。CLAUDE.md 这种扁平文件没有任何机制防止这件事——Agent 只要能写文件就能改文件,人类定的规则和 Agent 自己的猜测被混在同一份文件里,review 起来一团糟。OKF 通过 YAML frontmatter 的 trust 字段在协议层面强制了"权威源不可覆盖",把这条约束从口头规则变成了 Git diff 能看到的格式。
更进一步,OKF Agent Memory 内置了"search-before-write"和"anti-duplication"两条行为规则:Agent 在写入新知识之前必须先搜索现有的知识库,看看是不是已经存在类似的条目;如果是,要么更新现有条目,要么明确说明为什么需要新建。这两条规则通过 MCP 工具的接口契约强加,而不是靠 prompt 暗示——意味着 Agent 在工程上无法绕过去。
五、内嵌 MCP Server:让 Claude Code 真正"记住"
OKF Agent Memory 的工程亮点之一是它内嵌了一个 stdio MCP server。`okf mcp knowledge` 一行命令启动,Claude Code、Cursor、Windsurf 这些 IDE 直接把它当成一个 MCP 工具源,工具列表里多了四个: `okf_search`(搜索知识库)、`okf_show`(读取某个知识条目)、`okf_create`(创建新条目)、`okf_validate`(校验所有条目的格式合规性)。
MCP 是 Anthropic 在 2024 年提出的 Model Context Protocol,目的是让 Agent 通过标准协议接入任意工具。OKF Agent Memory 把自己的全部能力暴露成 MCP 工具,意味着它不是"另一个 Agent 框架",而是"任何 Agent 框架的增强组件"——Claude Code 用它、Cursor 用它、本地 Ollama 跑的自定义 agent 用它,都不需要写胶水代码。这条架构选择让 OKF Agent Memory 在生态上站在了正确的一边:它不去抢 Agent 框架的份额,而是把"长期记忆"这件事做成所有 Agent 都能复用的横切能力。
官方落地页对启动门槛的描述是"60 秒":`curl -fsSL https://okf-memory.dev/install.sh | sh` 一行装好,然后 `okf bootstrap .` 在任何仓库根目录初始化,会自动建好 `knowledge/` 目录结构、非破坏性地丰富现有的 `AGENTS.md`、并安装好对应的 agent skills 文件。整个流程不需要账号、不需要 API key、不需要订阅。
六、对企业 coding agent 落地的启示
把 OKF Agent Memory 的设计原则抽出来,有四条对国内企业把 coding agent 落到生产环境里特别有借鉴价值。
第一条启示:长期记忆不要绑死在 prompt 里,要绑死在协议里。CLAUDE.md 的失败不是"Claude.md 写错了",而是它试图用自然语言文件同时承担"项目文档"和"Agent 长期记忆"两个角色,这两个角色的最佳表达形式完全不同。OKF 通过 YAML frontmatter + Markdown body + wiki-links 把"知识条目"做成一等公民,每一条都有 id、type、trust、tags,可以在 Git 里被 diff、被 blame、被 code review。企业应该把这条思路直接抄过来:即使不用 OKF,也要把 Agent 的长期记忆做成一等公民的、有 schema 的、可校验的 Git 对象。
第二条启示:记忆层跟推理层要解耦。OKF Agent Memory 把记忆检索做成 MCP 工具而不是塞进系统 prompt,这意味着推理层(Claude/GPT/Gemini)和记忆层(OKF/Letta/Mem0/向量库)可以独立替换、独立计费、独立审计。今天用 OKF,明天换成 Letta,后天自己造一套,Agent 的核心代码不变。这对企业的工程价值极大——记忆层是 Agent 落地里"换代最快"的组件,把它绑死在任何一个特定方案里都是技术债。
第三条启示:本地模型 + 结构化记忆是隐私场景的最低门槛。OKF Agent Memory 的零依赖、零网络调用、零 telemetry 设计,让它在企业内网里完全可用——不向外发任何请求,不依赖任何 embedding API,不需要 GPU 服务器跑向量检索。这意味着即使企业没有 GPU 集群、不能调用公有云 LLM,只要有一个本地 Ollama + 一个 OKF Agent Memory,就能跑出"私有的、离线版的 Claude Code"。对金融、医疗、政企这类对数据出域敏感的场景,这条组合几乎是目前最现实的工程路径。
第四条启示:Trust Tiers 应该在协议层强制,不能在流程层依赖。OKF 通过 frontmatter 字段强制区分 verified 和 generated,Agent 不能跨越这条边界。这条性质如果只在流程规范里写"Agent 修改规则需要人工 review",那最终一定会被绕过——一旦 Agent 在凌晨三点跑得正欢,review 就是个空话。把"Agent 不能改 verified 知识"做成协议层硬约束,Git diff 里看得见,流程才有意义。
七、OKF Agent Memory 还没解决的问题
把 OKF Agent Memory 夸完,也得指出它目前还没解决的几个工程问题。
第一个是多仓库联邦搜索的问题。OKF Agent Memory 默认每个仓库自管一个 `knowledge/` 目录,这对单仓库项目完美,但对几十个微服务的企业来说远远不够。OKF 在落地页提到他们正在做"OKF Cloud"做跨仓库联邦搜索,但目前还是 private beta,还没正式开放。这意味着"OKF 能跨项目用"这件事在写本文的时候还只是承诺,不是事实。
第二个是 BM25 在超大规模语料下的召回率问题。BM25 是基于词频的检索算法,它的优势是快、零依赖、可解释,劣势是它处理不了"语义近似但用词不同"的查询。比如 Agent 搜"用户登录方式",BM25 不会返回用"SSO 单点登录"或者"OIDC"写的条目,因为字面不匹配。这条问题在小型项目里影响不大(几千个知识条目),但在企业级语料里(几万个知识条目)会成为召回率的瓶颈。OKF 目前没有公开支持混合检索(BM25 + embedding)的方案。
第三个是知识条目的"陈旧化"问题。OKF 的 frontmatter 有日期字段,但目前没有自动的"过期检查"或者"使用频率统计"机制。这意味着 Agent 可能基于 3 年前的某条 ADR 做决策,而这条 ADR 早就被新 ADR 覆盖了。这是所有"长期记忆"系统都绕不开的问题,但 OKF 目前没给出工程化的解法。
八、结论:Git 原生记忆是 coding agent 的工程基线
回到标题那个问题:OKF Agent Memory 给出的是 coding agent "长生命周期上下文"的工程基线。这条基线的核心不是"BM25 检索"或者"Go 单二进制"——这些是实现细节——核心是"Git 原生、结构化、可校验、可审计"这四个性质。一个企业的所有架构决策、所有 bug 复盘、所有 CI 规则、所有客户约定,都应该以这种形式存在一个 Git 仓库里,而不是散落在几十份 20k token 的 CLAUDE.md 里。
OKF 选择把这件事开源(MIT license)、做成一等公民的工程协议(OKF v0.2)、提供标准化的工具接口(MCP server),而不是绑死在某个特定 agent 框架里,这条战略选择决定了它有可能成为 coding agent 时代的"长期记忆协议标准"。下次再有人跟你说"我们要给 Agent 做长期记忆",你可以反问一句:"你的记忆层是 Git 原生吗?能 diff 吗?能 blame 吗?Agent 能覆盖人定的规则吗?"——这四个问题的答案,就是判断一个长期记忆方案能不能进企业生产环境的最低门槛。