
Песочница для автономных ИИ-агентов с декларативными политиками YAML, обеспечивающими ограничения файловой системы, сети и процессов, а также привязку учётных данных к конечным точкам.
OpenShell — это безопасная и приватная среда выполнения для автономных ИИ-агентов. Она предоставляет изолированные среды выполнения, которые защищают ваши данные, учётные данные и инфраструктуру — под управлением декларативных политик YAML, предотвращающих несанкционированный доступ к файлам, утечку данных и неконтролируемую сетевую активность.
OpenShell создан с приоритетом на агентов. Он поставляется с публичными навыками агентов для использования и управления OpenShell, а также с отдельными рабочими процессами, учитывающими особенности репозитория, для участников и сопровождающих.
Бинарный файл (рекомендуется):```bash curl -LsSf https://raw.githubusercontent.com/NVIDIA/OpenShell/main/install.sh | sh
Установщик по умолчанию устанавливает последний стабильный релиз. Чтобы установить конкретную версию, задайте `OPENSHELL_VERSION`. Также доступен [релиз `dev`](https://github.com/NVIDIA/OpenShell/releases/tag/dev), который отслеживает последний коммит в ветке `main`.
Пакет `openshell` на PyPI предоставляет только Python SDK. Он не устанавливает CLI `openshell`. Добавьте SDK в проект Python с помощью [uv](https://docs.astral.sh/uv/):```bash
uv add openshell
Helm-чарт:
Экспериментально — путь развёртывания в Kubernetes находится в активной разработке. Ожидайте шероховатостей и ломающих изменений.
Разверните шлюз OpenShell в кластере Kubernetes из OCI-чарта, опубликованного в GHCR:```bash helm install openshell oci://ghcr.io/nvidia/openshell/helm-chart
См. [`deploy/helm/openshell/README.md`](https://github.com/nvidia/openshell/blob/main/deploy/helm/openshell/README.md) для доступных версий, соглашений о dev-тегах и конфигурации.
Для развёртывания OpenShell на OpenShift см. [`deploy/helm/openshell/README.md#install-on-openshift`](https://github.com/nvidia/openshell/blob/main/deploy/helm/openshell/README.md#install-on-openshift).
### Создание песочницы```bash
openshell sandbox create -- claude # or opencode, codex, copilot
Контейнер песочницы по умолчанию включает следующие инструменты:
Подробнее см. https://github.com/NVIDIA/OpenShell-Community/tree/main/sandboxes/base.
Каждая песочница запускается с минимальным исходящим доступом. Дополнительный доступ открывается с помощью короткой политики YAML, которую прокси применяет на уровне HTTP-метода и пути, без перезапуска чего-либо.```bash
openshell sandbox create
sandbox$ curl -sS https://api.github.com/zen curl: (56) Received HTTP code 403 from proxy after CONNECT
sandbox$ exit openshell policy set demo --policy examples/sandbox-policy-quickstart/policy.yaml --wait
openshell sandbox connect demo sandbox$ curl -sS https://api.github.com/zen Anything added dilutes everything else.
sandbox$ curl -sS -X POST https://api.github.com/repos/octocat/hello-world/issues -d '{"title":"oops"}' {"error":"policy_denied","detail":"POST /repos/octocat/hello-world/issues not permitted by policy"}
См. [полное руководство](https://github.com/nvidia/openshell/blob/main/examples/sandbox-policy-quickstart) или запустите автоматическую демонстрацию:```bash
bash examples/sandbox-policy-quickstart/demo.sh
OpenShell изолирует каждую песочницу в собственном контейнере с маршрутизацией исходящего трафика, управляемой политиками. Легковесный шлюз координирует жизненный цикл песочниц, и каждое исходящее соединение перехватывается движком политик, который выполняет одно из трёх действий:
OpenShell запускает плоскость управления шлюза, которая управляет жизненным циклом песочниц через настроенный драйвер вычислений. Поддерживаемые вычислительные платформы включают Docker, Podman, MicroVM и Kubernetes.
OpenShell применяет эшелонированную защиту в четырёх доменах политик:
Политики представляют собой декларативные YAML-файлы. Статические разделы (файловая система, процессы) блокируются при создании; сетевые политики и привязки провайдеров можно обновлять на работающей песочнице.
Агентам нужны учётные данные — API-ключи, токены, сервисные аккаунты. OpenShell управляет ими как провайдерами: именованными наборами учётных данных, которые внедряются в песочницы при создании. CLI автоматически обнаруживает учётные данные для распознанных агентов (Claude, Codex, OpenCode, Copilot) из вашего окружения оболочки, или вы можете создавать провайдеры явно с помощью openshell provider create. Учётные данные никогда не попадают в файловую систему песочницы; они внедряются как переменные окружения во время выполнения.
Доступ к инференсу использует тот же рабочий процесс провайдеров. Прикрепите провайдер с поддержкой инференса к песочнице, вызовите нативный эндпоинт провайдера и выберите модель в клиенте. Профили провайдеров предоставляют политику эндпоинтов и привязывают заполнители учётных данных к авторизованному назначению.
Экспериментально — Проброс GPU работает на поддерживаемых хостах, но находится в активной разработке. Ожидайте шероховатостей и ломающих изменений.
OpenShell может передавать GPU хоста в песочницы для локального инференса, тонкой настройки или любой рабочей нагрузки на GPU. Добавьте --gpu при создании песочницы:```bash
openshell sandbox create --gpu --from [gpu-enabled-sandbox] -- claude
Песочницы GPU на базе Docker автоматически выбирают CDI, когда он доступен, и в противном случае переключаются на путь запроса NVIDIA GPU в Docker (`--gpus all`).
**Требования:** на хосте должны быть установлены драйверы NVIDIA и [NVIDIA Container Toolkit](https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/latest/install-guide.html). Сам образ песочницы должен включать соответствующие драйверы и библиотеки GPU для вашей рабочей нагрузки — образ `base` по умолчанию их не содержит. См. [пример BYOC](https://github.com/NVIDIA/OpenShell/tree/main/examples/bring-your-own-container) для сборки пользовательского образа песочницы с поддержкой GPU.
## Поддерживаемые агенты
| Агент | Источник | Примечания |
| ------------------------------------------------------------- | -------------------------------------------------------------------------------- | ----------------------------------------------------------------------------- |
| [Claude Code](https://docs.anthropic.com/en/docs/claude-code) | [`base`](https://github.com/NVIDIA/OpenShell-Community/tree/main/sandboxes/base) | Работает из коробки. Провайдер использует `ANTHROPIC_API_KEY`. |
| [OpenCode](https://opencode.ai/) | [`base`](https://github.com/NVIDIA/OpenShell-Community/tree/main/sandboxes/base) | Работает из коробки. Провайдер использует `OPENAI_API_KEY` или `OPENROUTER_API_KEY`. |
| [Codex](https://developers.openai.com/codex) | [`base`](https://github.com/NVIDIA/OpenShell-Community/tree/main/sandboxes/base) | Работает из коробки. Провайдер использует `OPENAI_API_KEY`. |
| [GitHub Copilot CLI](https://docs.github.com/en/copilot/github-copilot-in-the-cli) | [`base`](https://github.com/NVIDIA/OpenShell-Community/tree/main/sandboxes/base) | Работает из коробки. Провайдер использует `GITHUB_TOKEN` или `COPILOT_GITHUB_TOKEN`. |
| [OpenClaw](https://openclaw.ai/) | [NemoClaw](https://github.com/NVIDIA/NemoClaw) | Запускайте OpenClaw более безопасно внутри NVIDIA OpenShell с помощью blueprint NemoClaw. |
| [Hermes Agent](https://github.com/NousResearch/hermes-agent) | [NemoClaw](https://github.com/NVIDIA/NemoClaw) | Запускайте Hermes Agent более безопасно внутри NVIDIA OpenShell с помощью blueprint NemoClaw. |
| [Ollama](https://ollama.com/) | [Community](https://github.com/NVIDIA/OpenShell-Community) | Запуск с помощью `openshell sandbox create --from ollama`. |
| [Pi](https://pi.dev/) | [Community](https://github.com/NVIDIA/OpenShell-Community) | Запуск с помощью `openshell sandbox create --from pi`. |
## Ключевые команды
| Команда | Описание |
| ---------------------------------------------------------- | ----------------------------------------------- |
| `openshell sandbox create -- <agent>` | Создать песочницу и запустить агента. |
| `openshell sandbox connect [name]` | Подключиться по SSH к работающей песочнице. |
| `openshell sandbox list` | Показать список всех песочниц. |
| `openshell provider create --type [type] --from-existing` | Создать провайдер учётных данных из переменных окружения. |
| `openshell sandbox provider attach <sandbox> <provider>` | Прикрепить провайдер к работающей песочнице. |
| `openshell policy set <name> --policy file.yaml` | Применить или обновить политику на работающей песочнице. |
| `openshell policy get <name>` | Показать активную политику. |
| `openshell logs [name] --tail` | Потоковая передача логов песочницы. |
| `openshell term` | Запустить терминальный UI в реальном времени для отладки. |
См. [полную документацию](https://docs.nvidia.com/openshell/latest) для руководств по командам, обучающих материалов и справочной информации.
## Терминальный UI
OpenShell включает терминальную панель в реальном времени для мониторинга шлюзов, песочниц и провайдеров — вдохновлённую [k9s](https://k9scli.io/).```bash
openshell term
TUI предоставляет живое представление вашего шлюза и песочниц с управлением с клавиатуры. Используйте Tab для переключения панелей, j/k для перемещения по спискам, Enter для выбора и : для режима команд. Состояние шлюза и статус песочниц автоматически обновляются каждые две секунды.
Используйте --from для создания песочниц из каталога OpenShell Community или образа контейнера:```bash
openshell sandbox create --from gemini # community catalog
docker build -t my-sandbox:latest ./my-sandbox-dir # Docker gateway
openshell sandbox create --from my-sandbox:latest # Docker built image
podman build -t localhost/my-sandbox:latest ./my-sandbox-dir # Podman gateway
openshell sandbox create --from localhost/my-sandbox:latest # Podman built image
openshell sandbox create --from registry.io/img:v1 # container image
Соберите с помощью контейнерного движка, используемого вашим локальным шлюзом. Для удалённого
шлюза отправьте образ в реестр, из которого шлюз может его загрузить.
Подробности см. в каталоге [OpenShell Community](https://github.com/NVIDIA/OpenShell-Community) и [примере BYOC](https://github.com/NVIDIA/OpenShell/tree/main/examples/bring-your-own-container).
## Использование OpenShell с вашим агентом
OpenShell предоставляет четыре портативных навыка для пользователей и операторов: рабочие процессы CLI (`openshell-cli`), устранение неполадок шлюза (`debug-openshell-cluster`), устранение неполадок вывода (`debug-inference`) и генерация политик (`generate-sandbox-policy`). Установите их с помощью Agent Skills CLI:```bash
npx skills add NVIDIA/OpenShell
Эти публичные, устанавливаемые навыки находятся в skills/ и используют справку установленного CLI и опубликованную документацию в качестве источников истины. Они не требуют наличия исходного кода OpenShell.
OpenShell разрабатывается с использованием тех же управляемых агентами рабочих процессов, которые он обеспечивает. Навыки для контрибьюторов и мейнтейнеров находятся отдельно в .agents/skills/; они автоматизируют работу над репозиторием OpenShell и не включаются, когда пользователи устанавливают публичные навыки:
create-spike; человек принимает её с помощью state:accepted или размещения в дорожной карте, либо отклоняет её. Принятая работа может оставаться за человеком или перейти в опциональный, контролируемый человеком рабочий процесс планирования и реализации agent:*.triage-issue. Агенты устанавливают техническую обоснованность и влияние; люди решают, должен ли проект действовать и где работа находится в дорожной карте.review-security-issue создаёт оценку серьёзности и план устранения. fix-security-issue реализует его.sync-agent-infra, update-docs-from-commits и другие внутренние рабочие процессы поддерживают согласованность кода, документации и инфраструктуры агентов.Реализация агентом управляется человеком: пользователь может запросить фазу напрямую, или мейнтейнеры могут использовать опциональный рабочий процесс agent:* для постановки в очередь и утверждения планирования и реализации. См. AGENTS.md для полной документации по цепочке рабочих процессов.
npx skills add NVIDIA/OpenShellrfcOpenShell создаётся с приоритетом агентов. Issues должны включать пользовательскую историю, постановку проблемы, влияние и критерии приёмки. Влияние должно объяснять последствия текущего поведения и почему существующие обходные пути недостаточны. Запросы на функции также требуют предложенного проекта на уровне рабочего процесса и альтернатив; отчёты об ошибках добавляют шаги воспроизведения, сведения об окружении и соответствующие логи. Как только работа авторизована через рабочий процесс проекта или прямой запрос, контрибьюторы должны использовать навыки в .agents/skills/ для изучения текущего кода и поведения, реализации изменения и его проверки. Если issue содержит более раннюю диагностику, проверьте её, а не полагайтесь на неё. См. CONTRIBUTING.md для полной таблицы навыков агентов, рабочего процесса внесения вклада и настройки разработки.
OpenShell собирает анонимную телеметрию, чтобы помочь улучшить проект для разработчиков. Эти данные не используются для отслеживания поведения отдельных пользователей. Они помогают нам понимать совокупное использование рабочих процессов песочниц, провайдеров и политик, чтобы мы могли расставлять приоритеты улучшений продукта и делиться тенденциями использования с сообществом.
Отключите телеметрию во время выполнения, установив OPENSHELL_TELEMETRY_ENABLED=false в развёртывании шлюза. Для установок через Helm установите server.telemetryEnabled=false. OpenShell распространяет эту настройку развёртывания в окружения супервизора песочницы, так что сбор телеметрии на стороне песочницы также отключается.
Вы также можете полностью исключить телеметрию при компиляции. Поддержка телеметрии — это включённая по умолчанию функция Cargo telemetry, и каждый крейт, который её несёт, также определяет псевдоним defaults-without-telemetry, охватывающий все остальные функции по умолчанию. Собирайте артефакты без телеметрии с помощью --no-default-features --features defaults-without-telemetry:```shell
cargo build --release -p openshell-gateway --no-default-features --features defaults-without-telemetry
cargo build --release -p openshell-sandbox --no-default-features --features defaults-without-telemetry
cargo build --release -p openshell-driver-vm --no-default-features --features defaults-without-telemetry
Полученные бинарные файлы не содержат ни конечной точки телеметрии, ни HTTP-клиента телеметрии, ни кода отправки данных. Когда телеметрия исключена из сборки, шлюз ничего не отправляет и сообщает песочницам, которые он запускает, что телеметрия отключена. В Cargo нет способа вычесть одну отдельную функцию по умолчанию, поэтому `defaults-without-telemetry` необходимо использовать вместе с `--no-default-features`; если передать её отдельно, набор функций по умолчанию останется на месте, и сборка завершится ошибкой, а не создаст бинарный файл, который всё ещё отправляет данные.
Шлюз также предоставляет отдельные функции Cargo для своих встроенных вычислительных драйверов: `compute-driver-kubernetes`, `compute-driver-docker`, `compute-driver-podman`, `compute-driver-vm` и `compute-driver-mxc`. Отключите набор функций по умолчанию, затем включите только те драйверы и режим телеметрии, которые требуются целевому бинарному файлу. Например:```shell
# Docker only, with telemetry support.
cargo build --release -p openshell-gateway --no-default-features --features telemetry,compute-driver-docker
# Docker and VM only, with telemetry compiled out.
cargo build --release -p openshell-gateway --no-default-features --features compute-driver-docker,compute-driver-vm
# Windows MXC only, with telemetry support and bundled Z3.
cargo build --release -p openshell-gateway --no-default-features --features telemetry,compute-driver-mxc,bundled-z3
Обычные сборки сохраняют свой набор драйверов платформы через функцию совместимости по умолчанию in-tree-compute-drivers. В Windows compute-driver-mxc выбирает MXC; остальные четыре функции устанавливают заглушки для неподдерживаемых драйверов. На других платформах MXC исключается.
События телеметрии ограничены анонимными операционными категориями и счётчиками, такими как результаты жизненного цикла песочницы, корзины профилей провайдеров, количество решений политики и агрегированные категории отказов сетевой активности. Телеметрия OpenShell не собирает имена или идентификаторы песочниц, имена хостов, пути к файлам, пути к бинарным файлам, промпты, учётные данные, имена провайдеров, имена моделей или пользовательский контент.
Отказ применяется только к телеметрии, отправляемой OpenShell. Сторонние сервисы, провайдеры моделей, конечные точки инференса, агенты или инструменты, которые вы настраиваете и используете с OpenShell, могут иметь собственные условия и практики конфиденциальности.
Мы публикуем агрегированные тенденции использования на основе этой телеметрии каждые две недели. См. отчёты сообщества по телеметрии для последней сводки.
Это программное обеспечение автоматически извлекает, получает доступ или взаимодействует с внешними материалами. Эти извлечённые материалы не распространяются вместе с этим программным обеспечением и регулируются исключительно отдельными условиями и лицензиями. Вы несёте исключительную ответственность за поиск, ознакомление и соблюдение всех применимых условий и лицензий, а также за проверку безопасности, целостности и пригодности любых извлечённых материалов для вашего конкретного случая использования. Это программное обеспечение предоставляется «КАК ЕСТЬ», без каких-либо гарантий. Автор не даёт никаких заверений или гарантий в отношении любых извлечённых материалов и не несёт ответственности за любые убытки, ущерб, обязательства или юридические последствия, возникшие в результате использования или невозможности использования этого программного обеспечения или любых извлечённых материалов. Используйте это программное обеспечение и извлечённые материалы на свой страх и риск.
Этот проект лицензирован под Apache License 2.0.
| Категория | Инструменты |
|---|
| Агент | claude, opencode, codex, copilot |
| Язык | python (3.14), node (22) |
| Разработка | gh, git, vim, nano |
| Сеть | ping, dig, nslookup, nc, traceroute, netstat |
| Компонент |
|---|
| Роль |
|---|
| Шлюз | API плоскости управления, координирующий жизненный цикл песочниц и выступающий границей аутентификации. |
| Песочница | Изолированная среда выполнения с супервизией контейнеров и маршрутизацией исходящего трафика, управляемой политиками. |
| Движок политик | Обеспечивает соблюдение ограничений файловой системы, сети и процессов от уровня приложения до ядра. |
| Доступ к провайдерам | Определяемые профилем эндпоинты, политика для бинарных файлов и привязка учётных данных к эндпоинтам для API моделей и других сервисов. |
| Уровень | Что защищает | Когда применяется |
|---|
| Файловая система | Предотвращает чтение/запись за пределами разрешённых путей. | Блокируется при создании песочницы. |
| Сеть | Блокирует несанкционированные исходящие соединения. | Горячая перезагрузка во время выполнения. |
| Процессы | Блокирует повышение привилегий и опасные системные вызовы. | Блокируется при создании песочницы. |
| Провайдеры | Предоставляет учётные данные, привязанные к эндпоинтам, и сетевой доступ. | Горячая перезагрузка во время выполнения. |