linou518Introduction "AI agents? Aren't they just chatbots in the end?" That's what I thought six...
"AI agents? Aren't they just chatbots in the end?"
That's what I thought six months ago. But today, 10 AI Agents run 24/7 across three PCs in my home, automating every aspect of my life—from morning briefings to meeting management, investment monitoring, and learning support.
In this article, I'll share the full picture of the "personal multi-agent system" I built using OpenClaw, an open-source AI Agent framework—pitfalls included. I work as an engineer in the data platform space.
:::message
While this is a "here's what I built" article, the real focus is on the landmines I stepped on in production. I'll center on practical lessons you won't find in the official docs.
:::
It started with just one (Joe, the supervisor). But over time, problems emerged:
The optimal solution turned out to be splitting agents by role—exactly the Separation of Concerns design principle.
| Agent | Role | Overview |
|---|---|---|
| Joe (Supervisor) | Orchestration | Overall coordination, scheduling, heartbeat monitoring, incident response |
| CaiZhi | Investment | Portfolio monitoring, market trends, monthly reviews |
| 学思 | Personal Learning | Study plans, tech trend curation, daily tech news |
| 学習助理 | Learning Support | Learning content generation, progress tracking |
| Life Helper | Daily Life | Shopping, reservations, translation, lifestyle info |
| PJ-A–D | Projects | Progress & meeting management per client (4 projects) |
| Fudosan | Real Estate | Property management, real estate market analysis |
There are four project agents because each engagement has completely independent context and schedules. Mix them together and you can't tell "Company A's meeting" from "Company B's standup."
Here's the overall setup:
┌─────────────┐ Telegram Bot API ┌──────────────────┐
│ Telegram │ ◄── Multiple Bot Accts ─►│ PC-A (Primary) │
│ (Phone) │ │ OpenClaw Gateway │
└─────────────┘ │ Joe + All Agents │
│ 8GB RAM │
└────────┬─────────┘
│ Memory sync (5 min)
┌────────▼─────────┐
│ PC-B (Standby) │
│ Joe-Standby │
│ Auto failover │
└──────────────────┘
┌──────────────────┐
│ T440 (Docker) │
│ Learning Agents │
│ Flask Dashboard │
└──────────────────┘
watchdog.py monitors PC-A every 30 seconds. From downtime detection to automatic failover to PC-B takes about 90 seconds:::message alert
Running 10 agents on 8GB of RAM is possible because OpenClaw doesn't run inference locally—its main job is API calls + session management + workspace management. LLM inference happens on the Anthropic API side.
:::
Every morning, I just send "Good morning" on Telegram and get a report like this:
🌅 Good morning. Here's your briefing for Wednesday, February 12.
📋 Yesterday's Summary
- CaiZhi: Nikkei +1.2%, no major moves in holdings
- PJ-A: 2 PR reviews completed, sprint progress at 85%
- PJ-B: Staging environment deployed for tomorrow's demo
📅 Today's Schedule
- 10:00 Company A standup (Teams)
- 14:00 Company B tech review (Zoom)
- 16:00 Team standup
📰 Top 3 Tech News
- [1] OpenAI announces new model...
- [2] Rust 2025 Edition changes...
- [3] AWS re:Invent 2025 roundup...
How it works: A cron job kicks off the morning routine → sessions_spawn requests reports from each Agent → Joe aggregates them and delivers via Telegram.
Impact: What used to take 60 minutes of morning information gathering now finishes in 5 minutes. I can read everything while making coffee.
When you're juggling multiple projects, meeting conflicts are quietly devastating.
⚠️ Meeting conflict detected!
10:00-11:00 Company A Standup
10:30-11:30 Company B Morning Call
→ Suggest rescheduling Company B's morning call? [Yes] [No] [Ignore]
Tap "Yes" and the relevant project Agent automatically proposes rescheduling options.
学思 Agent runs every morning at 4:30 AM.
By the time I wake up, my reading list is already curated. This alone makes running agents worthwhile.
This is what I really want to share. Here are the production landmines you won't find in the official docs.
Symptom: Running multiple Telegram Bots on the same Gateway causes Agent A's responses to come from Agent B.
Cause: The deliveryContext gets overwritten when using multiple Bots. With the default dmPolicy: pairing, the last Bot to pair hijacks all sessions.
Solution:
# Change dmPolicy to allowlist
dmPolicy: allowlist
# Set explicit bindings for each Telegram account
telegram:
accounts:
- name: joe-bot
binding: agent:main
- name: caizhi-bot
binding: agent:caizhi
:::message alert
Lesson: For multi-Bot setups, dmPolicy: allowlist + explicit bindings are essential. Not knowing this cost me 3 days.
:::
Symptom: Gateway won't start. Neither PC-A nor PC-B.
Cause: Set streamMode to the invalid value "full". The only valid values are "off" / "partial" / "block". I'd edited the config file directly with sed, bypassing validation.
To make matters worse, I was syncing the same config to both HA nodes, so both machines died simultaneously. Recovery took over an hour.
Lesson:
# ❌ Never do this
vim ~/.openclaw/config.yaml
# ✅ Always use config.patch (includes validation)
openclaw config.patch '{"streamMode": "streaming"}'
config.patch validates before applying, so invalid values are rejected. Never edit the config file directly. This is an iron rule.
Symptom: Bot responses are abnormally slow. The same message gets answered twice. Logs are flooded with 409 Conflict.
Cause: Multiple processes were polling Telegram with the same Bot Token. This happened when PC-A and PC-B were accidentally started simultaneously with the same Token.
Solution: Follow the iron rule of 1 Token = 1 Process. In an HA setup, the standby node must not start polling until it becomes active.
Symptom: All Bots suddenly stop responding. Messages sent on Telegram don't even show as read.
Cause: While updating Telegram account settings via config.patch, I accidentally included a placeholder string in the botToken field. This overwrote every Bot's real Token with the placeholder, disconnecting all Bots.
# ❌ What I did
openclaw config.patch '{
"telegram": {
"accounts": [{
"name": "joe-bot",
"botToken": "YOUR_TOKEN_HERE", # ← This got applied to all Bots
"binding": "agent:main"
}]
}
}'
Lesson: When touching telegram.accounts via config.patch, never include the botToken field. Only update bindings and names.
:::message alert
Recovering from this required re-obtaining each Bot's Token from BotFather and reconfiguring them one by one. All 10 of them. Never again.
:::
Symptom: One day, a specific Agent suddenly stops responding.
Cause: Claude 3 Opus was deprecated and the API started returning model_not_found. OpenClaw had fallback settings, but the automatic switchover didn't work as expected.
Lesson: Review model specifications regularly. Prefer aliases like anthropic/claude-sonnet-4 over pinned versions like claude-sonnet-4-20250514. Even so, deprecations may still require manual intervention.
Here's the cost breakdown everyone wants to know:
| Item | Monthly Cost |
|---|---|
| Anthropic API (10 Agents) | $200–300 |
| Hardware (3 home PCs) | ¥0 (repurposed) |
| Telegram Bot API | Free |
| Healthchecks.io | Free tier |
| GitHub Private Repo | Free tier |
| Total | ~$200–300/month |
I primarily use Claude Sonnet and Haiku, reserving Opus for the supervisor and complex decision-making. $200–300/month for 10 agents isn't cheap, but considering it saves over 50 hours per month, it more than pays for itself.
Initial setup took about 2 weeks. It now runs almost entirely on autopilot—heartbeats + auto-recovery mean manual intervention is rarely needed.
"10 agents feels like a lot…"—if that's what you're thinking, don't worry. You don't need to build all 10 at once.
# Install OpenClaw
npm install -g openclaw
# Start the Gateway
openclaw gateway start
# Create a Telegram Bot via BotFather and connect it
openclaw config.patch '{
"telegram": {
"accounts": [{
"name": "my-first-bot"
}]
}
}'
Start with your first agent doing simple things like "What's the weather?" or "What's on my calendar today?"
When one agent starts feeling unwieldy, split it. The moment you think "I wish this context were separate" is the moment to create agent #2. For me, the biggest efficiency gain came from splitting agents by client project.
Combine cron jobs, heartbeats, and sessions_spawn to reach the state where agents proactively inform you without being asked. Once you're there, there's no going back to life without agents.
After running a personal butler system with 10 AI Agents for six months, I'm convinced of one thing:
The true value of AI Agents isn't "chat"—it's autonomous action.
A chatbot that only answers when asked and an agent that proactively gathers information and reports to you are fundamentally different things. OpenClaw is one of the rare frameworks that makes this kind of autonomy possible at the individual level.
Start with one. Experience the feeling of having your entire day prepared with a single "Good morning."
:::message
Next time, I'll write about "coordination patterns between AI Agents"—diving deep into how Joe delegates tasks to other Agents (sessions_spawn) and how memory is shared between Agents. Stay tuned!
:::