人格与 SOUL.md
Hermes Agent 的人格是完全可自定义的。SOUL.md 是 主身份文件,会作为系统提示中的第一部分,用来定义这个智能体“是谁”。
SOUL.md:保存在HERMES_HOME中的持久人格文件,作为智能体身份(系统提示第 1 槽位)- 内置或自定义
/personality预设:按会话叠加的系统提示覆盖层
如果你想改变 Hermes 是谁,甚至将其替换成一个完全不同的人格,就去编辑 SOUL.md。
现在的 SOUL.md 工作方式
Hermes 会自动在以下位置生成一个默认 SOUL.md:
~/.hermes/SOUL.md
更准确地说,它使用的是当前实例的 HERMES_HOME,因此如果你指定了自定义 home,就会使用:
$HERMES_HOME/SOUL.md
关键行为
- SOUL.md 是智能体的主身份。 它占据系统提示中的第 1 槽位,替代硬编码默认身份。
- 如果文件尚不存在,Hermes 会自动生成一个起始版
SOUL.md - 已有的用户
SOUL.md永远不会被覆盖 - Hermes 只会从
HERMES_HOME加载SOUL.md - Hermes 不会去当前工作目录寻找
SOUL.md - 如果
SOUL.md存在但为空,或无法加载,Hermes 会回退到内置默认身份 - 如果
SOUL.md有内容,内容会在经过安全扫描与截断后原样注入 SOUL.md不会重复出现在上下文文件区块中,它只会作为身份内容出现一次
这让 SOUL.md 成为真正按用户或实例生效的身份层,而不是普通的附加提示层。
为什么这么设计
这样可以让人格保持稳定、可预测。
如果 Hermes 会从你启动它的任意目录里加载 SOUL.md,那么人格就可能随着项目切换而意外改变。而只从 HERMES_HOME 加载时,人格就归属于 Hermes 实例本身。
这也更容易向用户解释:
- “编辑
~/.hermes/SOUL.md就能修改 Hermes 的默认人格。”
应该在哪里编辑
对大多数用户来说:
~/.hermes/SOUL.md
如果你使用自定义 home:
$HERMES_HOME/SOUL.md
SOUL.md 里应该写什么?
适合放入持久的人格与表达风格指导,例如:
- 语气
- 沟通风格
- 直接程度
- 默认互动方式
- 希望避免的表达方式
- Hermes 应如何处理不确定性、分歧和模糊情况
不太适合放入:
- 一次性的项目说明
- 文件路径
- 仓库约定
- 临时工作流细节
这些应写在 AGENTS.md 中,而不是 SOUL.md。
好的 SOUL.md 内容
一个好的 SOUL 文件通常应当:
- 跨上下文稳定有效
- 足够宽泛,能适用于很多对话场景
- 又足够具体,能明显影响说话风格
- 聚焦在沟通与身份,而不是任务级指令
示例
# Personality
You are a pragmatic senior engineer with strong taste.
You optimize for truth, clarity, and usefulness over politeness theater.
## Style
- Be direct without being cold
- Prefer substance over filler
- Push back when something is a bad idea
- Admit uncertainty plainly
- Keep explanations compact unless depth is useful
## What to avoid
- Sycophancy
- Hype language
- Repeating the user's framing if it's wrong
- Overexplaining obvious things
## Technical posture
- Prefer simple systems over clever systems
- Care about operational reality, not idealized architecture
- Treat edge cases as part of the design, not cleanup
Hermes 会如何注入提示
SOUL.md 内容会直接进入系统提示的第 1 槽位,也就是智能体身份位置,不会额外包裹任何说明文字。
在注入前,内容会经过:
- prompt injection 扫描
- 超长时的截断处理
如果文件为空、只有空白、或无法读取,Hermes 会回退到内置默认身份(“You are Hermes Agent, an intelligent AI assistant created by Nous Research...”)。当设置了 skip_context_files(例如在子智能体 / delegation 场景中)时,也会使用这一回退逻辑。
安全扫描
SOUL.md 与其他上下文文件一样,在纳入提示前会做 prompt injection 扫描。
这意味着你仍应让它专注于人格与表达,而不是试图塞入奇怪的元指令。
SOUL.md 与 AGENTS.md 的区别
这是最重要的区分之一。
SOUL.md
适合存放:
- 身份
- 语气
- 风格
- 默认沟通方式
- 人格层行为偏好
AGENTS.md
适合存放:
- 项目架构
- 编码约定
- 工具偏好
- 仓库专属工作流
- 命令、端口、路径、部署说明
一个简单的判断规则是:
- 如果它应该在所有项目中都跟着你走,就放进
SOUL.md - 如果它只属于某个项目,就放进
AGENTS.md
SOUL.md 与 /personality
SOUL.md 是你长期稳定的默认人格。
/personality 是会话级覆盖层,用来临时改变或补充当前系统提示。
所以:
SOUL.md= 基线声音/personality= 临时模式切换
例如:
- 保持一个务实的默认 SOUL,然后在教学场景下用
/personality teacher - 保持一个简洁 SOUL,然后在头脑风暴时用
/personality creative
内置人格
Hermes 自带了一组可通过 /personality 切换的内置人格。
| 名称 | 说明 |
|---|---|
| helpful | 友好、通用的助手 |
| concise | 简明扼要 |
| technical | 详细且准确的技术专家 |
| creative | 富有创意、跳出常规 |
| teacher | 有耐心、示例清晰的讲解者 |
| kawaii | 可爱风格、闪闪发亮、热情洋溢 |
| catgirl | 带猫娘风格口癖 |
| pirate | 海盗船长风格 |
| shakespeare | 莎士比亚式戏剧化表达 |
| surfer | 松弛随性的冲浪风格 |
| noir | 黑色侦探小说旁白风格 |
| uwu | 超可爱 uwu 风格 |
| philosopher | 哲思型表达 |
| hype | 极高能量和热情 |
通过命令切换人格
CLI
/personality
/personality concise
/personality technical
消息平台
/personality teacher
这些都是方便的会话级覆盖层,但除非覆盖层显著改变了整体风格,否则全局 SOUL.md 仍然决定 Hermes 的持久默认人格。
在配置中定义自定义人格
你也可以在 ~/.hermes/config.yaml 的 agent.personalities 下定义具名自定义人格:
agent:
personalities:
codereviewer: >
You are a meticulous code reviewer. Identify bugs, security issues,
performance concerns, and unclear design choices. Be precise and constructive.
然后通过以下命令切换:
/personality codereviewer
推荐工作流
一个比较稳妥的默认组合是:
- 在
~/.hermes/SOUL.md中维护一个认真设计的全局 SOUL - 把项目说明放到
AGENTS.md - 只在需要临时切换模式时使用
/personality
这样你会得到:
- 稳定的人格声音
- 放在正确位置的项目级行为约束
- 需要时可临时切换的会话控制能力
人格在完整提示栈中的位置
高层来看,提示栈大致包括:
- SOUL.md(智能体身份;若不可用则回退到内置身份)
- 工具感知的行为指导
- memory / user 上下文
- 技能指导
- 上下文文件(
AGENTS.md,.cursorrules) - 时间戳
- 平台特定格式提示
/personality等可选系统提示覆盖层
SOUL.md 是整个结构的基础层,其余部分都构建在它之上。
相关文档
CLI 外观与对话人格是分开的
对话人格和 CLI 外观是两个独立维度:
SOUL.md、agent.system_prompt和/personality影响 Hermes 如何说话display.skin和/skin影响 Hermes 在终端里的视觉外观
关于终端外观,请参阅 Skins & Themes。