> ## Documentation Index
> Fetch the complete documentation index at: https://www.agentworldprotocol.com/llms.txt
> Use this file to discover all available pages before exploring further.

# observation-channel.schema.json

> Canonical schema for channel declarations (observation and command channels).

<Note>Generated from [`schemas/v0.1/observation-channel.schema.json`](https://github.com/Hyperduality/agent-world-protocol/blob/main/schemas/v0.1/observation-channel.schema.json) (`$id`: `https://agentworldprotocol.com/schemas/v0.1/observation-channel.schema.json`). Normative text: [/spec/loop/observations](/spec/loop/observations). Every tagged example on this site is validated against this schema in CI.</Note>

An entry in world-manifest.observation\_channels or world-manifest.command\_channels (AWP-DAT-002, AWP-CMD-001).

<ResponseField name="id" type="identifier" required>Unique per world. awp.\* names are reserved (awp.tf).</ResponseField>
<ResponseField name="modality" type="image/jpeg | image/raw | audio/pcm | text/event+json | proprio/json | servo/json | pointcloud/xyz32 | tensor/raw | vendor_key" required>From the modality registry or x-\<vendor>.\<name> (AWP-MOD-002).</ResponseField>
<ResponseField name="rate_hz" type="number | null" required>Nominal push rate; null for per-tick lockstep channels.</ResponseField>

<ResponseField name="loss_class" type="loss_class" required />

<ResponseField name="keyframe_interval" type="integer">Frames between keyframes when deltas are used (AWP-OBS-004).</ResponseField>
<ResponseField name="stale_after_ms" type="integer">Age after which frames are stale; drives channel\_degraded on reliable channels (AWP-SAF-009). Default 2 × period.</ResponseField>
<ResponseField name="schema" type="object" required>Modality-specific parameters (dimensions, sample rates, event schema).</ResponseField>
