v0.16 "Surface Release" 不只带来了桌面端,更悄悄塞进了三个让 AI Agent 开发体验质变的命令。
/undo让你再也不同担心把 Agent 带偏后束手无策,/steer让你在不打断 Agent 工作的前提下实时纠偏,/usage让你对每月额度了如指掌。这篇文章逐命令拆解用法、原理和实战场景。
前言
如果你的 AI Agent 已经跑了一段时间,你一定遇到过这些场景:
- 场景 A:你跟 Agent 说了 3 轮"不对,不是这个意思",但 Agent 已经被前两轮的误解带着跑了十几步。你想回到最初那一步重新来,但不可能——只能清空会话从头开始。
- 场景 B:Agent 正在跑一个 20 步的任务流程,你突然发现第 5 步的方向偏了。你想说"往这边走",但 Agent 正在执行工具调用,你的消息要等它这轮跑完才能被读到——那时已经浪费了 10 步。
- 场景 C:月底了,你不知道 Nous 月额还剩多少,Agent 突然报 API 403——已经用完了。如果能提前知道,你早就切到备用 API key 了。
Hermes v0.16 的三个新命令,就是为这些场景而生的。
这篇文章不会复述 v0.16 的完整发布说明(那篇已经写了),而是聚焦这三条命令的原理、用法、和一人公司创业者的实战场景。读完你会立刻想给自己的 Agent 配上这些能力。
命令一:/undo [N] — 时光倒流,回退最后 N 轮对话
它解决了什么问题
▲ 图1:/undo 回退机制示意 — 软删除保留上下文,预填输入框零摩擦重来
Agent 的对话是线性的。一旦你说了某句话,Agent 基于它执行了一串操作,你就没法"收回"那句话——Agent 的记忆(上下文窗口+会话数据库)已经被污染了。
传统的做法是清空会话,重新开始。但如果你已经在这个会话里积累了 30 轮有价值的工作(Agent 读了你的代码库、了解了项目结构、建了几个文件),清空意味着丢掉所有这些上下文。
/undo [N] 的解决方案:回退 N 轮用户消息(默认 1 轮),把你的最后一条消息预填回输入框,让你编辑后重发。
关键细节:
- 它在 SQLite 会话数据库里做的是软删除(
active=0),不是物理删除。数据还在,只是因为 active 标记为 0 而不被加载。 - 它同时 invalidates 系统提示缓存,通知记忆系统状态已回退。
- 预填功能意味着你不需要重新打字——你的最后一条消息出现在输入框里,你可以直接修改,也可以原样重发。
基本用法
用法非常简单。但它的设计细节决定了实战效果:
1. 软删除 = 可恢复。 被回退的轮次不会从数据库消失,只是不加载。如果后续需要 debug 或审查(比如排查 Agent 为什么在那几轮做了某件事),数据还在。
2. 跨平台一致。 CLI、TUI、桌面端、Telegram、Discord——所有平台都支持 /undo,行为完全一致。你在手机上用 Telegram 跟 Agent 聊天时手滑发了错误指令,/undo 一样能用。
3. 预填 = 零摩擦。 回退后你的最后一条消息自动出现在输入框里。你可以改一两个字再发送,而不是重新打一整段。
一人公司实战场景
场景:内容排期调整
假设你是一个一人公司的运营者,用 Hermes Agent 管理你的内容发布流水线。你跟 Agent 说了这样一段话:
此时你的会话已经被两轮错误指令污染了。但你不想清空整个会话——因为前 20 轮里 Agent 帮你搭好了整套发布流水线的配置。怎么办?
Agent 回退了后两轮对话,你的最后一条消息"不对,是北京时间 8 点,不是 UTC"出现在输入框里。你把它改成:
重新发送。Agent 正确理解了你的意图,这次直接建好了正确的 Cron 任务。
为什么这比 Ctrl+C 清空会话强? 因为 /undo 保留了之前的上下文。Agent 还记得你的项目结构、记得你的 API key 配置、记得你已经建好了哪些 Cron 任务。你只回退了错误的 2 轮,前面的 20 轮完好无损。
注意事项
/undo回退的是用户消息轮次,不是 Agent 的响应轮次。但 Agent 的响应和工具调用会随之被软删除。- 回退后 Agent 的系统提示缓存会被 invalidate,下一次对话会重新加载——这意味着回退后第一轮对话可能稍慢(重新构建上下文)。
- N 不要设太大——比如
/undo 50,回退太多了会丢掉大量有价值的工作上下文。实际使用中/undo 1到/undo 3是最常用的。
命令二:/steer — 中途引导,不中断 Agent 执行
它解决了什么问题
▲ 图2:/steer vs 排队消息 — 实时纠偏不中断流水线,效率远超传统排队模式
这是 v0.16 里设计最精巧的功能。
先看传统的问题场景:Agent 正在执行一个多步骤任务——比如 delegate_task(researcher) → 等 researcher 返回 → delegate_task(outliner) → 等 outliner 返回 → write_file(文章.md) → 等文件写完。整个流程可能跑 5-10 分钟。
你在第 2 步就发现方向偏了——researcher 搜的信息不是你要的维度。你想说"搜中文资料,不是英文"。但 Agent 的工具调用正在进行中,你的消息被排队——要等这轮工具调用全部跑完才会被读取。等 Agent 读完你的纠偏指令时,outliner 和 writer 都已经按错误方向跑完了。
/steer 的设计思路完全不一样:
你的引导信息被直接塞进下一个工具返回结果里,而不是作为新的用户消息排队。Agent 在下一次迭代(收到任何工具返回时)就能读到它。不中断当前工具调用,不影响任务流程,但 Agent 在下一步就能收到你的引导。
技术原理
/steer 用了一个巧妙的机制:
- 普通消息(queue):作为新的用户消息,在下一个对话轮次边界被 Agent 读到。Agent 必须先完成当前任务。
- Steer 消息:被包装成
User guidance:标签,塞进下一个工具返回结果的文本里。Agent 在下一次读取工具返回时就看到了。
之所以这样设计,是因为 Agent 跟模型的对话协议里,工具返回结果是唯一可以在不切换角色(user/assistant)的前提下插入新信息的位置。
v0.16 还修了一个关键 bug:旧版 steer 消息被某些模型(尤其是 Claude)识别为"工具返回里的注入内容"而拒绝执行。v0.16 在 Agent 后端加了一个 trusted injection 机制——steer 消息现在标记为受信任的指令来源,模型不会再把它当注入拒绝。
基本用法
桌面端(推荐):
在 Hermes Desktop 的输入框里,按 Cmd+Enter(macOS)或 Ctrl+Enter(Windows/Linux)。输入的文字作为 steer 发出,而不是普通消息。
CLI / TUI:
消息平台(Telegram / Discord 等):
一人公司实战场景
场景:自动内容流水线中的实时纠偏
你的 Hermes Agent 正在执行一套完整的内容生产流水线:
在 researcher 返回结果后,你发现它搜的是上周的旧新闻,因为搜索词没加时间限定。此时:
传统做法:等整个流水线跑完 → 看完整篇文章 → 发现信息过时 → 手动修改或重新跑。浪费了 outliner 和 writer 的时间。
用 /steer:
Agent 在下一步(读 researcher 返回结果时)就能看到这句话,调整后续的 outliner 和 writer 方向。你不需要打断流水线,不需要等它跑完再重来。
对比效果:
| 不用 /steer | 用 /steer | |
|---|---|---|
| researcher 跑完 | 30 秒 | 30 秒 |
| 你发现问题 | 等流水线跑完 ≈ 2 分钟 | 立即 |
| 纠偏 | 重跑全部 4 步 ≈ 2.5 分钟 | 只需调整 outliner + writer ≈ 1.5 分钟 |
| 总耗时 | 4.5 分钟 | 2 分钟 |
| API 费用 | 全文重跑,费用翻倍 | 只跑了必要步骤 |
/steer vs queue(队列消息)的区别
| /steer | 普通消息(queue) | |
|---|---|---|
| 何时被 Agent 读到 | 下一个工具返回结果中 | 当前任务结束后 |
| 是否打断 Agent | 否 | 是(排到下一轮) |
| 适用场景 | 方向微调、参数纠正 | 话题切换、新任务 |
| 桌面端快捷键 | Cmd/Ctrl+Enter | Enter |
经验法则:如果 Agent 正在做的事大致正确,只是需要微调方向——用 /steer。如果要完全切换到新话题——用普通消息。
注意事项
/steer的内容会被 Agent 在下一个工具返回结果中读到。如果 Agent 当前没有正在进行的工具调用(比如正在输出长文本),steer 需要等到下一次工具调用才能被读到。/steer不是/undo——它不会回退任何内容,只是给 Agent 一个"往这边走"的提示。Agent 可以选择遵循或不遵循。- 桌面端的 Cmd/Ctrl+Enter 快捷键是专门为 steer 保留的。如果你习惯用这个组合键发送普通消息,需要适应一下——普通发送用 Enter。
命令三:/usage — 实时用量监控,告别突然断供
它解决了什么问题
▲ 图3:/usage 用量监控面板 — 四级阈值自动提醒,告别突然断供
如果你在用 Hermes Agent 的 Nous Portal 订阅,每月有固定的 API 调用额度。以前你不知道自己用了多少——直到 Agent 突然报错,告诉你额度已用完。
/usage 和配套的 credits 系统,让你在额度耗尽之前就知道。
使用方法
输出示例:
自动提醒机制
/usage 只是主动查询。v0.16 的 credits 系统还会自动提醒你,不需要手动查:
| 使用比例 | 提醒方式 | 位置 |
|---|---|---|
| 50% | 一次性提醒 | TUI 状态栏 + 聊天消息 |
| 75% | 黄色警告 | TUI 状态栏(持续)+ 聊天消息 |
| 90% | 红色告警 | TUI 状态栏(持续)+ 聊天消息 |
| 100% | "credit access paused" | 聊天消息 |
| 恢复(充值/月度重置) | "credit access restored" | 聊天消息 |
在 TUI 中,状态栏的颜色会随用量变化:
- 正常:绿色
- 50%+:黄色
- 75%+:橙色
- 90%+:红色
在聊天平台(Telegram / Discord / Slack / WhatsApp)上,每个级别触发一次性消息——不会每个回合都重复提醒。
一人公司实战场景
场景:避免关键任务中断
你在月底用 Agent 跑一套完整的客户交付物(案例报告 + 数据看板 + 部署文档),需要在 2 小时内完成。你点了开始,然后去做别的事了。
没有 credits 系统:Agent 跑到一半突然报 403,额度用完了。你回来发现任务半途而废,而且 API 额度已经耗尽,连重跑都做不了。
有 credits 系统:Agent 在跑任务之前就发现额度已经用了 90%,在 TUI 状态栏和 Telegram 里都发了红色告警。你在手机上看到 Telegram 消息,立刻充值了 2000 top-up credits。Agent 的任务跑完了,没中断。
v0.16 的 credits 系统给出的最佳操作流程:
技术细节
- Credits 信息存储在
/tmp/grant_spent文件里,Agent 在每个对话轮次结束时更新。 - 百分比提醒是一次性的——触发后不会重复。但 TUI 状态栏是持续更新的。
- 5 分钟内多次达到同一阈值不会重复提醒(防止 Agent 快速迭代时刷屏)。
grant spent提醒会在下一次用户提示时 yield,不会插入 Agent 的输出中——保证 Agent 的回答不被截断。
三个命令的协同实战:一个完整的工作流
假设你正在用 Hermes Agent 编写一篇深度分析文章。这是一个 4 步的自动流水线:研究员 → 大纲生成 → 写作者 → 审核员。
第 1 步:启动流水线
Agent 开始执行 delegate_task(researcher)。
第 2 步:实时纠偏(用 /steer)
研究员返回了搜索结果。你发现它搜的是一个月前的旧文章。Agent 正准备启动 outliner。
Agent 在下一个工具返回中读到了这句话,outliner 和 writer 都会按新方向走。
第 3 步:回退错误轮次(用 /undo)
writer 写完初稿后,你 review 发现第二段的分析框架不对。你想让 Agent 换一个分析框架重写第二段。
(注:这里 /steer 不够用,因为 writer 已经写完了。queue 消息可以,但需要等 Agent 处理完当前审核步骤。)
其实你只需要撤回 writer 的那一步:
Agent 回退到"writer 写完初稿之前"的状态,你的最后一条指令出现在输入框:
重发。writer 按新框架重写第二段。
第 4 步:监控用量(用 /usage)
流水线跑了一半,你想确认额度还够不够跑完:
输出显示还剩 35%,但考虑到后续还要让 reviewer 跑两轮,可能不够。你提前充值了 top-up credits,保证流水线不会中断。
完整流程总结:
| 步骤 | 命令 | 作用 |
|---|---|---|
| 启动 | 普通消息 | 定义任务 |
| 纠偏 | /steer | 微调方向,不打断 |
| 回退 | /undo N | 撤回错误轮次,保留上下文 |
| 监控 | /usage | 确保额度够用 |
| 交付 | Agent 自动 | 完成任务 |
这个流程里,三个命令各司其职:/steer 负责"往这边走",/undo 负责"不对,退回去重来",/usage 负责"钱还够不够"。以前你只能靠手动重启会话、手动查额度来做这些事,现在 Agent 自己就能处理。
常见问题
Q:/undo 回退后,Agent 的"记忆"还在吗?
A:在的。Hermes 的记忆系统(memory)跟会话对话(session)是分开的。/undo 只回退会话对话,不影响记忆存储。如果之前的轮次中 Agent 写入了记忆(比如"用户偏好中文搜索结果"),这些记忆不会被 /undo 清除。
Q:/steer 和直接在聊天框里打字有什么区别?
A:普通的聊天消息是排队的——Agent 会完成当前所有工具调用后,在下一轮开始时读取。/steer 是塞进下一个工具返回结果里的——Agent 在当前轮的下一步就能读到。前者会打断流程,后者不会。如果你说"换一个话题",用普通消息;如果你说"搜索加个时间限定",用 /steer。
Q:/usage 的数据是实时的吗?
A:接近实时。Credits 信息在每个对话轮次结束后更新(写入 /tmp/grant_spent),/usage 读取的是这个文件。如果你刚充值了 top-up credits,可能需要等当前轮次结束(或手动 /usage 刷新一次)才能看到新余额。
Q:这三个命令在 Telegram / Discord 上能用吗?
A:全部能用。/undo、/steer、/usage 都有跨平台一致的支持。唯一的例外是 /steer 的桌面端快捷键(Cmd/Ctrl+Enter),这只在 Hermes Desktop 里有效。
踩坑提醒
/undo后第一轮可能变慢。因为系统提示缓存被 invalidate 了,Agent 需要重新构建上下文。如果会话历史很长(50+ 轮),这可能需要几秒钟。这是正常的,不是 bug。/steer的内容不要太长。steer 消息被塞进工具返回结果里,如果太长可能会稀释工具返回的原始内容。建议控制在 1-2 句话,精确指出需要调整的方向即可。- 桌面端 Cmd/Ctrl+Enter:如果你之前习惯用这个快捷键提交普通消息,现在它会发送 steer。普通消息用 Enter 发送。这个改动可能需要适应一两天。
- Credits 系统的前提:你需要通过 Nous Portal 使用 Hermes Agent。如果你用的是自己的 API key(直接对接 OpenAI/Anthropic/DashScope),credits 跟踪不会生效——它只跟踪 Nous Portal 的月度额度。
- 不要过度依赖 /undo。它可以救命,但不是设计来"随便试试看"的。频繁回退意味着你的指令本身不够清晰。更好的做法是:在发送复杂指令前,先用
/steer微调,而不是等 Agent 跑偏了再用/undo回退。
总结
v0.16 的三个新命令,代表的是一种产品哲学的变化:Hermes 不再是一个"发完指令就等着"的黑箱,而是一个你能实时介入、实时纠偏、实时监控的协作工具。
对于一人公司创业者来说,这意味着:
- /steer → 你的 Agent 流水线不再是"全自动但不可控",中途可以纠偏
- /undo → 犯错不再是灾难,可以精准回退而不丢失上下文
- /usage → 成本不再是个谜,随时知道花了多少钱、还剩多少钱
这三个命令的代码量都不大(/undo 两个 PR,/steer 四个 PR,credits 两个 PR),但它们解决的是 Agent 工程中最痛点的问题——可控性和可观测性。
建议你现在就打开 Hermes Agent,试一下这三个命令。特别是在下一次 Agent 跑自动化流水线时,试试在半途中用 /steer 微调方向——你会发现 Agent 的可用性提升了一个档次。
#AI创业 #HermesAgent #Agent工坊 #一人公司
*本文基于 Hermes Agent v0.16.0 (v2026.6.5) 版本的 release notes 和 PR 记录撰写。所有命令用法和参数均来自官方源码和文档。*
本文由AI辅助创作,经人工审核编辑发布
