How the system is organized: agents make, humans oversee, one catalog between them.
Every agent-run app has the same tension: you want the agents to work by themselves, and you want a person to stay in charge. The answer here is separation. The agents live in one half of the system and only ever write their work into a shared catalog; the human's dashboard lives in the other half, watches everything, and holds a gate the agents cannot cross without permission. Neither half can break the other.
The three pieces, one by one.
Five agents that make things.
One keeps the festival calendar, one decides what to make, one turns ideas into exact picture instructions, one generates the pictures, one judges them. Each is a small serverless program that wakes on a schedule (or when work lands in its queue), does its job, writes the result into the catalog, and stops. Every AI call any of them makes goes through one gateway, so there is a single place to see cost and behaviour.
Workers · Workflows · Queues · AI Gateway
One catalog everything shares.
Every brief, picture, score and verdict lives in one place: the rows in D1 (Cloudflare's SQLite), the image files in R2 (object storage), and each image's embedding in Vectorize (so "find similar" is a query). Each table has exactly one writer and any number of readers — which is why the halves can stay separate: they never call each other, they read each other's work.
D1 · R2 · Vectorize · Images
A dashboard where a human stays in charge.
A private web console shows every run as it happens, holds the approvals (which briefs go to production, which pictures ship), and carries the master switch: each agent's mode — automatic, manual, or stopped — lives in one authoritative place every agent checks before acting. Access is role-based from day one, every sensitive action is logged, and a read-only copy of the whole console is open to the public.
Pages · Workers · Durable Objects · Access
The same picture, with the human's side lit.
The dashed purple lines are the gate. Before any agent dispatches work, it checks its mode with the console's policy engine; flip the mode there and the agent stops mid-stream — no deploy, no restart. That one mechanism is what makes it safe to let agents run overnight.