先说几个核心判断:使用 Hermes Agent 编写长提示词时,最容易出问题的往往不是内容本身,而是结构混乱和格式错误。许多人习惯直接在终端里输入,结果换行丢失、标点被转义、中文引号被截断——这其实并非编辑器的问题,而是尚未掌握 Hermes 底层加载逻辑的正确方法。
先搭骨架再填内容:SOUL.md + MEMORY.md 双文件分工
SOUL.md 负责一项核心任务:身份锚定与行为边界。MEMORY.md 则是事实约束与强格式规则的容器。这两份文件各司其职,绝对不能混在一起编写。
SOUL.md 必须放在~/.hermes/SOUL.md路径下,否则 Hermes 启动时根本不会加载它。MEMORY.md 则要求文件名全部小写、不含空格、扩展名必须是.md。
操作很简单:打开终端,先执行mkdir -p ~/.hermes && nano ~/.hermes/SOUL.md,把角色定义写进去,然后按 Ctrl+O 保存、回车确认、Ctrl+X 退出。
【SOUL.md 内容里不能出现中文引号、中文破折号、全角空格】——这类字符会被解析器当作非法字符直接截断,或触发 token 异常。因此,整份文件必须全部用英文标点和半角空格重写。
接下来创建 MEMORY.md:nano ~/.hermes/MEMORY.md。这里只写入项目级的硬性约束,例如“所有输出标题必须加粗”、“禁用‘近期’‘目前’这类相对时间表述”、“公司名统一使用全称,不缩写”。

用 VS Code 编写提示词:安装插件,关闭自动格式化
推荐安装两个插件:Markdown All in One 和 Prettify JSON。前者支持实时预览,后者能帮助你校验 JSON Schema 类输出是否合法。
最关键的一步:在 VS Code 设置里搜索format on paste,将其设为false。否则,当你从网页上复制一段带缩进的 JSON 时,它会自动删除空格、修改引号,导致 Hermes 解析直接失败。
接着搜索auto save,选择afterDelay,延迟设为 1000 毫秒——目的很简单:避免一边打字一边触发保存,防止未写完就同步到~/.hermes目录下,被 Agent 误读到不完整的内容。
这一步操作起来其实很直接:把文件拖进去即可。
结构化分块写作:按照 Hermes 系统提示词加载顺序来
Hermes 的系统提示词由 12 层组装而成,你编写的外部文件只参与其中两层:SOUL.md 对应第 1 层,MEMORY.md 对应第 6 层。因此,内容必须严格对应这两层的职责范围:
① SOUL.md 只写三件事:你是谁、你禁止做什么、你必须怎么做。例如:“你是云原生架构师,专注于 K8s Operator 开发;禁止使用‘可能’‘大概’等模糊词汇;所有技术判断必须标注 Kubernetes v1.30 最新文档章节号。”
② MEMORY.md 只写四类内容:项目基础事实(例如“主力模型为 Qwen-Max”)、格式硬约束(例如“输出禁用分号与破折号”)、来源规范(例如“引用必须以 Sources: 开头,后接超链接”)、工具调用前提(例如“调用 code_runner 前必须先确认 Docker daemon 已运行”)。
③ 所有其他内容——包括任务步骤说明、参考示例、推理指令——一律不要塞进这两个文件。它们应该作为 User Prompt 的一部分,在每次调用时动态传入。否则会被冻结进长期记忆,无法灵活调整。
④ 每个区块之间用空行隔开,不要使用---或***分割线,Hermes 解析器不识别这类 Markdown 分隔符。
验证是否生效:用诊断命令查看注入原文
启动 Hermes Agent 后,输入/debug system_prompt,它会输出当前组装完成的完整系统提示词。滚动查找=== SOUL.md ===和=== Persistent Memory ===这两个标记段落,确认你编写的文字一字不差地出现在对应位置。
如果没有出现,立即执行三件事:ls -l ~/.hermes/检查文件权限是否为 644;file ~/.hermes/SOUL.md确认编码是 UTF-8;grep -n "memory_enabled" ~/.hermes/config.yaml核实配置项是否为 true。
