WAI for coding agents on the toolchain's names: wai mcp (toolsets core and dev, tools named by their operations), the room service's API with catalogue operationIds, wai setup-agent #505
Loading…
Reference in a new issue
No description provided.
Delete branch "wai/dx-agent-mcp-2"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Replaces #500. The agent door on the toolchain names approved on 2026-10-27:
wai mcp(agent.mcp), the room service's OpenAPI description, andwai setup-agent(agent.setup), rebased onto main (91cfa9d0, after #504) as a linear branch.What is in it
Commits 1 to 3 are #500's three commits cherry-picked onto main, unchanged but for two conflict resolutions (the dispatch in
wai.rsand the CHANGELOG). Commits 4 to 7 adopt the names.One verb table.
wai mcpandwai setup-agentare entries ofdx::VERBS, besidehello,create,devandverify.wai.rsno longer has a secondCOMMANDStable. A verb now ends in one of two ways. It is a check (0 held, 1 did not, 2 usage), or it returns a status from the toolchain's exit table, whichsetup-agentuses.wai mcp: tools are operations, named by them, in toolsets. Each tool's entry names its catalogue operation. The tool name is that operation with_for the dot, and nothing else names it.--toolsetchooses the sets, andcoreis offered when none is named.coreenvelope_inspect,registry_list,registry_show,receipt_verify,package_build,conformance_list,conformance_run,docs_searchdevdev_start,dev_stop,room_grant,room_join,room_leave,room_sessionreceipt_verifytakes the four kinds the oldverify_*tools each took one of:delivery,claim,room_sessionandaudit_bundle. The kind is given inkindor read from the arguments, and the answer carries it.devtools act on the targetlocalalone, and refuse any other target.room_grantstill refuses any service that is not on loopback, before it connects.tools/listgives each tool's operation and toolset in_meta(wai/operation,wai/toolset).wai devfinds it: besidewai, then onPATH.envelope_inspectcounts what this build decodes the waywai inspectdoes, the floor included.wainow holds the featuremcp, so the server thatsetup-agentregisters is in the archive's binary.wai::opsholds the naming rule:noun.verb, lowercase ASCII letters, the verb from the closed list. It also lists the few names the catalogue itself gives whose last word is not on that list (room.session,agent.mcp,toolchain.hello,toolchain.doctor,ops.schema,edge.derive,meter.calibrate,audit.report); those keep their names as given. The tool table and the API description are both tested against this rule.wai setup-agent:AGENTS.md. It touchesCLAUDE.mdonly where the project already has one, and then adds an import ofAGENTS.mdto it.--toolsetregisters the server with the toolsets it names.envelope/1:op,ok,error {code, message, hint, retryable}andresult. On exit 4 the envelope also carriesproposedandconfirm.The room service's API. Each of the 40
operationIds inopenapi.jsonis now a catalogue name:room.show(GET /room) androom.grant(POST /grant) are taken from the catalogue as it gives them.service.show,service.checkadmission.showmls.tail,mls.import,mls.updateperformance.list,performance.show,schedule.create,handover.create,window.create,fidelity.createtime.show,source.fetch,watchchallenge.create,watch.tail,watch.show,watch.join,watch.updatecontrol.grant,remote.show,remote.verifyconversation.show,.join,.tail,.import,.update,.leave,conversationchallenge.create,message.create,acknowledgement.create,member.deletecallchallenge.create,call.create,call.invite,inbox.show,answer.create,call.showThe paths stay as the service serves them; none is under
/v1/today. The description now listswai dev's front (/room-api) as a second server. In the contract test, each route row carries its operation name. The test checks:room.showandroom.grantare on the routes the catalogue gives them.tests/mcp_dev_room.rschecks that the toolroom_grantandPOST /grantare the one operation,room.grant.Checks
cargo test --locked --no-default-features --features mcp --bin wai --test cli_mcp --test cli_setup_agentcargo test --locked --no-default-features --lib ops::cargo test --locked --no-default-features --features quickstart --bin wai --test floor --test cli_dx(DX-A's tests, with the new dispatch)joule-moq-room:cargo test --locked --test openapi_contract --test mcp_dev_room--bin wai --testswithmcp, withquickstart, with no feature;--libforops;joule-moq-room --all-targets) filtered to the touched filescheck-tests-in-ci.py,check-workflow-concurrency.sh,check-spec-refs.py,check-wai-section-refs.py,check-no-vanity-metrics.sh,test-public-text-checks.sh,check-comparative-prose.sh,check-orphan-sources.pycheck-public-names.shon the changed files; the commit messages and this body against the same patterns (grep -E)wfsteps.py HEAD origin/main <#500 head> <this branch's CI commit>; the YAML parse of every workflowFalsifications
Each was run with the branch committed: break one thing, run the guarding test, then restore with
git checkout --.docs.searchrenamedspec.searchcli_mcp(the tool list is the catalogue's)the_handshake_and_the_tool_list,the_registry_and_the_specificationreceipt.verifyrenamedreceipt.get--bin wai(every_tool_is_an_operation_named_by_the_rule_once)get is not one of the verbsoperationIdofPOST /watch/joinset towatchJoinopenapi_contract(every_operation_is_named_as_the_catalogue_names_it)left: Some("watchJoin") right: Some("watch.join")setup-agentwritesCLAUDE.mdwhere the project has nonecli_setup_agentno CLAUDE.md is made where the project has noneNot done
quantumtoolset: not mounted. The quantum server's tools are namedrun_quantum_circuit,lint_qasmand so on, notquantum_*. Mounting it as it is would publish names that break the rule. Doing it properly would mean renaming its tools (a change towai-quantum) or linking its engine intowai.wai-quantum mcpstays as it is, and no public text lists a quantum toolset.room_createorops_search. The room service keeps one room, created when it starts, anddev_startstarts it. There is no operation catalogue (wai ops) yet to search.joule-moq-room dev, notwai dev --json.wai devhas no control lines and no in-process participant yet./v1/. Moving them, behind a front that mounts/v1/rooms/{room}/, is a follow-up, so that deployed clients keep working.AGENTS.mdin DX-A's examples yet.🤖 Generated with Claude Code
The two verbs join the one table, dx::VERBS, beside hello, create, dev and verify; wai.rs keeps no second command table. A verb ends either as a check (0 held, 1 did not, 2 usage) or with an exit status of the toolchain's table, which setup-agent uses. wai mcp (agent.mcp): each tool is an operation of the catalogue, named by it with `_` for the dot, and nothing else names it. The tools come in toolsets, chosen with --toolset (core when none is named): - core: envelope_inspect, registry_list, registry_show, receipt_verify, package_build, conformance_list, conformance_run, docs_search; - dev: dev_start, dev_stop, room_grant, room_join, room_leave, room_session, on the target local alone (a target named must be it). receipt_verify takes the four kinds the verify tools took one each (delivery, claim, room_session, audit_bundle), by `kind` or read from the arguments, and answers with the kind beside the verifier's verdict. tools/list gives each tool's operation and toolset in its _meta. The development room's program is found as wai dev finds it: beside wai, then on PATH. envelope_inspect counts what this build decodes as wai inspect does, the floor included. wai setup-agent (agent.setup): AGENTS.md always; a CLAUDE.md only where the project has one, which gains an import of AGENTS.md. --toolset registers the server with those toolsets. Off a terminal it answers in the toolchain's JSON envelope (envelope/1: op, ok, error {code, message, hint, retryable}, result, and on exit 4 the proposed changes and the confirming command), with the table's exit statuses: 2 usage, 3 permission, 4 confirmation required, 5 not found, 7 another I/O error. wai::ops holds the rule operation names keep: noun.verb, lowercase letters, the verb from a closed list, and the few names the catalogue gives as they are (room.session among them). The quickstart's wai holds `mcp`, so the server setup-agent registers is in the archive's binary. Co-Authored-By: Claude Opus 5.5 <[email protected]>