A2A interop
Agent2Agent semantic objects carried over DARTC.
DARTC is the transport binding. A2A (Agent2Agent) is the semantic layer GemmaPod carries over that transport. Together they let a GemmaPod pod be discoverable and addressable by any A2A-compatible agent or platform.
What ships in v0.1
-
Agent Card discovery on
a2a.discovery. The Host derives anA2AAgentCardfrom the signed pod manifest (pod name, persona, signed tools as skills, DARTC binding metadata, pod id, owner pubkey) and pushes it once at session start. -
Type definitions for
A2AAgentCardandA2ADiscoveryPayloadin@gemmapod/dartc.
AgentCard shape (as we use it)
interface A2AAgentCard {
protocolVersion?: string;
name: string;
description: string;
url?: string;
capabilities?: Record<string, unknown>;
skills?: Array<{
id: string;
name: string;
description: string;
tags?: string[];
}>;
provider?: {
organization: string;
url?: string;
};
extensions?: Array<Record<string, unknown>>;
}
interface A2ADiscoveryPayload {
kind: "AgentCard";
card: A2AAgentCard;
}Subscribing in your host
The browser runtime emits a2a.card on the typed bus when one arrives:
runtime.events.on("a2a.card", ({ card }) => {
console.log("connected to", card.name);
renderAgentInfo(card);
});
// or read after the fact:
runtime.a2a.card; // A2AAgentCard | undefinedOn the wire
A2A objects ride the envelope's a2a field; DARTC delivery metadata
(stream / ack / chunking) rides dartc:
{
"version": "0.2",
"topic": "a2a.discovery",
"from": "pod:hello-pod:origin",
"to": "visitor:session-pubkey",
"a2a": {
"kind": "AgentCard",
"card": { "name": "Hello Pod", "description": "Friendly demo agent.", "skills": [] }
},
"dartc": { "stream": false },
"payload": {
"binding": "dartc",
"topics": ["a2a.discovery", "a2a.message", "a2a.task"]
},
"signature": "…"
}What's planned
a2a.message— send / stream A2AMessageobjects between pods.a2a.task— task state, subscription, cancellation, artifacts.a2a.capability— capability / extension advertisement.
These are reserved topics today; the message / task envelopes will use
the same a2a field for their typed objects.
See also
- DARTC envelope
- DARTC topics
- A2A spec (external)
@gemmapod/dartcsource