Skip to main content
Manage sessions — directly-controlled runs of an agent.

Commands

create, send, stream

--from-seq replays every event after a sequence number, so a reconnecting client never misses or duplicates events. Omit it to tail live from now. See Events & streaming.

A structured answer for one session

--output-schema takes a path to a JSON Schema file and overrides the agent’s schema for this run; --require-output refuses a clean ending that produced nothing matching it.
The document comes back on the session’s structured_output, on the session.idle event and on the session.idle webhook. See Structured outputs.
Money. --budget-usd takes a decimal-dollar string and is converted client-side to integer micro-USD (the wire field is cap_micro_usd; 1 USD = 1_000_000 micro-USD). JSON amounts are integer *_micro_usd.

interrupt, steer & queue

A running session ignores a plain send (it returns session_running). Steer it in one call with --interrupt, interrupt on its own, or hold the words for the next turn with --queue:
--queue is queue: true on the wire: the message waits in the session’s inbox and becomes the input of the turn that follows the one running; on an idle session it is a plain send. --interrupt and --queue together are refused (validation_failed).

The inbox: what is waiting on you

A session that has stopped and is waiting on a person is idle, exactly like one that finished its work — status cannot tell them apart. stop_reason can, so it is a filter:
vetta session inbox asks that question for every reason a person can clear — awaiting_answer, awaiting_approval and budget_paused — and prints the id, the tool_call to quote back, and one line saying what each session wants:
awaiting_delegation is deliberately absent: a coordinator waiting on its own threads is blocked on work, not on you. inbox is a view over list and does not page — narrow it with --stop-reason and --limit, or use vetta session list when there are more parked sessions than fit.

confirm & tool-result

When the agent pauses on a guarded tool, the session goes idle with stop_reason: awaiting_approval and a tool.confirm event. Resolve it:
Setting an agent up means approving the same tool several times with different arguments, one turn apart each — the id being approved is derived from the call, so a second identities_create is a second card. --for-session answers it once and grants that tool for the rest of the chat:
It covers one tool name in one session and nothing else. It ends when the session does, is never written onto the agent, and needs --allow — there is no session-wide deny. For a call through the tool invoker (tools_execute) the tool granted is the one in its tool argument, not the invoker.

answer a parked question

An agent that needs something from you parks the turn: the session goes idle with stop_reason: awaiting_answer and carries the question in pending_actions. confirm cannot resolve it — that route says only allow or deny, and “allow” is not an answer to “which mailbox?”. At a terminal, vetta session answer prints the question and asks for each field in turn:
A number picks an option; anything else is taken as typed, which is how you say the thing the agent did not think of. Under a script — or any redirected stdin — there is nobody to ask, so a prompt would hang forever. Pass the whole answer instead, one flag per field; repeat a key to send several values:
--tool-call is only needed when a session holds more than one parked question.

run exit codes

vetta session run (and the top-level vetta run) block until the session goes idle/terminal, then set the process exit code from the terminal stop_reason so scripts and CI can branch. Idle is not inherently success — the exit code reflects stop_reason: A session that never reported why it stopped exits 1, and a bad command line exits 2.

usage

Changing tools mid-session

Not available. There is no vetta session update command — a session’s tool set is fixed at creation from the agent’s configuration. To change it, update the agent (which creates a new version) and start a new session.

budget

There is no --remove: a session always carries a cap. Raise it, or let the session stop at budget_paused.

cancel

Stops a running session. It takes --session and no other flag.
There is no vetta session archive and no vetta session delete. Unknown commands are a hard error, so either one exits 2 without touching the session.
Files a session produced in its sandbox are not durable unless the agent promoted them with publish_file. List what a run published with vetta file list --session $SID — there is no vetta session files.