Congrats on the launch. Recording rejected approaches is the part most memory systems skip entirely, and it might be the highest value item on your list, because without it an agent will cheerfully re-propose the thing you already ruled out last month.
The manifest is the interesting design call. How do you handle relevance drifting, where a file was genuinely relevant when written but is not for the task at hand, and the agent cannot tell the difference until it has already loaded it?
Plain Markdown in the repo is the right default either way, since it means a human can actually audit what the agent believes about the project.
我做了MemoryCustodian,因为编码智能体越来越强大,但每个新会话还是会忘记项目为什么会是现在的样子。
重要的决策、约束、被否决的方案和反复修正往往只留在旧对话里——或者被复制到越来越庞大的指令文件中。
MemoryCustodian用了另一种方式:将持久项目记忆以纯Markdown的形式存在仓库里。
一个小的manifest告诉智能体哪些记忆文件与当前任务相关,这样记忆可以增长,而不用强迫每个会话加载整个项目历史。
不同之处在于:repo原生且纯文本——没有不透明的记忆数据库;通过普通的Git工作流可审查、可版本化、可共享;选择性加载,而不是把所有记忆注入每个prompt;显式支持记忆的更新、纠正和安全遗忘;兼容Codex、Claude Code、Gemini和通用编码智能体工作流;免费、开源、本地优先。
仓库里还包含一个可复现的NightNotes演示,展示新智能体会话如何恢复已有的架构决策并避开已经被否决的实现路径。
我尤其希望得到关于记忆结构、跨智能体工作流以及安装体验是否简单到能用在真实项目上的反馈。
谢谢你们来瞧瞧!
这之所以重要,是因为被否决的方案记录正是敏感材料聚集的地方。比如"我们不能用X因为和Y有合同"或"这个被限流因为供应商Z给我们封顶N"。在私有repo、员工之间还好,但一旦合同工clone了它,或者项目开源了,就没那么好了。
不是反对repo原生,我仍然认为这个权衡在你的方向上成立。只是安全遗忘可能需要在文档里加一行说明它覆盖了什么、没覆盖什么……
The manifest is the interesting design call. How do you handle relevance drifting, where a file was genuinely relevant when written but is not for the task at hand, and the agent cannot tell the difference until it has already loaded it?
Plain Markdown in the repo is the right default either way, since it means a human can actually audit what the agent believes about the project.