本机认知沉淀与演化
初始化与路径边界
- 用宿主原生方式展开当前用户主目录,解析目标根及现有祖先的真实路径,将
<真实主目录>/.agent-knowledge/作为唯一数据根;根不存在则创建后重新解析真实根,不改用其他目录。 - 根
README.md缺失时,在根目录排他创建本会话唯一.tmp,写入assets/root-readme-template.md,完成 UTF-8 与固定结构契约校验后同卷原子无覆盖改名,并读回最终文件;只清理能证明由本会话创建的 tmp。README 已存在则只读校验,不可读、格式错误或契约不符时停止,不覆盖,也不按其中任意路径建目录。 - README 通过后固定补齐
knowledge/{candidates,active,archive}、experience/{candidates,active,archive}六个目录。根maintenance.md缺失时复用同一首次创建流程,改写入assets/maintenance-template.md并校验维护游标契约;已存在则只读校验,无效时停止且不覆盖。状态映射固定为candidate→candidates、active→active、archived→archive。 - 每次写、移或删前重新解析真实数据根、目标及现有祖先;任一 symlink、junction 或 reparse point 解析到真实根外时停止并报告。
- README 是数据契约,maintenance 只保存维护游标,两者都不是认知条目。不访问网络,不启动后台任务、监控或定时器,不修改任何 Skill 包。
五步判定
除用户明确删除指定条目外,每次准备新建、晋升或纠正时按顺序回答,任一步为“否”就不写:
- 是否有学习信号:用户明确要求记住或纠正;意外失败形成可复用修复;知识缺口被补齐;发现更好的重复性做法;重要工作完成或收到反馈;用户明确指定本机文件或目录。
- 是否稳定可复用:结论应能跨会话复用,证据、适用范围和不适用条件明确。沉默、寒暄、一次性指令、假设、普通成功、原始日志、完整会话和易变快照均不学习。
- 是否通过敏感过滤:去除密码、token、cookie、私钥、未脱敏个人信息、客户原文和不必要长摘录;去除后无法保留有效结论就不写。
- 归入哪里:事实、定义、稳定约束归
knowledge;做法、适用条件、失败护栏归experience。用户明确确认或纠正可设为active;自我推断和文件蒸馏设为candidate。候选仅在用户明确确认或一次独立 ground-truth 读回验证后晋升,重复出现本身不算验证。 - 是否重复或冲突:按语义、scope 和 source 搜索对应类型的三个状态目录。相同活动条目不新建、不刷新日期;相同候选获确认或独立验证时按下文晋升;与活动条目冲突但尚未确认时保留旧条目,将新说法写为候选。
一个条目只表达一个可复用结论。scope 只使用 global、domain:<name>、workspace:<name> 或 customer:<name>,选择已明确的最窄范围;范围影响适用性且不明确时先询问。易变信息只沉淀稳定约束、权威来源和回查方法,不把时间点值晋升为长期事实。
写入与读回
- 写前逐级检查数据根、README、目标目录和模板的路径、读写权限;确认目标路径位于固定数据根内且尚不存在。
- 知识 id 使用
k-YYYYMMDD-HHmmss-<slug>,经验 id 使用e-YYYYMMDD-HHmmss-<slug>;文件名冲突时追加-2、-3。复制对应模板:- knowledge:
assets/knowledge-template.md - experience:
assets/experience-template.md
- knowledge:
- 每条只保留七个必填 frontmatter 字段
id、title、scope、tags、status、learned_at、source和非空正文;仅晋升或确认纠正时允许增加supersedes。 - 写最终
.md前,在同一目标目录排他创建本会话唯一.tmp,完整写入并按 UTF-8 校验七字段、正文、计划中的最终文件名 id、目标目录与status;再同卷原子改名且禁止覆盖,随后读回最终文件。目标名已存在就重新生成 id,不覆盖。 - 权限、磁盘、路径、写入、改名或读回失败时立即停止本批,原样报告;不换目录、不联网、不更新时间。只清理能证明由本会话创建的
.tmp;此前已校验文件和已落位的最终文件保持不动。
该失败规则同样适用于首次初始化、目录补齐、晋升、纠正、归档和每周维护,不因操作类型改变数据根或放宽读回要求。
source 只使用 human-confirmation、conversation:<opaque-ref>、file:<path>、url:<url>、command-readback:<opaque-ref> 或 external-record:<opaque-ref>;external-record 只是来源引用,不解析其内部结构或据此赋权。
状态迁移与纠正
- 任何涉及已有条目状态变化或移动的操作,目标版本也按同目录
.tmp、校验、原子改名、最终读回的顺序写入,再移除来源;绝不先删除或覆盖来源,任何失败都至少保留一份已读回有效的版本。 - 目标版本写入或校验失败时,只清理能证明由本会话创建的
.tmp,来源保持可用并停止本批。目标版本校验成功但来源移除失败时,保留两份,报告原始错误和可恢复中间态,不更新时间、不继续本批;后续重试只清理已核对的重复来源。 - 晋升时先用新 id 写出并完整校验 active;新 active 用
supersedes指向原 candidate id,source指向用户确认或独立 ground-truth 读回证据,再按状态迁移规则归档原 candidate 以保留原source。归档失败时保留 active 与 candidate,报告可恢复中间态且不更新时间。 - 确认纠正时,先写出并校验带
supersedes的新active条目,再按上述顺序归档旧active。旧条目归档或来源移除失败时,新旧两个活动条目都保留,显式报告冲突和待重试清理;绝不先丢旧基线。 - 用户明确要求删除指定条目时,直接按授权删除并报告结果;删除失败时保留原文件,原样报告错误,不改用状态迁移替代删除。
从本机文件蒸馏
- “索引”只表示本次只读枚举候选文件,不创建长期全文索引。仅处理用户明确指定的文件或目录与已确认 scope;未指定路径时不扫描,绝不扫描整机。
- 解析并校验指定根;递归时不跟随指向范围外的符号链接、junction 或 reparse point。先列处理清单。
- 默认跳过隐藏或系统内容、版本控制目录、依赖、缓存、构建产物、二进制、过大、不可读及疑似敏感文件,并记录原因;不设置任意固定大小阈值。
- 原文件保持只读,不移动、改写或删除,不复制全文或长摘录,不联网补充。每个文件可蒸馏 0..N 个原子条目;没有可复用结论就不产出。
- 去除目录结构、版本日期、实施状态和重复解释。必须共同理解的高度相关结论合并为一条,仅在可独立复用时拆分,禁止按段落机械产出。
- 文件蒸馏统一使用
file:<path>,默认写为candidate;“导入这个目录”不等于确认每条结论。与活动条目冲突时保留旧条目,新内容写为候选。 - 完成后报告指定范围,发现、读取、跳过及其原因,生成、去重、冲突条目数和生成路径。
- 不引入 OCR、Office/PDF 专用解析、hash 数据库、自动同步或长期索引。
纠正、反思与维护
- 确认纠正:按“状态迁移与纠正”先校验新活动条目,再复制、校验并移除旧活动来源。未确认冲突只写候选,不覆盖活动条目。
- 自然反思:在重要工作或修复完成、收到反馈或纠正后回答三问:哪里意外困难或反复?得到什么可复用结论及适用范围?证据是什么,应归知识还是经验、候选还是活动?无法形成有证据、可复用且范围明确的结论就不写。
- 每周补检:仅当当前会话已因其他学习信号自然触发本 Skill 时读取
maintenance.md。有效日期距当前本地日期不足 7 天就跳过;模板值、无效日期或已满 7 天时,可全库只读诊断并报告重复、待确认和过时建议。自动写入只限与当前会话已有明确验证或纠正证据直接相关的条目;无关候选或活动条目只列建议,不合并、晋升或归档。只读诊断完整成功且所有相关写入成功后才更新last_reviewed_at;任何读取或写入失败都不更新。
删除与报告
- 仅在用户明确要求删除时删除其指定条目;不要把维护、纠正或归档扩大为删除授权。
- 完成后报告条目路径、类型、状态以及新建、晋升、纠正、归档或删除动作;批处理还要报告成功数、跳过数、冲突数和任何原始错误。
极简示例
- 该学:一个命令失败并形成可复用修复,先写候选 experience;经用户确认或一次独立 ground-truth 读回验证后,按晋升流程生成活动条目。
- 不该学:用户说“今天临时换个端口”,或一次构建普通成功但没有新方法;不写。
- 冲突:已有活动条目主张做法 A,新文件主张做法 B 但尚未确认;保留 A,将 B 写为 candidate。用户明确确认 B 后再归档 A,并让新活动条目 supersedes A。
