项目级复利上下文
目标
由 Codex 与 Claude Code 共同维护项目根目录下的 .Codex/对话历史.md,让两类价值同时增长:
- 历史复利:长期保存逐会话精炼记录,支持按主题、关键词、类名、文件路径和日期回溯。
- 认知复利:从历史中持续提炼当前有效的决策、经验、约束和避坑知识。
项目认知可以合并、修正和替代;有效历史不会因为被提升为认知或文件增长而自动消失。
核心边界
- 使用一个核心文件:
.Codex/对话历史.md。 - 不创建独立的
.Codex/项目上下文.md。 - 不记录或跳转到原始 Codex 任务;Markdown 条目本身就是历史定位单位。
- 不保存聊天全文、大段代码、原始日志、密码、令牌、账号或敏感隐私。
- 不默认全文读取历史;先读项目认知和最近记录,再按需搜索。
- 除显式归档外,任务进行中不反复写历史;自动归档只在任务形成经验证、对项目有复用价值的最终结论后执行。
- 自动加载本 Skill 不等于自动获得写入权限;先根据触发模式决定只读或写入。
.agents/skills/rrr-context-history/SKILL.md是唯一正式规则源;Claude Code 适配入口的description必须与本文件完全一致,正文只负责指向本文件,不复制或改写规则。- Codex 与 Claude Code 使用相同的触发条件、处理模式、读写边界、记录格式和完成反馈;唯一允许的结果差异是记录标题中的执行端分别写
Codex或Claude Code。 .Codex/对话历史.md是唯一活动历史;迁移后的.claude/对话历史.md只作指针,不得继续写入。
记录标题
- 新记录标题使用
YYYY-MM-DD HH:mm|<执行端>|<主题>。 - 执行端只写
Codex或Claude Code。 - 使用
Asia/Shanghai时间,精确到分钟。旧记录缺少真实时分时保留原日期,不补造时间。
触发决策表
| 用户意图 | 模式 | 处理范围 | 是否写入 |
|---|---|---|---|
| 回顾、查找或继续以前的项目工作 | 自动只读检索 | 项目认知、最近记录及关键词命中条目 | 否 |
明确要求“记录、存档、归档、保存上下文、更新历史”,或使用 /rrr-context-history、/session-log |
显式归档 | 本阶段内容及同主题旧记录 | 是 |
| 工作阶段或会话结束,或对话形成经验证、对项目后续可复用的新信息 | 自动归档 | 本阶段新增且已验证的有效信息 | 有价值才写入 |
| 要求整理、清理、审计历史或重新提炼项目认知 | 显式全量维护 | 完整历史 | 是 |
这里的“处理范围”是:该模式触发后,为完成当前动作需要查看哪些内容 普通问答、进行中的开发、临时探索、未验证猜测、无有效新增信息,以及单纯结束回复均不触发写入。
读取与检索
新会话或恢复上下文
- 读取“项目认知”完整内容。
- 读取最近少量精炼会话记录。
- 根据当前请求提取主题、自然语言别名、类名、文件名、目录名、菜单名和稳定错误文本。
- 使用
rg -n -i搜索.Codex/对话历史.md。 - 只读取命中条目和必要的相邻条目。
不要仅凭历史断言当前事实。历史与当前文件、代码或实际验证冲突时,以当前事实为准,并在下次归档时修正认知。
检索示例
rg -n -i 'RenderDoc|RDC|场景重建' .Codex/对话历史.md
历史文件结构
文件不存在时按以下结构创建;存在旧结构时原地迁移,不丢弃有效记录。
# 对话历史 · <项目名>
> 本文件由 rrr-context-history 维护。
> 项目认知保存当前有效结论;精炼会话记录保存历史过程。
> 默认按需检索旧记录,不要求每次读取全文。
## 项目认知
### 项目速览
### 当前有效的关键决策
### 可复用经验与避坑
### 用户约定与项目约束
## 精炼会话记录(最新在上)
归档流程
1. 确定范围
只总结自上次归档以来的新内容。写入前检查最近记录和同主题命中记录:同一阶段已完整归档则不重复写,信息不完整则补充原记录,新阶段才新增记录。
2. 核对事实
优先使用:
- 用户明确确认;
- 当前文件和代码;
- 实际工具输出与验证结果;
- 本轮最终结论。
不要把中间猜测写成事实。
3. 提取有效信息
优先保留:
- 用户的真实目标;
- 最终结论和选择理由;
- 实际修改或产出;
- 已完成的验证;
- 关键路径、类名、工具名和文件名;
- 仍需接续的事项;
- 可复用的失败原因和适用边界。
默认丢弃:
- 寒暄和重复描述;
- 被后续结论覆盖的中间推导;
- 无结果的低价值尝试;
- 可随时从代码直接读出的普通细节;
- 大段代码和原始日志。
4. 写入精炼会话记录
核心问题使用:
### YYYY-MM-DD HH:mm|<Codex 或 Claude Code>|明确的会话主题
- 关键词:<主题、模块、工具、类名、文件名>
- 核心问题:<本次真正要解决什么>
- 结论与决策:<最终结论及关键原因>
- 实际产出:<修改、文档、命令、验证结果>
- 涉及位置:<关键文件、类、菜单或路径>
- 遗留事项:<没有则省略>
简短但有复用价值的结论使用:
### YYYY-MM-DD HH:mm|<Codex 或 Claude Code>|<主题>
- 关键词:<关键词>
- 核心问题与结论:<核心问题> → <核心结论>
新记录按时间倒序插入“精炼会话记录”。标题和关键词应使用用户未来可能搜索的真实名称。同一分钟内的记录保持写入顺序;旧记录缺少真实时分时保留原日期,不补造时间。
5. 更新项目认知
只有会影响未来判断或行动的内容才提升到认知区:
- 已确认的项目事实;
- 当前有效的技术决策;
- 用户稳定偏好和项目约束;
- 可复用方法、失败条件和避坑规则;
- 项目级验收标准;
- 重要模块和工具的稳定定位。
根据情况执行新增、强化、修正、替代、失效或忽略:
- 当前认知只保留当前有效结论。
- 被替代的真实历史仍留在历史区。
- 纯会话状态不提升为长期认知。
全量历史维护
只在显式维护模式执行:
- 读取完整历史。
- 按主题检查重复和碎片。
- 合并完全重叠的条目。
- 只删除完全重复、空占位、敏感信息,以及从未影响实际工作的错误猜测;判断不清时保留。
- 为真实但过时的历史建立替代关系。
- 从历史补充或修正项目认知。
- 验证清理前后的有效信息没有减少。
全量维护的目的不是缩短文件,而是提升信息密度和可靠性。
Skill 自迭代
默认自动迭代历史内容和项目认知,不自动改写 SKILL.md 的触发范围、安全边界、权限或核心原则。
真实使用反复暴露同一规则问题时,按需创建并读取 references/iteration-notes.md:
# rrr-context-history 迭代记录
## 候选:<问题名称>
- 现象:
- 影响:
- 出现次数:
- 相关历史:a
- 建议修改:
- 状态:候选 / 已确认 / 已应用
普通归档不创建或读取该文件。用户要求优化 Skill,或同一问题重复出现时,才评估候选并修改 SKILL.md。
完成反馈
- 只读检索:说明命中的历史结论及对应 Markdown 位置。
- 归档:简要说明新增或更新了哪条记录、是否更新项目认知。
- 无有效新增:说明未写入,避免制造重复历史。