Skip to content

Stopping ​

Press ctrl+c twice, or send /stop. The whole flow stops, not just the turn it is in. Most flows are loops that never end on their own, so this, or a budget, is how they end.

At a glance

  • You will end a run by hand, and know what state it leaves your files and the run in.
  • Use it when the work is done, the run has gone the wrong way, or it is spending more than it is worth.
  • You need a flow running in hmz. Your first run starts one.

Try it ​

With nothing typed at the prompt, press ctrl+c, then ctrl+c again within 3 seconds. Or type:

text
❯ /stop
What the next ctrl+c doesa simulation: nothing runs
❯$ralph_loop fix the flaky test
●coder Read tests/test_pay.py
●coder Bash pytest -q tests/test_pay.py
❯
·|· ralph_loop · coder working/ commands · shift+enter newline · ← monitor · ctrl+c stop
  1. a flow runningctrl+c stop
  2. one press, waitingctrl+c again to stop
  3. the flow stoppingctrl+c force stop
  4. nothing runningctrl+c exit
  5. one press, waitingctrl+c again to exit
  6. hmz has quit$

A flow is running. Press ctrl+c and watch the last key on the status line.

How it works ​

ctrl+c always does the nearest thing there is to take back, and the last entry on the status line under the prompt says what that is. While you are typing, it clears your line. While a flow runs, it stops the flow, but only on the second press, so a key pressed by accident costs nothing. With nothing running, it leaves hmz, also on the second press.

A stop is not an undo. It ends the run where it is:

  • The turn is cut off where it is. The agent's CLI stops, along with anything it had started. A file the agent was halfway through writing stays halfway written.
  • The flow winds down in its own time. A loop finishes its round and what it opened is closed. Until it is done, the status line ends with ctrl+c force stop, and one more press closes the agents without waiting.
  • The run is recorded as stopped, not as finished. /epics lists it that way, and a flow that can be picked up is marked resumable.

Example: stop a loop with ctrl+c ​

A ralph_loop run is working on a test suite, and you have seen enough. Step through the four moments of stopping it:

hmz · ralph_loopdrawn, not recorded
─ reading agent ─
❯ Run the test suite until it is green. Do not commit.
● agent is working
agent · claude/claude-haiku-4-5-20251001:high · ● 1
$0.02 · 28 out/s
❯
·|· agent… (23s · ctrl+c twice to stop)/ commands · shift+enter newline · ← monitor · ctrl+c stop1

A turn is open. The last key on the status line says what the next press does.

What to look at, by number:

  1. ctrl+c stop. The last key on the status line. It is what the next press does, and it changes with what is on the screen: with something typed it reads ctrl+c clear.
  2. The warning. The first press only says what the second will do. Wait more than 3 seconds and the next press is a first press again.
  3. — stopping the flow —. The second press. The flow has been told to stop, for everybody reading the run, not just this terminal.
  4. The yellow ● line. Humanize saying what it is doing about the turn: cutting it off. It shows even with details off.
  5. ctrl+c force stop. The flow is winding down. A third press closes every agent still in a turn without waiting. You rarely need it.
  6. The status line back at rest. ◉ and the flow's name mean nothing is running, and enter on a task starts the flow again. The last key is ctrl+c exit once more.

Check it worked ​

  • The status line reads ◉ <flow> · <directory>, with no clock after it.

  • Each agent's line above the editor shows ○: nothing has a turn open.

  • /epics lists the run at the top, marked stopped:

    text
    ╭──────────────────────────────────────────────────────────────────────────╮
    │ 2026-09-30 05:36 · ralph_loop Run the test suite until it is green. Do   │
    │                               not commit. · 4 sessions · stopped         │
    │ …                                                                        │
    ╰──────────────────────────────────────────────────────────────────────────╯
  • git diff shows what the agent changed before it was cut off. Look for half-written files.

The ways to stop ​

WhereHow
ctrl+c ctrl+cat the promptTwo presses within 3 seconds. The first only warns.
/stopat the prompt, on any transcript or the monitorSent once. You typed it out on purpose, so it is not asked twice. Offered only while a flow runs and is not already stopping. Typed otherwise, it says why it did nothing.
Stop, then Force stopon the epic's page: enter on ◫ epic on the monitorEach asks first. Force stop replaces Stop while the flow winds down. Not on a chat.
ctrl+con an hmz exec lineOne press.
a budget-p budget.… on hmz exec, or what an epic may spend in /flowNothing to press: the run stops itself when the budget is spent. See Allowances.

What the next ctrl+c does ​

The status line ends withThe next press
ctrl+c clearClears what you have typed. Nothing else happens.
ctrl+c stopWarns: — press ctrl+c again to stop the flow —
ctrl+c again to stopStops the flow.
ctrl+c force stopCloses the agents still in a turn, without waiting for the flow to wind down.
ctrl+c exitWarns: — press ctrl+c again to exit —
ctrl+c again to exitQuits hmz.

A press more than 3 seconds after the last one starts over from the top, and so does a press after a /stop.

esc never stops anything, and neither does ←, which goes up to the monitor.

Leaving hmz ​

/exit, or ctrl+q, leaves. With nothing running, it just closes. With a flow running, it asks first:

/exitdrawn, not recorded
  ╭────────────────────────────────────────────────────────────────╮
  │                                                                │
  │  A flow is running.                                            │ 1
  │  Detached, it keeps running: run `hmz` here to reattach.       │
  │                                                                │
  │  Stop the flow and exit   Detach and exit                      │ 2 3
  │                                                                │
  │  enter stop   esc stay                                         │ 4
  │                                                                │
  ╰────────────────────────────────────────────────────────────────╯
  1. The question only appears while a flow runs. With nothing running, /exit closes at once.
  2. Stop the flow and exit, the button with the focus as the box opens, stops it for everybody, as /stop and ctrl+c twice do, then closes this terminal's hmz.
  3. Detach and exit lets the flow carry on without your terminal, and without letting go of anybody else reading it. Run hmz again in the same directory to get back to it, as the line under the question says. See Leaving it running.
  4. esc stays, with the flow untouched, and so does a click outside the box.

← → or tab move between the buttons, and enter presses the one with the focus. A click presses one too.

When Humanize cannot hold the run apart from the terminal (input or output is not a terminal, or HUMANIZE_DAEMON=off is set), the second button is Cancel instead, and the line under the question is not there.

After a stop ​

Pick the run up with /resume, or with the same hmz exec line plus --resume. This works for a flow that says it can be picked up, such as stateful_ralph. It carries on with the same flow, agents and task, from where the stop left it:

text
❯ /resume
resuming 20260930T054202.927Z-a5d31a: running stateful_ralph from saved state
● agent is working

ralph_loop cannot be picked up: it keeps nothing but your files, so starting it again with the same task carries it on.

See Picking a run up.

Choose another flow once this one has stopped. While a flow runs, /flow <name> and a $name line are refused. /flow on its own opens the agents of the running flow instead. What you save there is what the next run starts with; the running one keeps what it started with.

A chat is not stopped ​

chat, the flow hmz opens on, is one conversation and reads as Claude Code does. Its status line says running while the assistant answers and done once it waits for you, and nothing on it stops the chat:

  • ctrl+c clears the line. On an empty one, it says — press ctrl+c again to exit —, and a second press leaves hmz.
  • /stop is not offered. Typed anyway, it says hmz: a chat is not stopped: /clear ends it.
  • /clear ends the chat: the next line you type starts another.
  • /exit and ctrl+q leave without asking.

There is no monitor, no shift+tab between views, and no Exomyth in /epics for a chat either: the transcript is the whole of it.

What does not stop a flow ​

What it does instead
←With nothing typed, goes up to the monitor.
escPuts away a list or a menu, or leaves btw mode. The flow keeps running.
/clearClears the transcript you are reading. The flow keeps running; a chat ends.
a line you typeGoes into the running turn. See Talking to a running turn.
a question the flow asked youEnds with the flow when it stops. It never holds a stop up.
a second /stopNo longer offered. Typed anyway, says hmz: the flow is already stopping: …. A ctrl+c is what hurries it.

Variations ​

  • Stop at a budget, not by hand. Give the run a duration or cost in /flow, or -p budget.duration= or budget.cost= on hmz exec, and it stops itself. With graceful on, the turn that is running finishes first. See Every run has a budget.
  • Stop from another terminal. Run hmz in the same directory: it opens on the running flow. Then stop it there. See Leaving it running.
  • Stop an unattended run. One ctrl+c on the hmz exec line. See Run it unattended.

Troubleshooting ​

It still says ctrl+c force stop long after I stopped it ​

The flow is winding down: a loop finishing its round, or a backend slow to notice its turn was cut off. Press ctrl+c once more to close every agent still in a turn. The line — closed 1 conversation(s) mid-turn — says how many it closed.

hmz: cannot resume an epic while the flow is still stopping: it is finishing the turn it was in ​

A run is picked up from where it wrote down it got to, and it is still writing that. Wait until the status line reads ◉ <flow>, or press ctrl+c to end the wait, then /resume again.

hmz: cannot resume an epic while a flow is running: press ctrl+c twice to stop it first ​

/resume picks up a run that has stopped. Stop the one that is running first.

hmz: cannot choose a flow while one is running ​

/flow <name> and $name would swap the flow out from under its agents. Stop the run first, then choose. /flow on its own still opens the running flow's agents, for the next run.

hmz: no flow is running ​

/stop was typed with nothing to stop. To leave hmz, use /exit.

The first ctrl+c cleared my line instead of warning ​

With text in the editor, ctrl+c clears it and does nothing else; the status line said ctrl+c clear. Press it twice more with the editor empty.

If you write flows

A stop reaches your flow as a cancellation, not as a failed turn. Code that catches failed turns does not catch it, and it should not be caught: let it through, so the run is recorded as stopped. To cap one turn rather than the whole run, give that turn a budget of its own. Loops shows a loop written this way.

Next steps ​

Released under the Apache-2.0 licence.