OpenContext:给 Codex、Claude Code 和 Cursor 加一层可操作的长期上下文

基于 OpenContext 官方仓库与 README,解析全局 contexts 库、oc CLI、MCP、Skills 和本地 UI 如何让编程 Agent 跨会话复用工程上下文,并给出安装、初始化、验证与边界。

编程 Agent 最容易被低估的缺陷,不是不会生成代码,而是每次开始工作都像第一次见到项目。昨天已经确认的架构取舍、某个接口为什么不能改、测试环境的特殊启动方式、用户对命名和提交粒度的要求,往往散落在聊天记录、Issue、临时笔记和人的记忆里。换一个会话、换一个仓库,或者只隔一天,Agent 就可能重新提问,甚至沿着已经否决的方向实现。

OpenContext 的定位很克制:它不是另一个编程 Agent,也不是承诺“自动理解一切”的神奇记忆层,而是一个面向 AI 助手的个人上下文与知识库。它把全局 contexts/ 库、oc CLI、MCP、Skills、slash commands、Desktop 和本地 Web UI 组合起来,让 Codex、Claude Code、Cursor、OpenCode 等现有工具多一条可操作的上下文通道。真正有价值的闭环是:先读取历史,再开始工作;完成任务后,把新结论写回去

它解决的不是“记忆容量”,而是上下文的可复用性

普通的聊天历史并不等于工程知识。聊天记录很长,却未必能快速回答“这个服务为什么不用 ORM”“这条命令在 CI 中为何必须带某个参数”“上次修复的根因和验证证据是什么”。如果把所有历史原文一股脑塞进新提示词,成本高、噪声大,还会把过时的猜测和已经废弃的决定一起带回来。

OpenContext 的思路是把知识放到一个跨项目、跨会话的上下文库里,再通过目录、文档、清单和搜索,让 Agent 按任务取用。这里的关键词是可操作:Agent 不只是被动看到一段摘要,还能在被允许的工具链中读取、搜索、创建和迭代文档。于是“记忆”不再是模型内部不可检查的印象,而是团队可以查看、修改、迁移和删除的文件化资产。

一层全局 contexts 库,解决跨仓库断裂

README 把 oc CLI 描述为管理全局 contexts/ 库的入口,能力包括文件夹、文档、清单和搜索。它与当前项目目录的关系很重要:项目代码可以各自独立,但通用的工程偏好、个人工作方法、某项业务的稳定背景,不必随着仓库复制多份。

可以把内容分成三类。第一类是稳定规则,例如提交约定、代码风格、审查清单;第二类是项目背景,例如领域词汇、模块边界、部署限制;第三类是过程结论,例如某次故障的根因、尝试过但失败的方案、未来要补的测试。第一类适合跨仓库复用,第二类应按产品或团队分组,第三类需要带日期、证据和适用范围。不要把三类内容混成一张“万能记忆”,否则一次局部决策很容易被误套到另一个项目。

从安装到初始化:先建立可验证的接入点

官方 README 给出的 CLI 安装命令是:

npm install -g @aicontextlab/cli

安装后,在需要接入的项目目录运行:

cd your-project
oc init

oc init 会提示工具设置,默认面向 Cursor、Claude Code 和 Codex 生成用户级 Skills;同时为 Cursor 与 Claude Code 生成 slash commands,并写入相应的 MCP 配置。README 列出的典型位置包括 ~/.cursor/commands~/.claude/commands~/.codex/skills,以及对应的 mcp.json。如果环境变量 CLAUDE_CONFIG_DIRCODEX_HOME 被使用,配置会落在相应目录。

非交互环境可以显式指定工具,例如:

oc init --tools cursor,claude,codex

也可以使用 README 提到的 --no-claude--no-cursor--no-codex 选项缩小范围。这里的实践建议是:先在一个非敏感、能运行测试的试验项目中初始化,检查生成的用户级文件,再推广到其他项目。不要只看命令退出成功;接入的验收标准应包括 Agent 能否找到 OpenContext 的能力、能否搜索已有文档,以及能否在明确指示下创建一条新记录。

Skills 和 slash commands:把记忆操作变成动作

OpenContext 的 Skills-first 设计,比单纯提供一个数据库更贴近编程 Agent 的使用方式。README 列出的 slash commands 包括:

  • /opencontext-context:在开始工作前加载背景。
  • /opencontext-search:搜索相关文档。
  • /opencontext-create:创建新文档。
  • /opencontext-iterate:把已经学到的内容持久化。

命令名本身不是重点,重点是它们把“想起旧知识”和“保存新知识”从临时提示词变成了重复可执行的流程。Cursor 和 Claude Code 可以使用 slash commands;Cursor、Claude Code、Codex 则可以使用由初始化生成的用户级 Skills。对于 Codex,重点通常是让它能加载这些 Skill 并调用 MCP;对于 OpenCode,官方 README 将其列为支持的编码 Agent,配置位置是 ~/.config/opencode/。不同 Agent 的配置目录和触发方式不完全相同,不能把某个客户端的命令路径硬套到另一个客户端。

一套适合日常开发的“读—做—写”工作流

第一步:开始前读取,而不是边做边猜

接到任务后,先描述目标、范围和约束,再用 OpenContext 搜索相关上下文。CLI 的基础命令包括:

oc folder ls
oc doc ls project-name
oc search "缓存失效 重试策略"
oc context manifest project-name

其中 oc search 适合找关键词相关文档,oc context manifest 可以生成供 AI 阅读的文件清单。先读清单再读具体文档,通常比把整个目录塞进上下文更节省注意力。要特别核对文档的适用项目、更新时间和证据:历史记录只能帮助形成假设,不能替代当前代码、测试和运行结果。

第二步:把历史结论转成当前任务的检查项

读到“这个 API 不能直接改”时,不要让 Agent 把它当永恒真理,而应追问原因:是兼容性、数据迁移、权限、性能,还是当时的临时限制?把结论转成待验证的检查项,例如“确认调用方仍然存在”“查看对应契约测试”“检查配置开关是否已移除”。这样做可以避免长期上下文变成僵化的旧指令,也能让 Agent 在证据不足时停下来。

第三步:完成后只写入可复用的知识

任务结束后,使用 /opencontext-iterate 或创建文档的流程,把新信息写回上下文库。高质量记录至少回答四个问题:发生了什么,根因或决策是什么,如何验证,适用边界在哪里。不要把整段工具日志当记忆;保留关键命令、失败现象和验证结果即可。比如“将超时从 3 秒改成 10 秒”不够完整;“由于上游批处理的 P95 在峰值时超过 3 秒,改为 10 秒,并用压测与超时回归测试验证;仅适用于批处理入口,不适用于同步查询”才具有复用价值。

用 CLI 验证基本能力

OpenContext 的 CLI 快速参考还包括创建文件夹和文档:

oc folder create engineering -d "工程规范与故障经验"
oc doc create engineering cache-timeout.md -d "缓存超时记录"
oc doc ls engineering
oc search "缓存超时"
oc mcp
oc ui

这些命令分别覆盖结构管理、文档创建、列表、搜索、MCP 服务和本地 Web UI。实际验证时应避免只凭界面“看起来已配置”。可以按以下顺序做一条最小验收:先创建一个无敏感信息的测试文档;用 oc doc ls 确认它出现在目标文件夹;用 oc search 以独特关键词检索;启动 oc ui 查看本地界面是否能浏览和编辑;最后在目标 Agent 中请求读取该文档,并在明确同意后追加一条内容。每一步都应有可观察结果,失败时记录是 CLI、路径、MCP 配置还是 Agent 侧调用的问题。

MCP、Desktop 和 Web UI 分别适合什么

MCP 是连接层:它让 Cursor、Claude Code、Codex 以及其他 MCP 客户端以工具方式调用 OpenContext。它适合把上下文操作嵌入 Agent 的工作回路,但也意味着需要认真检查用户级配置、权限和客户端是否真正加载了服务器。

Desktop 更适合人工整理、搜索和编辑。它不是 Agent 的替代品,而是让人审阅记忆库、合并重复内容、删除过期规则的管理入口。Web UI 可以通过 oc ui 在本地浏览和编辑,不需要另行安装;对于临时检查或不想打开原生应用的场景更方便。三种入口共享的是上下文资产,不是三套互相独立的记忆。

边界:它不会自动保证事实正确

第一,OpenContext 保存的是知识,不是事实裁判。Agent 可能把错误判断写入库,也可能把过期内容检索出来。关键文档应有人审阅,并记录来源、时间和适用范围。

第二,全局库解决了复用,也增加了串项目风险。一个项目的内部域名、客户信息、凭据、生产日志和个人隐私不应因为“方便 Agent 读取”而直接写入共享上下文。敏感内容要遵守组织权限与脱敏要求;“本地”也不等于“无需治理”。

第三,支持多个 Agent 不代表它们的行为完全一致。Cursor、Claude Code、Codex 和 OpenCode 的配置位置、Skill 触发机制、MCP 支持细节都可能不同。应以官方 README 和各工具当前文档为准,逐个验收,不能因为一个客户端成功就宣布全部接入。

第四,记忆层不能替代代码搜索、测试、静态分析、Issue 和 code review。正确的顺序是用历史缩小搜索范围,用当前代码确认现状,用测试验证行为,再把稳定结论写回去。它减少的是重复解释和错误起点,不是工程验证责任。

什么时候值得接入,什么时候不值得

如果工作是一次性脚本、项目很小、约束很少,直接在当前会话提供背景可能更快。接入层本身有安装、配置、目录治理和清理成本。它更适合长期维护的多仓库项目、频繁切换会话的个人开发者、需要反复复用领域规则的团队,以及已经在使用 Codex、Claude Code、Cursor 或 OpenCode、但不想替换现有 Agent 的人。

开源许可也是一个明确事实:GitHub 仓库采用 MIT License。许可证降低了评估和自托管的门槛,但不自动解决企业合规、数据分类、备份和权限问题。采用前仍应按组织流程审查依赖、配置和数据流。

结论:把“记住”改造成可审计的工程动作

OpenContext 的价值不在于替 Agent 产生更多不可见的“记忆”,而在于提供了一条较清晰的工程化路径:用全局 contexts/ 库保存可编辑知识,用 oc 管理和搜索,用 MCP、Skills 或 slash commands 把知识接入现有 Agent,用 Desktop 或 Web UI 让人能够检查和维护。最稳妥的落地方式不是一开始导入所有聊天记录,而是从一个项目、一个工作流和几条可验证规则开始。

当 Agent 每次动手前都能读取相关背景,完成后又能留下带证据和边界的结论,长期上下文才真正从“存档”变成生产力。OpenContext 提供了这层连接;哪些内容值得保存、谁可以读取、多久复核一次,仍然应由开发者和团队负责。