提示与最佳实践
这是一组能立刻见效的实用建议,能帮助你更高效地使用 Hermes Agent。每一节都聚焦不同方面,你可以直接浏览标题,跳到最相关的部分。
获得最佳结果
明确说明你想要什么
模糊的提示只会得到模糊的结果。与其说“修一下代码”,不如说“修复 api/handlers.py 第 47 行的 TypeError,process_request() 从 parse_body() 收到了 None”。你提供的上下文越完整,往返迭代通常就越少。
一开始就给足上下文
把相关细节提前放进请求里,比如文件路径、报错信息、期望行为。一条高质量消息,往往胜过三轮来回澄清。错误回溯可以直接粘贴,agent 能够解析。
把重复性要求写进上下文文件
如果你反复说同样的话,例如“用 tab 不要空格”“我们用 pytest”“API 在 /api/v2”,就把它们写进 AGENTS.md。agent 每次会话都会自动读取,配置好之后基本零成本。
让 agent 使用自己的工具
不要手把手规定每一步。与其说“打开 tests/test_foo.py 看第 42 行,然后……”,不如直接说“找出并修复失败的测试”。agent 有文件搜索、终端和代码执行能力,应该让它自己探索和迭代。
复杂工作流优先考虑技能
在你写一大段提示解释“应该怎么做”之前,先看看有没有现成的技能。输入 /skills 浏览可用技能,或者直接调用某个技能,比如 /axolotl 或 /github-pr-workflow。
CLI 高级技巧
多行输入
按 Alt+Enter(或 Ctrl+J)可以插入换行而不发送。这让你能先组织好多行提示、粘贴代码块,或者构造复杂请求,再按 Enter 一次发送。
粘贴检测
CLI 会自动识别多行粘贴。你可以直接粘贴代码块或错误回溯,它不会把每一行都当成单独消息发送,而是缓冲后作为一条消息提交。
中断并重定向
按一次 Ctrl+C 可以在 agent 回复过程中中断它,然后你就能输入新消息来改换方向。若在 2 秒内连按两次 Ctrl+C,则会强制退出。当 agent 明显走偏时,这个功能非常有用。
用 -c 恢复会话
忘了上次会话里的内容?运行 hermes -c 就能从上次离开的地方继续,并恢复完整对话历史。你也可以按标题恢复,例如:hermes -r "my research project"。
直接粘贴剪贴板图片
按 Ctrl+V 可以把剪贴板里的图片直接贴进聊天。agent 会用视觉能力分析截图、图表、错误弹窗或 UI 草图,不必先把图片保存成文件。
斜杠命令自动补全
输入 / 后按 Tab,就能看到所有可用命令。这既包括内置命令(/compress、/model、/title),也包括所有已安装的技能。你不需要死记硬背,Tab 补全就够用。
使用 /verbose 可以循环切换工具输出显示模式:off → new → all → verbose。如果你想观察 agent 在做什么,all 很合适;如果只是简单问答,off 最清爽。
上下文文件
AGENTS.md:你的项目大脑
在项目根目录创建一个 AGENTS.md,把架构决策、编码约定和项目专属说明写进去。它会自动注入到每个会话中,因此 agent 始终知道你项目的规则。
# Project Context
- This is a FastAPI backend with SQLAlchemy ORM
- Always use async/await for database operations
- Tests go in tests/ and use pytest-asyncio
- Never commit .env files
SOUL.md:定制人格
如果你想让 Hermes 拥有稳定的默认语气,可以编辑 ~/.hermes/SOUL.md(如果你使用自定义 Hermes home,则是 $HERMES_HOME/SOUL.md)。Hermes 现在会自动生成一个初始 SOUL 文件,并把这个全局文件作为实例级人格来源。
完整说明请参阅 Use SOUL.md with Hermes。
# Soul
You are a senior backend engineer. Be terse and direct.
Skip explanations unless asked. Prefer one-liners over verbose solutions.
Always consider error handling and edge cases.
SOUL.md 适合放长期稳定的人格设定,AGENTS.md 适合放项目相关指令。
.cursorrules 兼容性
如果你已经有 .cursorrules 或 .cursor/rules/*.mdc,Hermes 也会读取它们。无需重复维护同一套编码约定,工作目录里的这些规则会自动加载。
发现机制
Hermes 会在会话开始时加载当前工作目录顶层的 AGENTS.md。子目录中的 AGENTS.md 会在工具调用过程中按需发现(通过 subdirectory_hints.py),并注入到工具结果里,而不是一开始就进入系统提示。
上下文文件要尽量聚焦、尽量简洁。因为它们会注入到每条消息里,每一个字符都会占用你的 token 预算。
记忆与技能
记忆和技能分别放什么
记忆 用于保存事实,例如你的环境、偏好、项目位置,以及 agent 对你的了解。技能 用于保存流程,例如多步骤工作流、工具专用说明和可复用配方。简单说,记忆管“是什么”,技能管“怎么做”。
什么时候该创建技能
如果某个任务要走 5 步以上,而且你以后还会再做,就值得让 agent 把它保存成技能。你可以说:“把你刚才做的内容保存成一个叫 deploy-staging 的技能。” 下次只要输入 /deploy-staging,agent 就会加载完整流程。
管理记忆容量
记忆容量本来就是有上限的(MEMORY.md 大约 2,200 个字符,USER.md 大约 1,375 个字符)。当空间接近上限时,agent 会合并条目。你也可以主动帮它整理,比如说“清理一下你的记忆”或“把旧的 Python 3.9 记录替换掉,我们现在用 3.12 了”。
让 agent 记住关键信息
一次有效的会话结束后,可以直接说“下次记住这个”,agent 就会把关键结论保存下来。你也可以说得更具体,比如“记到记忆里:我们的 CI 使用 GitHub Actions,工作流是 deploy.yml。”
记忆是冻结快照。在当前会话里新写入的记忆,不会立即出现在系统提示中,而是要等到下一次会话开始才会生效。agent 会立刻写盘,但不会在会话中途让提示缓存失效。
性能与成本
不要破坏提示缓存
大多数 LLM 大模型提供商(provider)都会缓存系统提示的前缀。如果你保持系统提示稳定,例如上下文文件和记忆都不变,那么同一会话中的后续消息通常会命中缓存,成本会显著更低。尽量避免在会话中途切换模型或修改系统提示。
接近上限时使用 /compress
长会话会不断累积 token。当你发现回复变慢或开始被截断时,运行 /compress。它会总结对话历史,保留关键上下文,同时大幅降低 token 占用。你可以用 /usage 查看当前情况。
并行工作时用委托
如果你需要同时研究三个主题,可以让 agent 使用 delegate_task 开并行子任务。每个子 agent 都在独立上下文里运行,最后只把总结带回主会话,这能显著减少主会话的 token 消耗。
批量操作优先 execute_code
不要一个个执行终端命令,而是让 agent 写一个脚本一次做完。比如“写一个 Python 脚本,把所有 .jpeg 重命名成 .jpg 并执行”,通常比逐个文件处理更快也更省。
选对模型
使用 /model 可以在会话中切换模型。复杂推理或架构决策适合前沿模型(如 Claude Sonnet/Opus、GPT-4o);格式化、重命名、模板代码之类的简单任务,则可以切换到更快的模型。
定期运行 /usage 查看 token 消耗;运行 /insights 可以更全面地了解过去 30 天的使用模式。
消息平台技巧
设置主频道
在你常用的 Telegram 或 Discord 聊天里使用 /sethome,把它设成主频道。cron 任务结果和定时任务输出都会发到这里。没有主频道时,agent 就没有地方发送主动消息。
用 /title 整理会话
用 /title auth-refactor 或 /title research-llm-quantization 给会话命名。命名后的会话更容易通过 hermes sessions list 找到,也更容易用 hermes -r "auth-refactor" 恢复。无标题会话一多,就很难分辨。
团队访问使用 DM 配对
与其手动收集用户 ID 维护 allowlist,不如启用 DM pairing。队友私信机器人时,会拿到一个一次性配对码。你只需要执行 hermes pairing approve telegram XKGH5N7P 即可批准,简单又安全。
工具进度显示模式
使用 /verbose 可以控制你想看到多少工具活动。在消息平台里,通常“少一点更好”,建议保持在 new,只看新工具调用;在 CLI 中,all 则能让你实时看到 agent 的完整动作。
在消息平台中,会话会在空闲一段时间后(默认 24 小时)或每天凌晨 4 点自动重置。如果你需要更长会话,可以在 ~/.hermes/config.yaml 中按平台调整。
安全
处理不受信任代码时使用 Docker
当你在处理不受信任的仓库,或运行不熟悉的代码时,建议把 Docker 或 Daytona 设为终端后端。在 .env 中设置 TERMINAL_BACKEND=docker。这样即便容器里执行了破坏性命令,也不会伤害你的主机系统。
# In your .env:
TERMINAL_BACKEND=docker
TERMINAL_DOCKER_IMAGE=hermes-sandbox:latest
避开 Windows 编码陷阱
在 Windows 上,一些默认编码(如 cp125x)无法表示全部 Unicode 字符,这会导致测试或脚本写文件时出现 UnicodeEncodeError。
- 优先显式指定 UTF-8 编码来打开文件:
with open("results.txt", "w", encoding="utf-8") as f:
f.write("✓ All good\n")
- 在 PowerShell 中,也可以把当前会话切换到 UTF-8,用于控制台和原生命令输出:
$OutputEncoding = [Console]::OutputEncoding = [Text.UTF8Encoding]::new($false)
这样 PowerShell 和子进程都会使用 UTF-8,有助于避免 Windows 专属故障。
选择 “Always” 之前先想清楚
当 agent 触发危险命令审批(如 rm -rf、DROP TABLE 等)时,你会看到四个选项:once、session、always、deny。选择 always 前一定要谨慎,因为这会把该模式永久加入 allowlist。建议先从 session 开始,等你足够放心后再说。
命令审批就是你的安全网
Hermes 在执行前会把每条命令与一份危险模式清单进行比对,其中包括递归删除、SQL drop、curl | sh 等。生产环境里不要随便关闭这层保护,它存在是有充分理由的。
如果运行在容器后端(Docker、Singularity、Modal、Daytona)中,危险命令检查会被跳过,因为容器本身就是安全边界。请确认你的容器镜像已经正确加固。
消息机器人必须使用 allowlist
不要在具备终端访问能力的机器人上设置 GATEWAY_ALLOW_ALL_USERS=true。应始终使用平台专属 allowlist(TELEGRAM_ALLOWED_USERS、DISCORD_ALLOWED_USERS)或 DM pairing,控制谁可以与 agent 交互。
# Recommended: explicit allowlists per platform
TELEGRAM_ALLOWED_USERS=123456789,987654321
DISCORD_ALLOWED_USERS=123456789012345678
# Or use cross-platform allowlist
GATEWAY_ALLOWED_USERS=123456789,987654321
如果你有值得加入本页的技巧,欢迎提 issue 或 PR。社区贡献非常欢迎。