hermes-agent/website/i18n/zh-Hans/docusaurus-plugin-content-docs/current/user-guide/features/goals.md
Teknium 76135b329d
docs(i18n): translate all docs into Simplified Chinese (zh-Hans) (#31942)
Translates the full English docs corpus (335 files) into Simplified
Chinese under website/i18n/zh-Hans/. Combined with PR #31895 (cross-
locale link fix), the 简体中文 locale toggle now serves a complete
Chinese site with working cross-page navigation.

Pipeline:
- Claude Sonnet 4.6 via OpenRouter, 8-way concurrent
- Preserves frontmatter keys, code blocks, MDX/JSX, link URLs, brand
  names, and technical jargon (prompt/token/hook/MCP/ACP/etc.)
- Translates only frontmatter title/description and prose
- Two largest files (configuration.md 93KB, research-paper-writing.md
  107KB) retried with 64K max_tokens after initial fence-drift
- 3 manual post-fixes for MDX edge cases the model didn't escape:
  < in optional-skills-catalog table, double-quotes in an alt= tag,
  and a bare URL adjacent to a full-width period

Cost: ~$30 total (Sonnet 4.6 input $3/M + output $15/M).

Verified `npm run build` succeeds for both en and zh-Hans locales,
no double-prefixed /docs/zh-Hans/docs/ URLs in rendered output,
all in-page navigation resolves correctly.

Translations are machine-generated and may need human review on
specific pages — but they're an enormous improvement over the
previous state (3 zh-Hans pages out of 335).
2026-05-25 01:47:38 -07:00

9.7 KiB
Raw Blame History

sidebar_position title description
16 持久目标 设置一个持续目标,让 Hermes 跨轮次持续工作直到完成。我们对 Ralph loop 的实现。

持久目标(/goal

/goal 为 Hermes 设置一个跨轮次持续存在的目标。每轮结束后一个轻量级裁判模型会检查目标是否已被助手的最新回复满足。若未满足Hermes 会自动将一条续行 prompt提示词注入同一会话并继续工作——直到目标达成、你暂停或清除目标或者轮次预算耗尽为止。

这是我们对 Ralph loop 的实现,直接受 Eric TrautOpenAICodex CLI 0.128.0 的 /goal 中的启发。核心思路——跨轮次保持目标存活、不达成不停止——源自他们。此处的实现是独立的,并已适配 Hermes 的架构。

适用场景

当你希望 Hermes 自主迭代、无需每轮重新提示时,使用 /goal

  • "修复 src/ 中的所有 lint 错误,并验证 ruff check 通过"
  • "从仓库 Y 移植功能 X包含测试并让 CI 变绿"
  • "调查为何会话 ID 有时在中途压缩时发生漂移,并撰写报告"
  • "构建一个小型 CLI按 EXIF 日期重命名文件,然后对 photos/ 文件夹进行测试"

只需一轮即可完成的任务不需要 /goal否则你需要说三次"继续" 的任务,才是它的用武之地。

快速开始

/goal Fix every failing test in tests/hermes_cli/ and make sure scripts/run_tests.sh passes for that directory

你将看到:

  1. 目标已接受⊙ Goal set (20-turn budget): <your goal>
  2. 第 1 轮运行 — Hermes 开始工作,就像你发送了一条普通消息一样。
  3. 裁判运行 — 轮次结束后,裁判模型判定 donecontinue
  4. 若需要则触发循环 — 若为 continue,你将看到 ↻ Continuing toward goal (1/20): <judge's reason>Hermes 自动执行下一步。
  5. 终止 — 最终你会看到 ✓ Goal achieved: <reason>⏸ Goal paused — N/20 turns used

命令

命令 功能
/goal <text> 设置(或替换)持续目标。立即启动第一轮,无需再发送单独消息。
/goal/goal status 显示当前目标、状态及已用轮次。
/goal pause 停止自动续行循环,但不清除目标。
/goal resume 恢复循环(将轮次计数器重置为零)。
/goal clear 完全删除目标。

在 CLI 及所有 gateway 平台Telegram、Discord、Slack、Matrix、Signal、WhatsApp、SMS、iMessage、Webhook、API server 以及 Web 控制台)上行为完全一致。

目标进行中追加条件:/subgoal

目标激活期间,你可以使用 /subgoal <text> 追加额外的验收条件,而不会重置循环。每次调用会向目标的子目标列表添加一个编号条目;下一轮 agent 看到的续行 prompt 包含原始目标以及一个"用户在循环中途追加的额外条件"块,裁判 prompt 也会被重写,使裁判在判定时必须考虑所有子目标——只有原始目标所有子目标均满足时,目标才会被标记为完成。

命令 功能
/subgoal <text> 向活跃目标追加一个新条件。需要有活跃的 /goal
/subgoal(无参数) 显示当前编号子目标列表。
/subgoal remove <N> 删除第 N 个子目标(从 1 开始计数)。
/subgoal clear 删除所有子目标,但保留原始目标。

子目标与目标一起持久化存储在 SessionDB.state_meta 中,因此在 /resume 后依然有效。设置新的 /goal <text> 会替换目标并清空子目标列表;/goal clear 同样如此。

当你启动一个循环("修复失败的测试")后,中途发现还需要"为刚修复的 bug 添加回归测试"时,使用此功能——/subgoal add a regression test 可在不中断运行循环的情况下收紧成功条件。

行为细节

裁判

每轮结束后Hermes 会调用一个辅助模型,传入:

  • 持续目标文本
  • agent 最新的最终回复(最后约 4 KB 文本)
  • 一个系统 prompt要求裁判以严格 JSON 格式回复:{"done": <bool>, "reason": "<one-sentence rationale>"}

裁判刻意保守:只有当回复明确确认目标已完成、最终交付物已清晰产出,或目标不可达/被阻塞时(视为 DONE 并附带阻塞原因,以免在不可能的任务上消耗预算),才会将目标标记为 done

失败开放语义

若裁判出错网络抖动、响应格式错误、辅助客户端不可用Hermes 将判定视为 continue——损坏的裁判不会阻塞进度。轮次预算才是真正的兜底机制。

轮次预算

默认为 20 个续行轮次(config.yaml 中的 goals.max_turns。预算耗尽时Hermes 自动暂停并告知你如何继续:

⏸ Goal paused — 20/20 turns used. Use /goal resume to keep going, or /goal clear to stop.

/goal resume 将计数器重置为零,你可以按可控的块继续推进。

用户消息始终优先

目标激活期间,你发送的任何真实消息都优先于续行循环。在 CLI 上,你的消息会在队列中的续行消息之前进入 _pending_input;在 gateway 上,它以同样的方式通过适配器 FIFO 传递。你的轮次结束后裁判会再次运行——因此如果你的消息恰好完成了目标,裁判会捕获到并停止循环。

运行中安全性gateway

agent 正在运行时,/goal status/goal pause/goal clear 可以安全执行——它们只操作控制面状态,不会中断当前轮次。在运行中设置目标(/goal <new text>)会被拒绝,并提示你先执行 /stop,以防旧续行与新目标产生竞争。

持久化

目标状态存储在 SessionDB.state_meta 中,以 goal:<session_id> 为键。这意味着 /resume 可以从你离开的地方继续——设置目标、合上笔记本、明天回来、执行 /resume,目标依然完好如初(活跃、暂停或已完成)。

Prompt 缓存

续行 prompt 是一条以用户角色追加到历史记录中的普通消息。它不会修改系统 prompt、切换工具集也不会以任何使 Hermes prompt 缓存失效的方式改动对话。运行一个 20 轮目标,在缓存层面与 20 轮普通对话的开销相同。

配置

~/.hermes/config.yaml 中添加:

goals:
  # Hermes 自动暂停并要求你执行 /goal resume 之前的最大续行轮次。
  # 默认 20。若想要更紧凑的循环可降低此值
  # 长时间重构可适当提高。
  max_turns: 20

选择裁判模型

裁判使用 goal_judge 辅助任务。默认情况下,它解析为你的主模型(参见辅助模型)。若想将裁判路由到廉价快速的模型以降低成本,可添加覆盖配置:

auxiliary:
  goal_judge:
    provider: openrouter
    model: google/gemini-3-flash-preview

裁判调用量小(约 200 个输出 token每轮运行一次因此廉价快速的模型通常是正确选择。

示例演练

You: /goal Create four files /tmp/note_{1..4}.txt, one per turn, each containing its number as text

  ⊙ Goal set (20-turn budget): Create four files /tmp/note_{1..4}.txt, one per turn, each containing its number as text

Hermes: Creating /tmp/note_1.txt now.
  💻 echo "1" > /tmp/note_1.txt   (0.1s)
  I've created /tmp/note_1.txt with the content "1". I'll continue with the remaining files on the next turn as you specified.

  ↻ Continuing toward goal (1/20): Only 1 of 4 files has been created; 3 files remain.

Hermes: [Continuing toward your standing goal]
  💻 echo "2" > /tmp/note_2.txt   (0.1s)
  Created /tmp/note_2.txt. Two more to go.

  ↻ Continuing toward goal (2/20): 2 of 4 files created; 2 remain.

Hermes: [Continuing toward your standing goal]
  💻 echo "3" > /tmp/note_3.txt   (0.1s)
  Created /tmp/note_3.txt.

  ↻ Continuing toward goal (3/20): 3 of 4 files created; 1 remains.

Hermes: [Continuing toward your standing goal]
  💻 echo "4" > /tmp/note_4.txt   (0.1s)
  All four files have been created: /tmp/note_1.txt through /tmp/note_4.txt, each containing its number.

  ✓ Goal achieved: All four files were created with the specified content, completing the goal.

You: _

四轮,一次 /goal 调用,你零次"继续"提示。

裁判判断有误时

没有裁判是完美的。需注意两种失败模式:

假阴性——目标实际已完成,裁判却说继续。 轮次预算会兜底。你会看到 ⏸ Goal paused,可以执行 /goal clear 或直接发送新消息。

假阳性——工作尚未完成,裁判却说已完成。 你会看到 ✓ Goal achieved,但你知道实际情况并非如此。发送后续消息继续,或更精确地重新设置目标:/goal <更具体的文本>。裁判的系统 prompt 刻意保守,以使假阳性比假阴性更少出现。

如果你觉得某次裁判判定不可信,↻ Continuing toward goal✓ Goal achieved 行中的原因文本会告诉你裁判看到了什么。这通常足以诊断出是目标文本存在歧义,还是模型的回复有问题。

致谢

/goal 是 Hermes 对 Ralph loop 模式的实现。面向用户的设计——跨轮次保持目标存活、不达成不停止,以及创建/暂停/恢复/清除控制——由 OpenAI Codex 团队的 Eric Traut 在 Codex CLI 0.128.0 中推广并落地。我们的实现是独立的(中央 CommandDef 注册表、SessionDB.state_meta 持久化、辅助客户端裁判、gateway 侧的适配器 FIFO 续行),但这个想法源自他们。功劳归于应得之人。