arizuko

arizukoconcepts › primitives

primitives

arizuko is an event→reaction engine: something happens, an agent reacts. The whole system is six small parts in a fixed order, plus one coordinate system they’re all addressed in. Everything else — channels, tasks, webhooks, secrets, delegation, workflows — is those parts recombined, not new machinery.

Trace one event

The fastest way to see the shape is to follow a single Slack mention from the moment it arrives to the reply going back out:

Slack @mention in #eng
  → Event          one inbox row (messages.db)
  → Routing        → corp/eng/oncall
  → Agent          folder loaded: persona, skills, memory
  → Authorization  may it read / send / delegate here?
  → Turn           one ephemeral container run, then it exits
  → State          rows written, files edited
  → reply in the Slack thread

It looks like feature sprawl until you trace one example — then it’s six steps, every time.

The six primitives

Identity — the coordinate system

Identity isn’t a step in the pipeline; it’s the coordinate system the six steps are addressed in. Subs, JIDs, folders, tiers, scopes. Routing resolves to a folder, authorization keys on a principal, a turn runs as agent:<folder>, state is partitioned by folder — every primitive refers to identity, none sequences it. See auth and addressing.

Workflows — a discipline, not a primitive

A multi-step job thrashes when the agent re-improvises from chat scrollback every turn. The fix isn’t a workflow engine: it’s making the session boundary run a fixed opening — load context, open a plan file, apply the folder’s runbook, scan skills — before the agent free-associates. Conversation stays free; the opening gets strict. That’s Turn + State + the session lifecycle, not new machinery, so it’s a recomposition too.

No special cases

This is the proof that the surface is small: every “feature” is one of the six recombined.

What looks like a featureis really…primitive
Channel adaptersevent sources writing rowsEvent
Webhooks, email, WebDAVmore event sourcesEvent
Scheduled tasksevents on a clock tick → a turnEvent + Turn
Topicsa field on the event + a routing layerEvent + Routing
Engagement, observerouting overridesRouting
Delegation, escalationrouting to a child or parent folderRouting + Agent
Personas, skills, memoryfolder contentsAgent
Workflowsan enforced opening at the session boundaryTurn + State
Grants, scopesviews over the one authorize questionAuthorization
Secrets, egress allowlistfolder-scoped state resolved into a turnState + Turn
A producta folder with persona + skills + routesAgent

The four layers

The same small set of concepts stacks into the things you deploy and ship. This is what arizuko is about: primitives become packages become processes become products.

LayerWhat it isExamples
Primitivesinvariant conceptsEvent, Routing, Agent, Authorization, Turn, State (+ Identity)
ComponentsGo packagesstore, router, auth, grants, ipc, runed, groupfolder
Daemonsdeployable processesauthd + routd + runed; webd, timed, slakd
Productsinstallable agentsSlack team agent, reality agent, company brain

A product sits at the bottom: the same pipeline, a different folder. That’s why a support agent and a personal life agent run the same code. The components section lists the daemons (you deploy daemons, not packages, so the site shows three layers; the package layer is named in the README).

Honest about the seams: the primitives are not mathematically independent — routing reads the event’s shape and is overridden by engagement; authorization is several gates, not one switch; a turn needs grants and egress resolved before it spawns. The wedge is “one job each, fixed pipeline, no special cases,” not strict orthogonality. The three-daemon split (authd/routd/runed) is the only topology now; the one-handler MCP+REST surface is shipping resource by resource, converging, not finished.