期間限定

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 には「マシンが眠らない・プロセスが再起動できる・ログが監査可能」の 3 点が必要——ローカル 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 を 1 周回す」ワークロードはデモから課金対象 workload へ移行しつつあります。しかし実行面は依然 macOS 上です。launchd はローカルプロセスしかスケジュールできず、Seatbelt と Keychain が未宣言のツールアクセスを遮断します。ローカル Mac はスリープ、Wi‑Fi 切替、OS アップデート再起動でタスクを失いやすい。

定期 Agentリモート Mac M4 ホスティングノードに置くことは、実質 3 つを買うことです:① 7×24 オンラインと制御可能な再起動;② LLM/MCP API への低 RTT(アジア太平洋または米東を選択);③ 日次/週次/月次の弾力性——PoC 失敗時に解放でき、実験用に物理機を買う必要がない。

本稿の主軸は「定期/イベントトリガー + MCP オーケストレーション」であり、git worktree ファーム(別記事で扱う)ではありません。OpenClaw ゲートウェイ、18789 コールドスタート、Tunnel+MCP は境界節で対照のみ、本文では繰り返しません。

2. SSH 開通と launchd/crnd 環境:30 分検収チェックリスト

リモート Mac M4 開通後、最初の LaunchAgent をロードする前に 30 分以内で次を完了することを推奨します。SSH 接続の詳細はヘルプセンターを参照。

  1. 鍵認証 SSH ログイン、uname -m が arm64、タイムゾーンと NTP が正しい。
  2. Homebrew、Node 22(Agent CLI 常用)、排障用 tmux または screen をインストール。
  3. ディレクトリ作成:~/agent-runs/state~/agent-runs/logs~/agent-runs/scripts
  4. API Key を ~/.config/agent/env に書き込み(権限 600)。LaunchAgent は EnvironmentVariables で注入し、plist に直書きしない。
  5. 手動で crnd schedule または launchd テストタスクを 1 本実行し、ログがディスクに落ちることを確認。
  6. マシンから curl で LLM/MCP エンドポイントへ到達し RTT を記録。Webhook コールバックはファイアウォールとインバウンド方針を確認。

すべて通過してから PoC レンタル期間を決める。どれか 1 つでも失敗したら、週次/月次へ上げない。

3. launchd LaunchAgent トポロジ

macOS ではユーザーレベルの定期タスクを ~/Library/LaunchAgents/ に置き、launchctl bootstrap gui/$(id -u) でロードします(Ventura 以降は旧式 load より bootstrap を推奨)。

モード適用シーン利点注意点
launchd 直調スクリプト固定間隔/カレンダー、単一リポジトリのバッチ依存ゼロ、OS ネイティブ、ログが明瞭plist に ThrottleInterval を手書き
crnd / agent-reveille複数 Agent、自然言語スケジュールCLI フレンドリー、バージョン管理しやすい下層は launchd/cron 依存
n8n + MCP Webhookクロスシステムオーケストレーション、人手承認ノードCurated tools、リトライとアラート1 ホップ遅延、インバウンドセキュリティ要

典型的な LaunchAgent フィールド:

  • StartCalendarInterval:日/時/分でトリガー、cron 代替。
  • 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 トリガー の典型ルートは 2 つ: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 / crnd 利用時:reveille 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 や大量 artifact 付きなら 512 GB は 2–4 週で逼迫しうる。

  • ログローテーション:log rotate または日次分割。単一ファイルが inode を圧迫しないように。
  • 秘密鍵は Keychain または 600 権限 env のみ。LaunchAgent の ProgramArguments に token 平文を書かない。
  • ディスク 80% アラート時は runs キャッシュを優先削除し、それでも足りなければ容量拡張または2 台目並列 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→1TB2 台目並列を検討

価格はプラン一覧とコンソールを正とする。推奨順:日次 PoC(1–3 日、launchd + MCP 初タスクを通す)→ 週次でイテレーションスプリント固定 → 2 週連続指標安定後に月次常駐。PoC チェックリスト:

  1. LaunchAgent ロード成功、再起動後も自動起動。
  2. Webhook/MCP エンドツーエンド成功が 1 回以上、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+ は load ではなく bootstrap。

launchctl bootstrap が I/O error? 先に同名 job を bootout。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? より小さいモデル、並列制限、またはメモリプランのアップ/2 台目 Runner。

いつ 2 台目並列を足す? 単一ディスク 80%+ で削除が無効、または CPU 長時間 >85% でタスク shard 可能なとき。

日次 PoC 最短どれくらい? 24h 定期周期 + 人手 Webhook トリガー 1 回をカバー。

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 接続を見る、または フロントページから注文前セルフチェック。実践記事は ブログへ。