Strands Agents · визуальный конспект

Strands Box:
контроль над действиями агента

Локальная песочница, которая проверяет команды, вызовы инструментов и историю действий по правилам Dogwood.

Marc Brooker7 октября 2026Оригинал: 11 минутDeveloper preview
в статье ↗
Главный тезис

ОС удерживает агента внутри песочницы, а единственный выход через слой политик позволяет проверять смысл его действий и условия, при которых они разрешены.

TL;DR

Суть за минуту

в статье ↗

Свобода внутри границ

Агент выбирает путь к цели. Детерминированная политика ограничивает его действия, сохраняя возможность исследовать и пробовать.

Правила учитывают историю

Dogwood выражает условия во времени: тесты должны пройти перед push, а число вызовов API не должно выйти за квоту.

Два слоя защиты

Box объединяет изоляцию ОС и проверки в пользовательском пространстве. Для облака с несколькими арендаторами автор рекомендует ещё и MicroVM на сессию.

01

Из песочницы есть только один выход

в статье ↗

Box использует механизмы ядра, чтобы направить взаимодействия с системой и инструментами в отдельный слой политик. Этот слой понимает программы, языки и протоколы.

Архитектура Box: агент вызывает shell, Python, MCP или сеть; каждое действие проходит через слой политик с Dogwood. Обход блокируется ядром, запрет возвращает ошибку агенту.Схема из статьи · нажмите для увеличения
Слева — агент внутри границы ядра. В центре — слой политик в пользовательском пространстве, вне досягаемости агента. Справа — внешние ресурсы. При запрете агент получает ошибку; любой другой выход блокирует ядро. в статье ↗

Четыре пути к одной проверке

Shell → Strands Shell
Программа и аргументы команды.
Python → Monty
Операции Python-кода.
MCP → брокер
Инструмент и его аргументы.
Сеть → шлюз
Хост и сетевой запрос.

Граница и правило решают разные задачи

Ядро заставляет обращаться к слою политик. Dogwood решает, разрешено ли конкретное действие.

При запрете агент получает ошибку, а внешний ресурс остаётся недоступным для этого действия.

Box работает с прямыми инструментами и сгенерированным кодом и, по статье, не привязан к модели, облаку или Strands Harness SDK.

02

Разрешение зависит от прошлых действий

в статье ↗

Семантическая политика видит, какой инструмент вызывается и с какими аргументами. Временная политика связывает текущий запрос с событиями, которые уже произошли.

Пример 1. Проверка перед git push

В примере автора push требует успешного npm test в каталоге ~/my-project за последние 15 минут. После этого теста не должно быть git add.

1 · npm testКод возврата 02 · Без git addПосле успешного теста3 · git pushВ пределах 15 минут
Dogwood · policy.dwв статье ↗
forbid (principal, action == Box::Action::"shell:spawn", resource)
    when { context.input.program == "git" && context.input has arg1 && context.input.arg1 == "push" }
    unless temporal {
       (!Box::Action::"shell:spawn"::response{ input.program: "git", input.arg1: "add" }
       since within 15m
       Box::Action::"shell:spawn"::response{ input.program: "npm", input.arg1: "test", input.arg_count: 1, input.cwd: "~/my-project", output.status: 0 })
    };

Как читать первое правило

forbid задаёт запрет для shell:spawn, а условие when выделяет программу git с первым аргументом push.

unless temporal снимает этот запрет при нужной истории: успешный ответ npm test в заданном каталоге, окно 15m и отсутствие ответа git add после теста.

Проверка относится к событию

Первое правило использует ::response: ему нужен результат теста, включая output.status: 0.

Ниже квота использует ::request: счётчик учитывает обращения к MCP независимо от того, завершились ли они успешно.

Это неполная политика. Автор прямо предупреждает: git switch может нарушить обещание, что отправляется именно проверенный код. Для полной защиты нужно учесть остальные допустимые действия и способы изменить состояние репозитория.

Пример 2. Квота на вызовы MCP

Второе правило запрещает обращение к AWS MCP-серверу, если история уже содержит 60 запросов tools/call за последний час. Проверка считает запросы, а не успешные ответы.

Dogwood · policy.dwв статье ↗
forbid (principal, action == Box::Action::"mcp:call", resource)
when { context.input.server == "aws" && context.input.method == "tools/call" }
when temporal {
  exists (n: Long). (
    (count for (t: Timepoint). where (
      formerly within 1h (
        Box::Action::"mcp:call"::request{ input.server: "aws", input.method: "tools/call" } && tp(t)
      )
    )) == n
    && n >= 60
  )
};

Такие ограничения подходят для платных API и общей квоты нескольких агентов. Ещё один пример из статьи: разрешить платежи с общим лимитом $100 в день. Код этого правила автор не приводит.

Dogwood требует освоения: автор признаёт сложность чтения и написания правил. Улучшение их удобства заявлено как направление дальнейшей работы.

03

Уровень изоляции определяет, что видно политике

в статье ↗

Чем ближе проверка к инструменту, тем больше контекста действия она получает. Нижние уровни дают сильную границу изоляции, но видят более грубые операции.

УровеньЧто видитСильная сторонаОграничение
MicroVM / FirecrackerВиртуальные диски и сетевые устройстваМалая доверенная база; сильная изоляцияВ сети обычно TLS-шифротекст; операции диска выглядят как байты и смещения
Системные вызовыОткрытие файла, запись, подключение к хостуУдобно ограничивать пути и права доступаTLS всё ещё скрывает содержимое; интерфейсы ядра растут
Эмуляция syscalls / gVisorСистемные вызовы через эмулируемое ядроЭффективный подход к изоляцииСмысл MCP-вызовов по-прежнему трудно контролировать
Слой политик BoxShell, Python, MCP, файлы, сетьПроверяет смысл и историю действийТребует доверия к интерпретаторам и перехватчикам протоколов

Allowlist требует сопровождения

Список разрешённых syscalls нужно расширять, когда приложения начинают использовать новые функции ядра. Список запретов также требует обновлений и даёт более слабую защиту.

Перехват syscalls имеет пределы

Автор отмечает сложность фильтрации и риск TOCTOU при модификации вызовов в Linux: состояние может измениться между проверкой и использованием.

04

Больше контекста означает больше доверенного кода

в статье ↗

В доверенную вычислительную базу Box входят сложные компоненты: интерпретаторы и перехватчики протоколов. Ошибки в них могут позволить обойти политику.

Что сделано для защиты

Код написан на Rust. Команда использует тестирование, fuzzing и валидацию и планирует упрощать модель безопасности.

Это меры снижения риска. Автор не обещает отсутствия ошибок или обходов.

СХЕМА КОНСПЕКТА · ОБЛАЧНАЯ СЕССИЯ
MicroVM · одна сессияBox + локальная политикаАгентВыходы проверяет Dogwood
MicroVM · одна сессия
Box + локальная политика
Агент

Выходы проверяет Dogwood

Для облака с несколькими арендаторами автор рекомендует отдельную MicroVM для каждой сессии. Самый простой предложенный вариант: запустить Box внутри агента в AgentCore Runtime. Аналогичную архитектуру, по статье, можно построить на EC2, Lambda или Fargate.

В сочетании с AgentCore локальные правила Box дают подробный контроль, AgentCore Policy проверяет вызовы инструментов, а MicroVM разделяет сессии.

05

Как применить

в статье ↗

Практические шаги по мотивам статьи. Отмечайте выполненное; состояние сохраняется до перезагрузки страницы.

06

Источники и контекст

в статье ↗
Открыть в статье