Что на самом деле обеспечивает OpenShell
Инструменты изоляции во время выполнения, такие как OpenShell от Nvidia, работают в определённой точке стека агента: ниже рассуждений модели и выше вызова инструмента. Они перехватывают момент, когда агент пытается вызвать инструмент, отправить сообщение или записать данные. На этой границе они могут проверить предлагаемое действие, сравнить его с набором правил и остановить выполнение. Это полезно. Но само по себе это неполно.
Слой перехвата видит действие, а не намерение. Когда агент выбирает инструмент и формирует аргументы, система изоляции получает структурированный запрос: имя инструмента, набор параметров, возможно, целевой адрес. Чего она не получает — так это рассуждений, породивших этот запрос, цели, которую преследует агент, или полномочий, в рамках которых он считает, что действует. Классификатор может оценить запрос на аномальность, но он не может знать, входило ли действие в компетенцию агента, потому что эта компетенция никогда не была объявлена.
Задержка обнаружения усугубляет проблему. Даже система изоляции, реагирующая за миллисекунды, реагирует после того, как агент уже выбрал курс действий. Модель сгенерировала токены, выбрала инструмент и построила аргументы. В многошаговой траектории это единственное действие может быть одним из десятков, и побочные эффекты предыдущих шагов могут быть уже необратимыми. Миллисекунды важны, но они не заменяют знание заранее того, что агенту было разрешено делать.
Практическое следствие: каждая остановка становится решением на усмотрение. Классификатор решает, подозрительно ли действие. Этот классификатор вероятностный, зависит от контекста и дорог в запуске на каждом шаге. Это не политика. Это вывод о намерении, и он будет давать как ложноположительные, так и ложноотрицательные срабатывания. При ложноотрицательном срабатывании действие продолжается. При ложноположительном блокируется законное действие и траектория агента нарушается. Ни один из исходов не определяется объявленной границей; оба определяются догадкой модели.
Контракт до запуска
Контракт меняет форму проблемы. До генерации первого токена агент должен объявить свою поверхность инструментов, свои назначения исходящего трафика и свой лимит расходов. Поверхность инструментов — это набор инструментов, которые агент может вызывать, с диапазонами параметров, которые он может использовать. Назначения исходящего трафика — это конечные точки, домены или очереди, в которые он может отправлять данные. Лимит расходов — это максимальное количество ресурса, будь то токены, вызовы API или валюта, которое может потребить запуск.

Это объявление не является инструкцией в промпте. Это машиночитаемый артефакт, который среда выполнения может проверить детерминированно. Когда принудительное исполнение в стиле OpenShell проверяет объявленную область, а не предполагаемое намерение, проверка становится сравнением множеств: входит ли этот инструмент в объявленную поверхность, входит ли это назначение в объявленный список исходящего трафика, укладываются ли эти расходы в объявленный лимит. Ответ — да или нет. Никакого классификатора, никакой задержки, никакого решения на усмотрение.
Контракты также композируются. Субагент должен наследовать суженный лимит от родителя, а не полную поверхность родителя. Если у родительского агента есть доступ к платёжному API и API обмена сообщениями, субагент, задача которого — составить сообщение, должен получить только инструмент обмена сообщениями, со списком назначений, ограниченным одобренными получателями родителя. Это не вывод во время выполнения; это структурное свойство определения агента. Субагент не может превысить свой лимит, потому что его лимит никогда не был предоставлен.
Именно этот механизм превращает изоляцию из инструмента восстановления в инструмент предотвращения. Среде выполнения не нужно угадывать, намеревался ли агент отправить данные на внешнюю конечную точку. Конечная точка либо есть в объявленном списке исходящего трафика, либо нет. Среде выполнения не нужно оценивать, аномальны ли расходы агента. Расходы либо укладываются в объявленный лимит, либо нет. Контракт делает принудительное исполнение детерминированным.
Почему аварийные выключатели — неправильный примитив
Аварийный выключатель — это механизм восстановления. Контракт — это механизм предотвращения. Поставка только первого перекладывает затраты на реагирование на инциденты. Агент работает, классификатор не улавливает проблемное действие, и аварийный выключатель завершает запуск. К этому моменту ущерб может быть уже нанесён.
Завершение запуска в середине траектории оставляет частичные побочные эффекты. Наполовину записанная запись в базе данных. Наполовину отправленное сообщение клиенту. Наполовину зафиксированная транзакция, оставляющая две системы в несогласованном состоянии. Аварийный выключатель останавливает агента, но не отменяет действия, которые агент уже совершил. Откат возможен в некоторых системах, но он дорог, подвержен ошибкам и часто неполон. Стоимость инцидента — это не стоимость аварийного выключателя; это стоимость очистки.
Изоляция должна быть крайней мерой после проверок области, бюджетов исходящего трафика и потолков возможностей. Проверка области не позволяет агенту вызвать инструмент за пределами объявленной поверхности. Бюджет исходящего трафика не позволяет ему отправить больше данных, чем объявлено. Потолок возможностей не позволяет ему повысить собственные разрешения или породить субагентов с более широким доступом. Всё это детерминировано, дёшево и исполняется на каждом шаге. Аварийный выключатель — это то, что остаётся, когда все они отказывают, и к нему следу

Честный компромисс в том, что контракты требуют предварительной работы. Объявить поверхность инструментов, список исходящего трафика и лимит расходов для каждого агента — это больше усилий, чем развернуть монитор во время выполнения и надеяться, что классификатор поймает проблемы. Контракты также ограничивают гибкость агента. Агент, обнаруживший законную потребность в инструменте за пределами объявленной поверхности, не может просто использовать его; контракт должен быть изменён, что требует решения человека. Это особенность, а не ошибка, но это затрата. Альтернатива — система, где каждое действие является решением на усмотрение, а каждый инцидент — очисткой.
Практическое расслоение
Работоспособная архитектура безопасности агентов использует четыре слоя, каждый дешевле и детерминированнее предыдущего.
Слой первый — статическое объявление области на этапе определения агента. Поверхность инструментов агента, назначения исходящего трафика и лимит расходов записываются в его определение. Это конфигурационный артефакт, версионируемый вместе с кодом агента. Он проверяется и утверждается до запуска агента.
Слой второй — валидация на каждом шаге против объявленной области. Перед каждым вызовом инструмента среда выполнения проверяет предлагаемое действие против контракта. Эта проверка дешева и детерминирована: проверка принадлежности множеству, сравнение назначения, подсчёт расходов. Она не требует модели. Она не вносит задержку. Она либо проходит, либо не проходит, и неудача останавливает шаг до возникновения любого побочного эффекта.
Слой третий — обнаружение аномалий во время выполнения для выявления дрейфа. Здесь инструменты на основе классификаторов оправдывают своё место. Агент может оставаться в пределах объявленной области, ведя себя так, что это указывает на дрейф его цели или на манипуляцию его входными данными. Обнаружение аномалий может отметить эти паттерны для проверки. Оно вероятностно и дорого, поэтому работает параллельно с детерминированными проверками, а не заменяет их. Оно ловит то, что контракт не может выразить.
Слой четвёртый — изоляция и откат, применяемые только когда слои с первого по третий отказывают. Аварийный выключатель останавливает запуск. Откат пытается отменить побочные эффекты. Этот слой самый дорогой и наименее надёжный, поэтому он должен быть крайней мерой. Его существование необходимо, но его применение должно быть редким.
Аргумент не в том, что изоляция во время выполнения бесполезна. А в том, что изоляция без контракта — это изоляция без определения того, что именно изолируется. Аварийный выключатель останавливает агента, но не говорит агенту, что ему было позволено делать. Контракт говорит. Контракт — это предотвращение; аварийный выключатель — это восстановление. Поставка только восстановления — это выбор платить за инциденты, а не предотвращать их.
