Skip to main content
Pre-release

This release is a pre-release and may not be stable for production use.

awp-conformance

The conformance suite for the Agent World Protocol. It tests a world at a WebSocket URL, or an agent launched against the suite's own harness world, against the requirement matrix of one specification revision, and reports a verdict per requirement ID.

It targets specification revision 0.1-draft.8, pinned as the spec/ submodule. The suite shares no code with any implementation: it speaks the protocol from the bundled canonical schemas, lifecycle table, and matrix.

pip install --pre awp-conformance
awp-conformance world ws://127.0.0.1:8710 --fixture my-world.json --out report/
awp-conformance agent --manifest manifest.json --frames frames.json -- python my_agent.py --url {url}

Testing a world

The suite connects as one or more agents and checks everything the world sends: schemas in receiver and sender form, status_seq sequencing and replay, every action transition against the lifecycle table, frame sequencing per channel, closing, and integer bounds. Then it runs active tests named after the requirements they cover — idempotency, preemption, deadlines, the watchdog, resumption from a partial acknowledgement, half-open connections, resets, isolation between sessions, and more. awp-conformance tests lists them.

A manifest declares action types but not which parameter values make an action run long enough to interrupt, so a world supplies a fixture:

{
  "embodiment": "arm_01",
  "subscribe": ["proprio", "arm_state"],
  "moves": [
    { "type": "move_to_pose", "params": { "pose": { "frame": "base", "p_m": [0.4, 0.4, 0.6], "q": [0, 0, 0, 1] } } },
    { "type": "move_to_pose", "params": { "pose": { "frame": "base", "p_m": [-0.4, 0.3, 0.2], "q": [0, 0, 0, 1] } } },
    { "type": "move_to_pose", "params": { "pose": { "frame": "base", "p_m": [0.0, -0.45, 0.5], "q": [0, 0, 0, 1] } } }
  ],
  "extended_min_ms": 1500,
  "invalid": { "type": "move_to_pose", "params": { "pose": { "frame": "base" } } },
  "outside_envelope": { "type": "move_to_pose", "params": { "pose": { "frame": "base", "p_m": [0.9, 0, 0.4], "q": [0, 0, 0, 1] } } },
  "operator": { "estop_engage": "kill -USR1 $WORLD_PID", "estop_release": "kill -USR2 $WORLD_PID" },
  "audit_dir": "./awp-audit"
}
Key Meaning
moves Three or more extended actions in one concurrency group, at targets not on one line, each lasting at least extended_min_ms (streaming) or extended_min_ticks advances (lockstep). The suite always picks a target the embodiment is not near
long_params Params merged into a move so that it outlasts its type's max_duration_ms, for AWP-ACT-008 when the moves end sooner
invalid Params that fail the type's schema (generated from the schema when absent)
outside_envelope Params outside a declared envelope
operator Shell commands that engage and release the e-stop
audit_dir Where the world writes its audit log, if the suite can read it
max_wait_s The longest single wait the suite does (default 45); --slow lifts it
approver_token Bearer token of an approver connection, for worlds with requires_approval types
approval_action The action to submit for approval (default: the first such type, with empty params)
servo For command channels: { "action": {type, params}, "setpoint": {...}, "violation": {...} }

Beyond Core, the suite tests what the world offers: the ws stream binding, task, approval, blend, transfer, seeding, snapshots and replay, and command channels. --profile sim adds the sim profile to the claim.

fixtures/awp-sim.json is the fixture for the reference world.

Testing an agent

awp-conformance agent serves the manifest you give it from a scripted harness world, launches the agent once per episode ({url} and {token} in the command, or $AWP_URL and $AWP_TOKEN), and checks what the agent sends. The episodes add the stimuli that make agent requirements observable: unknown fields on every message, reserved frame flag bits, a redelivered terminal status, an unknown world request, a dropped connection, a world that falls silent, an invalid manifest, a session with no action grants, and a refused submission.

--frames gives a sample payload per channel, so the agent sees observations it can parse.

The report

Every requirement gets one outcome: pass, fail, warn (a SHOULD not met), untested (in scope but not exercised), n/a (outside the tested time models, gates, or declared features), manual, or untestable. The report states the claim the outcomes support (AWP-CNF-005):

  • AWP-conformant — no failed and no untested requirement in scope, for the claimed classes and the named draft revision; manual evidence is attached separately.
  • self-assessed against 0.1-draft.N — nothing failed, but some requirement in scope was not exercised.
  • not conformant — something failed.

--out DIR writes report.json and a wire trace per connection in the specification's trace format.

Development

git clone --recurse-submodules https://github.com/Hyperduality/awp-conformance
uv sync
uv run pytest                       # runs the suite against awp-sim, including deliberately broken worlds
uv run python scripts/sync_spec.py --check

To move to a new draft revision: check out its tag in spec/, run scripts/sync_spec.py, update SPEC_REVISION in src/awp_conformance/__init__.py, and fix what the tests report.

License

Apache-2.0. See LICENSE.

Release files for awp-conformance 0.1.0a2

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for awp-conformance 0.1.0a2
File Size Uploaded
awp_conformance-0.1.0a2.tar.gz 162.3 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for awp-conformance 0.1.0a2
File Interpreter ABI Platform
awp_conformance-0.1.0a2-py3-none-any.whl Python 3 none any Details

Total release size: 296.1 kB

Release files / awp_conformance-0.1.0a2.tar.gz

Download URL awp_conformance-0.1.0a2.tar.gz
Size 162.3 kB
Tags Source
SHA-256 checksum
How to use checksums
70d46d1cfb1fdeafd6884279500d9c968797dd3ab43c8ecb8838d5336e4cce52
BLAKE2b-256 checksum
How to use checksums
002525ea5ba9dfc7c97f14baaa990a511ab98ef6617d55565d260b973868dd33
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 25, 2026.

Transparency log

Release files / awp_conformance-0.1.0a2-py3-none-any.whl

Download URL awp_conformance-0.1.0a2-py3-none-any.whl
Size 133.8 kB
Tags Python 3
SHA-256 checksum
How to use checksums
11c31a73c01549c49467c71d74024513c31483894a83f53f6ed7b502b472c5d3
BLAKE2b-256 checksum
How to use checksums
21832de59c3a4437a834b2ceeb221bb04738ebcc285f5ca50b6f0d0b62e1c2b6
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 25, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

0.1.0a2 This release

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page