Namaste Ji by Ayushman Dash

Two planes, one spine, and a human can pause anything.

Pull the picture apart and three things remain: a production plane where agents make things, a control plane where a human watches and gates, and the catalog both of them lean on. Everything else is detail.

The planes, slid apart.

Production plane

Agents that make things.

Events Calendar · Creative Head · Content Director · Content Creator · QA Agent. Each is a Worker (Agents SDK + Workflows), runs on cron or on a queue, writes artifacts (briefs, shots, assets, scorecards) into the catalog, and speaks to the outside only through the AI Gateway.

agents/* · Workflows · Queues · AI Gateway

The spine

The content catalog.

D1 (shots · content_assets · content_embeddings · eval_runs · scorecards) · R2 (masters + variants) · Vectorize (1024-d cosine, embed-v4) · Images (WhatsApp-optimised variants, ThumbHash). The Creator is the sole writer of assets; the Lab owns its derived tables; everyone else reads.

packages/catalog · D1 · R2 · Vectorize

Control plane

A human watches, gates, pauses.

The console (apps/console) + console-api: RBAC from day one (Cloudflare Access at the perimeter, D1 roles inside, deny-by-default, append-only audit), the Control DO that every agent runs inside (auto ⇄ manual ⇄ paused, kill switch), approvals (briefs, the QA gate), KV config, the open read-only door at demo.namasteji.org.

apps/console · services/console-api · packages/rbac · Control DO

The same picture, with the control plane lit.

Dashed purple = the gate: console → agents. Everything the agents do passes an autonomy check first; a flag in the Control DO stops dispatch without a deploy.

CLOUDFLARE — Workers · Queues · D1 · R2 · KV · Vectorize · AI Gateway · Pages · Access · Secrets Store · Durable Objects · Workflows · Images Production plane — the agents Events Calendar → Creative Head → Content Director → Content Creator → QA Agent Control plane — the console Console · Control DO gate · RBAC · Langfuse · AI Gateway The catalog — the shared spine D1 (shots · assets · embeddings · scorecards) · R2 (masters + variants) · Vectorize (1024-d) · Images Feed serving — three loops nightly offline brain → per-user slates in KV → rank() online (and on-device) Consumer plane web-first app (app-staging) · consumer-api · Better Auth (phone OTP) · events → Pipelines Events Calendar cron 02:00 Creative Head cron 05:00 Content Director cron */15 Content Creator Queues QA Agent cron */6h Console (BO)demo.namasteji.org Control DOauto ⇄ manual · kill switch D1 · catalog R2 · content Vectorize · embed-v4 Images · variants D1 · console (RBAC · runs) offline brain (nightly) slates · KV (per user) rank() · online + on-device consumer-api 📱the app gate a greeting's journey: events → brief → shots → picture → judged → catalog → slate → phone

Why it looks like this.

Go deeper

In the repo

  • packages/catalog (the spine: D1 schema + R2 keys)
  • services/console-api (control plane API, RBAC)
  • packages/rbac
  • agents/* (production plane)