The fabric, in motion

Every animatic below is a self-contained animated SVG — embed any of them anywhere on the site with a single include.

Twenty-one explainers, small to large

The envelope: every message carries capability, correlation, deadline, a sealed service identity and the requesting user THE ENVELOPE capability fabric.ai.classify correlation_id 7f3a…c9 deadline_at +30s service_id portal ⊕HMAC requesting_user amara@t-04 EVERY MESSAGE. NO EXCEPTIONS.

The envelope

Every message is a signed envelope — capability, correlation, deadline, identity.

Four exchanges: messages out, results back, control heartbeats to the orchestrator, and everything audited under the Cortex eye FOUR EXCHANGES fabric.messages fabric.results fabric.control ORCHESTRATOR fabric.audit CORTEX

Four exchanges

Messages out, results back, a control channel, and an audit stream Cortex watches.

Action versus event: an action goes to one queue and exactly one competing replica handles it; an event fans out and every subscriber reacts ACTION — ONE QUEUE, ONE WINNER SERVICE agent.classifier 3 REPLICAS · 1 CONSUMES EVENT — FAN OUT, EVERYONE HEARS portal.ticket.created 3 SUBSCRIBERS · 3 REACT

Action vs event

Actions are point-to-point; events fan out to every subscriber.

Route by capability, not address: the sender names fabric.ai.classify and the fabric finds an agent — no agent is ever addressed by name ROUTE BY CAPABILITY, NOT ADDRESS SENDER ai.classify fabric.ai.classify THE SENDER NEVER NAMES AN AGENT — ONLY WHAT IT NEEDS DONE

Route by capability

The sender names a capability, never an agent.

Backlogs are normal, capacity is elastic: the queue deepens, a third replica joins, and the backlog drains BACKLOGS ARE NORMAL · CAPACITY IS ELASTIC agent.enricher R1 R2 R3 JOINS QUEUE DEPTH REPLICAS COMPETE ON THE SAME QUEUE — ADD ONE AND THE BACKLOG DRAINS

Capacity is elastic

Backlogs are normal — absorbing a spike is a scaling action.

The retry ladder: three attempts at 5s, 30s and 2m, then the dead-letter queue — where an operator inspects and replays THE RETRY LADDER QUEUE AGENT 5s 30s 2m 3 ATTEMPTS · ESCALATING BACKOFF dlq.agent-type OPERATOR MANUAL REPLAY

The retry ladder

Five seconds, thirty seconds, two minutes — then the dead-letter queue and operator replay.

Delivered twice, executed once DELIVERED TWICE, EXECUTED ONCE AGENT req-7f3a req-7f3a ACKED processed:req-7f3a ✓ VALKEY IDEMPOTENCY KEY

Delivered twice, executed once

Idempotency by request id: duplicates are acknowledged, not re-executed.

Every request carries a deadline EVERY REQUEST CARRIES A DEADLINE AGENT deadline exceeded · acked deadline_at checked before processing

Every request has a deadline

Work that cannot finish in time fails honestly.

The control plane is never in the hot path THE CONTROL PLANE IS NEVER IN THE HOT PATH SERVICE QUEUE AGENTS RESULT TRAFFIC KEEPS FLOWING fabric.control ORCHESTRATOR 30s heartbeat offline registration · heartbeat · capability index — never routes messages

Out of the hot path

The orchestrator tracks what exists and whether it is alive — and never routes a message.

Three layers of who THREE LAYERS OF WHO service_id agent user:1042 system:health-monitor SENDING SERVICE · HMAC-SEALED AGENT IDENTITY REQUESTING PRINCIPAL EVEN CRON HAS A NAME AUDIT

Three layers of who

The service, the agent, and the principal — all named, even for cron.

An agent is code AN AGENT IS CODE DETERMINISTIC PYTHON CLASS parse decide call respond classify control flow is code — the model works inside it, on targeted subtasks

An agent is code

Deterministic control flow, with the model invoked for one targeted subtask.

Three patterns, in order of preference THREE PATTERNS, IN ORDER OF PREFERENCE 1 · PURE CODE deterministic path, no model 2 · TARGETED SUBTASKS classify / extract / draft — default 3 · LLM-ORCHESTRATED rare · open-ended work · MCP reach for the model last, and only as far as the task demands

Three patterns

Pure code, targeted subtasks, LLM-orchestrated — in order of preference.

Typed at the ports: incompatible edges are refused at authoring time TYPED AT THE PORTS ports typed by JSON Schema · incompatible edges refused at authoring time schema mismatch — edge refused trigger agent · classify agent · embed transform output

Typed at the ports

An edge between incompatible shapes is refused at authoring time.

Six ways to fire a transducer: manual, cron, webhook, queue listener, result-of, audit pattern SIX WAYS TO FIRE every trigger feeds the same graph · queue listener is the primary reactive mode transducer manual cron webhook result-of queue listener audit pattern

Six ways to fire

Manual, schedule, webhook, queue, result-of, audit pattern — one graph carries them all.

Workflows are data, not deployments: publishing a transducer is saving a row, no pipeline WORKFLOWS ARE DATA, NOT DEPLOYMENTS publish = INSERT INTO transducer_versions · live instantly v2 v3 transducer_versions v1 · 2026-05-02 v2 · 2026-06-11 v3 · now no deploy watcher · live

Workflows are data

Publishing a transducer is saving it, not shipping code.

Autonomy proposes; operators publish: planner drafts a graph, an operator approves it AUTONOMY PROPOSES · OPERATORS PUBLISH planner composes from the capability catalogue · persisted as DRAFT until an operator publishes "watch coastal water quality" capability catalogue ea-flood bathing correlate classify summarise planner DRAFT PUBLISHED operator APPROVE catalogue

Autonomy proposes

The planner drafts a workflow from a goal; an operator publishes it.

Swap the provider, not the code openai.chat( …same code… ) AGENT TENANCY VAULT provider_kind model_overrides billing_mode AES-GCM · key never leaves cfg OpenAI cloud · /v1 Inference Specialist open models · on-prem /v1 POST /v1/chat POST /v1/chat SAME OPENAI-COMPATIBLE CALL · PER-TENANT PROVIDER RESOLVED PER REQUEST

Swap the provider, not the code

Per-tenant provider resolution with keys encrypted at rest.

Every token has an owner LLM CALL FABRIC.AUDIT audit.ai.call in:812 out:1204 tok CORTEX · COST.EVENT COST_RULES · EDITABLE LIVE base + per-token $0.30 $0.36 meter no deploy £0.0042 TIMESCALEDB HYPERTABLE t-a t-b t-c t-d t-e TOKENS → PRICED PER TENANT · RATES EDITED AT RUNTIME, NO DEPLOY

Every token has an owner

AI calls are priced as they happen and attributed to a tenant.

Connect a source once met-office ea-flood uk-air tfl bathing-water portal events 11 LIVE SOURCES adaptor.source.* STREAM-AGGREGATOR TRANSDUCER AGENT PRISM CONSOLE ONE CONNECTION · EVERY CONSUMER DRINKS FROM THE SAME STREAMS

Connect a source once

Eleven live sources stream onto the mesh for every consumer at once.

From audit stream to understanding: Cortex lifts fabric.audit through representations, aggregations and projections FROM AUDIT STREAM TO UNDERSTANDING fabric.audit cortex · read-only REPRESENTATIONS rates embeddings trends AGGREGATIONS windows · group-by PROJECTIONS 2D projection · clusters activation embedding cost

From stream to understanding

Cortex turns the audit stream into representations, aggregations and projections.

Coordination nobody commands: pheromone trails with TTL evaporation guide agents toward an emergent shared path COORDINATION NOBODY COMMANDS pheromone:* keys · TTL evaporation · sense & reinforce

Coordination nobody commands

Pheromone trails evaporate unless the colony keeps them warm.

Six real-world scenarios

Prism is where each story starts and ends. Loom is everything in between.

A ticket enriches itself PRISM #4821 “checkout is broken…” negative billing 3 similar portal.ticket.created → ticket-enrichment AGENT fabric.ai.sentiment fabric.ai.classify fabric.ai.embed similarity vs recent FABRIC.AUDIT audit.ai.call · £ audit.ai.call · £ audit.ai.call · £ audit event · £ POST /enrich · OAuth2 bearer MICRO-SUBSTRATE

A ticket enriches itself

A ticket lands in Prism; Loom scores sentiment, classifies, embeds and links similar tickets — then writes it all back.

A document understands itself: upload, enrichment chain, OAuth2 callback A DOCUMENT UNDERSTANDS ITSELF PRISM · PORTAL drop PDF portal.document.uploaded DOC-INTELLIGENCE extract / ocr NLP ENTITIES people · orgs SUMMARISE audit.ai.call TRANSLATE entities summary translation OAuth2 callback FABRIC.AUDIT · COST TICKS MICRO-SUBSTRATE

A document understands itself

An upload flows through extraction, entities, summary and translation before returning to Prism.

Watching the coastline ea-flood stream-water bathing-water ADAPTORS adaptor.source.* STREAM-AGGREGATOR join CORRELATION TRANSDUCER flood ∩ beach PRISM · EARTH-SCIENCE CONSOLE webhook local council FABRIC.AUDIT MICRO-SUBSTRATE

Watching the coastline

Flood, stream-water and bathing-water feeds correlate into one alert on the earth-science console.

Rack 7 is overheating: sensor stream to classified alert RACK 7 IS OVERHEATING RACK SENSORS R7 ENRICHMENT ATOMS rolling-stats anomaly-score R7 z QUEUE LISTENER fabric.iot.classify-status critical overheat PRISM · DATACENTER OPS ALERT rack-7 overheat FABRIC.AUDIT +1 MICRO-SUBSTRATE · ELASTIC CAPACITY

Rack 7 is overheating

Sensor streams are enriched at ingestion; a transducer classifies the anomaly and the heatmap turns red.

The Friday report writes itself: scheduled scan, pipeline, styled report into Prism THE FRIDAY REPORT WRITES ITSELF CRON · FRIDAY 06:00 system:compliance COMPLIANCE-REPORT orchestrates NETWORK-SCANNER port-scan ssl-check headers DATA-PIPELINE STYLED REPORT PRISM · DELIVERED FABRIC.AUDIT — EVERY STEP ON THE RECORD MICRO-SUBSTRATE

The Friday report writes itself

The scheduler fires with a named system principal; scanners, charts and a styled report follow.

Healing before the pager: failed health check to assessed, recovered service HEALING BEFORE THE PAGER ENDPOINT-MONITOR every 30s SERVICE check failed retry ok fabric.finding.performance INCIDENT-RESPONSE on fabric.finding.* latency logs deps retry 5s retry 30s ok causal chain · summary PRISM · ALERTS assessment recovered FABRIC.AUDIT MICRO-SUBSTRATE

Healing before the pager

A failed health check becomes a finding, a diagnosis, and a causal chain in the alert console.