Architecture · what we built

One engine. Three surfaces. A graph that survives between queries.

Pulse is a public-signal intelligence engine. The deployed web app, the public MCP and the JSON API are views over the same source-linked knowledge graph. Agents propose; the deterministic Applier writes; every claim has the verbatim evidence behind it.

Capture → extract → crew → Applier → graph.

Every claim is linked back to the verbatim text, the source that produced it and the timestamp that source carried when it was ingested. No claim without evidence.

1 · Capture

Continuous radio capture across ten Barbadian FM stations.

VOB 92.9, CBC 94.7, LIFE 97.5, HOTT 95.3, 98.1 The One, Q 100.7, Slam 101.1, Y103.3, The Beat 104.1, Radio Bimshire 106.1. Parallel text, web, RSS, TikTok, Instagram, YouTube and corpus adapters share the same pipeline.

2 · Transcription & extraction

Three audio passes per chunk, then typed extraction.

Fast local transcription for triage, Nemotron Speech Streaming for the canonical transcript, then a stage-2 typed extraction with HIGHRISE as a bounded fallback. A spend tracker enforces the model budget. On social video, BimOmni (a Qwen3-Omni LoRA tuned on the Barbados newspaper archive) recovers proper nouns like “Kidscape Barbados” instead of “Kids Cake”.

3 · Ingest crew

Curator proposes a Changeset. Reviewer approves or rejects.

Stage 2 emits a typed extraction. The Curator agent (CrewAI) resolves mentions and proposes a Changeset of ChangeOp values. The optional Reviewer approves or rejects each op. Tools gate unsafe operations and validate searched entity IDs. Every kickoff emits its full event stream (LLM calls, tool usage, task boundaries) into the persisted agent_trace_event table.

4 · Deterministic Applier

One transaction. No abandoned batches. Durable evidence handles.

The Applier is the only code that mutates the graph, and it writes in one transaction. Invalid ops are rejected without abandoning the rest of the batch. Source-ledger writes are persisted before any graph mutation, so every claim has a durable handle back to the verbatim evidence and the agent run that proposed it.

5 · Ask side, bounded agent retrieval

One bounded agent loop, then one bounded composer call.

5 steps, 18K tokens, 18s wallclock. The agent drives eleven typed tools (entity resolution, lexical + vector search, claim query, graph walk, expansion, evidence retrieval). Tool calls dispatch in parallel within a turn. A watchdog stops runaway loops. p50 4.5s · p95 13.2s on the 33-query canonical suite.

6 · Three read surfaces

The same graph, three ways to read it.

The deployed web app (app.pulsebarbados.com), the read-only MCP server (mcp.pulsebarbados.com) and the JSON API (/api/health, /api/feed, /api/ask) all read from the same graph. The chatbot is one view; any third-party agent can read the same evidence.

A cropped segment of Pulse's production knowledge graph showing Barbados entities connected through claims and event relationships.

2,363 entities

A weekly-rendered view of the production graph. Places like Bridgetown, Holetown, Oistins and St. Lawrence Gap form visible centres of gravity; events, venues, organisations and concepts arrange themselves around them through their actual edges.

10,918
evidence spans
10
live FM stations

The same evidence graph, for any agent that speaks MCP.

Claude, ChatGPT, OpenClaw and any future MCP-speaking agent can hit mcp.pulsebarbados.com with no client-side code change. Token-in-URL auth, query-string redaction in Caddy's access log and read-only / idempotent / closed-world flags on every tool. Reach out to hello@pulsebarbados.com for MCP access.