Skip to content

Questions ​

An agent can stop in the middle of a turn to ask you something, and a flow can ask you directly. Either way the question appears in the transcript, and the next line you type is the answer. Use this page to answer a question at the prompt, to know what happens to one when nobody is there, and to count them from a script.

Try it ​

Start the interface, which opens on chat with one agent, and ask for a question:

sh
hmz
text
❯ Before you do anything else, use your question tool to ask me whether to keep the old /v1 API
beside /v2, offering the choices keep and drop. Then reply with one sentence.

The agent stops, the question comes up in yellow with the choices it offered, and whatever you type next is the answer.

Before you start ​

  • A coding agent CLI that can stop to ask: Claude Code, Codex, Kimi Code, pi or Oh My Pi. See Which agents ask.
  • A flow that passes its agents' questions on to you. chat, the flow hmz opens on, passes every one on.

Two kinds of question ​

  • An agent's question comes from the coding agent itself, part-way through a turn: its CLI has a tool for asking its user something. The turn waits for your answer, then carries on with it.
  • A flow's question comes from the flow, between turns: a flow that needs a setting from you asks for it. The flow waits, then goes on with what you said.

In chat the second kind is the conversation itself rather than a question beside it. After every answer chat waits for your next message, and whatever you type in the conversation, a follow-up or a steer, is that message. There is no separate question to answer. The agent's own questions still show in the conversation, with the choices it offered.

Both are shown the same way, a ● line in yellow with type an answer, or /afk to stop being asked under it, and both are answered the same way: type a line and press enter. chat asking what next is the exception: its question is the answer already on the screen, so nothing more is shown. Nothing times out. A question is put to you as the flow's human role, its outworlder, which is why its own transcript is headed outworlder human.

Example: answer an agent's question at the prompt ​

Type the line from Try it into hmz, with Claude Code as the agent. The turn stops on the question:

text
── assistant

● assistant is working

● Should the old /v1 API be kept alongside the new /v2, or should it be dropped entirely?   ①
● Should the old /v1 API be kept alongside the new /v2, or should it be dropped entirely? (Keep /v1 / Drop /v1)   ②
   type an answer, or /afk to stop being asked                                              ③

                                        assistant · claude/claude-haiku-4-5-20251001:low · ● 1
                                                           human · outworlder · asking   ④
                                    input 20 · output 620 · cache_read 27.7k · cache_write 13.9k
                                                                           $0.02 · 118 out/s
─────────────────────────────────────────────────────────────────────────────────────────────
❯ keep, until the next release                                                              ⑤
─────────────────────────────────────────────────────────────────────────────────────────────
  ·\· assistant… (9s · ctrl+c twice to stop)    enter answer · shift+tab switch view · / commands · …   ⑥

Press enter, and the same turn goes on with your answer:

text
❯ keep, until the next release

● I'll keep both /v1 and /v2 APIs available until the next release, then deprecate /v1.   ⑦

✻ Worked for 14s · assistant                                                               ⑧

What each part means ​

  1. The question in the agent's own words, where the agent asked it.
  2. The same question put to you, in the same conversation. The choices the agent offered follow it in brackets. They are suggestions: type one, or anything else.
  3. type an answer, or /afk to stop being asked marks a question that is waiting.
  4. human · outworlder · asking on the agent lines above the prompt says a question is up, even when it has scrolled out of sight.
  5. Your answer, typed at the prompt like any other line.
  6. enter answer on the status line says what enter will do: it answers the question rather than steering the turn. On a narrow terminal the status line drops its leftmost keys first, so this one may not be shown.
  7. The turn carries on with your answer, in the same session.
  8. chat waiting for your next message: the reply is the question, so nothing more is shown. Type the next thing to say, here or in the assistant's own conversation, where it is the next message rather than a steer. Or leave it for as long as you like.

Example: a flow's question with choices ​

A flow that needs a setting from you asks for it with the choices under it, numbered:

text
● Which way should this be built?
      1. fast
      2. careful
   type an answer, or /afk to stop being asked

Type careful, or just 2. What the question looks like tells you what it takes:

The question readsType
a list of choices under itone of them, or its number
yes and no under ityes or no
(a number)a number
(several, separated by commas)a list on one line: api, cli, docs
-- or `-` for 3- to keep the flow's default

If an answer is not one the flow can take, the question comes back with what was wrong, up to three times.

Example: the same question under hmz exec ​

Under hmz exec nobody is at a prompt, so every question is answered by nobody. Run the same task:

sh
hmz exec -f chat -a assistant=claude/claude-haiku-4-5-20251001:low \
    "Before anything else, use your question tool to ask me whether to keep the old /v1 API beside /v2, offering keep and drop. Then reply with one sentence."
text
● assistant is working
● AskUserQuestion()
● Should we keep the old /v1 API alongside /v2, or drop it?                             ①
The error indicates "nobody to ask" - this likely means the user isn't available to answer the question in the current mode. …   ②
● Should we keep the old /v1 API alongside /v2 for backwards compatibility, or drop it entirely?
✻ input 18 · output 332 · cache_read 41.6k · cache_write 271 · $0.0062 · claude-haiku-4-5-20251001 · assistant
✻ Worked for 5s · assistant

With --json, the question is an object of kind asks, so a script can count them:

sh
hmz exec -f chat -a assistant=claude/claude-haiku-4-5-20251001:low --json "…" \
    | jq -c 'select(.kind == "asks")'
json
{"at":1790746636.0548427,"agent":"assistant","cli":"claude","model":"claude-haiku-4-5-20251001","session":"","kind":"asks","text":"Should we keep the old /v1 API alongside /v2, or deprecate it completely?","whose":"","tokens":{},"spent":{}}

What each part means ​

  1. The question is still printed, in yellow, so a log shows what the agent wanted to know.
  2. The agent is told nobody answered, and carries on as best it can: here it wrote the question into its answer instead. chat then ends, since nobody is there to send a next message. The command exits 0.

Check that it worked ​

  • At the prompt, the ● question and its type an answer line are followed by your line, and the agent's next words take your answer into account.
  • human · outworlder · asking is gone from the agent lines once nothing is waiting.
  • Under hmz exec --json, count the asks objects to see how often a run wanted you.

Answering, in detail ​

  • Where you answer. A question is shown on whichever transcript you are reading and on the asking outworlder's own, which shift+tab reaches and which holds nothing but what it asks you. A line typed on either answers it: the oldest question up on the first, the oldest that outworlder asks on the second. One the agent stopped mid-turn to ask, and chat asking what next, are shown and answered in that agent's conversation instead. On one agent's transcript any other line goes to the agent. See Many conversations at once.
  • Somebody else's. Where another interface reads the same run, a question nobody has claimed goes to whoever answers first, and an answer from somebody else shows · by <name>. One whose outworlder another has claimed with /claim says <name>'s to answer under it, and is not yours to answer.
  • Stopping wins. A question still up when the flow ends or is stopped ends with it.

Which agents ask ​

An agent asks only if its CLI can, and only if the flow passes its questions on to you. chat passes every one on.

claudecodexkimipiompevery other
asksasksasksasksasksnever stops to ask

A flow may also answer an agent's question itself, without asking you. When it does neither, the agent is told nobody answered, and carries on.

Variations ​

Being away: /afk ​

/afk on tells Humanize you are away, and the status line starts with afk until you turn it off with /afk off. On an outworlder's own transcript it says so for that outworlder alone. hmz exec always runs this way, since nobody is at a prompt.

text
❯ /afk on
away: agents that ask are told nobody is here
— the flow is done —

Here chat was waiting for your next message, so being away ended it.

While you are away
An agent's questionshown, and the agent is told nobody answered; it carries on
A flow's questionanswered with nothing, or with the flow's defaults
chat waiting for your next messageanswered with nothing, so the conversation ends
A flow's question that has no defaultthe flow fails with nobody is there to answer …, unless it handles that
A question already upanswered by nobody, at once

See Being away.

Pitfalls ​

  • Your line went to the agent, not the question. You were on one agent's own transcript, where a line is said to that agent. Press shift+tab back to the view of every agent or the outworlder's own, and look for enter answer on the status line.
  • reviewer is bob@tui's to answer, not yours. Somebody else has claimed that outworlder. See Troubleshooting.
  • already answered by alice@tui. Somebody else answered first; their answer is in the transcript.
  • A run under hmz exec fails with nobody is there to answer …. The flow asked for something it has no default for. Pass it with -p, or run it at the prompt.
  • Your agent never asks. Its CLI cannot, or the flow does not pass its questions on. Use one of the four CLIs above in chat.

Next steps ​

Released under the Apache-2.0 licence.