16 KiB
Развёртывание Codex Skill Для ServerManager
Этот документ описывает текущее состояние интеграции ServerManager -> Codex, автоматическое и ручное развёртывание, проверку и все известные edge cases.
Поддерживаемый deployment target для этой интеграции:
- Linux
- macOS
- Windows
Что именно разворачивается
Интеграция для Codex состоит из трёх слоёв:
- Общий локальный backend:
~/.server-connections/ssh.py~/.server-connections/encryption.py~/.server-connections/servers.json
- Codex skill package:
~/.codex/skills/server-manager/
- Безопасный wrapper для вызова backend из Codex:
~/.server-connections/codex-sshна Linux/macOS~/.server-connections/codex-ssh.cmdна Windows
В репозитории исходники skill лежат здесь:
- SKILL.md
- command-matrix.md
- project.md
- server-manager-doctor.sh
- server-manager-doctor.cmd
- codex-ssh-wrapper.sh
- codex-ssh-wrapper.cmd
Как это работает
Модель безопасности та же, что и у Claude integration:
Codex skill -> ~/.server-connections/codex-ssh -> ~/.server-connections/ssh.py -> encrypted servers.json
Ключевая идея:
- Codex видит только алиасы и безопасные результаты команд.
ssh.pyсам читает credentials из локального зашифрованного хранилища.- Codex не должен читать
servers.json,settings.jsonилиencryption.pyнапрямую.
Что уже автоматизировано
Теперь Codex integration встроена в продуктовый setup flow:
core/claude_setup.pyставитssh.py,encryption.py,~/.claude/commands/ssh.md,~/.codex/skills/server-manager/, wrapper~/.server-connections/codex-sshи блок в~/.claude/CLAUDE.md- вкладка
Setupв GUI показывает отдельные статусы для Claude skill, Codex skill и Codex wrapper build.pyпосле сборки автоматически синхронизирует Claude- и Codex-артефакты в локальный runtime
Платформенный split такой:
- Linux/macOS: используются
codex-ssh-wrapper.shиserver-manager-doctor.sh - Windows: используются
codex-ssh-wrapper.cmdиserver-manager-doctor.cmd
Ручная установка всё ещё полезна как fallback path, если нужен точечный repair или offline debugging.
Предварительные условия
Перед установкой Codex skill должны уже существовать или быть установлены через Setup:
~/.server-connections/ssh.py~/.server-connections/encryption.py~/.server-connections/servers.jsoncodexCLI
Проверка:
ls -la ~/.server-connections
codex --help
Если ~/.server-connections/ssh.py отсутствует:
- Открыть ServerManager GUI
- Перейти в
Setup - Нажать
Install Everything
Это поставит backend, Claude skill и Codex skill целиком.
Рекомендуемый путь: установка через GUI
- Открыть ServerManager
- Перейти в
Setup - Нажать
Install Everything - Проверить, что зелёные статусы появились у:
ssh.pyEncryption moduleClaude /ssh skillCodex skillCodex wrapperSSH key
Для точечного ремонта можно использовать отдельные кнопки Claude skill и Codex skill в той же вкладке.
Ручная установка Codex Skill
1. Скопировать skill package в глобальный Codex home
mkdir -p ~/.codex/skills
cp -R .codex/skills/server-manager ~/.codex/skills/server-manager
2. Установить wrapper в shared runtime directory
Linux/macOS:
install -m 755 .codex/skills/server-manager/scripts/codex-ssh-wrapper.sh ~/.server-connections/codex-ssh
Windows:
copy .codex\skills\server-manager\scripts\codex-ssh-wrapper.cmd %USERPROFILE%\.server-connections\codex-ssh.cmd
3. Проверить doctor script
Linux/macOS:
~/.codex/skills/server-manager/scripts/server-manager-doctor.sh
Windows:
%USERPROFILE%\.codex\skills\server-manager\scripts\server-manager-doctor.cmd
Ожидается:
ssh.pyнайденencryption.pyнайденcodex-sshexecutable
4. Проверить wrapper без раскрытия credentials
Linux/macOS:
~/.server-connections/codex-ssh --list
Windows:
%USERPROFILE%\.server-connections\codex-ssh.cmd --list
Это безопасная базовая проверка. Она должна вывести список алиасов и типов серверов.
5. Перезапустить Codex
Если у вас уже была открыта интерактивная Codex session, её нужно перезапустить. Новый skill обычно подхватывается новым процессом Codex, а не уже живой сессией.
Как проверить, что Codex реально видит skill
Самый надёжный способ:
codex exec --skip-git-repo-check -s read-only -C /tmp \
"A user asks: Using the locally installed ServerManager integration, what is the safest first command to enumerate configured servers? Reply with only the command."
Если skill подхватился корректно, Codex должен сам прочитать ~/.codex/skills/server-manager/SKILL.md и ответить:
$HOME/.server-connections/codex-ssh --list
Что Codex должен делать через skill
Правильный workflow для любой server operation:
- Сначала
--list - Прочитать колонку
Type - Выбрать команду строго по типу сервера
- Выполнить ровно одно подключение/одно действие
- Вернуть результат без IP/логинов/паролей/портов
Безопасные discovery-команды:
$HOME/.server-connections/codex-ssh --list
$HOME/.server-connections/codex-ssh --info ALIAS
$HOME/.server-connections/codex-ssh --status
Источники истины по интеграции
Если меняется поведение интеграции, проверять нужно в таком порядке:
Если меняется семантика ssh.py, нужно обновлять и Claude skill, и Codex skill.
Edge Cases
1. python alias отсутствует
В этой среде python отсутствует, но ssh.py имеет shebang #!/usr/bin/env python3 и executable bit.
Поэтому wrapper вызывает ssh.py напрямую:
~/.server-connections/codex-ssh --list
Это намеренно лучше, чем завязка на python ~/.server-connections/ssh.py.
2. ssh.py --help не поддерживается
ssh.py не имеет полноценного --help. Попытка вызвать --help возвращает список доступных alias'ов, а не usage.
Поэтому для безопасной проверки используются:
--list--info ALIAS--status
3. Skill установлен в repo, но не установлен глобально
Наличие .codex/skills/server-manager/ внутри репозитория полезно как source of truth, но новый Codex процесс по умолчанию ищет глобальные skills в ~/.codex/skills.
Если skill есть только в repo:
- документация в проекте будет на месте
- глобальный Codex может его не увидеть
Для надёжности нужен именно глобальный install в ~/.codex/skills/server-manager.
4. Wrapper отсутствует, а skill уже установлен
В этом случае Codex прочитает skill, но не сможет выполнить рекомендуемую команду $HOME/.server-connections/codex-ssh ....
Проверка:
~/.codex/skills/server-manager/scripts/server-manager-doctor.sh
Исправление:
install -m 755 .codex/skills/server-manager/scripts/codex-ssh-wrapper.sh ~/.server-connections/codex-ssh
5. Backend отсутствует
Если нет ~/.server-connections/ssh.py или encryption.py, skill бесполезен: он знает workflow, но не имеет локального transport layer.
Исправление:
- Запустить ServerManager
Setup -> Install Everything
6. Интерактивный Codex уже был запущен до установки skill
Новая интерактивная сессия обычно увидит skill, старая может не увидеть.
Исправление:
- закрыть старую Codex session
- запустить новый процесс
codex
7. codex exec не может проверить skill из-за sandbox/network policy
Во время non-interactive проверки Codex может упереться не в skill, а в сетевую политику среды:
- websocket backend заблокирован
- sandbox запрещает соединение
Симптом:
failed to connect to websocket ... Operation not permitted
Это не означает, что skill неверный. Это означает, что проверка упёрлась в runtime policy Codex backend.
8. Повторная установка поверх существующего skill
GUI installer и install_codex_skill() синхронизируют дерево skill поверх существующей директории без полного удаления. Это безопасно для обычных обновлений.
Но при ручном cp -R возможен stale state, если какие-то файлы были удалены из repo, а старая глобальная копия осталась.
Полная ручная пересинхронизация нужна только если вы осознанно хотите очистить старые файлы:
- удалить старую копию осознанно
- снова скопировать skill целиком
Пример:
rm -rf ~/.codex/skills/server-manager
cp -R .codex/skills/server-manager ~/.codex/skills/server-manager
Делать это только если вы уверены, что хотите полностью пересобрать глобальную копию.
9. Изменился tools/ssh.py, но глобальная установка осталась старой
Это самый вероятный operational drift.
Что может устареть:
~/.server-connections/ssh.py~/.codex/skills/server-manager/*~/.server-connections/codex-ssh
После изменения tools/ssh.py или skill docs нужно заново синхронизировать:
cp tools/ssh.py ~/.server-connections/ssh.py
cp core/encryption.py ~/.server-connections/encryption.py
rm -rf ~/.codex/skills/server-manager
cp -R .codex/skills/server-manager ~/.codex/skills/server-manager
install -m 755 .codex/skills/server-manager/scripts/codex-ssh-wrapper.sh ~/.server-connections/codex-ssh
10. Windows / macOS / Linux split
Сейчас runtime path intentionally разделён по платформам:
- Linux/macOS: shell wrapper
codex-ssh-wrapper.sh - Windows: native wrapper
codex-ssh-wrapper.cmd
Installer на Windows кладёт wrapper как:
~/.server-connections/codex-ssh.cmd
Installer на Linux/macOS кладёт wrapper как:
~/.server-connections/codex-ssh
Что это закрывает:
- Linux/macOS path без platform-specific разветвления в skill
- запуск через
cmd.exe - запуск из PowerShell
- отсутствие bash-зависимости для стандартного Windows deployment path
Ограничение остаётся одно: в текущей среде я прогнал end-to-end smoke только на Linux. macOS и Windows path подготовлены в installer/docs, но не smoke-tested здесь из-за отсутствия соответствующих runner'ов.
11. ssh.py intentionally не должен читать secrets в контекст AI
Это не баг. Даже если кажется проще открыть servers.json, делать этого нельзя.
Skill намеренно запрещает:
cat ~/.server-connections/servers.jsoncat ~/.server-connections/settings.jsonpython -c "...read servers.json..."--list-full
12. fail2ban / anti-bruteforce edge case
Повторные неудачные подключения опасны. Поэтому skill зафиксирован как:
- максимум 1 попытка на действие
- при timeout/ошибке остановиться и сообщить пользователю
Это обязательное правило, а не рекомендация.
Рекомендуемый Update Workflow
После любых изменений, затрагивающих Codex integration:
- Обновить исходники в repo:
tools/ssh.py.codex/skills/server-manager/*- этот документ
- Синхронизировать глобальную установку
- Прогнать doctor
- Прогнать
~/.server-connections/codex-ssh --list - Прогнать свежий
codex execsmoke test
Минимальный Smoke Test
~/.codex/skills/server-manager/scripts/server-manager-doctor.sh
~/.server-connections/codex-ssh --list
codex exec --skip-git-repo-check -s read-only -C /tmp \
"A user asks: Using the locally installed ServerManager integration, what is the safest first command to enumerate configured servers? Reply with only the command."
Что ещё желательно автоматизировать позже
Чтобы интеграция стала production-complete, в проект ещё полезно добавить:
- отдельный smoke test script внутри репозитория для проверки именно Codex integration
- e2e smoke test на Windows runner
- e2e smoke test на macOS runner
- optional PowerShell-native wrapper, если понадобится richer Windows logging