Skip to content

chat ​

Talk to one coding agent, with no loop around it: it answers, and what you type back is its next turn. It is the one flow that needs no budget, and the one hmz opens on in a new project, so there typing a line is all it takes to start. Once you have run another flow, $chat brings you back.

ships with humanize

Nothing to install: it is in hmz from the first run, with chat and the other loops, and its code is humanize's flows/builtin/chat.

text
❯ $chat what does this repository do?
sh
hmz exec -f chat -a assistant=claude/claude-opus-5:high "what does this repository do?"
chatsimulated

The whole run, at rest. Step through it with the buttons, or drag the bar.

Each answer comes to you, and what you type back is the next turn of the same session. Send nothing back — or run it under hmz exec, where nobody is at the prompt — and the run ends.

The run, turn by turn
  1. you — what you typed first; no turn of a model; hands assistant as words: the turn
  2. assistant — answers; a session opened for this turn; hands you as words: its answer
  3. you — what you type back; no turn of a model; hands assistant as words: the next turn
  4. assistant — answers, remembering; another turn of the session it already had; hands you as words: its answer
  5. you — nothing sent back; no turn of a model

Then round again: for as long as you answer.

It ends when you send nothing back.

Under hmz exec nobody is at the prompt to answer, so a run is a single turn: one question answered, or one task done.

Roles and params ​

RoleWhat it isHow it is filled
assistantagent, required-a assistant=…The agent you talk to. It may also search and read the web.
humanyoufilled by humanize; no -aThe person at the prompt.
workspaceenvironment, localthe directory you start in; no -eWhere the assistant reads and works.

Each agent role takes one -a role=CLI[@PROVIDER]/MODEL[:EFFORT]; several roles may share one -a, comma-separated. There is no -e to give: workspace is a local environment, the directory you start the run in, and an -e naming it is refused. See Command-line specs.

No params.

While you talk ​

  • Type while it works. The line goes to the agent, into the turn under way where its backend allows. See Talking to a running turn.
  • Answer its questions. When the agent stops to ask you something, the question comes to your prompt. This works on claude, codex, kimi and pi.
  • Keep several going. See Many conversations at once.

What ends it ​

  • Nothing comes back from you. At the prompt, that is /stop, or /afk, which answers for you with nothing. Under hmz exec, it is the end of the first turn.
  • The first turn fails. If the conversation cannot start at all, say because the backend refused the account or will not run the model, the run ends with what the backend said. After the first turn, a failed turn is reported to you and the conversation goes on.

Picking it up ​

chat keeps nothing for --resume: running it again starts a new conversation. To read an old one, export the run from /epics and open its trace.

The whole loop, for the curious

This is the heart of the flow, as humanize ships it:

python
conversation = await assistant.spawn()
person = await human.spawn()
said = task
while said:
    answered = await assistant.run(said, session=conversation)
    said = await human.run(answered, session=person)

Writing a flow starts from a loop like this one.

See also ​

  • ralph_loop: one agent, with a loop around it
  • goal: one agent that keeps going until it says it is done