psy-core:为 AI Agent 内存操作加上防篡改审计日志
会「记住事情」的 AI agent 才真正有用。它能记住你的偏好、发现你反复问的问题模式、越用越顺手。但它也会越用越难调试。当你的 agent 莫名开始叫你「兄弟」,你根本不知道是哪次对话教会它的。当一个 skill 悄悄变坏了,你翻不到是哪个 patch 搞错的。
psy-core 是一个 TypeScript 库,夹在 agent 和它的 memory 系统之间,用一条加密哈希链记录每一次写入。它不替换你的 memory provider,它只是给每个写入操作打收据。
目前 8 个 GitHub star,2026 年 4 月 27 日首次提交,是个非常年轻的项目。但它解决的问题,大多数 agent 构建者才刚开始意识到:能自我改进的 agent,也能自我腐化。没有收据,你连排查的起点都找不到。
它抓什么
psy-core 为每次 memory 写入记录成对的事件。调用前写一条 intent(意图)行——agent 打算干什么。调用后写一条 result(结果)行——实际发生了啥。每一行被规范化后加入本地 SQLite 哈希链,并由 HMAC 密封。
适配器覆盖七种常见 memory 表面(下表是英文技术术语,保留原样避免歧义):
| 适配器 | 包裹的对象 |
|---|---|
| Anthropic Memory | @anthropic-ai/sdk memory tool |
| Letta | @letta-ai/letta-client blocks |
| Mastra | @mastra/core memory 类 |
| Mem0 | mem0ai SDK 调用 |
| LangChain | 对话历史消息 |
| LangGraph | Checkpointers |
| Hermes Agent | memory 和 skill_manage 工具 |
其中 Hermes 适配器(psy-core-hermes,Python 包,已在 PyPI 发布)对我们的体系最重要。它监听 ~/.hermes/memories/ 和 ~/.hermes/skills/ 的文件变化,把每一次写入转化成标准 JSONL envelope,送入跟 Node 适配器相同的 psy ingest 管道。所有事件落在同一条链上,用同一个 CLI 做验证。
哈希链怎么工作
设计很简单。每一行包含规范化的 JSON payload 加上前一行哈希的引用。一旦写入,任何编辑、删除或重排序都会改变哈希,链条就断了。链尾还有一个独立的密封头指针,由本地密钥做 HMAC 签名。
运行 psy verify --all 做三件事:检查活跃数据库、检查轮转的归档文件、核对密封头。如果三者一致,日志没被动过。
孤立行本身就是信号。如果 agent 写了 intent 但在写完 result 之前崩了,验证会暴露这条孤立行。你能看到 agent 试图做什么但失败了。从静默失败变成了可见失败。
不管什么
psy-core 不是通用可观测层。它只管持久化 memory 路径:MEMORY.md 写入、USER.md 更新、skill_manage 调用。不抓 session_search(只读)、todo(任务状态)、会话摘要和 gateway 传输事件。外部的 MemoryProvider 工具——Honcho、RetainDB 之类——都不在范围内。
这条边界是刻意的。psy-core-hermes 只想当 Hermes 原生学习循环的审计见证人。如果你的应用在 TypeScript 侧还直接用 Mem0 或 Letta,那就用根包 psyche-core 里的专用 Node 适配器。
安装
三条命令:
pip install psy-core-hermes
psy-core-hermes trust-layer --actor-id you@example.com
hermes
trust-layer 命令写插件配置到 ~/.hermes/config.yaml,安装本地 skill,跑诊断,做链验证。然后重启 Hermes 就开始审计了。
另一个终端看实时事件:
psy tail
按身份查询:
psy query --actor you@example.com
按 churn 排序 skill 来发现哪些被反复 patch:
psy-core-hermes skill-stats
竞品地图
这是极窄赛道。在 GitHub 上搜 "agent memory audit tamper-evident" 只返回一个项目——就是 psy-core。有相邻思路的项目:链上上下文锚定(z1labs/mcp-contextstore-contract,5 星)、确定性监督内核,但都不以同样的验证模型覆盖同样的 memory 表面。
最接近竞争对手的是 Hermes 自带的 session search。但 session search 告诉你 agent 说了什么。psy-core 告诉你 agent 往持久化状态写了什么。两者互补,不是替代。
需要留意的
psy-core 依赖 Node.js。psy CLI 是发布到 npm 的 Node 二进制。纯 Python 环境下,Hermes 适配器会回退到 npx -y psy-core@latest psy ingest,能用但每次启动有额外延迟。
项目才活了八天。代码干净——strict TypeScript,22 个测试文件,跨语言 E2E CI——但经不起任何真实世界的压力测试。在快速 skill 编辑和文件监听竞态条件上很可能有边界情况。
payload capture 默认关闭。不加开关你不会在审计日志里看到每次写入的完整内容。这是合理的隐私默认,但也意味着不带 payload 的 psy tail 只能看到时间戳和操作类型,看不到改了啥。
结论
对会持久化状态还能自我修改的 agent——这正是 Hermes 的核心价值——审计日志不是锦上添花,是规模化调试的基本条件。psy-core 是这个品类里唯一提供原生 Hermes 适配器的工具。代码扎实,设计诚实,清楚说了自己管什么不管什么。
两个改进方向:出个 Python 原生的审计 store 去掉 Node 依赖;默认开 payload 加可配置脱敏。在此之前,它已经能用。我装上了。
Sources: psy-core GitHub, psy-core-hermes PyPI, psy-core npm