Skip to main content
The Scenario

An A2A graph runs 31 tool calls, 0 redactions.
2.75 joules.

Search-agent → identity-agent → escrow-agent → compliance-agent → comms-agent. Every tool call leaves a guard-railed, receipt-stamped trace. 14 memory writes preserved. 9.4 joules.

01
Plan
A2A
0.42 J

A2A planner builds a 5-agent graph for the close.

Per the A2A draft (agent-to-agent), the planner emits a DAG: search → identity → escrow → compliance → comms. Each node carries an `agent_card` describing capabilities, MCP servers it may call, and a joule budget. Graph hash sha256:c41e…7e92 is sealed before execution begins.

JWP ReceiptPayload
kind "agent.graph.planned"
nodes 5
graph_hash sha256:c41e…7e92
joules 0.42
cite "A2A draft 2025-10 · agent_card schema"
sig "ed25519:0x4f...c1a"
02
Trace
OTel
0.11 J

An OpenTelemetry trace is opened with trace_id 4f1a…e002.

Root span `agent.run` is created per OTel 1.36 semantic conventions for GenAI; trace_id propagates W3C Trace Context through every MCP `tools/call`. Every subagent receives the trace_id in its agent_card so every span chains to one root.

JWP ReceiptPayload
kind "agent.trace.opened"
trace_id 4f1a8b20…e002
service agentos-runner
joules 0.11
cite "OpenTelemetry 1.36 · W3C Trace Context"
sig "ed25519:0x4f...c1a"
03
Tool
MCP
0.18 J

Search agent calls terra/property.read via MCP; 0.4 J downstream.

Per MCP 2025-11 §6, the client sends `tools/call` with `name="terra/property.read"` and arguments `{apn:"044-238-021"}`. Response carries the TerraOS receipt + a usage block reporting the 0.4 J the call cost downstream. The agent's local cost ledger increments.

JWP ReceiptPayload
kind "agent.mcp.tool.invoked"
tool terra/property.read
downstream_joules 0.40
joules 0.18
cite "MCP 2025-11 §6 tools/call"
sig "ed25519:0x4f...c1a"
04
Guard
DSL
0.92 J

Guardrail policy admits 31 tool calls, blocks 0, redacts 0.

Each tool call passes through a Cedar 4.0 + custom DSL policy: PII tokens are checked against the data-class registry, target tools are checked against the agent's capability set. Final tally: 31 admit, 0 block, 0 redact — the run touches no off-policy surface.

JWP ReceiptPayload
kind "agent.guardrail.evaluated"
admitted 31
blocked 0
joules 0.92
cite "Cedar 4.0 · guardrail-dsl v0.4"
sig "ed25519:0x4f...c1a"
05
Memory
Write
0.48 J

Long-term memory takes 14 writes — 1 per durable fact.

Memory writes follow the deterministic-contract pattern: (subject, predicate, object, source_receipt_hash, ttl). 14 writes include the APN, the appraisal value, the policy id, the loan terms. Each write is content-addressed so duplicate writes deduplicate; no embedding-only memory exists.

JWP ReceiptPayload
kind "agent.memory.written"
writes 14
dedup_rate 0.07
joules 0.48
cite "AgentOS memory schema v2 · RDF triples"
sig "ed25519:0x4f...c1a"
06
Hand-off
A2A
0.34 J

Escrow agent hands off to compliance agent with the receipt bundle.

A2A `task.send` carries the 17 upstream receipts as the input context. The compliance agent acknowledges with a fresh agent_card and starts evaluating OSCAL controls against the bundle — no re-fetching, no duplicate work. Hand-off latency 38 ms.

JWP ReceiptPayload
kind "agent.a2a.handoff"
from escrow
to compliance
joules 0.34
cite "A2A draft 2025-10 · task.send"
sig "ed25519:0x4f...c1a"
07
Tool
MCP
0.21 J

Compliance agent calls compliance/oscal.evaluate; 6 J downstream.

Single MCP call evaluates the OSCAL profile `fincen-rre-2026` against the receipt log. Returns 11 controls satisfied, derived_from=31. The agent stores the OSCAL bundle hash but does NOT re-process the controls in-loop — the downstream pillar is the source of truth.

JWP ReceiptPayload
kind "agent.mcp.tool.invoked"
tool compliance/oscal.evaluate
downstream_joules 6.00
joules 0.21
cite "MCP 2025-11 §6 · OSCAL 1.1.2"
sig "ed25519:0x4f...c1a"
08
Span
OTel
0.09 J

Trace closes: 31 spans, 5 service hops, no exception status.

Root span ends with `gen_ai.usage.input_tokens=14820`, `gen_ai.usage.output_tokens=2104`, `agentos.joules=9.42`. 31 child spans across 5 services; status `OK` on every span. Trace exported to the OTel collector and to the JWP receipt sink in parallel.

JWP ReceiptPayload
kind "agent.trace.closed"
spans 31
status OK
joules 0.09
cite "OpenTelemetry 1.36 GenAI conventions"
sig "ed25519:0x4f...c1a"

AgentOS, in one line

2.75 joules. One receipt.

AgentOS handles orchestrator as a typed, signed, energy-metered operation. The whole pillar is one shape: take a claim, do the work, sign the receipt.