Hermes Agent goals and loops: keep it working on its own

When to use /goal to keep working until something is done, /loop to repeat a check on a timer, and cron for work that must run when you are away.

Docs-backed3 min read · Reviewed Oct 20, 2026

Three ways to keep work moving

Hermes has two in-session commands for work that takes more than one turn, and they're easy to confuse. /goal is judge-driven: after each turn a small judge model checks whether the objective is met, and if it isn't, Hermes continues automatically. /loop is timer-driven: it re-runs a prompt every few minutes until a stop condition fires. Both live inside your current session. For anything that has to run unattended, survive restarts, or happen while you're away, use a cron job instead. Kanban is a separate tool again, a board of many tasks handed to worker processes, and /goal never creates kanban cards.

Setting a goal that can actually finish

/goal <text> sets the objective and starts the first turn right away. You'll see a continuation line after each turn until the judge declares it achieved, or the goal pauses. The default budget is 20 continuation turns (goals.max_turns). When it runs out, the goal pauses, and /goal resume starts a fresh budget.

A vague goal gets judged vaguely, so give it a completion contract. Either let Hermes draft one with /goal draft <text>, or add lines such as verify:, constraints:, boundaries: and stop when: beneath the headline. With a contract, the judge only marks the goal done when there's concrete evidence, such as a passing command or test output. For a mechanical check, add a quality gate with /goal gate add <command>. The gate has to exit 0 before the judge is even asked, and a failing gate's output becomes the next instruction.

  • /goal status shows progress, /goal pause and /goal resume stop and restart the loop, and /goal clear drops the goal.
  • /subgoal <text> adds another acceptance criterion partway through without restarting.
  • If the judge decides the goal can't be achieved, the goal pauses with a reason instead of being marked done.
  • Anything you type takes priority over the automatic continuation.

Loops for polling and monitoring

/loop 5m check the deploy status and tell me if it's live yet runs once straight away, then every five minutes. Leave out the interval and the loop paces itself: it starts at one minute and backs off up to 15 minutes while the replies don't change. A rule of thumb from the docs: use a fixed interval when an outside clock drives the work, and self-pacing when the work sets the rhythm. You can also loop a slash command, for example /loop 10m /recap.

Always give a loop a way to end. --times N caps the number of runs. --until <condition> asks the same judge that /goal uses whether the condition is met. The agent can also end its reply with LOOP_COMPLETE, and /loop stop ends it immediately. As a backstop, loops.max_ticks (default 100) pauses any loop that runs too long. Each tick is a full agent turn, so match the interval to how often the thing you're watching actually changes.

How they interact

Each session has one loop and one goal. While a goal is actively continuing, loop wakeups wait. They resume when the goal finishes, pauses, or parks on a background process. That makes a parked goal plus a loop a useful pairing: the goal waits on a long CI run while the loop keeps an eye on something else. Both survive /resume and context compression. Neither changes the system prompt, so prompt caching keeps working.

Keeping the judge cheap

The judge runs once per turn and is small, about 200 output tokens. By default it uses your main model. To save money, route it to a fast, cheap model under auxiliary.goal_judge in config.yaml, with a provider and model. That setting also applies to /loop --until conditions. Both commands work in the CLI, the TUI, the desktop app, dashboard chat and messaging platforms. On a messaging platform, the gateway fires loop wakeups between your messages and posts the results as normal replies.

Primary sources

Spotted something wrong or out of date? Tell us on X at @HermesWatcher (opens in a new tab) and we will fix it.

New Hermes Agent updates every day on X. Follow @HermesWatcher

Liked this guide?

Every Hermes Agent change that matters, explained in five minutes.

We'll only use your email to send the newsletter. Unsubscribe anytime. Privacy