boat steer is the same as typing into a coding agent while it works.
--convo, boat steer steers the conversation that this shell prompted last. A bare boat prompt continues the same conversation.
How each harness gets the message
Four of the seven harnesses accept a message during a turn natively. Nothing stops. OpenCode, Kimi Code and Mistral Vibe have no such feature. Their protocol has “prompt” and “cancel”, and nothing between them. For these harnesses, Boat uses a fallback automatically.Boat makes sure the agent acts on a steer
A harness can accept a message and then do nothing with it. So Boat does not trust the harness. Boat does these things:- Where the harness has its own steering queue, Boat watches it.
- Boat waits for that queue to empty before it marks the turn finished.
- Where Boat cannot see the delivery, it runs your instruction as its own turn when the turn ends.
boat steer returns and the turn later reports finished, the agent did the instruction. It did not only receive it.
Steer modes
The API response and the event both carrynative. The event also carries the exact mode. It is one of native, native-continued, fallback, or late.
native-continued is the honest middle case. The harness accepted the message, but its turn ended without acting on it. So Boat ran it at once as its own turn on the same session. Nothing was interrupted and nothing was forgotten. The instruction only runs one turn boundary later.
The fallback path also keeps the harness session and all its memory. So nothing is forgotten. The cost is the one tool call that was in progress. The agent can redo a small part of the work it had just started.
A steer in the event stream
A steer is its own event in the stream. It is never a queued prompt:Steer with no running turn
If the conversation has no turn in progress, Boat refuses the steer withno_running_turn (409). This is on purpose. You asked to change a running turn. A new queued turn would be a surprise. To start a new turn, use boat prompt.