Skip to content

chat

One agent, one session, and every line typed between turns is a turn of it — a coding agent with no loop around it, doing what it is told and then waiting to be told again. It is what the terminal interface opens on, so that saying something is all it takes to start.

sh
hmz exec -f chat -a claude/claude-opus-5:high "what does this repository do?"
chat
the agentone session throughoutyouand the one that ends itwhat you typedfirsta turna line typedbetween turns…the samesessionnothing typedfor as long as you answer

Saying something to the person is asking what to say next. Answered with nothing — a command line, nobody at the prompt — the flow does the one thing it was given and stops.

Two agents, and the second is you

chat drives an assistant and a person. Saying something to the person is asking what to say next, and what they answer with is what they typed:

python
conversation = agents.assistant.new()
said = task
opening = True
while said:
    answered = conversation(said, suppress=not opening)
    opening = False
    said = agents.human(answered)

Which is why the same flow works with nobody at a prompt: the person answers with nothing, the loop ends, and chat has done the one thing it was given. /afk and a shell script are the same thing to it, and that is deliberate.

The first turn is the one that fails out loud. A conversation that could not be started at all — an account the backend refused, a model it will not run for that account — ends the run with what the backend said about it. Suppressed, it would answer with nothing, which the loop above reads as a conversation that is over, and the run would exit as though it had done what it was asked. Every turn after the first is forgiving: by then there is a conversation to carry on.

A line typed while a turn is running goes into that turn rather than becoming another one — true under any flow, and Steering is how.

What it keeps

Nothing. What was said is the conversation, logged turn by turn by the backend that ran it, and a session is opened rather than reopened — so starting this again is another conversation rather than the last one carried on. To read one back, export the run from /epics and open the trace inside it.

See also

Released under the Apache-2.0 licence.