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
你會看到:
- 目標已接受 —
⊙ Goal set (20-turn budget): <你的目標> - 第 1 回合執行 — Hermes 開始工作,就像你把目標當作一般訊息發送一樣。
- 判斷模型運行 — 回合結束後,判斷模型決定
done或continue。 - 必要時觸發迴圈 — 如果是
continue,你會看到↻ Continuing toward goal (1/20): <判斷理由>,Hermes 自動執行下一步。 - 終止 — 最終你會看到
✓ 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 延續),但概念源自他們。功勞歸功於原創者。