Mục tiêu bền vững (
/goal
) /goal ` mang lại cho Hermes một mục tiêu thường trực tồn tại qua các lượt. Sau mỗi lượt, mô hình giám khảo hạng nhẹ sẽ kiểm tra xem mục tiêu có được đáp ứng bởi phản hồi cuối cùng của trợ lý hay không. Nếu không, Hermes sẽ tự động đưa lời nhắc tiếp tục trở lại cùng một phiên và tiếp tục hoạt động — cho đến khi đạt được mục tiêu, bạn tạm dừng hoặc xóa mục tiêu đó hoặc hết ngân sách theo lượt.
Đó là nỗ lực của chúng tôi về vòng lặp Ralph, được lấy cảm hứng trực tiếp từ Codex CLI 0.128.0's XPROTECTX7XPROTECTX của Eric Traut (OpenAI). Ý tưởng cốt lõi — duy trì mục tiêu qua nhiều lượt và không dừng lại cho đến khi đạt được — là của họ. Việc triển khai ở đây độc lập và thích ứng với kiến trúc của Hermes.
Khi nào nên sử dụng nó
Sử dụng
/goal ` cho các tác vụ mà bạn muốn Hermes tự lặp lại mà không cần bạn phải nhắc lại mỗi lượt:
- "Khắc phục mọi lỗi lint trong
src/và xác minh các lượt vượt qua `ruff check
"
- "Cổng tính năng X từ repo Y, bao gồm các bài kiểm tra và nhận CI xanh"
- "Điều tra lý do tại sao ID phiên đôi khi bị trôi khi nén giữa chừng và viết báo cáo"
- "Xây dựng một CLI nhỏ để đổi tên tệp theo ngày EXIF của chúng, sau đó kiểm tra nó với ảnh/thư mục"
Các nhiệm vụ mà tác nhân thực hiện một lượt và dừng không cần
/goal
. Những nhiệm vụ mà bạn sẽ phải nói "tiếp tục" ba lần là nơi điều này tỏa sáng.
Bắt đầu nhanh
` /goal Fix every failing test in tests/Hermes_CLI/ and make sure scripts/run_tests.sh passes for that directory
` ``Những gì bạn sẽ thấy:
- Mục tiêu được chấp nhận —
⊙ Goal set (20-turn budget): <your goal>
- Turn 1 run — Hermes bắt đầu hoạt động như thể bạn gửi bàn thắng dưới dạng tin nhắn bình thường.
- Trọng tài chạy — sau lượt, mô hình trọng tài quyết định
donehoặc `Continue
. 4. Vòng lặp kích hoạt nếu cần — nếu `Continue
, bạn sẽ thấy
↻ Continuing toward goal (1/20): <judge's reason ` và Hermes tự động thực hiện bước tiếp theo. 5. Chấm dứt — cuối cùng bạn sẽ thấy
✓ Goal achieved: <reason ` hoặc
⏸ Goal paused — N/20 turns used
.
Lệnh
| Lệnh | Nó làm gì |
|---|---|
/goal <text ` | Đặt (hoặc thay thế) mục tiêu thường trực. Bắt đầu lượt đầu tiên ngay lập tức nên bạn không cần phải gửi tin nhắn riêng. | |
/goal ` hoặc
/goal status ` | Hiển thị mục tiêu hiện tại, trạng thái và lượt sử dụng. | |
/goal pause ` | Dừng vòng lặp tự động tiếp tục mà không hoàn thành mục tiêu. | |
/goal resume ` | Tiếp tục vòng lặp (đặt lại bộ đếm quay về 0). | |
/goal clear ` | Hãy vứt bỏ mục tiêu hoàn toàn. |
Hoạt động giống hệt nhau trên CLI và mọi nền tảng cổng (Telegram, Discord, Slack, Matrix, Signal, WhatsApp, SMS, iMessage, Webhook, máy chủ API và bảng điều khiển web).
Thêm tiêu chí vào giữa mục tiêu:
/subgoal ``Trong khi mục tiêu đang hoạt động, bạn có thể thêm tiêu chí chấp nhận bổ sung với
/subgoal <text> ` mà không cần đặt lại vòng lặp. Mỗi lệnh gọi sẽ thêm một mục được đánh số vào danh sách mục tiêu phụ của mục tiêu; lời nhắc tiếp tục mà nhân viên hỗ trợ nhìn thấy ở lượt tiếp theo bao gồm mục tiêu ban đầu cùng với khối "Tiêu chí bổ sung mà người dùng đã thêm vào giữa vòng lặp" và lời nhắc của thẩm phán được viết lại để phán quyết phải xem xét mọi mục tiêu phụ — mục tiêu không được đánh dấu là hoàn thành cho đến khi đạt được mục tiêu ban đầu và mọi mục tiêu phụ.
| Lệnh | Nó làm gì |
|---|---|
/subgoal <text ` | Thêm một tiêu chí mới vào mục tiêu đang hoạt động. Yêu cầu
/goal ` hoạt động. | |
/subgoal ` (không có đối số) | Hiển thị danh sách mục tiêu phụ được đánh số hiện tại. | |
/subgoal remove <N ` | Xóa mục tiêu phụ thứ N (dựa trên 1). | |
/subgoal clear ` | Bỏ đi mọi mục tiêu phụ nhưng vẫn giữ nguyên mục tiêu ban đầu. |
Các mục tiêu phụ được duy trì cùng với mục tiêu trong `SessionDB.state_meta
, vì vậy chúng tồn tại trong
/resume
. Đặt
/goal <text> ` mới sẽ thay thế mục tiêu và xóa danh sách mục tiêu phụ;
/goal clear ` cũng làm như vậy.
Sử dụng điều này khi bạn bắt đầu một vòng lặp ("sửa các bài kiểm tra không thành công") và nhận thấy giữa chừng rằng bạn cũng muốn nó "và thêm bài kiểm tra hồi quy cho lỗi bạn vừa vá" -
/subgoal add a regression test ` thắt chặt các tiêu chí thành công mà không phá vỡ vòng lặp đang chạy.
Chi tiết hành vi
Thẩm phán
Sau mỗi lượt, Hermes gọi một mẫu phụ với:
- Văn bản mục tiêu thường trực
- Phản hồi cuối cùng gần đây nhất của nhân viên hỗ trợ (~4 KB văn bản cuối cùng)
- Lời nhắc của hệ thống yêu cầu trọng tài trả lời bằng JSON nghiêm ngặt:
{"done": <bool, "reason": "<one-sentence rationale"}
Thẩm phán thận trọng một cách có chủ ý: nó chỉ đánh dấu mục tiêu done
` khi phản hồi rõ ràng xác nhận mục tiêu đã hoàn thành, khi sản phẩm bàn giao cuối cùng được đưa ra rõ ràng hoặc khi mục tiêu không thể đạt được/bị chặn (được coi là HOÀN THÀNH với lý do chính đáng để chúng tôi không đốt ngân sách cho những nhiệm vụ không thể thực hiện được).
Ngữ nghĩa mở lỗi
Nếu thẩm phán mắc lỗi (lỗi mạng, phản hồi không đúng định dạng, ứng dụng phụ không khả dụng), Hermes sẽ coi phán quyết là `Continue
- một thẩm phán hỏng không bao giờ cản trở sự tiến bộ. Ngân sách quay vòng là điểm dừng chân thực sự.
Chuyển ngân sách
Mặc định là 20 lượt tiếp tục (
goals.max_turns trong
`config.yaml
). Khi đạt đến ngân sách, Hermes sẽ tự động tạm dừng và cho bạn biết chính xác cách tiến hành:
` ⏸ Goal paused — 20/20 turns used. Use /goal resume to keep going, or /goal clear to stop.
`
/goal resume ` đặt lại bộ đếm về 0, do đó bạn có thể tiếp tục thực hiện theo từng phần đã đo.
Tin nhắn của người dùng luôn được ưu tiên trước
Bất kỳ tin nhắn thực nào bạn gửi trong khi mục tiêu đang hoạt động đều được ưu tiên trong vòng lặp tiếp tục. Trên CLI, tin nhắn của bạn sẽ xuất hiện ở
_pending_input trước khi tiếp tục được xếp hàng đợi; trên cổng nó đi qua bộ chuyển đổi FIFO theo cách tương tự. Trọng tài sẽ chạy lại sau lượt của bạn - vì vậy nếu tin nhắn của bạn hoàn thành mục tiêu, trọng tài sẽ bắt kịp và dừng lại.
An toàn giữa chặng (cửa ngõ)
Trong khi một tác nhân đang chạy,
/goal status
,
/goal pause ` và
/goal clear ` vẫn an toàn để chạy — chúng chỉ chạm vào trạng thái mặt phẳng điều khiển và không làm gián đoạn lượt hiện tại. Việc đặt mục tiêu mới trong thời gian chạy (
/goal <new text
) bị từ chối kèm theo thông báo yêu cầu bạn thực hiện
/stop ` trước, vì vậy phần tiếp theo cũ không thể chạy đua với mục tiêu mới.
Kiên trì
Trạng thái mục tiêu tồn tại ở
SessionDB.state_meta được khóa bởi
`goal:<session_id
. Điều đó có nghĩa là
/resume ` sẽ tiếp tục ngay từ nơi bạn đã dừng lại — đặt mục tiêu, đóng máy tính xách tay của bạn, quay lại vào ngày mai,
/resume ` và mục tiêu vẫn giữ nguyên như cũ (đang hoạt động, đã tạm dừng hoặc đã hoàn tất).
Bộ nhớ đệm nhắc nhở
Lời nhắc tiếp tục là một thông báo vai trò người dùng đơn giản được thêm vào lịch sử. Nó không làm thay đổi lời nhắc hệ thống, hoán đổi bộ công cụ hoặc chạm vào cuộc trò chuyện theo bất kỳ cách nào làm mất hiệu lực bộ nhớ đệm lời nhắc của Hermes. Việc thực hiện mục tiêu 20 lượt sẽ tốn bộ nhớ đệm tương đương với 20 lượt trò chuyện thông thường.
Cấu hình
Thêm vào
~/.Hermes/config.yaml
:
goals:
# Max continuation turns before Hermes auto-pauses and asks you to
# /goal resume. Default 20. Lower this if you want tighter loops;
# raise it for long-running refactors.
max_turns: 20
`
### Lựa chọn mẫu giám khảo
Trọng tài sử dụng nhiệm vụ phụ trợ
`goal_judge
. Theo mặc định, nó phân giải thành mô hình chính của bạn (xem [Auxiliary Models](/docs/user-guide/configuration#auxiliary-models)). Nếu bạn muốn định hướng đánh giá đến một mô hình nhanh giá rẻ để giảm chi phí, hãy thêm phần ghi đè:
``` yaml
auxiliary:
goal_judge:
provider: OpenRouter
model: Google/Gemini-3-flash-preview
`
``Lệnh gọi thẩm phán có quy mô nhỏ (~200 mã thông báo đầu ra) và chạy một lần mỗi lượt, do đó, mô hình nhanh giá rẻ thường là lệnh gọi phù hợp.
## Hướng dẫn ví dụ
`
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: _
`
``Bốn lượt, một lệnh gọi
/goal
, không có lời nhắc "tiếp tục" nào từ bạn.
## Khi trọng tài làm sai
Không có thẩm phán nào là hoàn hảo. Hai chế độ lỗi cần theo dõi:
**Phủ định sai — thẩm phán nói tiếp tục khi mục tiêu thực sự được hoàn thành.** Ngân sách theo lượt nắm bắt được điều này. Bạn sẽ thấy
⏸ Goal paused
` và có thể
/goal clear
` hoặc chỉ cần gửi tin nhắn mới.
**Dương tính giả — thẩm phán nói đã hoàn thành khi công việc vẫn còn.** Bạn sẽ thấy
✓ Goal achieved
` nhưng bạn biết rõ hơn. Gửi tin nhắn tiếp theo để tiếp tục hoặc đặt lại mục tiêu chính xác hơn:
/goal <more specific text
. Hệ thống nhắc nhở của thẩm phán có chủ ý thận trọng để khiến kết quả dương tính giả hiếm gặp hơn âm tính giả.
Nếu bạn thấy phán quyết của thẩm phán không thuyết phục thì văn bản lý do trong dòng
↻ Continuing toward goal
` hoặc
✓ Goal achieved
` sẽ cho bạn biết chính xác những gì thẩm phán đã nhìn thấy. Điều đó thường đủ để chẩn đoán xem văn bản mục tiêu có mơ hồ hay phản hồi của mô hình là mơ hồ hay không.
## Ghi công
/goal
` là mẫu **Vòng lặp Ralph** của Hermes. Thiết kế hướng tới người dùng — duy trì mục tiêu trong nhiều lượt, không dừng lại cho đến khi đạt được mục tiêu đó, với các điều khiển tạo/tạm dừng/tiếp tục/xóa — đã được Eric Traut trong nhóm Codex của OpenAI phổ biến và triển khai trong [Codex CLI 0.128.0](https://GitHub.com/OpenAI/Codex). Việc triển khai của chúng tôi là độc lập (đăng ký
`CommandDef
` trung tâm, tính bền bỉ của
`SessionDB.state_meta
, đánh giá khách hàng phụ trợ, tiếp tục bộ điều hợp-FIFO ở phía cổng) nhưng ý tưởng là của họ. Tín dụng khi tín dụng đến hạn.