Skip to main content
Use the same Assist endpoint and 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, send type: "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.
  1. Send type: "stop" with assistId. This prevents new dispatch and lets the existing children reach safe checkpoints. Review/cancel outstanding child operations as needed.
  2. Read the request and repeat stop when necessary until run.status is cancelled and run.settlement is present. A completed and settled run can also be updated. Pausing alone is insufficient.
  3. Send type: "update" with the same assistId, the latest expectedRevisionId, and the change you want.
  4. 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.
  5. Request a fresh quote, authorize its budget, and explicitly execute the revised plan. Old approvals, funding authorizations, and spending ceilings do not authorize it.
An active or unsettled run returns 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.

Recover after a timeout

Read the same Assist request before resubmitting. For budget authorization and execution, retry only the identical request with the original idempotency key. For a revision conflict, inspect the latest revision to see whether your instruction was already applied. Previous run history is preserved; an update never rewrites evidence of work or charges already incurred.
Last modified on October 19, 2026