Акция

Удалённый Mac 2026: плановый Agent, launchd, MCP-триггеры и проверка аренды

Блог Agent workflow
2026-05-24 ~8 мин

Запуск плановых агентов 7×24 на удалённом Mac M4 упирается не в выбор модели, а в сон ноутбука, обрывы сети и ограничения Seatbelt. В этом материале — launchd и MCP-триггеры, воспроизводимые шаблоны Claude Code / Codex CLI и путь посуточного PoC перед фиксацией месячной аренды; отдельно от worktree-параллелизма и развёртывания OpenClaw Gateway.

Ключевые выводы

  1. Плановым агентам нужны всегда включённое железо, перезапускаемые процессы и аудируемые логи — на спящем MacBook это ломается, на удалённом Mac M4 — естественная среда.
  2. launchd — нативная оркестрация macOS: StartCalendarInterval вместо cron, KeepAlive поднимает демоны, ThrottleInterval гасит циклы падений.
  3. MCP-триггеры строите через curated tools и webhook-шлюз n8n — не выставляйте каждый MCP-порт в интернет.
  4. Для параллельного кодинга см. руководство по параллельным worktree-агентам; для диска — управление диском и inode на Runner.
  5. Рекомендуемый путь: посуточный PoC (launchd + первый MCP job) → недельный спринт → месячная аренда при стабильных метриках.
  6. Message-шлюз OpenClaw Gateway и пакетный CLI по расписанию — разные задачи; развёртывание порта 18789 здесь не повторяем.
Рабочее место удалённого Mac M4: плановый Agent, launchd и автоматизация MCP
Ценность планового агента — воспроизводимые ночные прогоны, а не тишина после закрытия крышки ноутбука.

1. Зачем в 2026 выносить плановых агентов на удалённый Mac

Cursor Automations, оркестрация n8n + MCP и remote-control в Codex CLI в 2026 году превращают «запустить агента по расписанию» из демо в рабочую нагрузку. Исполнение всё равно остаётся на macOS: launchd планирует только локальные процессы, Seatbelt и Keychain блокируют необъявленный доступ инструментов, а домашний Mac теряет задания из‑за сна, переподключения Wi‑Fi и перезагрузок после обновлений.

Размещение планового агента на удалённом Mac M4 даёт три вещи: ① аптайм 7×24 с контролируемыми рестартами; ② меньший RTT к LLM/MCP API (APAC или восток США); ③ эластичную аренду посуточно / понедельно / помесячно, чтобы неудачный PoC не превращался в покупку железа.

Статья про триггеры по расписанию и событиям + оркестрацию MCP, а не про фермы git worktree (это в другом материале). OpenClaw gateway, холодный старт 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) и tmux или screen для разбора инцидентов.
  3. Создайте ~/agent-runs/state, ~/agent-runs/logs, ~/agent-runs/scripts.
  4. Ключи API — в ~/.config/agent/env (режим 600); подключайте через EnvironmentVariables в LaunchAgent — не вшивайте в plist.
  5. Один ручной прогон crnd schedule или тестового launchd-задания; убедитесь, что логи пишутся на диск.
  6. curl к вашим LLM/MCP endpoint с машины, зафиксируйте RTT; проверьте firewall для входящих webhook.

Только после этого выбирайте длительность PoC-аренды. Если любой шаг падает — не переходите на неделю или месяц.

3. Топология LaunchAgent launchd

Пользовательские задания по расписанию — в ~/Library/LaunchAgents/, загрузка через launchctl bootstrap gui/$(id -u) (Ventura и новее; предпочитайте bootstrap, а не устаревший load).

РежимКогда уместенПлюсыОграничения
launchd, прямой скриптФиксированный интервал/календарь, один репозиторийБез зависимостей, нативно, понятные логиThrottleInterval в plist вручную
crnd / agent-reveilleМного агентов, расписание «человеческим» языкомУдобный CLI, версионируемоВсё равно опирается на launchd/cron
n8n + MCP webhookКросс-системные потоки, шаги согласованияCurated tools, ретраи, алертыДоп. задержка; безопасность входа

Типичные ключи LaunchAgent:

  • StartCalendarInterval: день/час/минута — замена crontab.
  • KeepAlive: перезапуск при выходе; обязательно с ThrottleInterval против циклов падений.
  • StandardOutPath / StandardErrorPath: без логов вы слепы.
Пример LaunchAgent (почасовой пакет 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-серверу напрямую (внутри VPN или SSH-туннеля), либо n8n/Cursor Automations бьёт в webhook, который запускает скрипты на удалённом runner (когда нужны согласование, ретраи и алерты).

Границы безопасности:

  • Только curated tools — белый список файлового I/O и фиксированных API. Не выставляйте неограниченный shell-MCP в интернет.
  • Входящие webhook — HMAC или краткоживущие токены; ключи идемпотентности пишите в state/runs.
  • Жёсткие таймауты на вызовы LLM; экспоненциальный backoff, иначе launchd + webhook устроят двойной шторм запусков.

Кейсы Mattermost + n8n + MCP в 2026 показывают: оркестрация в n8n, исполнение на macOS runner — совместимо с прямым вызовом launchd; выбирайте по тому, есть ли у вас уже n8n.

5. Шаблоны плановых задач Claude Code / Codex CLI

Claude Code и Codex 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-workflow: по расписанию — merge/review-пакеты; интерактивное кодирование — в worktree, без блокировки каталогов. Пики RAM — в материале про пики памяти и swap.

6. Логи, секреты и планирование хранилища

Долгоживущие агенты быстро заполняют state/runs, кэши моделей и хранилища npm/pnpm. Ориентиры (не SLA): лёгкие текстовые агенты могут неделями жить на 512 ГБ; локальный Ollama или тяжёлые артефакты — 2–4 недели на 512 ГБ.

  • Ротация логов — посуточные файлы или logrotate — чтобы один файл не съел inode.
  • Секреты только в Keychain или env с режимом 600; никогда не кладите токены в ProgramArguments открытым текстом.
  • При 80% диска сначала чистите кэши прогонов, затем масштабируйте том или добавьте второй параллельный runner.

Память: агенты только по API часто укладываются в 16 ГБ; Ollama 7B+ или параллельный Claude Code требуют мониторинга swap и апгрейда до 24 ГБ или разделения нагрузок.

7. Частота задач × аренда: матрица и чек-лист миграции

НагрузкаДавление на дискРекомендуемая арендаКогда повышать
Лёгкий MCP каждый часНизкое (<5 ГБ/нед)Посуточный PoC → месяц7 чистых дней, аудируемые логи
Ежедневный полный review CodexСреднее (10–30 ГБ/нед)Неделя → месяцДиск <70%, стабильный RTT
Несколько агентов + локальные моделиВысокое (>50 ГБ/нед)Неделя + 512→1 ТБРассмотрите второй runner

Цены — на странице тарифов и в консоли. Последовательность: посуточный PoC (1–3 дня, launchd + первый MCP job) → недельный спринт → месячная аренда после двух стабильных недель. Чек-лист PoC:

  1. LaunchAgent загружается и переживает перезагрузку.
  2. Хотя бы один webhook/MCP end-to-end с идемпотентным state.
  3. 24 ч логов без необработанных panic; приемлемый рост диска/inode.
  4. RTT API и доля ошибок в порогах команды (APAC или восток США под нагрузку).

8. Граница с OpenClaw Gateway (только контраст)

OpenClaw силён как message-шлюз: публичный 18789, tunnel+webhook, мультиканальный вход. Плановый агент в этой статье — пакетный CLI: триггеры launchd без постоянного HTTP-порта, идеально для cron-задач. Оба могут делить один удалённый Mac M4 с разными учётками и каталогами. Колонку OpenClaw смотрите для gateway; здесь не разворачиваем.

9. FAQ по устранению неполадок

Plist не грузится? plutil -lint; уникальный Label; на Ventura+ — bootstrap, не load.

launchctl bootstrap I/O error? Сначала bootout того же job; plist в LaunchAgents, пути без лишних пробелов.

Job идёт, логов нет? Проверьте, что родитель StandardOutPath существует и пользователь может писать.

Цикл KeepAlive? Увеличьте ThrottleInterval; ловушки до set -e; скрипт не должен мгновенно выходить.

Seatbelt / Keychain блокирует CLI? Один раз авторизуйте Keychain в интерактивном SSH; у LaunchAgent те же PATH и HOME, что у login shell.

Таймауты MCP? Ограничьте число tools, поднимите timeout, перенесите runner ближе к региону API.

Дубли webhook? Ключи идемпотентности в state/runs; dedupe в n8n.

Ollama OOM? Меньшая модель, лимит параллелизма, больше RAM или второй runner.

Когда второй параллельный runner? Диск 80%+ после чистки или CPU >85% устойчиво при шардируемых задачах.

Минимальная длина посуточного PoC? Один полный 24-часовой цикл расписания плюс один ручной webhook.

Чем отличается от статьи про worktree? Здесь — когда запускать; там — где и как параллелить кодинг.

OpenClaw или launchd? Сообщения/шлюзы → OpenClaw; cron/пакеты → launchd. Без обещаний SLA — валидируйте PoC-метриками.

Стабильные плановые агенты на облачной Mac mini

Выделенный M4, низкое потребление в простое и нативный macOS launchd лучше подходят цепочкам Claude Code / Codex CLI, чем Планировщик Windows или cron на Linux. Узлы APAC и восток США, SSH из коробки, работа 7×24 без зависимости от крышки ноутбука. Пройдите чек-лист PoC выше, прежде чем фиксировать срок аренды — совокупная стоимость часто ниже, чем рабочая станция плюс электричество и сопровождение.

Начните с посуточной аренды в целевом регионе, чтобы проверить launchd и первый MCP-триггерсравнить тарифы, память и диск, SSH-доступ или главная; больше материалов в блоге.