
ironcurtain memory-mcp-server/v0.2.1
Безопасная* среда выполнения для автономных ИИ-агентов. Политика на основе конституций на простом английском языке. (*https://ironcurtain.dev)
IronCurtain
Безопасная* среда выполнения для автономных ИИ-агентов, в которой политика безопасности выводится из понятной человеку конституции.
*Когда кто-то пишет «безопасный», вы должны немедленно отнестись к этому скептически. Что мы подразумеваем под безопасностью?
[!WARNING] Исследовательский прототип. IronCurtain — это ранний исследовательский проект, изучающий, как сделать ИИ-агентов достаточно безопасными, чтобы они были по-настоящему полезными. API, форматы конфигурации и архитектура могут меняться. Вклад и обратная связь приветствуются.
Демонстрация
Агента просят клонировать репозиторий и отправить изменения. И git_clone, и git_push эскалируются движком политик, но авто-одобряющий модуль одобряет их автоматически — доверенный ввод пользователя из командного режима (Ctrl-A) обеспечил ясное намерение, поэтому ручное /approve не потребовалось.
Проблема
Автономные ИИ-агенты могут управлять файлами, выполнять команды git, отправлять сообщения и взаимодействовать с API от вашего имени. Но современные фреймворки для агентов дают агенту те же привилегии, что и у пользователя, — например, полный доступ к файловой системе, учётным данным и сети. Исследователи в области безопасности называют это окружающим полномочием (ambient authority), и это означает, что одна инъекция в промпт или многошаговый дрейф могут заставить агента удалить файлы, похитить данные или отправить вредоносный код.
Обычный ответ — либо ограничить агентов узкой песочницей (снижая их полезность), либо просить пользователя одобрять каждое действие (снижая их автономность). Ни то, ни другое не является удовлетворительным.
Подход
IronCurtain идёт другим путём: выразите своё намерение в области безопасности на простом английском, а система сама разберётся с его применением.
Вы пишете конституцию — короткий документ, описывающий, что вашему агенту разрешено, а что нет. IronCurtain компилирует её в детерминированную политику безопасности с помощью конвейера на основе LLM, проверяет скомпилированные правила на сгенерированных тестовых сценариях, а затем применяет политику во время выполнения при каждом вызове инструмента. В результате получается агент, способный работать автономно в границах, которые вы определяете на естественном языке.
Ключевые идеи:
- Агент не является доверенным. IronCurtain исходит из того, что LLM может быть скомпрометирована инъекцией в промпт или дрейфом. Безопасность не зависит от того, «хорошо ли ведёт себя» модель.
- На входе английский, на выходе — применение. Вы пишете намерение («никаких разрушительных операций git без одобрения»); система компилирует его в детерминированные правила, которые применяются во время выполнения без дальнейшего участия LLM.
- Семантическая интерпозиция. Вместо предоставления агенту прямого доступа к системе все взаимодействия проходят через серверы MCP (файловая система, git и т. д.). Каждый вызов инструмента проходит через движок политик, который может разрешить, запретить или эскалировать к пользователю для одобрения.
- Эшелонированная защита. Код агента выполняется в изоляте V8 без прямого доступа к хосту. Единственный выход — через семантически осмысленные вызовы инструментов MCP, и каждый из них проверяется на соответствие политике.
Архитектура
IronCurtain поддерживает два режима сессий с разными моделями доверия:
-
Встроенный агент (режим кода) — собственный LLM-агент IronCurtain пишет фрагменты кода на TypeScript, которые выполняются в песочнице V8. IronCurtain контролирует агента, песочницу и движок политик. Каждый вызов инструмента покидает песочницу в виде структурированного запроса MCP, проходит через движок политик (разрешить / запретить / эскалировать) и только затем достигает реального сервера MCP.
-
Режим Docker-агента — внешний агент (Claude Code, Goose, Codex) работает внутри контейнера без прямого доступа к публичной сети. IronCurtain опосредует внешние эффекты: вызовы API LLM проходят через MITM-прокси с завершением TLS (список разрешённых хостов, подмена фиктивного ключа на реальный), вызовы инструментов MCP проходят через тот же движок политик, а поддерживаемые установки пакетов идут через проверяющие прокси пакетов.
Опциональный вложенный Docker даёт сессиям разработчика приватный, эфемерный
демон без раскрытия сокета Docker хоста. Реализованные профили охватывают Apple Container и Docker
Desktop на macOS, а также WSL2 с Docker Desktop на amd64. Его режимы offline, images и packages
разделяют локальное использование образов, опосредованную загрузку публичных образов и поддерживаемые сборки пакетов. Нативный Linux Engine
не допускается для вложенности; см. справочник по конфигурации для предварительных требований и ограничений.
В обоих режимах агент не является доверенным. Безопасность не зависит от того, следует ли модель инструкциям, — она обеспечивается на границе.
См. SANDBOXING.md для полной архитектуры с диаграммами, послойным анализом доверия и заметками по платформе macOS.
Быстрый старт
Предварительные требования
- Node.js 24 или 26 — чётные мажорные линии, которые тестирует IronCurtain. Обе устанавливают предсобранные бинарники
isolated-vm. Node 25 не поддерживается и не тестируется. - Docker — не обязателен, но настоятельно рекомендуется для режима Docker-агента, который обеспечивает наиболее сильную изоляцию. На macOS 26+ (Apple silicon) Apple
containerработает как альтернативный бэкенд (VM на контейнер; используется автоматически, когда его службы запущены — см.containerRuntimeвironcurtain config) - API-ключ хотя бы для одного провайдера LLM (Anthropic, Google или OpenAI)
Установка
Как глобальный инструмент CLI (для конечных пользователей):
npm install -g @provos/ironcurtain
Из исходного кода (разработка):
git clone https://github.com/provos/ironcurtain.git
cd ironcurtain
npm install
Разовая настройка
1. Установите ваш API-ключ:
export ANTHROPIC_API_KEY=sk-ant-...
Вы также можете разместить ключи в файле .env в корне проекта (загружается автоматически через dotenv) или добавить их в ~/.ironcurtain/config.json с помощью ironcurtain config. Переменные окружения имеют приоритет над значениями из файла конфигурации. Поддерживаются: ANTHROPIC_API_KEY, GOOGLE_GENERATIVE_AI_API_KEY, OPENAI_API_KEY.
2. Запустите мастер первого запуска (запустите его явно перед использованием рекомендуемого пути mux; он также запускается автоматически при первом не-mux ironcurtain start):
ironcurtain setup
Проводит вас через настройку токена GitHub, провайдера веб-поиска, выбор модели и другие параметры. Создаёт ~/.ironcurtain/config.json с вашими настройками.