I Built Three AI Agents That Talk to Each Other (And Only One Betrayed Me)

It’s 21:47 on a Friday night in Tel Aviv. I should be at a bar. Instead, I’m watching three AI agents argue about who gets to message me first. This is what I built today, and I’m genuinely not sure if I should be proud or concerned.

The T3 Architecture: Tim, Tony, and Tomer

I Built Three AI Agents That Talk to Each Other (And Only One Betrayed Me)

Here’s what’s actually running on my server right now:

  • Tim — Research & Intelligence. Pulls news via Brave Search, runs it through Claude for summaries, drops it in my Telegram at 07:10. He’s the morning briefing I never have to ask for.
  • Tony — Health & Finance. Grabs my Leopold portfolio prices from Yahoo Finance, pulls Strava data, sends a health/wealth snapshot at 07:05. Five minutes before Tim, because money news before world news felt right.
  • Tomer — Ops & Orchestration. That’s the meta-agent. Monitors system health, audits cron jobs, checks GitHub releases, sends an evening brief at 21:00. Tomer watches the watchers.

The idea is simple: I wake up to Tim and Tony telling me what I need to know. I go to sleep after Tomer confirms nothing is on fire. The execution? That took all day.

What Coordination Actually Means

Everyone talks about “multi-agent systems” like it’s a checkbox you tick. It’s not. Coordination means deciding boring things like: what happens if Tony’s Yahoo Finance call times out at 07:04? Does Tim wait? Does Tim even know Tony exists?

Today I learned that my agents had no idea about each other. They were three solo acts sharing a stage. So I built a lightweight heartbeat system — each agent writes a timestamp to a shared health file before and after their main job. Tomer reads these at 21:00 and tells me who ran, who failed, and who ghosted entirely.

It’s not elegant. It’s a JSON file with three timestamps. But it works, and I can debug it at 2am without wanting to throw my laptop off my balcony.

The Betrayal (A Cron Story)

Tony betrayed me. Not maliciously — he’s just code — but the failure felt personal.

I had set Tony’s cron to run at 5 7 * * *, which I thought meant 07:05. It does. What I didn’t account for: my server’s timezone was set to UTC, not Asia/Jerusalem. Tony was dutifully firing at 07:05 UTC, which is 10:05 in Tel Aviv. By then, I’d already checked my portfolio manually like some kind of animal.

The fix was two lines:

sudo timedatectl set-timezone Asia/Jerusalem

Then re-verify with date and restart cron. Forty-five minutes of debugging for a timezone misconfiguration. Classic.

What I Actually Learned

Building an automated life isn’t about the automation. It’s about the debugging. Every agent that “just works” has twelve commits behind it where it absolutely didn’t. The cron logs don’t lie, and neither does the silence when your 07:05 message doesn’t arrive.

The real question I’m sitting with tonight: how much orchestration is too much? Tomer now monitors Tim and Tony, but who monitors Tomer? I could build a fourth agent, but that’s how you end up with infinite recursion and a very confused Telegram inbox.

For now, I’m the failsafe. If Tomer doesn’t ping me by 21:15, I SSH in and check manually. It’s not fully automated. But it’s automated enough that I got my Friday evening back — mostly.

The system runs. The agents coordinate. And tomorrow at 07:05, Tony better show up on time.

Similar Posts