Потребности Agent и человека в правах доступа принципиально различаются
Человеку с SSH-доступом понятно, какие ресурсы нужны; у AI Agent с теми же правами картина иная.
Фреймворки Agent (LangGraph, AutoGen, Cursor Background Agent и др.) при вызове инструментов по умолчанию наследуют все права пользователя ОС.
Agent с задачей «найти все TODO в репозитории и оформить Markdown-таблицу» для выполнения нужно только читать /workspace и записать файл,
на деле он одновременно может обращаться к ~/Library/Keychains, читать каталог SSH-ключей или отправлять данные через curl.
Agent сам этого не сделает, но встроенный shell-инструмент фреймворка или внешний плагин может — и вы не обязательно будете у экрана.
Архитектура Apple M4 делает этот вопрос важнее, а не второстепеннее. Neural Engine 38 TOPS резко снижает стоимость локального inference — Agent на Mac запускаются на порядок чаще, чем год назад, и окно риска растёт пропорционально. Идея OpenClaw: Agent не нужна изоляция Docker (теряется полный Xcode toolchain), и не нужна пересборка VM после каждой задачи (слишком дорого) — на реальном macOS движок политик перехватывает превышения на уровне системных вызовов; файл политики — обычный YAML, версионируется в Git вместе с кодом.
Железо: Mac mini M4 · 10-ядерный CPU · 16 GB unified memory · 256 GB NVMe SSD · выделенная полоса 1 Gbps (узел VPSRox Сингапур).
Система: macOS 15 Sequoia. OpenClaw CLI 0.9.x, формат политики v2.
Демо-задача: в песочнице клонировать публичный GitHub-репозиторий → rg для TODO → Markdown-отчёт; только чтение/запись /workspace, без исходящей сети.
Всё через SSH, VNC не требуется.
Перед началом: четыре обязательных предварительных условия
Для локальной системы нет требований — ноутбук на Windows, Linux или macOS с SSH-клиентом достаточно. Однако все четыре пункта ниже должны быть готовы до начала, иначе процесс остановится на одном из шагов.
VPSRox M4
из консоли
instance-token
(шаблон в разделе 4)
Экземпляр M4: ещё не арендовали? Перейдите на страницу заказа, выберите узел и срок; после оплаты экземпляр готов за 1–5 мин, учётные данные SSH появятся в консоли в разделе «Доступ». Пять узлов (Сингапур, Токио, Сеул, Гонконг, US East) имеют одинаковые характеристики и цены — выбирайте ближе к целевой сети по задержке.
instance-token: создаётся при первом включении OpenClaw на странице «Безопасность и песочница» в консоли, показывается один раз; сразу сохраните в корпоративное хранилище секретов (1Password, Bitwarden и т. п.). После ухода со страницы исходный token недоступен — можно только инициировать ротацию на той же странице (старый token сразу недействителен).
Включение OpenClaw в консоли
OpenClaw не включён по умолчанию — каждый экземпляр управляется отдельно, чтобы сценарии без аудита не несли лишних накладных расходов. Путь в консоли короткий: цель — увидеть на экране статус «Включено» перед следующим шагом.
-
01
Открыть страницу экземпляра
Войдите в консоль VPSRox и нажмите имя целевого экземпляра для перехода на страницу деталей. На вкладке «Безопасность и песочница» найдите переключатель OpenClaw.
-
02
Включить и сохранить instance-token
Нажмите переключатель включения; появится
instance-token(форматoct-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx). Скопируйте token в хранилище секретов до закрытия окна, подтвердите сохранение и нажмите «Я сохранил, продолжить». -
03
Убедиться, что статус «Включено»
После закрытия окна в разделе OpenClaw должен отображаться зелёный значок «Включено». Если через 30 секунд всё ещё «Включение…», обновите страницу и проверьте снова. Это единственный шаг, который выполняется в браузере.
Установка CLI и три проверки работоспособности
После входа по SSH установите OpenClaw CLI одной командой. Скрипт установки автоматически определяет версию macOS и архитектуру CPU; на M4 установка обычно занимает не более 30 секунд.
curl -fsSL https://api.vpsrox.com/openclaw/install.sh | bash
openclaw auth login --token <instance-token>
openclaw status
openclaw status должен вернуть состояние трёх компонентов; все три должны быть healthy, чтобы продолжить:
| Компонент | Назначение | Ожидаемое состояние |
|---|---|---|
| Policy Engine | Разбор YAML-политики, принятие решений до системных вызовов | healthy |
| Sandbox Runtime | Управление жизненным циклом песочницы, изоляцией процессов и сопоставлением файлов | healthy |
| Audit Bus | Асинхронная запись всех событий решений в постоянный журнал без блокировки основного потока | healthy |
Три зелёных статуса — необходимое, но не достаточное условие: Policy Engine healthy лишь означает, что процесс работает,
а не что YAML синтаксически верен. Проверка политики — отдельный следующий шаг.
Если что-то degraded или unavailable,
выполните openclaw doctor — частая причина: расширение ядра ждёт одобрения пользователя;
на экземпляре откройте «Системные настройки → Конфиденциальность и безопасность» (через SSH это не сделать — нужен краткий вход по VNC).
YAML с минимальными правами: построчный разбор полей политики
Файл политики определяет, что Agent может и не может в песочнице. Принцип — сначала строго, потом ослаблять:
первый YAML открывает только минимальный набор путей для задачи, смотрите deny в журнале аудита,
затем постепенно расширяйте по необходимости — не начинайте с широкой политики и не ужимайте потом.
Ниже шаблон read-only для сценария «клонировать публичный репозиторий → статический анализ → отчёт»;
сохраните его в ~/policies/quickstart-readonly.yaml.
apiVersion: openclaw.vpsrox.com/v2
kind: SandboxPolicy
metadata:
name: quickstart-readonly
spec:
filesystem:
allow:
- path: /workspace
access: [read, write] # Agent writes scan report here
deny:
- path: "**/Keychains/**" # block signing certificates
- path: "**/.ssh/**" # block private keys
- path: "**/Library/Cookies/**" # block browser session data
process:
allow: [git, rg, python3, zsh, bash]
network:
egress: deny-all # no outbound in quickstart mode
Несколько решений в дизайне. filesystem.deny важнее allow: даже при полном read/write на /workspace
пути из списка deny всё равно блокируются — порядок не меняет приоритет, сначала deny, потом allow.
process.allow — белый список имён процессов: запускаются только перечисленные исполняемые файлы;
если в toolchain Agent есть node или npm, добавьте их, иначе будет E_POLICY_DENY: process.
network.egress: deny-all блокирует даже DNS — в первой демонстрации это намеренно,
чтобы увидеть deny в журнале аудита и убедиться, что движок политик работает.
После написания YAML выполните проверку, чтобы обнаружить синтаксические ошибки до создания песочницы:
openclaw policy validate -f ~/policies/quickstart-readonly.yaml
Ожидаемый вывод: policy valid (0 warnings). При конфликте путей или опечатке в имени поля validate укажет конкретный номер строки.
Первый Agent-задача: создание песочницы и выполнение
Перед интеграцией с LangGraph или собственным фреймворком рекомендуем прогнать полный цикл на детерминированном shell-скрипте. Преимущество: поведение скрипта предсказуемо, вы чётко разделяете «решения политики» и «логику Agent», а при ошибке понимаете, что менять — политику или код Agent.
-
01
Создать песочницу
openclaw sandbox create --name quickstart --policy ~/policies/quickstart-readonly.yaml
При успехе возвращаются ID песочницы и статусready. Создание идемпотентно — повтор с тем же именем сообщит, что уже существует, без ошибки. -
02
В другом терминале — потоковый журнал аудита
openclaw audit tail --sandbox quickstart --follow
Не закрывайте это окно — нужно одновременно наблюдать выполнение Agent и записи аудита. Каждое событие решения обычно появляется через 50–200 ms после действия Agent. -
03
В первом терминале запустить скрипт входа Agent
Сначала поместите пример скрипта ниже в
/workspace/agent-entry.sh(создайте на хосте — песочница смонтирует автоматически), затем выполните в песочнице:
openclaw sandbox exec quickstart -- /bin/zsh /workspace/agent-entry.sh -
04
Остановить песочницу после задачи
openclaw sandbox stop quickstart
После остановки данные рабочей области остаются на хосте в/workspaceи автоматически монтируются при следующемsandbox create. Для полной очистки добавьте параметр--rm.
#!/bin/zsh
set -euo pipefail
cd /workspace
# Attempt network — will be denied by policy (intentional demo)
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
Из-за network.egress: deny-all git clone блокируется сетевой политикой; скрипт выводит "clone blocked (expected)" —
это ожидаемо, чтобы в журнале аудита появилось событие network с decision: deny
для проверки структуры журнала в следующем разделе. Если скрипт доходит до rg, права файловой системы /workspace настроены верно.
На узле M4 Сингапур полный скрипт (с перехваченным clone) ~ 2,3 с;
суммарные накладные расходы движка политик не более 80 ms.
Разбор журнала аудита: что означает каждая строка
Журнал аудита — ключевое отличие OpenClaw от других решений песочницы. Это не отчёт постфактум, а поток событий в реальном времени, синхронный с решениями политики: можно смотреть во время задачи или экспортировать позже. Каждая запись содержит фиксированный набор полей; понимание их значений помогает находить проблемы в журнале.
Типичная запись allow (чтение файла) имеет следующий формат:
ts=2026-07-24T08:03:12.481Z
sandbox=quickstart
pid=8231
syscall=open
resource=filesystem
path=/workspace/agent-entry.sh
access=read
decision=allow
policy_rule=filesystem.allow[0]
latency_us=34
latency_us — время в микросекундах, которое движок политик потратил на решение; policy_rule указывает на конкретный индекс правила YAML,
чтобы быстро определить, какое правило allow или deny сработало.
Запись deny (сеть заблокирована) имеет следующий формат:
ts=2026-07-24T08:03:12.512Z
sandbox=quickstart
pid=8233
syscall=connect
resource=network
dst=140.82.113.4:443
decision=deny
policy_rule=network.egress.deny-all
latency_us=19
Эта запись соответствует перехваченному в скрипте Agent git clone.
dst=140.82.113.4:443 — IP GitHub; по нему можно добавить точный whitelist в политику:
измените network.egress на allow-list и добавьте github.com:443,
снова validate и обновите политику песочницы (openclaw sandbox update --name quickstart --policy ...) —
пересоздавать песочницу не нужно.
Часто используемые команды запроса журнала:
Все deny за последний час: openclaw audit query --decision deny --since 1h.
Фильтр по пути: openclaw audit query --resource filesystem --path "/workspace/**".
Экспорт в JSON (для SIEM или скриптов): openclaw audit export --sandbox quickstart --since 24h --format json > audit.json.
Шесть типичных ошибок и подход к диагностике
При первом запуске почти каждый сталкивается хотя бы с одной из перечисленных ошибок. Таблица отсортирована по частоте; для каждой указаны корневая причина и кратчайший путь исправления — без просмотра полной документации.
| Симптом ошибки | Корневая причина | Кратчайшее исправление |
|---|---|---|
auth login сообщает, что token недействителен |
Пробелы до или после при копировании, или token уже был ротирован | Снова скопируйте на странице «Безопасность и песочница» в консоли; проверьте содержимое буфера обмена через pbpaste на лишние символы |
openclaw status показывает unavailable для одного из пунктов |
Ожидание одобрения расширения ядра пользователем (при первой установке) | Войдите через VNC → Системные настройки → Конфиденциальность и безопасность → одобрите системное расширение OpenClaw → перезапустите CLI-сервис |
policy validate выдаёт unknown field |
Опечатка в имени поля YAML или использование устаревших полей формата v1 | Проверьте, что apiVersion равен openclaw.vpsrox.com/v2; см. шаблон в разделе 5 |
E_POLICY_DENY: filesystem |
Agent обратился к пути вне списка allow в YAML | openclaw audit query --decision deny --since 1h — найдите целевой путь и при необходимости добавьте его в filesystem.allow |
E_POLICY_DENY: process |
Agent вызвал исполняемый файл вне белого списка process.allow |
Найдите в журнале аудита deny-записи с resource=process и добавьте соответствующее имя процесса в белый список |
git clone в песочнице истекает по таймауту, но deny-записей нет |
DNS-запрос заблокирован, но connect истёк по таймауту до deny |
Добавьте --verbose для вывода git; в YAML добавьте в список разрешённых сетей 8.8.8.8:53 или используйте режим белого списка доменов |
instance-token эквивалентен учётным данным экземпляра с высокими правами — не помещайте его в комментарии кода, .env или Git-коммиты.
В production при доступе нескольких человек настройте в консоли отдельные zero-trust сертификаты устройств и роли с минимальными правами (viewer / operator / admin),
а не делитесь одним instance-token.
От быстрого эксперимента к стабильному рабочему процессу Agent
Пятиминутный read-only цикл — лишь проверка среды; production-сценарии сложнее:
Agent вызывает xcodebuild (нужны дополнительные процессы и временные каталоги), npm или PyPI (точный whitelist исходящей сети),
автоматическое создание и удаление песочницы на каждый pull request в CI (нужны REST API или интеграция с GitHub Actions).
Общий путь расширения: итерация политики по deny-записям в журнале аудита, а не угадывание с широкой политики.
По замерам на одном Mac mini M4 · 16 GB unified memory стабильно параллельно работают 2 песочницы xcodebuild с кэшем DerivedData,
при этом ~4 GB остаётся для процессов аудита OpenClaw и системных служб. При росте нагрузки Agent
сервис Thunderbolt 5 от VPSRox объединяет несколько Mac mini в кластер 80 Gbps;
политики по-прежнему управляются на каждом экземпляре отдельно, журналы аудита OpenClaw изолированы по экземплярам.
Командам без выделенного облачного Mac стоит заранее знать ограничения альтернатив. Локальная машина 7×24 с фоновым Agent мешает повседневной разработке; при постоянной нагрузке особенно заметны проблемы охлаждения; публичные macOS VM (например, managed macOS Runner в GitHub Actions) делят пул ресурсов, без нативной интеграции OpenClaw, а очереди в пиковые часы сильно бьют по интерактивным Agent-процессам; свой Mac mini в офисе — амортизация, обслуживание и настройка статического публичного IP.
VPSRox предоставляет выделенный физический Mac mini M4 (10-ядерный CPU · 16 GB unified memory · 256 GB NVMe · Neural Engine 38 TOPS), OpenClaw встроен в стандартный экземпляр без дополнительной настройки; пять узлов (Сингапур, Токио, Сеул, Гонконг, US East) с независимым публичным IPv4 и выделенной полосой 1 Gbps, доставка за 1–5 мин после оплаты, от $21.8 в день. На этапе экспериментов с Agent — посуточно; после стабилизации — $109.1/мес., без контракта, срок можно менять в любой момент.
Выделенный облачный Mac со встроенным OpenClaw для AI Agent
Выделенный узел VPSRox Mac mini M4 со встроенным OpenClaw: движок политик + среда песочницы + шина аудита — готово к работе без самостоятельного развёртывания. 16 GB unified memory и Neural Engine 38 TOPS позволяют параллельно запускать Agent и macOS toolchain; пять узлов с независимым IPv4, посуточная аренда без контракта.