Skip to main content
Core is deliberately small: a WebSocket, JSON-RPC, one time model, the action lifecycle, grants, and a log. It contains the safety mechanisms every world needs (grants, audit) and leaves the physical ones (envelopes, approval, safe-state watchdog) to the profiles that actuate something. A Core World MUST provide: A Core Agent MUST:
  • Negotiate the protocol version and tolerate unknown fields (AWP-VER-002..003). [AWP-AGT-001]
  • Parse the world manifest and refuse to open a session against a manifest it cannot validate against the canonical schema. [AWP-AGT-002]
  • Submit only granted action types on granted embodiments and subscribe only to granted channels (AWP-PRM-001). [AWP-AGT-003]
  • Generate unique action_ids and resubmit only with identical content (AWP-ACT-001). [AWP-AGT-004]
  • Handle every lifecycle state, including pending_approval, queued, cancelling, and preempted, and deduplicate redelivered statuses on (action_id, status_seq) (AWP-LIF-009). [AWP-AGT-005]
  • Send heartbeats at the negotiated interval carrying origin_ns, answer the world’s pings with receive_ns and transmit_ns, and in lockstep call world.tick rather than waiting for completion (AWP-SAF-001, AWP-CLK-007, AWP-TIM-002). [AWP-AGT-006]
  • On session.resume, pass last_status_seq and treat the embodiment as being in safe state until a new action executes (AWP-CTL-008, AWP-SAF-008). [AWP-AGT-007]
  • Maintain the clock-offset estimate from heartbeat exchanges and express every agent-originated session-clock value through it (AWP-CLK-008, AWP-CLK-009). [AWP-AGT-008]
  • Expose world.tick as an explicit call and never advance time as a side effect of any other operation; an SDK helper that submits and ticks in one step MUST be a distinct, lockstep-only entry point that fails in a streaming session. [AWP-AGT-009]
Stream bindings beyond inline, snapshots, approval, envelopes, and the safe-state watchdog are not required by Core; they arrive with profiles. A Core world that offers streaming does still declare safe_state (AWP-MAN-006), stamps ts_send_ns on every observation frame (AWP-OBS-006), and sends session.telemetry (AWP-TIM-006), because those are part of the streaming time model itself.