Tips
获取最佳结果
Section titled “获取最佳结果”明确说明你的需求
Section titled “明确说明你的需求”模糊的提示会产生模糊的结果。与其说“修复代码”,不如说“修复api/handlers.py第47行的TypeError——process_request()函数从parse_body()接收到了None”。你提供的上下文越多,需要的迭代次数就越少。
提前提供上下文
Section titled “提前提供上下文”在请求中前置相关信息:文件路径、错误信息、预期行为。一条精心编写的消息胜过三轮澄清。直接粘贴错误回溯(traceback)——代理(Agent)可以解析它。
使用上下文文件处理重复指令
Section titled “使用上下文文件处理重复指令”如果你发现自己重复同样的指令(“使用制表符而不是空格”、“我们使用pytest”、“API在/api/v2”),将它们放在一个AGENTS.md文件中。代理每次会话都会自动读取它——设置后零成本。
让代理使用其工具
Section titled “让代理使用其工具”不要尝试手把手指导每一步。说“找到并修复失败的测试”,而不是“打开tests/test_foo.py,看第42行,然后……”代理拥有文件搜索、终端访问和代码执行能力——让它自主探索和迭代。
对复杂工作流使用技能(Skills)
Section titled “对复杂工作流使用技能(Skills)”在编写长提示解释如何做某事之前,先检查是否有现成的技能。输入/skills浏览可用技能,或直接调用如/axolotl或/github-pr-workflow。
CLI 高级用户技巧
Section titled “CLI 高级用户技巧”按 Alt+Enter、Ctrl+J 或 Shift+Enter 来插入换行而不发送。Shift+Enter 仅在终端将其作为独立按键发送时才有效(Kitty / foot / WezTerm / Ghostty 默认;iTerm2 / Alacritty / VS Code 终端在启用 Kitty 键盘协议后)。另外两个按键在所有终端中都有效。
CLI 自动检测多行粘贴。直接粘贴代码块或错误回溯——它不会将每一行作为单独消息发送。粘贴内容会被缓冲并作为一条消息发送。
中断与重定向
Section titled “中断与重定向”按一次 Ctrl+C 可中断代理的响应。之后你可以输入新消息来重定向它。在 2 秒内双击 Ctrl+C 可强制退出。当代理开始走错方向时,这非常有用。
使用 -c 恢复会话
Section titled “使用 -c 恢复会话”上次会话遗漏了什么?运行 hermes -c 可精确恢复到上次离开的地方,恢复完整的对话历史。你也可以按标题恢复:hermes -r "我的研究项目"。
剪贴板图片粘贴
Section titled “剪贴板图片粘贴”按 Ctrl+V 可将剪贴板中的图片直接粘贴到聊天中。代理使用视觉能力分析截图、图表、错误弹窗或 UI 原型——无需先保存到文件。
斜杠命令自动补全
Section titled “斜杠命令自动补全”输入 / 并按 Tab 可查看所有可用命令。这包括内置命令(/compress、/model、/title)和所有已安装的技能。你不需要记住任何东西——Tab 补全为你搞定。
AGENTS.md:项目的核心
Section titled “AGENTS.md:项目的核心”在项目根目录创建 AGENTS.md,包含架构决策、编码规范和项目特定指令。这个文件会自动注入到每次会话中,因此代理始终知道你的项目规则。
# 项目上下文- 这是一个使用 SQLAlchemy ORM 的 FastAPI 后端- 始终对数据库操作使用 async/await- 测试放在 tests/ 目录并使用 pytest-asyncio- 绝不提交 .env 文件SOUL.md:自定义个性
Section titled “SOUL.md:自定义个性”希望 Hermes 拥有稳定的默认语气?编辑 ~/.hermes/SOUL.md(如果使用自定义 Hermes Home 目录则为 $HERMES_HOME/SOUL.md)。Hermes 现在会自动生成一个启动版 SOUL,并使用该全局文件作为整个实例的个性来源。
有关完整指南,请参阅 与 Hermes 使用 SOUL.md。
# 灵魂你是一位资深后端工程师。言简意赅,直截了当。除非被问到,否则跳过解释。倾向于用一行代码解决而非冗长方案。始终考虑错误处理和边界情况。用 SOUL.md 设置持久个性。用 AGENTS.md 设置项目特定指令。
.cursorrules 兼容性
Section titled “.cursorrules 兼容性”已有 .cursorrules 或 .cursor/rules/*.mdc 文件?Hermes 也会读取它们。无需重复你的编码规范——它们会自动从工作目录加载。
Hermes 在会话开始时从当前工作目录加载顶层的 AGENTS.md。子目录中的 AGENTS.md 文件会在工具调用期间(通过 subdirectory_hints.py)被延迟发现并注入到工具结果中——它们不会预先加载到系统提示中。
记忆 vs. 技能:放哪里
Section titled “记忆 vs. 技能:放哪里”记忆用于存储事实:你的环境、偏好、项目位置以及代理了解到的关于你的信息。技能用于存储过程:多步骤工作流、特定工具指令和可复用的流程。用记忆存储“是什么”,用技能存储“怎么做”。
何时创建技能
Section titled “何时创建技能”如果你发现某个任务需要 5 步以上并且你会再次执行,可以要求代理为此创建一个技能。说“把刚才做的保存为一个名为 deploy-staging 的技能”。下次只需输入 /deploy-staging,代理就会加载完整的流程。
管理记忆容量
Section titled “管理记忆容量”记忆有容量限制(MEMORY.md 约 2,200 字符,USER.md 约 1,375 字符)。当内存满时,代理会合并条目。你可以通过说“清理你的记忆”或“替换旧的 Python 3.9 记录——我们现在用 3.12 了”来帮助它。
在一次富有成效的会话后,说“记住这个以备下次使用”,代理会保存关键要点。你也可以具体说明:“保存到记忆:我们的 CI 使用 GitHub Actions 的 deploy.yml 工作流”。
记忆是一个冻结的快照——会话期间所做的更改在下一次会话开始前不会出现在系统提示中。代理会立即写入磁盘,但提示缓存不会在会话中途失效。
不要破坏提示缓存
Section titled “不要破坏提示缓存”大多数 LLM 提供商会缓存系统提示前缀。如果你保持系统提示稳定(相同的上下文文件、相同的记忆),会话中后续的消息将获得缓存命中,从而显著降低成本。避免在会话中途更改模型或系统提示。
在达到限制前使用 /compress
Section titled “在达到限制前使用 /compress”长会话会积累大量 token。当你注意到响应变慢或被截断时,运行 /compress。这会总结对话历史,保留关键上下文同时大幅减少 token 数量。使用 /usage 检查当前状态。
委托并行工作
Section titled “委托并行工作”需要同时研究三个主题?让代理使用 delegate_task 执行并行子任务。每个子代理独立运行并拥有自己的上下文,只返回最终摘要——大幅减少主对话的 token 使用量。
使用 execute_code 进行批量操作
Section titled “使用 execute_code 进行批量操作”与其逐个运行终端命令,不如让代理编写一个一次性完成所有操作的脚本。“编写一个 Python 脚本将所有 .jpeg 文件重命名为 .jpg 并运行它”比逐个重命名文件更经济高效。
选择正确的模型
Section titled “选择正确的模型”使用 /model 在会话中切换模型。对于复杂的推理和架构决策,使用前沿模型(Claude Sonnet/Opus、GPT-4o)。对于简单任务如格式化、重命名或模板生成,切换到更快的模型。
在你偏好的 Telegram 或 Discord 聊天中使用 /sethome 将其设为主频道。Cron 任务结果和定时任务输出会发送到这里。如果没有设置,代理就没有地方发送主动消息。
使用 /title 组织会话
Section titled “使用 /title 组织会话”使用 /title auth-refactor 或 /title research-llm-quantization 为会话命名。命名后的会话可以通过 hermes sessions list 轻松找到,并使用 hermes -r "auth-refactor" 恢复。未命名的会话会堆积起来并变得难以区分。
通过 DM 配对实现团队访问
Section titled “通过 DM 配对实现团队访问”无需手动收集用户 ID 来建立白名单,启用 DM 配对即可。当队友向机器人发送 DM 时,他们会收到一次性配对码。你通过 hermes pairing approve telegram XKGH5N7P 批准——简单又安全。
工具进展显示模式
Section titled “工具进展显示模式”使用 /verbose 控制你能看到多少工具活动。在消息平台上,少即是多——保持在“new”模式可以只看到新工具调用。在 CLI 中,“all”模式可以让你实时看到代理的所有操作。
对不可信代码使用 Docker
Section titled “对不可信代码使用 Docker”当处理不可信仓库或运行不熟悉的代码时,使用 Docker 或 Daytona 作为终端后端。在你的 .env 中设置 TERMINAL_BACKEND=docker。容器内的破坏性命令不会损害你的宿主机系统。
# 在 .env 中:TERMINAL_BACKEND=dockerTERMINAL_DOCKER_IMAGE=hermes-sandbox:latest避免 Windows 编码陷阱
Section titled “避免 Windows 编码陷阱”在 Windows 上,某些默认编码(如 cp125x)不能表示所有 Unicode 字符,这可能导致在测试或脚本中写入文件时出现 UnicodeEncodeError。
- 建议显式使用 UTF-8 编码打开文件:
with open("results.txt", "w", encoding="utf-8") as f: f.write("✓ 一切正常\n")- 在 PowerShell 中,你也可以将会话切换到 UTF-8 以处理控制台和本机命令输出:
$OutputEncoding = [Console]::OutputEncoding = [Text.UTF8Encoding]::new($false)这会使 PowerShell 和子进程保持 UTF-8,有助于避免仅限 Windows 的错误。
在选择“始终”前请三思
Section titled “在选择“始终”前请三思”当代理触发危险命令批准(rm -rf、DROP TABLE 等)时,你会看到四个选项:一次、会话、始终、拒绝。在选择“始终”前请仔细考虑——这会永久地将该模式加入白名单。建议先选择“会话”,直到你感到习惯。
命令批准是你的安全网
Section titled “命令批准是你的安全网”Hermes 在执行每个命令之前,会对照精心策划的危险模式列表进行检查。这包括递归删除、SQL 删除、将 curl 通过管道传给 shell 等。不要在生产环境中禁用此功能——它存在是有充分理由的。
当在容器后端(Docker、Singularity、Modal、Daytona)中运行时,危险命令检查会被跳过,因为容器本身就是安全边界。请确保你的容器镜像已妥善锁定。
为消息机器人使用白名单
Section titled “为消息机器人使用白名单”切勿在具有终端访问权限的机器人上设置 GATEWAY_ALLOW_ALL_USERS=true。始终使用平台特定的白名单(TELEGRAM_ALLOWED_USERS、DISCORD_ALLOWED_USERS)或 DM 配对来控制谁可以与你的代理交互。
# 推荐:按平台使用显式白名单TELEGRAM_ALLOWED_USERS=123456789,987654321DISCORD_ALLOWED_USERS=123456789012345678
# 或使用跨平台白名单GATEWAY_ALLOWED_USERS=123456789,987654321--- body --- 这条页面有应该收录的小技巧吗?提交 issue 或 PR —— 欢迎社区贡献。