关于 devin-memory
devin-memory 是为 Devin 及其他 MCP 客户端设计的持久化记忆存储,面向 AI 工程师和开发者。它记录来源和版本、筛查写入内容,并将可疑条目隔离待审,避免未经核验地信任记忆。
主要功能
- 01带来源追溯的记忆条目
- 02写入筛查与隔离
- 03版本管理和冲突跟踪
- 04按工作区和配置范围管理
- 05按有效期与新近度检索
- 06CLI、Python 库和 MCP 服务
适用场景
- 01在 Agent 会话间保存持久事实
- 02追溯记忆对应的会话消息行
- 03使用前审查可疑或注入内容
- 04检索工作区专属上下文
MCP 相关
其 stdio MCP 服务提供 retain、recall、筛查、列表、隔离、验证等记忆操作。写入会经过隔离门控;只有显式启用后才提供提升条目的工具。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
工具
13收录的工具列表 · 更新于 2 周前
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| tags | string | 否 | |
| content | string | 是 | |
| workspace | string | 否 | |
| source_rowid | any | 否 | |
| source_session | string | 否 |
详细介绍
属于 DEVIN 生态系统
方向:构建 · 类型:产品
面向:AI 工程师、开发者、数据科学家
接口:命令行 / Python 库 / MCP 服务 / 服务
路径:AI 工程师 · 第 3/3 步 — 位于devin-orchestrator之后
适用场景
- 任务: 构建
- 产品:
devin-brain - 软件包:
devin-memory - 模式: 混合
- 基础:
devin-internals-spec - 生态系统:
awesome-devin· 注册表:devin-powerups
devin-memory
已更名(2026 年 10 月): 此代码库已从
Icaro0310/devin-memory迁移至Icaro0310/devin-brain— PyPI 软件包、命令行命令和 MCP 服务 名称仍为devin-memory;GitHub 重定向会保留星标、问题和历史记录。
非官方社区项目。 与 Cognition AI 无关,未获其认可或 赞助。“Devin” 是 Cognition AI 的商标。
Linux · 个人版 Windows · 企业版 Windows
属于 awesome-devin 生态系统:精选的 devin-* 工具中心。
Devin 的防投毒记忆存储:持久保存带有来源信息和版本记录的事实, 并设置隔离门槛 — 防止 Agent 记忆被不良会话或注入内容悄然 篡改。
问题
Agent 记忆是一种投毒途径。任何会在会话之间持久化“事实”的工具,都可能被单次糟糕的会话污染——一条注入的指令或粘贴的机密,会在之后的每次会话中变成可信的认知,既没有审核步骤,也无法回答 “这条信息从何而来?”。
既有方案
- Devin memory MCP(通过
.devin/memory/memories.jsonl执行retain/recall/reflect)——仅追加,不做筛查,也不记录会话来源。devin-memory会导出为完全相同的行格式。 - MemGPT / LangChain memory——侧重优化信息召回,而非审计或质疑所存内容的持久化层。
devin-memory 改造了记忆存储的思路,并加入这些工具所不具备的功能:隔离审核关卡,以及可追溯到真实会话行的来源信息。
Devin 原生特性
- **并行使用:**每条记录都可以携带
source_session_id+source_rowid,并通过devin-internals的只读存储对照 Devin 的sessions.db进行审计——memory MCP 无法验证所声称的来源会话(或特定消息行)是否真实存在。隔离审核关卡还会筛查每次写入,识别机密和注入内容的特征。 - **不使用 Devin:**没有
sessions.db,就没有可供审计的会话来源信息——这项额外功能也就不存在。 - 一句话概括: 这是一个会记住每条记忆来源的记忆存储,并会隔离可疑内容,直到人工放行。
安装
需要 Python ≥ 3.10;使用 uv(推荐)或 pipx 安装。
uv tool install 'devin-memory[mcp]'
或使用 pipx(替代方案):
pipx install 'devin-memory[mcp]'
开发环境安装:
pip install -e ".[dev]"
pytest
用法
# Store a fact (screened on write; suspect content lands in quarantine)
devin-memory retain "CI is green on Windows + Linux" --tags ci,status
devin-memory retain "..." --source-session <session-id> --source-rowid <n>
devin-memory retain "..." --workspace /path/to/project # scope to a workspace
devin-memory retain "..." --expires-at 2026-12-31T00:00:00Z # TTL: drops
# out of recall/prime after this instant
# Keyword-ranked recall — returns active, unexpired entries only;
# scores are weighted by recency decay so fresh memories outrank stale ones
devin-memory recall "ci status" [--json] [--limit 5] [--tags a,b]
devin-memory recall "ci status" --include-expired # also surface expired
# Quarantine lane: list, mark an existing entry, or release one
devin-memory quarantine # list with reasons
devin-memory quarantine <id> [--reason manual:x] # mark entry as quarantined
devin-memory quarantine --release <id> # human override -> active
devin-memory quarantine --digest [--json] # audit hash (read-only)
# Contradictions: a conflicting retain is linked, not overwritten
devin-memory conflicts [--json] # (newer, older) pairs; resolve with
# supersede / retract / quarantine <id>
# Mine a session for durable knowledge -> proposed entries (inactive
# until reviewed); extraction is heuristic — see "Limitations"
devin-memory extract <session-id> --sessions-db path/to/sessions.db
devin-memory extract --latest --sessions-db path/to/sessions.db [--auto-approve]
devin-memory list --status proposed # review queue
devin-memory approve <id> # proposed -> active
# Context block for a UserPromptSubmit hook — active entries only,
# filtered by workspace + machine profile, bounded by ~4 chars/token
devin-memory prime [--workspace PATH] [--max-tokens N]
# Versioning and housekeeping
devin-memory supersede <id> "corrected fact" [--expires-at <iso>]
# default: inherit old expiry
devin-memory retract <id>
devin-memory list [--status active|proposed|quarantined|retracted] [--json]
devin-memory compact [--json] # dedup report (dry-run)
devin-memory compact --apply # retract copies + vacuum the file
# Audit an entry's provenance against a real sessions.db (read-only)
devin-memory verify <id> --sessions-db path/to/sessions.db
# Export active memories to a memory-MCP-compatible JSONL
devin-memory export --out memories.jsonl
MCP 服务
devin-memory 也是一个真正的 MCP 服务(stdio)——采用相同的保留/回忆流程,并在每次写入时执行隔离门控,可从 Devin、
Claude Desktop、Cursor 或任何 MCP 客户端调用:
pipx install "devin-memory-mcp"
devin-memory-mcp 控制台脚本也包含在基础版
devin-memory 发行包中,因此直接运行 uv tool install devin-memory(不添加额外项)后,脚本会退出并显示
error: The MCP server needs the 'mcp' extra。恢复步骤请参阅各平台指南中的故障排除部分(Linux、
个人版 Windows、
企业版 Windows)。
客户端配置:
{
"mcpServers": {
"devin-memory": {
"command": "devin-memory-mcp",
"args": ["--db", "/path/to/memory.db"]
}
}
}
同一个 stdio 服务也可注册到其他 MCP 宿主:
Zed —— settings.json 中的 context_servers:
{
"context_servers": {
"devin-memory": {
"command": { "path": "devin-memory-mcp", "args": ["--db", "/path/to/memory.db"] }
}
}
}
JetBrains —— Settings → Tools → AI Assistant → Model Context Protocol → Add:
{ "mcpServers": { "devin-memory": { "command": "devin-memory-mcp", "args": ["--db", "/path/to/memory.db"] } } }
Antigravity —— ~/.gemini/config/mcp_config.json:
{ "mcpServers": { "devin-memory": { "command": "devin-memory-mcp", "args": ["--db", "/path/to/memory.db"] } } }
工具:retain、recall、screen(对门控进行试运行,不写入)、list、
retract、supersede、quarantine、release、approve、conflicts、
prime、verify、extract、compact、quarantine_digest。只有在服务以
DEVIN_MEMORY_MCP_PROMOTE=1 运行时,才会注册 release
和 approve 这两个提升覆盖工具;否则,提升操作仅限人工通过 CLI 执行(devin-memory quarantine --release <id> / devin-memory approve <id>)。同一标志也控制 extract 的 auto_approve 参数;未选择启用时,该参数会被强制关闭,防止 AI 客户端跳过审核步骤。
每个工具都会返回结构化数据或 {"error", "detail"}
对象——不会有异常通过传输层抛出。DEVIN_MEMORY_DB 可替代 --db 使用。
VS Code: adapters/vscode/ 提供一个扩展,可通过编辑器内置的 MCP 支持(服务定义提供程序,VS Code ≥1.102)注册此
服务——其中声明了启动命令、可选的 DEVIN_MEMORY_DB 和工作区
cwd;提升操作的启用选项固定为关闭,因此面向编辑器的服务不会提供提升功能。
adapters/ 是一个独立的 Devin 插件根目录
(adapters/.devin-plugin/plugin.json + adapters/skills/devin-brain/SKILL.md),
通过
devin plugins install Icaro0310/devin-brain#adapters 安装——它包含在
仓库中,而不在 wheel 中。清单通过 uvx --from 'devin-memory[mcp]' devin-memory-mcp 启动服务;提升操作的启用选项(DEVIN_MEMORY_MCP_PROMOTE)始终不会设置,因此面向插件的服务不会提供提升功能。若要使用本地检出版本而非 PyPI,请将本地清单副本指向
uvx --from '.[mcp]' devin-memory-mcp。
从会话中学习:devin-learning
这个配套 CLI 会从 sessions.db 中提取候选经验,并写入可供审核的技能草稿。默认情况下,它不会将草稿安装到工作区。
devin-learning extract --sessions-db path/to/sessions.db --out ./learning-drafts
devin-learning review --out ./learning-drafts
# After reviewing drafts, explicitly allow output to a live skill directory:
devin-learning extract --sessions-db path/to/sessions.db --out .devin/skills --apply
除非指定 --apply,否则 review 只会试运行;review --apply 会将被拒绝的草稿移至 _rejected/。提取器会读取会话内容,因此在审核之前,请将其输出保密。
草稿放入技能树后,catalog-bridge 会将其注册到 devin-skill-catalog 注册表,作为 proposed 条目——从而完成写入→审核→晋升的闭环:
# scans .devin/skills/learned-*/SKILL.md and registers each as `proposed`
devin-learning catalog-bridge .devin/skills
# then the catalog gates and promotes them (its own CLI):
devin-skill-catalog quarantine skill:learned-testing . --apply
devin-skill-catalog promote skill:learned-testing --apply
devin-skill-catalog activate skill:learned-testing --apply
注册表默认位于 <config-dir>/.devin-ecosystem/skill-catalog.json(解析方式与 devin-skill-catalog 相同;DEVIN_CONFIG_DIR 优先)——可使用 --registry 覆盖。条目仅包含元数据(kind、name、state、SKILL.md 的 sha256、origin 目录、空的 history)——绝不会复制草稿正文。此桥接工具具有确定性且幂等:重新扫描未更改的草稿不会产生任何变化;编辑过的草稿会更新 sha256;目录中已从 proposed 状态转移的条目会报告为跳过,并保持不变。--dry-run 会打印计划,但不会写入内容。相关约定请参阅 docs/skill-catalog-bridge.md。
如需生成便于分享的摘要,可使用 weekly-report——这是该闭环的公开接口。它会生成 weekly-YYYY-Www.md,其中仅包含汇总计数(按主题分类的经验、已晋升的 learned-* 技能、待隔离的分类):不包含会话文本、ID 或路径,因此可以安全地提交该文件。它会从 devin-learning-weekly 游标继续;若没有游标,则回退到最近的 --days 天(默认值为 7 天)。
devin-learning weekly-report --sessions-db path/to/sessions.db --out ./docs/learning
记忆状态
active · proposed(已提取,等待 approve)· quarantined(已筛查或手动标记,等待 release)· retracted(已撤回或被取代)。只有 active 条目会显示在 recall/prime/export 中——隔离内容绝不会被打印或召回。
active 条目也可以带有 expires_at(ISO-8601,在 retain/supersede 时设置,或通过 set_expires_at 更改):超过指定时刻后,该条目会从 recall/prime 中排除——只是排除,并非删除,因此仍会显示在 list/export --all 中以供审计(recall --include-expired 可选择不排除过期条目)。没有 expires_at 的条目永不过期。此外,recall 会对关键词评分应用指数衰减的近期性权重(半衰期为 30 天,参数为 ops.RECALL_DECAY_HALF_LIFE_DAYS,可通过 half_life_days 在每次调用时调整)——在结果难分高下时,较新的记忆优先;但明显更强的陈旧匹配仍会排在前面。
冲突、提取与 prime(启发式)
- 冲突 — 如果某条
retain对同一规范化主题给出的指令与现有活动条目相反,则会将其与该条目一同存储,并添加conflicts_with链接(devin-memory conflicts)。该启发式会比较去除停用词后的“主题键”以及肯定/禁止极性——它有意漏掉改写后的矛盾,以避免错误关联事实。 extract会扫描一个会话的message_nodes(通过devin-internals只读访问),寻找持久知识信号——用户更正(“na verdade”“actually”“the right way”)、偏好(“always”“never”“sempre”“nunca”)、已发现的命令(反引号括起的已知工具)和路径。候选内容会像任何写入一样经过筛查:干净的内容进入proposed,可疑的内容进入quarantined。--auto-approve会跳过审核步骤。prime会生成一个精简的# devin-memory: recalled context (heuristic)区块,适用于提示词钩子。通过retain --workspace指定工作区范围的条目,只会在该工作区内 prime;在不同机器配置下写入的条目绝不会 prime(配置默认为corporate——失败时采取关闭策略)。compact会去重:共享完全相同content+workspace+profile的未撤回条目会合并为一个保留条目——状态最活跃的条目优先(active>proposed>quarantined),状态相同时保留最早的行。其他副本会变为retracted(绝不删除——历史记录和原因仍可审计),保留条目会继承与其状态相同的副本标签并集——隔离或待审条目的标签绝不会混入活动条目。默认生成试运行报告(活动条目数 N→M、每组的keep/retractedID、截断的内容 sha256——绝不包含内容);--apply会执行操作并对文件运行VACUUM。quarantine --digest会输出该隔离区的确定性审计指纹:条目数、按分类族划分的原因类别(自由格式的手动原因会合并为manual:*),以及基于排序后的逐条指纹sha256(content)+sorted(reasons)计算的 sha256。指纹以内容为依据,而非行 ID——存放相同隔离事实的两个存储会生成相同摘要,任何成员或原因的变更都会改变摘要。始终只读。
默认存储路径为 ./memory.db——可通过 --db 或 DEVIN_MEMORY_DB 覆盖。这是此工具唯一会写入的存储;Devin 的 sessions.db、acp-messages/*.db 和 state.vscdb 始终只读。
仅与 Devin 配合使用(仅 Devin 模式)
devin-memory 会在本地维护一个带来源跟踪和隔离区的记忆存储(JSONL)——无需外部记忆服务,也不会发起网络调用。两个控制台脚本(devin-memory 和 devin-learning)都只在你的机器上运行。
坦诚说明:写入时筛查属于启发式方法,并非保证——可疑条目会进入隔离区供人工审核,因此请保持这一习惯。
平台支持
记忆存储使用明确指定的本地 SQLite 路径,会话数据库则通过 --sessions-db 提供;不会假设任何特定平台路径。Windows 和 Linux 均受支持,并由 CI 覆盖。
局限性
- 提取基于启发式,默认会标记为待审核。
extract会从一个会话中提取符合关键词特征的句子,放入proposed审核队列——除非执行approve(或使用--auto-approve),否则不会有任何内容生效。如需更完善的经验教训流程,请参阅devin-learning。 - 筛查只是过滤手段,并非万无一失。 基于模式的机密检测和注入启发式都会出现误报(→ 隔离,只需一条命令即可放行)和漏报。也请运行专用扫描工具(gitleaks、
devin-redact)——本工具是对它们的补充。 - 召回排序基于关键词,具有确定性且有文档说明——M1 中不使用嵌入或语义搜索。
- 会记录溯源信息,但不会自行验证。
retain会存储声称的source_session_id/source_rowid;之后,verify会对照真实的sessions.db审计这些信息。恶意用户可以伪造溯源信息——关键在于这些信息可以核查。 - 被隔离的替代版本仍会使旧版本失效。 如果替代版本被隔离,请审核队列(
quarantine --release)。 - PyPI 分发包: CLI 和可选 MCP 扩展使用
devin-memory;独立的 MCP 注册表包为devin-memory-mcp。
适用场景
- 你需要在会话之间保留 Agent 记忆,并希望默认不信任任何内容:每次写入都经过筛查,可疑条目会被隔离,等待人工放行。
- 你需要回答“这条记忆来自哪里?”——条目会携带
source_session_id/source_rowid,可通过verify审计。 - 你需要记忆版本管理——
supersede/retract会保留历史记录,而非静默修改。 - 你希望保持兼容性:
export会按 Devin memory MCP 的memories.jsonl行格式写入数据。
不适用场景
- 你需要语义召回——排序基于关键词,不使用嵌入。
- 你希望筛查能捕获所有问题——这只是一种启发式过滤手段;请同时运行专用扫描工具(gitleaks、devin-redact)。
- 你希望
extract能理解意图——它只匹配关键词信号,并且默认标记为proposed,正是因为启发式判断可能出错。
常见问题
如何防止 Agent 记忆被有问题的会话污染? 使用 devin-memory retain,而不是直接向原始存储追加内容。每次写入都会经过机密和注入特征筛查——可疑条目会被隔离,只有人工运行 quarantine --release <id> 后才会生效。
devin-memory 能证明某条记忆来自真实会话吗? 可以,通过记录的溯源信息实现。retain --source-session <id> --source-rowid <n> 会存储声称的来源;devin-memory verify <id> --sessions-db <path> 会以只读方式对照 Devin 的实际 sessions.db 进行审计——伪造的来源可以核查,不会被默默信任。
devin-memory 会取代 Devin memory MCP 吗? 不会,它是对其的补充。该 MCP 只支持追加且没有筛查功能;devin-memory 增加了隔离、溯源和版本管理,而 devin-memory export --out memories.jsonl 会生成 MCP 读取的精确行格式。
许可证
MIT——详见 LICENSE。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。