arizuko

arizuko hosts many specialized agents on one platform — each a folder with its own persona, skills, and memory, each shaped by talking to it. You say what you want; an LLM edits the files that are the agent. The conversation is the console.

Small daemons keep that bounded: routd routes and authorizes, runed runs each turn in a fresh container, authd issues identity — hard walls around what language can reshape. Agent content lands as plain files; routes, grants, and secrets are rows in SQLite right next to them — one directory on your server holds both. You change an agent in chat, then read the diff on disk.

(Daemons: small programs that run in the background all the time — the trailing “d” is the naming convention.)

# pick a product, make it yours
arizuko create demo --product slack-team
$EDITOR /srv/data/arizuko_demo/.env    # paste the tokens the checklist asks for
arizuko run demo                       # compose up; @mention the bot in a channel

Setup guide · all products · source on GitHub (MIT).

start from a product

A product is a specialized agent you install and then own: a folder with persona, skills, routes, knowledge. Three of the eight in the catalog:

Slack team agent

Slack · shared workspace

One agent per channel: channel-scoped persona, per-teammate memory, email ingest, a usage dashboard.

AWS DevOps agent (Argus)

Telegram oncall · Slack / Discord

An SRE in your chat. Reads your runbooks, proposes before it mutates — and each engineer can act with their own AWS keys, so CloudTrail names the human, not a shared robot.

Reality agent (Rhias)

Telegram · single-user

A personal agent that holds the threads of your life across weeks: named situations, reflection on demand, a monthly sweep over its own diary.

Five more — a public price bot, a trip planner, a company brain — in the catalog. Each is the same engine with different folder contents.

many agents, one platform

Those three aren’t three installs. On one instance they’re three folders in one tree — and that’s the bet: an agent does its job well when it’s specialized. A focused persona with a tight set of skills holds intent; a do-everything assistant drifts. The platform’s work is making specialization cheap and coexistence safe.

trace one event

The feature list looks like sprawl — channels, topics, tasks, webhooks, secrets, delegation. Trace one event top to bottom and it isn’t: when an event fires a turn, it’s these six steps, every time.

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

A scheduled task is the same six steps — the event is a clock tick. A webhook is the same six steps — the event is a POST. An email, a WebDAV file drop, a reaction: rows in the same inbox, through the same pipeline. (Some events stop earlier on purpose — an observe route files the message and ends there.) Nothing is a special case, so the parts don’t multiply.

the six primitives

Each step is one primitive with one job:

Identity is the coordinate system the six are addressed in — folders, JIDs, tiers, scopes. The primitives aren’t independent; they’re layered on purpose. The claim is smaller and it holds: one job each, fixed pipeline, no special cases. The six primitives, in full →

the stack

Those primitives stack into what you deploy and what you ship:

LayerWhat it isExamples
Primitivesthe conceptsEvent, Routing, Agent, Authorization, Turn, State
ComponentsGo packagesstore, router, auth, runed
Daemonsrunning processesauthd + routd + runed; webd, timed, slakd
Productsagents you installSlack team agent, Argus, company brain

A product sits at the bottom: the same pipeline, a different folder. A support agent and a personal life agent run the same code — the difference is what’s in the folder, not the machinery underneath.

you own the files

An instance is one directory. Everything the system is lives in it:

/srv/data/arizuko_demo/
├── .env                 tokens + config
├── store/               routd.db, runed.db, auth.db — SQLite WAL
├── groups/
│   ├── main/            one agent
│   │   ├── PERSONA.md   who it is
│   │   ├── CLAUDE.md    how it operates
│   │   ├── skills/      what it can do
│   │   ├── facts/       what it has learned
│   │   ├── diary/       what happened, dated
│   │   └── public_html/ what it publishes at /pub/main/
│   └── ops/             a second agent — same shape, its own memory
└── web/pub/             the public site — these docs included

Change the persona by editing a file; the next turn picks it up. One tar of the directory is a complete backup — databases, memory, secrets, the site (stop the instance first for a clean copy). Want history? It’s plain files: put groups/ under git yourself and review the agent’s changes as commits (the agent image ships git and a commit skill; the platform doesn’t version the folder for you). The files need no export step — they’re already yours, on your disk.

honest constraints

go deeper

MIT · Go + SQLite (WAL) + Docker.