When does adopting an agent protocol beat plain HTTP or a queue between agents?
answer
- ask what the protocol actually buys
- every benefit is a cross-boundary benefit
- one repo means one commit changes both
- a queue gives durability a protocol doesn't
- adopt where ownership actually splits
basics
~20 sAn agent protocol pays when the two ends are owned by different parties: it supplies discovery, a shared task contract and negotiated capabilities across a boundary. Inside one codebase, where both agents deploy together, a typed message on a queue or a direct call is usually the better default.
solid answer
~60 sThe question to ask is what the protocol actually buys, and whether you have that problem. A cross-vendor agent protocol supplies four things: **discovery** of peers you did not integrate individually, a **shared task lifecycle** for work that outlives a connection, **capability negotiation** so both sides know what the other supports, and an **interoperability guarantee** across frameworks and organizations. Inside a single codebase you already have all four for free — you know what your agents can do, you deploy them together, and a shared type is a stronger contract than a negotiated one. There, an SQS queue between an intake agent and a negotiation agent, carrying a schema-validated payload, gives durability, backpressure and retry semantics that a protocol does not, with none of the adoption cost. Adopt the protocol at the boundary where independent ownership actually starts — usually the external edge — and keep the internal seams boring. The cost of premature adoption is real: another spec to track, another failure surface, and ceremony where a function call would do.
go deeper
Know that agents can talk over a queue, a plain HTTP call, or a dedicated agent protocol, and that the simplest option is usually right inside one application.
Explain what a protocol supplies — discovery, task lifecycle, capability negotiation, interoperability — and why none of those is a problem you have when both agents deploy from one repository.
Argue the queue's distinct value at an internal seam: durability, backpressure, retries and dead-lettering, none of which a protocol provides. Place the protocol at the real ownership boundary.
Own the boundary map and the reversibility strategy: keep the validated payload as the stable contract, make transports swappable, and price the spec, security and debugging costs of adopting a protocol before the boundary is real.
## Name what the protocol buys A senior answer to this question does not start from "protocols are good practice". It starts from the four capabilities an agent protocol supplies and asks which you lack: 1. **Discovery** — finding a peer you never integrated, reading what it can do, and choosing among candidates at runtime. 2. **A shared task contract** — a task identity and lifecycle so work survives a dropped connection, and a state that means "I need something from you". 3. **Capability negotiation** — both sides learning what the other supports (streaming, notifications, content types) without a coordinated release. 4. **Interoperability** — two agents built on different frameworks by different companies working together without a bespoke adapter each time. Every one of these is a **cross-boundary** capability. That is the tell. ## Inside one codebase, you already have all four When an intake agent and a negotiation agent live in the same repository and deploy together: - Discovery is compile-time. You know the negotiation agent exists; you wrote it. - The task contract is whatever you decide, and you can change both ends in one commit. - Capability negotiation is meaningless — there is one version deployed. - Interoperability is a non-problem: one language, one framework. What you actually need at that seam is delivery: durability if the receiver is down, backpressure when the producer outruns the consumer, retries, and dead-lettering for messages that cannot be processed. **A queue gives you exactly those and an agent protocol does not.** Putting an SQS queue between the intake agent and the negotiation agent — carrying a schema-validated payload — is not a downgrade from adopting a protocol; it is the better-matched tool. Add the schema and you have the one thing free text lacks: a checkable contract. The same logic favours a plain HTTP call when the interaction is short and synchronous, and a workflow engine when the pipeline needs durable multi-step execution with retries and human pauses. Inside a codebase, these still dominate in practice. ## Where the boundary actually is The adoption question is really an **ownership** question. Ask: - Do the two ends ship on the same release train? If yes, a shared type beats a negotiated contract. - Can I change both sides in one commit? If yes, you do not need version negotiation. - Do I know at build time who the counterparty is? If yes, you do not need discovery. - Is the counterparty's implementation something I am allowed to see? If no, you need an opaque protocol — and that is precisely what the agent plane offers, since peers exchange tasks and artifacts rather than prompts, memory or tools. The procurement case is the clean positive: your agent must source from supplier agents run by other companies, on stacks you do not control, whose capabilities change without telling you. There, hand-rolling an integration per supplier is the expensive option and the protocol is the cheap one. If a supplier exposes only plain REST endpoints and cannot stream, the REST-native alternative in the same family is the pragmatic meet-in-the-middle. ## The cost of adopting early Be explicit about it in an interview, because this is where judgment shows: - **Spec surface.** A protocol has versions, optional capabilities and behaviours you must implement correctly. It is a dependency with a roadmap. - **A new failure class.** Stale cards, unsupported capabilities, tasks that never reach a terminal state, notification endpoints that must be authenticated. None of these exist between two functions in one process. - **Indirection tax.** Debugging a protocol exchange is harder than reading a stack trace. - **Security surface.** Every remote agent boundary is a place where an untrusted party's text reaches your model. Prompt injection aimed at a delegated agent, lateral authority propagation across the graph, and confused-deputy patterns are all live concerns; the mitigation is per-agent identity and an effective permission equal to the intersection of the user's rights and the agent's allowed capabilities. This work is necessary at a real boundary and pure overhead at a fake one. ## A workable heuristic - **Same repo, same deploy** → typed function call, or a queue if you need durability and backpressure. No protocol. - **Different service, same organization** → HTTP or a queue with a versioned schema; adopt an agent protocol only if you genuinely need runtime discovery or long-running task semantics. - **Different organization or vendor** → agent protocol, with per-agent identity and delegated authorization. - **Reaching deterministic capabilities rather than peers** → that is the tool plane, a different problem with its own standard. "A standard for tools, an agent protocol for agents" is the sensible default framing as of mid-2026. ## Keep the migration cheap The way to avoid betting wrong is to make the transport swappable: put the schema-validated payload at the centre, and treat the queue, the HTTP call and the protocol client as interchangeable carriers of it. Then "adopt the protocol" is an edge change rather than a rewrite, and you can defer the decision until the boundary is real rather than hypothetical.
- Your CTO wants one agent protocol used everywhere for consistency. What is your counter-argument?Consistency at the wrong granularity buys ceremony. Internally you already have discovery, versioning and interoperability solved by shipping both ends together, so the protocol adds a spec, a failure class and debugging indirection for no capability gained. The consistency worth mandating is the payload contract — one schema, validated at every seam — while letting the carrier be a queue, an HTTP call or a protocol client as the boundary requires.
- What would make you adopt the protocol internally anyway?Genuine internal ownership splits: separate teams with separate release trains, agents written in different stacks, or a platform where teams register agents others discover at runtime without an integration ticket. At that point the internal boundary behaves like an external one — you cannot change both sides in one commit — and the protocol's discovery and negotiation start paying for themselves.
- How do you keep the decision reversible?Make the schema-validated payload the stable centre and the transport a thin adapter. If the intake agent produces a validated QuoteRequest and the negotiation agent consumes one, whether it travelled by queue, HTTP or an agent protocol is an edge concern. That way adopting a protocol later is an adapter plus an auth story, not a rewrite of either agent's logic.
saying these in an interview costs you the question
- Adopts an agent protocol for two services in one repo
- Says a protocol replaces queue durability and backpressure
- Treats the tool plane and agent plane as the same problem
- Ignores identity and delegation at a cross-org boundary
- Argues protocol adoption on standards compliance alone