open-standards/wai/catalogue/ops.json
Transaction Science 8da651a54b
Some checks failed
WAI breaking changes and the conformance runner / WAI breaking · does this change touch WAI (push) Successful in 21s
wai-fleet service / does this change touch it (push) Successful in 17s
joule-moq-web browser client / joule-moq-web · does this change touch it (push) Successful in 26s
joule-moq-room room service / joule-moq-room · does this change touch it (push) Successful in 28s
wai-app and Create / wai-app · does this change touch it (push) Successful in 22s
wai-quantum energy-landscape jobs / does this change touch it (push) Successful in 15s
joule-code conformance gate / joule-moq-relay, its own energy on a counter (macos) (push) Successful in 50s
wai-quantum editors / does this change touch it (push) Successful in 31s
wai-quantum for JavaScript / does this change touch it (push) Successful in 29s
wai-app and Create / wai-app · tests, clippy, the line language's verifier (linux) (push) Successful in 40s
wai-audit collector and player integration / does this change touch it (push) Successful in 1m23s
wai-quantum studio and desktop / does this change touch it (push) Successful in 30s
wai-fleet service / service · macos (push) Successful in 59s
wai-quantum for Python / does this change touch it (push) Successful in 31s
wai-quantum docs, course and locales / does this change touch it (push) Successful in 1m27s
wai-quantum views in agent hosts / does this change touch it (push) Successful in 21s
joule-moq-remote host agent / joule-moq-remote · does this change touch it (push) Successful in 2m4s
wai-key-proxy / does this change touch it (push) Successful in 1m55s
WAI operation catalogue / does this change touch it (push) Successful in 1m56s
wai-quantum command line / does this change touch it (push) Successful in 1m40s
wai-ledger service / does this change touch it (push) Successful in 1m50s
wai-quantum contract / does this change touch it (push) Successful in 1m41s
WAI Studio / does this change touch it (push) Successful in 12s
wai-sink-swift native sink package / does this change touch it (push) Successful in 25s
WAI breaking changes and the conformance runner / WAI breaking · wire, record and API against main · linux (push) Successful in 1m43s
wai-sink-android native sink library / does this change touch it (push) Successful in 42s
joule-code conformance gate / Build + round-trip C1-C4 vectors (push) Successful in 2m45s
wai-quantum editors / editors · macos (push) Successful in 2m2s
wai-audit collector and player integration / collector, player integration and the browser end to end · macos (push) Successful in 2m21s
wai-fleet service / service · linux (push) Successful in 3m36s
wai-quantum docs, course and locales / the Studio's words in every locale · linux (push) Successful in 12s
joule-moq-remote host agent / joule-moq-remote, every target (macos) (push) Successful in 52s
joule-moq-remote host agent / joule-moq-remote, every target (linux-arm64) (push) Successful in 2m37s
wai-quantum for Python / python · macos (push) Successful in 2m57s
wai-ledger service / service · macos (push) Successful in 1m16s
wai-quantum editors / editors · linux (push) Successful in 3m46s
wai-audit collector and player integration / collector · linux (push) Successful in 3m39s
wai-quantum docs, course and locales / the course and the command line's languages · linux (push) Successful in 3m23s
wai-quantum for Python / python · linux (push) Successful in 4m26s
repository checks / lockfiles, advisories, tests in CI, workflow hygiene, spec and section references, public text (push) Failing after 6m38s
wai-quantum studio and desktop / desktop app · macos (push) Successful in 5m7s
wai-quantum command line / command line · macos (push) Successful in 2m33s
wai-quantum for JavaScript / javascript · linux (push) Successful in 5m35s
wai-key-proxy / proxy · linux (push) Successful in 1m12s
joule-moq-room room service / joule-moq-room, every target (push) Successful in 7m3s
WAI breaking changes and the conformance runner / WAI breaking and conform · their tests, and the independent verifiers through wai conform · linux (push) Successful in 7m40s
wai-quantum energy-landscape jobs / native against WebAssembly, over many seeds (push) Successful in 7m39s
wai-ledger service / service · linux (push) Successful in 2m5s
wai-quantum contract / the policy is linked, and the deprecations page reads (push) Successful in 7s
wai-app and Create / wai-app · Create, browser end-to-end (macos) (push) Successful in 8m36s
wai-quantum energy-landscape jobs / the same bits · macos (push) Successful in 8m36s
WAI Studio / the catalogue's actions, the unit tests and the core · linux (push) Successful in 1m10s
wai-quantum views in agent hosts / views · a scripted host (push) Successful in 4m26s
wai-quantum views in agent hosts / views · the page and its engine (push) Successful in 6m33s
wai-quantum contract / API compatibility · linux (push) Successful in 4m44s
wai-quantum energy-landscape jobs / the same bits · linux-arm64 (push) Successful in 13m4s
wai-sink-android native sink library / every ABI, the AAR, and the instrumented tests in a headless emulator · macos (push) Successful in 6m46s
wai-quantum energy-landscape jobs / reader, kernels, answers and the stated result · linux, release (push) Successful in 14m11s
wai-quantum energy-landscape jobs / the module under wasm32-wasip2 (wasmtime) (push) Successful in 14m12s
wai-quantum studio and desktop / desktop app · linux (push) Successful in 13m18s
WAI operation catalogue / the catalogue and every door · linux (push) Successful in 10m49s
WAI Studio / Studio in Chromium and Firefox · macos (push) Successful in 11m36s
wai-sink-swift native sink package / libwai slices, desktop tests, simulator tests · macos (push) Successful in 12m10s
joule-moq-web browser client / joule-moq-web · browser end-to-end (macos) (push) Successful in 16m36s
wai-quantum contract / schemas and the committed tool lists · linux (push) Successful in 9m58s
wai-quantum studio and desktop / studio · browser (push) Successful in 16m35s
WAI Studio / Studio in WebKit · linux (push) Successful in 12m22s
wai-quantum docs, course and locales / every command and snippet in the docs · linux (push) Successful in 22m0s
wai release binaries build on Windows / the seven release binaries · windows (push) Successful in 24m31s
joule-code conformance gate / joule-moq-ingest, every target (push) Successful in 28m51s
joule-code conformance gate / joule-moq-relay, every target (push) Successful in 28m59s
wai-sink-android native sink library / the JNI layer and the platform-free half on the host JVM · linux-arm64 (push) Successful in 29m41s
wai-quantum studio and desktop / desktop app · windows (push) Successful in 11m58s
wai-quantum command line / command line · linux (push) Successful in 48m17s
wai: one command for the rest of the toolchain: audit, serve, quantum, cmcd, receipt create, and every record kind in wai verify
Folds, each the program it folds run as itself, so what it prints and its exit
status are the program's for the same arguments: wai audit report|check|verify
(audit.create, audit.check, audit.verify) is wai-audit, --owner its
WAI_AUDIT_OWNER; wai serve <role> [--config F] [--check] (service.start) starts
wai-<role>: relay, room, ingest and key-release from a file, audit, fleet,
ledger and quantum-service from their environment; wai quantum
run|plan|lint|verify|methods (quantum.run, .inspect, .check, .verify, .list)
is wai-quantum with that verb, and no other verb of it is reached. A program is
its flag, WAI_<NAME>_BIN, beside wai, or on PATH; one not there is exit 5,
program-not-found. report is not an N3 verb, so wai audit report is the
operation audit.create.

--check on the daemons: wai-relay, wai-room (its keys too) and wai-ingest
--config F --check, and wai-key-release serve F --check, read the
configuration as each starts from it and start nothing, exit 1 with the reason
when it does not read. The proxy is installed as wai-key-release; wai-key-proxy
is the same program under its earlier name.

wai cmcd encode|decode|verify is wai_telemetry's tool compiled in (cmcd.rs, one
module behind both; telemetry joins full). wai receipt create <file>... --from
<input>... [--key] signs the operation receipt a toolchain write leaves, for
files made elsewhere. wai verify reads every record by its kind: by name, and a
JSON record by what it holds (a delivery receipt or claim as receipt_verify
answers it, a room session, an audit bundle as wai-audit verify does with
--owner/--channel, a sealed playlist by its mr/<blake3>.json as check-playlist
does); a file of no kind is exit 2, unknown-record. wai mcp --toolset quantum
starts wai-quantum mcp and answers each quantum_* tool with that server's own
answer and schemas. wai media score build|render alias wai score. The quantum
operations' SDK names are registered labels.

Tests, each fold against what it folds: cli_folds (cmcd over the whole corpus,
receipt create against wrap's receipt, verify on the claim, JWP, room and audit
corpora and a sealed playlist, audit|serve|quantum against stand-ins);
wai-audit tests/fold.rs, wai-quantum-cli tests/wai_fold.rs and joule-moq-room
tests/cli_serve.rs against the real programs; cli_mcp's quantum toolset; the
daemons' --check (config_check.rs, check.rs). ops.json, mcp.json, the registry
export and Studio's actions regenerated.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-11-10 02:57:54 -05:00

11483 lines
334 KiB
JSON

{
"format": "wai.ops/1",
"toolchain": "0.6.0",
"envelope": "envelope/1",
"exit_codes": [
{
"exit": 0,
"meaning": "done; every check held"
},
{
"exit": 1,
"meaning": "ran, and a check failed"
},
{
"exit": 2,
"meaning": "usage error or invalid input"
},
{
"exit": 3,
"meaning": "authentication or permission"
},
{
"exit": 4,
"meaning": "confirmation required; nothing changed"
},
{
"exit": 5,
"meaning": "not found (file, target, room, operation)"
},
{
"exit": 6,
"meaning": "target unavailable; safe to retry"
},
{
"exit": 7,
"meaning": "internal error"
}
],
"agent_flags": [
{
"flag": "--json",
"summary": "one JSON envelope on stdout: {\"wai\": \"envelope/1\", \"op\", \"ok\", \"data\" | \"error\"}",
"aliases": []
},
{
"flag": "--dry-run",
"summary": "write nothing and send nothing; say what would be done (an operation that only reads ignores it)",
"aliases": []
},
{
"flag": "--yes",
"summary": "confirm a change that waits for confirmation; off a terminal, without it, exit 4",
"aliases": [
{
"flag": "--confirm",
"deprecated": {
"since": "0.3.0",
"use_instead": "--yes"
}
}
]
},
{
"flag": "--no-input",
"summary": "never ask: a change that waits for confirmation exits 4 unless --yes is given",
"aliases": []
},
{
"flag": "--fields",
"summary": "<a,b.c> with --json: data keeps only these members (each a member or a dotted path; of each item when data is a list); the envelope's own members (wai, op, ok, error, exit, dry_run, plan) are always kept",
"aliases": []
}
],
"operations": [
{
"id": "toolchain.test",
"summary": "WAI's four steps (name, dispatch, rebuild, receipt) on a picture made here, its receipt checked offline",
"cli": "wai hello",
"aliases": [],
"usage": [
"wai hello [<dir>] WAI's four steps (name, dispatch, rebuild, receipt) on a sample, written to <dir> (wai-hello)"
],
"placement": "local",
"effect": "writes-project",
"dry_run": true,
"confirm": "when-replacing-an-unnamed-file",
"route": null,
"doors": {
"cli": true,
"mcp": false,
"http": false
},
"toolset": "core",
"stability": "stable",
"input": {
"type": "object",
"properties": {
"dir": {
"type": "string",
"format": "path",
"description": "Where the object and its receipts are written (wai-hello).",
"x-cli": {
"positional": true
}
}
},
"required": [],
"additionalProperties": false
},
"output": {
"type": "object",
"properties": {
"text": {
"type": "string"
}
},
"required": [
"text"
]
},
"stream": null,
"since": "0.3.0",
"deprecated": null,
"receipt": true,
"needs": {
"all": [
"quickstart"
]
},
"names": {
"cli": "wai toolchain test",
"mcp": null,
"c": "wai_toolchain_test",
"rust": "wai::toolchain::test",
"sdk": "wai.toolchain.test"
}
},
{
"id": "project.create",
"summary": "A new project from one of the examples, written into a new or empty directory; --list names the templates",
"cli": "wai create",
"aliases": [],
"usage": [
"wai create <dir> --template <name> [--key <name>] | create --list a new project from one of the examples, with",
" its receipt in <dir>/.wai/receipts/"
],
"placement": "local",
"effect": "writes-project",
"dry_run": true,
"confirm": "when-replacing-an-unnamed-file",
"route": null,
"doors": {
"cli": true,
"mcp": false,
"http": false
},
"toolset": "core",
"stability": "stable",
"input": {
"type": "object",
"properties": {
"dir": {
"type": "string",
"format": "path",
"description": "A directory that does not exist or is empty.",
"x-cli": {
"positional": true
}
},
"template": {
"type": "string",
"description": "The template, one of `wai create --list`.",
"x-cli": {
"flag": "--template"
}
},
"list": {
"type": "boolean",
"description": "List the templates instead.",
"x-cli": {
"flag": "--list"
}
},
"key": {
"type": "string",
"description": "The key that signs the operation's receipt: its name in the keystore (wai key list), or a key file; a key made for this run otherwise.",
"x-cli": {
"flag": "--key"
}
}
},
"required": [],
"additionalProperties": false
},
"output": {
"type": "array",
"items": {
"type": "object",
"required": [
"template",
"title",
"files"
]
}
},
"stream": null,
"since": "0.3.0",
"deprecated": null,
"receipt": true,
"needs": null,
"names": {
"cli": "wai project create",
"mcp": null,
"c": "wai_project_create",
"rust": "wai::project::create",
"sdk": "wai.project.create"
}
},
{
"id": "project.lock",
"summary": "wai.lock written beside wai.json: everything whose bytes change a result pinned by digest, the same bytes on any host; --check refuses a stale or edited lock",
"cli": "wai lock",
"aliases": [],
"usage": [
"wai lock [<dir>] [--check] [--root <wai-dir>] [--packer BIN] [--key <name>] write wai.lock and its receipt; --check holds it",
" to what it pins, exit 1 when it is stale or was edited"
],
"placement": "local",
"effect": "writes-project",
"dry_run": true,
"confirm": "never",
"route": null,
"doors": {
"cli": true,
"mcp": true,
"http": false
},
"toolset": "core",
"stability": "preview",
"input": {
"type": "object",
"properties": {
"dir": {
"type": "string",
"format": "path",
"description": "The project's directory (.).",
"x-cli": {
"positional": true
}
},
"check": {
"type": "boolean",
"description": "Write nothing: hold the file to what it pins.",
"x-cli": {
"flag": "--check"
}
},
"root": {
"type": "string",
"format": "path",
"description": "The wai/ directory of a checkout of the standard, for the corpora conform.suites names (found from the current directory otherwise).",
"x-cli": {
"flag": "--root"
}
},
"packer": {
"type": "string",
"format": "path",
"description": "wai-pack, for the policy package.policy names ($WAI_PACK_BIN, beside wai, or on PATH otherwise).",
"x-cli": {
"flag": "--packer"
}
},
"key": {
"type": "string",
"description": "The key that signs the operation's receipt: its name in the keystore (wai key list), or a key file; a key made for this run otherwise.",
"x-cli": {
"flag": "--key"
}
}
},
"required": [],
"additionalProperties": false
},
"output": {
"type": "object",
"required": [
"file",
"sha256"
],
"description": "The lock file and its SHA-256; written, whether it changed, what it pins and what it leaves absent, and its receipt (its file, receipt hash, signer and the project's digest); with --check, each check as wai check reports it"
},
"stream": null,
"since": "0.5.0",
"deprecated": null,
"receipt": true,
"needs": null,
"names": {
"cli": "wai project lock",
"mcp": "project_lock",
"c": "wai_project_lock",
"rust": "wai::project::lock",
"sdk": "wai.project.lock"
}
},
{
"id": "project.check",
"summary": "A project validated without building it: wai.json, each file it states, its app, and wai.lock against what it pins, every finding reported; what could not run says not checked",
"cli": "wai check",
"aliases": [],
"usage": [
"wai check [<dir>] [--root <wai-dir>] [--packer BIN] exit 1 when a check failed, 5 when none failed and one or more could not run"
],
"placement": "local",
"effect": "reads",
"dry_run": false,
"confirm": "never",
"route": null,
"doors": {
"cli": true,
"mcp": true,
"http": false
},
"toolset": "core",
"stability": "preview",
"input": {
"type": "object",
"properties": {
"dir": {
"type": "string",
"format": "path",
"description": "The project's directory (.).",
"x-cli": {
"positional": true
}
},
"root": {
"type": "string",
"format": "path",
"description": "The wai/ directory of a checkout of the standard, for the corpora conform.suites names (found from the current directory otherwise).",
"x-cli": {
"flag": "--root"
}
},
"packer": {
"type": "string",
"format": "path",
"description": "wai-pack, for the policy package.policy names ($WAI_PACK_BIN, beside wai, or on PATH otherwise).",
"x-cli": {
"flag": "--packer"
}
}
},
"required": [],
"additionalProperties": false
},
"output": {
"type": "object",
"required": [
"project",
"digest",
"lock",
"checks",
"held",
"failed",
"not_checked"
],
"description": "The project file and its canonical digest, the lock and its digest, and each check with what it found: held, failed or not checked, with a stable code, a hint for what did not hold or did not run, and fix, the command that fixes it where one does (run wai lock for a lock that is stale, was edited or is not there), null otherwise"
},
"stream": null,
"since": "0.5.0",
"deprecated": null,
"receipt": false,
"needs": null,
"names": {
"cli": "wai project check",
"mcp": "project_check",
"c": "wai_project_check",
"rust": "wai::project::check",
"sdk": "wai.project.check"
}
},
{
"id": "project.build",
"summary": "dist/ written for a project whose checks hold: the same bytes from the same project and lock, with a build record naming the digests of wai.json and wai.lock",
"cli": "wai build",
"aliases": [],
"usage": [
"wai build [<dir>] [--key <seed file>] [--packer BIN] [--root <wai-dir>] write dist/ and its receipt; refused, nothing",
" written, when a check fails or the lock is stale"
],
"placement": "local",
"effect": "writes-project",
"dry_run": true,
"confirm": "when-replacing-an-unnamed-file",
"route": null,
"doors": {
"cli": true,
"mcp": true,
"http": false
},
"toolset": "core",
"stability": "preview",
"input": {
"type": "object",
"properties": {
"dir": {
"type": "string",
"format": "path",
"description": "The project's directory (.).",
"x-cli": {
"positional": true
}
},
"key": {
"type": "string",
"format": "path",
"description": "The seed file (64 hexadecimal digits) that signs a package's receipt, for a project with package, and the build's receipt (a key made for this run otherwise).",
"x-cli": {
"flag": "--key"
}
},
"packer": {
"type": "string",
"format": "path",
"description": "wai-pack, for a project with package ($WAI_PACK_BIN, beside wai, or on PATH otherwise).",
"x-cli": {
"flag": "--packer"
}
},
"root": {
"type": "string",
"format": "path",
"description": "The wai/ directory of a checkout of the standard, for the corpora conform.suites names (found from the current directory otherwise).",
"x-cli": {
"flag": "--root"
}
}
},
"required": [],
"additionalProperties": false
},
"output": {
"type": "object",
"required": [
"dir",
"record",
"record_only",
"project_sha256",
"lock_sha256",
"files",
"left_out",
"not_checked"
],
"description": "The tree written and its build record with the record's SHA-256, the digests of the project file and the lock it names, its files (record_only when the project states nothing for wai to build), what the site holds that it left out and why, what could not be checked, and the build's receipt; refused, the checks as wai check reports them, each with its fix"
},
"stream": null,
"since": "0.5.0",
"deprecated": null,
"receipt": true,
"needs": null,
"names": {
"cli": "wai project build",
"mcp": "project_build",
"c": "wai_project_build",
"rust": "wai::project::build",
"sdk": "wai.project.build"
}
},
{
"id": "dev.start",
"summary": "A relay, a room service and the room page on one origin on this machine, for development; --check starts, checks every piece and stops",
"cli": "wai dev",
"aliases": [],
"usage": [
"wai dev [--port P] [--dir D] [--site DIR] [--watch FILE [--watch-ms MS]] [--call] [--remote]",
" [--show [--audience N]] [--messaging] [--e2ee] [--publishers N] [--check] [--for S] [--web DIR]",
" [--relay BIN] [--room BIN] [--control] [--impair loss=P%,rtt=MS,jitter=MS]",
" --port P the origin's port on 127.0.0.1 (8080; 0 picks a free one)",
" --dir D keys, configuration and logs (.wai/dev)",
" --site DIR your page: DIR is served at /, the room client beside it at /room/",
" --publishers N places in the room (4)",
" --watch FILE a watch room: everyone in it watches FILE together (.wav, .webm, .mp4,",
" .ogg, .mp3); --watch-ms MS its duration, read from a WAV file's header",
" --call the room is a call: /room/call.html places one, rings, answers",
" --remote the room is one host's shared screen; prints the host's invitation",
" --show the room is a show: hosts on camera, an audience that votes in polls",
" the room's clock opens and signs (co-performance); --audience N each",
" viewer's inputs to a poll (1)",
" --messaging a conversation beside the room, at /msg-api/: /room/messages.html",
" --e2ee every room end-to-end encrypted",
" --check start, check every piece through the origin, report, stop",
" --for S stop after S seconds",
" --web DIR the room client's files (beside this binary: ../share/wai/web; $WAI_WEB)",
" --relay BIN wai-relay (beside this binary, then $PATH; $WAI_RELAY_BIN)",
" --room BIN wai-room (beside this binary, then $PATH; $WAI_ROOM_BIN)",
" --control JSON control lines on standard input, answered by synthetic participants",
" (wai-room participant): join, leave, session, test, load, describe, stop;",
" the end of standard input stops the stack. Implies --json",
" --impair SPEC the relay also listens for QUIC on loopback, and the synthetic participants",
" enter over it through a path that drops (loss=P%), delays (rtt=MS) and",
" spreads (jitter=MS) their datagrams; a page's WebSocket is not impaired",
" wai-relay and wai-room must be of this wai's toolchain: a stale stack is refused, nothing",
" started. While it runs, the stack is recorded in DIR/stack.json (wai room test reads it).",
" WAI Studio is served at /_wai/ when its files are found ($WAI_STUDIO, or share/wai/studio",
" beside this binary).",
" A wai.json in the current directory (`wai create` writes one) gives the defaults; a flag",
" wins over it. Ctrl-C stops everything. With --json and without --check, the first line",
" is {\"ready\": true, ...}."
],
"placement": "local",
"effect": "runs",
"dry_run": true,
"confirm": "when-replacing-an-unnamed-file",
"route": null,
"doors": {
"cli": true,
"mcp": true,
"http": false
},
"toolset": "dev",
"stability": "stable",
"input": {
"type": "object",
"properties": {
"port": {
"type": "integer",
"description": "The origin's port on 127.0.0.1 (8080; 0 picks a free one).",
"x-cli": {
"flag": "--port"
}
},
"dir": {
"type": "string",
"format": "path",
"description": "Keys, configuration and logs (.wai/dev).",
"x-cli": {
"flag": "--dir"
}
},
"site": {
"type": "string",
"format": "path",
"description": "A directory served at /.",
"x-cli": {
"flag": "--site"
}
},
"watch": {
"type": "string",
"format": "path",
"description": "A file everyone in a watch room watches together.",
"x-cli": {
"flag": "--watch"
}
},
"watch_ms": {
"type": "integer",
"description": "The watch file's duration in milliseconds.",
"x-cli": {
"flag": "--watch-ms"
}
},
"call": {
"type": "boolean",
"description": "The room is a call.",
"x-cli": {
"flag": "--call"
}
},
"remote": {
"type": "boolean",
"description": "The room is one host's shared screen.",
"x-cli": {
"flag": "--remote"
}
},
"show": {
"type": "boolean",
"description": "The room is a show: hosts on camera, an audience that votes in polls.",
"x-cli": {
"flag": "--show"
}
},
"audience": {
"type": "integer",
"description": "With --show, each viewer's inputs to a poll (1).",
"x-cli": {
"flag": "--audience"
}
},
"messaging": {
"type": "boolean",
"description": "A conversation beside the room.",
"x-cli": {
"flag": "--messaging"
}
},
"e2ee": {
"type": "boolean",
"description": "Every room end-to-end encrypted.",
"x-cli": {
"flag": "--e2ee"
}
},
"publishers": {
"type": "integer",
"description": "Places in the room (4).",
"x-cli": {
"flag": "--publishers"
}
},
"check": {
"type": "boolean",
"description": "Start, check every piece, report and stop.",
"x-cli": {
"flag": "--check"
}
},
"for_s": {
"type": "integer",
"description": "Stop after this many seconds.",
"x-cli": {
"flag": "--for"
}
},
"web": {
"type": "string",
"format": "path",
"description": "The room client's files.",
"x-cli": {
"flag": "--web"
}
},
"relay": {
"type": "string",
"format": "path",
"description": "The relay's binary.",
"x-cli": {
"flag": "--relay"
}
},
"room": {
"type": "string",
"format": "path",
"description": "The room service's binary.",
"x-cli": {
"flag": "--room"
}
},
"control": {
"type": "boolean",
"description": "Control lines on standard input, answered by synthetic participants; implies --json.",
"x-cli": {
"flag": "--control"
}
},
"impair": {
"type": "string",
"description": "The synthetic participants over QUIC through an impaired path: loss=P%,rtt=MS,jitter=MS.",
"x-cli": {
"flag": "--impair"
}
}
},
"required": [],
"additionalProperties": false
},
"output": {
"type": "object",
"required": [
"ready",
"seconds",
"steps",
"checks",
"origin"
]
},
"stream": {
"type": "object",
"required": [
"ready"
],
"properties": {
"ready": {
"type": "boolean"
},
"origin": {
"type": "string"
}
}
},
"since": "0.3.0",
"deprecated": null,
"receipt": false,
"needs": null,
"names": {
"cli": "wai dev start",
"mcp": "dev_start",
"c": "wai_dev_start",
"rust": "wai::dev::start",
"sdk": "wai.dev.start"
}
},
{
"id": "receipt.verify",
"summary": "Every record under each path checked offline, each by the kind it is: receipt indexes and their receipts, delivery receipts, claims, room sessions, audit bundles, sealed playlists, operation receipts and origin claims, conformance results, fleet report bundles and envelopes",
"cli": "wai verify",
"aliases": [],
"usage": [
"wai verify <path>... [--conformant [--root <wai-dir>]] [--owner <hex> --channel <name>...] every record under each",
" path, checked offline by the kind it is, read from its name or, for a JSON record, from what it holds: receipt",
" indexes (*.wai.receipts), delivery receipts and claims (by their kind), live-room sessions, stream audit bundles",
" (for the owner --owner or WAI_AUDIT_OWNER names, serving each --channel), WAI media playlists with their manifest",
" receipt (mr/<hash>.json beside them), the operation receipts (*.wai-receipt.json) and origin claims",
" (*.wai-origin.json) the toolchain's writes leave, conformance results (*.wai-conform.json), fleet report bundles",
" (*.wai-fleet.json) and envelopes' pins (*.wai); a file named that is none of these is refused (exit 2): a file an",
" operation receipt names that has changed, or a receipt of another project, is refused; --conformant admits a",
" result only for a run that passed against this checkout's corpus, and gives each area the results' suites are in a",
" verdict"
],
"placement": "local",
"effect": "reads",
"dry_run": false,
"confirm": "never",
"route": null,
"doors": {
"cli": true,
"mcp": true,
"http": false
},
"toolset": "core",
"stability": "stable",
"input": {
"type": "object",
"properties": {
"paths": {
"type": "array",
"items": {
"type": "string"
},
"description": "Files or directories holding records: receipt indexes, delivery receipts, claims, room sessions, audit bundles, sealed playlists, operation receipts, origin claims, conformance results, fleet report bundles or envelopes.",
"x-cli": {
"positional": true
}
},
"conformant": {
"type": "boolean",
"description": "Admit each conformance result only when its run passed, against the corpus of a checkout.",
"x-cli": {
"flag": "--conformant"
}
},
"root": {
"type": "string",
"format": "path",
"description": "With --conformant, the wai/ directory of the checkout whose corpus a result names.",
"x-cli": {
"flag": "--root"
}
},
"owner": {
"type": "string",
"description": "For an audit bundle: the owner's key, 64 hexadecimal digits (WAI_AUDIT_OWNER otherwise).",
"x-cli": {
"flag": "--owner"
}
},
"channel": {
"type": "array",
"items": {
"type": "string"
},
"description": "For an audit bundle: a channel its owner serves; repeated.",
"x-cli": {
"flag": "--channel"
}
}
},
"required": [
"paths"
],
"additionalProperties": false
},
"output": {
"type": "object",
"properties": {
"text": {
"type": "string"
}
},
"required": [
"text"
]
},
"stream": null,
"since": "0.3.0",
"deprecated": null,
"receipt": false,
"needs": {
"all": [
"quickstart"
]
},
"names": {
"cli": "wai receipt verify",
"mcp": "receipt_verify",
"c": "wai_receipt_verify",
"rust": "wai::receipt::verify",
"sdk": "wai.receipt.verify"
}
},
{
"id": "receipt.create",
"summary": "A signed receipt for files made outside the toolchain, as its own writes leave one: their lineage from the project and each file they were made from to each of them, which wai verify reads",
"cli": "wai receipt create",
"aliases": [],
"usage": [
"wai receipt create <file>... [--from <input>]... [--key <name>] a receipt for the files named: its lineage is the",
" project (where it runs in one), each --from file read, then each file named, in order, every step its content hash;",
" kept beside the last file named, or in the project's .wai/receipts/ for files inside a project"
],
"placement": "local",
"effect": "writes-project",
"dry_run": true,
"confirm": "never",
"route": null,
"doors": {
"cli": true,
"mcp": false,
"http": false
},
"toolset": "core",
"stability": "preview",
"input": {
"type": "object",
"properties": {
"files": {
"type": "array",
"items": {
"type": "string"
},
"description": "The files the receipt is for, in order; the last is the one it is about.",
"x-cli": {
"positional": true
}
},
"from": {
"type": "array",
"items": {
"type": "string"
},
"description": "A file they were made from; repeated, in order.",
"x-cli": {
"flag": "--from"
}
},
"key": {
"type": "string",
"description": "The key that signs the receipt: its name in the keystore (wai key list), or a key file; a key made for this run otherwise.",
"x-cli": {
"flag": "--key"
}
}
},
"required": [
"files"
],
"additionalProperties": false
},
"output": {
"type": "object",
"properties": {
"text": {
"type": "string"
}
},
"required": [
"text"
]
},
"stream": null,
"since": "0.6.0",
"deprecated": null,
"receipt": true,
"needs": {
"all": [
"quickstart"
]
},
"names": {
"cli": "wai receipt create",
"mcp": null,
"c": "wai_receipt_create",
"rust": "wai::receipt::create",
"sdk": "wai.receipt.create"
}
},
{
"id": "envelope.inspect",
"summary": "What an envelope holds and whether this build decodes it: media, intent, pin, capability, fallback, the dispatch verdict and the conformance checks",
"cli": "wai inspect",
"aliases": [],
"usage": [
"wai inspect <in.wai> what a WAI1 or WAI2 envelope holds, and the verdict of SPEC §4's dispatch here"
],
"placement": "local",
"effect": "reads",
"dry_run": false,
"confirm": "never",
"route": null,
"doors": {
"cli": true,
"mcp": true,
"http": false
},
"toolset": "core",
"stability": "stable",
"input": {
"type": "object",
"properties": {
"path": {
"type": "string",
"format": "path",
"description": "A .wai envelope.",
"x-cli": {
"positional": true
}
}
},
"required": [
"path"
],
"additionalProperties": false
},
"output": {
"type": "object",
"properties": {
"text": {
"type": "string"
}
},
"required": [
"text"
]
},
"stream": null,
"since": "0.3.0",
"deprecated": null,
"receipt": false,
"needs": null,
"names": {
"cli": "wai envelope inspect",
"mcp": "envelope_inspect",
"c": "wai_envelope_inspect",
"rust": "wai::envelope::inspect",
"sdk": "wai.envelope.inspect"
}
},
{
"id": "envelope.wrap",
"summary": "Carry a registered capability's bytes in an envelope, byte for byte, under SPEC's intent, role and candidate rules",
"cli": "wai wrap",
"aliases": [],
"usage": [
"wai wrap <capability> <payload> [-o out.wai] [--fallback <cap>] [--intent <intent>]",
" [--companion <cap> <payload>]... [--key <name>] WAI2: companions bound to the payload; the envelope's receipt beside",
" it, or in the project's .wai/receipts/"
],
"placement": "local",
"effect": "writes-project",
"dry_run": true,
"confirm": "when-replacing-an-unnamed-file",
"route": null,
"doors": {
"cli": true,
"mcp": true,
"http": false
},
"toolset": "core",
"stability": "stable",
"input": {
"type": "object",
"properties": {
"capability": {
"type": "string",
"description": "A registered capability (`wai capabilities`).",
"x-cli": {
"positional": true
}
},
"payload": {
"type": "string",
"format": "path",
"description": "The bytes to carry.",
"x-cli": {
"positional": true
}
},
"out": {
"type": "string",
"format": "path",
"description": "The envelope (out.wai).",
"x-cli": {
"flag": "-o"
}
},
"fallback": {
"type": "string",
"description": "A WAI1 fallback capability.",
"x-cli": {
"flag": "--fallback"
}
},
"intent": {
"type": "string",
"description": "The envelope's intent (replicate where SPEC §7 allows it).",
"x-cli": {
"flag": "--intent"
}
},
"companion": {
"type": "array",
"items": {
"type": "string"
},
"description": "A companion capability and its payload, bound to the payload.",
"x-cli": {
"flag": "--companion"
}
},
"key": {
"type": "string",
"description": "The key that signs the operation's receipt: its name in the keystore (wai key list), or a key file; a key made for this run otherwise.",
"x-cli": {
"flag": "--key"
}
}
},
"required": [
"capability",
"payload"
],
"additionalProperties": false
},
"output": {
"type": "object",
"properties": {
"text": {
"type": "string"
}
},
"required": [
"text"
]
},
"stream": null,
"since": "0.3.0",
"deprecated": null,
"receipt": true,
"needs": null,
"names": {
"cli": "wai envelope wrap",
"mcp": "envelope_wrap",
"c": "wai_envelope_wrap",
"rust": "wai::envelope::wrap",
"sdk": "wai.envelope.wrap"
}
},
{
"id": "envelope.unwrap",
"summary": "An envelope's capability and its checks, and with -o its payload or one component, exactly as wrapped",
"cli": "wai unwrap",
"aliases": [],
"usage": [
"wai unwrap <in.wai> [-o payload] [--component <i>] [--key <name>] extract any registered capability's bytes; with -o,",
" the payload's receipt"
],
"placement": "local",
"effect": "writes-project",
"dry_run": true,
"confirm": "when-replacing-an-unnamed-file",
"route": null,
"doors": {
"cli": true,
"mcp": false,
"http": false
},
"toolset": "core",
"stability": "stable",
"input": {
"type": "object",
"properties": {
"path": {
"type": "string",
"format": "path",
"description": "A .wai envelope.",
"x-cli": {
"positional": true
}
},
"out": {
"type": "string",
"format": "path",
"description": "Where the payload is written.",
"x-cli": {
"flag": "-o"
}
},
"component": {
"type": "integer",
"description": "A WAI2 component's index.",
"x-cli": {
"flag": "--component"
}
},
"key": {
"type": "string",
"description": "The key that signs the operation's receipt: its name in the keystore (wai key list), or a key file; a key made for this run otherwise.",
"x-cli": {
"flag": "--key"
}
}
},
"required": [
"path"
],
"additionalProperties": false
},
"output": {
"type": "object",
"properties": {
"text": {
"type": "string"
}
},
"required": [
"text"
]
},
"stream": null,
"since": "0.3.0",
"deprecated": null,
"receipt": true,
"needs": null,
"names": {
"cli": "wai envelope unwrap",
"mcp": null,
"c": "wai_envelope_unwrap",
"rust": "wai::envelope::unwrap",
"sdk": "wai.envelope.unwrap"
}
},
{
"id": "media.encode",
"summary": "Encode a file with a codec this build holds, in an envelope; AVC and HEVC through the device's own encoders, with a signed record",
"cli": "wai encode",
"aliases": [],
"usage": [
"wai encode <codec> <input> [-o out.wai] [-q quality] codecs: png jpeg avif jxl jxl-lossless opus flac av1 av1-lossless zstd xz",
" a build with `floor` alone encodes png and zstd; the others need `codecs`",
" image codecs: .rgb (with .meta holding 'H W') or a PNG/JPEG file; audio: .f32 (raw mono float32)",
" with .meta holding the sample rate; video: packed RGB frames with .meta 'N H W fps_num fps_den';",
" text codecs: any file",
"wai encode avc|hevc <in.y4m> [-o out.wai] [--encoder auto|platform|va|gpu-driver|software] [--library <path>]",
" [--device <node|ordinal>] [--hardware yes|no] [--kbps <n>] [--size WxH] [--idr-every <frames> |",
" --idr-plan <plan.txt>] [--es <out>] [--record <out.json> --key <name|seed>] [--meter <counter> [--rounds <n>]]",
" (a build with `platform_encode`)"
],
"placement": "local",
"effect": "writes-project",
"dry_run": true,
"confirm": "when-replacing-an-unnamed-file",
"route": null,
"doors": {
"cli": true,
"mcp": false,
"http": false
},
"toolset": "core",
"stability": "stable",
"input": {
"type": "object",
"properties": {
"codec": {
"type": "string",
"description": "png, jpeg, avif, jxl, jxl-lossless, opus, flac, av1, av1-lossless, zstd, xz; or avc, hevc.",
"x-cli": {
"positional": true
}
},
"input": {
"type": "string",
"format": "path",
"description": "The file to encode.",
"x-cli": {
"positional": true
}
},
"out": {
"type": "string",
"format": "path",
"description": "The envelope (out.wai).",
"x-cli": {
"flag": "-o"
}
},
"quality": {
"type": "integer",
"description": "Quality, 1 to 100 (75).",
"x-cli": {
"flag": "-q"
}
}
},
"required": [
"codec",
"input"
],
"additionalProperties": false
},
"output": {
"type": "object",
"properties": {
"text": {
"type": "string"
}
},
"required": [
"text"
]
},
"stream": null,
"since": "0.3.0",
"deprecated": null,
"receipt": true,
"needs": {
"any": [
"floor",
"codecs",
"platform_encode"
]
},
"names": {
"cli": "wai media encode",
"mcp": null,
"c": "wai_media_encode",
"rust": "wai::media::encode",
"sdk": "wai.media.encode"
}
},
{
"id": "media.decode",
"summary": "Decode an envelope through SPEC §4's dispatch to raw samples, with a .meta file beside them",
"cli": "wai decode",
"aliases": [],
"usage": [
"wai decode <in.wai> -o <output> [--key <name>] a build with `floor` decodes png, flac and zstd; `codecs` the rest;",
" the samples' receipt beside them, or in the project's .wai/receipts/"
],
"placement": "local",
"effect": "writes-project",
"dry_run": true,
"confirm": "when-replacing-an-unnamed-file",
"route": null,
"doors": {
"cli": true,
"mcp": false,
"http": false
},
"toolset": "core",
"stability": "stable",
"input": {
"type": "object",
"properties": {
"path": {
"type": "string",
"format": "path",
"description": "A .wai envelope.",
"x-cli": {
"positional": true
}
},
"out": {
"type": "string",
"format": "path",
"description": "The decoded samples.",
"x-cli": {
"flag": "-o"
}
},
"key": {
"type": "string",
"description": "The key that signs the operation's receipt: its name in the keystore (wai key list), or a key file; a key made for this run otherwise.",
"x-cli": {
"flag": "--key"
}
}
},
"required": [
"path",
"out"
],
"additionalProperties": false
},
"output": {
"type": "object",
"properties": {
"text": {
"type": "string"
}
},
"required": [
"text"
]
},
"stream": null,
"since": "0.3.0",
"deprecated": null,
"receipt": true,
"needs": {
"any": [
"floor",
"codecs"
]
},
"names": {
"cli": "wai media decode",
"mcp": null,
"c": "wai_media_decode",
"rust": "wai::media::decode",
"sdk": "wai.media.decode"
}
},
{
"id": "media.generate",
"summary": "Make a wai.generate.spectral picture natively and print its SHA-256, or write its instruction object",
"cli": "wai generate",
"aliases": [],
"usage": [
"wai generate --model <json> (--prompt <s> --seed <u32> --steps <n> | --instr <object>) --size WxH -o <out.rgb> [--key <name>]",
" make a wai.generate.spectral picture (RGB8) and print its SHA-256, with its receipt and its origin claim",
" (extensions/synthesis.md §3.5); --sizes WxH,... --write-instr <object> writes the instruction object of form v0",
" (SPEC §5)"
],
"placement": "local",
"effect": "writes-project",
"dry_run": true,
"confirm": "when-replacing-an-unnamed-file",
"route": null,
"doors": {
"cli": true,
"mcp": false,
"http": false
},
"toolset": "core",
"stability": "stable",
"input": {
"type": "object",
"properties": {
"model": {
"type": "string",
"format": "path",
"description": "The model file.",
"x-cli": {
"flag": "--model"
}
},
"prompt": {
"type": "string",
"description": "The prompt.",
"x-cli": {
"flag": "--prompt"
}
},
"seed": {
"type": "integer",
"description": "The seed.",
"x-cli": {
"flag": "--seed"
}
},
"steps": {
"type": "integer",
"description": "The steps.",
"x-cli": {
"flag": "--steps"
}
},
"instr": {
"type": "string",
"format": "path",
"description": "An instruction object of form v0.",
"x-cli": {
"flag": "--instr"
}
},
"size": {
"type": "string",
"description": "WxH.",
"x-cli": {
"flag": "--size"
}
},
"out": {
"type": "string",
"format": "path",
"description": "The picture, RGB8.",
"x-cli": {
"flag": "-o"
}
},
"key": {
"type": "string",
"description": "The key that signs the receipt and the origin claim: its name in the keystore (wai key list), or a key file; a key made for this run otherwise.",
"x-cli": {
"flag": "--key"
}
}
},
"required": [
"model"
],
"additionalProperties": false
},
"output": {
"type": "object",
"description": "The picture's or instruction object's digests, as `wai generate --json` prints them, with its receipt and the picture's origin claim (null where the build writes none)"
},
"stream": null,
"since": "0.3.0",
"deprecated": null,
"receipt": true,
"needs": {
"all": [
"generate"
]
},
"names": {
"cli": "wai media generate",
"mcp": null,
"c": "wai_media_generate",
"rust": "wai::media::generate",
"sdk": "wai.media.generate"
}
},
{
"id": "media.inspect",
"summary": "What a file is, from its bytes alone: the formats they fit with the bytes that say so, its tracks, its protection, and measures where no format is recognised",
"cli": "wai identify",
"aliases": [],
"usage": [
"wai identify <file> [--json] any file, not only an envelope (extensions/media-identify.md); unknown stays unknown"
],
"placement": "local",
"effect": "reads",
"dry_run": false,
"confirm": "never",
"route": null,
"doors": {
"cli": true,
"mcp": true,
"http": false
},
"toolset": "core",
"stability": "stable",
"input": {
"type": "object",
"properties": {
"path": {
"type": "string",
"format": "path",
"description": "Any file.",
"x-cli": {
"positional": true
}
}
},
"required": [
"path"
],
"additionalProperties": false
},
"output": {
"type": "object",
"required": [
"format",
"size",
"verdict",
"candidates",
"probes_accepted",
"embedded",
"embedded_capped",
"measures"
],
"description": "The formats the bytes fit, each with the bytes that say so and how far they were followed; what a probe accepted; signatures found inside; and measures that hold whatever the bytes are"
},
"stream": null,
"since": "0.3.0",
"deprecated": null,
"receipt": false,
"needs": {
"all": [
"identify"
]
},
"names": {
"cli": "wai media inspect",
"mcp": "media_inspect",
"c": "wai_media_inspect",
"rust": "wai::media::inspect",
"sdk": "wai.media.inspect"
}
},
{
"id": "media.upscale",
"summary": "Upscale a PNG exactly, by an integer network under a pinned prior, with a signed record a verifier recomputes",
"cli": "wai upscale run",
"aliases": [],
"usage": [
"wai upscale run <in.png> --prior <p.wsr> [--derivation sr2|sr4] -o <out.png>",
" [--record <out.json> --envelope <in.wai> --key <name|seed>] [--issued-at <date-time>] [--json]",
" an 8-bit RGB PNG; --record signs what exact-upscale §7 recomputes from --envelope and the prior"
],
"placement": "local",
"effect": "writes-project",
"dry_run": true,
"confirm": "when-replacing-an-unnamed-file",
"route": null,
"doors": {
"cli": true,
"mcp": false,
"http": false
},
"toolset": "core",
"stability": "stable",
"input": {
"type": "object",
"properties": {
"path": {
"type": "string",
"format": "path",
"description": "An 8-bit RGB PNG.",
"x-cli": {
"positional": true
}
},
"prior": {
"type": "string",
"format": "path",
"description": "The WSR1 prior.",
"x-cli": {
"flag": "--prior"
}
},
"derivation": {
"type": "string",
"description": "sr2 (the default) or sr4.",
"x-cli": {
"flag": "--derivation"
}
},
"out": {
"type": "string",
"format": "path",
"description": "The picture, a PNG.",
"x-cli": {
"flag": "-o"
}
},
"record": {
"type": "string",
"format": "path",
"description": "The signed upscale record.",
"x-cli": {
"flag": "--record"
}
},
"envelope": {
"type": "string",
"format": "path",
"description": "The WAI1 of the input, which the record names.",
"x-cli": {
"flag": "--envelope"
}
},
"key": {
"type": "string",
"description": "The record's signing key: its name in the keystore (wai key list), 64 hexadecimal digits, or a file holding them.",
"x-cli": {
"flag": "--key"
}
}
},
"required": [
"path",
"prior",
"out"
],
"additionalProperties": false
},
"output": {
"type": "object",
"required": [
"width",
"height",
"subpixels",
"files"
],
"description": "What `wai upscale run` or `wai tonemap run` made: the subpixels it would bill, each file it wrote with its digest, and the record's link hash"
},
"stream": null,
"since": "0.3.0",
"deprecated": null,
"receipt": true,
"needs": {
"all": [
"exact_upscale"
]
},
"names": {
"cli": "wai media upscale",
"mcp": null,
"c": "wai_media_upscale",
"rust": "wai::media::upscale",
"sdk": "wai.media.upscale"
}
},
{
"id": "upscale.verify",
"summary": "An upscale record recomputed from its input and its prior, and the picture held to it",
"cli": "wai upscale verify",
"aliases": [],
"usage": [
"wai upscale verify <record.json> --envelope <in.wai> --prior <p.wsr> [--picture <out.png>]",
" the record's outcome as JSON (extensions/exact-upscale.md §7, under require-proof); exit 1 when it is refused"
],
"placement": "local",
"effect": "reads",
"dry_run": false,
"confirm": "never",
"route": null,
"doors": {
"cli": true,
"mcp": false,
"http": false
},
"toolset": "core",
"stability": "stable",
"input": {
"type": "object",
"properties": {
"record": {
"type": "string",
"format": "path",
"description": "The upscale record.",
"x-cli": {
"positional": true
}
},
"envelope": {
"type": "string",
"format": "path",
"description": "The WAI1 of the input, which the record names.",
"x-cli": {
"flag": "--envelope"
}
},
"prior": {
"type": "string",
"format": "path",
"description": "The WSR1 prior the record names.",
"x-cli": {
"flag": "--prior"
}
},
"picture": {
"type": "string",
"format": "path",
"description": "The picture: its samples are held to the record's output.",
"x-cli": {
"flag": "--picture"
}
}
},
"required": [
"record",
"envelope",
"prior"
],
"additionalProperties": false
},
"output": {
"type": "object",
"required": [
"outcome"
],
"description": "accept, with the record's link hash and the subpixels it states; or refuse, with the reason and where"
},
"stream": null,
"since": "0.3.0",
"deprecated": null,
"receipt": false,
"needs": {
"all": [
"exact_upscale"
]
},
"names": {
"cli": "wai upscale verify",
"mcp": null,
"c": "wai_upscale_verify",
"rust": "wai::upscale::verify",
"sdk": "wai.upscale.verify"
}
},
{
"id": "media.tonemap",
"summary": "Render a still's gain map exactly at the headrooms named, with a signed record a verifier recomputes",
"cli": "wai tonemap run",
"aliases": [],
"usage": [
"wai tonemap run <in.wai> --headrooms <h,h,...> --out <dir> [--input-class <class>]",
" [--record <out.json> --key <name|seed>] [--issued-at <date-time>] [--json]",
" a WAI2 of a PNG base and its gain map; a headroom is in 1/10000 of a stop; each rendition is RGB16"
],
"placement": "local",
"effect": "writes-project",
"dry_run": true,
"confirm": "when-replacing-an-unnamed-file",
"route": null,
"doors": {
"cli": true,
"mcp": false,
"http": false
},
"toolset": "core",
"stability": "stable",
"input": {
"type": "object",
"properties": {
"path": {
"type": "string",
"format": "path",
"description": "A WAI2 of a PNG base and its gain map.",
"x-cli": {
"positional": true
}
},
"headrooms": {
"type": "string",
"description": "The headrooms, in 1/10000 of a stop, joined by commas.",
"x-cli": {
"flag": "--headrooms"
}
},
"out": {
"type": "string",
"format": "path",
"description": "The directory the renditions are written in.",
"x-cli": {
"flag": "--out"
}
},
"input_class": {
"type": "string",
"description": "The input's class (captured).",
"x-cli": {
"flag": "--input-class"
}
},
"record": {
"type": "string",
"format": "path",
"description": "The signed rendition record.",
"x-cli": {
"flag": "--record"
}
},
"key": {
"type": "string",
"description": "The record's signing key: its name in the keystore (wai key list), 64 hexadecimal digits, or a file holding them.",
"x-cli": {
"flag": "--key"
}
}
},
"required": [
"path",
"headrooms",
"out"
],
"additionalProperties": false
},
"output": {
"type": "object",
"required": [
"width",
"height",
"subpixels",
"files"
],
"description": "What `wai upscale run` or `wai tonemap run` made: the subpixels it would bill, each file it wrote with its digest, and the record's link hash"
},
"stream": null,
"since": "0.3.0",
"deprecated": null,
"receipt": true,
"needs": {
"all": [
"exact_tonemap"
]
},
"names": {
"cli": "wai media tonemap",
"mcp": null,
"c": "wai_media_tonemap",
"rust": "wai::media::tonemap",
"sdk": "wai.media.tonemap"
}
},
{
"id": "tonemap.verify",
"summary": "A rendition record recomputed from its envelope, and the renditions held to it",
"cli": "wai tonemap verify",
"aliases": [],
"usage": [
"wai tonemap verify <record.json> --envelope <in.wai> [--renditions <dir>]",
" the record's outcome as JSON (extensions/exact-tonemap.md §8, under require-proof); exit 1 when it is refused"
],
"placement": "local",
"effect": "reads",
"dry_run": false,
"confirm": "never",
"route": null,
"doors": {
"cli": true,
"mcp": false,
"http": false
},
"toolset": "core",
"stability": "stable",
"input": {
"type": "object",
"properties": {
"record": {
"type": "string",
"format": "path",
"description": "The rendition record.",
"x-cli": {
"positional": true
}
},
"envelope": {
"type": "string",
"format": "path",
"description": "The WAI2 the record names.",
"x-cli": {
"flag": "--envelope"
}
},
"renditions": {
"type": "string",
"format": "path",
"description": "The directory `wai tonemap run` wrote: each rendition is held to its picture.",
"x-cli": {
"flag": "--renditions"
}
}
},
"required": [
"record",
"envelope"
],
"additionalProperties": false
},
"output": {
"type": "object",
"required": [
"outcome"
],
"description": "accept, with the record's link hash and the subpixels it states; or refuse, with the reason and where"
},
"stream": null,
"since": "0.3.0",
"deprecated": null,
"receipt": false,
"needs": {
"all": [
"exact_tonemap"
]
},
"names": {
"cli": "wai tonemap verify",
"mcp": null,
"c": "wai_tonemap_verify",
"rust": "wai::tonemap::verify",
"sdk": "wai.tonemap.verify"
}
},
{
"id": "score.build",
"summary": "A WSCR score from integer note fields",
"cli": "wai score build",
"aliases": [
"wai media score build"
],
"usage": [
"wai score build <notes.json> -o <out.wscr> a WSCR from integer note fields"
],
"placement": "local",
"effect": "writes-project",
"dry_run": true,
"confirm": "when-replacing-an-unnamed-file",
"route": null,
"doors": {
"cli": true,
"mcp": false,
"http": false
},
"toolset": "core",
"stability": "stable",
"input": {
"type": "object",
"properties": {
"notes": {
"type": "string",
"format": "path",
"description": "The note fields, JSON.",
"x-cli": {
"positional": true
}
},
"out": {
"type": "string",
"format": "path",
"description": "The score.",
"x-cli": {
"flag": "-o"
}
}
},
"required": [
"notes",
"out"
],
"additionalProperties": false
},
"output": {
"type": "object",
"description": "The score's digests, as `wai score build|render --json` print them"
},
"stream": null,
"since": "0.3.0",
"deprecated": null,
"receipt": false,
"needs": {
"all": [
"score"
]
},
"names": {
"cli": "wai score build",
"mcp": null,
"c": "wai_score_build",
"rust": "wai::score::build",
"sdk": "wai.score.build"
}
},
{
"id": "score.decode",
"summary": "A score's reference mixdown and its digests (pcm_sha256, mixdown_blake3, score_hash)",
"cli": "wai score render",
"aliases": [
"wai media score render"
],
"usage": [
"wai score render <in.wscr> [--pcm <out.s16>] the reference mixdown and its digests"
],
"placement": "local",
"effect": "writes-project",
"dry_run": true,
"confirm": "when-replacing-an-unnamed-file",
"route": null,
"doors": {
"cli": true,
"mcp": false,
"http": false
},
"toolset": "core",
"stability": "stable",
"input": {
"type": "object",
"properties": {
"score": {
"type": "string",
"format": "path",
"description": "A WSCR score.",
"x-cli": {
"positional": true
}
},
"pcm": {
"type": "string",
"format": "path",
"description": "Where the mixdown is written.",
"x-cli": {
"flag": "--pcm"
}
}
},
"required": [
"score"
],
"additionalProperties": false
},
"output": {
"type": "object",
"description": "The score's digests, as `wai score build|render --json` print them"
},
"stream": null,
"since": "0.3.0",
"deprecated": null,
"receipt": false,
"needs": {
"all": [
"score"
]
},
"names": {
"cli": "wai score decode",
"mcp": null,
"c": "wai_score_decode",
"rust": "wai::score::decode",
"sdk": "wai.score.decode"
}
},
{
"id": "encoder.list",
"summary": "What each encoder interface offers on this device, for AVC and HEVC",
"cli": "wai encoders",
"aliases": [],
"usage": [
"wai encoders [--library <path>] what each encoder interface offers here"
],
"placement": "local",
"effect": "reads",
"dry_run": false,
"confirm": "never",
"route": null,
"doors": {
"cli": true,
"mcp": false,
"http": false
},
"toolset": "core",
"stability": "preview",
"input": {
"type": "object",
"properties": {
"library": {
"type": "string",
"format": "path",
"description": "A software encoder library.",
"x-cli": {
"flag": "--library"
}
}
},
"required": [],
"additionalProperties": false
},
"output": {
"type": "object",
"properties": {
"text": {
"type": "string"
}
},
"required": [
"text"
]
},
"stream": null,
"since": "0.3.0",
"deprecated": null,
"receipt": false,
"needs": {
"all": [
"platform_encode"
]
},
"names": {
"cli": "wai encoder list",
"mcp": null,
"c": "wai_encoder_list",
"rust": "wai::encoder::list",
"sdk": "wai.encoder.list"
}
},
{
"id": "encoder.verify",
"summary": "A signed encode record checked, against the stream and its source where given",
"cli": "wai encode-record verify",
"aliases": [],
"usage": [
"wai encode-record verify <record.json> [--stream <es>] [--source <in.y4m>]"
],
"placement": "local",
"effect": "reads",
"dry_run": false,
"confirm": "never",
"route": null,
"doors": {
"cli": true,
"mcp": false,
"http": false
},
"toolset": "core",
"stability": "preview",
"input": {
"type": "object",
"properties": {
"record": {
"type": "string",
"format": "path",
"description": "The signed record.",
"x-cli": {
"positional": true
}
},
"stream": {
"type": "string",
"format": "path",
"description": "The elementary stream it names.",
"x-cli": {
"flag": "--stream"
}
},
"source": {
"type": "string",
"format": "path",
"description": "The source it names.",
"x-cli": {
"flag": "--source"
}
}
},
"required": [
"record"
],
"additionalProperties": false
},
"output": {
"type": "object",
"properties": {
"text": {
"type": "string"
}
},
"required": [
"text"
]
},
"stream": null,
"since": "0.3.0",
"deprecated": null,
"receipt": false,
"needs": {
"all": [
"platform_encode"
]
},
"names": {
"cli": "wai encoder verify",
"mcp": null,
"c": "wai_encoder_verify",
"rust": "wai::encoder::verify",
"sdk": "wai.encoder.verify"
}
},
{
"id": "package.build",
"summary": "A package packed by the reference packager wai-pack from a policy, a source per component and a supplied floor, with its signed package receipt",
"cli": "wai package build",
"aliases": [],
"usage": [
"wai package build --policy <policy.toml> --out <dir> --key <seed.hex> [--source <id>=<file>]... [--floor <dir>]",
" [--signer-id <id>] [--meter none|model:<mW>] [--packer <wai-pack>] [wai-pack pack's other flags]",
" the reference packager's pack (extensions/packaging.md): the policy's components packed into <dir>, new or empty,",
" with the package receipt (package.receipt.json); the packer is --packer, $WAI_PACK_BIN, wai-pack beside wai,",
" or wai-pack on PATH"
],
"placement": "local",
"effect": "writes-project",
"dry_run": true,
"confirm": "when-replacing-an-unnamed-file",
"route": null,
"doors": {
"cli": true,
"mcp": false,
"http": false
},
"toolset": "core",
"stability": "preview",
"input": {
"type": "object",
"properties": {
"policy": {
"type": "string",
"format": "path",
"description": "The packaging policy (extensions/packaging.md §3).",
"x-cli": {
"flag": "--policy"
}
},
"out": {
"type": "string",
"format": "path",
"description": "A new or empty directory, written with the package.",
"x-cli": {
"flag": "--out"
}
},
"key": {
"type": "string",
"format": "path",
"description": "The packager's signing key: a 32-byte seed, in hexadecimal.",
"x-cli": {
"flag": "--key"
}
},
"source": {
"type": "array",
"items": {
"type": "string"
},
"description": "A component's source, <id>=<file>; each component's own by default.",
"x-cli": {
"flag": "--source"
}
},
"floor": {
"type": "string",
"format": "path",
"description": "A supplied floor's directory (floor/ beside the policy by default).",
"x-cli": {
"flag": "--floor"
}
},
"signer_id": {
"type": "string",
"description": "The receipt's signer id (the key's did:key by default).",
"x-cli": {
"flag": "--signer-id"
}
},
"meter": {
"type": "string",
"description": "none, or model:<milliwatts>: the meter of the receipt's figure.",
"x-cli": {
"flag": "--meter"
}
},
"packer": {
"type": "string",
"format": "path",
"description": "The packer's binary (wai-pack).",
"x-cli": {
"flag": "--packer"
}
}
},
"required": [
"policy",
"out",
"key"
],
"additionalProperties": false
},
"output": {
"type": "object",
"properties": {
"text": {
"type": "string"
}
},
"required": [
"text"
]
},
"stream": null,
"since": "0.3.0",
"deprecated": null,
"receipt": true,
"needs": null,
"names": {
"cli": "wai package build",
"mcp": null,
"c": "wai_package_build",
"rust": "wai::package::build",
"sdk": "wai.package.build"
}
},
{
"id": "package.verify",
"summary": "A package verified by the reference packager wai-pack: every reason it is refused, or its counts and pack digest",
"cli": "wai package verify",
"aliases": [],
"usage": [
"wai package verify <dir> [--parent <dir>] [--packer <wai-pack>] the reference packager's verify",
" (extensions/packaging.md §9): the package's receipt, stage indexes, objects and floor; with --parent, a re-pack against",
" the package its receipt names; exit 1 when refused"
],
"placement": "local",
"effect": "reads",
"dry_run": false,
"confirm": "never",
"route": null,
"doors": {
"cli": true,
"mcp": false,
"http": false
},
"toolset": "core",
"stability": "preview",
"input": {
"type": "object",
"properties": {
"dir": {
"type": "string",
"format": "path",
"description": "The package's directory.",
"x-cli": {
"positional": true
}
},
"parent": {
"type": "string",
"format": "path",
"description": "The package a re-pack's receipt names.",
"x-cli": {
"flag": "--parent"
}
},
"packer": {
"type": "string",
"format": "path",
"description": "The packer's binary (wai-pack).",
"x-cli": {
"flag": "--packer"
}
}
},
"required": [
"dir"
],
"additionalProperties": false
},
"output": {
"type": "object",
"properties": {
"text": {
"type": "string"
}
},
"required": [
"text"
]
},
"stream": null,
"since": "0.3.0",
"deprecated": null,
"receipt": false,
"needs": null,
"names": {
"cli": "wai package verify",
"mcp": null,
"c": "wai_package_verify",
"rust": "wai::package::verify",
"sdk": "wai.package.verify"
}
},
{
"id": "registry.list",
"summary": "Every registered capability with its fidelity, licence class, replicate class and role, and whether this build decodes it",
"cli": "wai capabilities",
"aliases": [],
"usage": [
"wai capabilities the registered capabilities, their tier, licence, replicate class and role"
],
"placement": "local",
"effect": "reads",
"dry_run": false,
"confirm": "never",
"route": null,
"doors": {
"cli": true,
"mcp": true,
"http": false
},
"toolset": "core",
"stability": "stable",
"input": {
"type": "object",
"properties": {},
"required": [],
"additionalProperties": false
},
"output": {
"type": "object",
"properties": {
"text": {
"type": "string"
}
},
"required": [
"text"
]
},
"stream": null,
"since": "0.3.0",
"deprecated": null,
"receipt": false,
"needs": null,
"names": {
"cli": "wai registry list",
"mcp": "registry_list",
"c": "wai_registry_list",
"rust": "wai::registry::list",
"sdk": "wai.registry.list"
}
},
{
"id": "registry.export",
"summary": "Write, or with --check compare, the registry's machine-readable export and the generated table of REGISTRY.md",
"cli": "wai registry export",
"aliases": [],
"usage": [
"wai registry export [--root <wai-dir>] [--check] write (or compare) registry/capabilities.json, its",
" schema, vocab/v2.* and the generated table of REGISTRY.md"
],
"placement": "local",
"effect": "writes-project",
"dry_run": true,
"confirm": "when-replacing-an-unnamed-file",
"route": null,
"doors": {
"cli": true,
"mcp": false,
"http": false
},
"toolset": "maintainer",
"stability": "stable",
"input": {
"type": "object",
"properties": {
"root": {
"type": "string",
"format": "path",
"description": "The wai/ directory.",
"x-cli": {
"flag": "--root"
}
},
"check": {
"type": "boolean",
"description": "Compare, write nothing.",
"x-cli": {
"flag": "--check"
}
}
},
"required": [],
"additionalProperties": false
},
"output": {
"type": "object",
"properties": {
"text": {
"type": "string"
}
},
"required": [
"text"
]
},
"stream": null,
"since": "0.3.0",
"deprecated": null,
"receipt": false,
"needs": null,
"names": {
"cli": "wai registry export",
"mcp": null,
"c": "wai_registry_export",
"rust": "wai::registry::export",
"sdk": "wai.registry.export"
}
},
{
"id": "prior.list",
"summary": "The listing of a parameter set (wai.prior.set) on stdout, and its pin on stderr",
"cli": "wai prior-set",
"aliases": [],
"usage": [
"wai prior-set <root> print the listing of a parameter set (wai.prior.set) and its pin"
],
"placement": "local",
"effect": "reads",
"dry_run": false,
"confirm": "never",
"route": null,
"doors": {
"cli": true,
"mcp": false,
"http": false
},
"toolset": "core",
"stability": "stable",
"input": {
"type": "object",
"properties": {
"root": {
"type": "string",
"format": "path",
"description": "The parameter set's directory.",
"x-cli": {
"positional": true
}
}
},
"required": [
"root"
],
"additionalProperties": false
},
"output": {
"type": "object",
"properties": {
"text": {
"type": "string"
}
},
"required": [
"text"
]
},
"stream": null,
"since": "0.3.0",
"deprecated": null,
"receipt": false,
"needs": null,
"names": {
"cli": "wai prior list",
"mcp": null,
"c": "wai_prior_list",
"rust": "wai::prior::list",
"sdk": "wai.prior.list"
}
},
{
"id": "prior.fetch",
"summary": "A parameter set fetched by its pin from set roots (http-delivery §8.7), each response held only when its SHA-256 is the digest asked for, and written to --out",
"cli": "wai prior fetch",
"aliases": [],
"usage": [
"wai prior fetch <sha256> --out PATH [--form F] [--root <https://.../>]... [--hint FILE] [--origin https://HOST] [--max-bytes N]",
" the set of that SHA-256 asked of each set root in order (the roots given, a location hint's, then the origin's",
" /.well-known/wai-sets/), a response's bytes held only when their digest is the pin's; a set of the form",
" wai.prior.set (a listing) is written as a directory of its files, each fetched and checked by its own digest,",
" anything else as one file. The hint is a WAI multivariant playlist (.m3u8) or a catalog's wai_priors entry",
" (JSON). Exit 1 when no root holds it, with every request and what came of it; exit 6 when no root answered"
],
"placement": "client",
"effect": "writes-project",
"dry_run": true,
"confirm": "when-replacing-an-unnamed-file",
"route": null,
"doors": {
"cli": true,
"mcp": false,
"http": false
},
"toolset": "core",
"stability": "preview",
"input": {
"type": "object",
"properties": {
"sha256": {
"type": "string",
"description": "The pin's digest: 64 lowercase hexadecimal digits.",
"x-cli": {
"positional": true
}
},
"out": {
"type": "string",
"format": "path",
"description": "Where the set is written: a new or empty directory for a listing, a file otherwise.",
"x-cli": {
"flag": "--out"
}
},
"form": {
"type": "string",
"description": "The pin's form (wai.prior.set for a listing; a one-file set otherwise).",
"x-cli": {
"flag": "--form"
}
},
"root": {
"type": "array",
"items": {
"type": "string"
},
"description": "A set root to ask, https:// with a path ending in /; repeated, in order.",
"x-cli": {
"flag": "--root"
}
},
"hint": {
"type": "string",
"format": "path",
"description": "A location hint: a WAI multivariant playlist, or a catalog's wai_priors entry as JSON.",
"x-cli": {
"flag": "--hint"
}
},
"origin": {
"type": "string",
"description": "An https:// origin whose /.well-known/wai-sets/ is asked last.",
"x-cli": {
"flag": "--origin"
}
},
"max_bytes": {
"type": "integer",
"description": "The most bytes read of each response (256 MiB).",
"x-cli": {
"flag": "--max-bytes"
}
}
},
"required": [
"sha256",
"out"
],
"additionalProperties": false
},
"output": {
"type": "object",
"required": [
"sha256",
"form",
"out",
"files",
"attempts"
],
"description": "The pin's digest and form, where the set was written, each file of it with its path and SHA-256, its usage statement where it binds one, and every request sent with what came of it (held, or the reason http-delivery §8.7 gives)"
},
"stream": null,
"since": "0.6.0",
"deprecated": null,
"receipt": false,
"needs": {
"all": [
"prior_carriage",
"cli_tls"
]
},
"names": {
"cli": "wai prior fetch",
"mcp": null,
"c": "wai_prior_fetch",
"rust": "wai::prior::fetch",
"sdk": "wai.prior.fetch"
}
},
{
"id": "prior.verify",
"summary": "Whether a parameter set is the one a pin names: a directory's listing (wai.prior.set), or a file's bytes, and its SHA-256 against the pin's",
"cli": "wai prior verify",
"aliases": [],
"usage": [
"wai prior verify <path> --sha256 <64 hex> [--form F] a directory read as a set of the form wai.prior.set (its listing,",
" as wai prior-set prints it) or a file as its bytes, its SHA-256 held to the pin's. Exit 1 when they differ"
],
"placement": "local",
"effect": "reads",
"dry_run": false,
"confirm": "never",
"route": null,
"doors": {
"cli": true,
"mcp": false,
"http": false
},
"toolset": "core",
"stability": "preview",
"input": {
"type": "object",
"properties": {
"path": {
"type": "string",
"format": "path",
"description": "The set: a directory (a listing's files), or a file.",
"x-cli": {
"positional": true
}
},
"sha256": {
"type": "string",
"description": "The pin's digest: 64 lowercase hexadecimal digits.",
"x-cli": {
"flag": "--sha256"
}
},
"form": {
"type": "string",
"description": "The pin's form: a directory is read as wai.prior.set and refused under another; a file is read as its bytes.",
"x-cli": {
"flag": "--form"
}
}
},
"required": [
"path",
"sha256"
],
"additionalProperties": false
},
"output": {
"type": "object",
"required": [
"path",
"form",
"pin",
"sha256",
"held"
],
"properties": {
"held": {
"type": "boolean"
}
},
"description": "The path checked, the form it was read as (wai.prior.set for a directory, its listing), the pin's digest and the one computed here, and whether they are the same"
},
"stream": null,
"since": "0.6.0",
"deprecated": null,
"receipt": false,
"needs": null,
"names": {
"cli": "wai prior verify",
"mcp": null,
"c": "wai_prior_verify",
"rust": "wai::prior::verify",
"sdk": "wai.prior.verify"
}
},
{
"id": "stage.encode",
"summary": "A refinement layer over a base and the layers below it, toward a target",
"cli": "wai stage refine",
"aliases": [],
"usage": [
"wai stage refine --base <b.wai> [--on <L.wai>]... --toward <file> --q N [--predictor identity|up2|rate:NUM/DEN]",
" [--span F:C] [--out-dims D0,D1,D2] [--max-symbols N] [--table-per-unit] -o L.wai"
],
"placement": "local",
"effect": "writes-project",
"dry_run": true,
"confirm": "when-replacing-an-unnamed-file",
"route": null,
"doors": {
"cli": true,
"mcp": false,
"http": false
},
"toolset": "core",
"stability": "preview",
"input": {
"type": "object",
"properties": {
"base": {
"type": "string",
"format": "path",
"description": "The base envelope.",
"x-cli": {
"flag": "--base"
}
},
"toward": {
"type": "string",
"format": "path",
"description": "The samples the layer refines toward (--target, deprecated, is the same).",
"x-cli": {
"flag": "--toward",
"aliases": [
{
"flag": "--target",
"deprecated": {
"since": "0.5.0",
"use_instead": "--toward"
}
}
]
}
},
"q": {
"type": "integer",
"description": "The quantiser.",
"x-cli": {
"flag": "--q"
}
},
"out": {
"type": "string",
"format": "path",
"description": "The layer.",
"x-cli": {
"flag": "-o"
}
}
},
"required": [
"base",
"toward",
"q",
"out"
],
"additionalProperties": false
},
"output": {
"type": "object",
"properties": {
"text": {
"type": "string"
}
},
"required": [
"text"
]
},
"stream": null,
"since": "0.3.0",
"deprecated": null,
"receipt": false,
"needs": {
"all": [
"staged",
"video_int",
"audio_int",
"splat_int"
]
},
"names": {
"cli": "wai stage encode",
"mcp": null,
"c": "wai_stage_encode",
"rust": "wai::stage::encode",
"sdk": "wai.stage.encode"
}
},
{
"id": "stage.decode",
"summary": "Envelopes taken in order: each layer offered, each base decoded and refined, with each report and the units",
"cli": "wai stage apply",
"aliases": [],
"usage": [
"wai stage apply <envelope>... each layer offered, a base decoded (SPEC §4) and refined; the reports and units, or a JSON trace"
],
"placement": "local",
"effect": "reads",
"dry_run": false,
"confirm": "never",
"route": null,
"doors": {
"cli": true,
"mcp": false,
"http": false
},
"toolset": "core",
"stability": "preview",
"input": {
"type": "object",
"properties": {
"envelopes": {
"type": "array",
"items": {
"type": "string"
},
"description": "The base, then its layers.",
"x-cli": {
"positional": true
}
}
},
"required": [
"envelopes"
],
"additionalProperties": false
},
"output": {
"description": "The trace of every stage reached, as `wai stage apply --json` prints it"
},
"stream": null,
"since": "0.3.0",
"deprecated": null,
"receipt": false,
"needs": {
"all": [
"staged",
"video_int",
"audio_int",
"splat_int"
]
},
"names": {
"cli": "wai stage decode",
"mcp": null,
"c": "wai_stage_decode",
"rust": "wai::stage::decode",
"sdk": "wai.stage.decode"
}
},
{
"id": "stage.build",
"summary": "A wai.video.int_motion base of N frames of RGB8 (WIV1, keyframe 0, zero motion)",
"cli": "wai stage base",
"aliases": [],
"usage": [
"wai stage base --frames <file> --dims N,H,W --q Q -o base.wai"
],
"placement": "local",
"effect": "writes-project",
"dry_run": true,
"confirm": "when-replacing-an-unnamed-file",
"route": null,
"doors": {
"cli": true,
"mcp": false,
"http": false
},
"toolset": "core",
"stability": "preview",
"input": {
"type": "object",
"properties": {
"frames": {
"type": "string",
"format": "path",
"description": "The frames, packed RGB8.",
"x-cli": {
"flag": "--frames"
}
},
"dims": {
"type": "string",
"description": "N,H,W.",
"x-cli": {
"flag": "--dims"
}
},
"q": {
"type": "integer",
"description": "The quantiser.",
"x-cli": {
"flag": "--q"
}
},
"out": {
"type": "string",
"format": "path",
"description": "The base envelope.",
"x-cli": {
"flag": "-o"
}
}
},
"required": [
"frames",
"dims",
"q",
"out"
],
"additionalProperties": false
},
"output": {
"type": "object",
"properties": {
"text": {
"type": "string"
}
},
"required": [
"text"
]
},
"stream": null,
"since": "0.3.0",
"deprecated": null,
"receipt": false,
"needs": {
"all": [
"staged",
"video_int",
"audio_int",
"splat_int"
]
},
"names": {
"cli": "wai stage build",
"mcp": null,
"c": "wai_stage_build",
"rust": "wai::stage::build",
"sdk": "wai.stage.build"
}
},
{
"id": "stage.inspect",
"summary": "A refinement layer's refines, its WIR1 header and its declared cost",
"cli": "wai stage inspect",
"aliases": [],
"usage": [
"wai stage inspect <L.wai>"
],
"placement": "local",
"effect": "reads",
"dry_run": false,
"confirm": "never",
"route": null,
"doors": {
"cli": true,
"mcp": false,
"http": false
},
"toolset": "core",
"stability": "preview",
"input": {
"type": "object",
"properties": {
"layer": {
"type": "string",
"format": "path",
"description": "A layer envelope.",
"x-cli": {
"positional": true
}
}
},
"required": [
"layer"
],
"additionalProperties": false
},
"output": {
"type": "object",
"properties": {
"text": {
"type": "string"
}
},
"required": [
"text"
]
},
"stream": null,
"since": "0.3.0",
"deprecated": null,
"receipt": false,
"needs": {
"all": [
"staged",
"video_int",
"audio_int",
"splat_int"
]
},
"names": {
"cli": "wai stage inspect",
"mcp": null,
"c": "wai_stage_inspect",
"rust": "wai::stage::inspect",
"sdk": "wai.stage.inspect"
}
},
{
"id": "stage.wrap",
"summary": "WAI1 envelopes packed into one WAI2, their manifests verbatim",
"cli": "wai stage pack",
"aliases": [],
"usage": [
"wai stage pack <base.wai> <L.wai>... -o x.wai"
],
"placement": "local",
"effect": "writes-project",
"dry_run": true,
"confirm": "when-replacing-an-unnamed-file",
"route": null,
"doors": {
"cli": true,
"mcp": false,
"http": false
},
"toolset": "core",
"stability": "preview",
"input": {
"type": "object",
"properties": {
"envelopes": {
"type": "array",
"items": {
"type": "string"
},
"description": "The base, then its layers.",
"x-cli": {
"positional": true
}
},
"out": {
"type": "string",
"format": "path",
"description": "The WAI2 envelope.",
"x-cli": {
"flag": "-o"
}
}
},
"required": [
"envelopes",
"out"
],
"additionalProperties": false
},
"output": {
"type": "object",
"properties": {
"text": {
"type": "string"
}
},
"required": [
"text"
]
},
"stream": null,
"since": "0.3.0",
"deprecated": null,
"receipt": false,
"needs": {
"all": [
"staged",
"video_int",
"audio_int",
"splat_int"
]
},
"names": {
"cli": "wai stage wrap",
"mcp": null,
"c": "wai_stage_wrap",
"rust": "wai::stage::wrap",
"sdk": "wai.stage.wrap"
}
},
{
"id": "stage.unwrap",
"summary": "One component of a WAI2 envelope as its WAI1 envelope",
"cli": "wai stage explode",
"aliases": [],
"usage": [
"wai stage explode <x.wai> <i> [-o out.wai]"
],
"placement": "local",
"effect": "writes-project",
"dry_run": true,
"confirm": "when-replacing-an-unnamed-file",
"route": null,
"doors": {
"cli": true,
"mcp": false,
"http": false
},
"toolset": "core",
"stability": "preview",
"input": {
"type": "object",
"properties": {
"path": {
"type": "string",
"format": "path",
"description": "A WAI2 envelope.",
"x-cli": {
"positional": true
}
},
"index": {
"type": "integer",
"description": "The component's index.",
"x-cli": {
"positional": true
}
},
"out": {
"type": "string",
"format": "path",
"description": "The WAI1 envelope.",
"x-cli": {
"flag": "-o"
}
}
},
"required": [
"path",
"index"
],
"additionalProperties": false
},
"output": {
"type": "object",
"properties": {
"text": {
"type": "string"
}
},
"required": [
"text"
]
},
"stream": null,
"since": "0.3.0",
"deprecated": null,
"receipt": false,
"needs": {
"all": [
"staged",
"video_int",
"audio_int",
"splat_int"
]
},
"names": {
"cli": "wai stage unwrap",
"mcp": null,
"c": "wai_stage_unwrap",
"rust": "wai::stage::unwrap",
"sdk": "wai.stage.unwrap"
}
},
{
"id": "http.export",
"summary": "Envelopes named by their content hash, each with its head proof and entity tag, ready for an origin",
"cli": "wai http publish",
"aliases": [],
"usage": [
"wai http publish <in.wai>... --out <dir>"
],
"placement": "local",
"effect": "writes-project",
"dry_run": true,
"confirm": "when-replacing-an-unnamed-file",
"route": null,
"doors": {
"cli": true,
"mcp": false,
"http": false
},
"toolset": "core",
"stability": "preview",
"input": {
"type": "object",
"properties": {
"envelopes": {
"type": "array",
"items": {
"type": "string"
},
"description": "The envelopes.",
"x-cli": {
"positional": true
}
},
"out": {
"type": "string",
"format": "path",
"description": "The directory.",
"x-cli": {
"flag": "--out"
}
}
},
"required": [
"envelopes",
"out"
],
"additionalProperties": false
},
"output": {
"type": "object",
"properties": {
"text": {
"type": "string"
}
},
"required": [
"text"
]
},
"stream": null,
"since": "0.3.0",
"deprecated": null,
"receipt": false,
"needs": {
"all": [
"http"
]
},
"names": {
"cli": "wai http export",
"mcp": null,
"c": "wai_http_export",
"rust": "wai::http::export",
"sdk": "wai.http.export"
}
},
{
"id": "http.inspect",
"summary": "The codecs parameter a sequence of envelopes advertises: its union and its floor",
"cli": "wai http codecs",
"aliases": [],
"usage": [
"wai http codecs <in.wai>..."
],
"placement": "local",
"effect": "reads",
"dry_run": false,
"confirm": "never",
"route": null,
"doors": {
"cli": true,
"mcp": false,
"http": false
},
"toolset": "core",
"stability": "preview",
"input": {
"type": "object",
"properties": {
"envelopes": {
"type": "array",
"items": {
"type": "string"
},
"description": "The envelopes.",
"x-cli": {
"positional": true
}
}
},
"required": [
"envelopes"
],
"additionalProperties": false
},
"output": {
"type": "object",
"properties": {
"text": {
"type": "string"
}
},
"required": [
"text"
]
},
"stream": null,
"since": "0.3.0",
"deprecated": null,
"receipt": false,
"needs": {
"all": [
"http"
]
},
"names": {
"cli": "wai http inspect",
"mcp": null,
"c": "wai_http_inspect",
"rust": "wai::http::inspect",
"sdk": "wai.http.inspect"
}
},
{
"id": "http.start",
"summary": "An origin on loopback serving a published directory with http-delivery's headers, ranges and If-Range",
"cli": "wai http origin",
"aliases": [],
"usage": [
"wai http origin --root <dir> [--port P] [--delay-range FIRST-LAST:MS]"
],
"placement": "local",
"effect": "runs",
"dry_run": true,
"confirm": "when-replacing-an-unnamed-file",
"route": null,
"doors": {
"cli": true,
"mcp": false,
"http": false
},
"toolset": "core",
"stability": "preview",
"input": {
"type": "object",
"properties": {
"root": {
"type": "string",
"format": "path",
"description": "The published directory.",
"x-cli": {
"flag": "--root"
}
},
"port": {
"type": "integer",
"description": "The port on 127.0.0.1.",
"x-cli": {
"flag": "--port"
}
}
},
"required": [
"root"
],
"additionalProperties": false
},
"output": {
"type": "object",
"properties": {
"text": {
"type": "string"
}
},
"required": [
"text"
]
},
"stream": null,
"since": "0.3.0",
"deprecated": null,
"receipt": false,
"needs": {
"all": [
"http"
]
},
"names": {
"cli": "wai http start",
"mcp": null,
"c": "wai_http_start",
"rust": "wai::http::start",
"sdk": "wai.http.start"
}
},
{
"id": "hls.build",
"summary": "An HLS rendition of published objects",
"cli": "wai http hls",
"aliases": [],
"usage": [
"wai http hls --objects <list.json> --out <dir> [--master NAME]"
],
"placement": "local",
"effect": "writes-project",
"dry_run": true,
"confirm": "when-replacing-an-unnamed-file",
"route": null,
"doors": {
"cli": true,
"mcp": false,
"http": false
},
"toolset": "core",
"stability": "preview",
"input": {
"type": "object",
"properties": {
"objects": {
"type": "string",
"format": "path",
"description": "The objects, JSON.",
"x-cli": {
"flag": "--objects"
}
},
"out": {
"type": "string",
"format": "path",
"description": "The directory.",
"x-cli": {
"flag": "--out"
}
}
},
"required": [
"objects",
"out"
],
"additionalProperties": false
},
"output": {
"type": "object",
"properties": {
"text": {
"type": "string"
}
},
"required": [
"text"
]
},
"stream": null,
"since": "0.3.0",
"deprecated": null,
"receipt": false,
"needs": {
"all": [
"http"
]
},
"names": {
"cli": "wai hls build",
"mcp": null,
"c": "wai_hls_build",
"rust": "wai::hls::build",
"sdk": "wai.hls.build"
}
},
{
"id": "dash.build",
"summary": "A DASH manifest of published objects",
"cli": "wai http mpd",
"aliases": [],
"usage": [
"wai http mpd --objects <list.json> --out <wai.mpd> [--period-id ID] [--set-id N]"
],
"placement": "local",
"effect": "writes-project",
"dry_run": true,
"confirm": "when-replacing-an-unnamed-file",
"route": null,
"doors": {
"cli": true,
"mcp": false,
"http": false
},
"toolset": "core",
"stability": "preview",
"input": {
"type": "object",
"properties": {
"objects": {
"type": "string",
"format": "path",
"description": "The objects, JSON.",
"x-cli": {
"flag": "--objects"
}
},
"out": {
"type": "string",
"format": "path",
"description": "The manifest.",
"x-cli": {
"flag": "--out"
}
}
},
"required": [
"objects",
"out"
],
"additionalProperties": false
},
"output": {
"type": "object",
"properties": {
"text": {
"type": "string"
}
},
"required": [
"text"
]
},
"stream": null,
"since": "0.3.0",
"deprecated": null,
"receipt": false,
"needs": {
"all": [
"http"
]
},
"names": {
"cli": "wai dash build",
"mcp": null,
"c": "wai_dash_build",
"rust": "wai::dash::build",
"sdk": "wai.dash.build"
}
},
{
"id": "playlist.lock",
"summary": "A media playlist sealed with a signed manifest receipt",
"cli": "wai http seal-playlist",
"aliases": [],
"usage": [
"wai http seal-playlist <m3u8> --key <name|seed> [--signer-id ID] [--content-id ID] [--parent <mr.json>] [--out <dir>]"
],
"placement": "local",
"effect": "writes-project",
"dry_run": true,
"confirm": "when-replacing-an-unnamed-file",
"route": null,
"doors": {
"cli": true,
"mcp": false,
"http": false
},
"toolset": "core",
"stability": "preview",
"input": {
"type": "object",
"properties": {
"playlist": {
"type": "string",
"format": "path",
"description": "The playlist.",
"x-cli": {
"positional": true
}
},
"key": {
"type": "string",
"description": "The signing key: its name in the keystore (wai key list), 64 hexadecimal digits, or a file holding them.",
"x-cli": {
"flag": "--key"
}
}
},
"required": [
"playlist",
"key"
],
"additionalProperties": false
},
"output": {
"type": "object",
"properties": {
"text": {
"type": "string"
}
},
"required": [
"text"
]
},
"stream": null,
"since": "0.3.0",
"deprecated": null,
"receipt": true,
"needs": {
"all": [
"http",
"video_manifest"
]
},
"names": {
"cli": "wai playlist lock",
"mcp": null,
"c": "wai_playlist_lock",
"rust": "wai::playlist::lock",
"sdk": "wai.playlist.lock"
}
},
{
"id": "playlist.verify",
"summary": "A media playlist checked against its manifest receipt",
"cli": "wai http check-playlist",
"aliases": [],
"usage": [
"wai http check-playlist <m3u8> --receipt <mr.json> [--parent <mr.json>] [--classical <m3u8>]"
],
"placement": "local",
"effect": "reads",
"dry_run": false,
"confirm": "never",
"route": null,
"doors": {
"cli": true,
"mcp": false,
"http": false
},
"toolset": "core",
"stability": "preview",
"input": {
"type": "object",
"properties": {
"playlist": {
"type": "string",
"format": "path",
"description": "The playlist.",
"x-cli": {
"positional": true
}
},
"receipt": {
"type": "string",
"format": "path",
"description": "Its manifest receipt.",
"x-cli": {
"flag": "--receipt"
}
}
},
"required": [
"playlist",
"receipt"
],
"additionalProperties": false
},
"output": {
"type": "object",
"properties": {
"text": {
"type": "string"
}
},
"required": [
"text"
]
},
"stream": null,
"since": "0.3.0",
"deprecated": null,
"receipt": false,
"needs": {
"all": [
"http",
"video_manifest"
]
},
"names": {
"cli": "wai playlist verify",
"mcp": null,
"c": "wai_playlist_verify",
"rust": "wai::playlist::verify",
"sdk": "wai.playlist.verify"
}
},
{
"id": "corpus.generate",
"summary": "The HTTP conformance corpus: generated, verified, or its differential and fuzz cases written",
"cli": "wai http vectors",
"aliases": [],
"usage": [
"wai http vectors gen|verify <http-conformance dir>",
"wai http vectors diff|fuzz <dir> --seed S --count N --out F"
],
"placement": "local",
"effect": "writes-project",
"dry_run": true,
"confirm": "when-replacing-an-unnamed-file",
"route": null,
"doors": {
"cli": true,
"mcp": false,
"http": false
},
"toolset": "maintainer",
"stability": "preview",
"input": {
"type": "object",
"properties": {
"mode": {
"type": "string",
"description": "gen, verify, diff or fuzz.",
"x-cli": {
"positional": true
}
},
"dir": {
"type": "string",
"format": "path",
"description": "The corpus directory.",
"x-cli": {
"positional": true
}
}
},
"required": [
"mode",
"dir"
],
"additionalProperties": false
},
"output": {
"type": "object",
"properties": {
"text": {
"type": "string"
}
},
"required": [
"text"
]
},
"stream": null,
"since": "0.3.0",
"deprecated": null,
"receipt": false,
"needs": {
"all": [
"http"
]
},
"names": {
"cli": "wai corpus generate",
"mcp": null,
"c": "wai_corpus_generate",
"rust": "wai::corpus::generate",
"sdk": "wai.corpus.generate"
}
},
{
"id": "http.load",
"summary": "An object fetched by the byte-range procedure, repeatedly, and the record of each run",
"cli": "wai http bench",
"aliases": [],
"usage": [
"wai http bench --url URL --runs N --advertise CAP [--advertise CAP]... --out F"
],
"placement": "client",
"effect": "writes-project",
"dry_run": true,
"confirm": "when-replacing-an-unnamed-file",
"route": null,
"doors": {
"cli": true,
"mcp": false,
"http": false
},
"toolset": "core",
"stability": "preview",
"input": {
"type": "object",
"properties": {
"url": {
"type": "string",
"description": "The object's URL.",
"x-cli": {
"flag": "--url"
}
},
"runs": {
"type": "integer",
"description": "How many runs.",
"x-cli": {
"flag": "--runs"
}
},
"advertise": {
"type": "array",
"items": {
"type": "string"
},
"description": "A capability this sink advertises.",
"x-cli": {
"flag": "--advertise"
}
},
"out": {
"type": "string",
"format": "path",
"description": "The record.",
"x-cli": {
"flag": "--out"
}
}
},
"required": [
"url",
"runs",
"advertise",
"out"
],
"additionalProperties": false
},
"output": {
"type": "object",
"properties": {
"text": {
"type": "string"
}
},
"required": [
"text"
]
},
"stream": null,
"since": "0.3.0",
"deprecated": null,
"receipt": false,
"needs": {
"all": [
"http"
]
},
"names": {
"cli": "wai http load",
"mcp": null,
"c": "wai_http_load",
"rust": "wai::http::load",
"sdk": "wai.http.load"
}
},
{
"id": "receipt.fetch",
"summary": "An object's receipt index fetched over HTTP and checked, its signers confirmed under the origin's key log where named",
"cli": "wai http receipts",
"aliases": [],
"usage": [
"wai http receipts --url URL [--advertise CAP]... [--held fetch|none] [--join] [--max-walk N] [--fetch-budget N]",
" [--deadline-ms MS] [--key-origin https://HOST[:PORT] [--pin-key-log FILE | --test-plaintext-connect HOST:PORT]]"
],
"placement": "client",
"effect": "reads",
"dry_run": false,
"confirm": "never",
"route": null,
"doors": {
"cli": true,
"mcp": false,
"http": false
},
"toolset": "core",
"stability": "preview",
"input": {
"type": "object",
"properties": {
"url": {
"type": "string",
"description": "The object's URL.",
"x-cli": {
"flag": "--url"
}
}
},
"required": [
"url"
],
"additionalProperties": false
},
"output": {
"type": "object",
"properties": {
"text": {
"type": "string"
}
},
"required": [
"text"
]
},
"stream": null,
"since": "0.3.0",
"deprecated": null,
"receipt": false,
"needs": {
"all": [
"http",
"receipt_claims"
]
},
"names": {
"cli": "wai receipt fetch",
"mcp": null,
"c": "wai_receipt_fetch",
"rust": "wai::receipt::fetch",
"sdk": "wai.receipt.fetch"
}
},
{
"id": "cmcd.encode",
"summary": "An observation's CMCD report (delivery-telemetry §5): its mode, the report and, in request mode, its headers, as the corpus's tool writes them",
"cli": "wai cmcd encode",
"aliases": [],
"usage": [
"wai cmcd encode <observation.json> the CMCD report of one observation (delivery-telemetry §5), as JSON, as",
" wai_telemetry encode prints it"
],
"placement": "local",
"effect": "reads",
"dry_run": false,
"confirm": "never",
"route": null,
"doors": {
"cli": true,
"mcp": false,
"http": false
},
"toolset": "core",
"stability": "preview",
"input": {
"type": "object",
"properties": {
"observation": {
"type": "string",
"format": "path",
"description": "An observation (delivery-telemetry §4), JSON.",
"x-cli": {
"positional": true
}
}
},
"required": [
"observation"
],
"additionalProperties": false
},
"output": {
"type": "object",
"required": [
"mode",
"report",
"headers"
],
"properties": {
"mode": {
"enum": [
"request",
"event",
"none"
]
}
},
"description": "The observation's CMCD report: its mode, the report as a CMCD dictionary (null when none is sent), and in request mode its header form"
},
"stream": null,
"since": "0.6.0",
"deprecated": null,
"receipt": false,
"needs": {
"all": [
"telemetry"
]
},
"names": {
"cli": "wai cmcd encode",
"mcp": null,
"c": "wai_cmcd_encode",
"rust": "wai::cmcd::encode",
"sdk": "wai.cmcd.encode"
}
},
{
"id": "cmcd.decode",
"summary": "A CMCD dictionary read back, each member by its key as JSON, as the corpus's tool reads it",
"cli": "wai cmcd decode",
"aliases": [],
"usage": [
"wai cmcd decode <dictionary> a CMCD dictionary (RFC 9651) read back, each member as JSON, as wai_telemetry decode",
" prints it"
],
"placement": "local",
"effect": "reads",
"dry_run": false,
"confirm": "never",
"route": null,
"doors": {
"cli": true,
"mcp": false,
"http": false
},
"toolset": "core",
"stability": "preview",
"input": {
"type": "object",
"properties": {
"dictionary": {
"type": "string",
"description": "A CMCD dictionary, as a query or a header carries it.",
"x-cli": {
"positional": true
}
}
},
"required": [
"dictionary"
],
"additionalProperties": false
},
"output": {
"type": "object",
"description": "Each member of the dictionary by its key: an integer, a boolean, {\"string\": ...}, {\"token\": ...} or a list of integers"
},
"stream": null,
"since": "0.6.0",
"deprecated": null,
"receipt": false,
"needs": {
"all": [
"telemetry"
]
},
"names": {
"cli": "wai cmcd decode",
"mcp": null,
"c": "wai_cmcd_decode",
"rust": "wai::cmcd::decode",
"sdk": "wai.cmcd.decode"
}
},
{
"id": "cmcd.verify",
"summary": "The delivery-telemetry corpus checked: every observation read back to its own bytes and every expected file recomputed, byte for byte",
"cli": "wai cmcd verify",
"aliases": [],
"usage": [
"wai cmcd verify <corpus> telemetry-conformance/ checked as wai_telemetry verify checks it (delivery-telemetry",
" §9.2): every expected file recomputed, every invalid observation refused; exit 1 on a failure"
],
"placement": "local",
"effect": "reads",
"dry_run": false,
"confirm": "never",
"route": null,
"doors": {
"cli": true,
"mcp": false,
"http": false
},
"toolset": "core",
"stability": "preview",
"input": {
"type": "object",
"properties": {
"corpus": {
"type": "string",
"format": "path",
"description": "The corpus's directory (wai/telemetry-conformance).",
"x-cli": {
"positional": true
}
}
},
"required": [
"corpus"
],
"additionalProperties": false
},
"output": {
"type": "object",
"properties": {
"text": {
"type": "string"
}
},
"required": [
"text"
]
},
"stream": null,
"since": "0.6.0",
"deprecated": null,
"receipt": false,
"needs": {
"all": [
"telemetry"
]
},
"names": {
"cli": "wai cmcd verify",
"mcp": null,
"c": "wai_cmcd_verify",
"rust": "wai::cmcd::verify",
"sdk": "wai.cmcd.verify"
}
},
{
"id": "compat.check",
"summary": "What the working tree breaks against a git ref, by category (wire, record, api); a break passes once the CHANGELOG names it, or in a project once breaking.allow accepts it with a reason",
"cli": "wai breaking",
"aliases": [],
"usage": [
"wai breaking --against <git-ref> [--category wire|record|api] [--only <surface>,...] [--skip <surface>,...]",
" [--root <dir>] [--target-dir <dir>] [--all] exit 1 on a break the CHANGELOG does not acknowledge",
"wai breaking (--against <git-ref> | --baseline <dir>) [--project <dir>] [--category ...] [--only ...] [--skip ...]",
" in a project (a directory with wai.json): its package's sink classes and the API it names under breaking.api,",
" against the project at <git-ref> or as published in <dir> (the project, or its package alone); exit 1 on a",
" break breaking.allow does not accept"
],
"placement": "local",
"effect": "reads",
"dry_run": false,
"confirm": "never",
"route": null,
"doors": {
"cli": true,
"mcp": false,
"http": false
},
"toolset": "core",
"stability": "stable",
"input": {
"type": "object",
"properties": {
"against": {
"type": "string",
"description": "The git ref to compare with (required outside a project).",
"x-cli": {
"flag": "--against"
}
},
"baseline": {
"type": "string",
"format": "path",
"description": "In a project, the directory to compare with instead of a git ref: the project as published, or its package.",
"x-cli": {
"flag": "--baseline"
}
},
"project": {
"type": "string",
"format": "path",
"description": "The project to check (a directory with wai.json; the current one when it has one).",
"x-cli": {
"flag": "--project"
}
},
"category": {
"type": "string",
"description": "wire, record or api: the categories checked, cumulative (api).",
"x-cli": {
"flag": "--category"
}
},
"only": {
"type": "string",
"description": "Only these surfaces, comma-separated.",
"x-cli": {
"flag": "--only"
}
},
"skip": {
"type": "string",
"description": "Not these surfaces, comma-separated.",
"x-cli": {
"flag": "--skip"
}
},
"root": {
"type": "string",
"format": "path",
"description": "The repository's root (.).",
"x-cli": {
"flag": "--root"
}
},
"target_dir": {
"type": "string",
"format": "path",
"description": "Where the Rust API's description is built.",
"x-cli": {
"flag": "--target-dir"
}
},
"all": {
"type": "boolean",
"description": "List every finding, compatible ones too.",
"x-cli": {
"flag": "--all"
}
}
},
"required": [],
"additionalProperties": false
},
"output": {
"type": "object",
"required": [
"against",
"findings"
],
"description": "Each finding's id, category, what changed and whether the CHANGELOG acknowledges it (in a project, whether breaking.allow accepts it, and its reason); a preview operation's change, which the changelog is owed a line for; and a break no line acknowledges, with why"
},
"stream": null,
"since": "0.3.0",
"deprecated": null,
"receipt": false,
"needs": null,
"names": {
"cli": "wai compat check",
"mcp": null,
"c": "wai_compat_check",
"rust": "wai::compat::check",
"sdk": "wai.compat.check"
}
},
{
"id": "conformance.run",
"summary": "WAI's conformance corpus run against another implementation, through a command or an HTTP adapter or, for a relay, the MOQT interop client, or every corpus's independent verifier; each result a signed record wai verify checks",
"cli": "wai conform",
"aliases": [],
"usage": [
"wai conform <kind> --suite <suite> --impl <command or URL> [--independent] [--key <file>] [--out <file>]",
" [--root <wai-dir>] [--timeout <seconds>] [--name <text>] [--version <text>] [--python <program>] [--all]",
" [--level required|all] [--format text|json|junit|html] [--yes] `wai conformance list` names the kinds and",
" suites; --independent runs the corpus's independent verifier beside the implementation, and both must conform;",
" a case is required unless its corpus marks it informative, and --level all counts every case",
"wai conform relay --suite moqt --impl <moqt:// or https:// URL> [--draft 22|18|16] [--tls-disable-verify] [--out <file>]",
" [--root <wai-dir>] [--timeout <seconds>] [--name <text>] [--version <text>] [--format text|json|junit|html] [--yes]",
" a relay held to the MOQT interop cases by joule-moq-interop, found beside wai, on PATH or at WAI_MOQ_INTEROP_BIN",
"wai conform --independent [--suite <area|name>[,...]] [--out <dir>] [--key <file>] [--root <wai-dir>]",
" [--timeout <seconds>] [--python <program>] [--format text|json|junit|html] [--yes] every corpus's",
" independent verifier (or those named), a record each in <dir>; a record that exists is replaced only with",
" --yes (--confirm, deprecated, is the same)"
],
"placement": "local",
"effect": "writes-project",
"dry_run": true,
"confirm": "when-replacing-a-file",
"route": null,
"doors": {
"cli": true,
"mcp": true,
"http": false
},
"toolset": "core",
"stability": "stable",
"input": {
"type": "object",
"properties": {
"kind": {
"type": "string",
"description": "The kind of implementation (wai conformance list): a decoder, a verifier, an origin, a cache, a packager, a sink, a relay; none with --independent alone.",
"x-cli": {
"positional": true
}
},
"suite": {
"type": "string",
"description": "The suite (wai conformance list); with --independent alone, areas and independent verifiers, comma-separated.",
"x-cli": {
"flag": "--suite"
}
},
"impl": {
"type": "string",
"description": "The implementation: a command with {case}/{in}/{out}/{corpus}/{model} placeholders (a cache's: {port} and {origin}), or a URL (a relay's: moqt:// or https://); required with a kind.",
"x-cli": {
"flag": "--impl"
}
},
"independent": {
"type": "boolean",
"description": "Run the corpus's independent verifier beside the implementation, held to the same cases; without a kind, every independent verifier.",
"x-cli": {
"flag": "--independent"
}
},
"key": {
"type": "string",
"format": "path",
"description": "The seed the records are signed with.",
"x-cli": {
"flag": "--key"
}
},
"out": {
"type": "string",
"format": "path",
"description": "The record (<suite>.wai-conform.json); with --independent alone, a directory for a record a corpus.",
"x-cli": {
"flag": "--out"
}
},
"root": {
"type": "string",
"format": "path",
"description": "The wai/ directory whose corpora are run.",
"x-cli": {
"flag": "--root"
}
},
"timeout": {
"type": "integer",
"description": "Seconds a case may take (60), or an independent verifier its whole corpus (1800).",
"x-cli": {
"flag": "--timeout"
}
},
"name": {
"type": "string",
"description": "The implementation's name, for the record.",
"x-cli": {
"flag": "--name"
}
},
"version": {
"type": "string",
"description": "The implementation's version, for the record.",
"x-cli": {
"flag": "--version"
}
},
"python": {
"type": "string",
"description": "The Python the independent verifiers run with (python3).",
"x-cli": {
"flag": "--python"
}
},
"format": {
"type": "string",
"description": "What is printed: text, json (the envelope, as --json), junit (JUnit XML) or html, the last two from the records.",
"x-cli": {
"flag": "--format"
}
},
"all": {
"type": "boolean",
"description": "List every case, passed ones too.",
"x-cli": {
"flag": "--all"
}
},
"level": {
"type": "string",
"description": "required (the default: a case the corpus marks informative is reported, not counted) or all (every case counted); for a suite whose corpus marks a case informative.",
"x-cli": {
"flag": "--level"
}
},
"draft": {
"type": "integer",
"description": "A relay's MOQT draft, 22, 18 (the default) or 16: the one the interop client speaks to it.",
"x-cli": {
"flag": "--draft"
}
},
"tls_disable_verify": {
"type": "boolean",
"description": "A relay's certificate is not verified (one it made for itself).",
"x-cli": {
"flag": "--tls-disable-verify"
}
}
},
"required": [],
"additionalProperties": false
},
"output": {
"type": "object",
"required": [
"conformant",
"cases",
"passed",
"failed"
]
},
"stream": null,
"since": "0.3.0",
"deprecated": null,
"receipt": true,
"needs": {
"all": [
"quickstart"
]
},
"names": {
"cli": "wai conformance run",
"mcp": "conformance_run",
"c": "wai_conformance_run",
"rust": "wai::conformance::run",
"sdk": "wai.conformance.run"
}
},
{
"id": "conformance.list",
"summary": "The kinds and suites wai conform runs, each suite's corpus and its cases, and every corpus's independent verifier",
"cli": "wai conformance list",
"aliases": [],
"usage": [
"wai conformance list [--root <wai-dir>] the kinds and suites, and the independent verifiers (also wai conform --list)"
],
"placement": "local",
"effect": "reads",
"dry_run": false,
"confirm": "never",
"route": null,
"doors": {
"cli": true,
"mcp": true,
"http": false
},
"toolset": "core",
"stability": "stable",
"input": {
"type": "object",
"properties": {
"root": {
"type": "string",
"format": "path",
"description": "The wai/ directory whose corpora are listed.",
"x-cli": {
"flag": "--root"
}
}
},
"required": [],
"additionalProperties": false
},
"output": {
"type": "object",
"required": [
"suites"
]
},
"stream": null,
"since": "0.3.0",
"deprecated": null,
"receipt": false,
"needs": {
"all": [
"quickstart"
]
},
"names": {
"cli": "wai conformance list",
"mcp": "conformance_list",
"c": "wai_conformance_list",
"rust": "wai::conformance::list",
"sdk": "wai.conformance.list"
}
},
{
"id": "conformance.generate",
"summary": "A conformance corpus written by its generator, the tool the conformance workflow verifies it with, or verified by it",
"cli": "wai conformance gen",
"aliases": [],
"usage": [
"wai conformance gen --suite <corpus>[,...] [--verify] [--root <wai-dir>] [--bin-dir <dir>] each corpus written by",
" its tool's generator (cargo run in <root>/wai-rs, or the tool built in <dir>); --verify runs its verifier instead;",
" `wai conformance list` names the corpora"
],
"placement": "local",
"effect": "writes-project",
"dry_run": true,
"confirm": "when-replacing-an-unnamed-file",
"route": null,
"doors": {
"cli": true,
"mcp": false,
"http": false
},
"toolset": "maintainer",
"stability": "preview",
"input": {
"type": "object",
"properties": {
"suite": {
"type": "string",
"description": "The corpora, comma-separated (wai conformance list).",
"x-cli": {
"flag": "--suite"
}
},
"verify": {
"type": "boolean",
"description": "Run each tool's verifier, which writes nothing, instead of its generator.",
"x-cli": {
"flag": "--verify"
}
},
"root": {
"type": "string",
"format": "path",
"description": "The wai/ directory of the checkout whose corpora are written.",
"x-cli": {
"flag": "--root"
}
},
"bin_dir": {
"type": "string",
"format": "path",
"description": "Where the tools are built; without it each is built and run with cargo.",
"x-cli": {
"flag": "--bin-dir"
}
}
},
"required": [
"suite"
],
"additionalProperties": false
},
"output": {
"type": "object",
"required": [
"corpora"
],
"description": "Each corpus named, its tool, its directory and the command each mode ran with its exit status; passed and failed count the corpora"
},
"stream": null,
"since": "0.5.0",
"deprecated": null,
"receipt": false,
"needs": {
"all": [
"quickstart"
]
},
"names": {
"cli": "wai conformance generate",
"mcp": null,
"c": "wai_conformance_generate",
"rust": "wai::conformance::generate",
"sdk": "wai.conformance.generate"
}
},
{
"id": "enrolment.create",
"summary": "A node's enrolment signed with the organisation key, written to a file and, with --target, given to a fleet service",
"cli": "wai enrolment create",
"aliases": [],
"usage": [
"wai enrolment create <node-key> --role <role> --key <name|file> [--label L] [--from µs] [--until µs] [--out F]",
" [--target <name|url>] [--yes] a node's enrolment (WFE1), signed with the organisation key, written to F",
" (<node>.wfe without --target) and, with --target, given to the fleet service it names (never to the target in",
" use unless named); changing the service or replacing a file waits for --yes (--confirm, deprecated, is the same)"
],
"placement": "client",
"effect": "writes-target",
"dry_run": true,
"confirm": "when-changing-the-target-or-replacing-a-file",
"route": null,
"doors": {
"cli": true,
"mcp": false,
"http": false
},
"toolset": "core",
"stability": "preview",
"input": {
"type": "object",
"properties": {
"node": {
"type": "string",
"description": "The node's Ed25519 public key, 64 hexadecimal digits.",
"x-cli": {
"positional": true
}
},
"role": {
"type": "string",
"description": "relay, compositor, ingest, room, ledger or audit.",
"x-cli": {
"flag": "--role"
}
},
"key": {
"type": "string",
"description": "The organisation key: its name in the keystore (wai key list), or its file: 32 bytes, or 64 hexadecimal digits.",
"x-cli": {
"flag": "--key"
}
},
"label": {
"type": "string",
"description": "The node's label, at most 64 bytes.",
"x-cli": {
"flag": "--label"
}
},
"from": {
"type": "integer",
"description": "The start of the span it holds, microseconds since 1970 (0).",
"x-cli": {
"flag": "--from"
}
},
"until": {
"type": "integer",
"description": "The end of that span, microseconds since 1970 (none).",
"x-cli": {
"flag": "--until"
}
},
"out": {
"type": "string",
"format": "path",
"description": "The enrolment's file (<node>.wfe when no --target is given).",
"x-cli": {
"flag": "--out"
}
},
"target": {
"type": "string",
"description": "The service it acts on: a target's name (wai target list) or a service's http:// or https:// address.",
"x-cli": {
"flag": "--target"
}
}
},
"required": [
"node",
"role",
"key"
],
"additionalProperties": false
},
"output": {
"type": "object",
"required": [
"node",
"role",
"organisation",
"digest",
"enrolment"
],
"description": "The enrolment (WFE1, hexadecimal), its digest, and the file and service it went to"
},
"stream": null,
"since": "0.3.0",
"deprecated": null,
"receipt": true,
"needs": {
"all": [
"fleet"
]
},
"names": {
"cli": "wai enrolment create",
"mcp": null,
"c": "wai_enrolment_create",
"rust": "wai::enrolment::create",
"sdk": "wai.enrolment.create"
}
},
{
"id": "enrolment.list",
"summary": "The nodes a fleet service holds enrolled, each with its role, label and how many records it gave",
"cli": "wai enrolment list",
"aliases": [],
"usage": [
"wai enrolment list [--target <name|url>] the nodes the fleet service holds enrolled (the target in use when none is named)"
],
"placement": "client",
"effect": "reads",
"dry_run": false,
"confirm": "never",
"route": null,
"doors": {
"cli": true,
"mcp": false,
"http": false
},
"toolset": "core",
"stability": "preview",
"input": {
"type": "object",
"properties": {
"target": {
"type": "string",
"description": "The service it acts on: a target's name (wai target list) or a service's http:// or https:// address.",
"x-cli": {
"flag": "--target"
}
}
},
"required": [],
"additionalProperties": false
},
"output": {
"type": "object",
"required": [
"enrolments"
],
"description": "Each node the fleet service holds enrolled: its key, role, label and records"
},
"stream": null,
"since": "0.3.0",
"deprecated": null,
"receipt": false,
"needs": null,
"names": {
"cli": "wai enrolment list",
"mcp": null,
"c": "wai_enrolment_list",
"rust": "wai::enrolment::list",
"sdk": "wai.enrolment.list"
}
},
{
"id": "report.create",
"summary": "The fleet report of a period, signed by a fleet service over the enrolments and records it holds",
"cli": "wai report create",
"aliases": [],
"usage": [
"wai report create [--target <name|url>] --start µs --end µs [--yes] the fleet report of [start, end), signed by the",
" fleet service (the target in use when none is named); it changes the service, so it waits for --yes (--confirm,",
" deprecated, is the same)"
],
"placement": "client",
"effect": "writes-target",
"dry_run": true,
"confirm": "always",
"route": null,
"doors": {
"cli": true,
"mcp": false,
"http": false
},
"toolset": "core",
"stability": "preview",
"input": {
"type": "object",
"properties": {
"target": {
"type": "string",
"description": "The service it acts on: a target's name (wai target list) or a service's http:// or https:// address.",
"x-cli": {
"flag": "--target"
}
},
"start": {
"type": "integer",
"description": "The period's start, microseconds since 1970.",
"x-cli": {
"flag": "--start"
}
},
"end": {
"type": "integer",
"description": "The period's end, after its start.",
"x-cli": {
"flag": "--end"
}
}
},
"required": [
"start",
"end"
],
"additionalProperties": false
},
"output": {
"type": "object",
"required": [
"report",
"outcome"
],
"description": "The report's digest and its outcome as extensions/fleet.md §7.3 states it"
},
"stream": null,
"since": "0.3.0",
"deprecated": null,
"receipt": true,
"needs": null,
"names": {
"cli": "wai report create",
"mcp": null,
"c": "wai_report_create",
"rust": "wai::report::create",
"sdk": "wai.report.create"
}
},
{
"id": "report.export",
"summary": "A fleet report's bundle fetched from a fleet service, its report recomputed here, then written to a file",
"cli": "wai report export",
"aliases": [],
"usage": [
"wai report export <digest> [--target <name|url>] [--out F] [--yes] the report's bundle from the fleet service",
" (the target in use when none is named), recomputed by this build and written to F (<digest>.wai-fleet.json) for",
" `wai verify`; replacing a file waits for --yes (--confirm, deprecated, is the same)"
],
"placement": "client",
"effect": "writes-project",
"dry_run": true,
"confirm": "when-replacing-a-file",
"route": null,
"doors": {
"cli": true,
"mcp": false,
"http": false
},
"toolset": "core",
"stability": "preview",
"input": {
"type": "object",
"properties": {
"digest": {
"type": "string",
"description": "The report's digest, 64 hexadecimal digits.",
"x-cli": {
"positional": true
}
},
"target": {
"type": "string",
"description": "The service it acts on: a target's name (wai target list) or a service's http:// or https:// address.",
"x-cli": {
"flag": "--target"
}
},
"out": {
"type": "string",
"format": "path",
"description": "The bundle's file (<digest>.wai-fleet.json).",
"x-cli": {
"flag": "--out"
}
}
},
"required": [
"digest"
],
"additionalProperties": false
},
"output": {
"type": "object",
"required": [
"file",
"outcome"
],
"description": "The bundle's file and its outcome, recomputed here"
},
"stream": null,
"since": "0.3.0",
"deprecated": null,
"receipt": true,
"needs": {
"all": [
"fleet"
]
},
"names": {
"cli": "wai report export",
"mcp": null,
"c": "wai_report_export",
"rust": "wai::report::export",
"sdk": "wai.report.export"
}
},
{
"id": "route.verify",
"summary": "A route record checked offline against its request, price book and routing policy, and against its hops' OER/2 receipts where given",
"cli": "wai route verify",
"aliases": [],
"usage": [
"wai route verify <document.json> a verification document (extensions/route-record.md §7.1): the record's outcome",
" (§7.3) as JSON, recomputed from the request, the price book and the policy; exit 1 when it is refused"
],
"placement": "local",
"effect": "reads",
"dry_run": false,
"confirm": "never",
"route": null,
"doors": {
"cli": true,
"mcp": false,
"http": false
},
"toolset": "core",
"stability": "preview",
"input": {
"type": "object",
"properties": {
"document": {
"type": "string",
"format": "path",
"description": "The verification document: the request, price book, policy and record, and the hops' receipts.",
"x-cli": {
"positional": true
}
}
},
"required": [
"document"
],
"additionalProperties": false
},
"output": {
"type": "object",
"required": [
"outcome"
],
"description": "The outcome of extensions/route-record.md §7.3: accept with the record's digest, the served and billed hops, the deadline, the order, the decision, the removals and the unmetered hops; or refuse with the reason and where"
},
"stream": null,
"since": "0.3.0",
"deprecated": null,
"receipt": false,
"needs": {
"all": [
"route_record"
]
},
"names": {
"cli": "wai route verify",
"mcp": null,
"c": "wai_route_verify",
"rust": "wai::route::verify",
"sdk": "wai.route.verify"
}
},
{
"id": "channel.import",
"summary": "A linear channel's feeds (an XMLTV schedule, Media RSS catalogues or the JSON form, and a Media Playlist's SCTE-35 date ranges) imported into its signed receipt, its signed lineup and its breaks' cues",
"cli": "wai channel import",
"aliases": [],
"usage": [
"wai channel import --channel ID (--xmltv F [--mrss F]... | --mrss F... | --feed F) [--playlist F] --key K",
" [--mrss-owner O]... [--owner O] [--signer-id S] [--id-system N] [--xmltv-channel X] [--start-ms T] [--artwork DIR]",
" [--window-start T --window-end T] [--parent HEX] [--out-dir D] [--yes] the receipt (channel.json), the lineup",
" (lineup.wlu) and the cues (cues.json), written to D (.); a refusal's code is its reason; replacing a file waits",
" for --yes (--confirm, deprecated, is the same)"
],
"placement": "local",
"effect": "writes-project",
"dry_run": true,
"confirm": "when-replacing-a-file",
"route": null,
"doors": {
"cli": true,
"mcp": false,
"http": false
},
"toolset": "core",
"stability": "preview",
"input": {
"type": "object",
"properties": {
"channel": {
"type": "string",
"description": "The channel id.",
"x-cli": {
"flag": "--channel"
}
},
"xmltv": {
"type": "string",
"format": "path",
"description": "An XMLTV document: the schedule.",
"x-cli": {
"flag": "--xmltv"
}
},
"mrss": {
"type": "array",
"items": {
"type": "string"
},
"description": "A Media RSS document: a catalogue. Repeated.",
"x-cli": {
"flag": "--mrss"
}
},
"mrss_owner": {
"type": "array",
"items": {
"type": "string"
},
"description": "The rights holder of each --mrss document's items, in their order: none, or one each.",
"x-cli": {
"flag": "--mrss-owner"
}
},
"feed": {
"type": "string",
"format": "path",
"description": "The JSON form of a schedule, its catalogue and its breaks.",
"x-cli": {
"flag": "--feed"
}
},
"playlist": {
"type": "string",
"format": "path",
"description": "The channel's HLS Media Playlist, whose SCTE-35 date ranges are its breaks.",
"x-cli": {
"flag": "--playlist"
}
},
"key": {
"type": "string",
"description": "The operator's key: its name in the keystore (wai key list), or its file: 32 bytes, or 64 hexadecimal digits.",
"x-cli": {
"flag": "--key"
}
},
"owner": {
"type": "string",
"description": "The rights holder of every asset no other input gives one.",
"x-cli": {
"flag": "--owner"
}
},
"signer_id": {
"type": "string",
"description": "The receipt's signer id (the operator key's did:key).",
"x-cli": {
"flag": "--signer-id"
}
},
"id_system": {
"type": "string",
"description": "The XMLTV episode-num system that names a programme's asset (wai-asset-id).",
"x-cli": {
"flag": "--id-system"
}
},
"xmltv_channel": {
"type": "string",
"description": "The XMLTV channel id whose programmes are read (the channel id).",
"x-cli": {
"flag": "--xmltv-channel"
}
},
"start_ms": {
"type": "integer",
"description": "Where a schedule of Media RSS items alone begins, milliseconds since 1970.",
"x-cli": {
"flag": "--start-ms"
}
},
"artwork": {
"type": "string",
"format": "path",
"description": "The directory holding the artwork files the feeds' icons and thumbnails name.",
"x-cli": {
"flag": "--artwork"
}
},
"window_start": {
"type": "integer",
"description": "The receipt's window's start (the schedule's first start).",
"x-cli": {
"flag": "--window-start"
}
},
"window_end": {
"type": "integer",
"description": "The receipt's window's end (the schedule's last end).",
"x-cli": {
"flag": "--window-end"
}
},
"parent": {
"type": "string",
"description": "The receipt hash of the window before this one, 64 hexadecimal digits.",
"x-cli": {
"flag": "--parent"
}
},
"out_dir": {
"type": "string",
"format": "path",
"description": "Where channel.json, lineup.wlu and cues.json are written (.).",
"x-cli": {
"flag": "--out-dir"
}
}
},
"required": [
"channel",
"key"
],
"additionalProperties": false
},
"output": {
"type": "object",
"required": [
"channel",
"receipt",
"receipt_hash",
"schedule_root",
"lineup",
"lineup_digest",
"cues"
],
"description": "The files written (the receipt, the lineup, the cues), the receipt's identity and schedule root, the lineup's digest, and their counts"
},
"stream": null,
"since": "0.3.0",
"deprecated": null,
"receipt": true,
"needs": {
"all": [
"channel_lineup"
]
},
"names": {
"cli": "wai channel import",
"mcp": null,
"c": "wai_channel_import",
"rust": "wai::channel::import",
"sdk": "wai.channel.import"
}
},
{
"id": "channel.guide",
"summary": "A channel's guide, an XMLTV document or a now/next document, rendered from its receipt and its lineup and naming both",
"cli": "wai channel guide",
"aliases": [],
"usage": [
"wai channel guide --receipt R --lineup L [--from T --to T | --now-next --at T] [--out F] [--yes] the XMLTV guide",
" of a range (the whole schedule), or the now/next document of an instant, written to F (guide.xml, now-next.json);",
" replacing a file waits for --yes (--confirm, deprecated, is the same)"
],
"placement": "local",
"effect": "writes-project",
"dry_run": true,
"confirm": "when-replacing-a-file",
"route": null,
"doors": {
"cli": true,
"mcp": false,
"http": false
},
"toolset": "core",
"stability": "preview",
"input": {
"type": "object",
"properties": {
"receipt": {
"type": "string",
"format": "path",
"description": "The channel receipt, in its JSON carriage.",
"x-cli": {
"flag": "--receipt"
}
},
"lineup": {
"type": "string",
"format": "path",
"description": "The lineup's file.",
"x-cli": {
"flag": "--lineup"
}
},
"from": {
"type": "integer",
"description": "The range's start, milliseconds since 1970 (the schedule's first start).",
"x-cli": {
"flag": "--from"
}
},
"to": {
"type": "integer",
"description": "The range's end (the schedule's last end).",
"x-cli": {
"flag": "--to"
}
},
"now_next": {
"type": "boolean",
"description": "The now/next document of --at instead.",
"x-cli": {
"flag": "--now-next"
}
},
"at": {
"type": "integer",
"description": "The instant of a now/next document, milliseconds since 1970.",
"x-cli": {
"flag": "--at"
}
},
"out": {
"type": "string",
"format": "path",
"description": "The guide's file (guide.xml, or now-next.json).",
"x-cli": {
"flag": "--out"
}
}
},
"required": [
"receipt",
"lineup"
],
"additionalProperties": false
},
"output": {
"type": "object",
"required": [
"file",
"format",
"schedule_root",
"lineup"
],
"description": "The guide's file and format (xmltv or now-next), the sources it names, and its range or instant"
},
"stream": null,
"since": "0.3.0",
"deprecated": null,
"receipt": false,
"needs": {
"all": [
"channel_lineup"
]
},
"names": {
"cli": "wai channel guide",
"mcp": null,
"c": "wai_channel_guide",
"rust": "wai::channel::guide",
"sdk": "wai.channel.guide"
}
},
{
"id": "channel.verify",
"summary": "A channel's receipt, its lineup and a guide verified together: the guide recomputed from the two and compared, each programme with whether it aired",
"cli": "wai channel verify",
"aliases": [],
"usage": [
"wai channel verify --receipt R --lineup L [--guide G] the receipt, the lineup and the guide checked together;",
" exit 1 with the reason when one does not verify"
],
"placement": "local",
"effect": "reads",
"dry_run": false,
"confirm": "never",
"route": null,
"doors": {
"cli": true,
"mcp": false,
"http": false
},
"toolset": "core",
"stability": "preview",
"input": {
"type": "object",
"properties": {
"receipt": {
"type": "string",
"format": "path",
"description": "The channel receipt, in its JSON carriage.",
"x-cli": {
"flag": "--receipt"
}
},
"lineup": {
"type": "string",
"format": "path",
"description": "The lineup's file.",
"x-cli": {
"flag": "--lineup"
}
},
"guide": {
"type": "string",
"format": "path",
"description": "An XMLTV guide or a now/next document.",
"x-cli": {
"flag": "--guide"
}
}
},
"required": [
"receipt",
"lineup"
],
"additionalProperties": false
},
"output": {
"type": "object",
"required": [
"verdict",
"part",
"receipt",
"lineup",
"guide",
"entry"
],
"description": "What extensions/channel-lineup.md §8.3 states: the verdict and the part it is about, the receipt's identity, the lineup's digest, and the guide's programmes, each with whether it aired"
},
"stream": null,
"since": "0.3.0",
"deprecated": null,
"receipt": false,
"needs": {
"all": [
"channel_lineup"
]
},
"names": {
"cli": "wai channel verify",
"mcp": null,
"c": "wai_channel_verify",
"rust": "wai::channel::verify",
"sdk": "wai.channel.verify"
}
},
{
"id": "audit.create",
"summary": "A channel's stream-audit report recomputed from a collector's stored sessions and signed with the owner's key, by wai-audit itself",
"cli": "wai audit report",
"aliases": [],
"usage": [
"wai audit report <data> <channel> <from> <to> [--audit BIN] wai-audit report (extensions/stream-audit.md §11): the",
" channel's report over <from>..<to> (microseconds since 1970) from the sessions stored under <data>, signed with the",
" key WAI_AUDIT_KEY names; what it prints and its exit status are wai-audit's. The program is --audit,",
" $WAI_AUDIT_BIN, wai-audit beside wai, or wai-audit on PATH"
],
"placement": "local",
"effect": "reads",
"dry_run": false,
"confirm": "never",
"route": null,
"doors": {
"cli": true,
"mcp": false,
"http": false
},
"toolset": "core",
"stability": "preview",
"input": {
"type": "object",
"properties": {
"data": {
"type": "string",
"format": "path",
"description": "The collector's data directory, where it stored the sessions.",
"x-cli": {
"positional": true
}
},
"channel": {
"type": "string",
"description": "The channel's name.",
"x-cli": {
"positional": true
}
},
"from": {
"type": "integer",
"description": "The period's start, microseconds since 1970.",
"x-cli": {
"positional": true
}
},
"to": {
"type": "integer",
"description": "The period's end, microseconds since 1970.",
"x-cli": {
"positional": true
}
},
"audit": {
"type": "string",
"format": "path",
"description": "The collector's program (wai-audit).",
"x-cli": {
"flag": "--audit"
}
}
},
"required": [
"data",
"channel",
"from",
"to"
],
"additionalProperties": false
},
"output": {
"type": "object",
"description": "The channel's report as wai-audit report prints it: the report over the period with the owner's signature (extensions/stream-audit.md §11), or the collector's error"
},
"stream": null,
"since": "0.6.0",
"deprecated": null,
"receipt": false,
"needs": null,
"names": {
"cli": "wai audit create",
"mcp": null,
"c": "wai_audit_create",
"rust": "wai::audit::create",
"sdk": "wai.audit.create"
}
},
{
"id": "audit.check",
"summary": "A served stream-audit report checked against the session bundles it reads, recomputed from them and its signature the owner's, by wai-audit itself",
"cli": "wai audit check",
"aliases": [],
"usage": [
"wai audit check <served.json> <channel> <bundle>... [--owner <hex>] [--audit BIN] wai-audit check",
" (extensions/stream-audit.md §11.4): the report recomputed from the bundles given and its signature checked against",
" the owner's key (--owner, or WAI_AUDIT_OWNER); exit 1 when it is refused; what it prints and its exit status are",
" wai-audit's. The program is --audit, $WAI_AUDIT_BIN, wai-audit beside wai, or wai-audit on PATH"
],
"placement": "local",
"effect": "reads",
"dry_run": false,
"confirm": "never",
"route": null,
"doors": {
"cli": true,
"mcp": false,
"http": false
},
"toolset": "core",
"stability": "preview",
"input": {
"type": "object",
"properties": {
"served": {
"type": "string",
"format": "path",
"description": "The report as the collector served it, JSON.",
"x-cli": {
"positional": true
}
},
"channel": {
"type": "string",
"description": "The channel's name.",
"x-cli": {
"positional": true
}
},
"bundles": {
"type": "array",
"items": {
"type": "string"
},
"description": "The session bundles the report reads.",
"x-cli": {
"positional": true
}
},
"owner": {
"type": "string",
"description": "The owner's key, 64 hexadecimal digits (WAI_AUDIT_OWNER otherwise).",
"x-cli": {
"flag": "--owner"
}
},
"audit": {
"type": "string",
"format": "path",
"description": "The collector's program (wai-audit).",
"x-cli": {
"flag": "--audit"
}
}
},
"required": [
"served",
"channel",
"bundles"
],
"additionalProperties": false
},
"output": {
"type": "object",
"properties": {
"text": {
"type": "string"
}
},
"required": [
"text"
]
},
"stream": null,
"since": "0.6.0",
"deprecated": null,
"receipt": false,
"needs": null,
"names": {
"cli": "wai audit check",
"mcp": null,
"c": "wai_audit_check",
"rust": "wai::audit::check",
"sdk": "wai.audit.check"
}
},
{
"id": "audit.verify",
"summary": "A stream-audit session bundle verified for its owner and the channels it serves, its outcome as JSON, by wai-audit itself",
"cli": "wai audit verify",
"aliases": [],
"usage": [
"wai audit verify <bundle> <channel>... [--owner <hex>] [--audit BIN] wai-audit verify (extensions/stream-audit.md",
" §9, §10): the bundle's outcome for the owner's key (--owner, or WAI_AUDIT_OWNER) and the channels named; exit 1 when it",
" is refused; what it prints and its exit status are wai-audit's. wai verify reads a bundle the same way"
],
"placement": "local",
"effect": "reads",
"dry_run": false,
"confirm": "never",
"route": null,
"doors": {
"cli": true,
"mcp": false,
"http": false
},
"toolset": "core",
"stability": "preview",
"input": {
"type": "object",
"properties": {
"bundle": {
"type": "string",
"format": "path",
"description": "The session bundle, JSON.",
"x-cli": {
"positional": true
}
},
"channels": {
"type": "array",
"items": {
"type": "string"
},
"description": "The channels the owner serves.",
"x-cli": {
"positional": true
}
},
"owner": {
"type": "string",
"description": "The owner's key, 64 hexadecimal digits (WAI_AUDIT_OWNER otherwise).",
"x-cli": {
"flag": "--owner"
}
},
"audit": {
"type": "string",
"format": "path",
"description": "The collector's program (wai-audit).",
"x-cli": {
"flag": "--audit"
}
}
},
"required": [
"bundle",
"channels"
],
"additionalProperties": false
},
"output": {
"type": "object",
"required": [
"outcome"
],
"description": "The bundle's outcome as wai-audit verify prints it (extensions/stream-audit.md §10): accept with the session's record, or refuse with the reason and where"
},
"stream": null,
"since": "0.6.0",
"deprecated": null,
"receipt": false,
"needs": null,
"names": {
"cli": "wai audit verify",
"mcp": null,
"c": "wai_audit_verify",
"rust": "wai::audit::verify",
"sdk": "wai.audit.verify"
}
},
{
"id": "service.start",
"summary": "A service of the toolchain started on this machine by its own program, wai-<role>, from its configuration; --check holds the configuration to the program and starts nothing",
"cli": "wai serve",
"aliases": [],
"usage": [
"wai serve <role> [--config <file>] [--check] [--bin <program>] the role's program, run as itself: relay (wai-relay),",
" room (wai-room), ingest (wai-ingest) and key-release (wai-key-release) from the configuration file --config names;",
" audit (wai-audit), fleet (wai-fleet), ledger (wai-ledger) and quantum-service (wai-quantum-service) from their",
" environment, as each program's own documentation states it. --check has the program read the file as it would",
" start from it, report, and start nothing (exit 1 when it does not hold). What it prints and its exit status are the",
" program's. The program is --bin, $WAI_<ROLE>_BIN, the program beside wai, or on PATH; one that is not there is exit 5"
],
"placement": "local",
"effect": "runs",
"dry_run": true,
"confirm": "when-replacing-an-unnamed-file",
"route": null,
"doors": {
"cli": true,
"mcp": false,
"http": false
},
"toolset": "core",
"stability": "preview",
"input": {
"type": "object",
"properties": {
"role": {
"type": "string",
"description": "relay, room, ingest, key-release, audit, fleet, ledger or quantum-service.",
"x-cli": {
"positional": true
}
},
"config": {
"type": "string",
"format": "path",
"description": "The role's configuration file (relay, room, ingest and key-release).",
"x-cli": {
"flag": "--config"
}
},
"check": {
"type": "boolean",
"description": "Have the program read the configuration and report, starting nothing.",
"x-cli": {
"flag": "--check"
}
},
"bin": {
"type": "string",
"format": "path",
"description": "The role's program (wai-<role>).",
"x-cli": {
"flag": "--bin"
}
}
},
"required": [
"role"
],
"additionalProperties": false
},
"output": {
"type": "object",
"properties": {
"text": {
"type": "string"
}
},
"required": [
"text"
]
},
"stream": null,
"since": "0.6.0",
"deprecated": null,
"receipt": false,
"needs": null,
"names": {
"cli": "wai service start",
"mcp": null,
"c": "wai_service_start",
"rust": "wai::service::start",
"sdk": "wai.service.start"
}
},
{
"id": "quantum.run",
"summary": "An OpenQASM program run on this machine as the quantum job service plans it, its result signed with this user's key, by wai-quantum itself",
"cli": "wai quantum run",
"aliases": [],
"usage": [
"wai quantum run [<program.qasm>] [wai-quantum run's options] [--quantum BIN] wai-quantum run: what it prints (with",
" --json, its JSON) and its exit status are wai-quantum's. The program is --quantum, $WAI_QUANTUM_BIN, wai-quantum beside",
" wai, or wai-quantum on PATH"
],
"placement": "local",
"effect": "runs",
"dry_run": true,
"confirm": "when-replacing-an-unnamed-file",
"route": null,
"doors": {
"cli": true,
"mcp": true,
"http": false
},
"toolset": "quantum",
"stability": "preview",
"input": {
"type": "object",
"properties": {
"program": {
"type": "string",
"format": "path",
"description": "The OpenQASM program; standard input when it is left out.",
"x-cli": {
"positional": true
}
},
"quantum": {
"type": "string",
"format": "path",
"description": "The quantum command line (wai-quantum).",
"x-cli": {
"flag": "--quantum"
}
}
},
"required": [],
"additionalProperties": false
},
"output": {
"description": "What wai-quantum prints for the verb with --json: its own JSON, unchanged"
},
"stream": null,
"since": "0.6.0",
"deprecated": null,
"receipt": false,
"needs": null,
"names": {
"cli": "wai quantum run",
"mcp": "quantum_run",
"c": "wai_quantum_run",
"rust": "wai::quantum::run",
"sdk": "wai.quantum.run"
}
},
{
"id": "quantum.inspect",
"summary": "The method an OpenQASM program would run on and why, with the memory and work it would take, without running it, by wai-quantum itself",
"cli": "wai quantum plan",
"aliases": [],
"usage": [
"wai quantum plan [<program.qasm>] [wai-quantum plan's options] [--quantum BIN] wai-quantum plan: what it prints and",
" its exit status are wai-quantum's"
],
"placement": "local",
"effect": "reads",
"dry_run": false,
"confirm": "never",
"route": null,
"doors": {
"cli": true,
"mcp": true,
"http": false
},
"toolset": "quantum",
"stability": "preview",
"input": {
"type": "object",
"properties": {
"program": {
"type": "string",
"format": "path",
"description": "The OpenQASM program; standard input when it is left out.",
"x-cli": {
"positional": true
}
},
"quantum": {
"type": "string",
"format": "path",
"description": "The quantum command line (wai-quantum).",
"x-cli": {
"flag": "--quantum"
}
}
},
"required": [],
"additionalProperties": false
},
"output": {
"description": "What wai-quantum prints for the verb with --json: its own JSON, unchanged"
},
"stream": null,
"since": "0.6.0",
"deprecated": null,
"receipt": false,
"needs": null,
"names": {
"cli": "wai quantum inspect",
"mcp": "quantum_inspect",
"c": "wai_quantum_inspect",
"rust": "wai::quantum::inspect",
"sdk": "wai.quantum.inspect"
}
},
{
"id": "quantum.check",
"summary": "An OpenQASM program read as the engine reads it, each problem with its line, by wai-quantum itself",
"cli": "wai quantum lint",
"aliases": [],
"usage": [
"wai quantum lint [<program.qasm>] [wai-quantum lint's options] [--quantum BIN] wai-quantum lint: what it prints and",
" its exit status are wai-quantum's"
],
"placement": "local",
"effect": "reads",
"dry_run": false,
"confirm": "never",
"route": null,
"doors": {
"cli": true,
"mcp": true,
"http": false
},
"toolset": "quantum",
"stability": "preview",
"input": {
"type": "object",
"properties": {
"program": {
"type": "string",
"format": "path",
"description": "The OpenQASM program; standard input when it is left out.",
"x-cli": {
"positional": true
}
},
"quantum": {
"type": "string",
"format": "path",
"description": "The quantum command line (wai-quantum).",
"x-cli": {
"flag": "--quantum"
}
}
},
"required": [],
"additionalProperties": false
},
"output": {
"description": "What wai-quantum prints for the verb with --json: its own JSON, unchanged"
},
"stream": null,
"since": "0.6.0",
"deprecated": null,
"receipt": false,
"needs": null,
"names": {
"cli": "wai quantum check",
"mcp": "quantum_check",
"c": "wai_quantum_check",
"rust": "wai::quantum::check",
"sdk": "wai.quantum.check"
}
},
{
"id": "quantum.verify",
"summary": "A quantum result's receipt checked: one from a run here, from the job service or from a lab tool, by wai-quantum itself",
"cli": "wai quantum verify",
"aliases": [],
"usage": [
"wai quantum verify <result.json> [wai-quantum verify's options] [--quantum BIN] wai-quantum verify: what it prints",
" and its exit status are wai-quantum's"
],
"placement": "local",
"effect": "reads",
"dry_run": false,
"confirm": "never",
"route": null,
"doors": {
"cli": true,
"mcp": true,
"http": false
},
"toolset": "quantum",
"stability": "preview",
"input": {
"type": "object",
"properties": {
"result": {
"type": "string",
"format": "path",
"description": "A result with its receipt (run --json, submit --json, the service's), or a lab receipt.",
"x-cli": {
"positional": true
}
},
"quantum": {
"type": "string",
"format": "path",
"description": "The quantum command line (wai-quantum).",
"x-cli": {
"flag": "--quantum"
}
}
},
"required": [
"result"
],
"additionalProperties": false
},
"output": {
"description": "What wai-quantum prints for the verb with --json: its own JSON, unchanged"
},
"stream": null,
"since": "0.6.0",
"deprecated": null,
"receipt": false,
"needs": null,
"names": {
"cli": "wai quantum verify",
"mcp": "quantum_verify",
"c": "wai_quantum_verify",
"rust": "wai::quantum::verify",
"sdk": "wai.quantum.verify"
}
},
{
"id": "quantum.list",
"summary": "Each simulation method, what it takes and how far it reaches in a job's memory here, by wai-quantum itself",
"cli": "wai quantum methods",
"aliases": [],
"usage": [
"wai quantum methods [wai-quantum methods' options] [--quantum BIN] wai-quantum methods: what it prints and its exit",
" status are wai-quantum's"
],
"placement": "local",
"effect": "reads",
"dry_run": false,
"confirm": "never",
"route": null,
"doors": {
"cli": true,
"mcp": true,
"http": false
},
"toolset": "quantum",
"stability": "preview",
"input": {
"type": "object",
"properties": {
"quantum": {
"type": "string",
"format": "path",
"description": "The quantum command line (wai-quantum).",
"x-cli": {
"flag": "--quantum"
}
}
},
"required": [],
"additionalProperties": false
},
"output": {
"description": "What wai-quantum prints for the verb with --json: its own JSON, unchanged"
},
"stream": null,
"since": "0.6.0",
"deprecated": null,
"receipt": false,
"needs": null,
"names": {
"cli": "wai quantum list",
"mcp": "quantum_list",
"c": "wai_quantum_list",
"rust": "wai::quantum::list",
"sdk": "wai.quantum.list"
}
},
{
"id": "mcp.start",
"summary": "WAI's operations as tools for a coding agent: a Model Context Protocol server on standard input and output, in toolsets",
"cli": "wai mcp",
"aliases": [],
"usage": [
"wai mcp [--toolset core,dev,app,quantum] [--read-only] [--project DIR] [--spec-root DIR] [--room-bin BIN] [--relay-bin BIN]",
" [--quantum-bin BIN] [--target <name|url> [--allow-write]] serves until standard input closes; --dry-run names the",
" tools it would serve and serves nothing. The quantum toolset's tools are wai-quantum's own, each answered by",
" wai-quantum mcp on this machine. With --target, the operations of the service's API are tools too, each sent to its",
" route on that target alone: those that read it, and those that change it where the server may (a target on",
" this machine, or another with --allow-write; never with --read-only or to a read-only target)"
],
"placement": "client",
"effect": "runs",
"dry_run": true,
"confirm": "when-replacing-an-unnamed-file",
"route": null,
"doors": {
"cli": true,
"mcp": false,
"http": false
},
"toolset": "core",
"stability": "preview",
"input": {
"type": "object",
"properties": {
"toolset": {
"type": "string",
"description": "The toolsets to offer, comma-separated (core when none is named).",
"x-cli": {
"flag": "--toolset"
}
},
"read_only": {
"type": "boolean",
"description": "Offer only the tools that read or run a verifier.",
"x-cli": {
"flag": "--read-only"
}
},
"project": {
"type": "string",
"format": "path",
"description": "The directory the server may write in (the current one).",
"x-cli": {
"flag": "--project"
}
},
"spec_root": {
"type": "string",
"format": "path",
"description": "The wai/ directory whose text and corpora the tools read.",
"x-cli": {
"flag": "--spec-root"
}
},
"room_bin": {
"type": "string",
"format": "path",
"description": "The room service the development stack runs.",
"x-cli": {
"flag": "--room-bin"
}
},
"relay_bin": {
"type": "string",
"format": "path",
"description": "The relay the development stack runs.",
"x-cli": {
"flag": "--relay-bin"
}
},
"quantum_bin": {
"type": "string",
"format": "path",
"description": "The quantum command line whose server answers the quantum toolset (wai-quantum).",
"x-cli": {
"flag": "--quantum-bin"
}
},
"target": {
"type": "string",
"description": "The service it acts on: a target's name (wai target list) or a service's http:// or https:// address.",
"x-cli": {
"flag": "--target"
}
},
"allow_write": {
"type": "boolean",
"description": "Offer the tools that change the target where it is on another machine.",
"x-cli": {
"flag": "--allow-write"
}
}
},
"required": [],
"additionalProperties": false
},
"output": {
"type": "object",
"properties": {
"text": {
"type": "string"
}
},
"required": [
"text"
]
},
"stream": {
"description": "One JSON-RPC 2.0 message per line, the Model Context Protocol"
},
"since": "0.3.0",
"deprecated": null,
"receipt": false,
"needs": {
"all": [
"mcp"
]
},
"names": {
"cli": "wai mcp start",
"mcp": null,
"c": "wai_mcp_start",
"rust": "wai::mcp::start",
"sdk": "wai.mcp.start"
}
},
{
"id": "agent.setup",
"summary": "A project made ready for coding agents: AGENTS.md, an import of it in a CLAUDE.md already there, and wai mcp registered in its MCP configuration",
"cli": "wai setup-agent",
"aliases": [],
"usage": [
"wai setup-agent [--dir D] [--all] [--only FILE,...] [--toolset core,dev,app] [--command PROGRAM]",
" a file that exists changes only once confirmed (--yes, or yes at a terminal); --dry-run shows each diff"
],
"placement": "local",
"effect": "writes-project",
"dry_run": true,
"confirm": "when-replacing-a-file",
"route": null,
"doors": {
"cli": true,
"mcp": false,
"http": false
},
"toolset": "core",
"stability": "preview",
"input": {
"type": "object",
"properties": {
"dir": {
"type": "string",
"format": "path",
"description": "The project directory (the current one).",
"x-cli": {
"flag": "--dir"
}
},
"all": {
"type": "boolean",
"description": "Write every agent's configuration file, not only those whose directory is there.",
"x-cli": {
"flag": "--all"
}
},
"only": {
"type": "string",
"description": "Only these files, comma-separated.",
"x-cli": {
"flag": "--only"
}
},
"toolset": {
"type": "string",
"description": "The toolsets the registered server offers.",
"x-cli": {
"flag": "--toolset"
}
},
"command": {
"type": "string",
"description": "The program the registration runs (wai).",
"x-cli": {
"flag": "--command"
}
}
},
"required": [],
"additionalProperties": false
},
"output": {
"type": "object",
"required": [
"project",
"dry_run",
"files"
]
},
"stream": null,
"since": "0.3.0",
"deprecated": null,
"receipt": false,
"needs": null,
"names": {
"cli": "wai agent setup",
"mcp": null,
"c": "wai_agent_setup",
"rust": "wai::agent::setup",
"sdk": "wai.agent.setup"
}
},
{
"id": "app.guide",
"summary": "The line language and every WAI widget, as a model writing a WAI app is told them",
"cli": "wai app guide",
"aliases": [],
"usage": [
"wai app guide what a model writing an app made with Create is told"
],
"placement": "local",
"effect": "reads",
"dry_run": false,
"confirm": "never",
"route": null,
"doors": {
"cli": true,
"mcp": true,
"http": false
},
"toolset": "app",
"stability": "preview",
"input": {
"type": "object",
"properties": {},
"required": [],
"additionalProperties": false
},
"output": {
"type": "object",
"properties": {
"text": {
"type": "string"
}
},
"required": [
"text"
]
},
"stream": null,
"since": "0.3.0",
"deprecated": null,
"receipt": false,
"needs": {
"all": [
"app"
]
},
"names": {
"cli": "wai app guide",
"mcp": "app_guide",
"c": "wai_app_guide",
"rust": "wai::app::guide",
"sdk": "wai.app.guide"
}
},
{
"id": "app.check",
"summary": "An app program checked against the WAI registry and WAI's rules, every error with its line and reason code; in a project, its room and runtime too",
"cli": "wai app check",
"aliases": [],
"usage": [
"wai app check [<dir> | <app.oui>] exit 1 when something does not hold, each failure named"
],
"placement": "local",
"effect": "reads",
"dry_run": false,
"confirm": "never",
"route": null,
"doors": {
"cli": true,
"mcp": true,
"http": false
},
"toolset": "app",
"stability": "preview",
"input": {
"type": "object",
"properties": {
"program": {
"type": "string",
"format": "path",
"description": "A project directory or a program (.).",
"x-cli": {
"positional": true
}
}
},
"required": [],
"additionalProperties": false
},
"output": {
"type": "object",
"required": [
"program",
"errors",
"failures",
"checked"
]
},
"stream": null,
"since": "0.3.0",
"deprecated": null,
"receipt": false,
"needs": {
"all": [
"app"
]
},
"names": {
"cli": "wai app check",
"mcp": "app_check",
"c": "wai_app_check",
"rust": "wai::app::check",
"sdk": "wai.app.check"
}
},
{
"id": "app.export",
"summary": "An app made with Create written as a project: the program, wai.json naming its room, the page and its runtime, a README, AGENTS.md and the licence",
"cli": "wai app export",
"aliases": [],
"usage": [
"wai app export <app.oui> <dir> [--runtime DIR] the same as wai create <dir> --from <app.oui>"
],
"placement": "local",
"effect": "writes-project",
"dry_run": true,
"confirm": "when-replacing-an-unnamed-file",
"route": null,
"doors": {
"cli": true,
"mcp": true,
"http": false
},
"toolset": "app",
"stability": "preview",
"input": {
"type": "object",
"properties": {
"program": {
"type": "string",
"format": "path",
"description": "The program made with Create.",
"x-cli": {
"positional": true
}
},
"dir": {
"type": "string",
"format": "path",
"description": "A directory that does not exist or is empty.",
"x-cli": {
"positional": true
}
},
"runtime": {
"type": "string",
"format": "path",
"description": "A Create runtime ($WAI_APP_RUNTIME, or share/wai/app beside wai).",
"x-cli": {
"flag": "--runtime"
}
}
},
"required": [
"program",
"dir"
],
"additionalProperties": false
},
"output": {
"type": "object",
"properties": {
"text": {
"type": "string"
}
},
"required": [
"text"
]
},
"stream": null,
"since": "0.3.0",
"deprecated": null,
"receipt": false,
"needs": {
"all": [
"app"
]
},
"names": {
"cli": "wai app export",
"mcp": "app_export",
"c": "wai_app_export",
"rust": "wai::app::export",
"sdk": "wai.app.export"
}
},
{
"id": "app.stream",
"summary": "A program streamed into the person's open Create page through the bridge wai mcp runs on loopback",
"cli": null,
"aliases": [],
"usage": [
"wai (wai mcp --toolset app: app_stream)"
],
"placement": "local",
"effect": "runs",
"dry_run": false,
"confirm": null,
"route": null,
"doors": {
"cli": false,
"mcp": true,
"http": false
},
"toolset": "app",
"stability": "preview",
"input": {
"type": "object",
"properties": {
"program": {
"type": "string",
"description": "The program's text."
},
"chunk": {
"type": "integer",
"description": "Characters a chunk (24)."
},
"pace_ms": {
"type": "integer",
"description": "Milliseconds between chunks (30)."
}
},
"required": [
"program"
],
"additionalProperties": false
},
"output": {
"description": "The tool's structured result"
},
"stream": null,
"since": "0.3.0",
"deprecated": null,
"receipt": false,
"needs": {
"all": [
"app"
]
},
"names": {
"cli": null,
"mcp": "app_stream",
"c": "wai_app_stream",
"rust": "wai::app::stream",
"sdk": "wai.app.stream"
}
},
{
"id": "registry.show",
"summary": "One capability's registry entry, whether this build decodes it, its role, and the specification lines that name it",
"cli": "wai registry show",
"aliases": [],
"usage": [
"wai registry show <capability> [--spec-root <wai-dir>] one capability's registry entry, whether this build decodes it,",
" its role, and the specification lines that name it, where the specification's text is here (--spec-root,",
" $WAI_SPEC_ROOT, or the tree this binary was built from)"
],
"placement": "local",
"effect": "reads",
"dry_run": false,
"confirm": "never",
"route": null,
"doors": {
"cli": true,
"mcp": true,
"http": false
},
"toolset": "core",
"stability": "stable",
"input": {
"type": "object",
"properties": {
"capability": {
"type": "string",
"description": "A capability string, e.g. wai.image.avif.",
"x-cli": {
"positional": true
}
},
"spec_root": {
"type": "string",
"format": "path",
"description": "The wai/ directory whose text is read, on the command line (wai mcp has a --spec-root of its own).",
"x-cli": {
"flag": "--spec-root"
}
}
},
"required": [
"capability"
],
"additionalProperties": false
},
"output": {
"description": "The tool's structured result"
},
"stream": null,
"since": "0.3.0",
"deprecated": null,
"receipt": false,
"needs": {
"all": [
"mcp"
]
},
"names": {
"cli": "wai registry show",
"mcp": "registry_show",
"c": "wai_registry_show",
"rust": "wai::registry::show",
"sdk": "wai.registry.show"
}
},
{
"id": "docs.search",
"summary": "Lines of the specification and its extensions holding every word of a query, each with its file, line and section",
"cli": "wai docs search",
"aliases": [],
"usage": [
"wai docs search <word>... [--limit N] [--spec-root <wai-dir>] the lines of the specification and its extensions that hold",
" every word, with each one's file, line and section, offline; the text is --spec-root's, $WAI_SPEC_ROOT's, or the",
" tree this binary was built from"
],
"placement": "local",
"effect": "reads",
"dry_run": false,
"confirm": "never",
"route": null,
"doors": {
"cli": true,
"mcp": true,
"http": false
},
"toolset": "core",
"stability": "stable",
"input": {
"type": "object",
"properties": {
"query": {
"type": "string",
"description": "Words that must all appear on a line.",
"x-cli": {
"positional": true
}
},
"limit": {
"type": "integer",
"description": "At most this many hits (20).",
"x-cli": {
"flag": "--limit"
}
},
"spec_root": {
"type": "string",
"format": "path",
"description": "The wai/ directory whose text is searched, on the command line (wai mcp has a --spec-root of its own).",
"x-cli": {
"flag": "--spec-root"
}
}
},
"required": [
"query"
],
"additionalProperties": false
},
"output": {
"description": "The tool's structured result"
},
"stream": null,
"since": "0.3.0",
"deprecated": null,
"receipt": false,
"needs": {
"all": [
"mcp"
]
},
"names": {
"cli": "wai docs search",
"mcp": "docs_search",
"c": "wai_docs_search",
"rust": "wai::docs::search",
"sdk": "wai.docs.search"
}
},
{
"id": "dev.stop",
"summary": "The development relay and room service a wai mcp server started, stopped",
"cli": null,
"aliases": [],
"usage": [
"wai (wai mcp: dev_stop)"
],
"placement": "local",
"effect": "runs",
"dry_run": false,
"confirm": null,
"route": null,
"doors": {
"cli": false,
"mcp": true,
"http": false
},
"toolset": "dev",
"stability": "stable",
"input": {
"type": "object",
"properties": {},
"required": [],
"additionalProperties": false
},
"output": {
"description": "The tool's structured result"
},
"stream": null,
"since": "0.3.0",
"deprecated": null,
"receipt": false,
"needs": null,
"names": {
"cli": null,
"mcp": "dev_stop",
"c": "wai_dev_stop",
"rust": "wai::dev::stop",
"sdk": "wai.dev.stop"
}
},
{
"id": "room.join",
"summary": "A test principal enters the development room with its grant, publishes its tracks, and is seen joined by the room's clock",
"cli": "wai room join",
"aliases": [],
"usage": [
"wai room join --principal NAME [--dir D] [--objects N] on the stack wai dev runs on this machine (D/stack.json; D is",
" .wai/dev by default): the test principal NAME, its key derived from its name as wai mcp derives it, is granted",
" the publisher role by the stack's room service, enters the room with a proof of its key, publishes its audio and",
" video tracks, N objects on each (1) with their receipts, and is seen joined by the room's clock. It stays in the",
" room until wai room leave. A stale record or stack is refused"
],
"placement": "client",
"effect": "writes-target",
"dry_run": true,
"confirm": "always",
"route": null,
"doors": {
"cli": true,
"mcp": true,
"http": false
},
"toolset": "dev",
"stability": "stable",
"input": {
"type": "object",
"properties": {
"target": {
"type": "string",
"description": "local: the development room on this machine."
},
"principal": {
"type": "string",
"description": "A test principal's name; on the command line it is granted the publisher role first, and in wai mcp it is one room_grant granted that role.",
"x-cli": {
"flag": "--principal"
}
},
"objects": {
"type": "integer",
"description": "Objects on each track (1, at most 64).",
"x-cli": {
"flag": "--objects"
}
},
"receipts": {
"type": "boolean",
"description": "Each object with its receipt (true); without, the relay drops them."
},
"dir": {
"type": "string",
"format": "path",
"description": "The stack's directory, whose stack.json wai dev writes (.wai/dev).",
"x-cli": {
"flag": "--dir"
}
}
},
"required": [
"principal"
],
"additionalProperties": false
},
"output": {
"description": "The tool's structured result"
},
"stream": null,
"since": "0.3.0",
"deprecated": null,
"receipt": false,
"needs": {
"all": [
"ed25519"
]
},
"names": {
"cli": "wai room join",
"mcp": "room_join",
"c": "wai_room_join",
"rust": "wai::room::join",
"sdk": "wai.room.join"
}
},
{
"id": "room.leave",
"summary": "A test principal's session in the development room closed, and its leave seen by the room's clock",
"cli": "wai room leave",
"aliases": [],
"usage": [
"wai room leave --principal NAME [--dir D] the session of the test principal NAME in the room of the stack wai dev runs",
" on this machine (D/stack.json) closed, and its leave seen by the room's clock"
],
"placement": "client",
"effect": "writes-target",
"dry_run": true,
"confirm": "always",
"route": null,
"doors": {
"cli": true,
"mcp": true,
"http": false
},
"toolset": "dev",
"stability": "stable",
"input": {
"type": "object",
"properties": {
"target": {
"type": "string",
"description": "local: the development room on this machine."
},
"principal": {
"type": "string",
"description": "The test principal's name.",
"x-cli": {
"flag": "--principal"
}
},
"dir": {
"type": "string",
"format": "path",
"description": "The stack's directory, whose stack.json wai dev writes (.wai/dev).",
"x-cli": {
"flag": "--dir"
}
}
},
"required": [
"principal"
],
"additionalProperties": false
},
"output": {
"description": "The tool's structured result"
},
"stream": null,
"since": "0.3.0",
"deprecated": null,
"receipt": false,
"needs": {
"all": [
"ed25519"
]
},
"names": {
"cli": "wai room leave",
"mcp": "room_leave",
"c": "wai_room_leave",
"rust": "wai::room::leave",
"sdk": "wai.room.leave"
}
},
{
"id": "session.show",
"summary": "The development room's session as a verifier is given it: descriptor, grants, key-log head and the clock's event chain",
"cli": "wai session show",
"aliases": [],
"usage": [
"wai session show [--dir D] the room of the stack wai dev runs on this machine (D/stack.json) as a verifier is given",
" it: its descriptor, grants, key-log head and the clock's event chain, as JSON (wai mcp's receipt_verify takes it)"
],
"placement": "client",
"effect": "reads",
"dry_run": false,
"confirm": "never",
"route": null,
"doors": {
"cli": true,
"mcp": true,
"http": false
},
"toolset": "dev",
"stability": "stable",
"input": {
"type": "object",
"properties": {
"target": {
"type": "string",
"description": "local: the development room on this machine."
},
"dir": {
"type": "string",
"format": "path",
"description": "The stack's directory, whose stack.json wai dev writes (.wai/dev).",
"x-cli": {
"flag": "--dir"
}
}
},
"required": [],
"additionalProperties": false
},
"output": {
"description": "The tool's structured result"
},
"stream": null,
"since": "0.3.0",
"deprecated": null,
"receipt": false,
"needs": null,
"names": {
"cli": "wai session show",
"mcp": "session_show",
"c": "wai_session_show",
"rust": "wai::session::show",
"sdk": "wai.session.show"
}
},
{
"id": "room.test",
"summary": "Synthetic participants on the development stack: a publisher's objects with their receipts received by a viewer, how many, how late, and the path as QUIC measured it",
"cli": "wai room test",
"aliases": [],
"usage": [
"wai room test [--dir D] [--objects N] [--every-ms MS] [--room BIN] a publisher and a viewer of fresh keys on the",
" stack wai dev runs on this machine (recorded in D/stack.json; D is .wai/dev by default): the objects",
" received of those sent (50, one every 20 ms), how late, and over QUIC, when the stack was started with",
" --impair, the packets QUIC declared lost and its round trip beside the datagrams the impaired path",
" dropped. A record whose stack is not running, or a stack of another toolchain, is refused as stale.",
" Exit 1 when an object did not arrive"
],
"placement": "client",
"effect": "runs",
"dry_run": true,
"confirm": "when-replacing-an-unnamed-file",
"route": null,
"doors": {
"cli": true,
"mcp": true,
"http": false
},
"toolset": "dev",
"stability": "preview",
"input": {
"type": "object",
"properties": {
"dir": {
"type": "string",
"format": "path",
"description": "The stack's directory, whose stack.json wai dev writes (.wai/dev).",
"x-cli": {
"flag": "--dir"
}
},
"objects": {
"type": "integer",
"description": "Objects sent (50, at most 1000).",
"x-cli": {
"flag": "--objects"
}
},
"every_ms": {
"type": "integer",
"description": "Milliseconds between objects (20).",
"x-cli": {
"flag": "--every-ms"
}
},
"room": {
"type": "string",
"format": "path",
"description": "The room service's binary, whose participant mode runs them (the stack's).",
"x-cli": {
"flag": "--room"
}
}
},
"required": [],
"additionalProperties": false
},
"output": {
"description": "The tool's structured result"
},
"stream": null,
"since": "0.5.0",
"deprecated": null,
"receipt": false,
"needs": null,
"names": {
"cli": "wai room test",
"mcp": "room_test",
"c": "wai_room_test",
"rust": "wai::room::test",
"sdk": "wai.room.test"
}
},
{
"id": "room.load",
"summary": "Synthetic participants load the development stack: one publisher, many viewers, the deliveries made of those owed and how late; the client half alone",
"cli": "wai room load",
"aliases": [],
"usage": [
"wai room load [--dir D] [--viewers N] [--objects N] [--every-ms MS] [--room BIN] one publisher and N viewers (8, at",
" most 64) of fresh keys on the stack wai dev runs on this machine (D/stack.json): the deliveries made of",
" those owed, how late, how long the viewers took to enter, and the path over QUIC. The client half alone:",
" nothing measures what the relay spends. A stale record or stack is refused. Exit 1 when a delivery",
" was not made"
],
"placement": "client",
"effect": "runs",
"dry_run": true,
"confirm": "when-replacing-an-unnamed-file",
"route": null,
"doors": {
"cli": true,
"mcp": true,
"http": false
},
"toolset": "dev",
"stability": "preview",
"input": {
"type": "object",
"properties": {
"dir": {
"type": "string",
"format": "path",
"description": "The stack's directory, whose stack.json wai dev writes (.wai/dev).",
"x-cli": {
"flag": "--dir"
}
},
"viewers": {
"type": "integer",
"description": "Viewers (8, at most 64).",
"x-cli": {
"flag": "--viewers"
}
},
"objects": {
"type": "integer",
"description": "Objects sent (50, at most 1000).",
"x-cli": {
"flag": "--objects"
}
},
"every_ms": {
"type": "integer",
"description": "Milliseconds between objects (20).",
"x-cli": {
"flag": "--every-ms"
}
},
"room": {
"type": "string",
"format": "path",
"description": "The room service's binary, whose participant mode runs them (the stack's).",
"x-cli": {
"flag": "--room"
}
}
},
"required": [],
"additionalProperties": false
},
"output": {
"description": "The tool's structured result"
},
"stream": null,
"since": "0.5.0",
"deprecated": null,
"receipt": false,
"needs": null,
"names": {
"cli": "wai room load",
"mcp": "room_load",
"c": "wai_room_load",
"rust": "wai::room::load",
"sdk": "wai.room.load"
}
},
{
"id": "room.invite",
"summary": "An invitation to host the development room's remote desktop, signed by the room's authority from the stack's keys",
"cli": "wai room invite",
"aliases": [],
"usage": [
"wai room invite [--dir D] [--seconds S] [--room BIN] an invitation, in hexadecimal, signed by the authority of the",
" room wai dev keeps in D (D/room-keys.toml; D is .wai/dev by default) by its room service's invite mode, good for S",
" seconds (3600, at most 30 days) and bound to the first key that presents it: what the host of a room started with",
" wai dev --remote enters with. Nothing is sent and nothing written"
],
"placement": "local",
"effect": "reads",
"dry_run": false,
"confirm": "never",
"route": null,
"doors": {
"cli": true,
"mcp": false,
"http": false
},
"toolset": "dev",
"stability": "preview",
"input": {
"type": "object",
"properties": {
"dir": {
"type": "string",
"format": "path",
"description": "The stack's directory, which holds its room's keys (.wai/dev).",
"x-cli": {
"flag": "--dir"
}
},
"seconds": {
"type": "integer",
"description": "How long the invitation holds, in seconds (3600, at most 2592000).",
"x-cli": {
"flag": "--seconds"
}
},
"room": {
"type": "string",
"format": "path",
"description": "The room service's binary, whose invite mode signs it (the stack's, else wai-room beside wai or on PATH).",
"x-cli": {
"flag": "--room"
}
}
},
"required": [],
"additionalProperties": false
},
"output": {
"type": "object",
"required": [
"development_only",
"invitation",
"valid_s",
"keys"
],
"description": "An invitation to host the development room's remote desktop, in hexadecimal, signed by the room's authority (the keys file named) and good for valid_s seconds, bound to the first key that presents it"
},
"stream": null,
"since": "0.6.0",
"deprecated": null,
"receipt": false,
"needs": null,
"names": {
"cli": "wai room invite",
"mcp": null,
"c": "wai_room_invite",
"rust": "wai::room::invite",
"sdk": "wai.room.invite"
}
},
{
"id": "log.tail",
"summary": "A log of the development stack, read from its directory: the relay's, the room service's, the conversation's or the synthetic participants'; --follow reads on as it grows",
"cli": "wai log tail",
"aliases": [],
"usage": [
"wai log tail [--dir D] [--name relay|room|conversation|participants] [--from BYTE] [--follow] [--for S] the log",
" wai dev keeps in D (.wai/dev by default; relay by default) from BYTE on, or its last 64 KiB; with --follow it",
" goes on reading whole lines as the log grows, while the stack recorded there runs (D/stack.json) or for S",
" seconds, and with --json writes each read as one JSON line"
],
"placement": "local",
"effect": "reads",
"dry_run": false,
"confirm": "never",
"route": null,
"doors": {
"cli": true,
"mcp": false,
"http": false
},
"toolset": "dev",
"stability": "preview",
"input": {
"type": "object",
"properties": {
"dir": {
"type": "string",
"format": "path",
"description": "The stack's directory, where wai dev keeps its logs (.wai/dev).",
"x-cli": {
"flag": "--dir"
}
},
"name": {
"type": "string",
"description": "The log: relay, room, conversation or participants (relay).",
"x-cli": {
"flag": "--name"
}
},
"from": {
"type": "integer",
"description": "The byte to read from (the last 64 KiB otherwise).",
"x-cli": {
"flag": "--from"
}
},
"follow": {
"type": "boolean",
"description": "Read on as the log grows, while the stack runs.",
"x-cli": {
"flag": "--follow"
}
},
"for": {
"type": "integer",
"description": "With --follow, stop after this many seconds.",
"x-cli": {
"flag": "--for"
}
}
},
"required": [],
"additionalProperties": false
},
"output": {
"type": "object",
"required": [
"name",
"file",
"from",
"next",
"text"
],
"properties": {
"name": {
"type": "string"
},
"file": {
"type": "string"
},
"from": {
"type": "integer"
},
"next": {
"type": "integer"
},
"text": {
"type": "string"
}
},
"description": "The log's name and file, the text from the byte from to the byte next, and where a later read starts (next)"
},
"stream": {
"type": "object",
"required": [
"name",
"from",
"next",
"text"
],
"properties": {
"name": {
"type": "string"
},
"from": {
"type": "integer"
},
"next": {
"type": "integer"
},
"text": {
"type": "string"
}
},
"description": "What the log gained: whole lines, from the byte from to the byte next"
},
"since": "0.6.0",
"deprecated": null,
"receipt": false,
"needs": null,
"names": {
"cli": "wai log tail",
"mcp": null,
"c": "wai_log_tail",
"rust": "wai::log::tail",
"sdk": "wai.log.tail"
}
},
{
"id": "session.list",
"summary": "The sessions the development stack's relay has closed, each its signed summary as the relay wrote it; --follow lists each as it closes",
"cli": "wai session list",
"aliases": [],
"usage": [
"wai session list [--dir D] [--last N] [--follow] [--for S] the signed session summaries the stack's relay wrote in D",
" (D/sessions.jsonl; D is .wai/dev by default), the last N (50; 0 for all), oldest first; with --follow each new one",
" as the relay writes it, while the stack recorded there runs (D/stack.json) or for S seconds, and with --json each",
" as one JSON line"
],
"placement": "local",
"effect": "reads",
"dry_run": false,
"confirm": "never",
"route": null,
"doors": {
"cli": true,
"mcp": false,
"http": false
},
"toolset": "dev",
"stability": "preview",
"input": {
"type": "object",
"properties": {
"dir": {
"type": "string",
"format": "path",
"description": "The stack's directory, where its relay writes sessions.jsonl (.wai/dev).",
"x-cli": {
"flag": "--dir"
}
},
"last": {
"type": "integer",
"description": "How many of the latest to list (50; 0 lists every one).",
"x-cli": {
"flag": "--last"
}
},
"follow": {
"type": "boolean",
"description": "List each new summary as the relay writes it, while the stack runs.",
"x-cli": {
"flag": "--follow"
}
},
"for": {
"type": "integer",
"description": "With --follow, stop after this many seconds.",
"x-cli": {
"flag": "--for"
}
}
},
"required": [],
"additionalProperties": false
},
"output": {
"type": "object",
"required": [
"file",
"sessions",
"unread"
],
"properties": {
"file": {
"type": "string"
},
"sessions": {
"type": "array",
"items": {
"type": "object",
"required": [
"summary",
"signature"
]
}
},
"unread": {
"type": "integer"
}
},
"description": "The relay's signed session summaries (sessions.jsonl), oldest first, each as the relay wrote it, and how many lines did not read as one"
},
"stream": {
"type": "object",
"required": [
"summary",
"signature"
],
"description": "One signed session summary, as the relay wrote it"
},
"since": "0.6.0",
"deprecated": null,
"receipt": false,
"needs": null,
"names": {
"cli": "wai session list",
"mcp": null,
"c": "wai_session_list",
"rust": "wai::session::list",
"sdk": "wai.session.list"
}
},
{
"id": "service.show",
"summary": "The service's health",
"cli": "wai service show",
"aliases": [],
"usage": [
"wai service show [--target <name|url>] [--query <name>=<value>]... GET / on the room service"
],
"placement": "service",
"effect": "reads",
"dry_run": false,
"confirm": "never",
"route": {
"service": "wai-room",
"method": "GET",
"path": "/"
},
"doors": {
"cli": true,
"mcp": false,
"http": true
},
"toolset": "core",
"stability": "preview",
"input": {
"$ref": "joule-code/joule-code-rs/crates/joule-moq-room/openapi.json#/paths/~1/get"
},
"output": {
"type": "object",
"required": [
"target",
"request",
"status",
"body"
],
"description": "The service's answer: the target the request went to (its name, and its address), the request (method and path), the HTTP status, the body (its JSON, or {\"text\": ...}), and where the key it carried came from (WAI_TOKEN, stored, or none), never the key"
},
"stream": null,
"since": "0.3.0",
"deprecated": null,
"receipt": false,
"needs": null,
"names": {
"cli": "wai service show",
"mcp": null,
"c": "wai_service_show",
"rust": "wai::service::show",
"sdk": "wai.service.show"
}
},
{
"id": "service.check",
"summary": "The service's health",
"cli": "wai service check",
"aliases": [],
"usage": [
"wai service check [--target <name|url>] [--query <name>=<value>]... GET /health on the room service"
],
"placement": "service",
"effect": "reads",
"dry_run": false,
"confirm": "never",
"route": {
"service": "wai-room",
"method": "GET",
"path": "/health"
},
"doors": {
"cli": true,
"mcp": false,
"http": true
},
"toolset": "core",
"stability": "preview",
"input": {
"$ref": "joule-code/joule-code-rs/crates/joule-moq-room/openapi.json#/paths/~1health/get"
},
"output": {
"type": "object",
"required": [
"target",
"request",
"status",
"body"
],
"description": "The service's answer: the target the request went to (its name, and its address), the request (method and path), the HTTP status, the body (its JSON, or {\"text\": ...}), and where the key it carried came from (WAI_TOKEN, stored, or none), never the key"
},
"stream": null,
"since": "0.3.0",
"deprecated": null,
"receipt": false,
"needs": null,
"names": {
"cli": "wai service check",
"mcp": null,
"c": "wai_service_check",
"rust": "wai::service::check",
"sdk": "wai.service.check"
}
},
{
"id": "room.show",
"summary": "The current room",
"cli": "wai room show",
"aliases": [],
"usage": [
"wai room show [--target <name|url>] [--query <name>=<value>]... GET /room on the room service"
],
"placement": "service",
"effect": "reads",
"dry_run": false,
"confirm": "never",
"route": {
"service": "wai-room",
"method": "GET",
"path": "/room"
},
"doors": {
"cli": true,
"mcp": false,
"http": true
},
"toolset": "core",
"stability": "preview",
"input": {
"$ref": "joule-code/joule-code-rs/crates/joule-moq-room/openapi.json#/paths/~1room/get"
},
"output": {
"type": "object",
"required": [
"target",
"request",
"status",
"body"
],
"description": "The service's answer: the target the request went to (its name, and its address), the request (method and path), the HTTP status, the body (its JSON, or {\"text\": ...}), and where the key it carried came from (WAI_TOKEN, stored, or none), never the key"
},
"stream": null,
"since": "0.3.0",
"deprecated": null,
"receipt": false,
"needs": null,
"names": {
"cli": "wai room show",
"mcp": null,
"c": "wai_room_show",
"rust": "wai::room::show",
"sdk": "wai.room.show"
}
},
{
"id": "room.grant",
"summary": "A grant for a key",
"cli": "wai room grant",
"aliases": [],
"usage": [
"wai room grant [--target <name|url>] [--body <json>|@<file>] [--yes] POST /grant on the room service"
],
"placement": "service",
"effect": "writes-target",
"dry_run": true,
"confirm": "always",
"route": {
"service": "wai-room",
"method": "POST",
"path": "/grant"
},
"doors": {
"cli": true,
"mcp": true,
"http": true
},
"toolset": "dev",
"stability": "preview",
"input": {
"$ref": "joule-code/joule-code-rs/crates/joule-moq-room/openapi.json#/paths/~1grant/post"
},
"output": {
"type": "object",
"required": [
"target",
"request",
"status",
"body"
],
"description": "The service's answer: the target the request went to (its name, and its address), the request (method and path), the HTTP status, the body (its JSON, or {\"text\": ...}), and where the key it carried came from (WAI_TOKEN, stored, or none), never the key"
},
"stream": null,
"since": "0.3.0",
"deprecated": null,
"receipt": false,
"needs": null,
"names": {
"cli": "wai room grant",
"mcp": "room_grant",
"c": "wai_room_grant",
"rust": "wai::room::grant",
"sdk": "wai.room.grant"
}
},
{
"id": "admission.show",
"summary": "The room's admission receipt so far",
"cli": "wai admission show",
"aliases": [],
"usage": [
"wai admission show [--target <name|url>] [--query <name>=<value>]... GET /age/receipt on the room service"
],
"placement": "service",
"effect": "reads",
"dry_run": false,
"confirm": "never",
"route": {
"service": "wai-room",
"method": "GET",
"path": "/age/receipt"
},
"doors": {
"cli": true,
"mcp": false,
"http": true
},
"toolset": "core",
"stability": "preview",
"input": {
"$ref": "joule-code/joule-code-rs/crates/joule-moq-room/openapi.json#/paths/~1age~1receipt/get"
},
"output": {
"type": "object",
"required": [
"target",
"request",
"status",
"body"
],
"description": "The service's answer: the target the request went to (its name, and its address), the request (method and path), the HTTP status, the body (its JSON, or {\"text\": ...}), and where the key it carried came from (WAI_TOKEN, stored, or none), never the key"
},
"stream": null,
"since": "0.3.0",
"deprecated": null,
"receipt": false,
"needs": null,
"names": {
"cli": "wai admission show",
"mcp": null,
"c": "wai_admission_show",
"rust": "wai::admission::show",
"sdk": "wai.admission.show"
}
},
{
"id": "mls.tail",
"summary": "The room's log of MLS messages",
"cli": "wai mls tail",
"aliases": [],
"usage": [
"wai mls tail [--target <name|url>] [--query <name>=<value>]... GET /mls on the room service"
],
"placement": "service",
"effect": "reads",
"dry_run": false,
"confirm": "never",
"route": {
"service": "wai-room",
"method": "GET",
"path": "/mls"
},
"doors": {
"cli": true,
"mcp": false,
"http": true
},
"toolset": "core",
"stability": "preview",
"input": {
"$ref": "joule-code/joule-code-rs/crates/joule-moq-room/openapi.json#/paths/~1mls/get"
},
"output": {
"type": "object",
"required": [
"target",
"request",
"status",
"body"
],
"description": "The service's answer: the target the request went to (its name, and its address), the request (method and path), the HTTP status, the body (its JSON, or {\"text\": ...}), and where the key it carried came from (WAI_TOKEN, stored, or none), never the key"
},
"stream": null,
"since": "0.3.0",
"deprecated": null,
"receipt": false,
"needs": null,
"names": {
"cli": "wai mls tail",
"mcp": null,
"c": "wai_mls_tail",
"rust": "wai::mls::tail",
"sdk": "wai.mls.tail"
}
},
{
"id": "mls.import",
"summary": "A KeyPackage for a granted principal's Add",
"cli": "wai mls import",
"aliases": [],
"usage": [
"wai mls import [--target <name|url>] [--body <json>|@<file>] [--yes] POST /mls/key-package on the room service"
],
"placement": "service",
"effect": "writes-target",
"dry_run": true,
"confirm": "always",
"route": {
"service": "wai-room",
"method": "POST",
"path": "/mls/key-package"
},
"doors": {
"cli": true,
"mcp": false,
"http": true
},
"toolset": "core",
"stability": "preview",
"input": {
"$ref": "joule-code/joule-code-rs/crates/joule-moq-room/openapi.json#/paths/~1mls~1key-package/post"
},
"output": {
"type": "object",
"required": [
"target",
"request",
"status",
"body"
],
"description": "The service's answer: the target the request went to (its name, and its address), the request (method and path), the HTTP status, the body (its JSON, or {\"text\": ...}), and where the key it carried came from (WAI_TOKEN, stored, or none), never the key"
},
"stream": null,
"since": "0.3.0",
"deprecated": null,
"receipt": false,
"needs": null,
"names": {
"cli": "wai mls import",
"mcp": null,
"c": "wai_mls_import",
"rust": "wai::mls::import",
"sdk": "wai.mls.import"
}
},
{
"id": "mls.update",
"summary": "A GroupInfo, or a commit and its Welcome",
"cli": "wai mls update",
"aliases": [],
"usage": [
"wai mls update [--target <name|url>] [--body <json>|@<file>] [--yes] POST /mls/post on the room service"
],
"placement": "service",
"effect": "writes-target",
"dry_run": true,
"confirm": "always",
"route": {
"service": "wai-room",
"method": "POST",
"path": "/mls/post"
},
"doors": {
"cli": true,
"mcp": false,
"http": true
},
"toolset": "core",
"stability": "preview",
"input": {
"$ref": "joule-code/joule-code-rs/crates/joule-moq-room/openapi.json#/paths/~1mls~1post/post"
},
"output": {
"type": "object",
"required": [
"target",
"request",
"status",
"body"
],
"description": "The service's answer: the target the request went to (its name, and its address), the request (method and path), the HTTP status, the body (its JSON, or {\"text\": ...}), and where the key it carried came from (WAI_TOKEN, stored, or none), never the key"
},
"stream": null,
"since": "0.3.0",
"deprecated": null,
"receipt": false,
"needs": null,
"names": {
"cli": "wai mls update",
"mcp": null,
"c": "wai_mls_update",
"rust": "wai::mls::update",
"sdk": "wai.mls.update"
}
},
{
"id": "performance.list",
"summary": "The clock's log of objects",
"cli": "wai performance list",
"aliases": [],
"usage": [
"wai performance list [--target <name|url>] [--query <name>=<value>]... GET /co/objects on the room service"
],
"placement": "service",
"effect": "reads",
"dry_run": false,
"confirm": "never",
"route": {
"service": "wai-room",
"method": "GET",
"path": "/co/objects"
},
"doors": {
"cli": true,
"mcp": false,
"http": true
},
"toolset": "core",
"stability": "preview",
"input": {
"$ref": "joule-code/joule-code-rs/crates/joule-moq-room/openapi.json#/paths/~1co~1objects/get"
},
"output": {
"type": "object",
"required": [
"target",
"request",
"status",
"body"
],
"description": "The service's answer: the target the request went to (its name, and its address), the request (method and path), the HTTP status, the body (its JSON, or {\"text\": ...}), and where the key it carried came from (WAI_TOKEN, stored, or none), never the key"
},
"stream": null,
"since": "0.3.0",
"deprecated": null,
"receipt": false,
"needs": null,
"names": {
"cli": "wai performance list",
"mcp": null,
"c": "wai_performance_list",
"rust": "wai::performance::list",
"sdk": "wai.performance.list"
}
},
{
"id": "performance.show",
"summary": "The room's co-performance as the clock holds it",
"cli": "wai performance show",
"aliases": [],
"usage": [
"wai performance show [--target <name|url>] [--query <name>=<value>]... GET /co/state on the room service"
],
"placement": "service",
"effect": "reads",
"dry_run": false,
"confirm": "never",
"route": {
"service": "wai-room",
"method": "GET",
"path": "/co/state"
},
"doors": {
"cli": true,
"mcp": false,
"http": true
},
"toolset": "core",
"stability": "preview",
"input": {
"$ref": "joule-code/joule-code-rs/crates/joule-moq-room/openapi.json#/paths/~1co~1state/get"
},
"output": {
"type": "object",
"required": [
"target",
"request",
"status",
"body"
],
"description": "The service's answer: the target the request went to (its name, and its address), the request (method and path), the HTTP status, the body (its JSON, or {\"text\": ...}), and where the key it carried came from (WAI_TOKEN, stored, or none), never the key"
},
"stream": null,
"since": "0.3.0",
"deprecated": null,
"receipt": false,
"needs": null,
"names": {
"cli": "wai performance show",
"mcp": null,
"c": "wai_performance_show",
"rust": "wai::performance::show",
"sdk": "wai.performance.show"
}
},
{
"id": "schedule.create",
"summary": "A turn schedule the clock signs",
"cli": "wai schedule create",
"aliases": [],
"usage": [
"wai schedule create [--target <name|url>] [--body <json>|@<file>] [--yes] POST /co/schedule on the room service"
],
"placement": "service",
"effect": "writes-target",
"dry_run": true,
"confirm": "always",
"route": {
"service": "wai-room",
"method": "POST",
"path": "/co/schedule"
},
"doors": {
"cli": true,
"mcp": false,
"http": true
},
"toolset": "core",
"stability": "preview",
"input": {
"$ref": "joule-code/joule-code-rs/crates/joule-moq-room/openapi.json#/paths/~1co~1schedule/post"
},
"output": {
"type": "object",
"required": [
"target",
"request",
"status",
"body"
],
"description": "The service's answer: the target the request went to (its name, and its address), the request (method and path), the HTTP status, the body (its JSON, or {\"text\": ...}), and where the key it carried came from (WAI_TOKEN, stored, or none), never the key"
},
"stream": null,
"since": "0.3.0",
"deprecated": null,
"receipt": false,
"needs": null,
"names": {
"cli": "wai schedule create",
"mcp": null,
"c": "wai_schedule_create",
"rust": "wai::schedule::create",
"sdk": "wai.schedule.create"
}
},
{
"id": "handover.create",
"summary": "A handover the clock signs",
"cli": "wai handover create",
"aliases": [],
"usage": [
"wai handover create [--target <name|url>] [--body <json>|@<file>] [--yes] POST /co/handover on the room service"
],
"placement": "service",
"effect": "writes-target",
"dry_run": true,
"confirm": "always",
"route": {
"service": "wai-room",
"method": "POST",
"path": "/co/handover"
},
"doors": {
"cli": true,
"mcp": false,
"http": true
},
"toolset": "core",
"stability": "preview",
"input": {
"$ref": "joule-code/joule-code-rs/crates/joule-moq-room/openapi.json#/paths/~1co~1handover/post"
},
"output": {
"type": "object",
"required": [
"target",
"request",
"status",
"body"
],
"description": "The service's answer: the target the request went to (its name, and its address), the request (method and path), the HTTP status, the body (its JSON, or {\"text\": ...}), and where the key it carried came from (WAI_TOKEN, stored, or none), never the key"
},
"stream": null,
"since": "0.3.0",
"deprecated": null,
"receipt": false,
"needs": null,
"names": {
"cli": "wai handover create",
"mcp": null,
"c": "wai_handover_create",
"rust": "wai::handover::create",
"sdk": "wai.handover.create"
}
},
{
"id": "window.create",
"summary": "A selection window the clock signs",
"cli": "wai window create",
"aliases": [],
"usage": [
"wai window create [--target <name|url>] [--body <json>|@<file>] [--yes] POST /co/window on the room service"
],
"placement": "service",
"effect": "writes-target",
"dry_run": true,
"confirm": "always",
"route": {
"service": "wai-room",
"method": "POST",
"path": "/co/window"
},
"doors": {
"cli": true,
"mcp": false,
"http": true
},
"toolset": "core",
"stability": "preview",
"input": {
"$ref": "joule-code/joule-code-rs/crates/joule-moq-room/openapi.json#/paths/~1co~1window/post"
},
"output": {
"type": "object",
"required": [
"target",
"request",
"status",
"body"
],
"description": "The service's answer: the target the request went to (its name, and its address), the request (method and path), the HTTP status, the body (its JSON, or {\"text\": ...}), and where the key it carried came from (WAI_TOKEN, stored, or none), never the key"
},
"stream": null,
"since": "0.3.0",
"deprecated": null,
"receipt": false,
"needs": null,
"names": {
"cli": "wai window create",
"mcp": null,
"c": "wai_window_create",
"rust": "wai::window::create",
"sdk": "wai.window.create"
}
},
{
"id": "fidelity.create",
"summary": "A fidelity statement now",
"cli": "wai fidelity create",
"aliases": [],
"usage": [
"wai fidelity create [--target <name|url>] [--body <json>|@<file>] [--yes] POST /co/fidelity on the room service"
],
"placement": "service",
"effect": "writes-target",
"dry_run": true,
"confirm": "always",
"route": {
"service": "wai-room",
"method": "POST",
"path": "/co/fidelity"
},
"doors": {
"cli": true,
"mcp": false,
"http": true
},
"toolset": "core",
"stability": "preview",
"input": {
"$ref": "joule-code/joule-code-rs/crates/joule-moq-room/openapi.json#/paths/~1co~1fidelity/post"
},
"output": {
"type": "object",
"required": [
"target",
"request",
"status",
"body"
],
"description": "The service's answer: the target the request went to (its name, and its address), the request (method and path), the HTTP status, the body (its JSON, or {\"text\": ...}), and where the key it carried came from (WAI_TOKEN, stored, or none), never the key"
},
"stream": null,
"since": "0.3.0",
"deprecated": null,
"receipt": false,
"needs": null,
"names": {
"cli": "wai fidelity create",
"mcp": null,
"c": "wai_fidelity_create",
"rust": "wai::fidelity::create",
"sdk": "wai.fidelity.create"
}
},
{
"id": "time.show",
"summary": "The service's clock",
"cli": "wai time show",
"aliases": [],
"usage": [
"wai time show [--target <name|url>] [--query <name>=<value>]... GET /watch/time on the room service"
],
"placement": "service",
"effect": "reads",
"dry_run": false,
"confirm": "never",
"route": {
"service": "wai-room",
"method": "GET",
"path": "/watch/time"
},
"doors": {
"cli": true,
"mcp": false,
"http": true
},
"toolset": "core",
"stability": "preview",
"input": {
"$ref": "joule-code/joule-code-rs/crates/joule-moq-room/openapi.json#/paths/~1watch~1time/get"
},
"output": {
"type": "object",
"required": [
"target",
"request",
"status",
"body"
],
"description": "The service's answer: the target the request went to (its name, and its address), the request (method and path), the HTTP status, the body (its JSON, or {\"text\": ...}), and where the key it carried came from (WAI_TOKEN, stored, or none), never the key"
},
"stream": null,
"since": "0.3.0",
"deprecated": null,
"receipt": false,
"needs": null,
"names": {
"cli": "wai time show",
"mcp": null,
"c": "wai_time_show",
"rust": "wai::time::show",
"sdk": "wai.time.show"
}
},
{
"id": "source.fetch",
"summary": "The watch room's source, whole",
"cli": "wai source fetch",
"aliases": [],
"usage": [
"wai source fetch [--target <name|url>] [--query <name>=<value>]... GET /watch/source on the room service"
],
"placement": "service",
"effect": "reads",
"dry_run": false,
"confirm": "never",
"route": {
"service": "wai-room",
"method": "GET",
"path": "/watch/source"
},
"doors": {
"cli": true,
"mcp": false,
"http": true
},
"toolset": "core",
"stability": "preview",
"input": {
"$ref": "joule-code/joule-code-rs/crates/joule-moq-room/openapi.json#/paths/~1watch~1source/get"
},
"output": {
"type": "object",
"required": [
"target",
"request",
"status",
"body"
],
"description": "The service's answer: the target the request went to (its name, and its address), the request (method and path), the HTTP status, the body (its JSON, or {\"text\": ...}), and where the key it carried came from (WAI_TOKEN, stored, or none), never the key"
},
"stream": null,
"since": "0.3.0",
"deprecated": null,
"receipt": false,
"needs": null,
"names": {
"cli": "wai source fetch",
"mcp": null,
"c": "wai_source_fetch",
"rust": "wai::source::fetch",
"sdk": "wai.source.fetch"
}
},
{
"id": "watch.setup",
"summary": "A challenge for a join's proof",
"cli": "wai watch setup",
"aliases": [],
"usage": [
"wai watch setup [--target <name|url>] [--query <name>=<value>]... [--yes] GET /watch/challenge on the room service"
],
"placement": "service",
"effect": "writes-target",
"dry_run": true,
"confirm": "always",
"route": {
"service": "wai-room",
"method": "GET",
"path": "/watch/challenge"
},
"doors": {
"cli": true,
"mcp": false,
"http": true
},
"toolset": "core",
"stability": "preview",
"input": {
"$ref": "joule-code/joule-code-rs/crates/joule-moq-room/openapi.json#/paths/~1watch~1challenge/get"
},
"output": {
"type": "object",
"required": [
"target",
"request",
"status",
"body"
],
"description": "The service's answer: the target the request went to (its name, and its address), the request (method and path), the HTTP status, the body (its JSON, or {\"text\": ...}), and where the key it carried came from (WAI_TOKEN, stored, or none), never the key"
},
"stream": null,
"since": "0.3.0",
"deprecated": null,
"receipt": false,
"needs": null,
"names": {
"cli": "wai watch setup",
"mcp": null,
"c": "wai_watch_setup",
"rust": "wai::watch::setup",
"sdk": "wai.watch.setup"
}
},
{
"id": "watch.tail",
"summary": "The watch room's log",
"cli": "wai watch tail",
"aliases": [],
"usage": [
"wai watch tail [--target <name|url>] [--query <name>=<value>]... GET /watch on the room service"
],
"placement": "service",
"effect": "reads",
"dry_run": false,
"confirm": "never",
"route": {
"service": "wai-room",
"method": "GET",
"path": "/watch"
},
"doors": {
"cli": true,
"mcp": false,
"http": true
},
"toolset": "core",
"stability": "preview",
"input": {
"$ref": "joule-code/joule-code-rs/crates/joule-moq-room/openapi.json#/paths/~1watch/get"
},
"output": {
"type": "object",
"required": [
"target",
"request",
"status",
"body"
],
"description": "The service's answer: the target the request went to (its name, and its address), the request (method and path), the HTTP status, the body (its JSON, or {\"text\": ...}), and where the key it carried came from (WAI_TOKEN, stored, or none), never the key"
},
"stream": null,
"since": "0.3.0",
"deprecated": null,
"receipt": false,
"needs": null,
"names": {
"cli": "wai watch tail",
"mcp": null,
"c": "wai_watch_tail",
"rust": "wai::watch::tail",
"sdk": "wai.watch.tail"
}
},
{
"id": "watch.show",
"summary": "The room as a co-watch verifier is given it",
"cli": "wai watch show",
"aliases": [],
"usage": [
"wai watch show [--target <name|url>] [--query <name>=<value>]... GET /watch/room on the room service"
],
"placement": "service",
"effect": "reads",
"dry_run": false,
"confirm": "never",
"route": {
"service": "wai-room",
"method": "GET",
"path": "/watch/room"
},
"doors": {
"cli": true,
"mcp": false,
"http": true
},
"toolset": "core",
"stability": "preview",
"input": {
"$ref": "joule-code/joule-code-rs/crates/joule-moq-room/openapi.json#/paths/~1watch~1room/get"
},
"output": {
"type": "object",
"required": [
"target",
"request",
"status",
"body"
],
"description": "The service's answer: the target the request went to (its name, and its address), the request (method and path), the HTTP status, the body (its JSON, or {\"text\": ...}), and where the key it carried came from (WAI_TOKEN, stored, or none), never the key"
},
"stream": null,
"since": "0.3.0",
"deprecated": null,
"receipt": false,
"needs": null,
"names": {
"cli": "wai watch show",
"mcp": null,
"c": "wai_watch_show",
"rust": "wai::watch::show",
"sdk": "wai.watch.show"
}
},
{
"id": "watch.join",
"summary": "A viewer enters by a proof of its key",
"cli": "wai watch join",
"aliases": [],
"usage": [
"wai watch join [--target <name|url>] [--body <json>|@<file>] [--yes] POST /watch/join on the room service"
],
"placement": "service",
"effect": "writes-target",
"dry_run": true,
"confirm": "always",
"route": {
"service": "wai-room",
"method": "POST",
"path": "/watch/join"
},
"doors": {
"cli": true,
"mcp": false,
"http": true
},
"toolset": "core",
"stability": "preview",
"input": {
"$ref": "joule-code/joule-code-rs/crates/joule-moq-room/openapi.json#/paths/~1watch~1join/post"
},
"output": {
"type": "object",
"required": [
"target",
"request",
"status",
"body"
],
"description": "The service's answer: the target the request went to (its name, and its address), the request (method and path), the HTTP status, the body (its JSON, or {\"text\": ...}), and where the key it carried came from (WAI_TOKEN, stored, or none), never the key"
},
"stream": null,
"since": "0.3.0",
"deprecated": null,
"receipt": false,
"needs": null,
"names": {
"cli": "wai watch join",
"mcp": null,
"c": "wai_watch_join",
"rust": "wai::watch::join",
"sdk": "wai.watch.join"
}
},
{
"id": "watch.update",
"summary": "A viewer's events, checked and carried in order",
"cli": "wai watch update",
"aliases": [],
"usage": [
"wai watch update [--target <name|url>] [--body <json>|@<file>] [--yes] POST /watch/post on the room service"
],
"placement": "service",
"effect": "writes-target",
"dry_run": true,
"confirm": "always",
"route": {
"service": "wai-room",
"method": "POST",
"path": "/watch/post"
},
"doors": {
"cli": true,
"mcp": false,
"http": true
},
"toolset": "core",
"stability": "preview",
"input": {
"$ref": "joule-code/joule-code-rs/crates/joule-moq-room/openapi.json#/paths/~1watch~1post/post"
},
"output": {
"type": "object",
"required": [
"target",
"request",
"status",
"body"
],
"description": "The service's answer: the target the request went to (its name, and its address), the request (method and path), the HTTP status, the body (its JSON, or {\"text\": ...}), and where the key it carried came from (WAI_TOKEN, stored, or none), never the key"
},
"stream": null,
"since": "0.3.0",
"deprecated": null,
"receipt": false,
"needs": null,
"names": {
"cli": "wai watch update",
"mcp": null,
"c": "wai_watch_update",
"rust": "wai::watch::update",
"sdk": "wai.watch.update"
}
},
{
"id": "control.grant",
"summary": "The host hands control over",
"cli": "wai control grant",
"aliases": [],
"usage": [
"wai control grant [--target <name|url>] [--body <json>|@<file>] [--yes] POST /remote/control on the room service"
],
"placement": "service",
"effect": "writes-target",
"dry_run": true,
"confirm": "always",
"route": {
"service": "wai-room",
"method": "POST",
"path": "/remote/control"
},
"doors": {
"cli": true,
"mcp": false,
"http": true
},
"toolset": "core",
"stability": "preview",
"input": {
"$ref": "joule-code/joule-code-rs/crates/joule-moq-room/openapi.json#/paths/~1remote~1control/post"
},
"output": {
"type": "object",
"required": [
"target",
"request",
"status",
"body"
],
"description": "The service's answer: the target the request went to (its name, and its address), the request (method and path), the HTTP status, the body (its JSON, or {\"text\": ...}), and where the key it carried came from (WAI_TOKEN, stored, or none), never the key"
},
"stream": null,
"since": "0.3.0",
"deprecated": null,
"receipt": false,
"needs": null,
"names": {
"cli": "wai control grant",
"mcp": null,
"c": "wai_control_grant",
"rust": "wai::control::grant",
"sdk": "wai.control.grant"
}
},
{
"id": "remote.show",
"summary": "The session as the clock holds it",
"cli": "wai remote show",
"aliases": [],
"usage": [
"wai remote show [--target <name|url>] [--query <name>=<value>]... GET /remote/room on the room service"
],
"placement": "service",
"effect": "reads",
"dry_run": false,
"confirm": "never",
"route": {
"service": "wai-room",
"method": "GET",
"path": "/remote/room"
},
"doors": {
"cli": true,
"mcp": false,
"http": true
},
"toolset": "core",
"stability": "preview",
"input": {
"$ref": "joule-code/joule-code-rs/crates/joule-moq-room/openapi.json#/paths/~1remote~1room/get"
},
"output": {
"type": "object",
"required": [
"target",
"request",
"status",
"body"
],
"description": "The service's answer: the target the request went to (its name, and its address), the request (method and path), the HTTP status, the body (its JSON, or {\"text\": ...}), and where the key it carried came from (WAI_TOKEN, stored, or none), never the key"
},
"stream": null,
"since": "0.3.0",
"deprecated": null,
"receipt": false,
"needs": null,
"names": {
"cli": "wai remote show",
"mcp": null,
"c": "wai_remote_show",
"rust": "wai::remote::show",
"sdk": "wai.remote.show"
}
},
{
"id": "remote.verify",
"summary": "That session verified",
"cli": "wai remote verify",
"aliases": [],
"usage": [
"wai remote verify [--target <name|url>] [--query <name>=<value>]... GET /remote/state on the room service"
],
"placement": "service",
"effect": "reads",
"dry_run": false,
"confirm": "never",
"route": {
"service": "wai-room",
"method": "GET",
"path": "/remote/state"
},
"doors": {
"cli": true,
"mcp": false,
"http": true
},
"toolset": "core",
"stability": "preview",
"input": {
"$ref": "joule-code/joule-code-rs/crates/joule-moq-room/openapi.json#/paths/~1remote~1state/get"
},
"output": {
"type": "object",
"required": [
"target",
"request",
"status",
"body"
],
"description": "The service's answer: the target the request went to (its name, and its address), the request (method and path), the HTTP status, the body (its JSON, or {\"text\": ...}), and where the key it carried came from (WAI_TOKEN, stored, or none), never the key"
},
"stream": null,
"since": "0.3.0",
"deprecated": null,
"receipt": false,
"needs": null,
"names": {
"cli": "wai remote verify",
"mcp": null,
"c": "wai_remote_verify",
"rust": "wai::remote::verify",
"sdk": "wai.remote.verify"
}
},
{
"id": "conversation.show",
"summary": "The conversation",
"cli": "wai conversation show",
"aliases": [],
"usage": [
"wai conversation show [--target <name|url>] [--query <name>=<value>]... GET /msg on the room service"
],
"placement": "service",
"effect": "reads",
"dry_run": false,
"confirm": "never",
"route": {
"service": "wai-room",
"method": "GET",
"path": "/msg"
},
"doors": {
"cli": true,
"mcp": false,
"http": true
},
"toolset": "core",
"stability": "preview",
"input": {
"$ref": "joule-code/joule-code-rs/crates/joule-moq-room/openapi.json#/paths/~1msg/get"
},
"output": {
"type": "object",
"required": [
"target",
"request",
"status",
"body"
],
"description": "The service's answer: the target the request went to (its name, and its address), the request (method and path), the HTTP status, the body (its JSON, or {\"text\": ...}), and where the key it carried came from (WAI_TOKEN, stored, or none), never the key"
},
"stream": null,
"since": "0.3.0",
"deprecated": null,
"receipt": false,
"needs": null,
"names": {
"cli": "wai conversation show",
"mcp": null,
"c": "wai_conversation_show",
"rust": "wai::conversation::show",
"sdk": "wai.conversation.show"
}
},
{
"id": "conversation.setup",
"summary": "A challenge for a proof",
"cli": "wai conversation setup",
"aliases": [],
"usage": [
"wai conversation setup [--target <name|url>] [--query <name>=<value>]... [--yes] GET /msg/challenge on the room service"
],
"placement": "service",
"effect": "writes-target",
"dry_run": true,
"confirm": "always",
"route": {
"service": "wai-room",
"method": "GET",
"path": "/msg/challenge"
},
"doors": {
"cli": true,
"mcp": false,
"http": true
},
"toolset": "core",
"stability": "preview",
"input": {
"$ref": "joule-code/joule-code-rs/crates/joule-moq-room/openapi.json#/paths/~1msg~1challenge/get"
},
"output": {
"type": "object",
"required": [
"target",
"request",
"status",
"body"
],
"description": "The service's answer: the target the request went to (its name, and its address), the request (method and path), the HTTP status, the body (its JSON, or {\"text\": ...}), and where the key it carried came from (WAI_TOKEN, stored, or none), never the key"
},
"stream": null,
"since": "0.3.0",
"deprecated": null,
"receipt": false,
"needs": null,
"names": {
"cli": "wai conversation setup",
"mcp": null,
"c": "wai_conversation_setup",
"rust": "wai::conversation::setup",
"sdk": "wai.conversation.setup"
}
},
{
"id": "conversation.join",
"summary": "A key that proves itself is admitted",
"cli": "wai conversation join",
"aliases": [],
"usage": [
"wai conversation join [--target <name|url>] [--body <json>|@<file>] [--yes] POST /msg/join on the room service"
],
"placement": "service",
"effect": "writes-target",
"dry_run": true,
"confirm": "always",
"route": {
"service": "wai-room",
"method": "POST",
"path": "/msg/join"
},
"doors": {
"cli": true,
"mcp": false,
"http": true
},
"toolset": "core",
"stability": "preview",
"input": {
"$ref": "joule-code/joule-code-rs/crates/joule-moq-room/openapi.json#/paths/~1msg~1join/post"
},
"output": {
"type": "object",
"required": [
"target",
"request",
"status",
"body"
],
"description": "The service's answer: the target the request went to (its name, and its address), the request (method and path), the HTTP status, the body (its JSON, or {\"text\": ...}), and where the key it carried came from (WAI_TOKEN, stored, or none), never the key"
},
"stream": null,
"since": "0.3.0",
"deprecated": null,
"receipt": false,
"needs": null,
"names": {
"cli": "wai conversation join",
"mcp": null,
"c": "wai_conversation_join",
"rust": "wai::conversation::join",
"sdk": "wai.conversation.join"
}
},
{
"id": "conversation.tail",
"summary": "The log as it is owed to the caller",
"cli": "wai conversation tail",
"aliases": [],
"usage": [
"wai conversation tail [--target <name|url>] [--query <name>=<value>]... GET /msg/log on the room service"
],
"placement": "service",
"effect": "reads",
"dry_run": false,
"confirm": "never",
"route": {
"service": "wai-room",
"method": "GET",
"path": "/msg/log"
},
"doors": {
"cli": true,
"mcp": false,
"http": true
},
"toolset": "core",
"stability": "preview",
"input": {
"$ref": "joule-code/joule-code-rs/crates/joule-moq-room/openapi.json#/paths/~1msg~1log/get"
},
"output": {
"type": "object",
"required": [
"target",
"request",
"status",
"body"
],
"description": "The service's answer: the target the request went to (its name, and its address), the request (method and path), the HTTP status, the body (its JSON, or {\"text\": ...}), and where the key it carried came from (WAI_TOKEN, stored, or none), never the key"
},
"stream": null,
"since": "0.3.0",
"deprecated": null,
"receipt": false,
"needs": null,
"names": {
"cli": "wai conversation tail",
"mcp": null,
"c": "wai_conversation_tail",
"rust": "wai::conversation::tail",
"sdk": "wai.conversation.tail"
}
},
{
"id": "conversation.import",
"summary": "A member's KeyPackage",
"cli": "wai conversation import",
"aliases": [],
"usage": [
"wai conversation import [--target <name|url>] [--body <json>|@<file>] [--yes] POST /msg/key-package on the room service"
],
"placement": "service",
"effect": "writes-target",
"dry_run": true,
"confirm": "always",
"route": {
"service": "wai-room",
"method": "POST",
"path": "/msg/key-package"
},
"doors": {
"cli": true,
"mcp": false,
"http": true
},
"toolset": "core",
"stability": "preview",
"input": {
"$ref": "joule-code/joule-code-rs/crates/joule-moq-room/openapi.json#/paths/~1msg~1key-package/post"
},
"output": {
"type": "object",
"required": [
"target",
"request",
"status",
"body"
],
"description": "The service's answer: the target the request went to (its name, and its address), the request (method and path), the HTTP status, the body (its JSON, or {\"text\": ...}), and where the key it carried came from (WAI_TOKEN, stored, or none), never the key"
},
"stream": null,
"since": "0.3.0",
"deprecated": null,
"receipt": false,
"needs": null,
"names": {
"cli": "wai conversation import",
"mcp": null,
"c": "wai_conversation_import",
"rust": "wai::conversation::import",
"sdk": "wai.conversation.import"
}
},
{
"id": "conversation.update",
"summary": "A GroupInfo, or a commit and its Welcome",
"cli": "wai conversation update",
"aliases": [],
"usage": [
"wai conversation update [--target <name|url>] [--body <json>|@<file>] [--yes] POST /msg/mls on the room service"
],
"placement": "service",
"effect": "writes-target",
"dry_run": true,
"confirm": "always",
"route": {
"service": "wai-room",
"method": "POST",
"path": "/msg/mls"
},
"doors": {
"cli": true,
"mcp": false,
"http": true
},
"toolset": "core",
"stability": "preview",
"input": {
"$ref": "joule-code/joule-code-rs/crates/joule-moq-room/openapi.json#/paths/~1msg~1mls/post"
},
"output": {
"type": "object",
"required": [
"target",
"request",
"status",
"body"
],
"description": "The service's answer: the target the request went to (its name, and its address), the request (method and path), the HTTP status, the body (its JSON, or {\"text\": ...}), and where the key it carried came from (WAI_TOKEN, stored, or none), never the key"
},
"stream": null,
"since": "0.3.0",
"deprecated": null,
"receipt": false,
"needs": null,
"names": {
"cli": "wai conversation update",
"mcp": null,
"c": "wai_conversation_update",
"rust": "wai::conversation::update",
"sdk": "wai.conversation.update"
}
},
{
"id": "message.create",
"summary": "A message",
"cli": "wai message create",
"aliases": [],
"usage": [
"wai message create [--target <name|url>] [--body <json>|@<file>] [--yes] POST /msg/post on the room service"
],
"placement": "service",
"effect": "writes-target",
"dry_run": true,
"confirm": "always",
"route": {
"service": "wai-room",
"method": "POST",
"path": "/msg/post"
},
"doors": {
"cli": true,
"mcp": false,
"http": true
},
"toolset": "core",
"stability": "preview",
"input": {
"$ref": "joule-code/joule-code-rs/crates/joule-moq-room/openapi.json#/paths/~1msg~1post/post"
},
"output": {
"type": "object",
"required": [
"target",
"request",
"status",
"body"
],
"description": "The service's answer: the target the request went to (its name, and its address), the request (method and path), the HTTP status, the body (its JSON, or {\"text\": ...}), and where the key it carried came from (WAI_TOKEN, stored, or none), never the key"
},
"stream": null,
"since": "0.3.0",
"deprecated": null,
"receipt": false,
"needs": null,
"names": {
"cli": "wai message create",
"mcp": null,
"c": "wai_message_create",
"rust": "wai::message::create",
"sdk": "wai.message.create"
}
},
{
"id": "acknowledgement.create",
"summary": "An acknowledgement",
"cli": "wai acknowledgement create",
"aliases": [],
"usage": [
"wai acknowledgement create [--target <name|url>] [--body <json>|@<file>] [--yes] POST /msg/ack on the room service"
],
"placement": "service",
"effect": "writes-target",
"dry_run": true,
"confirm": "always",
"route": {
"service": "wai-room",
"method": "POST",
"path": "/msg/ack"
},
"doors": {
"cli": true,
"mcp": false,
"http": true
},
"toolset": "core",
"stability": "preview",
"input": {
"$ref": "joule-code/joule-code-rs/crates/joule-moq-room/openapi.json#/paths/~1msg~1ack/post"
},
"output": {
"type": "object",
"required": [
"target",
"request",
"status",
"body"
],
"description": "The service's answer: the target the request went to (its name, and its address), the request (method and path), the HTTP status, the body (its JSON, or {\"text\": ...}), and where the key it carried came from (WAI_TOKEN, stored, or none), never the key"
},
"stream": null,
"since": "0.3.0",
"deprecated": null,
"receipt": false,
"needs": null,
"names": {
"cli": "wai acknowledgement create",
"mcp": null,
"c": "wai_acknowledgement_create",
"rust": "wai::acknowledgement::create",
"sdk": "wai.acknowledgement.create"
}
},
{
"id": "conversation.leave",
"summary": "The caller leaves",
"cli": "wai conversation leave",
"aliases": [],
"usage": [
"wai conversation leave [--target <name|url>] [--body <json>|@<file>] [--yes] POST /msg/leave on the room service"
],
"placement": "service",
"effect": "writes-target",
"dry_run": true,
"confirm": "always",
"route": {
"service": "wai-room",
"method": "POST",
"path": "/msg/leave"
},
"doors": {
"cli": true,
"mcp": false,
"http": true
},
"toolset": "core",
"stability": "preview",
"input": {
"$ref": "joule-code/joule-code-rs/crates/joule-moq-room/openapi.json#/paths/~1msg~1leave/post"
},
"output": {
"type": "object",
"required": [
"target",
"request",
"status",
"body"
],
"description": "The service's answer: the target the request went to (its name, and its address), the request (method and path), the HTTP status, the body (its JSON, or {\"text\": ...}), and where the key it carried came from (WAI_TOKEN, stored, or none), never the key"
},
"stream": null,
"since": "0.3.0",
"deprecated": null,
"receipt": false,
"needs": null,
"names": {
"cli": "wai conversation leave",
"mcp": null,
"c": "wai_conversation_leave",
"rust": "wai::conversation::leave",
"sdk": "wai.conversation.leave"
}
},
{
"id": "member.delete",
"summary": "The owner removes a member",
"cli": "wai member delete",
"aliases": [],
"usage": [
"wai member delete [--target <name|url>] [--body <json>|@<file>] [--yes] POST /msg/remove on the room service"
],
"placement": "service",
"effect": "writes-target",
"dry_run": true,
"confirm": "always",
"route": {
"service": "wai-room",
"method": "POST",
"path": "/msg/remove"
},
"doors": {
"cli": true,
"mcp": false,
"http": true
},
"toolset": "core",
"stability": "preview",
"input": {
"$ref": "joule-code/joule-code-rs/crates/joule-moq-room/openapi.json#/paths/~1msg~1remove/post"
},
"output": {
"type": "object",
"required": [
"target",
"request",
"status",
"body"
],
"description": "The service's answer: the target the request went to (its name, and its address), the request (method and path), the HTTP status, the body (its JSON, or {\"text\": ...}), and where the key it carried came from (WAI_TOKEN, stored, or none), never the key"
},
"stream": null,
"since": "0.3.0",
"deprecated": null,
"receipt": false,
"needs": null,
"names": {
"cli": "wai member delete",
"mcp": null,
"c": "wai_member_delete",
"rust": "wai::member::delete",
"sdk": "wai.member.delete"
}
},
{
"id": "call.setup",
"summary": "A challenge for a proof",
"cli": "wai call setup",
"aliases": [],
"usage": [
"wai call setup [--target <name|url>] [--query <name>=<value>]... [--yes] GET /call/challenge on the room service"
],
"placement": "service",
"effect": "writes-target",
"dry_run": true,
"confirm": "always",
"route": {
"service": "wai-room",
"method": "GET",
"path": "/call/challenge"
},
"doors": {
"cli": true,
"mcp": false,
"http": true
},
"toolset": "core",
"stability": "preview",
"input": {
"$ref": "joule-code/joule-code-rs/crates/joule-moq-room/openapi.json#/paths/~1call~1challenge/get"
},
"output": {
"type": "object",
"required": [
"target",
"request",
"status",
"body"
],
"description": "The service's answer: the target the request went to (its name, and its address), the request (method and path), the HTTP status, the body (its JSON, or {\"text\": ...}), and where the key it carried came from (WAI_TOKEN, stored, or none), never the key"
},
"stream": null,
"since": "0.3.0",
"deprecated": null,
"receipt": false,
"needs": null,
"names": {
"cli": "wai call setup",
"mcp": null,
"c": "wai_call_setup",
"rust": "wai::call::setup",
"sdk": "wai.call.setup"
}
},
{
"id": "call.create",
"summary": "Place a call",
"cli": "wai call create",
"aliases": [],
"usage": [
"wai call create [--target <name|url>] [--body <json>|@<file>] [--yes] POST /call/place on the room service"
],
"placement": "service",
"effect": "writes-target",
"dry_run": true,
"confirm": "always",
"route": {
"service": "wai-room",
"method": "POST",
"path": "/call/place"
},
"doors": {
"cli": true,
"mcp": false,
"http": true
},
"toolset": "core",
"stability": "preview",
"input": {
"$ref": "joule-code/joule-code-rs/crates/joule-moq-room/openapi.json#/paths/~1call~1place/post"
},
"output": {
"type": "object",
"required": [
"target",
"request",
"status",
"body"
],
"description": "The service's answer: the target the request went to (its name, and its address), the request (method and path), the HTTP status, the body (its JSON, or {\"text\": ...}), and where the key it carried came from (WAI_TOKEN, stored, or none), never the key"
},
"stream": null,
"since": "0.3.0",
"deprecated": null,
"receipt": false,
"needs": null,
"names": {
"cli": "wai call create",
"mcp": null,
"c": "wai_call_create",
"rust": "wai::call::create",
"sdk": "wai.call.create"
}
},
{
"id": "call.invite",
"summary": "Ring invitees",
"cli": "wai call invite",
"aliases": [],
"usage": [
"wai call invite [--target <name|url>] [--body <json>|@<file>] [--yes] POST /call/ring on the room service"
],
"placement": "service",
"effect": "writes-target",
"dry_run": true,
"confirm": "always",
"route": {
"service": "wai-room",
"method": "POST",
"path": "/call/ring"
},
"doors": {
"cli": true,
"mcp": false,
"http": true
},
"toolset": "core",
"stability": "preview",
"input": {
"$ref": "joule-code/joule-code-rs/crates/joule-moq-room/openapi.json#/paths/~1call~1ring/post"
},
"output": {
"type": "object",
"required": [
"target",
"request",
"status",
"body"
],
"description": "The service's answer: the target the request went to (its name, and its address), the request (method and path), the HTTP status, the body (its JSON, or {\"text\": ...}), and where the key it carried came from (WAI_TOKEN, stored, or none), never the key"
},
"stream": null,
"since": "0.3.0",
"deprecated": null,
"receipt": false,
"needs": null,
"names": {
"cli": "wai call invite",
"mcp": null,
"c": "wai_call_invite",
"rust": "wai::call::invite",
"sdk": "wai.call.invite"
}
},
{
"id": "inbox.show",
"summary": "The caller's inbox",
"cli": "wai inbox show",
"aliases": [],
"usage": [
"wai inbox show [--target <name|url>] [--query <name>=<value>]... GET /inbox on the room service"
],
"placement": "service",
"effect": "reads",
"dry_run": false,
"confirm": "never",
"route": {
"service": "wai-room",
"method": "GET",
"path": "/inbox"
},
"doors": {
"cli": true,
"mcp": false,
"http": true
},
"toolset": "core",
"stability": "preview",
"input": {
"$ref": "joule-code/joule-code-rs/crates/joule-moq-room/openapi.json#/paths/~1inbox/get"
},
"output": {
"type": "object",
"required": [
"target",
"request",
"status",
"body"
],
"description": "The service's answer: the target the request went to (its name, and its address), the request (method and path), the HTTP status, the body (its JSON, or {\"text\": ...}), and where the key it carried came from (WAI_TOKEN, stored, or none), never the key"
},
"stream": null,
"since": "0.3.0",
"deprecated": null,
"receipt": false,
"needs": null,
"names": {
"cli": "wai inbox show",
"mcp": null,
"c": "wai_inbox_show",
"rust": "wai::inbox::show",
"sdk": "wai.inbox.show"
}
},
{
"id": "answer.create",
"summary": "Accept, decline or cancel",
"cli": "wai answer create",
"aliases": [],
"usage": [
"wai answer create [--target <name|url>] [--body <json>|@<file>] [--yes] POST /call/answer on the room service"
],
"placement": "service",
"effect": "writes-target",
"dry_run": true,
"confirm": "always",
"route": {
"service": "wai-room",
"method": "POST",
"path": "/call/answer"
},
"doors": {
"cli": true,
"mcp": false,
"http": true
},
"toolset": "core",
"stability": "preview",
"input": {
"$ref": "joule-code/joule-code-rs/crates/joule-moq-room/openapi.json#/paths/~1call~1answer/post"
},
"output": {
"type": "object",
"required": [
"target",
"request",
"status",
"body"
],
"description": "The service's answer: the target the request went to (its name, and its address), the request (method and path), the HTTP status, the body (its JSON, or {\"text\": ...}), and where the key it carried came from (WAI_TOKEN, stored, or none), never the key"
},
"stream": null,
"since": "0.3.0",
"deprecated": null,
"receipt": false,
"needs": null,
"names": {
"cli": "wai answer create",
"mcp": null,
"c": "wai_answer_create",
"rust": "wai::answer::create",
"sdk": "wai.answer.create"
}
},
{
"id": "call.show",
"summary": "The current call",
"cli": "wai call show",
"aliases": [],
"usage": [
"wai call show [--target <name|url>] [--query <name>=<value>]... GET /call on the room service"
],
"placement": "service",
"effect": "reads",
"dry_run": false,
"confirm": "never",
"route": {
"service": "wai-room",
"method": "GET",
"path": "/call"
},
"doors": {
"cli": true,
"mcp": false,
"http": true
},
"toolset": "core",
"stability": "preview",
"input": {
"$ref": "joule-code/joule-code-rs/crates/joule-moq-room/openapi.json#/paths/~1call/get"
},
"output": {
"type": "object",
"required": [
"target",
"request",
"status",
"body"
],
"description": "The service's answer: the target the request went to (its name, and its address), the request (method and path), the HTTP status, the body (its JSON, or {\"text\": ...}), and where the key it carried came from (WAI_TOKEN, stored, or none), never the key"
},
"stream": null,
"since": "0.3.0",
"deprecated": null,
"receipt": false,
"needs": null,
"names": {
"cli": "wai call show",
"mcp": null,
"c": "wai_call_show",
"rust": "wai::call::show",
"sdk": "wai.call.show"
}
},
{
"id": "contract.create",
"summary": "A channel's share contract from its terms, signed with the operator key; each owner countersigns it",
"cli": "wai contract create",
"aliases": [],
"usage": [
"wai contract create <terms.json> --key <name|file> [--out F] [--yes] the share contract (WRC1) of the terms, signed",
" with the operator key, every countersignature still to come, written to F (<digest>.wrc); each owner adds",
" its own with `wai contract accept`; replacing a file waits for --yes (--confirm, deprecated, is the same)"
],
"placement": "local",
"effect": "writes-project",
"dry_run": true,
"confirm": "when-replacing-a-file",
"route": null,
"doors": {
"cli": true,
"mcp": false,
"http": false
},
"toolset": "core",
"stability": "preview",
"input": {
"type": "object",
"properties": {
"terms": {
"type": "string",
"format": "path",
"description": "The terms: start, end, currency, channel, channel_signer, rule, between, carriers, owners, splits and assets.",
"x-cli": {
"positional": true
}
},
"key": {
"type": "string",
"description": "The operator key: its name in the keystore (wai key list), or its file: 32 bytes, or 64 hexadecimal digits.",
"x-cli": {
"flag": "--key"
}
},
"out": {
"type": "string",
"format": "path",
"description": "The contract's file (<digest>.wrc).",
"x-cli": {
"flag": "--out"
}
}
},
"required": [
"terms",
"key"
],
"additionalProperties": false
},
"output": {
"type": "object",
"required": [
"digest",
"operator",
"channel",
"owners",
"in_force",
"contract",
"file"
],
"description": "The share contract (WRC1, hexadecimal), its digest, each owner and whether it has countersigned, and the file it went to"
},
"stream": null,
"since": "0.3.0",
"deprecated": null,
"receipt": true,
"needs": {
"all": [
"revenue_share"
]
},
"names": {
"cli": "wai contract create",
"mcp": null,
"c": "wai_contract_create",
"rust": "wai::contract::create",
"sdk": "wai.contract.create"
}
},
{
"id": "contract.update",
"summary": "An owner's countersignature added to a share contract, after its rules and the operator's signature are checked",
"cli": "wai contract accept",
"aliases": [],
"usage": [
"wai contract accept <contract> --key <name|file> [--out F] [--yes] the owner's countersignature added to the contract,",
" written to F (the contract's own file when F is not given); replacing a file waits for --yes (--confirm,",
" deprecated, is the same)"
],
"placement": "local",
"effect": "writes-project",
"dry_run": true,
"confirm": "when-replacing-a-file",
"route": null,
"doors": {
"cli": true,
"mcp": false,
"http": false
},
"toolset": "core",
"stability": "preview",
"input": {
"type": "object",
"properties": {
"contract": {
"type": "string",
"format": "path",
"description": "The contract's file (WRC1).",
"x-cli": {
"positional": true
}
},
"key": {
"type": "string",
"description": "The owner key: its name in the keystore (wai key list), or its file: 32 bytes, or 64 hexadecimal digits.",
"x-cli": {
"flag": "--key"
}
},
"out": {
"type": "string",
"format": "path",
"description": "Where the countersigned contract goes (the contract's own file).",
"x-cli": {
"flag": "--out"
}
}
},
"required": [
"contract",
"key"
],
"additionalProperties": false
},
"output": {
"type": "object",
"required": [
"digest",
"operator",
"channel",
"owners",
"in_force",
"contract",
"file"
],
"description": "The share contract (WRC1, hexadecimal), its digest, each owner and whether it has countersigned, and the file it went to"
},
"stream": null,
"since": "0.3.0",
"deprecated": null,
"receipt": true,
"needs": {
"all": [
"revenue_share"
]
},
"names": {
"cli": "wai contract update",
"mcp": null,
"c": "wai_contract_update",
"rust": "wai::contract::update",
"sdk": "wai.contract.update"
}
},
{
"id": "statement.create",
"summary": "A party's revenue-share statement for a period, recomputed from the ledger's invoices and the channel's program-as-run, signed with the operator key",
"cli": "wai statement create",
"aliases": [],
"usage": [
"wai statement create <inputs.json> --party <key> --start µs --end µs --key <name|file> [--out F] [--yes] the statement",
" (WRS1) of the party for [start, end), computed from a verification document without its statement (the",
" contract, other contracts, runs and ledger documents), signed with the operator key and written with its",
" document to F (<digest>.wai-share.json) for `wai statement verify`; replacing a file waits for --yes"
],
"placement": "local",
"effect": "writes-project",
"dry_run": true,
"confirm": "when-replacing-a-file",
"route": null,
"doors": {
"cli": true,
"mcp": false,
"http": false
},
"toolset": "core",
"stability": "preview",
"input": {
"type": "object",
"properties": {
"inputs": {
"type": "string",
"format": "path",
"description": "A verification document without its statement: contract, contracts, runs and ledgers.",
"x-cli": {
"positional": true
}
},
"party": {
"type": "string",
"description": "The party's key, 64 hexadecimal digits: the operator or an owner.",
"x-cli": {
"flag": "--party"
}
},
"start": {
"type": "integer",
"description": "The period's start, microseconds since 1970.",
"x-cli": {
"flag": "--start"
}
},
"end": {
"type": "integer",
"description": "The period's end, after its start.",
"x-cli": {
"flag": "--end"
}
},
"key": {
"type": "string",
"description": "The operator key: its name in the keystore (wai key list), or its file: 32 bytes, or 64 hexadecimal digits.",
"x-cli": {
"flag": "--key"
}
},
"out": {
"type": "string",
"format": "path",
"description": "The verification document's file (<digest>.wai-share.json).",
"x-cli": {
"flag": "--out"
}
}
},
"required": [
"inputs",
"party",
"start",
"end",
"key"
],
"additionalProperties": false
},
"output": {
"type": "object",
"required": [
"file",
"statement",
"outcome"
],
"description": "The statement (WRS1, hexadecimal), the file its verification document went to, and its outcome, recomputed here"
},
"stream": null,
"since": "0.3.0",
"deprecated": null,
"receipt": true,
"needs": {
"all": [
"revenue_share"
]
},
"names": {
"cli": "wai statement create",
"mcp": null,
"c": "wai_statement_create",
"rust": "wai::statement::create",
"sdk": "wai.statement.create"
}
},
{
"id": "statement.verify",
"summary": "A revenue-share statement's verification document checked: every line recomputed from the public records, or the reason it is refused",
"cli": "wai statement verify",
"aliases": [],
"usage": [
"wai statement verify <document.json> the outcome of a statement's verification document: each line, each split's",
" division and each impression's attribution, recomputed; exit 1 with the reason on a refusal"
],
"placement": "local",
"effect": "reads",
"dry_run": false,
"confirm": "never",
"route": null,
"doors": {
"cli": true,
"mcp": false,
"http": false
},
"toolset": "core",
"stability": "preview",
"input": {
"type": "object",
"properties": {
"document": {
"type": "string",
"format": "path",
"description": "The verification document: contract, contracts, statement, runs and ledgers.",
"x-cli": {
"positional": true
}
}
},
"required": [
"document"
],
"additionalProperties": false
},
"output": {
"type": "object",
"required": [
"outcome",
"statement",
"contract",
"party",
"role",
"lines",
"total"
],
"description": "An accepted statement's outcome (revenue-share §8.3): its lines, each split's division, every impression attributed, and the total"
},
"stream": null,
"since": "0.3.0",
"deprecated": null,
"receipt": false,
"needs": {
"all": [
"revenue_share"
]
},
"names": {
"cli": "wai statement verify",
"mcp": null,
"c": "wai_statement_verify",
"rust": "wai::statement::verify",
"sdk": "wai.statement.verify"
}
},
{
"id": "opportunity.create",
"summary": "A party's opportunity report for a period: the ad breaks a channel's signed cues and program-as-run prove in the programmes it shares in, signed with the issuer key",
"cli": "wai opportunity create",
"aliases": [],
"usage": [
"wai opportunity create <inputs.json> --party <key> --start µs --end µs --key <name|file> [--out F] [--yes] the report",
" (WOR1) of the party for [start, end), computed from a verification document without its report (the",
" contract, other contracts, runs and rooms), signed with the issuer key and written with its document to F",
" (<digest>.wai-opportunity.json) for `wai opportunity verify`; replacing a file waits for --yes"
],
"placement": "local",
"effect": "writes-project",
"dry_run": true,
"confirm": "when-replacing-a-file",
"route": null,
"doors": {
"cli": true,
"mcp": false,
"http": false
},
"toolset": "core",
"stability": "preview",
"input": {
"type": "object",
"properties": {
"inputs": {
"type": "string",
"format": "path",
"description": "A verification document without its report: contract, contracts, runs and rooms.",
"x-cli": {
"positional": true
}
},
"party": {
"type": "string",
"description": "The party's key, 64 hexadecimal digits: the operator or an owner.",
"x-cli": {
"flag": "--party"
}
},
"start": {
"type": "integer",
"description": "The period's start, microseconds since 1970.",
"x-cli": {
"flag": "--start"
}
},
"end": {
"type": "integer",
"description": "The period's end, after its start.",
"x-cli": {
"flag": "--end"
}
},
"key": {
"type": "string",
"description": "The issuer key: its name in the keystore (wai key list), or its file: 32 bytes, or 64 hexadecimal digits.",
"x-cli": {
"flag": "--key"
}
},
"out": {
"type": "string",
"format": "path",
"description": "The verification document's file (<digest>.wai-opportunity.json).",
"x-cli": {
"flag": "--out"
}
}
},
"required": [
"inputs",
"party",
"start",
"end",
"key"
],
"additionalProperties": false
},
"output": {
"type": "object",
"required": [
"file",
"report",
"outcome"
],
"description": "The opportunity report (WOR1, hexadecimal), the file its verification document went to, and its outcome, recomputed here"
},
"stream": null,
"since": "0.3.0",
"deprecated": null,
"receipt": true,
"needs": {
"all": [
"opportunity_report"
]
},
"names": {
"cli": "wai opportunity create",
"mcp": null,
"c": "wai_opportunity_create",
"rust": "wai::opportunity::create",
"sdk": "wai.opportunity.create"
}
},
{
"id": "opportunity.verify",
"summary": "An opportunity report's or a statement check's verification document checked: every break, line and flag recomputed from the records, or the reason it is refused",
"cli": "wai opportunity verify",
"aliases": [],
"usage": [
"wai opportunity verify <document.json> the outcome of a report's or a check's verification document: each break",
" attributed, each line and flag recomputed; exit 1 with the reason on a refusal"
],
"placement": "local",
"effect": "reads",
"dry_run": false,
"confirm": "never",
"route": null,
"doors": {
"cli": true,
"mcp": false,
"http": false
},
"toolset": "core",
"stability": "preview",
"input": {
"type": "object",
"properties": {
"document": {
"type": "string",
"format": "path",
"description": "The verification document: a report's (contract, contracts, report, runs, rooms) or a check's (report, reported, statement, check).",
"x-cli": {
"positional": true
}
}
},
"required": [
"document"
],
"additionalProperties": false
},
"output": {
"type": "object",
"required": [
"outcome"
],
"description": "An accepted report's outcome (opportunity-report §8.3: every break attributed, each line and the totals) or an accepted check's (§11.3: each line's opportunities, reported and signed figures and flags)"
},
"stream": null,
"since": "0.3.0",
"deprecated": null,
"receipt": false,
"needs": {
"all": [
"opportunity_report"
]
},
"names": {
"cli": "wai opportunity verify",
"mcp": null,
"c": "wai_opportunity_verify",
"rust": "wai::opportunity::verify",
"sdk": "wai.opportunity.verify"
}
},
{
"id": "statement.check",
"summary": "A platform's reported statement checked against an opportunity report and, when given, the operator's signed statement, signed with the issuer key",
"cli": "wai statement check",
"aliases": [],
"usage": [
"wai statement check <report.json> <reported> [--statement <document.json>] [--floor ppm] [--ceiling ppm] --key <name|file> [--out F] [--yes]",
" the check (WCK1) of a reported statement (JSON, or CSV for a file named .csv) beside a report's verification",
" document and a signed statement's, at the bounds given (500000 and 2000000 when not), signed with the issuer",
" key and written with its document to F (<digest>.wai-check.json); replacing a file waits for --yes"
],
"placement": "local",
"effect": "writes-project",
"dry_run": true,
"confirm": "when-replacing-a-file",
"route": null,
"doors": {
"cli": true,
"mcp": false,
"http": false
},
"toolset": "core",
"stability": "preview",
"input": {
"type": "object",
"properties": {
"report": {
"type": "string",
"format": "path",
"description": "A report's verification document, with its report.",
"x-cli": {
"positional": true
}
},
"reported": {
"type": "string",
"format": "path",
"description": "The reported statement: JSON, or CSV for a file named .csv.",
"x-cli": {
"positional": true
}
},
"statement": {
"type": "string",
"format": "path",
"description": "A signed revenue-share statement's verification document of the same party and period.",
"x-cli": {
"flag": "--statement"
}
},
"floor": {
"type": "integer",
"description": "The lower bound, in millionths of the period's rate (500000).",
"x-cli": {
"flag": "--floor"
}
},
"ceiling": {
"type": "integer",
"description": "The upper bound, in millionths of the period's rate (2000000).",
"x-cli": {
"flag": "--ceiling"
}
},
"key": {
"type": "string",
"description": "The issuer key: its name in the keystore (wai key list), or its file: 32 bytes, or 64 hexadecimal digits.",
"x-cli": {
"flag": "--key"
}
},
"out": {
"type": "string",
"format": "path",
"description": "The verification document's file (<digest>.wai-check.json).",
"x-cli": {
"flag": "--out"
}
}
},
"required": [
"report",
"reported",
"key"
],
"additionalProperties": false
},
"output": {
"type": "object",
"required": [
"file",
"check",
"outcome"
],
"description": "The statement check (WCK1, hexadecimal), the file its verification document went to, and its outcome, recomputed here"
},
"stream": null,
"since": "0.3.0",
"deprecated": null,
"receipt": true,
"needs": {
"all": [
"opportunity_report"
]
},
"names": {
"cli": "wai statement check",
"mcp": null,
"c": "wai_statement_check",
"rust": "wai::statement::check",
"sdk": "wai.statement.check"
}
},
{
"id": "key.create",
"summary": "A new Ed25519 signing key kept under a name, for one role, its secret in macOS's keychain or in a seed file; every signing operation's --key takes the name",
"cli": "wai key create",
"aliases": [],
"usage": [
"wai key create <name> --for <role> [--store keychain|file] [--keystore DIR] a new signing key named <name>",
" (1 to 48 of a-z, 0-9, - and _), for one role: origin, signer, room, audit, ledger, release, remote-host,",
" quantum or dev. Its secret is kept in the login keychain (--store keychain, the default on macOS) or in a",
" file of the keystore (--store file, the default elsewhere: mode 0600 on Unix; on Windows an access list for",
" this account alone, inheritance off), and is never printed; a seed file another account may read is refused.",
" The keystore is DIR, $WAI_KEYSTORE, or ~/.config/wai/keys (%APPDATA%\\wai\\keys on Windows). --key <name> signs",
" with it"
],
"placement": "local",
"effect": "writes-project",
"dry_run": true,
"confirm": "never",
"route": null,
"doors": {
"cli": true,
"mcp": false,
"http": false
},
"toolset": "core",
"stability": "preview",
"input": {
"type": "object",
"properties": {
"name": {
"type": "string",
"description": "The key's name: 1 to 48 of a-z, 0-9, - and _, beginning with a letter or a digit.",
"x-cli": {
"positional": true
}
},
"role": {
"type": "string",
"description": "The key's role: origin, signer, room, audit, ledger, release, remote-host, quantum or dev.",
"x-cli": {
"flag": "--for"
}
},
"store": {
"type": "string",
"description": "Where the secret is kept: keychain (the default on macOS) or file (the default elsewhere: mode 0600 on Unix; on Windows, an access list for this account alone).",
"x-cli": {
"flag": "--store"
}
},
"keystore": {
"type": "string",
"format": "path",
"description": "The keystore's directory ($WAI_KEYSTORE, or ~/.config/wai/keys).",
"x-cli": {
"flag": "--keystore"
}
}
},
"required": [
"name",
"role"
],
"additionalProperties": false
},
"output": {
"type": "object",
"required": [
"name",
"role",
"id",
"key",
"store",
"keystore"
],
"description": "The key kept: its name, role and key id, its public key in hexadecimal and its did:key (null in a dry run, which makes no key), where its secret is kept (store: keychain or file), and the keystore"
},
"stream": null,
"since": "0.5.0",
"deprecated": null,
"receipt": true,
"needs": {
"all": [
"quickstart"
]
},
"names": {
"cli": "wai key create",
"mcp": null,
"c": "wai_key_create",
"rust": "wai::key::create",
"sdk": "wai.key.create"
}
},
{
"id": "key.list",
"summary": "Every key of the keystore: its name, role, key id, public key, status and where its secret is kept",
"cli": "wai key list",
"aliases": [],
"usage": [
"wai key list [--for <role>] [--keystore DIR] every key of the keystore, its newest version, and where its secret is kept"
],
"placement": "local",
"effect": "reads",
"dry_run": false,
"confirm": "never",
"route": null,
"doors": {
"cli": true,
"mcp": false,
"http": false
},
"toolset": "core",
"stability": "preview",
"input": {
"type": "object",
"properties": {
"role": {
"type": "string",
"description": "Only the keys of this role.",
"x-cli": {
"flag": "--for"
}
},
"keystore": {
"type": "string",
"format": "path",
"description": "The keystore's directory ($WAI_KEYSTORE, or ~/.config/wai/keys).",
"x-cli": {
"flag": "--keystore"
}
}
},
"required": [],
"additionalProperties": false
},
"output": {
"type": "object",
"required": [
"keystore",
"keys"
],
"description": "Each key of the keystore: its name, role, newest key id, public key, did:key and status, and where its secret is kept"
},
"stream": null,
"since": "0.5.0",
"deprecated": null,
"receipt": false,
"needs": {
"all": [
"quickstart"
]
},
"names": {
"cli": "wai key list",
"mcp": null,
"c": "wai_key_list",
"rust": "wai::key::list",
"sdk": "wai.key.list"
}
},
{
"id": "key.show",
"summary": "One key: its public key and did:key, its role, every version with its status as a key log states it, and the version --key signs with",
"cli": "wai key show",
"aliases": [],
"usage": [
"wai key show <name> [--keystore DIR] one key's versions, each active, retired (until) or revoked (compromised since), as",
" jwp-receipts §7.2's key log states them, and the one --key <name> signs with"
],
"placement": "local",
"effect": "reads",
"dry_run": false,
"confirm": "never",
"route": null,
"doors": {
"cli": true,
"mcp": false,
"http": false
},
"toolset": "core",
"stability": "preview",
"input": {
"type": "object",
"properties": {
"name": {
"type": "string",
"description": "The key's name.",
"x-cli": {
"positional": true
}
},
"keystore": {
"type": "string",
"format": "path",
"description": "The keystore's directory ($WAI_KEYSTORE, or ~/.config/wai/keys).",
"x-cli": {
"flag": "--keystore"
}
}
},
"required": [
"name"
],
"additionalProperties": false
},
"output": {
"type": "object",
"required": [
"keystore",
"name",
"role",
"signs_with",
"versions"
],
"description": "The key's versions, oldest first, each with its key id, public key, did:key, status (active, retired, revoked) and times as a key log states them (jwp-receipts §7.2), and where its secret is kept (store; null once destroyed); and the key id --key signs with"
},
"stream": null,
"since": "0.5.0",
"deprecated": null,
"receipt": false,
"needs": {
"all": [
"quickstart"
]
},
"names": {
"cli": "wai key show",
"mcp": null,
"c": "wai_key_show",
"rust": "wai::key::show",
"sdk": "wai.key.show"
}
},
{
"id": "key.rotate",
"summary": "A key's successor made under the same name and a new key id, the old version retired now and its secret destroyed",
"cli": "wai key rotate",
"aliases": [],
"usage": [
"wai key rotate <name> [--store keychain|file] [--keystore DIR] [--yes] a successor under a new key id (<name>.<n>),",
" which --key <name> signs with from now; the old version is retired now and its secret destroyed (jwp-receipts",
" §7.6), so it waits for --yes"
],
"placement": "local",
"effect": "destructive",
"dry_run": true,
"confirm": "always",
"route": null,
"doors": {
"cli": true,
"mcp": false,
"http": false
},
"toolset": "core",
"stability": "preview",
"input": {
"type": "object",
"properties": {
"name": {
"type": "string",
"description": "The key's name.",
"x-cli": {
"positional": true
}
},
"store": {
"type": "string",
"description": "Where the successor's secret is kept (where the old one's was).",
"x-cli": {
"flag": "--store"
}
},
"keystore": {
"type": "string",
"format": "path",
"description": "The keystore's directory ($WAI_KEYSTORE, or ~/.config/wai/keys).",
"x-cli": {
"flag": "--keystore"
}
}
},
"required": [
"name"
],
"additionalProperties": false
},
"output": {
"type": "object",
"required": [
"name",
"previous",
"id",
"key",
"store"
],
"description": "The version retired (previous, with until) and the successor made: its key id, public key (null in a dry run) and where its secret is kept (store)"
},
"stream": null,
"since": "0.5.0",
"deprecated": null,
"receipt": true,
"needs": {
"all": [
"quickstart"
]
},
"names": {
"cli": "wai key rotate",
"mcp": null,
"c": "wai_key_rotate",
"rust": "wai::key::rotate",
"sdk": "wai.key.rotate"
}
},
{
"id": "key.revoke",
"summary": "A key's version revoked as compromised from a time, its secret destroyed, so --key signs nothing with it",
"cli": "wai key revoke",
"aliases": [],
"usage": [
"wai key revoke <name> [--id <key-id>] [--compromised-since <date-time>] [--keystore DIR] [--yes] the key's newest",
" version (or --id's) revoked, compromised since the time given (now; YYYY-MM-DDTHH:MM:SSZ), and its secret",
" destroyed (jwp-receipts §7.6); it waits for --yes"
],
"placement": "local",
"effect": "destructive",
"dry_run": true,
"confirm": "always",
"route": null,
"doors": {
"cli": true,
"mcp": false,
"http": false
},
"toolset": "core",
"stability": "preview",
"input": {
"type": "object",
"properties": {
"name": {
"type": "string",
"description": "The key's name.",
"x-cli": {
"positional": true
}
},
"id": {
"type": "string",
"description": "The version to revoke, by its key id (the newest).",
"x-cli": {
"flag": "--id"
}
},
"compromised_since": {
"type": "string",
"description": "From when another party may have held it: a date-time in UTC, YYYY-MM-DDTHH:MM:SSZ (now).",
"x-cli": {
"flag": "--compromised-since"
}
},
"keystore": {
"type": "string",
"format": "path",
"description": "The keystore's directory ($WAI_KEYSTORE, or ~/.config/wai/keys).",
"x-cli": {
"flag": "--keystore"
}
}
},
"required": [
"name"
],
"additionalProperties": false
},
"output": {
"type": "object",
"required": [
"name",
"id",
"compromised_since"
],
"description": "The version revoked, the time from which it is held compromised, and whether its secret was destroyed"
},
"stream": null,
"since": "0.5.0",
"deprecated": null,
"receipt": true,
"needs": {
"all": [
"quickstart"
]
},
"names": {
"cli": "wai key revoke",
"mcp": null,
"c": "wai_key_revoke",
"rust": "wai::key::revoke",
"sdk": "wai.key.revoke"
}
},
{
"id": "key.import",
"summary": "A key file's seed kept under a name, as wai key create keeps a new one; a published test seed is refused unless named one",
"cli": "wai key import",
"aliases": [],
"usage": [
"wai key import <name> --for <role> --from <file> [--store keychain|file] [--published-test-seed] [--keystore DIR]",
" the seed of a key file (64 hexadecimal digits or the 32 bytes, as every --key file holds) kept as wai key create",
" keeps one; a seed of one byte repeated 32 times, the form of every seed WAI publishes, is refused unless",
" --published-test-seed names it a test key"
],
"placement": "local",
"effect": "writes-project",
"dry_run": true,
"confirm": "never",
"route": null,
"doors": {
"cli": true,
"mcp": false,
"http": false
},
"toolset": "core",
"stability": "preview",
"input": {
"type": "object",
"properties": {
"name": {
"type": "string",
"description": "The key's name.",
"x-cli": {
"positional": true
}
},
"role": {
"type": "string",
"description": "The key's role: origin, signer, room, audit, ledger, release, remote-host, quantum or dev.",
"x-cli": {
"flag": "--for"
}
},
"from": {
"type": "string",
"format": "path",
"description": "The key file: 64 hexadecimal digits, or the 32 bytes.",
"x-cli": {
"flag": "--from"
}
},
"store": {
"type": "string",
"description": "Where the secret is kept: keychain (the default on macOS) or file.",
"x-cli": {
"flag": "--store"
}
},
"published_test_seed": {
"type": "boolean",
"description": "Keep a published test seed, marked as one.",
"x-cli": {
"flag": "--published-test-seed"
}
},
"keystore": {
"type": "string",
"format": "path",
"description": "The keystore's directory ($WAI_KEYSTORE, or ~/.config/wai/keys).",
"x-cli": {
"flag": "--keystore"
}
}
},
"required": [
"name",
"role",
"from"
],
"additionalProperties": false
},
"output": {
"type": "object",
"required": [
"name",
"role",
"id",
"key",
"store",
"keystore"
],
"description": "The key kept: its name, role and key id, its public key in hexadecimal and its did:key (null in a dry run, which makes no key), where its secret is kept (store: keychain or file), and the keystore"
},
"stream": null,
"since": "0.5.0",
"deprecated": null,
"receipt": true,
"needs": {
"all": [
"quickstart"
]
},
"names": {
"cli": "wai key import",
"mcp": null,
"c": "wai_key_import",
"rust": "wai::key::import",
"sdk": "wai.key.import"
}
},
{
"id": "key.export",
"summary": "A key's public half, never its secret: in hexadecimal, as a did:key, as key-log entries, or as the line wai-keys lists it by",
"cli": "wai key export",
"aliases": [],
"usage": [
"wai key export <name> [--format hex|did-key|entry|wai-keys] [--may-sign <authority>,...] [--out F] [--keystore DIR]",
" the public half alone: hex (the default), did-key, entry (each version as a key-log entry, jwp-receipts §7.2) or",
" wai-keys (the newest as wai-keys init --key and append --add take it); entry and wai-keys name the authorities",
" an origin gives it (--may-sign); to stdout, or to F (replacing a file waits for --yes)"
],
"placement": "local",
"effect": "writes-project",
"dry_run": true,
"confirm": "when-replacing-a-file",
"route": null,
"doors": {
"cli": true,
"mcp": false,
"http": false
},
"toolset": "core",
"stability": "preview",
"input": {
"type": "object",
"properties": {
"name": {
"type": "string",
"description": "The key's name.",
"x-cli": {
"positional": true
}
},
"format": {
"type": "string",
"description": "hex (the default), did-key, entry or wai-keys.",
"x-cli": {
"flag": "--format"
}
},
"may_sign": {
"type": "string",
"description": "With entry and wai-keys: the authorities an origin gives the key (jwp-receipts §7.5), comma-separated.",
"x-cli": {
"flag": "--may-sign"
}
},
"out": {
"type": "string",
"format": "path",
"description": "Write it to this file.",
"x-cli": {
"flag": "--out"
}
},
"keystore": {
"type": "string",
"format": "path",
"description": "The keystore's directory ($WAI_KEYSTORE, or ~/.config/wai/keys).",
"x-cli": {
"flag": "--keystore"
}
}
},
"required": [
"name"
],
"additionalProperties": false
},
"output": {
"type": "object",
"required": [
"name",
"id",
"format",
"text"
],
"description": "The key's public half in the format asked for (the text, and for entry the key-log entries), and the file it went to"
},
"stream": null,
"since": "0.5.0",
"deprecated": null,
"receipt": true,
"needs": {
"all": [
"quickstart"
]
},
"names": {
"cli": "wai key export",
"mcp": null,
"c": "wai_key_export",
"rust": "wai::key::export",
"sdk": "wai.key.export"
}
},
{
"id": "credential.create",
"summary": "The key a service takes, read from standard input and kept for its origin in the keychain or a file only its owner reads",
"cli": "wai auth login",
"aliases": [],
"usage": [
"wai auth login --url <URL> [--store keychain|file] [--yes] the key for the service at URL, read from standard input",
" (one line; never from the command line), kept for its origin: in the login keychain on macOS, else in a file of",
" the configuration directory that only its owner reads; WAI_TOKEN, when set, is sent ahead of every kept key.",
" A key goes over https://, or over http:// to this machine alone. Replacing an origin's key waits for --yes"
],
"placement": "local",
"effect": "writes-project",
"dry_run": true,
"confirm": "when-replacing-a-file",
"route": null,
"doors": {
"cli": true,
"mcp": false,
"http": false
},
"toolset": "core",
"stability": "preview",
"input": {
"type": "object",
"properties": {
"url": {
"type": "string",
"description": "The service's http:// or https:// address; the key is kept for its origin.",
"x-cli": {
"flag": "--url"
}
},
"store": {
"type": "string",
"description": "keychain (the default on macOS) or file (the default elsewhere).",
"x-cli": {
"flag": "--store"
}
}
},
"required": [
"url"
],
"additionalProperties": false
},
"output": {
"type": "object",
"required": [
"origin",
"store"
],
"description": "The origin a key is kept for and where it is kept (keychain or file), never the key"
},
"stream": null,
"since": "0.5.0",
"deprecated": null,
"receipt": false,
"needs": null,
"names": {
"cli": "wai credential create",
"mcp": null,
"c": "wai_credential_create",
"rust": "wai::credential::create",
"sdk": "wai.credential.create"
}
},
{
"id": "credential.list",
"summary": "The origins a key is kept for and where each is kept, never a key, and whether WAI_TOKEN is set",
"cli": "wai auth status",
"aliases": [],
"usage": [
"wai auth status each origin a key is kept for (wai auth login) and where it is kept, and whether WAI_TOKEN is set; no key is printed"
],
"placement": "local",
"effect": "reads",
"dry_run": false,
"confirm": "never",
"route": null,
"doors": {
"cli": true,
"mcp": false,
"http": false
},
"toolset": "core",
"stability": "preview",
"input": {
"type": "object",
"properties": {},
"required": [],
"additionalProperties": false
},
"output": {
"type": "object",
"required": [
"credentials",
"wai_token"
],
"description": "Each origin a key is kept for and where it is kept (keychain or file), never a key; and whether WAI_TOKEN is set, which every request sends ahead of them"
},
"stream": null,
"since": "0.5.0",
"deprecated": null,
"receipt": false,
"needs": null,
"names": {
"cli": "wai credential list",
"mcp": null,
"c": "wai_credential_list",
"rust": "wai::credential::list",
"sdk": "wai.credential.list"
}
},
{
"id": "credential.delete",
"summary": "The key kept for a service's origin removed from the keychain or its file",
"cli": "wai auth logout",
"aliases": [],
"usage": [
"wai auth logout --url <URL> [--yes] the key kept for URL's origin removed, from the keychain or its file; it waits for --yes"
],
"placement": "local",
"effect": "destructive",
"dry_run": true,
"confirm": "always",
"route": null,
"doors": {
"cli": true,
"mcp": false,
"http": false
},
"toolset": "core",
"stability": "preview",
"input": {
"type": "object",
"properties": {
"url": {
"type": "string",
"description": "The service's address; the key kept for its origin is removed.",
"x-cli": {
"flag": "--url"
}
}
},
"required": [
"url"
],
"additionalProperties": false
},
"output": {
"type": "object",
"required": [
"origin",
"store"
],
"description": "The origin a key is kept for and where it is kept (keychain or file), never the key"
},
"stream": null,
"since": "0.5.0",
"deprecated": null,
"receipt": false,
"needs": null,
"names": {
"cli": "wai credential delete",
"mcp": null,
"c": "wai_credential_delete",
"rust": "wai::credential::delete",
"sdk": "wai.credential.delete"
}
},
{
"id": "target.create",
"summary": "A target: a name for a service's address, kept in the project's wai.json or in the person's own list, and never with a key",
"cli": "wai target add",
"aliases": [],
"usage": [
"wai target add <name> --url <URL> [--read-only] [--user] [--yes] kept in ./wai.json where there is one, else (or with",
" --user) in the person's own list; --read-only refuses every operation that would change the service; a target is",
" never kept with a key (wai auth login keeps it). Replacing a target of that name waits for --yes"
],
"placement": "local",
"effect": "writes-project",
"dry_run": true,
"confirm": "when-replacing-a-file",
"route": null,
"doors": {
"cli": true,
"mcp": false,
"http": false
},
"toolset": "core",
"stability": "preview",
"input": {
"type": "object",
"properties": {
"name": {
"type": "string",
"description": "The target's name: lowercase letters, digits and hyphens, beginning with a letter (local is the development room's).",
"x-cli": {
"positional": true
}
},
"url": {
"type": "string",
"description": "The service's http:// or https:// address, with no user, query or fragment.",
"x-cli": {
"flag": "--url"
}
},
"read_only": {
"type": "boolean",
"description": "Refuse every operation that would change the service.",
"x-cli": {
"flag": "--read-only"
}
},
"user": {
"type": "boolean",
"description": "Keep it in the person's own list, not the project's wai.json.",
"x-cli": {
"flag": "--user"
}
}
},
"required": [
"name",
"url"
],
"additionalProperties": false
},
"output": {
"type": "object",
"required": [
"name",
"url",
"read_only",
"kept_in"
],
"description": "The target: its name, its service's address, whether it refuses every operation that would change the service, and the file it is kept in (the project's wai.json, or the person's own list)"
},
"stream": null,
"since": "0.5.0",
"deprecated": null,
"receipt": false,
"needs": null,
"names": {
"cli": "wai target create",
"mcp": null,
"c": "wai_target_create",
"rust": "wai::target::create",
"sdk": "wai.target.create"
}
},
{
"id": "target.update",
"summary": "The target an operation that needs a service acts on when --target names none",
"cli": "wai target use",
"aliases": [],
"usage": [
"wai target use <name> | --none the target taken where --target names none, kept in the person's own list; --none",
" takes none"
],
"placement": "local",
"effect": "writes-project",
"dry_run": true,
"confirm": "never",
"route": null,
"doors": {
"cli": true,
"mcp": false,
"http": false
},
"toolset": "core",
"stability": "preview",
"input": {
"type": "object",
"properties": {
"name": {
"type": "string",
"description": "A target's name (wai target list).",
"x-cli": {
"positional": true
}
},
"none": {
"type": "boolean",
"description": "Take no target where none is named.",
"x-cli": {
"flag": "--none"
}
}
},
"required": [],
"additionalProperties": false
},
"output": {
"type": "object",
"required": [
"use",
"targets"
],
"description": "Each target: its name, address, whether it is read-only, the file it is kept in, whether a key is kept for its origin, and whether another of that name hides it; and the target in use"
},
"stream": null,
"since": "0.5.0",
"deprecated": null,
"receipt": false,
"needs": null,
"names": {
"cli": "wai target update",
"mcp": null,
"c": "wai_target_update",
"rust": "wai::target::update",
"sdk": "wai.target.update"
}
},
{
"id": "target.list",
"summary": "Every target, its address, whether it is read-only, where it is kept and whether a key is kept for it; and the one in use",
"cli": "wai target list",
"aliases": [],
"usage": [
"wai target list the project's targets (./wai.json) and the person's own, and the one in use"
],
"placement": "local",
"effect": "reads",
"dry_run": false,
"confirm": "never",
"route": null,
"doors": {
"cli": true,
"mcp": false,
"http": false
},
"toolset": "core",
"stability": "preview",
"input": {
"type": "object",
"properties": {},
"required": [],
"additionalProperties": false
},
"output": {
"type": "object",
"required": [
"use",
"targets"
],
"description": "Each target: its name, address, whether it is read-only, the file it is kept in, whether a key is kept for its origin, and whether another of that name hides it; and the target in use"
},
"stream": null,
"since": "0.5.0",
"deprecated": null,
"receipt": false,
"needs": null,
"names": {
"cli": "wai target list",
"mcp": null,
"c": "wai_target_list",
"rust": "wai::target::list",
"sdk": "wai.target.list"
}
},
{
"id": "target.delete",
"summary": "A target removed from the project's wai.json or the person's own list",
"cli": "wai target remove",
"aliases": [],
"usage": [
"wai target remove <name> [--user] [--yes] from ./wai.json where it is kept there, else (or with --user) from the",
" person's own list; it waits for --yes"
],
"placement": "local",
"effect": "destructive",
"dry_run": true,
"confirm": "always",
"route": null,
"doors": {
"cli": true,
"mcp": false,
"http": false
},
"toolset": "core",
"stability": "preview",
"input": {
"type": "object",
"properties": {
"name": {
"type": "string",
"description": "The target's name.",
"x-cli": {
"positional": true
}
},
"user": {
"type": "boolean",
"description": "Remove it from the person's own list.",
"x-cli": {
"flag": "--user"
}
}
},
"required": [
"name"
],
"additionalProperties": false
},
"output": {
"type": "object",
"required": [
"name",
"url",
"read_only",
"kept_in"
],
"description": "The target: its name, its service's address, whether it refuses every operation that would change the service, and the file it is kept in (the project's wai.json, or the person's own list)"
},
"stream": null,
"since": "0.5.0",
"deprecated": null,
"receipt": false,
"needs": null,
"names": {
"cli": "wai target delete",
"mcp": null,
"c": "wai_target_delete",
"rust": "wai::target::delete",
"sdk": "wai.target.delete"
}
},
{
"id": "ops.list",
"summary": "Every operation of this catalogue: its id, command line, effect and whether this build holds it",
"cli": "wai ops list",
"aliases": [],
"usage": [
"wai ops list every operation, its id and command line"
],
"placement": "local",
"effect": "reads",
"dry_run": false,
"confirm": "never",
"route": null,
"doors": {
"cli": true,
"mcp": false,
"http": false
},
"toolset": "core",
"stability": "stable",
"input": {
"type": "object",
"properties": {},
"required": [],
"additionalProperties": false
},
"output": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"summary",
"cli",
"effect",
"placement",
"toolset",
"stability",
"available"
]
}
},
"stream": null,
"since": "0.3.0",
"deprecated": null,
"receipt": false,
"needs": null,
"names": {
"cli": "wai ops list",
"mcp": null,
"c": "wai_ops_list",
"rust": "wai::ops::list",
"sdk": "wai.ops.list"
}
},
{
"id": "ops.search",
"summary": "The operations that match a task, ranked, offline: up to five",
"cli": "wai ops search",
"aliases": [],
"usage": [
"wai ops search \"<task>\" up to five operations that match, ranked, offline"
],
"placement": "local",
"effect": "reads",
"dry_run": false,
"confirm": "never",
"route": null,
"doors": {
"cli": true,
"mcp": true,
"http": false
},
"toolset": "core",
"stability": "stable",
"input": {
"type": "object",
"properties": {
"task": {
"type": "string",
"description": "What you want to do, in words.",
"x-cli": {
"positional": true
}
}
},
"required": [
"task"
],
"additionalProperties": false
},
"output": {
"type": "array",
"maxItems": 5,
"items": {
"type": "object",
"required": [
"id",
"summary",
"cli",
"score"
],
"properties": {
"id": {
"type": "string"
},
"summary": {
"type": "string"
},
"cli": {
"type": [
"string",
"null"
]
},
"score": {
"type": "integer"
}
}
}
},
"stream": null,
"since": "0.3.0",
"deprecated": null,
"receipt": false,
"needs": null,
"names": {
"cli": "wai ops search",
"mcp": "ops_search",
"c": "wai_ops_search",
"rust": "wai::ops::search",
"sdk": "wai.ops.search"
}
},
{
"id": "ops.show",
"summary": "One operation's entry: its input and output schemas, effect, placement and command line",
"cli": "wai ops show",
"aliases": [
"wai ops schema"
],
"usage": [
"wai ops show <id> one operation's entry, as JSON (also wai ops schema)"
],
"placement": "local",
"effect": "reads",
"dry_run": false,
"confirm": "never",
"route": null,
"doors": {
"cli": true,
"mcp": true,
"http": false
},
"toolset": "core",
"stability": "stable",
"input": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "An operation id, noun.verb.",
"x-cli": {
"positional": true
}
}
},
"required": [
"id"
],
"additionalProperties": false
},
"output": {
"type": "object",
"required": [
"id",
"summary",
"input",
"output",
"effect",
"placement"
]
},
"stream": null,
"since": "0.3.0",
"deprecated": null,
"receipt": false,
"needs": null,
"names": {
"cli": "wai ops show",
"mcp": "ops_show",
"c": "wai_ops_show",
"rust": "wai::ops::show",
"sdk": "wai.ops.show"
}
},
{
"id": "ops.export",
"summary": "The catalogue as JSON (wai.ops/1), what other tools and CI read; --check compares a file with it",
"cli": "wai ops export",
"aliases": [],
"usage": [
"wai ops export [--out FILE | --check FILE] the catalogue as JSON, to stdout, to FILE, or compared with FILE"
],
"placement": "local",
"effect": "writes-project",
"dry_run": true,
"confirm": "when-replacing-an-unnamed-file",
"route": null,
"doors": {
"cli": true,
"mcp": false,
"http": false
},
"toolset": "core",
"stability": "stable",
"input": {
"type": "object",
"properties": {
"out": {
"type": "string",
"format": "path",
"description": "Write the export here.",
"x-cli": {
"flag": "--out"
}
},
"check": {
"type": "string",
"format": "path",
"description": "Compare this file with the export; exit 1 when they differ.",
"x-cli": {
"flag": "--check"
}
}
},
"required": [],
"additionalProperties": false
},
"output": {
"type": "object",
"required": [
"format",
"toolchain",
"envelope",
"operations"
],
"properties": {
"format": {
"const": "wai.ops/1"
}
}
},
"stream": null,
"since": "0.3.0",
"deprecated": null,
"receipt": false,
"needs": null,
"names": {
"cli": "wai ops export",
"mcp": null,
"c": "wai_ops_export",
"rust": "wai::ops::export",
"sdk": "wai.ops.export"
}
},
{
"id": "toolchain.show",
"summary": "This wai's version, the digests of its catalogue and its registry, the release of the standard it implements, and the build features it holds",
"cli": "wai --version",
"aliases": [
"wai version"
],
"usage": [
"wai --version [--json] this binary's version, the SHA-256 of its catalogue (wai/catalogue/ops.json) and of its",
" registry (wai/registry/capabilities.json), the release of the standard it implements with the envelope formats",
" it reads, and the build features it holds (also wai version; wai/VERSIONING.md says what each promises)"
],
"placement": "local",
"effect": "reads",
"dry_run": false,
"confirm": "never",
"route": null,
"doors": {
"cli": true,
"mcp": false,
"http": false
},
"toolset": "core",
"stability": "preview",
"input": {
"type": "object",
"properties": {},
"required": [],
"additionalProperties": false
},
"output": {
"type": "object",
"required": [
"toolchain",
"catalogue",
"envelope",
"registry",
"specification",
"features"
],
"description": "This binary's version, its catalogue's format, operations and SHA-256, the JSON envelope's version, its registry's capabilities and SHA-256, the release of the standard it implements with the envelope formats it reads, and the build features it holds"
},
"stream": null,
"since": "0.5.0",
"deprecated": null,
"receipt": false,
"needs": null,
"names": {
"cli": "wai toolchain show",
"mcp": null,
"c": "wai_toolchain_show",
"rust": "wai::toolchain::show",
"sdk": "wai.toolchain.show"
}
},
{
"id": "toolchain.doctor",
"summary": "Whether this machine can run the toolchain: this wai and PATH, the relay and room service, the local stack's ports, browsers, and where keys are kept",
"cli": "wai doctor",
"aliases": [],
"usage": [
"wai doctor [--keystore DIR] [--json] one check to a line: pass, FAIL with its fix, or not checked with the reason. Exit 1 when",
" one failed; result says passed, failed, or passed-with-not-checked. No secret is read and no prompt raised (wai/quickstart/README.md)"
],
"placement": "local",
"effect": "reads",
"dry_run": false,
"confirm": "never",
"route": null,
"doors": {
"cli": true,
"mcp": true,
"http": false
},
"toolset": "core",
"stability": "preview",
"input": {
"type": "object",
"properties": {
"keystore": {
"type": "string",
"format": "path",
"description": "The keystore to look at (default: where wai key keeps keys).",
"x-cli": {
"flag": "--keystore"
}
}
},
"required": [],
"additionalProperties": false
},
"output": {
"type": "object",
"required": [
"result",
"counts",
"checks"
],
"description": "The result (passed, failed, or passed-with-not-checked), how many checks are in each state, and each check: its id, its state (pass, fail, not-checked, or not-applicable), what it found or why it could not be run, the fix when it failed, and what it found as data",
"properties": {
"result": {
"enum": [
"passed",
"failed",
"passed-with-not-checked"
]
},
"counts": {
"type": "object",
"required": [
"pass",
"fail",
"not_checked",
"not_applicable"
]
},
"checks": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"state",
"message",
"fix",
"facts"
],
"properties": {
"state": {
"enum": [
"pass",
"fail",
"not-checked",
"not-applicable"
]
}
}
}
}
}
},
"stream": null,
"since": "0.5.0",
"deprecated": null,
"receipt": false,
"needs": null,
"names": {
"cli": "wai toolchain doctor",
"mcp": "toolchain_doctor",
"c": "wai_toolchain_doctor",
"rust": "wai::toolchain::doctor",
"sdk": "wai.toolchain.doctor"
}
}
]
}