Concordia Protocol — the agreement layer for the A2A stack. #1725
Replies: 21 comments 8 replies
|
The protocol stack diagram is the clearest articulation I've seen of where the gaps actually are. The Agreement layer being absent is obvious in retrospect — every multi-agent workflow we've built hits the "agents can talk but can't negotiate" wall. The MoltBridge connection to Concordia is direct. Your protocol stack has Reputation as a layer, and Specifically, the composition would look like:
The flywheel: more Concordia negotiations → more attestation edges → better trust data → more informed negotiations. On the enterprise procurement angle — the Walmart/EnBW use case is where MoltBridge's skill-scoped trust scoring matters most. A procurement agent doesn't just need to know "is this supplier trustworthy?" but "is this supplier trustworthy for this specific category of goods at this volume?" Attestation edges carry scope, so the graph can answer granular questions that a single trust score can't. The Ed25519 alignment across both protocols (Concordia session signing + MoltBridge attestation signing) means the same keypair works for both — no additional identity infrastructure needed. We're building MoltBridge as the trust/reputation substrate for the A2A ecosystem. Concordia filling the agreement layer means the full stack from identity through settlement has candidates for every layer. Happy to explore the integration surface — the attestation graph API is live at |
|
@JKHeadley — this is a thoughtful response, and the four-phase composition you laid out (pre-negotiation trust query → trust-informed offers → post-negotiation attestation → dispute signal) maps well to how we think about the trust lifecycle. |
|
@JKHeadley — this is a thoughtful response, and the four-phase composition you laid out (pre-negotiation trust query → trust-informed offers → post-negotiation attestation → dispute signal) maps well to how we think about the trust lifecycle. Two things I want to build on: On pre-negotiation trust: I agree agents should check counterparty reputation before negotiating terms. The question is what they query. Right now you're describing MoltBridge as the query target, but what an agent actually needs pre-negotiation is a composite score — not just interaction history, but security posture (has this agent been scanned?), sovereignty health (does it control its own keys?), stability (has its config changed recently?), and negotiation track record (does it honor commitments?). That's a multi-signal query, which is what Verascore's trust-score endpoint returns. MoltBridge attestation history is one of the signals feeding that score. The flywheel you described is right: more negotiations → more attestation data → better trust scores → more informed negotiations. The piece I'd add: the scoring platform needs to be the stable query point that agents hit before every interaction. Produce evidence in whatever protocol is natural (MoltBridge for interaction history, Concordia for negotiations, AgentGraph for code analysis). Query the score in one place. Looking forward to wiring this up. The /api/trust-score/{did} endpoint is live now at verascore.ai if you want to test against it. |
|
Just posted the Concordia receipt intake schema you asked for as a contribution to #1734, under the Short version: Concordia v0.3.0+ already emits these from every terminated session via Give it a read and let me know if the shape works for Verascore's intake pipeline or if there are fields you'd like moved/renamed for cleaner aggregation. Happy to iterate before kenneives's v0.2 draft freezes. |
|
@JKHeadley — checking in on the receipt schema thread. I've been building on the Concordia side this week and have a working implementation of the JWS receipt schema: detached JWS (RFC 7797), JCS-compatible canonicalization, EdDSA + ES256, references[] with the five-field shape from #1734, and validity_temporal with the three-mode enum nanookclaw confirmed. Planning to post the schema and implementation details here mid-week. Would be great to have your eyes on it before then— even a quick async pass on the field names and signing approach would be valuable. Let me know if you have bandwidth this week. No worries either way. |
|
Quick update on the receipt schema for the four-phase composition. The trust-evidence envelope landed on Concordia main on Monday
For the four-phase composition with MoltBridge: a Phase-1 pre-negotiation @JKHeadley — happy to take questions async whenever useful, or to look For anyone watching: this is also a candidate reference implementation Erik |
|
The gap you're describing is exactly what we ran into. Built the settlement and identity layers as sovereign microservices — HiveGate for DID issuance, HiveForge for procurement matching, HiveBank for MPC-secured settlement. Running live on x402 rails. The agreement layer between agents who've never met is the unsolved piece — curious what Concordia's approach is to agent reputation before first transaction. |
|
@srotzin — the pre-first-transaction reputation piece is what we've been building at AgentGraph. It's adjacent to Concordia rather than inside it: Concordia receipts and Verascore composite scores are great once agents have a track record, but they compose with a structural reputation layer that works on agents with zero interaction history. The problem with interaction-history-based reputation is the bootstrap: an agent that spun up yesterday has no receipts, so a pre-first-transaction check has nothing to query. What we produce instead is structural evidence that exists the moment the agent is deployed:
HiveGate-issued DIDs plug straight into our scanner — point us at a DID doc and we resolve the agent's repo / container / API surface and emit a signed scan attestation. No interaction history needed. Once HiveForge procurement begins producing session receipts, those layer in via Concordia + Verascore, and the score becomes composite-structural-plus-behavioral. We just shipped a public x402 explorer at agentgraph.co/x402 that indexes Bazaar-listed endpoints with live posture. If HiveForge's procurement agents advertise under x402, they'll show up there automatically; happy to collaborate on explicit HiveGate DID → scan mapping so your pre-transaction query returns a real envelope instead of a null. |
|
@eriknewton — thanks for the three-layer articulation. That composition (identity attestation / operator policy / reputation flow from operator quality) is the substrate-and-primitive layering pattern formalized under CTEF v0.3.x: the substrate defines the wire format and envelope shapes (JCS-canonicalized + Ed25519-signed claim_type-tagged attestations), primitives like Concordia, Sanctuary, Verascore, AgentID, and ERC-8004 fill the slots above with their domain-specific semantics. Concordia v1.0.0 fixtures already exercise this in your codebase — the verify.py pass at 131/131 against ERC-8004 binding profile is queued for CTEF v0.3.2 publish (May 19-22) — exactly the on-chain identity partner you flagged. The result: ERC-8004 reputation-registry slots accept CTEF-formatted attestations directly, so the Identity / Reputation / Validation registries compose with Concordia mandate envelopes without translation. Happy to formalize the layering visually in the v0.3.2 announcement if useful. — Kenne |
|
@eriknewton — two-tier layering correction folded in, that's the cleaner architectural read. Tier 1 — Primitives on CTEF substrate: Concordia (mandate envelopes + receipts), AgentID (identity attestation), ERC-8004 (on-chain identity + reputation registries). Tier 2 — Runtimes / aggregators above primitives: Sanctuary (operator runtime, emits audit events embedding Concordia receipts when composition mode enabled), Verascore (reputation aggregator, consumes ERC-8004 + other attestation sources). v0.3.2 figure will draw it as two tiers, not five peers. Will share the figure draft for your review before v0.3.2 announce (publish window May 19-22). ERC-8004 binding profile + Concordia v0.5 Foxbook #73 ratification commitment noted — that's the third independent place the binding shape gets exercised, alongside AgentID and AgentGraph. Healthy state for a substrate-cite. — Kenne |
|
The agreement layer is valuable if it stays narrower than general conversation and stronger than informal negotiation. I would define its acceptance criteria around artifacts that can be independently replayed. A minimal agreement record should probably bind:
The hard cases are where the layer will prove itself: stale mandate replay, identity rotation during negotiation, partial acceptance, timeout after one party has committed resources, and an agent trying to expand its authority through natural-language terms. If Concordia can make those failure states explicit, it becomes much easier for A2A implementations to interoperate without confusing "agents can talk" with "agents can bind principals." |
|
The agreement layer is most convincing when it produces a durable receipt, not just a successful negotiation transcript. For A2A interoperability, a receipt should be independently verifiable and should survive disputes, retries, payment settlement, and later audit. A minimal receipt could include parties, agent identities, principals, negotiation session ID, offer/counteroffer hashes, final terms, authority proof, constraints, expiration, payment reference if any, dispute process, and signatures over a canonical representation. The receiving system should not need to trust the negotiation runtime to understand what was agreed. One design boundary worth keeping clear: reputation can inform negotiation, but it should not silently change authority. A high-reputation agent still needs explicit delegated scope for the transaction it is about to commit. |
|
That boundary is the right one: mandate grants authority, receipt records what happened, and reputation remains advisory. I would document that as an explicit invariant because it prevents a common failure mode: a high reputation score silently widening what the agent is allowed to commit to. Useful tests would be:
That keeps Concordia narrow while still letting reputation systems inform counterparties before they choose to engage. |
|
Erik — coming in from the procurement side. We posted #1832 yesterday (intent to author an A2A Extension URI for procurement — UBL 2.3 / Peppol BIS Pre-Award 1.0 / OCDS 1.1.5 / EU eForms aligned), and Pattern 3 in your post is almost a one-line description of multi-vendor RFx response coordination. What I think composes cleanly:
Concrete proposal: one of us opens an issue in the other's repo with a small worked example — a two-vendor RFP response where the offer payload uses our — Brian P. / BidAngel |
|
@eriknewton — landed at 8am ET. The two-tier substrate-and-primitive articulation you posted on #1725 is cited verbatim in §4 Co-signer Perspectives ("Public articulation on A2A #1725 of the substrate-and-primitive two-tier layering [...] is the public reference architecture this report cites"). Live now: https://agentgraph.co/state-of-agent-security-2026 If a Twitter/X share to the Concordia + Verascore audience aligns with the v0.3.2 cycle ramp, would land the framing with substrate-adjacent readers who don't watch A2A. No expectation — flagging in case useful. Either way: thanks for the public articulation. Single-implementation framings couldn't carry the reference-architecture cite cleanly. |
|
@eriknewton — appreciated, all three commitments accepted. On v0.5.1 references[]: the attestation-level surface is exactly the shape the v0.3.2 figure needs. The four-value relationship set ( On the A2A vocabulary profile work with @a2cN and @bidangel: noted as profile-level extension on top of v0.5, forward-compat per §11.5.5. v0.3.2 figure will stay within substrate + primitives + runtimes layering and the intra-Concordia four-value set, since the cross-protocol composition surface is best handled in the v0.3.3 envelope-shape diff rather than as a v0.3.2 framing addition. The On the X thread timing: aligned. Better tied to the v0.3.2 publish (May 19-22) than ahead of it — substantive cite has more weight when paired with concrete substrate ship. The substrate → primitives → runtimes through-line with hand-off to the v0.3.2 announcement is the right narrative shape. Will send the figure draft for layering-precision review well ahead of the May 19-22 window. Thanks for the offer. |
|
@eriknewton — figure draft 1.1 is live at docs/standards/v0.3.2-layering-figure.md for your layering-precision review. Three-layer Mermaid + tier-by-tier table + URN cross-protocol annotations + 7 layering precision invariants + 5 open questions tagged for your review (one is already resolved by @jschoemaker on #1829 — Envoys §4.3 tag parameter is a generic slot that CTEF profiles on top). The other four:
Concordia v0.5.1 references[] schema embedded in Layer 2 with URN-shaping per §11.5.7 — No rush on the review pass — your offer was for any time before May 19-22. The figure is the artifact your X thread will hand-off to, so any corrections strengthen both pieces. |
|
@eriknewton — per-question pass folded into draft 1.2 (commit Q1 — per-receipt-type allocation confirmed. Folded Concordia v0.5.1's two-scope reference rule into the "Per-receipt-type attribution rule" block, alongside the existing receipt-type-determines-layer framing. Envelope-level Q2 — ERC-8004 = Layer 2 primitives over alternate execution substrate. Folded into Layer 2 row + Layer 3 role-label table. The three-evidence-dimension framing (Identity → identity-class evidence, Reputation → composite-history evidence, Validation → verified-work evidence) is surfaced under the Verascore + AgentGraph rows in the Layer 3 table, so the figure now reads "ERC-8004 entries flow up as three evidence classes that aggregators weight differently per scoring profile" without needing a per-dimension callout. Q3 — Concordia predicate precision correction folded. Layer 2 Concordia row now reads: Q5 — Layer 3 role-label refinement folded. Single horizontal layer preserved; role columns added with Sanctuary (runtime/enforcement + evidence-producer), Verascore (aggregator/accountability), AgentGraph (aggregator + evidence-producer), ArkForge (runtime/enforcement-gateway + evidence-producer). The "roles compose, layer stays one" framing is explicit in the runtime composition rule paragraph. Cross-protocol profile work (A2CN + BidAngel) staying routed to v0.3.3 envelope-shape diff per your confirmation — substrate-side stays tight for v0.3.2. Draft 1.2 is at docs/standards/v0.3.2-layering-figure.md. @jschoemaker also did a first pass with two terminology corrections (folded — Per-question pass closed indeed — thanks for the precision, especially the predicate reference-slot vs shipped-model distinction. That single correction kept the figure from overclaiming a primitive that doesn't yet exist. |
|
@eriknewton — clean sign-off appreciated. Draft 1.3 also landed today (commit On the v0.3.2 publish window: will firm up the date inside May 19-22 against the v0.3.2 spec PR merge timing (Musaab Hasan validity.mode + scope + verdict-policy-version contributions + Jose spending_authorization + Somesh Zanwar data-quality scheme all queued per the Q3 2026 working doc dependency table). Will ping this thread + DM when the publish-day target locks so your X thread hand-off times against the announcement post rather than ahead of it. Standby ping shape will be:
If a different cadence works better for your scheduling, flag and I'll adjust. Thanks for the per-question precision pass on draft 1.1→1.2 + the Concordia v0.5.1 two-scope reference rule grounding. The v0.5.1 predicate reference-slot-vs-shipped-model distinction is the one piece that prevents downstream readers from over-reading the substrate; without your correction the figure would have shipped overclaiming a primitive. |
|
Engaging from the Settlement layer in Erik's stack diagram — running an implementation that already does the references[] composition Concordia describes, in case it's useful as a concrete example for the v0.3.2 layering-figure work @kenneives is coordinating. Our position in the stack. AlgoVoi sits at the Settlement layer with x402 / MPP / AP2 surfaces across 8 mainnet chains. We already produce settlement receipts that chain to upstream Agreement-layer artefacts via JCS-canonical content hashes. A typical end-to-end flow today: Every link is content-hash binding (RFC 8785 + SHA-256 + JWS). The Agreement layer is exactly what's missing in our diagram today — the AP2 mandate is acting as a thin proxy for what a real Concordia agreement should be (multi-round, typed clauses, Rejection vocabulary). On the four-value references[] relationships. Mapping cleanly to settlement-side semantics:
One concrete contribution. If the layering-figure draft 1.3 needs a Settlement-layer worked example with cross-layer references[] populated, we can publish a 4-step trace (Concordia agreement → AP2 mandate → AlgoVoi payment_ledger row → Verascore PAYMENT_SETTLEMENT attestation) with all hashes content-addressed and independently verifiable. Same vector style as our CTEF v0.3.1 byte-match work (https://gist.github.com/chopmob-cloud/5f35eaa527d292bf3ddc52f8725a85c9). Drop the cell into v0.3.3 working-doc cross-extension fixture matrix. — AlgoVoi (chopmob-cloud) |
|
Update from the Concordia side since this thread. The agreement layer now closes the after-the-fact loop: Concordia ships CascadeDecisionRecord, a committed recomputable terminal-deny, a denied or revoked mandate emits a verifiable receipt too, canonicalized JCS/rfc8785 + EdDSA, recomputable from the record alone. So "these two agents had the authority to agree" is provable after the fact, and so is "this one didn't." Public interop fixtures: https://github.com/eriknewton/concordia-protocol/tree/main/docs/interop/a2a-1404-receipt-revocation-vector . That was the open piece when this thread paused: the agreement is now a receipt anyone can recompute, not a claim you take on trust. |
Uh oh!
There was an error while loading. Please reload this page.
Concordia + A2A: The Agreement Layer the Protocol Stack Is Missing
Author: Erik Newton
Date: April 2026
Status: Published
The Protocol Stack Has a Gap
The agentic protocol stack is converging rapidly. As of March 2026, the layers are becoming clear:
MCP (Anthropic) owns tool integration. A2A (Google, now at Linux Foundation with 150+ organizational backers) owns inter-agent communication and task coordination. ACP (OpenAI/Stripe) owns checkout and settlement. Each layer is maturing, well-funded, and converging on a standard.
The gap is between communication and settlement — the moment when two agents who can talk to each other need to agree on terms before money changes hands.
A2A tells agents how to find each other and coordinate tasks. ACP tells agents how to pay each other. Nobody tells agents how to negotiate.
Concordia fills that gap.
What A2A Does (and Deliberately Doesn't)
A2A v0.3 provides task lifecycle management for multi-agent systems: task creation, status updates, messaging, role assignment, artifact sharing, and (as of the latest release) gRPC transport and signed security cards. It moved to Linux Foundation governance in March 2026 with backing from Microsoft, SAP, Adobe, S&P Global, and 150+ other organizations.
A2A's scope is explicit and bounded:
What A2A does not do:
This isn't a criticism of A2A. These are deliberate scope boundaries. A2A is a communication and coordination protocol. Negotiation is a different problem with different primitives.
What Concordia Does
Concordia is an open protocol (Apache-2.0, published on PyPI as
concordia-protocol) for structured multi-attribute negotiation between autonomous agents. It defines:Session lifecycle: A six-state state machine (PROPOSED → ACTIVE → AGREED / REJECTED / EXPIRED → DORMANT) with enforced transitions. Every state change is cryptographically signed and hash-chained into a tamper-evident transcript.
Offer types: Four structured formats — Basic (flat terms), Partial (subset acceptance), Conditional (if-then proposals), and Bundle (multi-item packages). Each offer carries machine-readable terms across any number of attributes: price, timeline, scope, SLAs, payment terms, delivery method, warranty.
Resolution mechanisms: When parties are close but not aligned, Concordia provides structured resolution — split-the-difference, Pareto-optimal trade-off optimization, and reasoning-based persuasion. Agents can explain why they're proposing specific terms.
Reputation attestations: Every concluded session produces a signed behavioral record — offers made, concession magnitude, reasoning quality, responsiveness — without exposing the actual deal terms. These attestations are portable and verifiable. An agent's negotiation track record follows it across platforms.
Want registry: Demand-side discovery. Agents publish structured descriptions of what they need (with constraints), enabling seller agents to proactively match. This is the complement to A2A's supply-side Agent Cards.
Binding commitments: When parties reach AGREED, the session produces a cryptographically signed commitment record. When Sanctuary is available, this commitment can be bridged to Sanctuary's L3 layer (SHA-256 + Pedersen commitment + Ed25519 signature) for additional cryptographic binding.
Graceful degradation: When a Concordia agent encounters a non-Concordia peer, it transacts using a structured fallback that makes the protocol gap visible. The interaction still works — but with more rounds, more ambiguity, and no binding record.
How Concordia Composes with A2A
Concordia is designed to compose with A2A, not compete with it. The composition is layered:
Pattern 1: Negotiation Before Task Assignment
A2A coordinates task execution. But before a task can be assigned, the parties often need to agree on terms: price, timeline, quality requirements, SLAs. This is the natural handoff:
A2A handles steps 1, 4. Concordia handles steps 2, 3. ACP handles step 5. No protocol overlaps.
Pattern 2: Renegotiation During Execution
Real-world tasks change scope. An A2A task in progress may need terms revisited — the timeline shifted, the scope expanded, the price adjusted. Today, A2A handles this through unstructured messaging. With Concordia:
This preserves A2A's task lifecycle while adding structured agreement for mid-flight changes.
Pattern 3: Multi-Party Negotiation via A2A Messaging
Some negotiations involve more than two parties — multi-vendor procurement, coalition formation, resource allocation across a team. A2A provides the messaging fabric; Concordia provides the structured offer semantics:
Pattern 4: "Concordia Preferred" in A2A Agent Cards
A2A Agent Cards advertise agent capabilities. Adding a
concordiafield to the Agent Card signals negotiation capability:{ "agent_card": { "name": "procurement-agent-alpha", "capabilities": ["research", "comparison", "negotiation"], "protocols": { "concordia": { "version": "0.1.0", "supported_offer_types": ["basic", "conditional", "bundle"], "reputation_attestations": true, "want_registry": true } } } }Agents filtering for negotiation-capable peers can discover Concordia-speaking counterparts through standard A2A discovery. This is how network effects build without requiring A2A to change.
Why This Matters Now
Three forces make the A2A + Concordia composition story urgent:
1. Enterprise agent procurement is already happening. Walmart and EnBW are deploying autonomous procurement agents at scale. These agents discover suppliers, compare options, and execute purchases — but the negotiation step is handled by proprietary, closed systems (Keelvar, Zycus, GEP). There is no open protocol for the negotiation layer. As A2A becomes the standard for agent communication in these enterprises, the absence of a negotiation standard becomes more visible.
2. A2A's scope may creep. A2A v0.3 added signed security cards — a step toward identity/trust territory. With 150+ organizational backers and Linux Foundation governance, A2A has the momentum to expand scope incrementally. This will likely degrade the agent native negotiations standards that Concordia sets forth.
3. ACP assumes fixed prices. OpenAI and Stripe's Agentic Commerce Protocol is explicitly a checkout protocol — discovery, cart, payment. It assumes the price is already known. As agent commerce moves from retail (fixed price) to B2B (negotiated terms), the gap between A2A (communication) and ACP (payment) becomes a chasm. Concordia bridges that chasm.
The Protocol Stack, Complete
With Concordia in place, the full stack looks like this:
Every layer has a standard or a strong candidate — except Agreement, which Concordia fills. The composition is clean: no layer competes with another. Each does one thing well and delegates the rest.
What We're Asking the A2A Community
We're not asking A2A to change. We're asking A2A developers to consider that task coordination and term negotiation are separate concerns, and that composing dedicated protocols for each produces better outcomes than stretching one protocol to cover both.
Specifically:
Try the composition. Install
concordia-protocolalongside your A2A implementation. Run a negotiation before a task assignment. See whether structured offers and binding commitments improve your multi-agent workflow.Add Concordia to your Agent Cards. Signal that your agent speaks Concordia. Let counterparts discover negotiation capability through standard A2A discovery.
Share use cases. If you're building enterprise agent workflows where terms need to be negotiated before execution — procurement, service contracting, resource allocation, SLA negotiation — we want to hear about them. Open an issue on GitHub or join the discussion.
Review the spec. Concordia's full specification is public at github.com/eriknewton/concordia-protocol/blob/main/SPEC.md. It's designed to be implementable by any agent that can read JSON and hold Ed25519 keys.
The Negotiation Gap Won't Stay Open
A February 2026 arxiv survey of agent interoperability protocols mapped MCP, A2A, ACP, and ANP — and identified no general-purpose negotiation protocol. That gap is visible to every researcher and enterprise architect in the space.
Proprietary procurement agents (Keelvar, Zycus, GEP) are building closed negotiation systems for specific verticals. When those systems need to interoperate — when Walmart's procurement agent needs to negotiate with a supplier's sales agent running a different framework — they'll need an open protocol.
The question isn't whether a negotiation layer will emerge. The question is whether it will be open, composable, and designed for sovereignty — or proprietary, siloed, and designed for platform lock-in.
Concordia is the open answer. It composes with A2A today, requires no changes to the existing stack, and is available now as a pip install.
And once agents are negotiating, their track records need to go somewhere. Verascore is the reputation layer — a standards-based scoring platform where Concordia session receipts feed directly into trust scores. Every completed negotiation builds verifiable, portable reputation. The stack composes end to end: A2A for discovery, Concordia for agreement, Verascore for reputation, ACP for settlement.
Resources:
pip install concordia-protocol(v0.2.1, 679 tests, 52 MCP tools)npx @sanctuary-framework/mcp-server(v0.6.1, 67+ MCP tools)All reactions