Home / Writing / Uncategorized
Uncategorized

How I Built a 15-Agent AI Team That Runs While I Sleep

July 16, 2026 / 9 min read
How I Built a 15-Agent AI Team That Runs While I Sleep

Six months ago I was manually writing LinkedIn posts, chasing leads in spreadsheets, and copy-pasting data between tools every day. Today my phone buzzes at 7am with a briefing of everything that happened overnight. By the time I sit down at my desk, five LinkedIn posts have been drafted, two blog articles are published, outreach emails are queued, and any system failures have already been flagged.

I did not hire a team. I built one out of AI agents running on two Mac Minis in my home office.

This article explains exactly how I did it, what it costs, and what broke along the way. No hype. Just the actual system.

What “AI Agent Team” Actually Means

An AI agent is a script that gives an AI model a task, a set of tools, and a goal, then lets it run without you watching. Chain enough of those together, schedule them, and you have a team.

My team is not magic. It is 15 automated processes, each with a clear job, running on a schedule, reporting back to a central dashboard. Some use Claude. Some use free local models. Some are just Python scripts with no AI at all.

The point is not to sound impressive. The point is that repeatable work stops needing me every time.

The Hardware Setup

I run everything on two Apple Mac Minis connected by a Thunderbolt cable.

Mac Mini 1 (“Megan”) – the brain: Apple M4, 16GB RAM. This machine runs Claude Code sessions, hosts the Mission Control dashboard, manages the webhook server, and runs all scheduled tasks via launchd. It is on 24/7.

Mac Mini 2 – the inference server: Apple M4, 16GB RAM, 149GB of free storage. This machine runs Ollama with two local AI models loaded and ready. It handles anything that does not need Claude-level intelligence.

The Thunderbolt cable between them gives 0.6ms latency. When Mac Mini 1 needs a local inference call, the response is back in under a second. Zero token cost.

Total hardware investment: two Mac Minis at roughly $700 each. That is $1,400 one-time to stop paying for every single AI call.

The Model Stack: Routing Tasks to the Right Model

Not every task needs Claude Opus. That was the first thing I learned. Here is how I actually route work:

The routing rule is simple: if it does not require judgment, route it to Gemma. If it does require judgment but is not strategic, use Sonnet. Reserve Opus for synthesis and planning. This keeps token costs predictable and monthly spend under control.

The 15 Agents and What Each One Does

Here is the actual team, by function:

Content

  1. LinkedIn Content Agent (5 posts/day): Reads the editorial calendar, checks recent performance data, writes five LinkedIn posts in my voice, and drops them into a queue. Runs at 6am Pacific.
  2. Blog Publisher – enzeti.com (2 articles/day weekdays): Picks a topic from the content calendar, does keyword research via Brave Search, writes a 2,000-word article in peer-attorney voice, generates a featured image via fal.ai, and publishes via WordPress API. Runs at 10am and 1pm.
  3. Blog Publisher – jessenavarro.com (3 articles/week): Same pipeline, different voice. AI consulting operator voice. Publishes Tue/Thu/Sat.
  4. Blog Publisher – cultivateinbox.com (3 articles/week): Cold email strategy content for law firm marketing.
  5. Devon X Writer (5 tweets/day): Writes tweets in Devon Canup’s voice using Grok 3 Mini, schedules them to Typefully, which auto-posts to X. Runs daily at 7am.

Lead Generation

  1. Lead Scraper (daily): Scrapes law firm contacts using Prospeo and LeadMagic. Enriches with MillionVerifier. Writes results to Supabase.
  2. Email Outreach Queue (daily): Pulls enriched leads from Supabase, formats them for Instantly, and loads the outreach sequence. Currently paused while we resolve a billing issue, but the pipeline is ready.
  3. LinkedIn Outreach Tracker (daily): Monitors connection request responses, flags warm leads, updates the CRM.

Monitoring and Alerts

  1. System Heartbeat (every 15 minutes): Gemma 4 on Mac Mini 2 checks whether all services are running. If anything fails, it sends a Telegram alert flagged as urgent. This runs free, all day, every day.
  2. Meta Ads Monitor (every 4 hours): Pulls ROAS, spend, and lead cost from the Meta API. Flags any creative that drops below threshold. Sends a digest to Mission Control dashboard, not Telegram.
  3. Devon Revenue Tracker (daily 7am): Pulls the latest Google Sheets data for BecomeViral, calculates commissions, sends Jesse a morning briefing.
  4. Email Monitor (daily): Scans inboxes for urgent flags using keyword matching. Routes anything flagged as urgent to the human for review.

Intelligence

  1. Intelligence Sweep Agent (weekly): Fans out to 5 Sonnet sub-agents, each researching a different topic (competitor activity, platform algorithm changes, industry news). Opus synthesizes the results into a weekly brief.
  2. TrueWater News Monitor (daily): Watches for local Idaho water quality news, regulatory changes, and relevant events. Feeds topic ideas to the TrueWater blog pipeline.
  3. Claude Watchdog (hourly): Monitors for any Claude Code processes that have been running longer than 2 hours and kills them. Prevents zombie processes from blocking new runs.

The Infrastructure Behind It

The agents are scheduled using macOS launchd LaunchAgents, not cron. LaunchAgents are more reliable on Mac because they survive sleep cycles and system restarts. Each agent gets its own .plist file in ~/Library/LaunchAgents/.

The orchestration layer is Claude Code CLI. Each scheduled task fires a claude command with a specific prompt that references a skill file. Skill files are the SOPs: reusable instructions that tell Claude exactly how to do a specific job. I have 18 of them.

Everything reports to Mission Control, a lightweight Node.js dashboard running on port 3000. I can see what ran, when, what succeeded, and what failed. It also has an API I can hit from anywhere via a Cloudflare tunnel.

API keys live in a .env file. Never hardcoded. Never in version control. 120+ keys covering Meta, LinkedIn, WordPress, fal.ai, xAI, Anthropic, and more.

The Real Monthly Costs

Here is what this actually costs me per month, not the guru version:

Total active monthly cost: approximately $155-170 per month. The local Ollama models on Mac Mini 2 run completely free, saving what would otherwise be hundreds of dollars in token costs for status checks and simple classifications.

The hardware paid for itself in the first month of Devon CRO commissions alone.

What Broke (The Honest Part)

Every implementation tutorial leaves out the failures. Here are mine:

The zombie process problem: Early on, Claude Code runs that got stuck on a network call would stay alive indefinitely. The launchd scheduler would try to fire the next run, hit a lock, and fail silently. I lost a week of content before I diagnosed it. The watchdog agent (agent 15 above) fixed this permanently.

Context bloat: I tried building one mega-agent that did everything: research, write, generate image, publish, submit to GSC, log results. By step 6 the quality fell apart. Each AI step in a chain loses roughly 10% fidelity. Chain 5 steps and you are at 59% of the original quality. Now each agent does one thing and passes a clean handoff.

API auth on WordPress: The three WordPress sites authenticate differently. One strips Authorization headers entirely and requires SSH plus WP-CLI instead of the REST API. I burned three hours on trial and error before documenting exactly which method works for each site. Now it is written in the skill file and no future agent session wastes time rediscovering this.

Telegram noise: I made the mistake of sending every update to Telegram. Within two weeks I had 60-100 notifications per morning, none of them urgent. I trained myself to ignore them, which meant I also missed the real alerts. The rule now is strict: Telegram gets only two things – the 7am daily briefing and genuine urgent flags. Everything else goes to Mission Control.

Hardcoded secrets: One early agent had an API key embedded in the script. I caught it before it hit version control, but that was luck. Every key is now in .env and loaded via python-dotenv or shell sourcing. No exceptions.

What This System Actually Gives Me

Time is the obvious answer but it is more specific than that. I get back the hours I was spending on repeatable decisions. Writing the fifth LinkedIn post of the day requires no judgment. Checking whether a cron job ran requires no judgment. Formatting leads for an email tool requires no judgment.

AI handles all of that. I handle the things that actually require me: client calls, reviewing content before it goes out, building new systems, strategy.

The goal was not to remove myself from the business. The goal was to remove myself from the parts that were wasting me.

What to Do Next

If you want to build something similar, here is the order of operations:

  1. Start with one repeatable task. Pick the thing you do most often that requires the least judgment. Write a script that does it. Get it working reliably before adding anything else.
  2. Get a second machine for local inference. Any Mac Mini will work. Install Ollama, load Gemma 4 or Llama 3.2. Use it for status checks and simple tasks. This is the move that makes the economics work long-term.
  3. Write your SOPs as skill files before you build agents. The skill file is the source of truth. If you cannot write down exactly how a task should be done, you are not ready to automate it.
  4. Build the watchdog before anything else fails. You need a process that monitors your processes. Without it you will find out about failures days later.
  5. Route tasks ruthlessly by complexity. Anything that does not require judgment goes to the free local model. Save your Claude credits for the work that actually needs them.

If you want help building this for your business, or you want to see how I would adapt this system to your specific workflow, reach out. This is exactly what I do for clients.