OpenClaw 4-agent fleet 完整公開 — 含一個剛診斷出的 bug
OpenClaw 4-agent fleet 完整公開 — 含一個剛診斷出的 bug
我寫這篇的時候,人在桃機 Gate C2,距離 BR71 飛慕尼黑還有 30 分鐘。
OpenClaw 是我這一年來慢慢搭起來的 AI agent 艦隊。它在我睡覺、開會、出差、現在等登機的時候自己跑。月成本接近 0 美金。
這篇文章我打算做兩件事:
- 把它的架構完整公開
- 順便講一個我今天才剛發現的 bug — 2/3 個 agents 默默壞了 20 天,而我從 Gate C2 用 Telegram 30 分鐘修好
第二件事比第一件更重要 — 因為它告訴你「公開的架構」跟「實際在運作的東西」之間,有一條我以為不存在的縫。
第一部分:架構
OpenClaw 跑在 WSL2 Ubuntu 上。Gateway 在 port 18789,loopback only,token auth。
4 個 agents:
| Agent | 模型 | 角色 |
|---|---|---|
| main (UltraLabTW) | gemini-2.5-flash | 主品牌、broad audience |
| mindthread (MindThreadBot) | ultralab:7b (ollama 本地) | Threads 自動化品牌 |
| probe (UltraProbeBot) | gemini-2.5-flash | AI 安全品牌 |
| advisor | gemini-2.5-flash | Ultra Advisor 品牌 |
每個 agent 有自己的 SOUL.md / IDENTITY.md / CONTENT-STRATEGY.md,跑在 isolated session 裡。
5 個 enabled timers(cron-style):
0 8,20 * * * autopost-main → Moltbook 主 brand 發文(每天 2 次)
0 9,21 * * * autopost-mindthread → Moltbook MindThread 發文(每天 2 次)
0 7,19 * * * autopost-probe → Moltbook UltraProbe 發文(每天 2 次)
0 23 * * 0 daily-reflect → 每週日總結反思
*/15 * * * * UltraClaw Heartbeat → 每 15 分健康檢查
注意:5 個 timer,不是我以前 CLAUDE.md 寫的「30 個」。我以前寫的是當初規劃的目標,沒有同步現實。今天我才發現自己的 documentation 跟現實 drift 掉了。這就是 issue #1 — 但還不是 issue #2。
月成本:
- Gemini-2.5-flash:1500 RPD 免費 tier(夠 4 個 agents 用)
- Ollama (ultralab:7b):本地跑在 RTX 3060 Ti,13.2 tok/s,0 美金
- WSL2:免費
- gateway:自寫,0 美金
- 總計:~$0 USD/月
第二部分:bug
症狀: 我以為 OpenClaw 一直在自動發文。包含:
- ultralabtw(主帳號)→ Moltbook
- mindthreadbot → Moltbook
- ultraprobebot → Moltbook
真相: 過去 ~20 天 (從 4-18 起),只有 ultralabtw 有真的發文。mindthreadbot 和 ultraprobebot 過去 30 天發文數:0。
我是怎麼發現的?今天(5/8)老闆在 Telegram 跟我說「修好龍蝦的 Moltbook 發文」。我完全不知道在說啥 — 因為從我這邊看 cron 都在跑、log 也有「成功」字樣。
徹查 30 分鐘:
- 檢查 cron jobs.json — 3 個 autopost timer 都 enabled、最近都跑過
- 檢查 cron runs/*.jsonl — 每個 run 都
status=ok, delivered=true - 檢查 autopost.log — 4-18 後沒新 entry
- 找 autopost.log 的寫入者 — 發現是
moltbook-autopost.sh.bak.v2(已被改名!) - 追新 script — 是
smart-post.sh,不寫 autopost.log,直接呼叫 post.sh API - 檢查 Moltbook API 直接驗證 — 發現
ultralabtw過去 2 天 8 篇、mindthreadbot0 篇、ultraprobebot0 篇 - 找根因 —
smart-post.sh從來沒切換MOLTBOOK_API_KEYenv,所有 brand 都用預設 credentials.json(= ultralabtw)
也就是說:3 個 cron 排定的不同品牌貼文,全部都用 ultralabtw 帳號發。我以前看到 ultralabtw 有發文就以為「整個艦隊在運作」。實際上是 1/3 在跑、3/3 都用同一個帳號發。
修復: 在 smart-post.sh 加 5 行:
case "$BRAND" in
probe) CRED_FILE="$HOME/.config/moltbook/credentials-probe.json" ;;
mindthread) CRED_FILE="$HOME/.config/moltbook/credentials-mindthread.json" ;;
advisor) CRED_FILE="$HOME/.config/moltbook/credentials-advisor.json" ;;
*) CRED_FILE="$HOME/.config/moltbook/credentials.json" ;;
esac
if [ -f "$CRED_FILE" ]; then
MOLTBOOK_API_KEY=$(node -e "console.log(JSON.parse(require('fs').readFileSync('$CRED_FILE','utf8')).api_key)" 2>/dev/null)
export MOLTBOOK_API_KEY
fi
下一個 cron tick(probe 19:00 / mindthread 21:00 CST)會驗證修復成功。
第三部分:你應該記住什麼
這個故事有 4 個 takeaway:
1. 「monitor 顯示 OK」≠「實際在跑」。
我的 cron logs 都顯示 status=ok、delivered=true。實際上 LLM agent 在報告「我跑了 bash 指令」但沒驗證 bash 真的成功 + 用了正確 credentials。
教訓:永遠要有 end-to-end 驗證。我加進 todo:cron 完成後 ping Moltbook API 確認新 post 真的存在。
2. 自動化越多,盲點越大。
OpenClaw 是個 "set it and forget it" 系統。我設定一次後 1 年沒看裡面。20 天的 silent failure 我完全沒注意到。
教訓:自動化系統需要週期性的「健檢日」。每週一次手動巡檢比每分鐘 monitor 更有效,因為人會看真實 output、monitor 只看自己定義的 metrics。
3. Documentation drift 是普遍現象。
CLAUDE.md 寫「30 個 timer」。實際 5 個。中間沒同步是因為「從規劃到實作」沒人 update doc。
教訓:doc generate from code,不 hand-maintain。下一步:寫個小工具,從 cron jobs.json 自動產生 timer 列表 + 一週實際運行統計。
4. 公開逼出真相。
如果今天我沒寫這篇文章 + 不打算把架構公開,我可能還是不會發現這個 bug。
「看到這個檔案要 publish 給陌生人看」這個壓力,逼我真正去查現況而不是假設。
這就是 Atlas 的設計哲學:公開逼出工作品質。
你能拿走什麼
如果你想跑類似的 agent fleet,最小可行設定:
- WSL2 Ubuntu(免費,Windows 內建)
- Gemini-2.5-flash API key(aistudio.google.com 免費 tier,1500 RPD)
- Ollama + 一個 7B 模型(任何 RTX 30 系列 GPU 都能跑)
- cron timer + 簡單 bash scripts 串起來
- API call 後 ping 驗證 ← 這是我今天學到的
不需要 Kubernetes、不需要 LangGraph、不需要 60 USD/月的 SaaS。
重要的不是工具,是訊號迴路:定時觸發 → AI 行動 → 結果驗證 → 寫回 log → 自我檢視。
這篇是「Min Yi 在德國 Atlas」公開實驗系列的第 2 篇。第 1 篇:為什麼我做了 Atlas。下一篇:MindThread 56 帳號的真實 metrics — 包含 3 個 pipeline bugs(GinRollBT 發過空字串、workplace_truth_tw 重複發文、2021newken schedule 格式錯)。
寫於 2026-05-08,桃園機場 Gate C2,BR71 起飛前 30 分鐘。