§05第一次对话:看着它把你记下来

First Conversation: Watch It Remember You

只用三句话,你就能亲眼看到Hermes的记忆是怎么工作的:它什么时候写记忆、写在哪、关掉重开之后还认不认得你。这一节每一步都可以照着做。

第一句:自我介绍顺带派个活

我第一句话是这么说的:

你好!我叫花叔,是个不会写代码的独立开发者,平时用中文交流。请在当前目录建一个 todo.md,帮我列三条今天的待办:写橙皮书、剪视频、回评论。

注意这句话里其实混了两类信息,一类是关于我的(名字、不写代码、说中文),一类是要它干的活。

第一轮对话。Reasoning框里它自己拆了两件事(先记用户信息、再建文件),然后两个工具几乎同时执行:🧠 memory写入一条「User is 花叔……communicates in Chinese」,✍️ write建了todo.md,下面直接给出diff。qwen3.7-plus,v0.22.2。

它在动手建文件之前,先调了一次memory工具,把「我是谁」写了进去。我没让它记,它自己判断这是值得长期留着的事实。

还有一个小细节:它写文件之后把diff直接贴在了终端里,加了哪几行直接能看到,不用另外去打开文件核对。

第二句:给它一个偏好

接着我挑了个毛病:

以后给我列待办,统一用「□」开头,不要用 markdown 的复选框。另外每条后面用括号估一个耗时。第二轮。它先读了todo.md,再用patch把三行「- [ ]」改成「□写橙皮书 (2h)」这样的格式,回复里说「以后列待办都用□开头并加上预估耗时」。

屏幕上能看到读文件、改文件,但「以后」这两个字它到底记没记,光看回复是不知道的。所以我去翻了它的记忆文件。

查看记忆文件

记忆就是两个markdown文件,放在~/.hermes/memories/下面:

两轮对话之后的记忆文件。USER.md里是关于我的那一条,MEMORY.md里是「待办格式偏好:用□代替markdown复选框,每条后面括号写预估时间」。两个文件旁边的 .lock 是写入时防止并发冲突用的锁文件。

第二轮那条偏好也记进去了,只是工具调用那几行在屏幕上滚过去了,我是翻日志(~/.hermes/logs/agent.log )才确认它在那一轮确实调了一次memory。

USER.md记关于你的事实,MEMORY.md记偏好和环境里的讲究。两个文件都有字数上限(MEMORY.md约2200字符,USER.md约1375字符),满了它得自己删旧的。为什么要这么抠,§12会细讲。

核心建议

这两个文件你可以直接用编辑器打开改。它记错了、记了你不想让它记的东西,删掉那一行就行。想让每次写入都先问你,可以打开配置里的memory.write_approval,之后它要写记忆会先弹确认。

关掉,重新开

输入/exit退出。退出时它会告诉你这次会话的编号和恢复命令:

退出时的摘要:用hermes --resume 会话编号或hermes -c "会话标题"都能接着聊。标题是它自己起的。

不过这次我不接着聊。我新开一个会话(直接再敲hermes ),说:

帮我把明天的待办也列一下:发视频、写周报。直接回复给我就行,不用建文件。全新的会话,没有任何上一轮的聊天记录。Reasoning里它写着「Looking at the memory, the todo list format preference is to use「□」……」,输出是「□发视频(~30min)」「□写周报(~45min)」。

记忆文件每次启动都会注入,所以它一上来就知道要用□、要估时间。

说实话,这个体验我挺喜欢的。用Claude Code的时候我也会往CLAUDE.md里写这类偏好,但那是我自己去写;这里是我随口一说,它自己记下来。

两个提醒

第一,它记什么是它自己判断的,不保证每次都记。我这两轮里,名字和「以后都……」这种长期偏好它都记了。真要它记住某件事,直接说「记住:……」最稳。

第二,记忆是给模型看的,它会影响每一次回答。哪天你发现它总在某件事上犯同样的错,先去翻这两个文件,很可能是之前记了一条过时的东西。§11专门讲了Hermes怎么防止它「学歪」,以及它被要求哪些东西坚决不要记。