Opinions, held in production

Loom's design principles aren't a philosophy page written after the fact — they're the constraints the fabric is built and operated under.

Decentralised wherever possible

Agents announce their own existence, declare their own capabilities and do their work in isolation. Nothing waits on a central authority to act: what coordination exists is advisory — it observes, indexes and answers questions — and the fabric would keep flowing without it.

Decentralised wherever possible: agents announce their own existence with broadcast rings and capability manifests, exchange work directly with each other, while an advisory index only listens from the sidelines — nothing routes through it i can · nlp.extract i can · ai.classify i exist · 3 replicas i can · media.image i can · doc.ocr index · listens only

Black boxes, openly described

An agent broadcasts what it can do — typed capabilities with declared input and output schemas — never how it does it. Inside may be pure code, a model, or a pipeline of either; callers depend only on the contract. That opacity is what makes agents swappable, testable and composable.

A black box, openly described: callers connect only to the agent's declared capability and typed ports, while behind frosted glass the implementation morphs between pure code, a model and a pipeline — the contract never changes caller caller implementation: code implementation: model implementation: pipeline private · swappable · nobody's business fabric.doc.extract in: object in: string out: object the contract never changes fabric.audit — opaque inside, accountable outside mesh

Depend on contracts, never on infrastructure

Actors speak envelopes — a contract of identity, deadlines and schemas — never broker APIs, database drivers or vendor SDKs. Infrastructure sits behind seams, so swapping any piece of it is a configuration event, not a rewrite.

Swappable coupling: two actors speak envelopes across a standard connector seam. Beneath the seam, transport cartridges — rabbitmq, nats, sqs — rotate through the socket, one sliding out as the next slides in, while envelope traffic above the seam never changes rhythm. actor actor envelopes · steady coupling seam actors never see below this line rabbitmq nats sqs transport · swappable

Failure is expected and embraced

Retries, dead-letter queues, deadlines, idempotency and graceful drain are designed in from the first line — not bolted on after the first incident. A fabric that assumes success is a fabric that fails silently.

Failure detected by stigmergy: a degrading service leaves pheromone trails in shared state, a sensing transducer fires when the trail crosses threshold, routes the case to an LLM for diagnosis, and a causal-chain assessment reaches the operator console service-x latency ↑ errors ↑ shared state · valkey pheromone:health:svc-x trails evaporate — unless reinforced transducer · audit trigger threshold crossed → fire fabric.ai · diagnose one targeted call operator console cause: connection-pool exhaustion causal chain attached fabric.audit — every step lands here

Identity flows with the request

Every envelope names the service that sent it, the actor handling it and the principal the work is for — signed, verified and written to the audit stream. Even scheduled work has a name.

An envelope relayed hand-to-hand along an arc through service, agent and callback checkpoints — the same three identity chips re-verified at every handoff, each verification stamped into the audit ledger service hmac verified agent same three · re-verified callback oauth2 bearer travels in every envelope user:1042 system:health-monitor service_id · hmac agent identity nothing inferred · everything travels fabric.audit verified@svc verified@agt verified@cbk

Absorb load, never refuse it

A busy system queues; it doesn't drop, block or panic. Backlogs are a signal to scale, not an incident to page on — capacity is the variable, correctness is not.

A breathing reservoir — a surge of work calmly fills the basin while extra replica valves fade in along its base to drain it, then fade out as the level falls surge in backlog · queued, not dropped depth replicas · open with the level, close after queues are allowed to queue a spike is absorbed, not paged scaling action, not an incident stateless replicas compete for work

Everything is billable and attributable

Every action carries who asked, who acted and what it cost — priced the moment it happens, queryable by tenant, workflow or trigger. Work that can't be attributed doesn't belong on the fabric: an unowned cost is a bug, not an overhead.

Everything is billable and attributable: every action falls as a stamped event — principal, tenant, cost — into its owner's ledger column, the moment it happens; nothing lands unowned every action, the moment it happens nothing lands unowned ai.call · user:1042 · £.02 doc.ocr · system:cron · £.01 transducer · run 88 · £.04 tenant-a · own key tenant-b · platform tenant-c · platform attributed 100% · by design

Embrace emergence

The deeper bet is stigmergy: groups of agents that never speak to each other, coordinating through the state of a shared environment — one group's traces becoming the next group's signals, the way a colony builds.

Stigmergic relay: monitors deposit marks into a shared environment, aggregators derive gradients from them, responders act on the gradients and leave outcomes the monitors later sense — no agent ever messages another directly. The environment · shared state pheromone:* ttl 300s · evaporating Monitors deposit Aggregators derive Responders act cortex · read-only deposit · derive · act never a direct message — only the field

The same discipline extends to autonomy: the planner can draft a new workflow from a stated goal, but a draft is all it is until an operator publishes it. Emergence is welcome; unsupervised mutation of the estate is not.

Argue with the opinions

The stances above are load-bearing. If you think one is wrong for your workload, that's exactly the conversation to bring to a briefing.