Adapters

One event in. Many renderers out.

Adapters translate agent or domain state into portable Signal Contract events. The protocol stays open. Renderers and protected substrate stay governed.

Direct answer

What is an adapter?

A thin producer that emits renderer-facing events. Reference adapters show the shape. Production adapters like SERPRadio prove the contract on live domains. Register against governance rules — do not expose private implementation contracts on public pages.

Gallery

reference

Browser Pulse

Reference browser renderer: visual pulse, trace rows, and JSON from one Signal Contract stream.

Open adapter page
production

SERPRadio

First live Domain Adapter — route intelligence, materialized state, and audio previews in production.

Open adapter page
planned

Python Logger

Reference logger adapter for emitting validated events from scripts and agent runtimes.

Open adapter page

Canonical schema

Build against the schema, not the demo.

The schema is the contract. Demos are renderers. Adapters produce the event shape below.

https://vibenet.ai/protocol/v1/schema.json
{
  "schema_version": "1.0",
  "id": "sig_demo_005",
  "occurred_at": "2026-04-19T18:32:18.442Z",
  "producer": "vibenet-demo",
  "entity": "agent.serpradio.route_intelligence",
  "event": "handoff.requested",
  "channel": "handoff",
  "valence": 0.42,
  "energy": 0.66,
  "tension": 0.73,
  "intensity": 0.72,
  "hue": 44,
  "pulse": 0.78,
  "confidence": 0.94,
  "ttl_ms": 15000,
  "metadata": {
    "reason": "source_confidence_below_threshold",
    "route": "JFK-LHR"
  }
}

Adapter surface

The adapter shape

Adapters are thin translators. Emit normalized Signal Contract events from your runtime. Renderers stay downstream so the same event can drive audio, visual, and trace surfaces.

"type AdapterInput = {\n  agentId: string;\n  event: \"planning\" | \"tool_call\" | \"warning\" | \"handoff\" | \"complete\";\n  valence: number;\n  energy: number;\n  tension: number;\n  summary?: string;\n};"

Adapter surface

Renderer reference

Renderers consume validated Signal Contract fields. Audio, visual pulse, trace, and receipt views can differ, but they should all follow the same event and clock.

"type RendererTarget =\n  | \"audio\"\n  | \"visual_pulse\"\n  | \"trace\"\n  | \"receipt\";"

Build path

Adapter first. Renderer second.