
A2A Explained: How Agent-to-Agent Communication Differs from MCP
MCP answers "what can I call?" A2A answers "who can I hand this to?" Different questions, different failure modes.
Read tutorialEngineering mechanisms that make software and AI workflows handle failures, retries, resumption, cleanup, duplicate work, and error propagation predictably.
Tagged articles
45 articles in this tag.

MCP answers "what can I call?" A2A answers "who can I hand this to?" Different questions, different failure modes.
Read tutorial
The demo worked because the agent was running on your laptop. It had your credentials, your network, your home directory, and your shell history. Move it…
Read tutorial
The demo agent works. It reads the file, runs the test, patches the bug. Then it ships to a second tenant, the session runs for six hours, the process dies…
Read tutorial
An agent that has run forty steps and produced an answer no better than step three is not stuck. It is broken in a specific, nameable way.
Read tutorial
A user reports a wrong answer. You pull the trace. Every tool call succeeded, every span is green, latency is normal, and no error was logged anywhere. The…
Read tutorial
Kill a long agent mid-task and you learn which of those two things your system actually believes. If the process dies and the transcript survives but the…
Read tutorial
A fan-out graph looks fast on the whiteboard. In production it stalls because one branch is slow, one branch fails silently, and the synthesis step merges…
Read tutorial
The demo works. The agent books the flight, summarizes the repo, files the ticket. Then you point it at a task with one extra branch, and it calls the same…
Read tutorial
Hop three. The context window is full. Half of it is plausible garbage — passages that matched the query, ranked well, and turned out to be useless. The…
Read tutorial
The agent writes the function, re-reads it, decides it looks correct, and stops. The code is wrong. This is the most common failure in autonomous coding,…
Read tutorial
The first sub-answer is wrong, and every later step inherits it with full confidence.
Read tutorial
“Everything is a plugin” is a claim about architecture, not a feature list. It says the agent loop itself is replaceable — and that is expensive to mean.
Read tutorial
The demo works. The agent reads the queue, drafts the update, and posts it. Then someone asks who approved the change, which run produced it, and how to…
Read tutorial
The demo works on turn one. By turn five, the agent is answering a question you already answered, citing a document it retrieved three turns ago, and…
Read tutorial
A boundary that leaks sqlite3.OperationalError into your domain code has not failed loudly. It has failed quietly, by making every caller learn your…
Read tutorial
An evaluator is only as useful as the set of distinct repair actions its output can select.
Read tutorial
A research agent runs for twenty minutes. It pays for dozens of model calls, executes a dozen tool calls, and commits three external side effects. Then the…
Read tutorial
Six months after the pipeline shipped, nobody can tell what the handler actually takes.
Read tutorial
The demo works. The agent reaches a consequential step, pauses, and asks a human to approve. The human clicks approve. Then the resumed run re-executes the…
Read tutorial
An agent processes 200 units of work over four hours, dies on unit 201, and restarts from zero. The crash is not the failure. The failure is that nothing…
Read tutorial
The redesign did not delete state. It relocated it — and everything downstream follows from where it landed.
Read tutorial
A team wires up an MCP server, watches the tools appear in the client, and concludes the integration works. Then a tool gets renamed upstream, a resource…
Read tutorial
An agent that only works until the container restarts is not an agent. It is a demo with a heartbeat.
Read tutorial
A goal-based agent that never terminates is not a model failure. It is a contract failure.
Read tutorial
An agent that plans beautifully and then executes a stale plan into a wall is not a planning failure. It is a state failure.
Read tutorial
A plan that reads like a clean numbered list can still deadlock at runtime, because the list never told the scheduler which steps actually depend on which…
Read tutorial
The demo works. You paste a gnarly task into one prompt—extract the entities, reconcile them against the schema, flag the contradictions, write the…
Read tutorial
The prompt worked on your laptop. In production, the same prompt returns a paragraph on Monday, a bulleted list on Tuesday, and a confident fabrication on…
Read tutorial
A coroutine that never runs is not a syntax error. It is an object you built and never drove.
Read tutorial
Someone adds concurrency to a slow service and the service gets slower. Throughput drops, latency climbs, and the incident channel fills with timeouts. The…
Read tutorial
A leaked connection, a lock that never released, a transaction that committed on the wrong path. None of these are exotic failures. They are ordinary…
Read tutorial
A try statement is not a safety net. It is a four-clause control-flow machine, and most production bugs come from putting logic in the wrong slot.
Read tutorial
A generator is not a lazy list. It is a suspended function with a position, and once you can see that position, most "why did my pipeline eat 8 GB" bugs…
Read tutorial
One core is pinned at 100%. Fifteen sit idle. You wrap the loop in a pool, run it again, and the wall clock barely moves — or gets worse. Nothing about the…
Read tutorial
An agent that acts without reasoning is not reasoning. It is guessing with a tool schema.
Read tutorial
That is the shape of the failure I keep seeing in agent systems that look governed and are not. A team writes a planner prompt, a coder prompt, a reviewer…
Read tutorial
A linear agent loop is a commitment device. It commits to one trajectory, and every later step inherits the consequences of the earliest mistake.
Read tutorial
The loop that improves the harness can also edit the evaluator, the permissions, and the rollback path. That is the whole problem in one sentence.
Read tutorial
The 2 a.m. page is almost always the same story. A pipeline that extracted clean JSON in the demo starts throwing parse errors in production, and the logs…
Read tutorial
Two teams run the same model on the same task. One ships reliably. The other drowns in tool-call latency, context bloat, and incidents nobody can explain…
Read tutorial
A scheduled agent that opens two pull requests for the same dependency bump is not a model problem. It is a delivery-semantics problem wearing a model…
Read tutorial
A failed agent run rarely looks like an interface problem. It looks like a model problem: wrong tool, malformed arguments, an error swallowed and retried…
Read tutorial
Two teams ship the same model, the same prompt, the same tool list. One agent finishes a multi-step task. The other stalls, loops, and quietly corrupts its…
Read tutorial
The demo works. Then you add a second worker, a shared artifact store, and a verifier, and the system starts producing results nobody can attribute,…
Read tutorial
The demo worked. Production didn't. Somewhere between the two, the system took a path nobody wrote down, and when it failed there was no artifact…
Read tutorial