跳到主要内容

提示与最佳实践

这是一组能立刻见效的实用建议,能帮助你更高效地使用 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 -rfDROP TABLE 等)时,你会看到四个选项:oncesessionalwaysdeny。选择 always 前一定要谨慎,因为这会把该模式永久加入 allowlist。建议先从 session 开始,等你足够放心后再说。

命令审批就是你的安全网

Hermes 在执行前会把每条命令与一份危险模式清单进行比对,其中包括递归删除、SQL drop、curl | sh 等。生产环境里不要随便关闭这层保护,它存在是有充分理由的。

注意

如果运行在容器后端(Docker、Singularity、Modal、Daytona)中,危险命令检查会被跳过,因为容器本身就是安全边界。请确认你的容器镜像已经正确加固。

消息机器人必须使用 allowlist

不要在具备终端访问能力的机器人上设置 GATEWAY_ALLOW_ALL_USERS=true。应始终使用平台专属 allowlist(TELEGRAM_ALLOWED_USERSDISCORD_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。社区贡献非常欢迎。