Skip to content

turn/start

Submits user input to a session; the optional disposition controls queue, steer, or replace when a turn is already running.

Type: TurnStartParams

turn/start params.

turn/start.providerRequestOptions is deliberately absent: RULED to stay off the published schema. The schema is the contract, and a free-form-object node kind is revisited only if the experimental field graduates.

Field Type Stability Presence Description
commandId string required The idempotency handle (UUIDv7). The fresh turn’s turnId derives from it.
displayText string optional Presentation form of the prompt for transcripts. Durable; carried on the resulting user-message view item. Never model-visible.
ifBusy IfBusy optional Disposition when a turn is already running; default queue.
input TurnInputPart[] required Ordered content parts; required and non-empty.
reasoningEffort ReasoningEffort optional Reasoning tier sampled at submission for this turn.
sessionId string required The target session.
tokenBudget integer Experimental optional This turn’s token budget in tokens: an integer floor of 1, riding to workflow-launch admission and inert when no workflow launches. Omitted means no budget; 0 or a non-integer is invalid params, as is explicit null. No wire upper bound beyond the integer type. Experimental: D6 rules names and shape only, v1 membership stays open, so the member ships off the stable bundle until a v1 ruling graduates it.
userShell TurnUserShell optional A queued ! shell action riding this turn: the !cmd typed while a turn runs, executed at the next model-call boundary before any later steer. Exclusive with text and skill input; input may be empty only when this member is present. Capability-gated on userShell: a carrying turn on a connection without the grant fails -32010 capabilityRequired. Explicit null is invalid params (the null-tolerant set is closed). A v1 stable member.
workspaceRoots string[] optional A sticky REPLACEMENT of the session’s runtime workspace-root set, binding at this turn’s launch and persisting for subsequent turns until replaced again — unlike reasoningEffort, which is this-turn-only. Same shape and validation as session/start.workspaceRoots; invalid params on an explicit ifBusy: "steer" submit and so is explicit null; omitted means “unchanged”, never “reset”.
Source

schema/msp/experimental/msp.schema.json#/methods/turn~2Fstart

{
"description": "Submits user input to a session; the optional disposition controls queue, steer, or replace when a turn is already running.",
"params": {
"$ref": "#/$defs/TurnStartParams"
},
"result": {
"$ref": "#/$defs/TurnStartResult"
}
}