
MemoryCustodian
MemoryCustodian 通过将关键上下文存储为纯 Markdown,并通过清单仅加载与任务相关的部分,为编码代理提供持久的、存储库原生的项目内存,从而在会话和团队之间实现最小的提示开销。
https://github.com/waittim/MemoryCustodian?ref=producthunt&utm_source=aipure

产品信息
更新于:2026年07月30日
什么是 MemoryCustodian
MemoryCustodian 是一个轻量级的 AI 编码代理“项目记忆”系统,可帮助它们在会话中保留重要内容——决策、约束、被拒绝的方法和当前项目形态——而无需依赖聊天历史记录或臃肿的指令提示。它将持久上下文作为可审查、可比较的 Markdown 保存在您的存储库中(通常在 `docs/memory/` 下),并提供一个快速、离线优先的 Python(仅限标准库)CLI 以及代理集成(例如,Codex、Claude Code、Gemini 风格的技能)。目标是使项目知识在代理之间可移植,并像代码一样易于人类审计,同时保持运行时上下文小而有意。
MemoryCustodian 的主要功能
MemoryCustodian 是一个离线优先的“项目记忆”系统,用于编码代理。它将持久上下文(决策、约束、被拒绝的方法和当前项目形态)以纯 Markdown 格式存储在您的仓库中。它不依赖粘贴大量提示或聊天历史记录,而是使用清单优先的工作流,仅将与任务相关的记忆文件加载到代理的上下文包中,从而保持会话轻量化,同时使知识可检查、可比较、可在代理/团队之间移植,并通过一个确定性的、仅限标准库的 Python CLI 进行维护,该 CLI 具有受保护的预览优先修改(例如,压缩/遗忘/迁移)。
仓库原生 Markdown 记忆: 将持久项目知识存储在 `docs/memory/` 下,以纯 Markdown 格式存储,以便人类可以像代码一样审查、比较、提交和回滚记忆——无需向量数据库、RAG 索引或云依赖。
清单优先选择性加载: 代理读取 `manifest.md`,然后读取 `brief.md`,并且只加载与当前任务(规划/实施/工件)相关的特定文件,从而最大限度地减少提示膨胀,同时保留关键上下文。
跨平台的精简代理引导: 生成小型引导文件(例如,`AGENTS.md`、`CLAUDE.md`、`GEMINI.md`),这些文件将代理指向清单,而不是嵌入大型指令块,支持 Codex、Claude Code、Gemini 风格代理和通用 shell 使用。
具有受保护维护的确定性 CLI: 提供 `init/status/check/read/add/enable/forget/compact/migrate` 命令;维护操作是预览优先和结构保留的,在应用更改之前进行预算检查和安全修改计划。
范围化、可选的记忆模块: 将可选知识(例如,`rules/`、`profiles/`、`areas/`、`archive/`)保留在默认上下文之外,直到清单明确启用,从而允许子系统特定记忆而不会污染每个任务。
隐私安全的遗忘和归档控制: 支持带有墓碑和编辑保护的软/硬遗忘和清除流程,以及受控归档(例如,最旧决策归档),这需要明确确认以避免意外的语义丢失。
MemoryCustodian 的使用场景
维护长期代码库的软件团队: 捕获架构决策、约束和被拒绝的方法,以便新的代理会话(和新的工程师)不会重新讨论先前的选择,从而减少跨冲刺的重复调试和返工。
受监管或离线环境: 用于金融、医疗保健、国防或气隙企业设置,在这些设置中不允许使用云记忆服务;仅限标准库的 CLI 和本地 Markdown 存储支持完全离线的工作流。
多代理/工具互操作性: 标准化不同代理主机(Codex、Claude Code、Gemini 风格代理)之间的项目记忆,以便团队可以在不丢失上下文或重建提示的情况下切换工具。
咨询和机构交接: 交付包含可审计、仓库内记忆包(简报/决策/约束/禁止使用)的客户项目,该记忆包为未来的维护者保留了理由和边界。
复杂的单体仓库和子系统所有权: 使用 `areas/` 和清单路由仅加载与领域相关的记忆(前端、同步、基础设施等),帮助代理高效工作,而无需将整个组织的上下文拖入每个任务中。
优点
可移植和可审计:记忆是仓库中的纯 Markdown,易于审查、比较和版本控制。
低开销上下文:清单驱动的选择性加载避免了提示膨胀,并保持代理会话高效。
离线优先和最小依赖:核心 CLI 仅限 Python 标准库,旨在无需网络服务即可工作。
缺点
需要管理纪律:生成的 `brief.md` 骨架必须在可信赖之前从权威来源进行管理。
不是自动语义检索:设计上避免了嵌入/RAG,因此相关性取决于良好的清单结构和人类/代理的写作质量。
维护操作可能保守:预览优先的安全措施和约束(例如,广泛匹配保护)可能会为期望完全自动清理的用户增加工作流步骤。
如何使用 MemoryCustodian
1) 安装 MemoryCustodian(选择与您的代理/工作流匹配的路径): 选择一种安装方法:
- 要求您的编码代理从存储库安装技能:https://github.com/waittim/MemoryCustodian
- Codex(本地市场):从检出运行 `codex plugin marketplace add .`,然后运行 `codex plugin add memory-custodian@memory-custodian-dev`。
- Claude Code(插件):对于本地测试,运行 `claude --plugin-dir .`,或使用 `./install.sh claude` 安装到个人技能中。
- Gemini 风格的代理:使用 `./install.sh gemini` 或 `gemini skills link ./skills/memory-custodian` 安装。
- CLI/源检出:通过 `scripts/memory-custodian ...` 从存储库运行,或使用 `python3 -m pip install -e .` 可编辑安装以获取 `memory-custodian` 命令。
2) 在项目中初始化 MemoryCustodian(每个存储库一次): 为每个目标项目运行一次初始化:
- 如果作为控制台脚本安装:`memory-custodian init --project-root /path/to/project --agent all`
- 从源检出:`scripts/memory-custodian init --project-root /path/to/project --agent all`
使用 `--agent codex`、`--agent claude`、`--agent gemini` 或 `--agent all` 来生成您的代理读取的精简引导文件。
3) 了解初始化创建了什么(内存所在的位置): 初始化在 `docs/memory/` 下创建默认的持久内存集:
- `manifest.md`(路由要加载的内容)
- `brief.md`(当前项目形态)
- `decisions.md`(关键决策)
- `constraints.md`(硬性要求)
- `do-not-use.md`(被拒绝的路径/墓碑)
- `inbox.md`(暂存区)
平台引导文件(例如,`AGENTS.md`、`CLAUDE.md`、`GEMINI.md`)保持精简并指向 `docs/memory/`。
4) 在依赖之前整理生成的摘要: 在 `init` 之后,`brief.md` 以带有 TODO 的脚手架开始。在将内存视为就绪之前,从权威项目源(README、代码、文档)填充它。使用 `memory-custodian status --project-root /path/to/project`(或 `scripts/memory-custodian status ...`)查看摘要是否仍未整理;`status` 和 `check` 报告未整理的摘要。
5) 为任务加载正确的内存(清单优先读取): 代理的预期工作流程是:
1) 读取 `docs/memory/manifest.md`。
2) 读取 `docs/memory/brief.md`。
3) 仅加载清单标记为与当前任务相关的任务相关文件。
对于手动检查,生成一个上下文包:
- `memory-custodian read --project-root /path/to/project --task planning`
- `memory-custodian read --project-root /path/to/project --task implementation`
- `memory-custodian read --project-root /path/to/project --task artifact`
6) 当某些内容应该在当前聊天中保留时添加持久内存: 使用 CLI 记录决策/约束/偏好/被拒绝的方法:
- `memory-custodian add "我们选择了清单优先加载。" --type decision`
- `memory-custodian add "持久化同步重试退避。" --type decision --area sync --reason "在启动之间保持重试有界。"`
保持决策条目简短(该工具强制执行令牌指南,并拒绝过长的写入,除非您明确允许长条目)。
7) 仅在相关时启用可选内存模块: 可选模块(例如,规则、配置文件、区域)是选择加入的,除非通过清单启用和路由,否则不会加载。根据需要启用它们:
- `memory-custodian enable preferences`
- `memory-custodian enable rules/output`
- `memory-custodian enable profile/git`
- `memory-custodian enable area/frontend`
启用永远不会覆盖现有的模块文件。
8) 使用“do-not-use”保留被拒绝的方法并避免回归: 当您有意拒绝某种方法(例如,存储后端或架构)时,将其记录在 `docs/memory/do-not-use.md` 中(通过编辑或适当的添加/遗忘工作流),以便未来的会话不会重新提出它。
9) 定期检查健康状况和协议兼容性: 运行确定性验证以确保结构、预算和协议元数据正确:
- `memory-custodian check --project-root /path/to/project`
使用 `memory-custodian status` 获取快速概览并检测未整理的摘要。
10) 压缩和维护内存(预览优先,安全修改): 使用维护命令保持内存小而最新:
- `memory-custodian compact --project-root /path/to/project`
压缩受到保护且预览优先;仅在审查计划后才应用更改。收件箱压缩是保守的(例如,精确重复的顶级项目符号单元删除和墓碑过滤),并期望代理/人类进行语义提升到决策/约束中。
11) 安全地忘记过时的信息(预览优先): 使用预览优先的遗忘功能删除或编辑过时的主题:
- 预览:`memory-custodian forget "旧部署说明" --mode soft --project-root /path/to/project`
- 审查后应用:`memory-custodian forget "旧部署说明" --mode soft --apply --project-root /path/to/project`
广泛匹配需要明确确认(例如,`--allow-broad-match`)。某些情况需要手动重写;该工具将拒绝不安全的整体删除。
12) 在需要时修复或替换现有设置: 如果文件丢失或元数据需要更新而无需覆盖已整理的内容:
- 修复:`memory-custodian init --project-root /path/to/project --repair`
如果您有意进行完全替换,请使用预览优先替换,并且仅在正确时才应用:
- `memory-custodian init --project-root /path/to/project --replace-existing`
- 然后仅当列出的文件应该被替换时才添加 `--apply`。
13) 当工具更新时迁移协议/项目内存版本: 当 `check` 报告旧的或缺失的协议元数据时,离线迁移项目清单:
- 预览:`memory-custodian migrate --project-root /path/to/project`
- 审查后应用:`memory-custodian migrate --apply --project-root /path/to/project`
14) 在 Windows 与源检出上使用正确的调用: 在 Windows 上,安装控制台命令并使用 `memory-custodian ...`。在任何平台上的存储库检出中,您可以运行 `scripts/memory-custodian ...` 作为包装器。
MemoryCustodian 常见问题
MemoryCustodian 是一个工具,它通过将决策、约束、被拒绝的想法和项目上下文作为纯 Markdown 存储在您的仓库中,然后仅加载当前任务所需的部分,从而为编码代理提供持久的“项目记忆”。











