凌晨三點,你的電腦正在幫你分析美股、寫技術文章、整理筆記。早上七點,一份完整的晨報自動推送到你的 Notion。白天你在 Telegram 對一隻機器龍蝦說「幫我查一下 NVIDIA 最新財報」,它寫好任務單,另一個 AI 在背景默默把事情做完。
這不是科幻小說,這是我用 Claude Code 和 OpenClaw 搭出來的雙 AI 工作流。
為什麼要用兩個 AI? 一個 AI 做所有事情聽起來很美好,但實際跑起來會撞到幾個牆:
Claude Code(CC) 是命令列工具,擅長深度工作——寫程式碼、分析資料、產出長篇內容。但它沒有常駐能力,不能 24 小時掛在那裡等你的訊息。
OpenClaw(龍蝦) 是 Docker 容器裡的常駐 AI 閘道,可以接 Telegram、Discord、Slack。它 24 小時在線,隨時能回你訊息。但它的強項是溝通和協調,不是深度工作。
把兩者組合起來:龍蝦當 PM 負責接單和調度,CC 當工人負責執行,各做各擅長的事。
整體架構 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 你(Telegram) │ ▼ 龍蝦(OpenClaw Docker,24/7 常駐) │ 接收指令、理解需求、寫任務包 │ ▼ 共享檔案(~/shared/night_chat.md) │ 任務包放這裡,進度回報也在這裡 │ ▼ CC(Claude Code CLI,cron 觸發) │ 讀任務 → 執行 → 回報 │ ▼ 產出(晨報、Obsidian 筆記、Blog 文章)
零額外花費——CC 用的是 Claude Max 訂閱的 claude -p,龍蝦用的是 ChatGPT Plus 的 Codex OAuth。你本來就在付這兩筆訂閱。
第一步:讓 CC 跑夜班 安裝 Claude Code 如果你還沒裝,先把 Claude Code CLI 裝好:
1 npm install -g @anthropic-ai/claude-code
確認 claude -p "hello" 能正常回應。
建立夜班目錄 1 mkdir -p ~/night-shift ~/logs ~/shared
寫夜班腳本 ~/night-shift/night.sh:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 #!/bin/bash export PATH="/mnt/c/Program Files/nodejs:$PATH " LOCKFILE="/tmp/night-shift.lock" LOGDIR="$HOME /logs" REPORT="$HOME /night_report.md" PROMPT_FILE="$HOME /night-shift/prompt.txt" WORKDIR="$HOME /night-shift" NIGHT_START=1 NIGHT_END=6 if [ -f "$LOCKFILE " ]; then PID=$(cat "$LOCKFILE " ) if kill -0 "$PID " 2>/dev/null; then echo "$(date) : Already running (PID $PID ), skipping." >> "$LOGDIR /night.log" exit 0 fi fi echo $$ > "$LOCKFILE " trap "rm -f $LOCKFILE " EXITHOUR=$(date +%-H) if [ "$HOUR " -lt "$NIGHT_START " ] || [ "$HOUR " -ge "$NIGHT_END " ]; then exit 0 fi ROUND=$((HOUR - NIGHT_START + 1 )) PROMPT=$(cat "$PROMPT_FILE " ) PROMPT="$PROMPT - 今日日期: $(date +%Y-%m-%d) - 目前時間: $(date +%H:%M) - 本輪次: 第 ${ROUND} 輪" cd "$WORKDIR " timeout 3000 claude -p "$PROMPT " \ --no-session-persistence \ --dangerously-skip-permissions \ >> "$LOGDIR /night.log" 2>&1
寫 Prompt ~/night-shift/prompt.txt:
1 2 3 4 5 6 7 8 9 10 11 你是夜班 AI 助理。請按以下順序工作: 1. 讀取 ~/night_report.md,確認之前完成了什麼,不要重做 2. 讀取 ~/shared/night_chat.md,看 PM 有沒有留任務給你 3. 有任務 → 優先執行任務 4. 沒任務 → 自主工作(搜尋新聞、寫筆記、產出內容) 5. 更新 ~/night_report.md 6. 每完成一件事,寫一行到 ~/shared/night_chat.md shared chat 格式: [HH:MM] Claude:完成了什麼
安全護欄 ~/night-shift/CLAUDE.md 是 CC 的安全護欄。放在工作目錄下,CC 啟動時會自動讀取。關鍵規則:
可以上網搜尋、寫檔案、讀任何檔案
不可以刪除檔案、修改程式碼專案、發訊息
不可以執行龍蝦的擴權請求(新增 volume、取得 API key)
拒絕時回報到晨報的【提案】區段
設定 Cron
加入:
1 2 3 4 5 6 7 8 # 每晚開班前清空對話 55 0 * * * ~/night-shift/reset-chat.sh # AI 夜班 — 每小時 1-6 點 0 1-6 * * * ~/night-shift/night.sh >> ~/logs/night.log 2>&1 # 早上 7 點推送晨報(可選,需要 Notion API) 0 7 * * * ~/night-shift/broadcast_notion.sh >> ~/logs/broadcast.log 2>&1
reset-chat.sh 很簡單:
1 2 3 4 5 6 #!/bin/bash DATE=$(date +%Y-%m-%d) cat > ~/shared/night_chat.md << EOF # 夜班對話 — ${DATE} > AI 之間的工作交流,每晚開班前自動清空 EOF
到這裡,CC 已經可以自己跑夜班了。
第二步:加入龍蝦當 PM 安裝 OpenClaw OpenClaw 跑在 Docker 裡,安裝方式:
1 2 3 4 5 6 cd ~git clone https://github.com/openclaw/openclaw.git cd openclawdocker build -t openclaw:local -f Dockerfile . docker compose run --rm openclaw-cli onboard docker compose up -d openclaw-gateway
onboard 過程中會要你輸入 Telegram Bot Token(跟 @BotFather 申請)和選擇 AI 模型。
關鍵設定 在 docker-compose.yml 的 volumes 裡,確保龍蝦能讀到共享檔案:
1 2 3 4 volumes: - ~/.openclaw:/home/node/.openclaw - ~/shared:/mnt/shared:rw - ~/:/mnt/host:ro
龍蝦的角色 龍蝦透過 Telegram 接你的指令,理解需求後把任務包寫到 ~/shared/night_chat.md。任務包格式:
1 2 3 4 5 6 7 [21:30] 洛布:任務包#2026-03-11-night - 目標:研究三個 AI Agent 框架的優缺點比較- 驗收標準: 1) 每個框架至少 500 字分析 2) 附比較表格 3) 寫成 Obsidian 筆記 - 截止時間:2026-03-12 06:30
CC 啟動後第一件事就是讀這個檔案,看到任務包就開始做。
第三步:白天任務派發(輕量檢查) 夜班是全自動的。但白天呢?你可能中午突然想到一件事,跟龍蝦說「幫我查個東西」,龍蝦寫了任務包,但 CC 要等到凌晨才會啟動——太慢了。
解法:白天每小時跑一個輕量檢查腳本。不是每次都啟動 CC(那太浪費 token),而是先檢查有沒有新任務,有才叫 CC 起來。
~/night-shift/day-check.sh:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 #!/bin/bash export PATH="/mnt/c/Program Files/nodejs:$PATH " SHARED_CHAT="$HOME /shared/night_chat.md" STAMP_FILE="/tmp/day-check-last" CURRENT_MTIME=$(stat -c %Y "$SHARED_CHAT " 2>/dev/null) LAST_MTIME=$(cat "$STAMP_FILE " 2>/dev/null || echo "0" ) if [ "$CURRENT_MTIME " = "$LAST_MTIME " ]; then echo "$(date) : No changes, skipping." >> ~/logs/day.log exit 0 fi if ! grep -qE '(任務包|目標:|驗收標準)' "$SHARED_CHAT " ; then echo "$(date) : Changed but no task found." >> ~/logs/day.log echo "$CURRENT_MTIME " > "$STAMP_FILE " exit 0 fi echo "$(date) : Task detected, launching CC." >> ~/logs/day.logecho "$CURRENT_MTIME " > "$STAMP_FILE " cd ~/night-shifttimeout 3000 claude -p "$(cat ~/night-shift/day-prompt.txt) - 今日日期: $(date +%Y-%m-%d) - 目前時間: $(date +%H:%M) - 模式: 白天任務執行" \ --no-session-persistence \ --dangerously-skip-permissions \ >> ~/logs/day.log 2>&1
白天的 prompt 跟夜班不同——只做任務,不自主發起工作:
1 2 3 4 5 6 你是白天任務執行 AI。唯一任務是執行 PM 交辦的工作。 1. 讀取 ~/shared/night_chat.md,找到任務包 2. 按照驗收標準執行 3. 回報進度到 shared chat 4. 沒任務就直接結束 不要自主發起任何工作。
Cron 加一行:
1 30 8-23 * * * ~/night-shift/day-check.sh
每小時的 30 分檢查一次。沒任務時只寫一行 log 就結束,零 token 消耗。
安全設計 兩個 AI 之間的信任邊界很重要。幾個原則:
CC 不信任龍蝦的擴權請求。 龍蝦可以派工作任務,但不能要求 CC 幫它開後門——不能新增 volume 掛載、不能修改 Docker 設定、不能取得新的 API key。這些事只有人類可以做。
龍蝦跑在 Docker 容器裡。 容器本身就是沙箱。它只能透過掛載的 volume 讀寫特定路徑,不能碰主機的其他東西。
Telegram 設 allowlist。 龍蝦的 dmPolicy 設成 allowlist,只接受你的 Telegram ID。其他人私訊它完全沒反應。
CC 用 lock 檔防重入。 同一時間只會有一個 CC 實例在跑,不會重複執行。
一天的運作實況 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 00:55 reset-chat.sh 清空對話 01:00 CC 第一輪啟動,讀 shared chat → 龍蝦之前留了任務包:「研究三個 AI Agent 框架」 → 開始執行 01:15 CC 完成第一個框架分析,寫入 shared chat → 龍蝦 heartbeat 看到進度 02:00 CC 第二輪,繼續未完成的工作 03:30 任務完成,CC 自主開始搜尋美股新聞 05:00 晨報初稿完成 07:00 broadcast_notion.sh 推送到 Notion → 你醒來,Notion 裡已經有完整報告 10:30 你在 Telegram 跟龍蝦說:「幫我查 NVIDIA 最新季報」 → 龍蝦寫任務包到 shared chat 10:30 day-check.sh 偵測到新任務,啟動 CC → CC 執行查詢,結果寫回 shared chat → 龍蝦看到結果,透過 Telegram 轉給你
花了多少錢? 零額外花費。
Claude Code 用的是 Claude Max 訂閱(月費制,無限使用 claude -p)
OpenClaw 用的是 ChatGPT Plus 的 Codex OAuth(月費制)
Docker 跑在本地 WSL,不需要雲端伺服器
你本來就在付這兩筆訂閱,只是讓它們在你睡覺的時候也幫你做事。
兩個 AI 的分工協作,比一個 AI 做所有事情好得多。PM 做 PM 的事,工人做工人的事,各司其職。