💡阅读指南

前面说过 Hermes 会用文件记住用户的信息,也能翻查历史对话。但每次启动时,Hermes 还会自动读另外几份文件,它们决定了它的身份、对用户的了解程度、以及到了项目里该做什么。

读完会知道:Hermes 启动时自动加载了哪些文件、各管什么用途、加载优先级怎么定。

5.1 三层上下文

Hermes 每次启动会从三个层面读取配置:

第一层:身份。 放在 ~/.hermes/SOUL.md。决定了 Hermes 是什么样的人。这一层全局生效,不分项目。

第二层:记忆。 放在 ~/.hermes/memories/ 目录下,分 MEMORY.md 和 USER.md 两个文件。和 SOUL.md 不同,这两个文件不需要用户手动编辑——Hermes 在对话中自动管理内容,该记的记,该清的清。

第三层:项目。 这一层与当前工作目录绑定。你在哪个目录启动 Hermes,它就去找那个目录下的项目配置文件。

5.2 第一层:身份(SOUL.md)

放在 ~/.hermes/SOUL.md。这是你亲手写的,一句话或一段描述,决定了 Hermes 的说话腔调和行事风格。每次对话都会注入到系统提示词的第一个槽位。

如果这个文件不存在,Hermes 会用内置的默认身份。

5.3 第二层:记忆(MEMORY.md 与 USER.md)

两个文件都在 ~/.hermes/memories/ 下。MEMORY.md 存项目的环境事实和技术约定,USER.md 存用户的偏好和沟通习惯。容量上限分别是 2,200 和 1,375 字符。

和 SOUL.md 最大的区别:这两个文件不是用户写的,是 Hermes 自己在对话中通过 memory 工具往里添加、替换、删除内容。每次会话启动时会拍一张快照注入提示词,会话期间即使内容变了也要等下次启动才更新。

5.4 第三层:项目配置

这一层只在终端里启动时生效。Hermes 会自动扫描当前目录,按优先顺序查找以下文件,只加载最先找到的那一个

code
┌──────────────────────────┐
│ .hermes.md / HERMES.md   │  ← 最高
├──────────────────────────┤
│ AGENTS.md                │
├──────────────────────────┤
│ CLAUDE.md                │
├──────────────────────────┤
│ .cursorrules             │
├──────────────────────────┤
│ .cursor/rules/*.mdc      │  ← 最低
└──────────────────────────┘
  • .hermes.md / HERMES.md:Hermes 原生项目配置,优先级最高。
  • AGENTS.md:Hermes 原生格式,也兼容其他 Agent 工具。支持子目录递进加载。
  • CLAUDE.md:兼容 Claude Code 的项目说明。
  • .cursorrules.cursor/rules/*.mdc:兼容 Cursor IDE 的规则文件。

如果同一个目录里同时存在多个,只加载排在最前面的那一个,后面的跳过。各个文件的用途不同,效果一样,都是告诉 Hermes 这个项目有什么规矩。选一个用就行。

举个例子。如果项目根目录有个 .hermes.md,内容是:

code
这个 Web 项目用 Python 3.12 + FastAPI。
后端入口在 app/main.py。
测试用 pytest,运行前激活 .venv。
编码风格遵循 ruff,commit 前必须通过 lint。

之后在这个目录启动 Hermes,这段内容会自动加入系统提示词。跟 MEMORY.md 一样,它是每一轮对话都带着的上下文——不是问到了才去找,而是每次跟大模型交互时都作为背景知识一起发送。你不需要每次开场先交代一遍技术栈和目录结构。

如果项目里没有 .hermes.md,但有 AGENTS.md,就用它。如果两个都没有,但有 CLAUDE.md,也一样能被识别。选一个你最顺手的格式就好。

5.5 一个场景

假设你桌面上有两个项目:

  • blog/:写公众号和小红书文章,文章放在 content/ 目录,配图放在 content/images/,每次发布前需要导出成排版好的 HTML。
  • api/:Python FastAPI 后端,入口在 app/main.py,测试用 pytest,代码用 ruff 格式化。

没有项目配置的时候,每次切到 blog/ 跑 Hermes,都要先交代一遍场景:「帮我写一篇公众号文章,风格参照之前的那篇,配图放 content/images/ 里。」切到 api/ 又得再说一遍。

在每个项目根目录放一个 .hermes.md,问题就解决了:

blog/.hermes.md

code
公众号和小红书内容项目。
文章放 content/,配图放 content/images/。
发布前需要把 Markdown 转成排好版的 HTML。
写作风格参考之前公众号的风格。

api/.hermes.md

code
Python 3.12 + FastAPI 项目。
后端入口 app/main.py,开发服务器 `uvicorn app.main:app --reload`。
测试用 pytest,运行前激活 .venv。
代码风格用 ruff 检查。

之后在 blog/ 目录下启动 Hermes,说「帮我写一篇新技术趋势的文章」,它自动知道文章放 content/、配图路径、发布前要转 HTML。在 api/ 下说「帮我加一个用户注册接口」,它直接去 app/main.py 里找路由定义。不需要每次切换项目都从头交代环境。

5.6 全景回顾

把所有加载项汇总到一起:

层次 文件 位置 由谁管理 作用域
身份 SOUL.md ~/.hermes/SOUL.md 用户 全局
记忆 MEMORY.md ~/.hermes/memories/ Hermes 自动 全局
记忆 USER.md ~/.hermes/memories/ Hermes 自动 全局
项目 .hermes.md 项目目录(找 git 根) 用户 当前项目
项目 AGENTS.md 项目目录 + 子目录 用户 当前项目
项目 CLAUDE.md 项目目录 用户 当前项目
项目 .cursorrules 项目目录 用户 当前项目

SOUL.md、MEMORY.md、USER.md 是全局的,每次会话都加载。项目配置文件按目录发现,只加载一种。所有上下文文件加起来不超过 20,000 字符,超出部分自动截断。

5.7 ■ 学点英语

中文 English 音标 说明
启动上下文 Startup Context /ˈstɑːrtʌp ˈkɑːntekst/ Agent 启动时预先加载的背景信息
预加载指令 Preloaded Instruction /ˌpriːˈloʊdɪd ɪnˈstrʌkʃən/ 任务开始前就注入系统的指令内容
上下文注入 Context Injection /ˈkɑːntekst ɪnˈdʒekʃən/ 在任务开始前把背景信息放入模型输入
启动配置 Startup Configuration /ˈstɑːrtʌp kənˌfɪɡjəˈreɪʃən/ 影响程序启动行为的配置项