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:
❯ /stop- a flow runningctrl+c stop
- one press, waitingctrl+c again to stop
- the flow stoppingctrl+c force stop
- nothing runningctrl+c exit
- one press, waitingctrl+c again to exit
- 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.
/epicslists it that way, and a flow that can be picked up is markedresumable.
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:
A turn is open. The last key on the status line says what the next press does.
What to look at, by number:
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 readsctrl+c clear.- 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.
— stopping the flow —. The second press. The flow has been told to stop, for everybody reading the run, not just this terminal.- The yellow
●line. Humanize saying what it is doing about the turn: cutting it off. It shows even with details off. 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.- 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 isctrl+c exitonce 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./epicslists the run at the top, markedstopped:text╭──────────────────────────────────────────────────────────────────────────╮ │ 2026-09-30 05:36 · ralph_loop Run the test suite until it is green. Do │ │ not commit. · 4 sessions · stopped │ │ … │ ╰──────────────────────────────────────────────────────────────────────────╯git diffshows what the agent changed before it was cut off. Look for half-written files.
The ways to stop
| Where | How | |
|---|---|---|
| ctrl+c ctrl+c | at the prompt | Two presses within 3 seconds. The first only warns. |
/stop | at the prompt, on any transcript or the monitor | Sent 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 stop | on the epic's page: enter on ◫ epic on the monitor | Each asks first. Force stop replaces Stop while the flow winds down. Not on a chat. |
| ctrl+c | on an hmz exec line | One press. |
| a budget | -p budget.… on hmz exec, or what an epic may spend in /flow | Nothing to press: the run stops itself when the budget is spent. See Allowances. |
What the next ctrl+c does
| The status line ends with | The next press |
|---|---|
ctrl+c clear | Clears what you have typed. Nothing else happens. |
ctrl+c stop | Warns: — press ctrl+c again to stop the flow — |
ctrl+c again to stop | Stops the flow. |
ctrl+c force stop | Closes the agents still in a turn, without waiting for the flow to wind down. |
ctrl+c exit | Warns: — press ctrl+c again to exit — |
ctrl+c again to exit | Quits 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:
╭────────────────────────────────────────────────────────────────╮ │ │ │ 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 │ │ ╰────────────────────────────────────────────────────────────────╯
- The question only appears while a flow runs. With nothing running,
/exitcloses at once. - Stop the flow and exit, the button with the focus as the box opens, stops it for everybody, as
/stopand ctrl+c twice do, then closes this terminal'shmz. - Detach and exit lets the flow carry on without your terminal, and without letting go of anybody else reading it. Run
hmzagain in the same directory to get back to it, as the line under the question says. See Leaving it running. - 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:
❯ /resume
resuming 20260930T054202.927Z-a5d31a: running stateful_ralph from saved state
● agent is workingralph_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 leaveshmz. /stopis not offered. Typed anyway, it sayshmz: a chat is not stopped: /clear ends it./clearends the chat: the next line you type starts another./exitand 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. |
| esc | Puts away a list or a menu, or leaves btw mode. The flow keeps running. |
/clear | Clears the transcript you are reading. The flow keeps running; a chat ends. |
| a line you type | Goes into the running turn. See Talking to a running turn. |
| a question the flow asked you | Ends with the flow when it stops. It never holds a stop up. |
a second /stop | No 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
durationorcostin/flow, or-p budget.duration=orbudget.cost=onhmz exec, and it stops itself. Withgracefulon, the turn that is running finishes first. See Every run has a budget. - Stop from another terminal. Run
hmzin 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 execline. 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
- Picking a run up: carrying on from where a stop left it.
- Leaving it running: walk away without stopping it.
- Talking to a running turn: when a word in its ear is enough.
- Being away: keep a run you left from waiting on you.
- TUI reference: every key and command.