(Spine Ch. 29.)
“TCP implementations will follow a general principle of robustness: be conservative in what you do, be liberal in what you accept from others.” Jon Postel, RFC 793 (1981)
Seven agents got a brief that said the air CLI had a
180-second cap, then return whatever it has. Six of them accepted it and
started reasoning about tuning. One opened the file. The cap existed on
a branch that had not merged, and the 429 rate-limit branch slept with
no elapsed-time check at all, which is a polite way of saying forever.
Nobody had lied. The brief was English, the code was code, and English
does not get checked at the door. It took a production query over 8,853
domains to settle what everyone had been confidently discussing, and the
number that ended it was zero.
Bottom line: Two agents talking to each other in English is two agents guessing. The handoff has to be a contract: a named schema, required fields, typed values, and a failure that fails instead of apologizing. Google shipped A2A on April 9, 2025 with 50+ launch partners, Salesforce, SAP, ServiceNow, PayPal, MongoDB, Box, Atlassian, Intuit, Cohere and LangChain among them. That is a room full of vendors who agree on nothing else agreeing in public about the thing anybody running a multi-agent loop learns the hard way: no schema, no A2A. Prose is not an interface. Prose is a rumor with good grammar.
There are three different problems here and people keep solving one of them and declaring victory.
Tool access. An agent calls something that is not an agent: a database, a filesystem, an API. That is MCP, which Anthropic released on November 25, 2024 and which everybody now compares to USB-C for AI applications (Teneo, 2025). I had it filed in my head as an early-2024 protocol, off by the better part of a year, because I dated it from when I started using it instead of when it shipped. Ch. 24 is all of it. One model, many tools, a contract per tool.
Peer coordination. An agent needs another agent to do a piece of work and hand back a result. That is A2A: agents built by different vendors, on different frameworks, coordinating without either side importing the other’s SDK. Auth0’s July 2025 writeup put the split in one line worth stealing: MCP connects agents to tools, A2A connects agents to agents.
System integration. Neither of the above. Your agent hits an internal service that has had a REST contract since 2019 and does not need a protocol upgrade. Oracle’s developer blog called this the agent communication matrix in June 2026, and the useful part is the permission it gives you to not adopt anything.
What all three share is the only thing that matters: JSON Schema. A2A is JSON-based and schema-carried (TrueFoundry, June 2026). MCP tools declare typed inputs. OpenAI’s structured outputs use constrained decoding (OpenAI API docs, 2025). That is the difference between “please respond in this format” and a decoder that physically cannot do otherwise. Ch. 8 makes this argument for a single agent’s output. This chapter runs it between two processes, where the failure is invisible to both of them.
The protocol is the boring part, and the only part that survives a model swap. If your agents disagree about what “verified” means, A2A will transmit that disagreement with excellent uptime.
The three fields that earn their keep in any agent-to-agent envelope:
A status that is an enum, not a sentence.
certified, certified_conditional,
declined. Not “looks good with some caveats.” Those three
values are how I remember my own council’s envelope: three status
values, four confidence levels, one refusal path. I have not gone back
and diffed my memory against the code, which tells you everything about
me. I will lecture you on my own wire format from memory and refuse to
spend ninety seconds confirming I actually built it that way. Treat it
as the shape I argue for, not a spec you can copy.
A confidence label per claim. Verified, contested, theory, unmeasured. If a downstream agent cannot tell which claim you ran a command to check, it will treat them all the same and pick the wrong one.
A refusal path. The receiver must be able to say no
in a way the schema forces the caller to handle. If declining lives only
as prose in a notes field, nobody handles it.
airank, August 12, 2026. An architecture council of six frontier models plus a chair with tool access reviewed the AWS hybrid cutover plan. One question: is this runbook safe to execute on Sunday.
The verifier seat, Seraph, declined to certify. Not “raised concerns.” Declined, as a status, with the artifact required to move off that status attached. Then it produced six breaks, every one a thing rather than an opinion:
All six were real. All six went into the runbook verbatim. That word is the whole chapter. It arrived in a shape a different agent could execute without reading the conversation.
The council also settled a Multi-AZ argument in one line: Multi-AZ replicates a DROP SCHEMA faithfully and instantly. The actual insurance is point-in-time recovery, not a standby replica. That is a claim you can test.
Cost of the entire verification pass, as best I remember it and as
far as the post goes: five TCP connects from the actual home network,
one dig NS, one
aws rds describe-db-engine-versions, an rsync check, and a
short tail of other calls. I never published the session log, so read
the call list as my recollection; the tally in the post is the part with
a date on it. Eight retractions on evidence, six concrete breaks in the
runbook, one architecture question settled, and the whole hybrid
footprint priced at $134 a month. You cannot retract the third sentence
of a paragraph.
Outcome: the runbook was certified conditionally, on a Saturday dress rehearsal returning a green checklist. That is a status with a named unblocking artifact, not “we feel okay about it.” And the launch was never allowed to depend on the migration.
Three days later, August 15, 2026, the same council
reviewed the air CLI, 180 lines, zero dependencies, one day
old. Seraph checked the source instead of the brief that started this
chapter.
The brief was the prose handoff. The code was the contract. They
disagreed, and six of seven agents reasoned off the wrong one until
somebody read the file. I wrote that brief, and I got the single most
important number in it wrong, because I described the branch I meant to
merge instead of the one that was there. Seven models on the call and
the cheapest thing in the room was cat.
Then the council ran a production query. Of 8,853 domains created in 48 hours, 117 resolved in under 60 seconds, zero landed in the 60-to-180-second window, and 8,736 took longer than 180 seconds, some of them 40 hours. That distribution is a switch, not a curve. “Raise the cap” and “tune the polling interval” both died on one query, and a different proposal got promoted: when the cap expires, exit 2 instead of 0. Honesty at the boundary as an exit code, the smallest possible schema and still infinitely better than a log line.
The loud failure is a parse error. Agent B chokes on Agent A’s output, the run dies, you see a stack trace, you fix it in ten minutes. Fine.
The quiet failure:
Both agents parse successfully and mean different things.
Agent A’s status: "complete" means the code is
committed. Agent B’s handler for the same value means it is safe to
deploy. Every field is present and correctly typed. The schema is
satisfied and the system is wrong, because a schema constrains shape and
shape is not meaning. A2A moves the envelope; it does not agree on the
semantics inside it, and no logo wall of launch partners has solved that
for you either. I am describing the shape rather than one incident I can
put a date on, because this one never leaves a stack trace to date it
by. That is the point of it.
Second quiet failure: the optional field that is never sent
and never missed. You add evidence to the envelope
as optional, because making it required would break two existing agents.
Six weeks later no agent populates it, every consumer has a null-safe
default, and the field is documentation for a discipline nobody
practices. Required or delete it. I shipped that exact optional
evidence field, defended it in review as pragmatic, then
cited it in a design doc as though somebody was filling it in. It was
null in every row and I was the n00b quoting it back at myself.
Third: summarization in the middle. Somebody puts a coordinator agent between A and B that reads structured output and emits prose, because prose is easier for the humans on the dashboard. You now have a lossy transcoder in your control path. The commander-in-chief sim (v1.2.0 gold, August 24, 2026) refuses this by construction: every field in the deterministic core is classified as hashed or excluded from the golden checksum, no third option, and its README badge reports 1,217 test methods enforcing bit-identical results between x86_64 and arm64. No seat at that table for “roughly the same.”
Do
Don’t
air
sentences and only one of them ran.Ch. 8 is structured output for one agent: get the model to emit a shape you can act on instead of a paragraph you have to interpret. Ch. 24 is MCP, the tool-access contract, the layer under everything here. Ch. 26 is the multi-agent structure this chapter gives a wire format to. Ch. 15 is the failure this chapter inherits: a plan is a persuasive artifact, and a persuasive artifact passed between two agents is worse than one passed to a human, because the human might squint at it. Ch. 20 is where it lands, again: if “done” is not a measurement, the schema will transmit your ambiguity with perfect fidelity.
Verified:
~/Projects/airank/blog/2026-08-12-the-council-and-the-cutover.mdair CLI, airank, August 15, 2026:
~/Projects/airank/blog/2026-08-15-air-cli-council.md~/Projects/commander-in-chief/README.mdWhat I could not verify: