Deployment Airlock - деплой из PhpStorm для ИИ-агентов

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

Агент может попросить залить файлы. Но уедет только то, что разрешили вы: на боевой сервер — после подтверждения в окне PhpStorm, до кнопки которого агент не дотянется. При этом кликать на каждую заливку не обязательно: строгость настраивается под вашу политику безопасности — от «спрашивать всегда» до «заливать без вопросов», а агента можно ограничить нужными серверами и только каталогами вашего пакета.



Зачем это нужно

Агент, которому вы дали шелл, рано или поздно захочет «сам всё выложить»: scp, rsync, ваши SSH-ключи из домашнего каталога. На стейджинге это удобно, на боевом сервере — страшно. Отдать агенту пароли от сервера тоже не вариант.

Deployment Airlock даёт агенту отдельный, контролируемый путь на сервер:

  • файлы уезжают через конфигурацию Deployment, которая у вас уже настроена в PhpStorm, — агент не видит ни паролей, ни ключей, ни токенов;
  • сначала агент строит план: какие локальные файлы по каким путям уедут. План строится без подключения к серверу, у него есть срок жизни, и он одноразовый;
  • вы подтверждаете план в диалоге внутри IDE. Перед отправкой содержимое файлов сверяется ещё раз — если файлы успели измениться после построения плана, отправка отклоняется;
  • каждая отправка пишется в журнал аудита.
Как выглядит работа

  1. Вы просите агента: «залей правки сниппета на dev».
  2. Агент вызывает deployment_plan и получает список файлов.
  3. Агент вызывает deployment_execute — в PhpStorm открывается окно со списком файлов и удалённых путей (или вопрос в терминале агента, если так настроено для этого хоста, — об этом ниже).
  4. Вы подтверждаете — файлы уезжают штатным Deployment. Отказываетесь — ничего не происходит.
Подтверждать каждый чих не придётся

Если спрашивать о каждой заливке, через час начнёшь жать Upload не глядя — и защита превратится в формальность. Поэтому строгость настраивается, и вы сами решаете, где проходит граница:

  • Продакшен — по умолчанию каждый сервер защищён: подтверждение только в окне IDE, агент его не нажмёт. Дополнительно сервер можно явно отметить защищённым в настройках проекта.
  • Dev и стейджинг — в окне подтверждения один раз ставится флажок «подтверждать этот хост в терминале». Дальше заливки на этот хост подтверждаются прямо в терминале агента, одним ответом, не переключаясь в IDE.
  • Серия заливок подряд — режим Allow «don't ask again this session» добавляет в окно кнопку, которая доверяет одному серверу до закрытия проекта (или пока не отзовёте доверие командой).
  • Все подтверждения — в терминал — режим Never show the IDE dialog, если окна IDE вам мешают.
  • Совсем без вопросов — режим Auto-approve, never ask. Даже тогда продолжают действовать план, разрешённые серверы и пути, лимит файлов, сверка содержимого и журнал аудита — убирается только сам вопрос.
Все послабления выключены по умолчанию и включаются только в настройках уровня IDE — вне проекта. Агент, который правит файлы проекта (включая .idea), сам себе их не выдаст.

Защита привязана к хосту, а не к имени сервера: переименовать сервер в .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/
Всё остальное для агента закрыто: назовёт файл вне этих каталогов — план будет отклонён с ошибкой PATH_NOT_ALLOWED и списком разрешённых путей; попросит «залить все изменения» — чужие файлы будут отброшены с предупреждением. Проверка идёт по реальному пути, так что симлинк наружу её не обходит. Те же ограничения действуют и на скачивание с сервера.

Там же можно ограничить и список серверов: например, разрешить агенту только 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, а в документации все такие каналы перечислены вместе с тем, как их выключить.

Как поставить

  1. PhpStorm 2026.2 или новее: Settings | Plugins | Marketplace, поиск «Deployment Airlock».
  2. Включить MCP-сервер IDE: Settings | Tools | MCP Server — по умолчанию он выключен.
  3. Там же нажать Auto-Configure напротив Claude Code или Codex и перезапустить клиент.
  4. Проверить, что у сервера в Settings | Build, Execution, Deployment | Deployment есть маппинги на проект.
  5. Написать в CLAUDE.md или AGENTS.md проекта, что деплоить — только через Airlock. Готовый шаблон: github.com/modxkit/deployment-airlock/blob/main/AGENTS.template.md
В Claude Code команда /mcp должна показать шесть инструментов deployment_*.

Ссылки

Плагин бесплатный. Буду рад отзывам: как он ведёт себя на ваших проектах, чего не хватает, где неудобно. Ошибки лучше сразу в GitHub Issues, вопросы — можно здесь, в комментариях.
Prihod
Prihod
41 минута назад
modx.pro
17

Комментарии: 0

Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
0