Skip to main content
The single biggest departure from tool-calling protocols: an AWP action is an intent that unfolds over time. “Move arm to pose X” takes two seconds and might fail halfway. The protocol therefore gives every action a lifecycle:
Three gates, kept separate: admission (the world acknowledges the intent within a bounded time and says where it stands), permission (accepted: the action may execute), and execution. Approval and queueing are states between the first two, so a human taking sixty seconds to approve never breaks the admission bound. Actions are typed. The world’s manifest declares each action type as a JSON Schema with units and ranges:
awp:action-schema
Key properties:
  • Idempotency — every submission carries a client-generated action_id; resubmission after reconnect with the same content is safe, and the same id with different content is refused.
  • Exactly one outcome — every action reaches one terminal state; its notification may be redelivered after a reconnect, so agents deduplicate on (action_id, status_seq).
  • Validation — worlds MUST validate params against the schema and reject out-of-range values before execution.
  • Preemption policy — each type declares what a new action does to a running one: queue, replace, blend, or reject. See preemption.
  • Approval — types marked requires_approval pause at the boundary for a human or supervisor. See approval.
Full normative rules: action lifecycle.