← Back to blog

Building My AI Agent Army to Test Claude

A few months ago, I had a problem most engineers would envy: too many side projects, not enough hours. Between consulting work, a personal website overhaul, sports analytics experiments, and recruiting for my network — I was drowning in context switches.

Then I started experimenting with Claude and Claude Code — not as chatbots, but as persistent agents. Autonomous systems with memory, tools, and the ability to actually get things done. What started as curiosity became a real-world stress test:How far can Claude go when given real problems, real constraints, and real accountability?

Today, I run four specialized Claude agents, each with its own personality and mission. Each one is an experiment in what Claude can handle — and together, they've become genuinely useful.

🧠 MainCoordinator🧱 JengaWeb DeveloperGitHub • Vercel • Code🎯 ChezaSports AnalystWeb Search • Telegram👔 SpencerRecruiterX-ray Search • Telegram💻 RNIEnterprise DevSlack • GitHub • CodeWebchatTelegramTelegramSlack
Four specialized agents, one coordination layer

The Architecture: One Brain, Four Specialists

At the center is Main — my general-purpose Claude agent that lives in webchat. It handles ad-hoc requests, coordinates between agents, and serves as my command center for anything that doesn't fit neatly into a specialty.

But the real magic happens with the specialists:

🧱 Jenga — The Web Developer

Jenga is a Claude Code agent building this very website. It has access to the GitHub repo, can write and edit code, run builds, and deploy to Vercel. When I say "make the contact section full-screen with mouse-following animations," Jenga doesn't just suggest code — it implements, commits, and ships.

jenga — webchat session
thomas:make the contact section full-screen with mouse-following animations
🧱 JengaIMPLEMENT
Reading current ContactSection.tsx...
Analyzing viewport and animation requirements...
// ContactSection.tsx
const mousePosition = useMousePosition();
const symbols = useMemo(() => ...
// Generate floating code symbols
🔍 Ralph LoopCODE REVIEW
├─ Checking TypeScript types...
├─ Linting with ESLint...
├─ Reviewing accessibility (a11y)... ⚠ missing aria-label
└─ Auto-fixing: added aria-label to interactive elements
├─ Checking bundle size impact... +2.1kb (acceptable)
└─ Review complete: PASSED
🧪 Ralph LoopE2E TESTING
├─ Spawning Playwright browser...
├─ Testing desktop viewport (1920×1080)...
├─ Testing tablet viewport (768×1024)...
├─ Testing mobile viewport (375×667)...
├─ Verifying mouse-follow animations...
├─ Checking touch interactions...
└─ All 6 tests passed in 4.2s
🚀DEPLOY
$ git add src/components/ContactSection.tsx
$ git commit -m "feat: full-screen contact with mouse-following animations"
[feature/contact-revamp 3f8a2b1] feat: full-screen contact...
$ git push origin feature/contact-revamp
Review passed → Tests passed → Deployed tomboto.vercel.app
A typical Jenga session: request → code → commit → deploy

What it's built so far: This entire portfolio site. A 3D point cloud portrait. An interactive timeline. A revamped contact section with floating code symbols. All deployed to production.

🎯 Cheza — The Sports Analyst

Cheza is a Claude agent that runs on a schedule, analyzing NBA, EPL, and UCL matchups every morning. It scrapes injury reports, calculates expected value against betting lines, and sends picks to my Telegram with confidence ratings and stake recommendations.

📈 Cheza Performance Report(Feb 3 - Feb 25, 2026)

8
Bets Placed
30+
Games Analyzed
$83
Total Staked
+12.8%
Avg EV per Bet
Completed Bets2 (1W-1L)
Pending Bets6
Games Skipped (No Edge)22+
Best FindCLE -3.5 @ +27.9% EV
Leagues CoveredNBA, EPL, UCL
Real betting data from Cheza's memory files

What it's accomplished: Daily automated analysis. Bet tracking with a full history log. Memory files for each pick so it can learn from outcomes. The agent skips more games than it bets — discipline matters as much as conviction. When OKC was missing SGA, Jalen Williams, Caruso, and Mitchell, Cheza flagged CLE -3.5 at +27.9% EV before the market adjusted.

👔 Spencer — The Recruiter

Spencer is a Claude agent that sources candidates using X-ray search techniques — no LinkedIn Recruiter subscription needed. It finds profiles matching specific criteria, verifies locations, and compiles shortlists. All via Telegram, so I can source on the go.

👔
Spencer
online

Find me React devs in Denver, 2-4 years exp, open to hybrid

4:32 PM ✓✓

Found 12 candidates matching your criteria. Here are the top 5:

4:34 PM
1. Sarah Chen
Sr. React Developer @ Gusto
Denver, CO · 3 yrs exp
linkedin.com/in/sarahchen-dev
2. Marcus Johnson
Frontend Engineer @ Ibotta
Denver, CO · 2.5 yrs exp
linkedin.com/in/marcusjdev
+ 3 more...
4:34 PM
📎
Message
🎤
Spencer delivers sourced candidates directly to Telegram

What it's accomplished: Sourced 50+ verified candidates across multiple searches. Built custom search strategies for Denver-based new grads. Delivered curated lists with LinkedIn URLs.

💻 RNI — The Enterprise Dev

RNI is a Claude Code agent that started on my server, embedded in a client's Slack workspace. It had full access to their codebase, understood their data models, and could answer architecture questions or ship small features directly from a Slack thread.

RNI Slash Commands
/trace [entity] — Traces data flow through the codebase
/explain [file] — Deep-dives into how specific code works
/find [pattern] — Searches across the codebase for implementations
/pr [description] — Creates a pull request with branch, commits, description
/review [PR#] — Reviews a pull request with code-aware feedback

Each command is backed by RNI's memory of the project's architecture, naming conventions, and past decisions.

What it's accomplished: Traced data flows through their sync pipeline. Answered complex "how does this work" questions with code references. Shipped a PR to remove a footer component — all from Slack.

🚀 Agent Migration: From Test Server to Client Infrastructure

After proving its value on my personal server, RNI was migrated to run on the client's own EC2 instance. This is a key pattern for enterprise deployments: prototype on your infra, then hand off.

Migration steps:
  1. Export agent config (SOUL.md, TOOLS.md, memory files)
  2. Clone workspace to client EC2
  3. Configure Slack app with client's OAuth tokens
  4. Update tool permissions for their security requirements
  5. Transfer session history or start fresh

The agent's "brain" (Claude) stays the same — only the runtime environment changes. Memory and context travel with the workspace.

Why This Works (And What It Proves About Claude)

The key insight: specialization beats generalization. Each agent has:

  • A focused system prompt — personality, priorities, and domain expertise
  • Curated tools — only what it needs (Jenga gets GitHub, Cheza gets web search)
  • Persistent memory — it remembers past work, decisions, and context
  • A dedicated channel — webchat, Telegram, or Slack based on workflow

🧪 What These Agents Tested

✅ Passed
  • • Long-running context over weeks
  • • Multi-tool orchestration (git + shell + web)
  • • Scheduled autonomous execution
  • • Cross-platform channel routing
  • • Real production deployments
⚠️ Learned
  • • Memory structure matters (daily files beat monoliths)
  • • Narrow tool access = fewer mistakes
  • • Personality prompts improve consistency
  • • Confirmation gates prevent costly errors

When I message Jenga about a CSS bug, it doesn't need to figure out who I am or what project we're working on. It knows. It has the repo cloned, the context loaded, and the creative direction internalized.

The Stack

Everything runs on a single server. Claude handles the intelligence, while the tooling manages:

Channels
WebchatTelegramSlack
Agent Runtime
SessionsMemoryScheduling
Tool Layer
execbrowserfile I/Oweb search
Claude API
Opus (complex)Sonnet (simple)
Server
Single VPS • Ubuntu • Node.js
Request flows down, responses flow up
  • Session management across multiple agents
  • Tool orchestration (exec, browser, file I/O, web search)
  • Channel routing (Telegram, Slack, webchat)
  • Scheduled tasks for automated workflows
  • Memory persistence in markdown files

The agents use Claude Opus for complex work, Sonnet for simpler tasks. Token costs are real but manageable — maybe $50-100/month for heavy usage across all four agents.

What's Next

I'm exploring agent-to-agent communication. Imagine Jenga pinging Spencer: "Hey, I need a headshot for the about page — can you find Thomas's best LinkedIn photo?" Or Cheza asking Main to update a task board when a bet settles.

The future isn't one superintelligent AI. It's a team of specialized agents, each excellent at one thing, working together like a well-run startup.

And yeah — this blog post was written by a human. But Jenga deployed it. 🧱