Доставка 1–5 мин

Agent Sandbox с встроенным OpenClaw

$21.5 от /день · Физическая машина эксклюзивно
Настроить облачный Mac
Изоляция по политикам Аудит операций M4 · 38 TOPS

FIELD NOTE · AI Agent

OpenClaw Sandbox на практике: запуск AI Agent в изолированном macOS

Подключить LangGraph, AutoGen или собственный Agent к shell-пользователю macOS — значит передать цепочке tool calls доступ к Keychain, SSH-ключам и полному чтению/записи на диске. В этом гайде — полный цикл на выделенном JexMac Mac mini M4: задать границы политикой OpenClaw, отправить первую изолированную задачу и сверить audit-логи — от включения в консоли до CLI, с воспроизводимыми командами.

«Голый» Agent и sandbox: где расходится поверхность атаки

Разработчик по SSH обычно не удалит ~/.ssh и не выгрузит Distribution-сертификат случайно. AI Agent иначе: фреймворк при вызове shell, файловых и сетевых инструментов наследует права текущего пользователя macOS. Задача «просканировать репозиторий на TODO и собрать Markdown-отчёт» формально требует только чтения проекта и одного выходного файла — но на практике Agent может дотянуться до Keychain, cookie браузера и произвольных исходящих HTTP-запросов.

Контейнеры изолируют процессы, но на macOS теряют полный Xcode toolchain и нативные Apple-фреймворки; пересоздавать VM на каждую задачу слишком медленно. OpenClaw — третий путь: на реальном macOS YAML-политика принимает allow/deny на уровне системных вызовов, каждое решение уходит в audit-поток. Agent по-прежнему использует 38 TOPS Neural Engine M4 для локального inference, но несанкционированное чтение/запись блокируется сразу.

Демо-задача в этой статье конкретна: статическое сканирование снимка кода в sandbox (rg по TODO/FIXME), попытка git clone, которую политика отклонит, и запись отчёта в /workspace. Критерии приёмки: скрипт завершился, в audit-логах есть и allow, и deny, по полям события можно найти сработавшее правило YAML.

Для команд, которые уже экспериментируют с LLM-агентами в CI, типичный сценарий выглядит так: Agent получает diff PR, запускает линтер и unit-тесты, формирует комментарий ревьюера. Без sandbox любой сбой в prompt injection или ошибочный tool call может затронуть signing identity на том же Mac, где крутится nightly-сборка. OpenClaw позволяет держать «опасную» часть (shell + сеть) внутри именованного sandbox, а Xcode и Keychain — вне его mount-пространства.

2.6s
Демо-скрипт end-to-end (с блокировкой clone)
< 80ms
Суммарные накладные расходы policy engine
3/3
Компоненты CLI health check — зелёные
16 GB
Unified Memory M4 — inference и sandbox параллельно
Среда тестирования

Железо: узел JexMac Япония (Токио) · Mac mini M4 · 10-ядерный CPU · 16 GB Unified Memory · 256 GB NVMe · 1 Gbps выделенный канал. Система: macOS 15 Sequoia. OpenClaw CLI 0.9.x, формат политик v2. Весь процесс через SSH; одобрение системного расширения — однократный вход через браузерный VNC.

Перед стартом: четыре условия, без которых процесс застрянет

Локальная машина может быть Windows, Linux или macOS — достаточно SSH-клиента. Но если не выполнено хотя бы одно из четырёх условий ниже, вы остановитесь на полпути.

  • Доставленный инстанс JexMac: в консоли в разделе «Доступ» видны SSH-адрес и порт. Пять узлов — Сингапур, Япония (Токио), Корея (Сеул), Гонконг, Восток США — одинаковые спецификации и цены; для экспериментов с Agent выбирайте регион ближе к целевым API по задержке.
  • OpenClaw instance-token: генерируется при первом включении в консоли «Безопасность и sandbox», формат oct-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx, показывается один раз — сразу сохраните в 1Password / Bitwarden.
  • Рабочий каталог /workspace: создайте на хосте заранее; sandbox смонтирует его как зону чтения/записи Agent. Не кладите сюда приватные ключи или p12.
  • Хотя бы один YAML политики: в разделе 5 — шаблон read-only; принцип «сначала строго, потом ослаблять» по deny-логам.

Включение OpenClaw в консоли и хранение instance-token

OpenClaw не включён по умолчанию — каждый физический инстанс управляется отдельно, чтобы сценарии без аудита не платили лишние накладные расходы. В браузере достаточно трёх шагов; дальше всё в SSH.

  1. 01
    Карточка инстанса → «Безопасность и sandbox»

    Войдите в консоль JexMac, откройте нужный Mac mini, найдите переключатель OpenClaw. Если инстанс только что доставлен (1–5 минут), дождитесь статуса «Running».

  2. 02
    Включить и скопировать token

    Нажмите «Enable», в диалоге — instance-token. Убедитесь, что он в vault, затем «Сохранил, продолжить». Не публикуйте token в Slack, тикетах или Git.

  3. 03
    Бейдж «Enabled»

    Если через 30 секунд всё ещё «Enabling», обновите страницу. Зелёный бейдж — можно закрыть браузер и перейти к CLI.

Установка CLI по SSH и health check трёх компонентов

После SSH на инстанс install-скрипт определяет Apple Silicon; на M4 установка обычно укладывается в 30 секунд.

curl -fsSL https://api.jexmac.com/openclaw/install.sh | bash
openclaw auth login --token <instance-token>
openclaw status

У openclaw status все три строки должны быть healthy:

Компонент Назначение Ожидаемый статус
Policy Engine Парсит YAML, allow/deny до syscall healthy
Sandbox Runtime Жизненный цикл sandbox, изоляция процессов, mount каталогов healthy
Audit Bus Асинхронная запись audit-событий без блокировки Agent healthy

При degraded или unavailable сначала openclaw doctor. Частая причина — неодобренное системное расширение: зайдите через VNC в «Системные настройки → Конфиденциальность и безопасность», разрешите OpenClaw, вернитесь в SSH и перезапустите сервис CLI. Policy Engine healthy лишь означает, что процесс жив — синтаксис YAML проверяется отдельно в следующем разделе.

Политика минимальных прав: версионируемый YAML

Файл политики задаёт, какие пути читать, какие процессы запускать, есть ли исходящая сеть. Рекомендуемый цикл: первый YAML — минимум для задачи → запуск → deny в audit → точечное расширение allow, а не «всё открыто» с последующим ужесточением.

Сохраните как ~/policies/agent-readonly.yaml:

apiVersion: openclaw.jexmac.com/v2
kind: SandboxPolicy
metadata:
  name: agent-readonly
spec:
  filesystem:
    allow:
      - path: /workspace
        access: [read, write]
    deny:
      - path: "**/Keychains/**"
      - path: "**/.ssh/**"
      - path: "**/Library/Cookies/**"
  process:
    allow: [git, rg, python3, zsh, bash]
  network:
    egress: deny-all

Три принципа: deny выше allow — даже при записи в /workspace пути из deny-list блокируются; process.allow — белый список имён процессов, для node / npm нужно явное добавление, иначе E_POLICY_DENY: process; egress: deny-all в демо специально режет git clone, чтобы в audit появилось network deny.

Перед созданием sandbox:

openclaw policy validate -f ~/policies/agent-readonly.yaml

Ожидается policy valid (0 warnings); опечатки в полях или формат v1 дадут номер строки.

Создание sandbox, запуск Agent-задачи, проверка результата

До интеграции с LangGraph и аналогами прогоните детерминированный shell-скрипт — так проще отделить «проблема политики» от «логика Agent».

На хосте создайте /workspace/agent-entry.sh:

#!/bin/zsh
set -euo pipefail
cd /workspace
git clone --depth 1 https://github.com/apple/swift-sample-code.git repo 2>/dev/null \
  || echo "clone blocked (expected)"
rg -rn "TODO|FIXME" . --glob '*.swift' > scan-report.txt 2>/dev/null || true
echo "Scan complete: $(wc -l < scan-report.txt | tr -d ' ') matches" > summary.txt
cat summary.txt

После chmod +x /workspace/agent-entry.sh выполните по порядку:

  1. 01
    Создать sandbox

    openclaw sandbox create --name agent-demo --policy ~/policies/agent-readonly.yaml

    Статус ready — достаточно. Повторный create с тем же именем сообщит «already exists», данные не сотрутся.

  2. 02
    Второй SSH-сеанс — audit в реальном времени

    openclaw audit tail --sandbox agent-demo --follow

    События решений обычно через 50–200 ms после операции.

  3. 03
    Запуск скрипта в sandbox

    openclaw sandbox exec agent-demo -- /bin/zsh /workspace/agent-entry.sh

    Ожидайте clone blocked (expected) и строку с числом совпадений в summary.txt.

  4. 04
    Остановить sandbox

    openclaw sandbox stop agent-demo

    Данные в /workspace остаются на хосте; полная очистка — флаг --rm.

Из-за deny на исходящую сеть git clone не пройдёт — так и задумано для проверяемого network deny. Успешный шаг rg подтверждает корректный filesystem allow. На токийском узле весь скрипт занял около 2.6 s, накладные расходы политики пренебрежимо малы.

После успешного прогона проверьте артефакты на хосте: cat /workspace/summary.txt и wc -l /workspace/scan-report.txt. Файлы лежат вне sandbox, но созданы процессом внутри него — так вы увидите, что запись в allow-path работает, а попытка выйти за пределы /workspace (например, cat ~/.ssh/id_ed25519 из того же entry-скрипта) даст E_POLICY_DENY: filesystem без утечки содержимого ключа.

Поля audit-лога: как читать allow и deny

Audit — не PDF «после факта», а поток событий синхронно с решениями политики. Типичная allow-запись (чтение entry-скрипта):

ts=2026-07-28T09:03:12.481Z
sandbox=agent-demo
syscall=open
resource=filesystem
path=/workspace/agent-entry.sh
access=read
decision=allow
policy_rule=filesystem.allow[0]
latency_us=34

policy_rule указывает на сработавшее правило YAML; latency_us — микросекунды на решение. Соответствующий network deny (заблокированный clone):

ts=2026-07-28T09:03:12.512Z
sandbox=agent-demo
syscall=connect
resource=network
dst=140.82.113.4:443
decision=deny
policy_rule=network.egress.deny-all
latency_us=19

Если production-задаче нужен GitHub, смените network.egress на allow-list с github.com:443, validate и openclaw sandbox update --name agent-demo --policy ~/policies/agent-readonly.yaml — пересоздавать sandbox не обязательно.

В корпоративных средах audit часто уходит в SIEM или SOAR: поле latency_us помогает отличить задержку политики от сетевого таймаута; policy_rule — быстро найти строку YAML для change request. Рекомендуем хранить YAML политик в том же репозитории, что и workflow Agent, с review так же строгим, как для Terraform-модулей IAM.

Полезные запросы:

  • Deny за последний час: openclaw audit query --decision deny --since 1h
  • Фильтр по пути: openclaw audit query --resource filesystem --path "/workspace/**"
  • Экспорт в SIEM: openclaw audit export --sandbox agent-demo --since 24h --format json > audit.json

Шесть частых ошибок и краткий путь исправления

Симптом Причина Что сделать
auth login — token invalid Лишний пробел при копировании или token уже ротирован Скопировать заново из консоли; на macOS pbpaste | xxd для проверки краёв строки
statusunavailable Системное расширение не одобрено VNC → Настройки → Конфиденциальность → разрешить OpenClaw → перезапуск сервиса
policy validate unknown field Опечатка в поле или формат v1 Проверить apiVersion: openclaw.jexmac.com/v2
E_POLICY_DENY: filesystem Доступ вне allow-списка путей audit query --decision deny, добавить путь в filesystem.allow
E_POLICY_DENY: process Процесс вне белого списка Deny с resource=process, добавить имя в process.allow
git clone timeout без deny в audit DNS заблокирован до connect allow-list для сети + 8.8.8.8:53 или правила по доменам
Учётные данные и командная работа

instance-token эквивалентен высокопривилегированному доступу к инстансу — не кладите в .env и Git. В production выдавайте участникам zero-trust сертификаты устройств и роли (viewer / operator / admin), а не один общий token.

После PoC: где держать Agent в долгую

Read-only sandbox — только старт. В реальности Agent может вызывать xcodebuild, тянуть npm/PyPI, в CI создавать и уничтожать sandbox на каждый PR. Масштабирование всегда через итерацию политики по deny-логам, а не угадывание прав.

По нагрузке один Mac mini M4 · 16 GB держит параллельно два sandbox со сборкой и DerivedData, ~4 GB остаётся под audit OpenClaw и системные сервисы. При росте нагрузки сервис Thunderbolt 5 cluster JexMac объединяет несколько Mac mini на 80 Gbps — политики и audit каждого инстанса хранятся отдельно.

Если выделенного облачного Mac ещё нет, альтернативы с явными минусами: локальный MacBook 24/7 мешает повседневной работе и греется под постоянной нагрузкой; GitHub-hosted macOS Runner — общий пул без нативной интеграции OpenClaw, в пик очередь 10–20 минут неудобна для интерактивного Agent; покупка Mac mini — CAPEX, colocation и выездная ротация сертификатов.

JexMac даёт выделенный физический Mac mini M4 (10 ядер · 16 GB · 256 GB NVMe · 38 TOPS), OpenClaw встроен в стандартный инстанс, пять узлов с отдельным IPv4 и 1 Gbps, доставка за 1–5 минут после оплаты, от $21.5/день, $107.3/месяц, без контрактной привязки. На этапе экспериментов — посуточно; когда политики стабилизируются — переход на месячный тариф.

Физическая машина эксклюзивно · доставка 1–5 мин

Запустите первый Agent в изолированном macOS

Команды из статьи проверены на физических узлах JexMac Mac mini M4. Активация инстанса → включение OpenClaw → задача по политике из гайда — первая audit-запись обычно в течение часа. Аренда от дня, после PoC инстанс можно освободить.

Стандартная конфигурация
ЧипApple M4 · 38 TOPS
CPU10 ядер (4P + 6E)
Память16 GB Unified Memory
Сеть1 Gbps выделенный канал
SLA99.9% доступности
ДоставкаАвтоактивация за 1–5 мин