Three Agents, One Brain: Building the T3 Coordination Layer
The Problem With Having Multiple Agents Nobody Talks About

Here’s what the tutorials don’t tell you: building one AI agent is straightforward. Building three that need to work together without stepping on each other’s toes? That’s where Friday disappears.
I’ve been running BruBot and OpenClaw for a while now — automated morning briefs, portfolio tracking, the whole deal. But today I finally formalized what I’ve been calling the T3 system: Tim, Tony, and Tomer. Three specialized agents, each with a job, each reporting to different Telegram chats, each theoretically running on their own schedule.
The word “theoretically” is doing a lot of heavy lifting in that sentence.
What T3 Actually Looks Like
The architecture isn’t complicated on paper:
- Tim handles research and intelligence — Brave news searches, Claude summaries, drops into my channel at 07:10
- Tony tracks health and finance — Leopold portfolio via Yahoo Finance, Strava stats, arrives at 07:05
- Tomer is the orchestrator — system health checks, cron audits, GitHub release monitoring, evening brief at 21:00
In practice, coordination means deciding who talks when, who checks on whom, and what happens when one agent’s output should trigger another’s behavior. It means building a system where Tomer can verify that Tim and Tony actually ran this morning — and alert me if they didn’t.
Today I built the health check layer. Tomer now pings each agent’s last-run timestamp before the evening brief. If Tim hasn’t logged a successful run since 08:00, I get a warning. Simple concept. Four hours of debugging.
{
}
The Cron Bug That Made Me Question Everything
Here’s the specific thing that broke: Tony’s 07:05 cron was firing, but the Telegram message wasn’t arriving. Logs showed successful execution. No errors. Just… silence.
Spent an hour checking API keys, webhook configs, chat IDs. Everything looked right. Finally found it — the TELEGRAM_CHAT_ID environment variable was set correctly in my local env, but the GitHub Actions workflow was pulling from a different secret that still pointed to an old test chat. A chat I’d deleted two weeks ago.
The fix was one line:
TELEGRAM_CHAT_ID: ${{ secrets.TONY_CHAT_ID }}
One line. Ninety minutes. This is automation.
Why Separation Actually Matters
I could run everything through one mega-agent. Plenty of people do. But separation buys me something important: when Tony breaks, Tim keeps running. When I want to iterate on research summarization, I’m not touching the portfolio logic.
More importantly, it matches how I actually think about my day. Morning intel is different from health tracking is different from system ops. The agents mirror my mental categories, which makes debugging feel less like archaeology and more like conversation.
Tomer’s evening brief now includes a status line for each agent. Green checkmarks or red flags. It took all day to wire up, but tonight at 21:00 I’ll get a single message that tells me if my automated life is actually running.
The Open Question
What I haven’t solved: inter-agent communication. Right now, Tomer monitors Tim and Tony, but they don’t talk to each other. If Tim finds news that affects my portfolio, Tony doesn’t know. That feels like the next layer — building a shared context that agents can read and write to.
For now, I’m the integration layer. The agents handle the tasks; I handle the meaning. Maybe that’s fine. Maybe that’s the point. Or maybe next Friday I’ll be writing about the coordination bus that finally connects them.
Either way, the system runs while I sleep. That part works. Everything else is iteration.