Deployment Airlock - деплой из PhpStorm для ИИ-агентов
Выпустил бесплатный плагин для PhpStorm — Deployment Airlock. Он для тех, кто пишет код вместе с Claude Code, Codex или другим ИИ-агентом и проверяет результат не локально, а на реальном сервере: поправил — залил — посмотрел, при необходимости забрал изменения с сервера обратно. Когда разработка неотделима от постоянного деплоя и скачивания через штатный Deployment (SFTP/FTP) в PhpStorm, этот цикл хочется отдать агенту — но под контролем.
Агент может попросить залить файлы. Но уедет только то, что разрешили вы: на боевой сервер — после подтверждения в окне PhpStorm, до кнопки которого агент не дотянется. При этом кликать на каждую заливку не обязательно: строгость настраивается под вашу политику безопасности — от «спрашивать всегда» до «заливать без вопросов», а агента можно ограничить нужными серверами и только каталогами вашего пакета.

Зачем это нужно
Агент, которому вы дали шелл, рано или поздно захочет «сам всё выложить»: scp, rsync, ваши SSH-ключи из домашнего каталога. На стейджинге это удобно, на боевом сервере — страшно. Отдать агенту пароли от сервера тоже не вариант.
Deployment Airlock даёт агенту отдельный, контролируемый путь на сервер:
Если спрашивать о каждой заливке, через час начнёшь жать Upload не глядя — и защита превратится в формальность. Поэтому строгость настраивается, и вы сами решаете, где проходит граница:
Защита привязана к хосту, а не к имени сервера: переименовать сервер в .idea или прописать вместо домена IP агенту не поможет — незнакомый адрес снова уходит в окно IDE.
Разработка пакета для MODX: агенту — только каталоги пакета
Типичная картина: в PhpStorm открыт весь сайт, Deployment настроен на корень сайта на dev-сервере, а работаете вы над одним компонентом. Давать агенту право залить на сервер что угодно — от index.php до core/config/ — незачем.
В настройках проекта (Settings | Tools | Deployment Airlock | Project Rules, группа Agent scope) соединение остаётся тем же, но агенту разрешаются только нужные каталоги, например:
Там же можно ограничить и список серверов: например, разрешить агенту только dev, а продакшен не давать вовсе — тогда на него даже план не построится.
Оговорка: эти ограничения хранятся в проекте (.idea/deployment-airlock.xml) — чтобы ездить через VCS вместе с ним. Значит, это удобная страховка от промахов агента, а не броня: агент, которому разрешено править .idea, может их снять. Броня — защита продакшена по хосту и режимы доверия, они живут вне проекта.
А в сочетании с флажком хоста получается удобный рабочий режим: агент сам заливает правки компонента на dev, подтверждая в терминале, но за пределы пакета и на боевой сервер без вас не выходит.

Скачивание с сервера
Цикл разработки идёт в обе стороны: часть результата рождается только на сервере — классы модели, сгенерированные по схеме xPDO, файлы, созданные при установке пакета, правки, сделанные прямо на dev. Агент может забрать их в проект сам: deployment_remote_changes показывает, что на сервере отличается от проекта, а deployment_pull скачивает ровно этот список. По умолчанию скачивание выключено и включается в настройках уровня IDE. Если скачивание перезапишет незакоммиченные локальные правки, PhpStorm спросит: скачать всё, пропустить изменённые файлы или отменить. .idea, .git, CLAUDE.md, AGENTS.md и подобные файлы с сервера не скачиваются никогда — иначе сервер мог бы подсунуть агенту свои инструкции.

Всё видно в статус-баре
Иконка Airlock в статус-баре PhpStorm показывает, что происходит, ничего не открывая: синяя ракета — агент сейчас заливает файлы, зелёная — скачивает. Оранжевый цвет предупреждает, что защита сейчас слабее умолчания: включён режим доверия, выдано доверие на сессию, работает автозагрузка IDE или run-конфигурация заливает файлы перед запуском. Подсказка при наведении расписывает всё целиком, клик открывает настройки.

Чего плагин не делает
Честно о границах: Airlock контролирует свой канал, а не все возможные пути на сервер. Если агенту разрешён шелл с вашими SSH-ключами, или в PhpStorm включена автозагрузка изменённых файлов на сервер, или у MCP-сервера IDE включены инструменты, которые умеют запускать действия IDE и команды терминала, — это отдельные двери, и закрывать их нужно отдельно. Плагин предупреждает про автозагрузку и про run-конфигурации с шагом Upload, а в документации все такие каналы перечислены вместе с тем, как их выключить.
Как поставить
Ссылки
Агент может попросить залить файлы. Но уедет только то, что разрешили вы: на боевой сервер — после подтверждения в окне PhpStorm, до кнопки которого агент не дотянется. При этом кликать на каждую заливку не обязательно: строгость настраивается под вашу политику безопасности — от «спрашивать всегда» до «заливать без вопросов», а агента можно ограничить нужными серверами и только каталогами вашего пакета.

Зачем это нужно
Агент, которому вы дали шелл, рано или поздно захочет «сам всё выложить»: scp, rsync, ваши SSH-ключи из домашнего каталога. На стейджинге это удобно, на боевом сервере — страшно. Отдать агенту пароли от сервера тоже не вариант.
Deployment Airlock даёт агенту отдельный, контролируемый путь на сервер:
- файлы уезжают через конфигурацию Deployment, которая у вас уже настроена в PhpStorm, — агент не видит ни паролей, ни ключей, ни токенов;
- сначала агент строит план: какие локальные файлы по каким путям уедут. План строится без подключения к серверу, у него есть срок жизни, и он одноразовый;
- вы подтверждаете план в диалоге внутри IDE. Перед отправкой содержимое файлов сверяется ещё раз — если файлы успели измениться после построения плана, отправка отклоняется;
- каждая отправка пишется в журнал аудита.
- Вы просите агента: «залей правки сниппета на dev».
- Агент вызывает deployment_plan и получает список файлов.
- Агент вызывает deployment_execute — в PhpStorm открывается окно со списком файлов и удалённых путей (или вопрос в терминале агента, если так настроено для этого хоста, — об этом ниже).
- Вы подтверждаете — файлы уезжают штатным Deployment. Отказываетесь — ничего не происходит.
Если спрашивать о каждой заливке, через час начнёшь жать Upload не глядя — и защита превратится в формальность. Поэтому строгость настраивается, и вы сами решаете, где проходит граница:
- Продакшен — по умолчанию каждый сервер защищён: подтверждение только в окне IDE, агент его не нажмёт. Дополнительно сервер можно явно отметить защищённым в настройках проекта.
- Dev и стейджинг — в окне подтверждения один раз ставится флажок «подтверждать этот хост в терминале». Дальше заливки на этот хост подтверждаются прямо в терминале агента, одним ответом, не переключаясь в IDE.
- Серия заливок подряд — режим Allow «don't ask again this session» добавляет в окно кнопку, которая доверяет одному серверу до закрытия проекта (или пока не отзовёте доверие командой).
- Все подтверждения — в терминал — режим Never show the IDE dialog, если окна IDE вам мешают.
- Совсем без вопросов — режим Auto-approve, never ask. Даже тогда продолжают действовать план, разрешённые серверы и пути, лимит файлов, сверка содержимого и журнал аудита — убирается только сам вопрос.
Защита привязана к хосту, а не к имени сервера: переименовать сервер в .idea или прописать вместо домена IP агенту не поможет — незнакомый адрес снова уходит в окно IDE.
Разработка пакета для MODX: агенту — только каталоги пакета
Типичная картина: в PhpStorm открыт весь сайт, Deployment настроен на корень сайта на dev-сервере, а работаете вы над одним компонентом. Давать агенту право залить на сервер что угодно — от index.php до core/config/ — незачем.
В настройках проекта (Settings | Tools | Deployment Airlock | Project Rules, группа Agent scope) соединение остаётся тем же, но агенту разрешаются только нужные каталоги, например:
core/components/mypackage/assets/components/mypackage/_build/
Там же можно ограничить и список серверов: например, разрешить агенту только dev, а продакшен не давать вовсе — тогда на него даже план не построится.
Оговорка: эти ограничения хранятся в проекте (.idea/deployment-airlock.xml) — чтобы ездить через VCS вместе с ним. Значит, это удобная страховка от промахов агента, а не броня: агент, которому разрешено править .idea, может их снять. Броня — защита продакшена по хосту и режимы доверия, они живут вне проекта.
А в сочетании с флажком хоста получается удобный рабочий режим: агент сам заливает правки компонента на dev, подтверждая в терминале, но за пределы пакета и на боевой сервер без вас не выходит.

Скачивание с сервера
Цикл разработки идёт в обе стороны: часть результата рождается только на сервере — классы модели, сгенерированные по схеме xPDO, файлы, созданные при установке пакета, правки, сделанные прямо на dev. Агент может забрать их в проект сам: deployment_remote_changes показывает, что на сервере отличается от проекта, а deployment_pull скачивает ровно этот список. По умолчанию скачивание выключено и включается в настройках уровня IDE. Если скачивание перезапишет незакоммиченные локальные правки, PhpStorm спросит: скачать всё, пропустить изменённые файлы или отменить. .idea, .git, CLAUDE.md, AGENTS.md и подобные файлы с сервера не скачиваются никогда — иначе сервер мог бы подсунуть агенту свои инструкции.

Всё видно в статус-баре
Иконка Airlock в статус-баре PhpStorm показывает, что происходит, ничего не открывая: синяя ракета — агент сейчас заливает файлы, зелёная — скачивает. Оранжевый цвет предупреждает, что защита сейчас слабее умолчания: включён режим доверия, выдано доверие на сессию, работает автозагрузка IDE или run-конфигурация заливает файлы перед запуском. Подсказка при наведении расписывает всё целиком, клик открывает настройки.

Чего плагин не делает
Честно о границах: Airlock контролирует свой канал, а не все возможные пути на сервер. Если агенту разрешён шелл с вашими SSH-ключами, или в PhpStorm включена автозагрузка изменённых файлов на сервер, или у MCP-сервера IDE включены инструменты, которые умеют запускать действия IDE и команды терминала, — это отдельные двери, и закрывать их нужно отдельно. Плагин предупреждает про автозагрузку и про run-конфигурации с шагом Upload, а в документации все такие каналы перечислены вместе с тем, как их выключить.
Как поставить
- PhpStorm 2026.2 или новее: Settings | Plugins | Marketplace, поиск «Deployment Airlock».
- Включить MCP-сервер IDE: Settings | Tools | MCP Server — по умолчанию он выключен.
- Там же нажать Auto-Configure напротив Claude Code или Codex и перезапустить клиент.
- Проверить, что у сервера в Settings | Build, Execution, Deployment | Deployment есть маппинги на проект.
- Написать в CLAUDE.md или AGENTS.md проекта, что деплоить — только через Airlock. Готовый шаблон: github.com/modxkit/deployment-airlock/blob/main/AGENTS.template.md
Ссылки
- Marketplace: plugins.jetbrains.com/plugin/34261-deployment-airlock
- Документация (на английском) и трекер ошибок: github.com/modxkit/deployment-airlock
Техническая поддержка MODX
Сайт лежит, тормозит или остался без разработчика?
Переезд с MODX 2 на 3, PHP 7 на 8, скорость и безопасность. Поддержка со сроками и ответственностью, а не совет в чате.
Подробнее
Реклама
0
Комментарии: 0