● 14 agents live cloud run supabase anthropic + gemini + openai slack bolt pgvector

A production multi-agent fleet, running today.

Fourteen specialized agents on Cloud Run, coordinated through a single event bus, an issue-tracker substrate, and a manager agent on Slack. Hand-built around the needs of a real SaaS product. This is the architecture, the stack, and the patterns that hold it together.

01Stack

Each agent is its own Cloud Run service, its own deploy, its own health endpoint. Conversation state and memory live in Postgres. No agent process state.

Compute
Cloud Run · Node 20 · Express · scale-to-zero
Persistence
Supabase Postgres × 2 (App + Ops)
Vector
pgvector · a hosted embedding model
Reasoning
A frontier writing and tool-use model, a fast loop-agent model, a hard-reasoning model
Cost-sensitive
A cheaper family for summarization and classification
Image gen
A production image model, graded by a different family
Voice
GHL Voice AI MCP (Streamable HTTP)
Front door
Next.js Command Center · AWS Amplify
Messaging
Slack Bolt (HTTP) · Mailgun · GHL

02The substrate

Three Postgres tables and one vector table do most of the coordination work. Everyone reads. Everyone writes. The substrate is adapted from Open Brain (OB1), Nate B. Jones’ open-source pattern of one Postgres + pgvector + MCP layer that any AI tool can plug into. We took the “one shared brain” primitive and grew it out into the four tables below, plus a Slack-Bolt manager and per-agent signal stamping.

Event bus

ops_events

Append-only event log. Every agent stamps every meaningful action. Director Dana reads it. Pete’s weekly proposer reads a rolling window of it as prompt context.

Workstream substrate

ops_initiatives

Issue trackers, agent-native. Each workstream is a structured row with scope, risk class, status, and a recorded outcome. Agents propose; humans approve; agents execute and close.

Approval queue

ops_approval_queue

Unified human-in-loop. One Slack channel posts cards. One dashboard shows the queue. Approve / Reject / Regenerate (fresh-cycle, capped via events).

Vector recall OB1

agent_memory

Reply pipelines (Nadia, Larry) use semantic search across past replies for context continuity. Agents query through a recall function, never raw SQL. The pattern follows Open Brain’s document-match primitive.

03Architecture

Coordination flows through three patterns. Default is event-bus signal. Conversational dispatch goes through Dana. Direct calls are reserved for latency-sensitive paths.

ops_events (append-only) all agents stamp · all agents read Larry Nadia Pete Alex Edith / Mike Director Dana manager · Slack Bolt ops_initiatives ops_approval_queue Human approver Cloud Scheduler Slack channels Stripe / GHL / web Command Center dashboard
Top: agents stamp the event bus. Right: Dana reads it and dispatches. Left: workstreams + approvals are first-class substrates. Bottom: external triggers feed the agents.

04Agent inventory

Fourteen agents, each with one job, a documented trigger, and a model picked for that job. Models are env-configured and flippable without redeploy.

AgentTriggerModelNotable pattern
ScoutForm-opt-in webhookdeterministicFit + reachability scoring, dedupe before lookup
LarryNew-lead tagLLMSub-60s response, native tool use, 4-question qualifier
NadiaStripe webhook · tag + cronLLM30-day onboarding feature tour; vector-memory reply enrichment
AlexDaily crondeterministicEngagement score → churn handoff to Nadia
RitaTag + schedulertemplated + LLMReal stats from the event bus, not placeholders
CarterInbound email · voice callLLM + voiceBilling/account replies, curated how-to library, sub-second voice actions
AnnieDaily scans + deploy-triggeredLLM judge (decorrelated)Judges product-AI conversations; findings dedup by fingerprint; confirmed findings become regression fixtures
MaxSlash command + cronLLMApproval queue + hero-image hand-off
DerekMax approval signalimage genPair-generation with quality grading
DanaSlack + cronLLMNL dispatch, conversational state in DB
PeteEvent bus + weekly cronLLMWeekly self-proposer
EdithCron / 10 minLLMPattern-match diagnosis, noise suppression
EdwinBefore every senddeterministicDeliverability guard, suppression check ahead of fleet sends
MikeDaily crondeterministicWorkspace-partitioned spend, daily reconcile

05Coordination patterns

Three patterns, ordered by frequency. Default is event-bus signal. Conversational dispatch via Dana for human-initiated work. Direct calls are reserved for latency-sensitive paths.

01 / default

Signal via ops_events

Larry stamps a "lead qualified" event. Pete reads it and moves the CRM stage. No agent calls another agent directly when an event-stamp would do. The event is the durable record.

02 / NL dispatch

Conversational via Dana

Human types /dana max draft an email. Dana’s tool-use loop picks the right tool, calls the agent, posts back in thread. One front door for the whole fleet.

03 / direct

Direct call (rare)

Alex computes a daily digest and hands the affected users straight to Nadia’s reactivation path. Direct because timing matters and the payload is precise. Always paired with an event stamp.

06Novel patterns

A non-exhaustive list of design choices that go above the baseline of “wire some LLMs to a CRM.”

pattern

Issue trackers as agent substrate

Workstreams are first-class structured rows with a recorded outcome on close. Closed workstreams are the first thing the next session reads.

pattern

Self-proposing weekly cycle

On a weekly cycle Pete reads recent activity, drafts a small set of proposals within a constrained shape, and writes them out. Human approves. Pete executes and closes.

pattern

Risk-tiered auto-approval

Low-risk, high-confidence actions auto-execute. Anything consequential queues for human review. The risk class travels with the proposal; the executor refuses misshapen ones. Defense in depth.

pattern

Pattern-match diagnosis + LLM fallback

Edith pattern-matches known errors against a runbook. Routine noise is suppressed. Known-actionable patterns get structured diagnoses. Genuinely new failures escalate to a stronger model. Keeps the noise floor low.

pattern

Cross-agent handoff via signals

Alex doesn’t just call Nadia; it stamps a churn-risk event and direct-calls. The event is the durable record; the direct call is for speed.

pattern

Multi-model routing

Planners, high-volume responders, hard-reasoning diagnostics and cheap grading each get a model matched to the job. The choice lives in config and flips without a redeploy.

pattern

Per-agent /health version sync

Every agent reports its own version, and the version is kept honest in more than one place. Codified after a real incident where a health check lied after a deploy. Now a hard rule across all agents.

pattern

Content guard sanitizer

Tone tells, off-message phrasing and off-feature mentions are stripped at runtime, plus a whitelist so Max can only reference real features. Layered defense before any output ships.

pattern

Two-phase upsert for backfills

When reconciling an external system into a substrate, read what's there first and preserve human-set fields before writing back. Prevents identifier churn and human-edit loss across runs.

pattern

Daily health digest

Each morning Edith turns the last 24h of events into error trends, silent-agent flags and aggregate signals. The closest thing the fleet has to “what happened overnight.”

Roadmap

Where it’s heading

Live today: 14 agents, a shared substrate, a weekly self-proposer cycle, and a feedback-driven self-tuning loop under a human gate. The system is actively evolving: more workers proposing their own work, less dependence on any single channel, and tighter quality gates before anything graduates to running unattended. Scoped, deliberately, one step at a time.

07Want to go deeper?

Two long-form docs sit behind a quick request form. I review every request myself and reply within a day.

Open · 3 min read

Plain-English version

Same fleet, no jargon. For when you need to explain it to someone who isn’t in the weeds.

Read it
Gated · 12 min read

Comprehensive overview

End-to-end picture. Origin, substrate, agents, coordination, novel patterns, where it’s heading. The full story.

Gated · 15 min read

Patterns & lessons

The hard-won lessons behind a live multi-agent fleet: what to automate, what to gate, and the trade-offs that aren’t obvious until you’ve run one.