限時優惠

2026年遠端 Mac 定時 Agent:launchd 編排 MCP 觸發與租期驗證

部落格 Agent 工作流
2026-05-24 約 8 分鐘閱讀

要在 遠端 Mac M4 上跑 7×24 的 定時 Agent,本機 Mac 休眠、斷網與 Seatbelt 限制往往比模型選型更先翻車。本文以 launchdMCP 觸發 為主線,給出 Claude Code / Codex CLI 可複現模板,並說明如何用日租 PoC 驗證後再鎖月租常駐 Runner——與 worktree 並行文、OpenClaw 閘道文刻意分工。

結論先行

  1. 定時 Agent 需要「機器不休眠 + 程序可重啟 + 日誌可審計」——本機 Mac 難保證,遠端 Mac M4 更合適。
  2. launchd 是 macOS 原生編排層:StartCalendarInterval 做 cron 替代,KeepAlive 做常駐,ThrottleInterval 防崩潰環。
  3. MCP 觸發 建議 Curated tools + n8n Webhook 閘道,不要把全部 MCP 埠暴露公網。
  4. 編碼型並行 Agent 見worktree 並行文;磁碟治理見Runner 磁碟/inode 規劃
  5. 推薦路徑:日租 PoC 跑通 launchd + 首條 MCP 任務 → 週租 鎖衝刺 → 指標穩定後月租常駐。
  6. 訊息型 OpenClaw Gateway 與批處理定時 CLI Agent 職責不同,本篇不重複 18789 部署骨架。
遠端 Mac M4 定時 Agent——launchd 編排與 MCP 自動化工作區
定時 Agent 的價值在「可複現的無人值守運行」,而不是本機 Mac 合上蓋子後任務靜默失敗。

1. 2026 為何把定時 Agent 放到遠端 Mac

2026 年 Cursor Automations、n8n MCP 編排與 Codex CLI remote-control 等能力,讓「定時跑一輪 Agent」從玩具 demo 變成可計費 workload。但執行面仍在 macOS:launchd 只能調度本機程序,Seatbelt 與 Keychain 會阻斷未宣告的工具存取,本機 Mac 還會因休眠、Wi‑Fi 切換、系統更新重啟而丟任務。

定時 Agent 放到 遠端 Mac M4 託管節點,本質是買三樣東西:① 7×24 在線與可控重啟;② 與 LLM/MCP API 更低的 RTT(亞太或美東可選);③ 按日租/週租/月租彈性,PoC 失敗可釋放,不必為實驗買一台實體機。若你仍在評估租 Mac 與開通驗收,可先讀雲 Mac 開通驗收清單

本文主軸是「定時/事件觸發 + MCP 編排」,不是 git worktree 農場(那篇已單獨立文)。OpenClaw 閘道、18789 冷啟動、Tunnel+MCP 僅在邊界節對照,正文不復述。

2. SSH 開通與 launchd/crnd 環境:30 分鐘驗收清單

開通 遠端 Mac M4 後,建議 30 分鐘內完成下列項,再載入第一條 LaunchAgent。詳細 SSH 接入見說明中心

  1. 金鑰 SSH 登入,uname -m 為 arm64,時區與 NTP 正確。
  2. 安裝 Homebrew、Node 22(Agent CLI 常用)、tmuxscreen 便於排障。
  3. 建立目錄:~/agent-runs/state~/agent-runs/logs~/agent-runs/scripts
  4. 寫入 API Key 到 ~/.config/agent/env(權限 600),LaunchAgent 用 EnvironmentVariables 注入,勿硬編碼進 plist。
  5. 手動跑一條 crnd schedulelaunchd 測試任務,確認日誌落盤。
  6. 從機器 curl 你的 LLM/MCP 端點,記錄 RTT;Webhook 回調需確認防火牆與入站策略。

全部通過後再做 PoC 租期決策。任一步失敗,先別升週/月租。

3. launchd LaunchAgent 拓撲

macOS 上使用者級定時任務應放在 ~/Library/LaunchAgents/,用 launchctl bootstrap gui/$(id -u) 載入(Ventura 及以後推薦 bootstrap,而非舊式 load)。

模式適用場景優點注意點
launchd 直調腳本固定間隔/日曆、單倉庫批處理零依賴、系統原生、日誌清晰plist 需手寫 ThrottleInterval
crnd / agent-reveille多 Agent、自然語言排程CLI 友好、易版本管理底層仍依賴 launchd/cron
n8n + MCP Webhook跨系統編排、人工審批節點Curated tools、重試與告警多一跳延遲,需入站安全

典型 LaunchAgent 欄位:

  • StartCalendarInterval:按日/時/分觸發,替代 crontab。
  • KeepAlive:程序退出後重啟;與 ThrottleInterval 聯用防崩潰環。
  • StandardOutPath / StandardErrorPath:日誌必配,否則排障只能猜。
LaunchAgent 範例(每 30 分鐘跑 Codex 批任務)
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0"><dict>
  <key>Label</key><string>com.kvmboot.agent.codex-batch</string>
  <key>ProgramArguments</key><array>
    <string>/bin/zsh</string><string>-lc</string>
    <string>source ~/.config/agent/env && ~/agent-runs/scripts/run-codex-batch.sh</string>
  </array>
  <key>StartCalendarInterval</key><dict>
    <key>Minute</key><integer>0</integer><key>Hour</key><integer>*/1</integer>
  </dict>
  <key>ThrottleInterval</key><integer>300</integer>
  <key>StandardOutPath</key><string>/Users/runner/agent-runs/logs/codex.out.log</string>
  <key>StandardErrorPath</key><string>/Users/runner/agent-runs/logs/codex.err.log</string>
</dict></plist>

載入命令:launchctl bootstrap gui/$(id -u) ~/Library/LaunchAgents/com.kvmboot.agent.codex-batch.plist。卸載用 bootout 同路徑。

4. MCP / n8n Webhook 觸發鏈與 Curated tools

MCP 觸發 常見兩條路:Agent CLI 直連 MCP Server(適合內網或 SSH 隧道內),或 n8n/Cursor Automations 經 Webhook 調遠端 Runner 上的腳本(適合要審批、重試、告警的流程)。

安全邊界建議:

  • 只暴露 Curated tools(白名單檔案讀寫、固定 API),禁止把 shell MCP 無限制暴露公網。
  • Webhook 入站校驗 HMAC / 短時 token,冪等鍵寫入 state/runs 防重複觸發。
  • 逾時與重試:LLM 呼叫設 hard timeout;失敗指數退避,避免 launchd 與 Webhook 雙重觸發雪崩。

2026 年 Mattermost + n8n + MCP 的案例說明:編排層在 n8n,執行層仍在 macOS Runner——與本文 launchd 直調可並存,按團隊是否已有 n8n 選型。

5. Claude Code / Codex CLI 定時任務模板

Claude CodeCodex CLI 均可在非互動模式下跑批:關鍵是 AGENTS.md、工作目錄與 env 注入一致,保證 launchd 環境與手動 SSH 同結果。

run-codex-batch.sh(示意)
#!/bin/zsh
set -euo pipefail
cd ~/projects/my-repo
export CODEX_API_KEY="$(grep CODEX_API_KEY ~/.config/agent/env | cut -d= -f2-)"
/usr/local/bin/codex exec --prompt-file ~/agent-runs/prompts/nightly-review.md \
  >> ~/agent-runs/logs/codex-$(date +%Y%m%d).log 2>&1

若用 agent-reveille / crndreveille add "0 9 * * 1-5" -- codex exec ... 可快速試驗排程,穩定後再匯出 plist 納入 IaC。

worktree 並行 Agent配合時:定時任務跑「合併/Review」類批處理,互動式編碼仍走 worktree 分倉,避免單目錄鎖衝突。

6. 日誌、金鑰與儲存規劃

Agent 長跑後 state/runs、模型快取與 npm/pnpm store 會快速占盤。經驗區間(非 SLA):輕量文案 Agent 512 GB 可跑數週;帶本機 Ollama 7B+ 或大量 artifact 時 512 GB 可能在 2–4 週內觸頂。

  • 日誌輪轉:log rotate 或按日分割,避免單檔案撐滿 inode。
  • 金鑰只放 Keychain 或 600 權限 env 檔;LaunchAgent 禁止把 token 寫進 ProgramArguments 明文。
  • 磁碟 80% 告警時優先清理 runs 快取,再評估擴容或第二台並聯 Runner

記憶體方面:純 API 呼叫型 Agent 16 GB 通常夠用;若同機跑 Ollama 7B+ 或並行 Claude Code,關注 swap 與記憶體洪峰治理,必要時升 24 GB 或拆機。

7. 任務頻率 × 租期:決策矩陣與遷移檢查表

任務特徵儲存壓力建議租期遷移條件
每小時輕量 MCP低(<5 GB/週)日租 PoC → 月租連續 7 天無失敗、日誌可審計
每日 Codex 全倉 Review中(10–30 GB/週)週租 → 月租磁碟 <70%、RTT 穩定
多 Agent + 本機模型高(>50 GB/週)週租 + 512GB→1TB考慮第二台並聯

價格以套餐頁與控制台為準。推薦順序:日租 PoC(1–3 天,跑通 launchd + MCP 首任務)→ 週租鎖迭代衝刺 → 連續兩週指標穩定再月租常駐。PoC 清單:

  1. LaunchAgent 載入成功且重啟後仍自啟。
  2. 至少一次 Webhook/MCP 端到端成功,state 有冪等記錄。
  3. 24h 日誌無未捕獲 panic;磁碟/inode 增量可接受。
  4. API RTT 與錯誤率在團隊閾值內(美東/亞太按 workload 選節點)。

8. 與 OpenClaw Gateway 的邊界(對照)

OpenClaw 擅長訊息型閘道:18789 對外、Tunnel+Webhook、多通道入站。本文的 定時 Agent 是批處理 CLI:launchd 觸發、無常駐 HTTP 埠、適合 cron 類任務。二者可同一台 遠端 Mac M4 共存,但應分帳戶/分目錄隔離。閘道部署詳見 OpenClaw 專欄,本篇不展開。

9. 排障 FAQ

plist 載入失敗?plutil -lint 校驗 XML;確認 Label 唯一;Ventura+ 用 bootstrap 而非 load。

launchctl bootstrap 報 I/O error?bootout 同名 job,檢查 plist 是否在 LaunchAgents 且路徑無空格問題。

任務跑了但無日誌? 檢查 StandardOutPath 父目錄是否存在、執行使用者對目錄可寫。

KeepAlive 瘋狂重啟? 加大 ThrottleInterval,腳本內 set -e 前做好 trap;排查腳本是否秒退。

Seatbelt / Keychain 阻斷 CLI? 首次互動式 SSH 下授權 Keychain;LaunchAgent 環境需與登入 shell 相同的 PATHHOME

MCP 逾時? 限制 tools 數量、提高 timeout、把 Runner 遷到離 API 更近的區域節點。

Webhook 重複觸發? 用冪等鍵寫 state/runs;n8n 側開 dedupe。

Ollama 本機推理 OOM? 換更小模型、限並發,或升記憶體檔位/拆第二台 Runner。

何時加第二台並聯? 單盤 80%+ 且清理無效,或 CPU 長時間 >85% 且任務可 shard。

日租 PoC 最短多久? 至少覆蓋 24h 定時週期 + 一次人工 Webhook 觸發。

和 worktree 並行文怎麼分工? 本篇管「何時跑」;worktree 文管「在哪跑、如何並行編碼」。

OpenClaw 還是 launchd? 訊息/閘道選 OpenClaw;cron/批處理選 launchd。FAQ 語氣:不作 SLA 承諾,以 PoC 實測為準。

在雲端 Mac mini 上跑穩定定時 Agent

M4 獨占、低待機功耗、macOS 原生 launchd,比 Windows 工作排程器或 Linux cron 更適合 Claude Code / Codex CLI 鏈路。亞太/美東節點可選,SSH 開箱即用,7×24 無人值守不依賴本機 Mac 是否合蓋。按上文 PoC 清單跑通後再鎖租期,綜合成本低於自購工作站 + 電費 + 維運精力。

先用日租在目標區域驗收 launchd + 首條 MCP 觸發任務—— 比對租期檔位核對記憶體與儲存查看 SSH 接入,或從 首頁下單前自檢;更多實踐見 部落格