H繁中版
<!-- Source: https://hermesbible.com/docs/user-guide/features/goals -->

Section: Core Features · URL: https://hermesbible.com/docs/user-guide/features/goals

持久化目標 (/goal)

/goal 為 Hermes 設定一個跨回合持續存在的目標。每個回合結束後,一個輕量級的判斷模型會檢查助理的最後回應是否已滿足目標。如果未滿足,Hermes 會自動將延續提示餵回同一個 session 並持續工作——直到目標達成、你暫停或清除目標,或回合預算用盡。

這是我們對 Ralph loop 的實作,直接啟發自 Eric Traut(OpenAI)的 Codex CLI 0.128.0 /goal。核心概念——讓目標跨回合持續存在並持續工作直到達成——源自他們。這裡的實作是獨立開發的,並針對 Hermes 的架構進行了適配。

何時使用

當你希望 Hermes 自行反覆執行、不需要每回合重新下指令時,使用 /goal

  • "修正 src/ 中所有的 lint 錯誤,並確保 ruff check 通過"
  • "將 repo Y 的 feature X 移植過來,包含測試,並讓 CI 通過"
  • "調查為什麼 session 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): <你的目標>
  2. 第 1 回合執行 — Hermes 開始工作,就像你把目標當作一般訊息發送一樣。
  3. 判斷模型運行 — 回合結束後,判斷模型決定 donecontinue
  4. 必要時觸發迴圈 — 如果是 continue,你會看到 ↻ Continuing toward goal (1/20): <判斷理由>,Hermes 自動執行下一步。
  5. 終止 — 最終你會看到 ✓ Goal achieved: <原因>⏸ 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 dashboard)上使用方式完全相同。

追加條件:/subgoal

在目標進行中,你可以用 /subgoal <text> 追加額外的驗收標準,而不會重設迴圈。每次呼叫會在目標的 subgoal 清單中新增一個編號項目;代理在下個回合看到的延續提示會包含原始目標加上「使用者在迴圈中追加的額外條件」區塊,而判斷提示也會重寫,讓判決必須考量每個 subgoal——目標不會標記為完成,直到原始目標加上每個 subgoal 都達成。

指令功能
/subgoal <text>向活躍目標追加新條件。需要有活躍的 /goal
/subgoal(無參數)顯示目前的編號 subgoal 清單。
/subgoal remove <N>移除第 N 個 subgoal(從 1 開始)。
/subgoal clear清除所有 subgoal,但保留原始目標。

Subgoal 與目標一起持久化在 SessionDB.state_meta 中,因此 /resume 後仍然存在。設定新的 /goal <text> 會替換目標並清除 subgoal 清單;/goal clear 也一樣。

當你啟動迴圈(「修正失敗的測試」)後中途發現還想要「順便為剛修的 bug 加一個回歸測試」時,就可以用這個功能——/subgoal add a regression test 能收緊成功標準而不打斷正在執行的迴圈。

行為細節

判斷模型

每個回合結束後,Hermes 會呼叫一個輔助模型,餵入:

  • 持久目標的文字
  • 代理最近的最終回應(最後約 4 KB 的文字)
  • 一個系統提示,要求判斷模型以嚴格 JSON 格式回覆:{"done": <bool>, "reason": "<一句話理由>"}

判斷模型刻意保守:只有在回應明確確認目標已完成、最終交付物已清楚產出、或目標無法達成/被阻擋時(視為已完成並附上阻擋理由,以免在不可能的任務上浪費預算),才會標記為 done

Fail-open 語意

如果判斷模型出錯(網路中斷、回應格式異常、輔助用戶端不可用),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)

當代理已在執行時,/goal status/goal pause/goal clear 可以安全運行——它們只會操作控制平面的狀態,不會中斷當前回合。在執行中設定目標(/goal <new text>)會被拒絕,並提示你先執行 /stop,這樣舊的延續就不會與新的產生競爭。

持久化

目標狀態儲存在 SessionDB.state_meta 中,以 goal:<session_id> 為鍵。這意味著 /resume 會從你離開的地方繼續——設定目標、關上筆電、明天回來、/resume,目標仍然維持你離開時的狀態(進行中、已暫停或已完成)。

Prompt 快取

延續提示是一個附加到歷史紀錄中的普通 user-role 訊息。它不會修改系統提示、替換工具集,或以任何方式改變對話而使 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),且每回合只執行一次,所以便宜快速的模型通常是正確的選擇。

範例 walkthrough

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 <更具體的文字>。判斷模型的系統提示刻意保守,讓假陽性比假陰性更少發生。

如果你覺得判斷模型的判決不具說服力,↻ Continuing toward goal✓ Goal achieved 行中的原因文字會告訴你判斷模型看到了什麼。這通常足以診斷目標文字是否模糊,或模型的回應是否有問題。

致謝

/goal 是 Hermes 對 Ralph loop 模式的實作。使用者介面設計——讓目標跨回合持續存在、持續工作直到達成,並提供建立/暫停/恢復/清除控制——由 Eric Traut 在 OpenAI 的 Codex 團隊中於 Codex CLI 0.128.0 推廣並實作。我們的實作是獨立的(中央 CommandDef 註冊表、SessionDB.state_meta 持久化、輔助用戶端判斷、gateway 端的適配器 FIFO 延續),但概念源自他們。功勞歸功於原創者。



Code Execution