open-standards/wai/catalogue/ops.json
Transaction Science d15b4a7a3e wai: the opportunity report's operations, registry entry, SPEC paragraph and CI
opportunity.create (wai opportunity create), opportunity.verify (wai
opportunity verify, a report's or a check's document) and statement.check (wai
statement check), under the agent rules, in a build with opportunity_report;
tests/cli_ops.rs holds --dry-run on the two that write. The catalogue export,
Studio's generated actions and the registry export are regenerated. REGISTRY.md
registers wai.delivery.opportunity and the magics WOR1 and WCK1; SPEC.md §5 and
CHANGELOG.md describe it. The conformance workflow runs the module's tests,
tests/opportunity_report.rs and opportunity_report_verify.py; the catalogue
workflow runs cli_ops with the feature.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-29 18:31:56 -04:00

6981 lines
176 KiB
JSON

{
"format": "wai.ops/1",
"toolchain": "0.4.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": []
}
],
"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> | create --list a new project from one of the examples"
],
"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"
}
}
},
"required": [],
"additionalProperties": false
},
"output": {
"type": "array",
"items": {
"type": "object",
"required": [
"template",
"title",
"files"
]
}
},
"stream": null,
"since": "0.3.0",
"deprecated": null,
"receipt": false,
"needs": null,
"names": {
"cli": "wai project create",
"mcp": null,
"c": "wai_project_create",
"rust": "wai::project::create",
"sdk": "wai.project.create"
}
},
{
"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]",
" --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)",
" 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"
}
}
},
"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 receipt index (*.wai.receipts) under each path, its group receipts and claims checked offline, and every conformance result and fleet report bundle there",
"cli": "wai verify",
"aliases": [],
"usage": [
"wai verify <path>... the receipts (receipt indexes *.wai.receipts), conformance results (*.wai-conform.json)",
" and fleet report bundles (*.wai-fleet.json) under each path, checked 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": {
"paths": {
"type": "array",
"items": {
"type": "string"
},
"description": "Files or directories holding receipt indexes, conformance results or fleet report bundles.",
"x-cli": {
"positional": true
}
}
},
"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": "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>]... WAI2: companions bound to the payload"
],
"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"
}
}
},
"required": [
"capability",
"payload"
],
"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 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>] extract any registered capability's bytes"
],
"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"
}
}
},
"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 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 <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> a build with `floor` decodes png, flac and zstd; `codecs` the rest"
],
"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"
}
}
},
"required": [
"path",
"out"
],
"additionalProperties": false
},
"output": {
"type": "object",
"properties": {
"text": {
"type": "string"
}
},
"required": [
"text"
]
},
"stream": null,
"since": "0.3.0",
"deprecated": null,
"receipt": false,
"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>",
" make a wai.generate.spectral picture (RGB8) and print its SHA-256; --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"
}
}
},
"required": [
"model"
],
"additionalProperties": false
},
"output": {
"type": "object",
"description": "The picture's or instruction object's digests, as `wai generate --json` prints them"
},
"stream": null,
"since": "0.3.0",
"deprecated": null,
"receipt": false,
"needs": {
"all": [
"generate"
]
},
"names": {
"cli": "wai media generate",
"mcp": null,
"c": "wai_media_generate",
"rust": "wai::media::generate",
"sdk": "wai.media.generate"
}
},
{
"id": "score.build",
"summary": "A WSCR score from integer note fields",
"cli": "wai score build",
"aliases": [],
"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": [],
"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": "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": "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>]... --target <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"
}
},
"target": {
"type": "string",
"format": "path",
"description": "The target samples.",
"x-cli": {
"flag": "--target"
}
},
"q": {
"type": "integer",
"description": "The quantiser.",
"x-cli": {
"flag": "--q"
}
},
"out": {
"type": "string",
"format": "path",
"description": "The layer.",
"x-cli": {
"flag": "-o"
}
}
},
"required": [
"base",
"target",
"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 <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",
"format": "path",
"description": "The signing seed.",
"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": "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",
"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"
],
"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.",
"x-cli": {
"flag": "--against"
}
},
"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": [
"against"
],
"additionalProperties": false
},
"output": {
"type": "object",
"required": [
"against",
"findings"
],
"description": "Each finding's id, category, what changed and whether the CHANGELOG acknowledges it"
},
"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, its result a signed record wai verify checks",
"cli": "wai conform",
"aliases": [],
"usage": [
"wai conform <kind> --suite <suite> --impl <command or URL> [--key <file>] [--out <file>] [--root <wai-dir>]",
" [--timeout <seconds>] [--name <text>] [--version <text>] [--all] [--yes] `wai conformance list` names",
" the kinds and suites; 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 packager.",
"x-cli": {
"positional": true
}
},
"suite": {
"type": "string",
"description": "The suite (wai conformance list).",
"x-cli": {
"flag": "--suite"
}
},
"impl": {
"type": "string",
"description": "The implementation: a command with {in}/{out}/{corpus} placeholders, or a URL.",
"x-cli": {
"flag": "--impl"
}
},
"key": {
"type": "string",
"format": "path",
"description": "The seed the record is signed with.",
"x-cli": {
"flag": "--key"
}
},
"out": {
"type": "string",
"format": "path",
"description": "The record (<suite>.wai-conform.json).",
"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.",
"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"
}
},
"all": {
"type": "boolean",
"description": "List every case, passed ones too.",
"x-cli": {
"flag": "--all"
}
}
},
"required": [
"kind",
"impl"
],
"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",
"cli": "wai conformance list",
"aliases": [],
"usage": [
"wai conformance list [--root <wai-dir>] (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": "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 <file> [--label L] [--from µs] [--until µs] [--out F]",
" [--target 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 there; 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",
"format": "path",
"description": "The organisation key's 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": "A fleet service's http:// address, given the enrolment.",
"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 URL the nodes the fleet service at URL holds enrolled"
],
"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 fleet service's http:// address.",
"x-cli": {
"flag": "--target"
}
}
},
"required": [
"target"
],
"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 URL --start µs --end µs [--yes] the fleet report of [start, end), signed by the",
" fleet service at URL; 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 fleet service's http:// 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": [
"target",
"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 URL [--out F] [--yes] the report's bundle from the fleet service at URL,",
" 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 fleet service's http:// 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",
"target"
],
"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": "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] [--read-only] [--project DIR] [--spec-root DIR] [--room-bin BIN]",
" serves until standard input closes; --dry-run names the tools it would serve and serves nothing"
],
"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": {
"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 room runs.",
"x-cli": {
"flag": "--room-bin"
}
}
},
"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": null,
"aliases": [],
"usage": [
"wai (wai mcp: registry_show)"
],
"placement": "local",
"effect": "reads",
"dry_run": false,
"confirm": null,
"route": null,
"doors": {
"cli": false,
"mcp": true,
"http": false
},
"toolset": "core",
"stability": "stable",
"input": {
"type": "object",
"properties": {
"capability": {
"type": "string",
"description": "A capability string, e.g. wai.image.avif."
}
},
"required": [
"capability"
],
"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": "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": null,
"aliases": [],
"usage": [
"wai (wai mcp: docs_search)"
],
"placement": "local",
"effect": "reads",
"dry_run": false,
"confirm": null,
"route": null,
"doors": {
"cli": false,
"mcp": true,
"http": false
},
"toolset": "core",
"stability": "stable",
"input": {
"type": "object",
"properties": {
"query": {
"type": "string",
"description": "Words that must all appear on a line."
},
"limit": {
"type": "integer",
"description": "At most this many hits (20)."
}
},
"required": [
"query"
],
"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": "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": null,
"aliases": [],
"usage": [
"wai (wai mcp: room_join)"
],
"placement": "client",
"effect": "writes-target",
"dry_run": false,
"confirm": null,
"route": null,
"doors": {
"cli": false,
"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 granted the publisher role."
},
"objects": {
"type": "integer",
"description": "Objects on each track (1)."
}
},
"required": [
"principal"
],
"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": "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": null,
"aliases": [],
"usage": [
"wai (wai mcp: room_leave)"
],
"placement": "client",
"effect": "writes-target",
"dry_run": false,
"confirm": null,
"route": null,
"doors": {
"cli": false,
"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."
}
},
"required": [
"principal"
],
"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": "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": null,
"aliases": [],
"usage": [
"wai (wai mcp: session_show)"
],
"placement": "client",
"effect": "reads",
"dry_run": false,
"confirm": null,
"route": null,
"doors": {
"cli": false,
"mcp": true,
"http": false
},
"toolset": "dev",
"stability": "stable",
"input": {
"type": "object",
"properties": {
"target": {
"type": "string",
"description": "local: the development room on this machine."
}
},
"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": "session_show",
"c": "wai_session_show",
"rust": "wai::session::show",
"sdk": "wai.session.show"
}
},
{
"id": "service.show",
"summary": "The service's health",
"cli": null,
"aliases": [],
"usage": [
"wai GET / (the room service)"
],
"placement": "service",
"effect": "reads",
"dry_run": false,
"confirm": null,
"route": {
"service": "wai-room",
"method": "GET",
"path": "/"
},
"doors": {
"cli": false,
"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",
"properties": {
"text": {
"type": "string"
}
},
"required": [
"text"
]
},
"stream": null,
"since": "0.3.0",
"deprecated": null,
"receipt": false,
"needs": null,
"names": {
"cli": null,
"mcp": null,
"c": "wai_service_show",
"rust": "wai::service::show",
"sdk": "wai.service.show"
}
},
{
"id": "service.check",
"summary": "The service's health",
"cli": null,
"aliases": [],
"usage": [
"wai GET /health (the room service)"
],
"placement": "service",
"effect": "reads",
"dry_run": false,
"confirm": null,
"route": {
"service": "wai-room",
"method": "GET",
"path": "/health"
},
"doors": {
"cli": false,
"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",
"properties": {
"text": {
"type": "string"
}
},
"required": [
"text"
]
},
"stream": null,
"since": "0.3.0",
"deprecated": null,
"receipt": false,
"needs": null,
"names": {
"cli": null,
"mcp": null,
"c": "wai_service_check",
"rust": "wai::service::check",
"sdk": "wai.service.check"
}
},
{
"id": "room.show",
"summary": "The current room",
"cli": null,
"aliases": [],
"usage": [
"wai GET /room (the room service)"
],
"placement": "service",
"effect": "reads",
"dry_run": false,
"confirm": null,
"route": {
"service": "wai-room",
"method": "GET",
"path": "/room"
},
"doors": {
"cli": false,
"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",
"properties": {
"text": {
"type": "string"
}
},
"required": [
"text"
]
},
"stream": null,
"since": "0.3.0",
"deprecated": null,
"receipt": false,
"needs": null,
"names": {
"cli": null,
"mcp": null,
"c": "wai_room_show",
"rust": "wai::room::show",
"sdk": "wai.room.show"
}
},
{
"id": "room.grant",
"summary": "A grant for a key",
"cli": null,
"aliases": [],
"usage": [
"wai POST /grant (the room service)"
],
"placement": "service",
"effect": "writes-target",
"dry_run": false,
"confirm": null,
"route": {
"service": "wai-room",
"method": "POST",
"path": "/grant"
},
"doors": {
"cli": false,
"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",
"properties": {
"text": {
"type": "string"
}
},
"required": [
"text"
]
},
"stream": null,
"since": "0.3.0",
"deprecated": null,
"receipt": false,
"needs": null,
"names": {
"cli": null,
"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": null,
"aliases": [],
"usage": [
"wai GET /age/receipt (the room service)"
],
"placement": "service",
"effect": "reads",
"dry_run": false,
"confirm": null,
"route": {
"service": "wai-room",
"method": "GET",
"path": "/age/receipt"
},
"doors": {
"cli": false,
"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",
"properties": {
"text": {
"type": "string"
}
},
"required": [
"text"
]
},
"stream": null,
"since": "0.3.0",
"deprecated": null,
"receipt": false,
"needs": null,
"names": {
"cli": null,
"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": null,
"aliases": [],
"usage": [
"wai GET /mls (the room service)"
],
"placement": "service",
"effect": "reads",
"dry_run": false,
"confirm": null,
"route": {
"service": "wai-room",
"method": "GET",
"path": "/mls"
},
"doors": {
"cli": false,
"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",
"properties": {
"text": {
"type": "string"
}
},
"required": [
"text"
]
},
"stream": null,
"since": "0.3.0",
"deprecated": null,
"receipt": false,
"needs": null,
"names": {
"cli": null,
"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": null,
"aliases": [],
"usage": [
"wai POST /mls/key-package (the room service)"
],
"placement": "service",
"effect": "writes-target",
"dry_run": false,
"confirm": null,
"route": {
"service": "wai-room",
"method": "POST",
"path": "/mls/key-package"
},
"doors": {
"cli": false,
"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",
"properties": {
"text": {
"type": "string"
}
},
"required": [
"text"
]
},
"stream": null,
"since": "0.3.0",
"deprecated": null,
"receipt": false,
"needs": null,
"names": {
"cli": null,
"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": null,
"aliases": [],
"usage": [
"wai POST /mls/post (the room service)"
],
"placement": "service",
"effect": "writes-target",
"dry_run": false,
"confirm": null,
"route": {
"service": "wai-room",
"method": "POST",
"path": "/mls/post"
},
"doors": {
"cli": false,
"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",
"properties": {
"text": {
"type": "string"
}
},
"required": [
"text"
]
},
"stream": null,
"since": "0.3.0",
"deprecated": null,
"receipt": false,
"needs": null,
"names": {
"cli": null,
"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": null,
"aliases": [],
"usage": [
"wai GET /co/objects (the room service)"
],
"placement": "service",
"effect": "reads",
"dry_run": false,
"confirm": null,
"route": {
"service": "wai-room",
"method": "GET",
"path": "/co/objects"
},
"doors": {
"cli": false,
"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",
"properties": {
"text": {
"type": "string"
}
},
"required": [
"text"
]
},
"stream": null,
"since": "0.3.0",
"deprecated": null,
"receipt": false,
"needs": null,
"names": {
"cli": null,
"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": null,
"aliases": [],
"usage": [
"wai GET /co/state (the room service)"
],
"placement": "service",
"effect": "reads",
"dry_run": false,
"confirm": null,
"route": {
"service": "wai-room",
"method": "GET",
"path": "/co/state"
},
"doors": {
"cli": false,
"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",
"properties": {
"text": {
"type": "string"
}
},
"required": [
"text"
]
},
"stream": null,
"since": "0.3.0",
"deprecated": null,
"receipt": false,
"needs": null,
"names": {
"cli": null,
"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": null,
"aliases": [],
"usage": [
"wai POST /co/schedule (the room service)"
],
"placement": "service",
"effect": "writes-target",
"dry_run": false,
"confirm": null,
"route": {
"service": "wai-room",
"method": "POST",
"path": "/co/schedule"
},
"doors": {
"cli": false,
"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",
"properties": {
"text": {
"type": "string"
}
},
"required": [
"text"
]
},
"stream": null,
"since": "0.3.0",
"deprecated": null,
"receipt": false,
"needs": null,
"names": {
"cli": null,
"mcp": null,
"c": "wai_schedule_create",
"rust": "wai::schedule::create",
"sdk": "wai.schedule.create"
}
},
{
"id": "handover.create",
"summary": "A handover the clock signs",
"cli": null,
"aliases": [],
"usage": [
"wai POST /co/handover (the room service)"
],
"placement": "service",
"effect": "writes-target",
"dry_run": false,
"confirm": null,
"route": {
"service": "wai-room",
"method": "POST",
"path": "/co/handover"
},
"doors": {
"cli": false,
"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",
"properties": {
"text": {
"type": "string"
}
},
"required": [
"text"
]
},
"stream": null,
"since": "0.3.0",
"deprecated": null,
"receipt": false,
"needs": null,
"names": {
"cli": null,
"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": null,
"aliases": [],
"usage": [
"wai POST /co/window (the room service)"
],
"placement": "service",
"effect": "writes-target",
"dry_run": false,
"confirm": null,
"route": {
"service": "wai-room",
"method": "POST",
"path": "/co/window"
},
"doors": {
"cli": false,
"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",
"properties": {
"text": {
"type": "string"
}
},
"required": [
"text"
]
},
"stream": null,
"since": "0.3.0",
"deprecated": null,
"receipt": false,
"needs": null,
"names": {
"cli": null,
"mcp": null,
"c": "wai_window_create",
"rust": "wai::window::create",
"sdk": "wai.window.create"
}
},
{
"id": "fidelity.create",
"summary": "A fidelity statement now",
"cli": null,
"aliases": [],
"usage": [
"wai POST /co/fidelity (the room service)"
],
"placement": "service",
"effect": "writes-target",
"dry_run": false,
"confirm": null,
"route": {
"service": "wai-room",
"method": "POST",
"path": "/co/fidelity"
},
"doors": {
"cli": false,
"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",
"properties": {
"text": {
"type": "string"
}
},
"required": [
"text"
]
},
"stream": null,
"since": "0.3.0",
"deprecated": null,
"receipt": false,
"needs": null,
"names": {
"cli": null,
"mcp": null,
"c": "wai_fidelity_create",
"rust": "wai::fidelity::create",
"sdk": "wai.fidelity.create"
}
},
{
"id": "time.show",
"summary": "The service's clock",
"cli": null,
"aliases": [],
"usage": [
"wai GET /watch/time (the room service)"
],
"placement": "service",
"effect": "reads",
"dry_run": false,
"confirm": null,
"route": {
"service": "wai-room",
"method": "GET",
"path": "/watch/time"
},
"doors": {
"cli": false,
"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",
"properties": {
"text": {
"type": "string"
}
},
"required": [
"text"
]
},
"stream": null,
"since": "0.3.0",
"deprecated": null,
"receipt": false,
"needs": null,
"names": {
"cli": null,
"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": null,
"aliases": [],
"usage": [
"wai GET /watch/source (the room service)"
],
"placement": "service",
"effect": "reads",
"dry_run": false,
"confirm": null,
"route": {
"service": "wai-room",
"method": "GET",
"path": "/watch/source"
},
"doors": {
"cli": false,
"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",
"properties": {
"text": {
"type": "string"
}
},
"required": [
"text"
]
},
"stream": null,
"since": "0.3.0",
"deprecated": null,
"receipt": false,
"needs": null,
"names": {
"cli": null,
"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": null,
"aliases": [],
"usage": [
"wai GET /watch/challenge (the room service)"
],
"placement": "service",
"effect": "writes-target",
"dry_run": false,
"confirm": null,
"route": {
"service": "wai-room",
"method": "GET",
"path": "/watch/challenge"
},
"doors": {
"cli": false,
"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",
"properties": {
"text": {
"type": "string"
}
},
"required": [
"text"
]
},
"stream": null,
"since": "0.3.0",
"deprecated": null,
"receipt": false,
"needs": null,
"names": {
"cli": null,
"mcp": null,
"c": "wai_watch_setup",
"rust": "wai::watch::setup",
"sdk": "wai.watch.setup"
}
},
{
"id": "watch.tail",
"summary": "The watch room's log",
"cli": null,
"aliases": [],
"usage": [
"wai GET /watch (the room service)"
],
"placement": "service",
"effect": "reads",
"dry_run": false,
"confirm": null,
"route": {
"service": "wai-room",
"method": "GET",
"path": "/watch"
},
"doors": {
"cli": false,
"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",
"properties": {
"text": {
"type": "string"
}
},
"required": [
"text"
]
},
"stream": null,
"since": "0.3.0",
"deprecated": null,
"receipt": false,
"needs": null,
"names": {
"cli": null,
"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": null,
"aliases": [],
"usage": [
"wai GET /watch/room (the room service)"
],
"placement": "service",
"effect": "reads",
"dry_run": false,
"confirm": null,
"route": {
"service": "wai-room",
"method": "GET",
"path": "/watch/room"
},
"doors": {
"cli": false,
"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",
"properties": {
"text": {
"type": "string"
}
},
"required": [
"text"
]
},
"stream": null,
"since": "0.3.0",
"deprecated": null,
"receipt": false,
"needs": null,
"names": {
"cli": null,
"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": null,
"aliases": [],
"usage": [
"wai POST /watch/join (the room service)"
],
"placement": "service",
"effect": "writes-target",
"dry_run": false,
"confirm": null,
"route": {
"service": "wai-room",
"method": "POST",
"path": "/watch/join"
},
"doors": {
"cli": false,
"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",
"properties": {
"text": {
"type": "string"
}
},
"required": [
"text"
]
},
"stream": null,
"since": "0.3.0",
"deprecated": null,
"receipt": false,
"needs": null,
"names": {
"cli": null,
"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": null,
"aliases": [],
"usage": [
"wai POST /watch/post (the room service)"
],
"placement": "service",
"effect": "writes-target",
"dry_run": false,
"confirm": null,
"route": {
"service": "wai-room",
"method": "POST",
"path": "/watch/post"
},
"doors": {
"cli": false,
"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",
"properties": {
"text": {
"type": "string"
}
},
"required": [
"text"
]
},
"stream": null,
"since": "0.3.0",
"deprecated": null,
"receipt": false,
"needs": null,
"names": {
"cli": null,
"mcp": null,
"c": "wai_watch_update",
"rust": "wai::watch::update",
"sdk": "wai.watch.update"
}
},
{
"id": "control.grant",
"summary": "The host hands control over",
"cli": null,
"aliases": [],
"usage": [
"wai POST /remote/control (the room service)"
],
"placement": "service",
"effect": "writes-target",
"dry_run": false,
"confirm": null,
"route": {
"service": "wai-room",
"method": "POST",
"path": "/remote/control"
},
"doors": {
"cli": false,
"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",
"properties": {
"text": {
"type": "string"
}
},
"required": [
"text"
]
},
"stream": null,
"since": "0.3.0",
"deprecated": null,
"receipt": false,
"needs": null,
"names": {
"cli": null,
"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": null,
"aliases": [],
"usage": [
"wai GET /remote/room (the room service)"
],
"placement": "service",
"effect": "reads",
"dry_run": false,
"confirm": null,
"route": {
"service": "wai-room",
"method": "GET",
"path": "/remote/room"
},
"doors": {
"cli": false,
"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",
"properties": {
"text": {
"type": "string"
}
},
"required": [
"text"
]
},
"stream": null,
"since": "0.3.0",
"deprecated": null,
"receipt": false,
"needs": null,
"names": {
"cli": null,
"mcp": null,
"c": "wai_remote_show",
"rust": "wai::remote::show",
"sdk": "wai.remote.show"
}
},
{
"id": "remote.verify",
"summary": "That session verified",
"cli": null,
"aliases": [],
"usage": [
"wai GET /remote/state (the room service)"
],
"placement": "service",
"effect": "reads",
"dry_run": false,
"confirm": null,
"route": {
"service": "wai-room",
"method": "GET",
"path": "/remote/state"
},
"doors": {
"cli": false,
"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",
"properties": {
"text": {
"type": "string"
}
},
"required": [
"text"
]
},
"stream": null,
"since": "0.3.0",
"deprecated": null,
"receipt": false,
"needs": null,
"names": {
"cli": null,
"mcp": null,
"c": "wai_remote_verify",
"rust": "wai::remote::verify",
"sdk": "wai.remote.verify"
}
},
{
"id": "conversation.show",
"summary": "The conversation",
"cli": null,
"aliases": [],
"usage": [
"wai GET /msg (the room service)"
],
"placement": "service",
"effect": "reads",
"dry_run": false,
"confirm": null,
"route": {
"service": "wai-room",
"method": "GET",
"path": "/msg"
},
"doors": {
"cli": false,
"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",
"properties": {
"text": {
"type": "string"
}
},
"required": [
"text"
]
},
"stream": null,
"since": "0.3.0",
"deprecated": null,
"receipt": false,
"needs": null,
"names": {
"cli": null,
"mcp": null,
"c": "wai_conversation_show",
"rust": "wai::conversation::show",
"sdk": "wai.conversation.show"
}
},
{
"id": "conversation.setup",
"summary": "A challenge for a proof",
"cli": null,
"aliases": [],
"usage": [
"wai GET /msg/challenge (the room service)"
],
"placement": "service",
"effect": "writes-target",
"dry_run": false,
"confirm": null,
"route": {
"service": "wai-room",
"method": "GET",
"path": "/msg/challenge"
},
"doors": {
"cli": false,
"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",
"properties": {
"text": {
"type": "string"
}
},
"required": [
"text"
]
},
"stream": null,
"since": "0.3.0",
"deprecated": null,
"receipt": false,
"needs": null,
"names": {
"cli": null,
"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": null,
"aliases": [],
"usage": [
"wai POST /msg/join (the room service)"
],
"placement": "service",
"effect": "writes-target",
"dry_run": false,
"confirm": null,
"route": {
"service": "wai-room",
"method": "POST",
"path": "/msg/join"
},
"doors": {
"cli": false,
"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",
"properties": {
"text": {
"type": "string"
}
},
"required": [
"text"
]
},
"stream": null,
"since": "0.3.0",
"deprecated": null,
"receipt": false,
"needs": null,
"names": {
"cli": null,
"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": null,
"aliases": [],
"usage": [
"wai GET /msg/log (the room service)"
],
"placement": "service",
"effect": "reads",
"dry_run": false,
"confirm": null,
"route": {
"service": "wai-room",
"method": "GET",
"path": "/msg/log"
},
"doors": {
"cli": false,
"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",
"properties": {
"text": {
"type": "string"
}
},
"required": [
"text"
]
},
"stream": null,
"since": "0.3.0",
"deprecated": null,
"receipt": false,
"needs": null,
"names": {
"cli": null,
"mcp": null,
"c": "wai_conversation_tail",
"rust": "wai::conversation::tail",
"sdk": "wai.conversation.tail"
}
},
{
"id": "conversation.import",
"summary": "A member's KeyPackage",
"cli": null,
"aliases": [],
"usage": [
"wai POST /msg/key-package (the room service)"
],
"placement": "service",
"effect": "writes-target",
"dry_run": false,
"confirm": null,
"route": {
"service": "wai-room",
"method": "POST",
"path": "/msg/key-package"
},
"doors": {
"cli": false,
"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",
"properties": {
"text": {
"type": "string"
}
},
"required": [
"text"
]
},
"stream": null,
"since": "0.3.0",
"deprecated": null,
"receipt": false,
"needs": null,
"names": {
"cli": null,
"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": null,
"aliases": [],
"usage": [
"wai POST /msg/mls (the room service)"
],
"placement": "service",
"effect": "writes-target",
"dry_run": false,
"confirm": null,
"route": {
"service": "wai-room",
"method": "POST",
"path": "/msg/mls"
},
"doors": {
"cli": false,
"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",
"properties": {
"text": {
"type": "string"
}
},
"required": [
"text"
]
},
"stream": null,
"since": "0.3.0",
"deprecated": null,
"receipt": false,
"needs": null,
"names": {
"cli": null,
"mcp": null,
"c": "wai_conversation_update",
"rust": "wai::conversation::update",
"sdk": "wai.conversation.update"
}
},
{
"id": "message.create",
"summary": "A message",
"cli": null,
"aliases": [],
"usage": [
"wai POST /msg/post (the room service)"
],
"placement": "service",
"effect": "writes-target",
"dry_run": false,
"confirm": null,
"route": {
"service": "wai-room",
"method": "POST",
"path": "/msg/post"
},
"doors": {
"cli": false,
"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",
"properties": {
"text": {
"type": "string"
}
},
"required": [
"text"
]
},
"stream": null,
"since": "0.3.0",
"deprecated": null,
"receipt": false,
"needs": null,
"names": {
"cli": null,
"mcp": null,
"c": "wai_message_create",
"rust": "wai::message::create",
"sdk": "wai.message.create"
}
},
{
"id": "acknowledgement.create",
"summary": "An acknowledgement",
"cli": null,
"aliases": [],
"usage": [
"wai POST /msg/ack (the room service)"
],
"placement": "service",
"effect": "writes-target",
"dry_run": false,
"confirm": null,
"route": {
"service": "wai-room",
"method": "POST",
"path": "/msg/ack"
},
"doors": {
"cli": false,
"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",
"properties": {
"text": {
"type": "string"
}
},
"required": [
"text"
]
},
"stream": null,
"since": "0.3.0",
"deprecated": null,
"receipt": false,
"needs": null,
"names": {
"cli": null,
"mcp": null,
"c": "wai_acknowledgement_create",
"rust": "wai::acknowledgement::create",
"sdk": "wai.acknowledgement.create"
}
},
{
"id": "conversation.leave",
"summary": "The caller leaves",
"cli": null,
"aliases": [],
"usage": [
"wai POST /msg/leave (the room service)"
],
"placement": "service",
"effect": "writes-target",
"dry_run": false,
"confirm": null,
"route": {
"service": "wai-room",
"method": "POST",
"path": "/msg/leave"
},
"doors": {
"cli": false,
"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",
"properties": {
"text": {
"type": "string"
}
},
"required": [
"text"
]
},
"stream": null,
"since": "0.3.0",
"deprecated": null,
"receipt": false,
"needs": null,
"names": {
"cli": null,
"mcp": null,
"c": "wai_conversation_leave",
"rust": "wai::conversation::leave",
"sdk": "wai.conversation.leave"
}
},
{
"id": "member.delete",
"summary": "The owner removes a member",
"cli": null,
"aliases": [],
"usage": [
"wai POST /msg/remove (the room service)"
],
"placement": "service",
"effect": "writes-target",
"dry_run": false,
"confirm": null,
"route": {
"service": "wai-room",
"method": "POST",
"path": "/msg/remove"
},
"doors": {
"cli": false,
"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",
"properties": {
"text": {
"type": "string"
}
},
"required": [
"text"
]
},
"stream": null,
"since": "0.3.0",
"deprecated": null,
"receipt": false,
"needs": null,
"names": {
"cli": null,
"mcp": null,
"c": "wai_member_delete",
"rust": "wai::member::delete",
"sdk": "wai.member.delete"
}
},
{
"id": "call.setup",
"summary": "A challenge for a proof",
"cli": null,
"aliases": [],
"usage": [
"wai GET /call/challenge (the room service)"
],
"placement": "service",
"effect": "writes-target",
"dry_run": false,
"confirm": null,
"route": {
"service": "wai-room",
"method": "GET",
"path": "/call/challenge"
},
"doors": {
"cli": false,
"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",
"properties": {
"text": {
"type": "string"
}
},
"required": [
"text"
]
},
"stream": null,
"since": "0.3.0",
"deprecated": null,
"receipt": false,
"needs": null,
"names": {
"cli": null,
"mcp": null,
"c": "wai_call_setup",
"rust": "wai::call::setup",
"sdk": "wai.call.setup"
}
},
{
"id": "call.create",
"summary": "Place a call",
"cli": null,
"aliases": [],
"usage": [
"wai POST /call/place (the room service)"
],
"placement": "service",
"effect": "writes-target",
"dry_run": false,
"confirm": null,
"route": {
"service": "wai-room",
"method": "POST",
"path": "/call/place"
},
"doors": {
"cli": false,
"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",
"properties": {
"text": {
"type": "string"
}
},
"required": [
"text"
]
},
"stream": null,
"since": "0.3.0",
"deprecated": null,
"receipt": false,
"needs": null,
"names": {
"cli": null,
"mcp": null,
"c": "wai_call_create",
"rust": "wai::call::create",
"sdk": "wai.call.create"
}
},
{
"id": "call.invite",
"summary": "Ring invitees",
"cli": null,
"aliases": [],
"usage": [
"wai POST /call/ring (the room service)"
],
"placement": "service",
"effect": "writes-target",
"dry_run": false,
"confirm": null,
"route": {
"service": "wai-room",
"method": "POST",
"path": "/call/ring"
},
"doors": {
"cli": false,
"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",
"properties": {
"text": {
"type": "string"
}
},
"required": [
"text"
]
},
"stream": null,
"since": "0.3.0",
"deprecated": null,
"receipt": false,
"needs": null,
"names": {
"cli": null,
"mcp": null,
"c": "wai_call_invite",
"rust": "wai::call::invite",
"sdk": "wai.call.invite"
}
},
{
"id": "inbox.show",
"summary": "The caller's inbox",
"cli": null,
"aliases": [],
"usage": [
"wai GET /inbox (the room service)"
],
"placement": "service",
"effect": "reads",
"dry_run": false,
"confirm": null,
"route": {
"service": "wai-room",
"method": "GET",
"path": "/inbox"
},
"doors": {
"cli": false,
"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",
"properties": {
"text": {
"type": "string"
}
},
"required": [
"text"
]
},
"stream": null,
"since": "0.3.0",
"deprecated": null,
"receipt": false,
"needs": null,
"names": {
"cli": null,
"mcp": null,
"c": "wai_inbox_show",
"rust": "wai::inbox::show",
"sdk": "wai.inbox.show"
}
},
{
"id": "answer.create",
"summary": "Accept, decline or cancel",
"cli": null,
"aliases": [],
"usage": [
"wai POST /call/answer (the room service)"
],
"placement": "service",
"effect": "writes-target",
"dry_run": false,
"confirm": null,
"route": {
"service": "wai-room",
"method": "POST",
"path": "/call/answer"
},
"doors": {
"cli": false,
"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",
"properties": {
"text": {
"type": "string"
}
},
"required": [
"text"
]
},
"stream": null,
"since": "0.3.0",
"deprecated": null,
"receipt": false,
"needs": null,
"names": {
"cli": null,
"mcp": null,
"c": "wai_answer_create",
"rust": "wai::answer::create",
"sdk": "wai.answer.create"
}
},
{
"id": "call.show",
"summary": "The current call",
"cli": null,
"aliases": [],
"usage": [
"wai GET /call (the room service)"
],
"placement": "service",
"effect": "reads",
"dry_run": false,
"confirm": null,
"route": {
"service": "wai-room",
"method": "GET",
"path": "/call"
},
"doors": {
"cli": false,
"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",
"properties": {
"text": {
"type": "string"
}
},
"required": [
"text"
]
},
"stream": null,
"since": "0.3.0",
"deprecated": null,
"receipt": false,
"needs": null,
"names": {
"cli": null,
"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 <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",
"format": "path",
"description": "The operator key's 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 <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",
"format": "path",
"description": "The owner key's 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 <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",
"format": "path",
"description": "The operator key's 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 <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",
"format": "path",
"description": "The issuer key's 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 <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",
"format": "path",
"description": "The issuer key's 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": "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": false,
"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": null,
"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": false,
"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": null,
"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"
}
}
]
}