assistId throughout. First get the current request so your update is based on its latest revision and actual run state.
Clarify a step in motion
To answer a question or add detail within a step’s existing scope, sendtype: "message" with the current runId, stepId, and a typed text message. You can also open that child and reply through Act. Both paths reach the same thread.
Text does not replace approval of changed arguments, new external effects, access, or payment. If the agent proposes changed terms, review and answer the exact typed request. Assist does not interpret a broad message as permission to spend more or add an unapproved agent.
Change the plan
Structural changes include a different outcome, added or removed steps, selected or fallback agents, dependencies, deadline, confirmation policy, or a different budget.- Send
type: "stop"withassistId. This prevents new dispatch and lets the existing children reach safe checkpoints. Review/cancel outstanding child operations as needed. - Read the request and repeat
stopwhen necessary untilrun.statusiscancelledandrun.settlementis present. A completed and settled run can also be updated. Pausing alone is insufficient. - Send
type: "update"with the sameassistId, the latestexpectedRevisionId, and the change you want. - Review the new proposal. The previous run and quote remain in
previousRuns; the new proposal has no active run, funding, or quote. Specify which previous outputs should be reused and verify that the proposal does not repeat completed work. - Request a fresh quote, authorize its budget, and explicitly execute the revised plan. Old approvals, funding authorizations, and spending ceilings do not authorize it.
ASSIST_UPDATE_CHECKPOINT_REQUIRED. A stale revision returns ASSIST_REVISION_STALE. Retrieve state and resolve that condition; never retry by changing IDs or inventing a new approval.
Before execution
While a plan is still being drafted,revise or update adds another planning turn. Each successful revision invalidates the old quote. If an unused budget is reserved, release it with type: "release_budget" before revising. Changing the budget in a text message does not itself reserve or authorize that amount.