- The first
boat prompton a sandbox starts a conversation. - Every later prompt continues it.
- Every prompt prints its conversation id:
conversation: <id>underqueued:. --jsonand the API response give it asconversationId.- Every event carries one.
List conversations
boat conversations (GET /sandboxes/{id}/conversations) lists the conversations, newest first. Each row shows:
- the prompt count
- whether a turn is running
- the last harness and model
- a preview of the last prompt
- which one is the current conversation of the sandbox
--resume.
The current conversation is per shell
The current conversation is scoped to your shell, like thecurrent sandbox id.
--newmakes the new conversation the current one for this shell.- A bare
boat promptcontinues the current one.
Parallel conversations
Conversations run at the same time. Each one has its own harness process and its own history: The rules are the rules you would write yourself:- One turn at a time per conversation. A second prompt to the same conversation waits for the current turn, because it needs the context of that turn. Prompts to different conversations run at the same time.
-
A cap per sandbox on turns that run at the same time. The cap depends on the memory of the sandbox:
Above the cap, prompts wait in a queue and start when turns finish. Boat drops nothing. To set an exact number, set the
ASCII_MAX_PARALLEL_CONVERSATIONSenvironment variable on the sandbox. Or change the size of the sandbox (Machine Capabilities). -
List them with
boat conversations. Each row shows whether a turn runs in it. So you see the parallel work at a glance. -
Events stream all conversations by default, tagged with
conversationId. To watch one, runboat events --convo <id>. -
Interrupt is scoped.
boat interrupt --convo <id>stops one turn. The others keep running. A bareboat interruptstops everything on the sandbox. -
Steer is scoped too.
boat steer --convo <id> "..."changes one running turn without a stop. Read Steer a running turn.
Agent lifecycle
A prompt moves through a small state machine. Watch it withboat events or GET /prompts/{promptId}:
A steer never makes a state of its own. The turn that was running is the turn that finishes. The work your message causes is part of that turn.
Conversations survive a stop
The sandbox lifecycle is under the prompt lifecycle. Conversations move with it:- A stop takes a snapshot of the disk. The snapshot includes the history of every conversation and the native session files of the harness under
/home/user. - A resumed or forked sandbox gets them back. So
--resume <id>continues with full memory. - Conversations and every config file in Customize the harness survive a stop.
- Processes that the harness started by hand do not survive a stop, the same as on any reboot. A dev server or a tunnel it started are examples.
Switch harness or model in a conversation
Continue a conversation on a different harness. The new harness keeps the thread:provider and model on POST /prompt.