> ## 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.

# action-schema.schema.json

> Canonical schema for action type declarations.

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

An entry in world-manifest.action\_schemas (spec/loop/actions, spec/loop/preemption, spec/loop/command-channels).

<ResponseField name="type" type="identifier" required>Action type name, unique per world.</ResponseField>
<ResponseField name="params_schema" type="json_schema" required>JSON Schema 2020-12 for params (AWP-MAN-002). Local $refs resolve against the manifest's $defs.</ResponseField>

<ResponseField name="duration" type="instant | extended | streaming" required />

<ResponseField name="preemption" type="preemption_policy | preemption_policy[]" required>Declared policies the submitter may choose from (AWP-PRE-001).</ResponseField>
<ResponseField name="concurrency_group" type="identifier">Types sharing a group preempt one another (AWP-PRE-006).</ResponseField>
<ResponseField name="max_queue" type="integer">Queue depth when queue is offered (AWP-PRE-002).</ResponseField>
<ResponseField name="requires_approval" type="boolean">Default `false`.</ResponseField>
<ResponseField name="command_channel" type="identifier">Command channel this streaming type opens (AWP-CMD-002).</ResponseField>
<ResponseField name="watchdog_ms" type="integer">Per-stream watchdog for streaming types (AWP-CMD-005).</ResponseField>
<ResponseField name="max_abort_ms" type="integer">Upper bound on the cancelling state for this type (AWP-LIF-010).</ResponseField>

<ResponseField name="description" type="string" />

## Conditional rules

```json theme={null}
[
  {
    "if": {
      "properties": {
        "duration": {
          "const": "streaming"
        }
      }
    },
    "then": {
      "required": [
        "command_channel",
        "watchdog_ms"
      ]
    },
    "else": {
      "not": {
        "anyOf": [
          {
            "required": [
              "command_channel"
            ]
          },
          {
            "required": [
              "watchdog_ms"
            ]
          }
        ]
      }
    }
  }
]
```
