Контейнеризация
Pi по умолчанию работает со всеми разрешениями, но в некоторых случаях вам может потребоваться больше контроля над тем, в какие каталоги Pi может выполняться запись и какие права доступа он имеет.
Есть два общих варианта. Вы можете либо
- запустить весь процесс
piв изолированной среде или - запустите
piна хосте и направьте выполнение инструмента в изолированную среду.
Выберите узор
| Шаблон | Что изолировано | Лучшее для | Примечания |
|---|---|---|---|
| расширение Gondolin | Встроенные инструменты и команды ! |
Локальная изоляция микро-VM при сохранении аутентификации на хосте | См. examples/extensions/gondolin/. |
| Обычный Docker | Весь процесс pi в локальном контейнере |
Простая локальная изоляция | Поставщики API key входят в контейнер. |
| OpenShell | Весь процесс pi в контролируемой политикой sandbox |
Локальное или удаленное управление sandbox | Требуется шлюз OpenShell. |
Extensions запускается везде, где выполняется процесс pi. Если вы запустите хост pi с расширением маршрутизации инструментов, другие пользовательские инструменты расширения по-прежнему будут работать на хосте, если они также не делегируют свои операции.
Gondolin
Gondolin — локальная микро-VM Linux.
Используйте example extension, если вы хотите, чтобы pi был на хосте, но все встроенные инструменты были перенаправлены на виртуальную машину.
Настраивать:
cp -R packages/coding-agent/examples/extensions/gondolin ~/.pi/agent/extensions/gondolin
cd ~/.pi/agent/extensions/gondolin
npm install --ignore-scriptsЗапустите из проекта, который вы хотите смонтировать:
cd /path/to/project
pi -e ~/.pi/agent/extensions/gondolinРасширение монтирует cwd хоста по адресу /workspace на виртуальной машине и переопределяет read, write, edit, bash, grep, find и ls.
Команды пользователя ! также перенаправляются в виртуальную машину.
Изменения файлов под /workspace записываются на хост.
Требования: Node.js >= 23.6.0 для @earendil-works/gondolin плюс QEMU (требуется установка через менеджер пакетов).
Обычный Docker
Запустите весь процесс pi в Docker, если вам нужна простейшая граница локального контейнера.
Dockerfile.pi:
FROM node:24-bookworm-slim
RUN apt-get update \
&& apt-get install -y --no-install-recommends bash ca-certificates git ripgrep \
&& rm -rf /var/lib/apt/lists/*
RUN npm install -g --ignore-scripts @earendil-works/pi-coding-agent
WORKDIR /workspace
ENTRYPOINT ["pi"]Сборка и запуск:
docker build -t pi-sandbox -f Dockerfile.pi .
docker run --rm -it \
-e ANTHROPIC_API_KEY \
-v "$PWD:/workspace" \
-v pi-agent-home:/root/.pi/agent \
pi-sandbox-v "$PWD:/workspace" монтирует ваш текущий каталог в контейнер /workspace, так что чтение и запись в /workspace внутри Docker напрямую влияет на файлы вашего хоста, как в примере Gondolin.
Используйте именованный том для /root/.pi/agent, если вам нужны локальные настройки и сеансы контейнера. При монтировании хоста ~/.pi/agent контейнеру предоставляются файлы аутентификации и сеанса хоста.
OpenShell
Используйте NVIDIA OpenShell, если вам нужен управляемый политикой sandbox с элементами управления файловой системой, процессами, сетью, учетными данными и выводами. OpenShell может запускать sandboxes через локальный шлюз, поддерживаемый Docker, Podman или средой выполнения виртуальной машины, или через удаленный шлюз Kubernetes.
Каждому sandbox требуется активный шлюз. Зарегистрируйтесь и выберите один, прежде чем создавать sandbox:
openshell gateway add <gateway-url> --name <name>
openshell gateway select <name>Запустите pi внутри OpenShell sandbox:
openshell sandbox create --name pi-sandbox --from pi -- piВ этом шаблоне весь процесс pi выполняется внутри sandbox.
Встроенные инструменты, команды ! и инструменты расширения выполняются внутри границы OpenShell.
Если шлюз удален, файлы проекта не монтируются с хоста по привязке, то есть записи в sandbox не отражаются на вашем компьютере. Клонируйте репозиторий внутри sandbox или используйте команды передачи файлов OpenShell:
openshell sandbox upload pi-sandbox ./repo /workspace
openshell sandbox download pi-sandbox /workspace/repo ./repo-outПоставщики OpenShell могут хранить необработанные модели API key за пределами sandbox.
Когда маршрутизация вывода настроена, код внутри sandbox может вызывать https://inference.local, и шлюз вводит настроенные учетные данные поставщика в восходящий поток.
Настройте Pi для использования соответствующей конечной точки, совместимой с OpenAI или Anthropic, если вы хотите, чтобы трафик модели использовал этот маршрут.