<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: PromptMaster</title>
    <description>The latest articles on DEV Community by PromptMaster (@promptmaster).</description>
    <link>https://dev.to/promptmaster</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3982446%2Fe02224c6-6b16-4729-a71a-3cee5b4142ea.jpeg</url>
      <title>DEV Community: PromptMaster</title>
      <link>https://dev.to/promptmaster</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/promptmaster"/>
    <language>en</language>
    <item>
      <title>5 A2A Mistakes That Break Production Systems</title>
      <dc:creator>PromptMaster</dc:creator>
      <pubDate>Sat, 18 Jul 2026 15:11:48 +0000</pubDate>
      <link>https://dev.to/promptmaster/5-a2a-mistakes-that-break-production-systems-1b08</link>
      <guid>https://dev.to/promptmaster/5-a2a-mistakes-that-break-production-systems-1b08</guid>
      <description>&lt;p&gt;Most A2A trouble comes from a short list of avoidable mistakes. Here they are, with the fix for each.*&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;The five that account for most A2A trouble:&lt;/strong&gt; never emitting a terminal state, a missing or vague Agent Card, trusting peers by default, confusing A2A with MCP, and ignoring long-running work.&lt;/p&gt;

&lt;p&gt;Almost all of them share one root cause: &lt;strong&gt;treating A2A like a simple function call.&lt;/strong&gt; It's a protocol for stateful, long-running, cross-trust collaboration.&lt;/p&gt;

&lt;p&gt;Design for that reality and the pitfalls mostly disappear on their own.&lt;/p&gt;




&lt;h2&gt;
  
  
  1. Never emitting a terminal state
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;The symptom:&lt;/strong&gt; a client hangs forever on a task that, internally, finished ages ago.&lt;/p&gt;

&lt;p&gt;This is the most frequent bug in A2A implementations, and it's maddening precisely because everything looks fine from the agent's side. The work completed. The logs are clean. The agent is idle. Meanwhile the caller is still waiting, because as far as the protocol is concerned that Task never ended.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The fix:&lt;/strong&gt; always emit a terminal event — &lt;code&gt;completed&lt;/code&gt;, &lt;code&gt;failed&lt;/code&gt;, or &lt;code&gt;canceled&lt;/code&gt; — on every path, especially error paths. If a client of yours hangs, check this first. It will usually be the answer.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Every Task must reach a terminal state.*Not most tasks. Every task, on every path.&lt;/strong&gt;*&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  2. A missing or vague Agent Card
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;The symptom:&lt;/strong&gt; a perfectly good agent nobody ever calls.&lt;/p&gt;

&lt;p&gt;An agent that doesn't serve its card at the well-known path is undiscoverable — clients look there, find nothing, and move on. But there's a subtler version: an agent whose skills are described vaguely is undiscoverable &lt;em&gt;in practice&lt;/em&gt;. A skill labeled "processing" tells an orchestrator nothing about whether to use it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The fix:&lt;/strong&gt; serve the card, and describe skills the way you'd document a public API — stable ids, plain-language descriptions, expected inputs, the shape of returns, and an example where behavior isn't obvious.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# prove it before wiring anything else&lt;/span&gt;
curl https://your-agent.example.com/.well-known/agent-card.json
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  3. Trusting peers by default
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;The symptom:&lt;/strong&gt; an agent that will do anything a caller asks, because the caller speaks A2A.&lt;/p&gt;

&lt;p&gt;Speaking a protocol is not a credential. Treating another agent as trusted just because it can reach you is how the tools an agent exposes become the biggest attack surface in your architecture.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The fix:&lt;/strong&gt; authenticate every request, authorize narrowly with scoped tokens, validate all incoming Parts, and rate-limit. Verify per call, not per session — the peer talking to you now may not be the one from a moment ago. The protocol gives you the mechanisms; using them is on you.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. Confusing A2A with MCP
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;The symptom:&lt;/strong&gt; awkward architecture that fights you at every turn.&lt;/p&gt;

&lt;p&gt;Reaching for A2A to connect an agent to a database, or MCP to connect two agents, leads to designs that almost work. Wrapping an agent as a "tool" via MCP holds up right until that agent needs to ask a clarifying question, run for ten minutes, or report progress — because tools don't have a task lifecycle.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;MCP&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;A2A&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Other end of the wire&lt;/td&gt;
&lt;td&gt;A tool, server, or data source&lt;/td&gt;
&lt;td&gt;An independent agent with its own skills&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Unit of interaction&lt;/td&gt;
&lt;td&gt;A tool call or resource read&lt;/td&gt;
&lt;td&gt;A Task with a lifecycle&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Direction&lt;/td&gt;
&lt;td&gt;Vertical — reaching down&lt;/td&gt;
&lt;td&gt;Horizontal — reaching across&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;The fix:&lt;/strong&gt; ask what's on the other end. A resource? MCP. An agent? A2A. That question answers it every time.&lt;/p&gt;

&lt;h2&gt;
  
  
  5. Ignoring long-running work
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;The symptom:&lt;/strong&gt; a system that's responsive in the demo and unusable the first time a task takes four minutes.&lt;/p&gt;

&lt;p&gt;Building only for fast, synchronous replies breaks the moment real work shows up. And real agent work is often slow: a report takes minutes, a pipeline takes an hour, a design task pauses to ask a question.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The fix:&lt;/strong&gt; design for the task lifecycle from the start. Stream updates with &lt;code&gt;message/stream&lt;/code&gt; for interactive work someone is waiting on. Use push notifications for long unattended jobs rather than holding a connection open for hours. Use &lt;code&gt;input-required&lt;/code&gt; when you need more information instead of guessing or failing.&lt;/p&gt;

&lt;h2&gt;
  
  
  The meta-pitfall
&lt;/h2&gt;

&lt;p&gt;Look at the five together and a single root cause shows through: &lt;strong&gt;treating A2A like a simple function call.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;It isn't. It's a protocol for stateful, long-running, cross-trust collaboration between systems you may not control. Every mistake above is what happens when you design as if the other end were a local function that returns immediately, always succeeds, and can be trusted.&lt;/p&gt;

&lt;p&gt;Design for what it actually is, and most of these never come up.&lt;/p&gt;

&lt;h2&gt;
  
  
  A production-readiness checklist
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Every task emits a &lt;strong&gt;terminal state on all paths&lt;/strong&gt;, including errors.&lt;/li&gt;
&lt;li&gt;The &lt;strong&gt;Agent Card is served&lt;/strong&gt;, accurate, and — where trust matters — signed.&lt;/li&gt;
&lt;li&gt;Authentication and authorization are &lt;strong&gt;enforced and scoped on every call&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Long-running work uses &lt;strong&gt;streaming or push notifications&lt;/strong&gt;, not blocking waits.&lt;/li&gt;
&lt;li&gt;Tasks carry &lt;strong&gt;correlation ids&lt;/strong&gt; and are traceable across every agent they touch.&lt;/li&gt;
&lt;li&gt;Clients &lt;strong&gt;read advertised capabilities&lt;/strong&gt; and degrade gracefully for missing ones.&lt;/li&gt;
&lt;li&gt;Endpoints are &lt;strong&gt;rate-limited, timed out, and monitored&lt;/strong&gt; like any production service.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Operate agents like services
&lt;/h2&gt;

&lt;p&gt;One last thing that isn't a bug so much as a posture. Running many agents is an operations discipline, not just a development one.&lt;/p&gt;

&lt;p&gt;Treat each agent as a service with an owner, a version, health checks, and a place in your monitoring. Know which agents call which, so a change or outage in one can be traced to its effect on others. Keep a registry of what exists and what it does, or discovery degrades into tribal knowledge.&lt;/p&gt;

&lt;p&gt;The organizations that scale agents well are the ones that operate them with the same rigor they bring to any production service.&lt;/p&gt;

&lt;h2&gt;
  
  
  Frequently asked questions
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Why does my A2A client hang forever?&lt;/strong&gt;&lt;br&gt;
Almost always because the remote agent finished its work but never emitted a terminal state. Always emit completed, failed, or canceled — on every path, including error paths. It's the most common A2A bug by a wide margin.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why is nobody calling my A2A agent?&lt;/strong&gt;&lt;br&gt;
Either it isn't serving its Agent Card at /.well-known/agent-card.json, or its skills are described too vaguely for a client to decide it's the right agent for a job. Serve the card, and write skills like public API documentation.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Can I use MCP to connect two agents?&lt;/strong&gt;&lt;br&gt;
You can wrap an agent as a tool, and it works until that agent needs to ask a clarifying question, run for ten minutes, or report progress — because tools have no task lifecycle. If the other end is an agent, use A2A.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Is it safe to trust an agent that speaks A2A?&lt;/strong&gt;&lt;br&gt;
No. Speaking the protocol is not a credential. Authenticate every request, authorize narrowly with scoped tokens, validate all incoming Parts, and rate-limit. Verify per call, not per session.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How do I handle A2A tasks that take a long time?&lt;/strong&gt;&lt;br&gt;
Stream updates with message/stream for interactive work someone is waiting on, and use push notifications for long unattended jobs. Use input-required to pause and ask when you need more information. Never design only for fast synchronous replies.&lt;/p&gt;




&lt;h3&gt;
  
  
  More in this series
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;A2A vs MCP&lt;/strong&gt; — A2A vs MCP: The Two Protocols Behind Every Serious AI Agent System&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;What Is A2A?&lt;/strong&gt; — What Is the Agent2Agent Protocol? A Complete Introduction to A2A&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The Agent Card&lt;/strong&gt; — The Agent Card: How AI Agents Discover Each Other&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Want to go deeper?
&lt;/h3&gt;

&lt;p&gt;I wrote two guides on this.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://promptmasterstore.gumroad.com/l/a2afree" rel="noopener noreferrer"&gt;A2A Quick-Start&lt;/a&gt; — free, 6 pages.&lt;/strong&gt; The Agent2Agent protocol in 15 minutes: what it is, the five building blocks, the task lifecycle, and where MCP fits.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://promptmasterstore.gumroad.com/l/a2a" rel="noopener noreferrer"&gt;A2A: The Complete Guide&lt;/a&gt; — 42 pages.&lt;/strong&gt; 15 chapters, 5 appendices. Discovery, security, building your first agent with the SDK, orchestration patterns, extensions and AP2, production and scaling — plus a full worked example of two agents talking and a 30-day adoption path.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Independent educational content. Not affiliated with, endorsed by, or sponsored by Google, the Linux Foundation, Anthropic, or any vendor named. A2A and MCP are evolving specifications — confirm details against the official specification for your target version.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>agents</category>
      <category>devops</category>
      <category>architecture</category>
    </item>
    <item>
      <title>Multi-Agent Orchestration Patterns: Orchestrator, Parallel, and Peer Handoffs</title>
      <dc:creator>PromptMaster</dc:creator>
      <pubDate>Sat, 18 Jul 2026 15:10:47 +0000</pubDate>
      <link>https://dev.to/promptmaster/multi-agent-orchestration-patterns-orchestrator-parallel-and-peer-handoffs-4ngd</link>
      <guid>https://dev.to/promptmaster/multi-agent-orchestration-patterns-orchestrator-parallel-and-peer-handoffs-4ngd</guid>
      <description>&lt;p&gt;&lt;em&gt;One agent calling another is useful. The real power appears when you compose many — and a few patterns recur everywhere.&lt;/em&gt;&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;A2A doesn't dictate an architecture, but the field has converged on a small set of orchestration patterns.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The most common is the &lt;strong&gt;orchestrator pattern&lt;/strong&gt;: one agent receives a request and delegates sub-tasks to specialists, then assembles their results. Delegation can be &lt;strong&gt;sequential&lt;/strong&gt; (each result feeds the next) or &lt;strong&gt;parallel&lt;/strong&gt; (independent sub-tasks at once).&lt;/p&gt;

&lt;p&gt;You don't always need a center. Because client and remote agent are just roles, agents can also &lt;strong&gt;hand off peer-to-peer&lt;/strong&gt; — letting work flow to whichever agent is best suited, without a bottleneck.&lt;/p&gt;




&lt;h2&gt;
  
  
  The orchestrator pattern
&lt;/h2&gt;

&lt;p&gt;The most common shape is a single orchestrator agent that receives a request and delegates sub-tasks to specialized remote agents, then assembles their results. The orchestrator holds the plan; the specialists do focused work.&lt;/p&gt;

&lt;p&gt;This maps naturally onto A2A: the orchestrator is a client to each specialist, and each specialist is a remote agent exposing its skills. Nothing special is required — it's the base protocol used deliberately.&lt;/p&gt;

&lt;h2&gt;
  
  
  Sequential vs parallel delegation
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Sequential&lt;/strong&gt; — the orchestrator delegates step by step, feeding each agent's Artifact into the next. Use it when later work depends on earlier results.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Parallel&lt;/strong&gt; — the orchestrator delegates independent sub-tasks at once and gathers results as they complete. Use it when sub-tasks don't depend on each other, for speed.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A worked picture: a user asks for a market report. The orchestrator delegates data-gathering to a research agent and chart-making to a visualization agent — in parallel, since neither needs the other. Both stream to completion. The orchestrator collects two Artifacts and assembles the report.&lt;/p&gt;

&lt;h2&gt;
  
  
  Peer delegation and handoffs
&lt;/h2&gt;

&lt;p&gt;Not every system needs a central orchestrator. Agents can also delegate peer-to-peer: a support agent hands a billing question directly to a billing agent, which may in turn consult a fraud agent.&lt;/p&gt;

&lt;p&gt;Because "client" and "remote agent" are just roles in a single interaction, any agent can delegate to any other it can discover. Handoffs like these let work flow to whichever agent is best suited, without routing everything through one bottleneck.&lt;/p&gt;

&lt;h2&gt;
  
  
  Choosing a shape
&lt;/h2&gt;

&lt;p&gt;There is no single right architecture, only the one that matches your priorities.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;strong&gt;Priority&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;Pattern&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;Trade-off&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Control and observability&lt;/td&gt;
&lt;td&gt;Central orchestrator&lt;/td&gt;
&lt;td&gt;Concentrates risk in one agent&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Resilience and flexibility&lt;/td&gt;
&lt;td&gt;Peer delegation&lt;/td&gt;
&lt;td&gt;Harder to trace end to end&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Speed on independent work&lt;/td&gt;
&lt;td&gt;Parallel fan-out&lt;/td&gt;
&lt;td&gt;Needs aggregation and timeout strategy&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Correctness on dependent work&lt;/td&gt;
&lt;td&gt;Sequential delegation&lt;/td&gt;
&lt;td&gt;Slower; each step waits on the last&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Match the pattern to the failure you fear.*Control, or resilience — pick deliberately.&lt;/strong&gt;*&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Patterns compose
&lt;/h2&gt;

&lt;p&gt;Real systems rarely use one shape in isolation. A top-level orchestrator might fan out in parallel to several specialists, one of which internally runs a short sequential pipeline of its own, while another hands off peer-to-peer to an agent it discovered at runtime.&lt;/p&gt;

&lt;p&gt;The patterns compose because they are all just agents playing client and remote-agent roles. Start with the simplest shape that solves the problem, and layer another only when a concrete need — speed, resilience, or flexibility — calls for it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Discovery at scale
&lt;/h2&gt;

&lt;p&gt;As the number of agents grows, hard-coding endpoints stops scaling. This is where Agent Cards earn their keep: an orchestrator can select an agent by matching a task to advertised skills rather than by knowing a fixed address.&lt;/p&gt;

&lt;p&gt;Registries and directories of A2A agents extend this further, letting systems find capable agents dynamically — the agent equivalent of service discovery in microservices.&lt;/p&gt;

&lt;p&gt;The practical test of whether you've done this right: &lt;strong&gt;can you add a new specialist agent without editing the orchestrator?&lt;/strong&gt; If yes, you're delegating by skill. If no, you're hard-coding.&lt;/p&gt;

&lt;h2&gt;
  
  
  Three anti-patterns
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;The god orchestrator&lt;/strong&gt; — one agent that knows every other agent's internals. It defeats the point; delegate by advertised skill, not by hard-coded knowledge.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Chatty delegation&lt;/strong&gt; — bouncing tiny messages back and forth when one well-formed task would do. Each hop adds latency and failure surface.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Silent fan-out&lt;/strong&gt; — launching many parallel tasks with no aggregation or timeout strategy, so one slow agent stalls the whole result.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Cost and latency are real
&lt;/h2&gt;

&lt;p&gt;Every delegation adds a network hop and, often, another model call. A workflow that fans across several agents can be slower and costlier than a single one.&lt;/p&gt;

&lt;p&gt;Design with that in mind: parallelize independent work, avoid chatty back-and-forth where one well-formed task would do, and ask honestly whether a step truly needs a separate agent or could be a tool call within one.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Multi-agent is a means, not a goal.&lt;/strong&gt; Reach for it when the specialization or scale earns its overhead — not because it sounds impressive.&lt;/p&gt;

&lt;h2&gt;
  
  
  Keeping orchestration observable
&lt;/h2&gt;

&lt;p&gt;An orchestrated workflow is only as debuggable as its trail. Because a single request may pass through several agents, attach a correlation identifier at the top and carry it through every delegation.&lt;/p&gt;

&lt;p&gt;Log each task's start, state changes, and result against that id. When something goes wrong three agents deep — and eventually it will — this is the difference between reading the trail and guessing.&lt;/p&gt;

&lt;h2&gt;
  
  
  Frequently asked questions
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;What is the orchestrator pattern in multi-agent systems?&lt;/strong&gt;&lt;br&gt;
One agent receives a request and delegates sub-tasks to specialized remote agents, then assembles their results. The orchestrator holds the plan; the specialists do focused work. In A2A the orchestrator is simply a client to each specialist.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;When should I use parallel vs sequential delegation?&lt;/strong&gt;&lt;br&gt;
Parallel when sub-tasks don't depend on each other — it's faster. Sequential when later work needs earlier results. Most real workflows mix both.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Do I always need a central orchestrator?&lt;/strong&gt;&lt;br&gt;
No. Agents can delegate peer-to-peer, since client and remote agent are roles rather than fixed types. Peer delegation is more resilient and avoids a bottleneck, but it's harder to trace end to end.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How do orchestrators find the right agent?&lt;/strong&gt;&lt;br&gt;
By matching a task to skills advertised in Agent Cards, rather than by knowing fixed endpoints. Registries extend this further. The test: can you add a new specialist without editing the orchestrator?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Is multi-agent always better than one agent?&lt;/strong&gt;&lt;br&gt;
No. Every delegation adds a network hop and usually another model call, so multi-agent workflows can be slower and costlier. Reach for it when specialization or scale genuinely earns the overhead.&lt;/p&gt;




&lt;h3&gt;
  
  
  More in this series
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;A2A vs MCP&lt;/strong&gt; — A2A vs MCP: The Two Protocols Behind Every Serious AI Agent System&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;What Is A2A?&lt;/strong&gt; — What Is the Agent2Agent Protocol? A Complete Introduction to A2A&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The Agent Card&lt;/strong&gt; — The Agent Card: How AI Agents Discover Each Other&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Want to go deeper?
&lt;/h3&gt;

&lt;p&gt;I wrote two guides on this.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://promptmasterstore.gumroad.com/l/a2afree" rel="noopener noreferrer"&gt;A2A Quick-Start&lt;/a&gt; — free, 6 pages.&lt;/strong&gt; The Agent2Agent protocol in 15 minutes: what it is, the five building blocks, the task lifecycle, and where MCP fits.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://promptmasterstore.gumroad.com/l/a2a" rel="noopener noreferrer"&gt;A2A: The Complete Guide&lt;/a&gt; — 42 pages.&lt;/strong&gt; 15 chapters, 5 appendices. Discovery, security, building your first agent with the SDK, orchestration patterns, extensions and AP2, production and scaling — plus a full worked example of two agents talking and a 30-day adoption path.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Independent educational content. Not affiliated with, endorsed by, or sponsored by Google, the Linux Foundation, Anthropic, or any vendor named. A2A and MCP are evolving specifications — confirm details against the official specification for your target version.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>agents</category>
      <category>architecture</category>
      <category>softwaredesign</category>
    </item>
    <item>
      <title>Securing Agent-to-Agent Communication: OAuth, JWT, and Zero Trust</title>
      <dc:creator>PromptMaster</dc:creator>
      <pubDate>Sat, 18 Jul 2026 14:37:48 +0000</pubDate>
      <link>https://dev.to/promptmaster/securing-agent-to-agent-communication-oauth-jwt-and-zero-trust-274b</link>
      <guid>https://dev.to/promptmaster/securing-agent-to-agent-communication-oauth-jwt-and-zero-trust-274b</guid>
      <description>&lt;p&gt;&lt;em&gt;The moment you make an agent callable over A2A, you open a door. Here's how to make sure only the right callers walk through it.&lt;/em&gt;&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;A2A builds authentication on OAuth 2.0 and JSON Web Tokens&lt;/strong&gt; — the same standards that protect ordinary web APIs. An agent proves who it is and is granted scoped access without ever sharing a password or private credential.&lt;/p&gt;

&lt;p&gt;An Agent Card declares which authentication schemes the remote agent requires. The client obtains the appropriate token and presents it with every request; the remote agent validates it before doing any work.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The safest default is zero trust: assume every peer is untrusted until it proves otherwise, on every request.&lt;/strong&gt; The agent talking to you now may not be the one that talked to you a moment ago.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why this stops being optional immediately
&lt;/h2&gt;

&lt;p&gt;The moment agents from different teams or vendors interact, security stops being a later concern. When you make an agent callable over A2A, you are opening a door into whatever that agent can do — and whatever its tools can reach.&lt;/p&gt;

&lt;p&gt;A hard-won lesson from production agent systems: &lt;strong&gt;the tools and endpoints an agent exposes are the biggest attack surface in the whole architecture.&lt;/strong&gt; An agent that blindly executes what a peer sends is a liability, however well-behaved that peer is supposed to be.&lt;/p&gt;

&lt;h2&gt;
  
  
  How agents authenticate
&lt;/h2&gt;

&lt;p&gt;The flow is standard OAuth, which is exactly the point:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The remote agent's &lt;strong&gt;Agent Card declares&lt;/strong&gt; the authentication schemes it requires.&lt;/li&gt;
&lt;li&gt;The client &lt;strong&gt;reads those requirements&lt;/strong&gt; and obtains the appropriate token — typically an OAuth 2.0 access token.&lt;/li&gt;
&lt;li&gt;The client &lt;strong&gt;presents the token&lt;/strong&gt; with each request.&lt;/li&gt;
&lt;li&gt;The remote agent &lt;strong&gt;validates it&lt;/strong&gt; before doing any work.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Because this is standard OAuth, it plugs directly into existing identity providers rather than requiring a new trust system. You inherit rotation, revocation, and auditing from infrastructure you already run.&lt;/p&gt;

&lt;h2&gt;
  
  
  The three mechanisms
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;OAuth 2.0&lt;/strong&gt; — for obtaining and presenting scoped access tokens.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;JSON Web Tokens&lt;/strong&gt; — for compact, verifiable, signed credentials.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Signed Agent Cards&lt;/strong&gt; — so a client can verify a card's authenticity before trusting its endpoint.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That third one deserves attention. A card tells a client where to send work and how to authenticate. An attacker who can serve a convincing card can redirect that work — so wherever trust matters, verify the card rather than taking it at face value.&lt;/p&gt;

&lt;h2&gt;
  
  
  Authenticate proves who; authorize decides what
&lt;/h2&gt;

&lt;p&gt;Authentication proves identity. Authorization decides what that identity may do. Conflating them is how agents end up with far more access than any single task requires.&lt;/p&gt;

&lt;p&gt;A remote agent should grant a client only the access a given task needs, and no more. Scoped tokens make this natural: a client delegating a research task receives a token good for that, not blanket access to everything the agent can do.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Least privilege matters as much between agents*as it does between users and systems.&lt;/strong&gt;*&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Zero trust, and why per-session auth isn't enough
&lt;/h2&gt;

&lt;p&gt;The safest default in a multi-agent system is to assume every peer is untrusted until it proves otherwise — on every request, not once per session.&lt;/p&gt;

&lt;p&gt;That sounds harsh until you consider what changes underneath you. An agent you call today may be operated by another team or company tomorrow. A token valid a minute ago may have been revoked. The peer on the other end of this call may not be the one from the last call.&lt;/p&gt;

&lt;p&gt;Re-verifying identity and authorization per call is what lets agents from different trust domains collaborate without exposing each other to risk. It is simply how the rest of secure computing already works.&lt;/p&gt;

&lt;h2&gt;
  
  
  Building a trust boundary
&lt;/h2&gt;

&lt;p&gt;Setting up authentication between agents is mostly a matter of reusing what your organization already has:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Point your agents at your &lt;strong&gt;existing identity provider&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Issue &lt;strong&gt;scoped tokens&lt;/strong&gt; for specific skills.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Validate at the edge&lt;/strong&gt; of every agent, before any work happens.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The boundary you build this way is the same kind that already protects your ordinary services — which means your existing security practice, tooling, and audits apply unchanged.&lt;/p&gt;

&lt;h2&gt;
  
  
  Five mistakes that open doors
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Implicit trust.&lt;/strong&gt; Treating any agent that speaks A2A as safe. Authenticate and authorize every caller, every time.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Over-broad tokens.&lt;/strong&gt; Handing a peer a token that grants far more than the task needs. Scope tokens to the specific skill being used.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Unvalidated input.&lt;/strong&gt; Acting on incoming Parts without checking them. A file or data Part from a peer is untrusted input like any other.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No rate limits.&lt;/strong&gt; Leaving an exposed agent open to unbounded calls, whether by accident or abuse.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Session-only auth.&lt;/strong&gt; Verifying identity once and trusting it thereafter, when the peer on the other end can change between calls.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  A security checklist
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Serve only &lt;strong&gt;signed Agent Cards&lt;/strong&gt; where trust matters; verify them client-side.&lt;/li&gt;
&lt;li&gt;Require authentication on every endpoint, and &lt;strong&gt;validate the token on every request&lt;/strong&gt; rather than once per session.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Scope authorization to the specific task&lt;/strong&gt;; never hand a peer broad access.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Validate and sanitize all incoming Parts&lt;/strong&gt; before acting on them.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Rate-limit and set timeouts&lt;/strong&gt;, and log every task with a correlation id for later tracing.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Design for the agent you cannot see
&lt;/h2&gt;

&lt;p&gt;In production, some agents you interact with will be operated by other teams or companies. Assume you cannot inspect them, cannot fix them, and cannot rely on them behaving well.&lt;/p&gt;

&lt;p&gt;Defensive clients, strict validation, and graceful degradation are what keep your system stable when a peer misbehaves. The protocol gives you the mechanisms — using them is on you.&lt;/p&gt;

&lt;h2&gt;
  
  
  Frequently asked questions
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;How does authentication work in A2A?&lt;/strong&gt;&lt;br&gt;
A2A uses OAuth 2.0 and JSON Web Tokens. The remote agent's Agent Card declares its required authentication schemes; the client obtains a scoped access token and presents it with each request; the remote agent validates it before doing any work.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What is a signed Agent Card and why does it matter?&lt;/strong&gt;&lt;br&gt;
A cryptographically signed card lets a client verify it genuinely belongs to the claimed agent. Since a card tells clients where to send work and how to authenticate, an attacker serving a fake card could redirect that work. Verify cards wherever trust matters.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Should I authenticate once per session or per request?&lt;/strong&gt;&lt;br&gt;
Per request. In a multi-agent system the peer talking to you now may not be the one from a moment ago, tokens may have been revoked, and agents may change hands between teams or companies. Per-call verification is the only safe default.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Is A2A secure by default?&lt;/strong&gt;&lt;br&gt;
The protocol provides the mechanisms — OAuth 2.0, JWT, signed cards, scoped authorization — but using them is on you. An agent that skips validation, uses broad tokens, or trusts peers implicitly is exposed regardless of what the protocol supports.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What's the biggest security risk in a multi-agent system?&lt;/strong&gt;&lt;br&gt;
The tools and endpoints your agents expose. Making an agent callable opens a door into everything it can do and everything its tools can reach. Validate every request, authenticate before acting, rate-limit, and never trust input just because it came from another agent.&lt;/p&gt;




&lt;h3&gt;
  
  
  More in this series
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;A2A vs MCP&lt;/strong&gt; — A2A vs MCP: The Two Protocols Behind Every Serious AI Agent System&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;What Is A2A?&lt;/strong&gt; — What Is the Agent2Agent Protocol? A Complete Introduction to A2A&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The Agent Card&lt;/strong&gt; — The Agent Card: How AI Agents Discover Each Other&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Want to go deeper?
&lt;/h3&gt;

&lt;p&gt;I wrote two guides on this.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://promptmasterstore.gumroad.com/l/a2afree" rel="noopener noreferrer"&gt;A2A Quick-Start&lt;/a&gt; — free, 6 pages.&lt;/strong&gt; The Agent2Agent protocol in 15 minutes: what it is, the five building blocks, the task lifecycle, and where MCP fits.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://promptmasterstore.gumroad.com/l/a2a" rel="noopener noreferrer"&gt;A2A: The Complete Guide&lt;/a&gt; — 42 pages.&lt;/strong&gt; 15 chapters, 5 appendices. Discovery, security, building your first agent with the SDK, orchestration patterns, extensions and AP2, production and scaling — plus a full worked example of two agents talking and a 30-day adoption path.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Independent educational content. Not affiliated with, endorsed by, or sponsored by Google, the Linux Foundation, Anthropic, or any vendor named. A2A and MCP are evolving specifications — confirm details against the official specification for your target version.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>security</category>
      <category>agents</category>
      <category>oauth</category>
    </item>
    <item>
      <title>Build Your First A2A Agent in 8 Steps</title>
      <dc:creator>PromptMaster</dc:creator>
      <pubDate>Sat, 18 Jul 2026 14:36:48 +0000</pubDate>
      <link>https://dev.to/promptmaster/build-your-first-a2a-agent-in-8-steps-1fel</link>
      <guid>https://dev.to/promptmaster/build-your-first-a2a-agent-in-8-steps-1fel</guid>
      <description>&lt;p&gt;&lt;em&gt;Making an agent speak A2A is roughly a day's work with an official SDK. Here's the path from nothing to a discoverable, secured, interoperable agent.&lt;/em&gt;&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Making an existing agent speak A2A takes eight steps:&lt;/strong&gt; install the SDK, define an Agent Card, implement an executor, wire the server, handle the task lifecycle, enable discovery, secure the endpoint, and test interoperability.&lt;/p&gt;

&lt;p&gt;You rarely implement the wire protocol by hand. Official SDKs ship for Python, JavaScript, Java, Go, and .NET, and they handle JSON-RPC parsing, the task state machine, card serving, and SSE streaming.&lt;/p&gt;

&lt;p&gt;What you write is the &lt;strong&gt;executor&lt;/strong&gt; — the code that receives a task's Message, does the actual work, reports progress, and returns Artifacts.&lt;/p&gt;




&lt;h2&gt;
  
  
  What you're actually building
&lt;/h2&gt;

&lt;p&gt;A2A adoption isn't a rewrite. You are giving an agent you already have a front door: a card that describes it, an endpoint that accepts tasks, and honest lifecycle reporting. Its model, framework, prompts, and tools stay exactly as they are.&lt;/p&gt;

&lt;p&gt;That's worth internalizing before you start, because it changes how much you attempt on day one. The goal is not a multi-agent architecture. The goal is one agent that any compliant client can discover and drive.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 1 — Install the SDK
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Python example&lt;/span&gt;
pip &lt;span class="nb"&gt;install &lt;/span&gt;a2a-sdk

&lt;span class="c"&gt;# the SDK provides server scaffolding, the Agent Card model,&lt;/span&gt;
&lt;span class="c"&gt;# an executor interface, and the JSON-RPC + SSE plumbing&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;SDKs exist for Python, JavaScript, Java, Go, and .NET. Pick the one your agent already lives in — there's no benefit to introducing a new language at the protocol boundary.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 2 — Define your Agent Card
&lt;/h2&gt;

&lt;p&gt;Describe your agent's identity and skills. This is the contract every client plans against, so write the skills the way you'd write public API docs — a stable id, a plain-language description, expected inputs, and the shape of what comes back.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Research Agent"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"description"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Gathers and summarizes sources on a topic"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"version"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"1.0.0"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"url"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://agent.example.com/a2a"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"skills"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"research"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"description"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Research a topic and return a sourced summary"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"capabilities"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"streaming"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A skill described as "processing" tells a caller nothing. Be specific here or your agent is invisible in practice.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 3 — Implement an executor
&lt;/h2&gt;

&lt;p&gt;This is where your real logic lives, and it's the only part of the protocol you genuinely own. The executor receives a task's incoming Message, does the work — often by calling your model and your MCP tools — reports progress, and returns Artifacts.&lt;/p&gt;

&lt;p&gt;Keep your capability inside a clean executor rather than scattered across handler code. It makes the agent easy to reason about, easy to test directly, and unaffected when the protocol layer changes underneath it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 4 — Wire the request handler and server
&lt;/h2&gt;

&lt;p&gt;The SDK gives you server scaffolding; you connect your executor to it and start listening for A2A calls. There's little to invent here, which is the point — the plumbing is the same for everyone, and that's what makes agents interchangeable.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 5 — Handle the task lifecycle
&lt;/h2&gt;

&lt;p&gt;Emit &lt;code&gt;working&lt;/code&gt; when you start, and &lt;strong&gt;always&lt;/strong&gt; reach a terminal state — &lt;code&gt;completed&lt;/code&gt;, &lt;code&gt;failed&lt;/code&gt;, or &lt;code&gt;canceled&lt;/code&gt; — on every path.&lt;/p&gt;

&lt;p&gt;This is the single most common bug in first implementations: the work finishes internally, no terminal state is reported, and the caller hangs forever. If your agent might need more information, use &lt;code&gt;input-required&lt;/code&gt; to pause and ask rather than guessing or failing.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;If a client of yours hangs, check the terminal state first.*It's the answer nine times out of ten.&lt;/strong&gt;*&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Step 6 — Enable discovery
&lt;/h2&gt;

&lt;p&gt;Serve the Agent Card at the well-known path. Then prove it, before you wire up anything else:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl https://your-agent.example.com/.well-known/agent-card.json
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A running agent that doesn't serve its card cannot be discovered. It doesn't matter how well it works — if clients look at the well-known path and find nothing, the agent doesn't exist as far as the ecosystem is concerned.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 7 — Secure the endpoint
&lt;/h2&gt;

&lt;p&gt;You just opened a door. Wire the endpoint to your existing identity provider, require a scoped token on every request, and validate it before any work happens.&lt;/p&gt;

&lt;p&gt;Because it's standard OAuth 2.0 and JWT, you inherit rotation, revocation, and auditing from infrastructure you already run — you're not inventing a private trust scheme. Validate every incoming Part, rate-limit, and never trust input just because it arrived from another agent.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 8 — Test interoperability
&lt;/h2&gt;

&lt;p&gt;The whole point of A2A is that &lt;em&gt;any&lt;/em&gt; compliant client can talk to your agent. So test with one as soon as it runs:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Fetch the card.&lt;/li&gt;
&lt;li&gt;Send a message and open a task.&lt;/li&gt;
&lt;li&gt;Watch the task move through its states.&lt;/li&gt;
&lt;li&gt;Confirm you get a well-formed Artifact back.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If a generic A2A client can drive your agent end to end without special knowledge, you've built something that plugs into the entire ecosystem — not just your own code. That's the difference between an agent that works and an agent that's interoperable.&lt;/p&gt;

&lt;h2&gt;
  
  
  What the SDK handles, and what you own
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;The SDK&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;You&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Protocol&lt;/td&gt;
&lt;td&gt;JSON-RPC parsing, task state machine, card serving, SSE streaming, transport&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Substance&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;td&gt;Skills you declare, executor logic, tools it calls, auth policy you enforce&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Keeping that division clean means protocol changes rarely touch your logic, and your logic rarely has to think about the protocol.&lt;/p&gt;

&lt;h2&gt;
  
  
  From hello-world to useful
&lt;/h2&gt;

&lt;p&gt;A first agent that echoes a message proves the plumbing. A useful one does real work behind the same interface.&lt;/p&gt;

&lt;p&gt;The step between them is almost entirely in the executor: wire it to your model, give it the MCP tools it needs, and have it report honest progress and return well-formed Artifacts. Keep the protocol surface unchanged as you add capability, so the agent stays interoperable while it grows more capable.&lt;/p&gt;

&lt;h2&gt;
  
  
  Frequently asked questions
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;How long does it take to make an agent speak A2A?&lt;/strong&gt;&lt;br&gt;
Roughly a day with an official SDK for an agent you already have. The SDK handles the protocol; you write the executor and the card. The first hello-world server comes together in well under an hour.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Which languages have A2A SDKs?&lt;/strong&gt;&lt;br&gt;
Official SDKs ship for Python, JavaScript, Java, Go, and .NET. Use whichever your agent already lives in.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Do I need to rewrite my agent to adopt A2A?&lt;/strong&gt;&lt;br&gt;
No. A2A is a messaging layer, not a framework. You give your existing agent an Agent Card and an A2A endpoint; its model, framework, prompts, and internal logic stay exactly as they are.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What is an A2A executor?&lt;/strong&gt;&lt;br&gt;
The function that handles an incoming task: it receives the task's Message, does the actual work (often calling your model and MCP tools), reports progress, and returns Artifacts. It's the part you write — the SDK handles everything around it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How do I know my agent is actually interoperable?&lt;/strong&gt;&lt;br&gt;
Drive it with a generic A2A client, not your own harness. Fetch the card, open a task, watch the states, and confirm a well-formed Artifact comes back. If a client that knows nothing about your code can complete a task, you're interoperable.&lt;/p&gt;




&lt;h3&gt;
  
  
  More in this series
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;A2A vs MCP&lt;/strong&gt; — A2A vs MCP: The Two Protocols Behind Every Serious AI Agent System&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;What Is A2A?&lt;/strong&gt; — What Is the Agent2Agent Protocol? A Complete Introduction to A2A&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The Agent Card&lt;/strong&gt; — The Agent Card: How AI Agents Discover Each Other&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Want to go deeper?
&lt;/h3&gt;

&lt;p&gt;I wrote two guides on this.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://promptmasterstore.gumroad.com/l/a2afree" rel="noopener noreferrer"&gt;A2A Quick-Start&lt;/a&gt; — free, 6 pages.&lt;/strong&gt; The Agent2Agent protocol in 15 minutes: what it is, the five building blocks, the task lifecycle, and where MCP fits.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://promptmasterstore.gumroad.com/l/a2a" rel="noopener noreferrer"&gt;A2A: The Complete Guide&lt;/a&gt; — 42 pages.&lt;/strong&gt; 15 chapters, 5 appendices. Discovery, security, building your first agent with the SDK, orchestration patterns, extensions and AP2, production and scaling — plus a full worked example of two agents talking and a 30-day adoption path.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Independent educational content. Not affiliated with, endorsed by, or sponsored by Google, the Linux Foundation, Anthropic, or any vendor named. A2A and MCP are evolving specifications — confirm details against the official specification for your target version.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>agents</category>
      <category>python</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Understanding the A2A Task Lifecycle (and the Bug That Hangs Every Client)</title>
      <dc:creator>PromptMaster</dc:creator>
      <pubDate>Sat, 18 Jul 2026 07:36:53 +0000</pubDate>
      <link>https://dev.to/promptmaster/understanding-the-a2a-task-lifecycle-and-the-bug-that-hangs-every-client-2127</link>
      <guid>https://dev.to/promptmaster/understanding-the-a2a-task-lifecycle-and-the-bug-that-hangs-every-client-2127</guid>
      <description>&lt;p&gt;&lt;em&gt;A2A is task-centric. Once a client sends work, that work becomes a Task with a lifecycle you can observe from submission to completion — if your agent reports it honestly.&lt;/em&gt;&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;A Task is the central, stateful unit of work in A2A.&lt;/strong&gt; It is created when a client sends its first Message and moves through defined states until it reaches a terminal one.&lt;/p&gt;

&lt;p&gt;The states are: &lt;code&gt;submitted&lt;/code&gt;, &lt;code&gt;working&lt;/code&gt;, &lt;code&gt;input-required&lt;/code&gt;, &lt;code&gt;completed&lt;/code&gt;, &lt;code&gt;failed&lt;/code&gt;, and &lt;code&gt;canceled&lt;/code&gt;. The last three are terminal.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The rule that matters most: every Task must reach a terminal state.&lt;/strong&gt; A client that never hears one waits forever — and that is the single most common bug in early A2A implementations.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why A2A models tasks instead of calls
&lt;/h2&gt;

&lt;p&gt;The instinct from REST is to treat each call as independent: send a request, get a response, done. Agent work rarely behaves like that.&lt;/p&gt;

&lt;p&gt;A report might take minutes. A data pipeline might take an hour. A design task might need a clarifying question halfway through. Modeling all of that as a single request-response call means pretending every call returns at once — and then bolting on workarounds when it doesn't.&lt;/p&gt;

&lt;p&gt;A2A models it honestly instead: work becomes a Task with an explicit state machine, so both sides always agree on where things stand.&lt;/p&gt;

&lt;h2&gt;
  
  
  The six states
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;submitted&lt;/strong&gt; — the Task has been received but work has not yet begun.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;working&lt;/strong&gt; — the remote agent is actively processing the Task.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;input-required&lt;/strong&gt; — the agent needs more information and is waiting on the client before it can continue.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;completed&lt;/strong&gt; — the Task finished successfully; Artifacts are available.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;failed&lt;/strong&gt; — the Task ended in error.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;canceled&lt;/strong&gt; — the Task was stopped by request.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The last three are terminal: once a Task reaches one, it is over.&lt;/p&gt;

&lt;h2&gt;
  
  
  The four methods you need
&lt;/h2&gt;

&lt;p&gt;A client starts a Task by sending a Message; the response carries the Task, including its identifier and current state. From there:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight conf"&gt;&lt;code&gt;&lt;span class="n"&gt;message&lt;/span&gt;/&lt;span class="n"&gt;send&lt;/span&gt;     &lt;span class="c"&gt;# send a message; create or continue a task
&lt;/span&gt;&lt;span class="n"&gt;message&lt;/span&gt;/&lt;span class="n"&gt;stream&lt;/span&gt;   &lt;span class="c"&gt;# send a message and subscribe to live updates
&lt;/span&gt;&lt;span class="n"&gt;tasks&lt;/span&gt;/&lt;span class="n"&gt;get&lt;/span&gt;        &lt;span class="c"&gt;# retrieve a task's current state and artifacts
&lt;/span&gt;&lt;span class="n"&gt;tasks&lt;/span&gt;/&lt;span class="n"&gt;cancel&lt;/span&gt;     &lt;span class="c"&gt;# cancel an in-progress task
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That's the whole surface. Most of the protocol's power comes from what these four methods operate on — a stateful, observable Task — not from method count.&lt;/p&gt;

&lt;h2&gt;
  
  
  input-required is a feature, not an error
&lt;/h2&gt;

&lt;p&gt;Real delegation is rarely one-shot. The &lt;code&gt;input-required&lt;/code&gt; state lets a remote agent pause and ask a clarifying question mid-task, then resume when the client answers.&lt;/p&gt;

&lt;p&gt;Follow one task through to see it: a client asks an agent to generate a report; the task is created as &lt;code&gt;submitted&lt;/code&gt;. The agent begins and moves it to &lt;code&gt;working&lt;/code&gt;. Partway through it realizes it needs a date range, so it moves the task to &lt;code&gt;input-required&lt;/code&gt; and asks. The client supplies the range; the task returns to &lt;code&gt;working&lt;/code&gt;. When the report is ready, the agent attaches it as an Artifact and moves the task to &lt;code&gt;completed&lt;/code&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;event: task state -&amp;gt; working
event: message  -&amp;gt; "Which time range should I cover?"
event: task state -&amp;gt; input-required

# client replies on the SAME task
event: task state -&amp;gt; working
event: task state -&amp;gt; completed
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Same task throughout. No new task, no lost context. That turns a rigid call into a genuine collaboration.&lt;/p&gt;

&lt;h2&gt;
  
  
  The bug that hangs every client
&lt;/h2&gt;

&lt;p&gt;Here it is, plainly: &lt;strong&gt;a remote agent finishes its work but never reports a terminal state, so the client waits indefinitely.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The work completed. The logs look fine. The agent is idle and happy. And the caller is still sitting there, because as far as the protocol is concerned, that Task never ended.&lt;/p&gt;

&lt;p&gt;Always emit a terminal event — including on error paths, especially on error paths. If a client of yours hangs, this is the first thing to check, and it will usually be the answer.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Every Task must reach a terminal state.*Not most tasks. Every task, on every path.&lt;/strong&gt;*&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Three ways to track a task
&lt;/h2&gt;

&lt;p&gt;The underlying Task is identical in all three; only how you receive updates changes.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;When to use&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;How&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Polling&lt;/td&gt;
&lt;td&gt;Simple, short work where live progress doesn't matter&lt;/td&gt;
&lt;td&gt;Call &lt;code&gt;tasks/get&lt;/code&gt; by task id&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Streaming&lt;/td&gt;
&lt;td&gt;Interactive work someone is waiting on&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;message/stream&lt;/code&gt; over Server-Sent Events&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Push notifications&lt;/td&gt;
&lt;td&gt;Long, unattended work — minutes to hours&lt;/td&gt;
&lt;td&gt;Register a callback; disconnect; get notified on state change&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;For the longest jobs, prefer push notifications over holding a stream open for hours. You avoid a fragile long-lived connection and the task model doesn't change.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why an explicit lifecycle pays off
&lt;/h2&gt;

&lt;p&gt;Modeling tasks as stateful, observable objects is what makes A2A suitable for real work rather than toy demos:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You can build &lt;strong&gt;dashboards&lt;/strong&gt; showing every in-flight task.&lt;/li&gt;
&lt;li&gt;You can write &lt;strong&gt;retry logic&lt;/strong&gt; that reacts to &lt;code&gt;failed&lt;/code&gt; states.&lt;/li&gt;
&lt;li&gt;You can build &lt;strong&gt;orchestration&lt;/strong&gt; that waits on &lt;code&gt;completed&lt;/code&gt; before triggering the next step.&lt;/li&gt;
&lt;li&gt;You can &lt;strong&gt;trace a failure&lt;/strong&gt; across every agent a task touched, instead of guessing.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The lifecycle is not bureaucracy. It is the observability layer that lets multi-agent systems be operated, not just launched.&lt;/p&gt;

&lt;h2&gt;
  
  
  Contexts group related tasks
&lt;/h2&gt;

&lt;p&gt;Real work is rarely a single task. A2A lets related tasks share a context, so an agent can connect a follow-up request to earlier ones and reason about the whole thread rather than each request in isolation.&lt;/p&gt;

&lt;p&gt;This is what turns a sequence of one-off delegations into a coherent, ongoing collaboration — the agent equivalent of remembering the conversation so far.&lt;/p&gt;

&lt;h2&gt;
  
  
  Frequently asked questions
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;What are the A2A task states?&lt;/strong&gt;&lt;br&gt;
submitted, working, input-required, completed, failed, and canceled. The last three are terminal — once a task reaches one, it's over.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What does input-required mean in A2A?&lt;/strong&gt;&lt;br&gt;
The remote agent needs more information and has paused, waiting on the client. It's a feature, not an error: it lets an agent ask a clarifying question mid-task and resume on the same task when the client answers.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why does my A2A client hang forever?&lt;/strong&gt;&lt;br&gt;
Almost always because the remote agent finished its work but never emitted a terminal state. The protocol has no way to know the task ended, so the client keeps waiting. Always emit completed, failed, or canceled — on every path, including errors.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Should I poll or stream A2A tasks?&lt;/strong&gt;&lt;br&gt;
Poll with tasks/get for simple short work. Stream with message/stream for interactive work someone is waiting on. Use push notifications for long unattended jobs where holding a connection open for hours is wasteful.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Is an A2A task the same as an HTTP request?&lt;/strong&gt;&lt;br&gt;
No. An HTTP request is stateless and returns once. An A2A task is stateful, can run for a long time, can pause for input, and can stream many updates before reaching a terminal state.&lt;/p&gt;




&lt;h3&gt;
  
  
  More in this series
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;A2A vs MCP&lt;/strong&gt; — A2A vs MCP: The Two Protocols Behind Every Serious AI Agent System&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;What Is A2A?&lt;/strong&gt; — What Is the Agent2Agent Protocol? A Complete Introduction to A2A&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The Agent Card&lt;/strong&gt; — The Agent Card: How AI Agents Discover Each Other&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Want to go deeper?
&lt;/h3&gt;

&lt;p&gt;I wrote two guides on this.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://promptmasterstore.gumroad.com/l/a2afree" rel="noopener noreferrer"&gt;A2A Quick-Start&lt;/a&gt; — free, 6 pages.&lt;/strong&gt; The Agent2Agent protocol in 15 minutes: what it is, the five building blocks, the task lifecycle, and where MCP fits.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://promptmasterstore.gumroad.com/l/a2a" rel="noopener noreferrer"&gt;A2A: The Complete Guide&lt;/a&gt; — 42 pages.&lt;/strong&gt; 15 chapters, 5 appendices. Discovery, security, building your first agent with the SDK, orchestration patterns, extensions and AP2, production and scaling — plus a full worked example of two agents talking and a 30-day adoption path.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Independent educational content. Not affiliated with, endorsed by, or sponsored by Google, the Linux Foundation, Anthropic, or any vendor named. A2A and MCP are evolving specifications — confirm details against the official specification for your target version.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>agents</category>
      <category>api</category>
      <category>architecture</category>
    </item>
    <item>
      <title>The Agent Card: How AI Agents Discover Each Other</title>
      <dc:creator>PromptMaster</dc:creator>
      <pubDate>Sat, 18 Jul 2026 07:36:01 +0000</pubDate>
      <link>https://dev.to/promptmaster/the-agent-card-how-ai-agents-discover-each-other-4ch</link>
      <guid>https://dev.to/promptmaster/the-agent-card-how-ai-agents-discover-each-other-4ch</guid>
      <description>&lt;p&gt;&lt;em&gt;Before one agent can delegate to another, it has to find it and know what it can do. The Agent Card is how.&lt;/em&gt;&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;The Agent Card is a JSON document that describes an A2A agent: its identity, endpoint, authentication requirements, and — most importantly — the skills it offers.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;It is published at a well-known path, &lt;code&gt;/.well-known/agent-card.json&lt;/code&gt;, so any client that knows an agent's base address can fetch it and immediately learn how to work with that agent.&lt;/p&gt;

&lt;p&gt;It is the first thing a client fetches and the contract it plans against. An agent that doesn't serve a card is undiscoverable; an agent whose skills are described vaguely is undiscoverable in practice.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why discovery has to come first
&lt;/h2&gt;

&lt;p&gt;Before a client can send any work, it needs to know three things: that a remote agent exists, what it is capable of, and how to talk to it. Without a standard way to answer those questions, you're back to hard-coding endpoints and reading someone else's documentation by hand.&lt;/p&gt;

&lt;p&gt;The Agent Card answers all three in one fetch. It is a JSON document the remote agent publishes so that any client — including one built by a team that has never spoken to yours — can read its identity and capabilities without a private arrangement.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where the card lives
&lt;/h2&gt;

&lt;p&gt;By convention, an agent serves its card at a well-known path, the same idea as the web's well-known URLs. This is what makes discovery predictable rather than a matter of asking around:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# fetch a remote agent's public card&lt;/span&gt;
curl https://agent.example.com/.well-known/agent-card.json
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If you can't curl the card back, nothing else works. This is the single most common first-run mistake: a perfectly good agent, running fine, that no client can find because the card isn't served where clients look.&lt;/p&gt;

&lt;h2&gt;
  
  
  What the card contains
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Identity&lt;/strong&gt; — a name, description, provider, and version for the agent.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Endpoint&lt;/strong&gt; — the URL where the agent receives A2A requests.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Skills&lt;/strong&gt; — the discrete capabilities the agent offers, each with an id, description, and often example inputs and outputs.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Authentication&lt;/strong&gt; — the security schemes the agent requires, so a client knows how to authenticate before sending work.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Capabilities&lt;/strong&gt; — protocol features the agent supports, such as streaming or push notifications.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  A minimal card
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Research Agent"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"description"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Gathers and summarizes sources on a topic"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"version"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"1.2.0"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"url"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://agent.example.com/a2a"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"skills"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"research"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"description"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Research a topic and return a sourced summary"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"capabilities"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"streaming"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Skills are the part that matters most
&lt;/h2&gt;

&lt;p&gt;The skills list is the heart of the card. It is what lets a client — or an orchestrating agent choosing among many — decide whether this agent is the right one for a job.&lt;/p&gt;

&lt;p&gt;A skill described as "processing" tells a caller nothing. One described as "extract line items from an invoice PDF and return them as structured data" tells a caller everything. The difference is whether your agent gets used.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Give each skill a &lt;strong&gt;stable id&lt;/strong&gt; and a plain-language description.&lt;/li&gt;
&lt;li&gt;State the &lt;strong&gt;inputs it expects&lt;/strong&gt; and the shape of what it returns.&lt;/li&gt;
&lt;li&gt;Include a &lt;strong&gt;concrete example&lt;/strong&gt; where the behavior is not obvious.&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Treat skill descriptions like public API docs.*To the rest of the ecosystem, that is exactly what they are.&lt;/strong&gt;*&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Public and authenticated cards
&lt;/h2&gt;

&lt;p&gt;An agent can expose a basic public card to anyone and a richer, authenticated card to clients that have proven their identity.&lt;/p&gt;

&lt;p&gt;The public card is enough to discover the agent and learn how to authenticate. The authenticated card can reveal additional skills or detail reserved for trusted callers. This two-tier approach lets an agent be discoverable without exposing everything it can do to the entire internet.&lt;/p&gt;

&lt;h2&gt;
  
  
  Signed cards and trust
&lt;/h2&gt;

&lt;p&gt;As the protocol matured, support for cryptographically signed Agent Cards was added, letting a client verify that a card genuinely belongs to the agent it claims to.&lt;/p&gt;

&lt;p&gt;This matters more than it sounds. A card tells a client where to send work and how to authenticate — an attacker who can serve a convincing card can redirect that work. In any setting where trust matters, prefer verifiable cards over ones taken at face value.&lt;/p&gt;

&lt;h2&gt;
  
  
  Keeping cards current
&lt;/h2&gt;

&lt;p&gt;An Agent Card is a living document. When you add a skill, change an endpoint, or alter your auth requirements, the card must move with the agent — a stale card sends clients to the wrong place or hides new capability.&lt;/p&gt;

&lt;p&gt;Version your card alongside your agent, and treat a card change as part of shipping, not an afterthought. Clients read the version and capabilities you advertise, so keeping them honest is what keeps interoperability working.&lt;/p&gt;

&lt;h2&gt;
  
  
  Discovery at scale
&lt;/h2&gt;

&lt;p&gt;As the number of agents grows, hard-coding endpoints stops scaling. This is where cards earn their keep: an orchestrator can select an agent by &lt;strong&gt;matching a task to advertised skills&lt;/strong&gt; rather than by knowing a fixed address.&lt;/p&gt;

&lt;p&gt;Registries and directories of A2A agents extend this further, letting systems find capable agents dynamically — the agent equivalent of service discovery in microservices. The practical upshot: a new specialist agent can join your system without anyone editing the orchestrator.&lt;/p&gt;

&lt;h2&gt;
  
  
  Frequently asked questions
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;What is an A2A Agent Card?&lt;/strong&gt;&lt;br&gt;
A JSON document describing an A2A agent's identity, endpoint, authentication requirements, and skills. It's published at /.well-known/agent-card.json so any client can discover the agent and learn how to work with it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Where is the Agent Card served?&lt;/strong&gt;&lt;br&gt;
At the well-known path /.well-known/agent-card.json on the agent's host, following the same convention as other well-known URLs on the web.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What happens if my agent doesn't serve a card?&lt;/strong&gt;&lt;br&gt;
It's undiscoverable. Clients look at the well-known path; if there's nothing there, they can't find the agent, learn its skills, or know how to authenticate — no matter how well the agent works internally.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What is a signed Agent Card?&lt;/strong&gt;&lt;br&gt;
A cryptographically signed card that lets a client verify it genuinely belongs to the agent it claims to. Since a card tells clients where to send work, verification matters wherever trust does.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How do I write good skill descriptions?&lt;/strong&gt;&lt;br&gt;
Like public API documentation: a stable id, a plain-language description of what the skill does, the inputs it expects, the shape of what it returns, and a concrete example when behavior isn't obvious. Vague skills make an agent invisible in practice.&lt;/p&gt;




&lt;h3&gt;
  
  
  More in this series
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;A2A vs MCP&lt;/strong&gt; — A2A vs MCP: The Two Protocols Behind Every Serious AI Agent System&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;What Is A2A?&lt;/strong&gt; — What Is the Agent2Agent Protocol? A Complete Introduction to A2A&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The Task Lifecycle&lt;/strong&gt; — Understanding the A2A Task Lifecycle (and the Bug That Hangs Every Client)&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Want to go deeper?
&lt;/h3&gt;

&lt;p&gt;I wrote two guides on this.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://promptmasterstore.gumroad.com/l/a2afree" rel="noopener noreferrer"&gt;A2A Quick-Start&lt;/a&gt; — free, 6 pages.&lt;/strong&gt; The Agent2Agent protocol in 15 minutes: what it is, the five building blocks, the task lifecycle, and where MCP fits.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://promptmasterstore.gumroad.com/l/a2a" rel="noopener noreferrer"&gt;A2A: The Complete Guide&lt;/a&gt; — 42 pages.&lt;/strong&gt; 15 chapters, 5 appendices. Discovery, security, building your first agent with the SDK, orchestration patterns, extensions and AP2, production and scaling — plus a full worked example of two agents talking and a 30-day adoption path.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Independent educational content. Not affiliated with, endorsed by, or sponsored by Google, the Linux Foundation, Anthropic, or any vendor named. A2A and MCP are evolving specifications — confirm details against the official specification for your target version.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>agents</category>
      <category>api</category>
      <category>json</category>
    </item>
    <item>
      <title>What Is the Agent2Agent Protocol? A Complete Introduction to A2A</title>
      <dc:creator>PromptMaster</dc:creator>
      <pubDate>Sat, 18 Jul 2026 07:34:48 +0000</pubDate>
      <link>https://dev.to/promptmaster/what-is-the-agent2agent-protocol-a-complete-introduction-to-a2a-4p</link>
      <guid>https://dev.to/promptmaster/what-is-the-agent2agent-protocol-a-complete-introduction-to-a2a-4p</guid>
      <description>&lt;p&gt;&lt;em&gt;An open standard lets AI agents from any framework discover each other, delegate work, and collaborate securely. Here's what it is, how it works, and why it matters.&lt;/em&gt;&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;A2A (Agent2Agent) is an open protocol for agent-to-agent communication.&lt;/strong&gt; It lets independent AI agents discover each other, delegate tasks, and exchange results securely — regardless of which framework or vendor built them.&lt;/p&gt;

&lt;p&gt;It was introduced by Google in April 2025, contributed to the Linux Foundation, and has reached a stable 1.0 release with core data models frozen. Official SDKs ship for Python, JavaScript, Java, Go, and .NET.&lt;/p&gt;

&lt;p&gt;Under the hood it reuses standards you already know: HTTP for transport, JSON-RPC 2.0 for requests, Server-Sent Events for streaming, and OAuth 2.0 for authentication. A2A is not a framework — it sits between agents as a messaging layer, so you keep your existing stack.&lt;/p&gt;




&lt;h2&gt;
  
  
  The problem it exists to solve
&lt;/h2&gt;

&lt;p&gt;You have probably built or used an AI agent that does one job well. A customer-service agent answers questions. A research agent gathers sources. A scheduling agent books meetings. Each is capable on its own — and each is trapped inside its own platform.&lt;/p&gt;

&lt;p&gt;The research agent cannot tell the writing agent that the research is done. The support agent cannot hand a refund off to the billing agent. Agents have been smart individually and mute collectively.&lt;/p&gt;

&lt;p&gt;The reason is simple: there has been no shared language. Every agent framework invented its own way of representing tasks, messages, and results. Connecting two agents built on different frameworks meant writing custom glue code for every pair — a brittle integration that broke whenever either side changed.&lt;/p&gt;

&lt;p&gt;That does not scale. Multiply it across a dozen agents from a dozen teams and the integration burden grows quadratically. The agents are not the bottleneck; the connections between them are.&lt;/p&gt;

&lt;h2&gt;
  
  
  The lesson A2A borrowed from the web
&lt;/h2&gt;

&lt;p&gt;We have solved this shape of problem before. The web did not scale because every server spoke a private dialect — it scaled because HTTP gave every server and client a common, framework-agnostic contract. You can point any browser at any web server because both agree on the protocol, not the implementation.&lt;/p&gt;

&lt;p&gt;A2A applies the same idea to agents: a thin, shared protocol so an agent built on any framework can talk to an agent built on any other, without either revealing its internals.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;A2A is to AI agents what HTTP is to web services.*A common protocol, not a common implementation.&lt;/strong&gt;*&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  What the protocol actually standardizes
&lt;/h2&gt;

&lt;p&gt;At its core, A2A defines how one agent (the client) asks another agent (the remote agent) to do work, and how results flow back. It standardizes four things every collaboration needs:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Discovery&lt;/strong&gt; — how an agent advertises who it is and what it can do, so others can find and evaluate it.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Task delegation&lt;/strong&gt; — how a client submits a unit of work and how its progress is tracked to completion.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Communication&lt;/strong&gt; — how the two agents exchange messages and structured results during the work.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Security&lt;/strong&gt; — how agents authenticate to each other and authorize access without sharing credentials.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;One clarification that saves confusion later: &lt;strong&gt;client and remote agent are roles, not types.&lt;/strong&gt; The same agent can be a client when it delegates work and a remote agent when it receives it. In a multi-agent system, agents constantly switch roles depending on who is asking whom.&lt;/p&gt;

&lt;h2&gt;
  
  
  The five building blocks
&lt;/h2&gt;

&lt;p&gt;Almost everything in A2A is assembled from five concepts. Learn these and the rest of the protocol reads like plain English.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. The Agent Card
&lt;/h3&gt;

&lt;p&gt;A JSON document describing an agent: its identity, where to reach it, how to authenticate, and — most importantly — what it can do, expressed as a list of skills. By convention it lives at a well-known path so any client can find it:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl https://agent.example.com/.well-known/agent-card.json
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  2. The Task
&lt;/h3&gt;

&lt;p&gt;The central unit of work. When a client asks a remote agent to do something, that request becomes a Task with its own identifier and a lifecycle you can track from start to finish. Tasks are stateful: they move through defined states, can run for a long time, and can stream updates along the way.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. The Message
&lt;/h3&gt;

&lt;p&gt;A single communication turn between the client and the remote agent — a request, a reply, a clarifying question. Each Message carries a role and one or more Parts.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. The Parts
&lt;/h3&gt;

&lt;p&gt;Typed content inside a Message: a &lt;code&gt;text&lt;/code&gt; part for prose, a &lt;code&gt;file&lt;/code&gt; part for documents or images, a &lt;code&gt;data&lt;/code&gt; part for structured payloads. This typing is what lets agents exchange more than plain strings.&lt;/p&gt;

&lt;h3&gt;
  
  
  5. The Artifact
&lt;/h3&gt;

&lt;p&gt;The durable output a completed Task produces — a report, an image, a dataset. Where Messages are the conversation, Artifacts are the deliverables.&lt;/p&gt;

&lt;p&gt;A client discovers an agent via its card, sends a Message to open a Task, exchanges more Messages as the work proceeds, and receives Artifacts as the Task completes. Five nouns, one clean flow.&lt;/p&gt;

&lt;h2&gt;
  
  
  Built on boring, proven standards
&lt;/h2&gt;

&lt;p&gt;A2A is deliberately unglamorous under the hood, and that is a feature. It reuses the same battle-tested standards that already run the internet:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;HTTP(S)&lt;/strong&gt; for transport.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;JSON-RPC 2.0&lt;/strong&gt; for structured requests and errors.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Server-Sent Events&lt;/strong&gt; for streaming live task updates.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;OAuth 2.0 and JSON Web Tokens&lt;/strong&gt; for authentication.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Nothing exotic. Any engineer who has built a web service already knows the primitives, and every debugging tool they already use works unchanged. That conservatism is a large part of why the protocol was production-ready so quickly.&lt;/p&gt;

&lt;h2&gt;
  
  
  Who governs A2A, and why that matters
&lt;/h2&gt;

&lt;p&gt;A2A was introduced by Google in April 2025 and quickly moved out of any single company's control: it was contributed to the Linux Foundation, which now governs it as a vendor-neutral standard.&lt;/p&gt;

&lt;p&gt;This is not a detail. A protocol controlled by one company gives every competitor a reason to hold back — and agent interoperability is worthless if half the ecosystem refuses to adopt it. Neutral governance removed that objection, which is why you now find A2A supported inside Microsoft Copilot Studio, Azure AI Foundry, Amazon Bedrock AgentCore, and Google ADK simultaneously.&lt;/p&gt;

&lt;p&gt;It reached a stable 1.0 release with core data models frozen. New capability arrives as extensions rather than breaking changes, so what you build against stays standing.&lt;/p&gt;

&lt;h2&gt;
  
  
  How A2A relates to MCP
&lt;/h2&gt;

&lt;p&gt;If you know the Model Context Protocol, the cleanest way to place A2A is alongside it. MCP connects an agent to tools, data, and context — it answers "how does my agent use a resource?" A2A connects an agent to other agents — it answers "how does my agent work with another agent?"&lt;/p&gt;

&lt;p&gt;They are complementary, not competing, and both are now governed under the same foundation. Most serious systems use both: MCP to give each agent its capabilities, A2A to let those agents collaborate.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;MCP gives an agent hands.*A2A gives it colleagues.&lt;/strong&gt;*&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  What A2A is not
&lt;/h2&gt;

&lt;p&gt;It helps to draw the boundary clearly:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Not a framework.&lt;/strong&gt; A2A does not replace LangGraph, CrewAI, or whatever you use. It sits between agents as a messaging layer.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Not a model or a runtime.&lt;/strong&gt; It does not decide how your agent thinks or what it can do.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Not a replacement for MCP.&lt;/strong&gt; Different problem, designed to coexist.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Not a message queue or integration bus.&lt;/strong&gt; It is narrowly a protocol for one agent to discover, delegate to, and collaborate with another.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Everything it deliberately leaves out is something a framework, model, or companion protocol already handles better. That restraint is why it composes so cleanly.&lt;/p&gt;

&lt;h2&gt;
  
  
  Frequently asked questions
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;What is the Agent2Agent protocol?&lt;/strong&gt;&lt;br&gt;
A2A (Agent2Agent) is an open protocol for agent-to-agent communication. It lets independent AI agents discover each other, delegate tasks, and exchange results securely, regardless of which framework or vendor built them. It was introduced by Google in April 2025, is governed by the Linux Foundation, and has reached a stable 1.0 release.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Who created A2A and who controls it now?&lt;/strong&gt;&lt;br&gt;
Google introduced A2A in April 2025 and contributed it to the Linux Foundation, which now governs it as a vendor-neutral open standard. No single company controls it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Is A2A production ready?&lt;/strong&gt;&lt;br&gt;
Yes. A2A reached a stable 1.0 release with core data models frozen, ships official SDKs for Python, JavaScript, Java, Go, and .NET, and is supported inside Microsoft Copilot Studio, Azure AI Foundry, Amazon Bedrock AgentCore, and Google ADK.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Do I need to rewrite my agents to use A2A?&lt;/strong&gt;&lt;br&gt;
No. A2A is not a framework — it's a messaging layer between agents. Adoption means giving an agent an Agent Card and an A2A endpoint. Its internals, model, and framework stay exactly as they are.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What's the difference between A2A and MCP?&lt;/strong&gt;&lt;br&gt;
MCP connects an agent to tools, data, and context. A2A connects agents to each other. MCP is vertical; A2A is horizontal. They're complementary and most production systems use both.&lt;/p&gt;




&lt;h3&gt;
  
  
  More in this series
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;A2A vs MCP&lt;/strong&gt; — A2A vs MCP: The Two Protocols Behind Every Serious AI Agent System&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The Agent Card&lt;/strong&gt; — The Agent Card: How AI Agents Discover Each Other&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The Task Lifecycle&lt;/strong&gt; — Understanding the A2A Task Lifecycle (and the Bug That Hangs Every Client)&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Want to go deeper?
&lt;/h3&gt;

&lt;p&gt;I wrote two guides on this.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://promptmasterstore.gumroad.com/l/a2afree" rel="noopener noreferrer"&gt;A2A Quick-Start&lt;/a&gt; — free, 6 pages.&lt;/strong&gt; The Agent2Agent protocol in 15 minutes: what it is, the five building blocks, the task lifecycle, and where MCP fits.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://promptmasterstore.gumroad.com/l/a2a" rel="noopener noreferrer"&gt;A2A: The Complete Guide&lt;/a&gt; — 42 pages.&lt;/strong&gt; 15 chapters, 5 appendices. Discovery, security, building your first agent with the SDK, orchestration patterns, extensions and AP2, production and scaling — plus a full worked example of two agents talking and a 30-day adoption path.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Independent educational content. Not affiliated with, endorsed by, or sponsored by Google, the Linux Foundation, Anthropic, or any vendor named. A2A and MCP are evolving specifications — confirm details against the official specification for your target version.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>agents</category>
      <category>protocols</category>
      <category>a2a</category>
    </item>
    <item>
      <title>A2A vs MCP: The Two Protocols Behind Every Serious AI Agent System</title>
      <dc:creator>PromptMaster</dc:creator>
      <pubDate>Sat, 18 Jul 2026 07:33:23 +0000</pubDate>
      <link>https://dev.to/promptmaster/a2a-vs-mcp-the-two-protocols-behind-every-serious-ai-agent-system-522i</link>
      <guid>https://dev.to/promptmaster/a2a-vs-mcp-the-two-protocols-behind-every-serious-ai-agent-system-522i</guid>
      <description>&lt;p&gt;&lt;em&gt;One connects an agent to its tools. The other connects agents to each other. Confusing them is the fastest way to build an architecture that fights you.&lt;/em&gt;&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;MCP (Model Context Protocol) connects a single AI agent to tools, data, and context.&lt;/strong&gt; It answers: how does my agent use a resource — read a file, query a database, call an API?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;A2A (Agent2Agent) connects agents to other agents.&lt;/strong&gt; It answers: how does my agent delegate work to another agent, and get results back?&lt;/p&gt;

&lt;p&gt;MCP is vertical — an agent reaching down to its capabilities. A2A is horizontal — an agent reaching across to its peers. They are complementary, not competing. Both are open standards governed by the Linux Foundation, and most production systems run both.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why this question keeps coming up
&lt;/h2&gt;

&lt;p&gt;Ask around and you'll hear A2A and MCP discussed as if they were rivals — as though picking one is a strategic decision with a winner. It isn't. The two protocols do not overlap, and the reason people think they might is that both showed up around the same time, both are about connecting agents to &lt;em&gt;something&lt;/em&gt;, and both are open standards with big names behind them.&lt;/p&gt;

&lt;p&gt;But once you know what sits on the other end of each connection, the confusion dissolves permanently. That's what this piece is for.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is MCP?
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;MCP — the Model Context Protocol — is an open standard for connecting an AI agent to tools, data sources, and context.&lt;/strong&gt; When an agent needs to read a file, query a database, hit an API, or pull in a document, MCP is the layer that makes that possible in a standardized way rather than through bespoke integration.&lt;/p&gt;

&lt;p&gt;Before MCP, every agent framework had its own notion of a "tool," and wiring an agent to a data source meant writing an adapter specific to both. MCP made that connection a protocol, so a tool exposed once works with any agent that speaks it.&lt;/p&gt;

&lt;p&gt;MCP is what gives an individual agent its capabilities. An agent without MCP (or something like it) can think, but it cannot reach anything.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is A2A?
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;A2A — Agent2Agent — is an open protocol for agent-to-agent communication.&lt;/strong&gt; It lets independent agents discover each other, delegate tasks, and exchange results securely, regardless of which framework or vendor built them.&lt;/p&gt;

&lt;p&gt;A2A was introduced by Google in April 2025 and contributed to the Linux Foundation, which now governs it as a vendor-neutral standard. It has since reached a stable 1.0 release with core data models frozen. Official SDKs ship for Python, JavaScript, Java, Go, and .NET, and the protocol is supported inside Microsoft Copilot Studio, Azure AI Foundry, Amazon Bedrock AgentCore, and Google ADK.&lt;/p&gt;

&lt;p&gt;Under the hood it is deliberately unglamorous: HTTP for transport, JSON-RPC 2.0 for structured requests, Server-Sent Events for streaming updates, and OAuth 2.0 with JWTs for authentication. Nothing exotic — which is exactly why adoption moved fast.&lt;/p&gt;

&lt;h3&gt;
  
  
  The five things A2A is made of
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Agent Card&lt;/strong&gt; — a JSON document describing an agent's identity, endpoint, authentication, and skills, published at &lt;code&gt;/.well-known/agent-card.json&lt;/code&gt; so others can discover it.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Task&lt;/strong&gt; — the central, stateful unit of work, with a lifecycle you can track from submission to completion.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Message&lt;/strong&gt; — a single turn of communication between two agents.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Parts&lt;/strong&gt; — typed content inside a Message: text, file, or structured data.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Artifact&lt;/strong&gt; — the durable output a completed Task produces.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A client discovers an agent via its card, sends a Message to open a Task, follows that Task through its states, and collects Artifacts when it completes. Five nouns, one flow — that's most of the protocol.&lt;/p&gt;

&lt;h2&gt;
  
  
  A2A vs MCP: the comparison
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;MCP&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;A2A&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Scope&lt;/td&gt;
&lt;td&gt;Agent to tool and context&lt;/td&gt;
&lt;td&gt;Agent to agent collaboration&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Question it answers&lt;/td&gt;
&lt;td&gt;How does my agent use this resource?&lt;/td&gt;
&lt;td&gt;How does my agent work with that agent?&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Other end of the wire&lt;/td&gt;
&lt;td&gt;A tool, server, or data source&lt;/td&gt;
&lt;td&gt;An independent agent with its own skills&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Unit of interaction&lt;/td&gt;
&lt;td&gt;A tool call or resource read&lt;/td&gt;
&lt;td&gt;A Task with a lifecycle&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Direction&lt;/td&gt;
&lt;td&gt;Vertical — reaching down&lt;/td&gt;
&lt;td&gt;Horizontal — reaching across&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Governance&lt;/td&gt;
&lt;td&gt;Open standard, Linux Foundation&lt;/td&gt;
&lt;td&gt;Open standard, Linux Foundation&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;MCP gives an agent hands.*A2A gives it colleagues.&lt;/strong&gt;*&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  How they layer in a real system
&lt;/h2&gt;

&lt;p&gt;Picture a market-report system in two planes.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Horizontally&lt;/strong&gt;, over A2A: a user asks an orchestrator agent for a report. The orchestrator delegates data-gathering to a research agent and chart-making to a visualization agent — discovering each by its Agent Card, authenticating with a scoped token, and streaming each Task to completion.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Vertically&lt;/strong&gt;, over MCP: the research agent queries live data sources; the visualization agent calls a rendering tool. Each is reaching down to the capabilities it needs.&lt;/p&gt;

&lt;p&gt;Results flow back up as Artifacts, and the orchestrator assembles the report. Two planes, each doing one job, combining into something neither could do alone. A2A moved the work between agents; MCP fed each agent the context it needed.&lt;/p&gt;

&lt;h2&gt;
  
  
  When do you need both?
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Use MCP alone&lt;/strong&gt; if your agent uses tools but never delegates to another agent. A single capable assistant with database access needs no A2A.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Use A2A alone&lt;/strong&gt; for a pure router that forwards tasks between agents and holds no tools of its own. Rare, but real.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Use both&lt;/strong&gt; when an agent needs to act on resources &lt;em&gt;and&lt;/em&gt; collaborate with peers — which describes essentially every multi-agent system of any ambition.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The goal is a system as simple as the problem allows. Don't reach for A2A because multi-agent sounds impressive: every delegation adds a network hop and usually another model call. Reach for it when specialization or scale genuinely earns that overhead.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why the pairing is the durable bet
&lt;/h2&gt;

&lt;p&gt;Standards win when they compose. HTTP did not have to also be HTML — each did one job, and together they carried the web. A2A and MCP follow the same logic, which is why betting on the pair is safer than betting on any single framework.&lt;/p&gt;

&lt;p&gt;Here's the part worth internalizing: an agent that speaks A2A exposes only its card and its skills. Everything behind that surface is private — which model it calls, which framework it runs on, which tools it reaches through MCP, how its logic is written. Replace any of those and every caller is unaffected, because none of them ever depended on it.&lt;/p&gt;

&lt;p&gt;Models will improve. Frameworks will be replaced. A catalog of well-described agents that speak an open protocol stays callable through all of it. The protocol is the stable interface; everything underneath can evolve freely.&lt;/p&gt;

&lt;h2&gt;
  
  
  Common mistakes
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Using A2A to reach a database.&lt;/strong&gt; If the other end is a resource, it's MCP. Ask what's on the other end — that answers it every time.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Using MCP to connect two agents.&lt;/strong&gt; Wrapping an agent as a "tool" works until that agent needs to ask a clarifying question, run for ten minutes, or report progress. Tasks exist for a reason.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Treating A2A like a function call.&lt;/strong&gt; It's a protocol for stateful, long-running, cross-trust collaboration. Design for that and most problems disappear.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Trusting peers by default.&lt;/strong&gt; An agent that speaks A2A is not automatically safe. Authenticate every request, authorize narrowly, validate all input, rate-limit.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Frequently asked questions
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;What is the difference between A2A and MCP?&lt;/strong&gt;&lt;br&gt;
MCP connects a single agent to tools, data, and context — it answers how an agent uses a resource. A2A connects agents to other agents — it answers how one agent delegates work to another. MCP is vertical; A2A is horizontal. They are complementary, and most production systems use both.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Is A2A a replacement for MCP?&lt;/strong&gt;&lt;br&gt;
No. They solve different problems and are designed to coexist. They never overlap, because they meet at the agent — which speaks A2A outward to peers and MCP downward to its tools. Both are governed under the Linux Foundation.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Is A2A production ready?&lt;/strong&gt;&lt;br&gt;
Yes. A2A reached a stable 1.0 release with core data models frozen, is governed by the Linux Foundation as a vendor-neutral standard, ships official SDKs for five languages, and is supported inside Microsoft Copilot Studio, Azure AI Foundry, Amazon Bedrock AgentCore, and Google ADK.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Do I have to rewrite my agents to adopt A2A?&lt;/strong&gt;&lt;br&gt;
No. A2A is not a framework — it's a messaging layer between agents. You keep your existing stack. Adoption means giving an agent an Agent Card and an A2A endpoint; its internals stay exactly as they are.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Which should I learn first?&lt;/strong&gt;&lt;br&gt;
MCP, if you're starting from a single agent — give it hands before you give it colleagues. A2A, if you already have capable agents that can't talk to each other, because that's the wall you're hitting.&lt;/p&gt;




&lt;h3&gt;
  
  
  More in this series
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;What Is A2A?&lt;/strong&gt; — What Is the Agent2Agent Protocol? A Complete Introduction to A2A&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The Agent Card&lt;/strong&gt; — The Agent Card: How AI Agents Discover Each Other&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The Task Lifecycle&lt;/strong&gt; — Understanding the A2A Task Lifecycle (and the Bug That Hangs Every Client)&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Want to go deeper?
&lt;/h3&gt;

&lt;p&gt;I wrote two guides on this.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://promptmasterstore.gumroad.com/l/a2afree" rel="noopener noreferrer"&gt;A2A Quick-Start&lt;/a&gt; — free, 6 pages.&lt;/strong&gt; The Agent2Agent protocol in 15 minutes: what it is, the five building blocks, the task lifecycle, and where MCP fits.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://promptmasterstore.gumroad.com/l/a2a" rel="noopener noreferrer"&gt;A2A: The Complete Guide&lt;/a&gt; — 42 pages.&lt;/strong&gt; 15 chapters, 5 appendices. Discovery, security, building your first agent with the SDK, orchestration patterns, extensions and AP2, production and scaling — plus a full worked example of two agents talking and a 30-day adoption path.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Independent educational content. Not affiliated with, endorsed by, or sponsored by Google, the Linux Foundation, Anthropic, or any vendor named. A2A and MCP are evolving specifications — confirm details against the official specification for your target version.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>agents</category>
      <category>protocols</category>
      <category>webdev</category>
    </item>
    <item>
      <title>EARS: five patterns for requirements agents can't misread</title>
      <dc:creator>PromptMaster</dc:creator>
      <pubDate>Thu, 09 Jul 2026 15:25:18 +0000</pubDate>
      <link>https://dev.to/promptmaster/ears-five-patterns-for-requirements-agents-cant-misread-2beo</link>
      <guid>https://dev.to/promptmaster/ears-five-patterns-for-requirements-agents-cant-misread-2beo</guid>
      <description>&lt;h2&gt;
  
  
  Constrained syntax, zero ambiguity
&lt;/h2&gt;

&lt;p&gt;EARS (Easy Approach to Requirements Syntax) came out of Rolls-Royce in 2009 for safety-critical engine control. Five patterns, fixed clause order:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Ubiquitous:  The &amp;lt;system&amp;gt; shall &amp;lt;response&amp;gt;
Event:       When &amp;lt;trigger&amp;gt;, the &amp;lt;system&amp;gt; shall &amp;lt;response&amp;gt;
State:       While &amp;lt;state&amp;gt;, the &amp;lt;system&amp;gt; shall &amp;lt;response&amp;gt;
Unwanted:    If &amp;lt;cond&amp;gt;, then the &amp;lt;system&amp;gt; shall &amp;lt;response&amp;gt;
Optional:    Where &amp;lt;feature&amp;gt;, the &amp;lt;system&amp;gt; shall &amp;lt;response&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Why it maps so well to code
&lt;/h2&gt;

&lt;p&gt;Each class implies its implementation and test shape:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Ubiquitous → invariants&lt;/li&gt;
&lt;li&gt;Event → handlers + integration tests&lt;/li&gt;
&lt;li&gt;State → state machines&lt;/li&gt;
&lt;li&gt;Unwanted → error paths&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The requirement's class tells the agent what kind of code and test it demands. Constrained syntax is context an agent &lt;strong&gt;cannot&lt;/strong&gt; misread.&lt;/p&gt;

&lt;h2&gt;
  
  
  The compound-requirement smell
&lt;/h2&gt;

&lt;p&gt;A requirement with "and" joining two behaviours is two requirements sharing a number — the agent may do one and skip the other while the line reads as done. Split it: one requirement, one behaviour, one verdict.&lt;/p&gt;

&lt;h2&gt;
  
  
  Try it in five minutes
&lt;/h2&gt;

&lt;p&gt;Rewrite one spec's requirements into EARS. A requirement that resists every pattern usually isn't one requirement — the exercise is diagnostic by itself.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Free cheat sheet:&lt;/strong&gt; the whole method on a few pages — the loop, spec anatomy, EARS, right-sizing — &lt;a href="https://promptmasterstore.gumroad.com/l/spec-driven-development-cheat-sheet" rel="noopener noreferrer"&gt;SDD Cheat Sheet&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Go deeper:&lt;/strong&gt; the full reference — every phase, the tool landscape, three walkthroughs — &lt;a href="https://promptmasterstore.gumroad.com/l/spec-driven-development" rel="noopener noreferrer"&gt;Spec-Driven Development: The Complete Guide&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Anyone using EARS in their specs yet? Which pattern do you reach for most? 👇&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>programming</category>
      <category>productivity</category>
      <category>webdev</category>
    </item>
    <item>
      <title>How to write a spec an AI agent will actually follow</title>
      <dc:creator>PromptMaster</dc:creator>
      <pubDate>Thu, 09 Jul 2026 15:24:49 +0000</pubDate>
      <link>https://dev.to/promptmaster/how-to-write-a-spec-an-ai-agent-will-actually-follow-2jlc</link>
      <guid>https://dev.to/promptmaster/how-to-write-a-spec-an-ai-agent-will-actually-follow-2jlc</guid>
      <description>&lt;h2&gt;
  
  
  A good spec is short
&lt;/h2&gt;

&lt;p&gt;Precise enough that implementation can't silently diverge; short enough that a human actually reviews it. Skeleton:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;&lt;span class="gu"&gt;## Intent        why this exists, in one or two lines&lt;/span&gt;
&lt;span class="gu"&gt;## Scenarios     concrete user journeys (who does what)&lt;/span&gt;
&lt;span class="gu"&gt;## Requirements  numbered, testable (EARS)&lt;/span&gt;
&lt;span class="gu"&gt;## Acceptance    observable criteria that define done&lt;/span&gt;
&lt;span class="gu"&gt;## Edge cases    the failure modes you care about&lt;/span&gt;
&lt;span class="gu"&gt;## Constraints   performance, compliance, stack bounds&lt;/span&gt;
&lt;span class="gu"&gt;## Non-goals     what this feature is NOT&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  If a requirement can't fail, it's a wish
&lt;/h2&gt;

&lt;p&gt;Each requirement must be specific enough to point at the running system and say "satisfied" or "not satisfied" with no debate.&lt;/p&gt;

&lt;h2&gt;
  
  
  The two most-skipped sections
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Edge cases&lt;/strong&gt; — agents handle the happy path unprompted; the edges are where unstated intent dies. State them.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Non-goals&lt;/strong&gt; — the difference between building what you scoped and building what the feature name vaguely implies.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Written with the agent, owned by you
&lt;/h2&gt;

&lt;p&gt;Let the specify phase draft it — then cut, correct and sharpen. An unreviewed spec is paperwork, not alignment.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Free cheat sheet:&lt;/strong&gt; the whole method on a few pages — the loop, spec anatomy, EARS, right-sizing — &lt;a href="https://promptmasterstore.gumroad.com/l/spec-driven-development-cheat-sheet" rel="noopener noreferrer"&gt;SDD Cheat Sheet&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Go deeper:&lt;/strong&gt; the full reference — every phase, the tool landscape, three walkthroughs — &lt;a href="https://promptmasterstore.gumroad.com/l/spec-driven-development" rel="noopener noreferrer"&gt;Spec-Driven Development: The Complete Guide&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;What's the one section you always forget in a spec? Mine used to be non-goals. 👇&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>programming</category>
      <category>productivity</category>
      <category>webdev</category>
    </item>
    <item>
      <title>The four phases of Spec-Driven Development</title>
      <dc:creator>PromptMaster</dc:creator>
      <pubDate>Thu, 09 Jul 2026 15:24:20 +0000</pubDate>
      <link>https://dev.to/promptmaster/the-four-phases-of-spec-driven-development-43em</link>
      <guid>https://dev.to/promptmaster/the-four-phases-of-spec-driven-development-43em</guid>
      <description>&lt;h2&gt;
  
  
  Four artifacts, four gates
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;SPECIFY   -&amp;gt; spec.md   scenarios, requirements, acceptance, non-goals
PLAN      -&amp;gt; plan.md   architecture, data models, risks, dependencies
TASKS     -&amp;gt; tasks.md  atomic, ordered, verifiable, file paths
IMPLEMENT -&amp;gt; code      task by task, validated against the spec
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  What each phase is for
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Specify&lt;/strong&gt; — the &lt;em&gt;what&lt;/em&gt;. No implementation detail; capture what the system must do and how you'll know it does.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Plan&lt;/strong&gt; — the &lt;em&gt;how&lt;/em&gt;. Where your stack and conventions enter. Reviewing it is where architectural mistakes die cheaply.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tasks&lt;/strong&gt; — the &lt;em&gt;steps&lt;/em&gt;. One atomic, verifiable task at a time beats "build the feature" by a mile.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Implement&lt;/strong&gt; — the code, checked against acceptance criteria written &lt;em&gt;before&lt;/em&gt; any code existed.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The gates are the method
&lt;/h2&gt;

&lt;p&gt;Each phase ends with a human review before the next begins. Skip them and you've got vibe coding with extra files. The artifacts exist to make review possible when errors are cheapest to fix.&lt;/p&gt;

&lt;h2&gt;
  
  
  It's a loop, not a line
&lt;/h2&gt;

&lt;p&gt;Implementation reveals a gap in the plan; the plan reveals an ambiguity in the spec. Edit upstream, regenerate downstream. However your tool names the phases, the invariant is the loop.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Free cheat sheet:&lt;/strong&gt; the whole method on a few pages — the loop, spec anatomy, EARS, right-sizing — &lt;a href="https://promptmasterstore.gumroad.com/l/spec-driven-development-cheat-sheet" rel="noopener noreferrer"&gt;SDD Cheat Sheet&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Go deeper:&lt;/strong&gt; the full reference — every phase, the tool landscape, three walkthroughs — &lt;a href="https://promptmasterstore.gumroad.com/l/spec-driven-development" rel="noopener noreferrer"&gt;Spec-Driven Development: The Complete Guide&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Which phase does your team skip most — and has it burned you yet? 👇&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>programming</category>
      <category>productivity</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Spec-Driven Development: the fix for vibe coding drift</title>
      <dc:creator>PromptMaster</dc:creator>
      <pubDate>Thu, 09 Jul 2026 15:23:49 +0000</pubDate>
      <link>https://dev.to/promptmaster/spec-driven-development-the-fix-for-vibe-coding-drift-43k7</link>
      <guid>https://dev.to/promptmaster/spec-driven-development-the-fix-for-vibe-coding-drift-43k7</guid>
      <description>&lt;h2&gt;
  
  
  The problem with vibe coding
&lt;/h2&gt;

&lt;p&gt;Left to infer intent from a casual prompt, an agent guesses: it invents an API, picks a data shape you didn't want, skips the edge case you cared about. Each guess is small. Over a feature they compound into &lt;strong&gt;drift&lt;/strong&gt; — because intent was never written anywhere you could check against.&lt;/p&gt;

&lt;h2&gt;
  
  
  What SDD does
&lt;/h2&gt;

&lt;p&gt;Write a structured spec first, then let the agent implement against it through a loop:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;SPECIFY   -&amp;gt; spec.md   what + acceptance      [review]
PLAN      -&amp;gt; plan.md   architecture + risks   [review]
TASKS     -&amp;gt; tasks.md  atomic, ordered        [review]
IMPLEMENT -&amp;gt; code      task by task, vs spec
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Fixes flow &lt;strong&gt;upstream&lt;/strong&gt;: wrong intent → spec, wrong architecture → plan, wrong expression → code.&lt;/p&gt;

&lt;h2&gt;
  
  
  The core trade-off
&lt;/h2&gt;

&lt;p&gt;Vibe coding optimises for speed; SDD optimises for intent. Neither is always right.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;If the intent matters beyond the next prompt, structure wins.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Throwaway script? Vibe away. Production feature a colleague will build on? Write the spec.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why it caught on
&lt;/h2&gt;

&lt;p&gt;SDD emerged in 2025 and within a year every major AI coding ecosystem shipped its own version. When every vendor independently lands on the same four phases, the pain was real.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Free cheat sheet:&lt;/strong&gt; the whole method on a few pages — the loop, spec anatomy, EARS, right-sizing — &lt;a href="https://promptmasterstore.gumroad.com/l/spec-driven-development-cheat-sheet" rel="noopener noreferrer"&gt;SDD Cheat Sheet&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Go deeper:&lt;/strong&gt; the full reference — every phase, the tool landscape, three walkthroughs — &lt;a href="https://promptmasterstore.gumroad.com/l/spec-driven-development" rel="noopener noreferrer"&gt;Spec-Driven Development: The Complete Guide&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;How many times have you re-explained the same requirement to an agent in one session? 👇&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>programming</category>
      <category>productivity</category>
      <category>devtools</category>
    </item>
  </channel>
</rss>
