Флаг Codex CLI —remote-auth-token-env: авторизация удалённого подключения

Флаг Codex CLI --remote-auth-token-env применяется для настройки аутентификации при удалённом подключении к Codex CLI: вместо того чтобы передавать секретный токен прямо в командной строке или записывать его в конфигурационный файл, вы указываете имя переменной окружения, из которой CLI должен получить токен. Такой подход особенно полезен для удалённых серверов, CI/CD, контейнеров и автоматизированных процессов, где секреты должны храниться отдельно от команд и исходного кода.

--remote-auth-token-env указывает не сам токен, а имя переменной окружения, в которой этот токен находится. Это важное различие: в параметре передаётся, например, CODEX_REMOTE_TOKEN, а не длинная строка авторизационного значения.

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

Содержание
  1. Как использовать
  2. Базовая последовательность настройки
  3. Когда применять
  4. Локальная разработка
  5. CI/CD
  6. Контейнеры
  7. Системные службы
  8. Kubernetes
  9. Примеры использования
  10. Однократный запуск в Linux или macOS
  11. Запуск после export
  12. Проверка переменной без раскрытия секрета
  13. Запуск из shell-скрипта
  14. Передача в Docker
  15. Передача через файл окружения Docker Compose
  16. Запуск в CI с защищённой переменной
  17. Проверка имени переменной в CI
  18. Использование в systemd
  19. Использование в Kubernetes
  20. Использование собственного имени переменной
  21. Чем отличается от других способов и команд
  22. --remote-auth-token-env и передача токена напрямую
  23. --remote-auth-token-env и обычный вход пользователя
  24. --remote-auth-token-env и --api-key
  25. --remote-auth-token-env и настройки удалённого адреса
  26. Типичные ошибки
  27. Ошибка: после флага указан сам токен
  28. Ошибка: переменная названа иначе
  29. Ошибка: переменная есть в терминале, но отсутствует у службы
  30. Ошибка: секрет пустой
  31. Ошибка: используется неподдерживаемая версия CLI
  32. Безопасность и управление токенами
  33. Как безопасно диагностировать проблему
  34. Ротация токена
  35. Краткая памятка

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

Флаг применяется в команде запуска Codex CLI, которая устанавливает удалённое взаимодействие. В типичном сценарии сначала создаётся переменная окружения с токеном, затем в --remote-auth-token-env передаётся имя этой переменной. Сам секрет не попадает в историю shell-команд и не отображается в списке аргументов процесса в виде обычного значения.

Хорошая практика состоит в том, чтобы разделять имя секрета, способ его хранения и команду запуска. Команда должна знать, где искать токен, но не обязана содержать его непосредственно.

Например, в Linux или macOS переменную можно временно задать перед запуском процесса:

export CODEX_REMOTE_TOKEN="токен-для-удалённого-доступа"
codex app-server --remote-auth-token-env CODEX_REMOTE_TOKEN

В этом примере CODEX_REMOTE_TOKEN — только имя переменной. Codex CLI самостоятельно обращается к окружению процесса, читает её значение и использует его для удалённой аутентификации. Если переменная уже задана системой, достаточно указать флаг:

codex app-server --remote-auth-token-env CODEX_REMOTE_TOKEN

У разных версий Codex CLI набор команд и доступных параметров может отличаться. Поэтому перед настройкой на рабочем сервере стоит проверить локальную справку:

codex --help
codex app-server --help

| Элемент | Что указывается | Чего указывать не нужно |
|—|—|—|
| Флаг | --remote-auth-token-env | Другое имя параметра без проверки версии |
| Аргумент флага | Имя переменной, например CODEX_REMOTE_TOKEN | Сам секретный токен |
| Источник токена | Переменная окружения процесса | Произвольный файл, если это не поддерживается конкретной версией |
| Место настройки | Shell, CI/CD, контейнер или менеджер секретов | Публичный репозиторий |
| Результат | CLI получает токен из окружения | Автоматическое создание токена |

Базовая последовательность настройки

Перед первым запуском полезно разделить настройку на отдельные шаги. Это помогает понять, где именно возникла проблема: в токене, переменной окружения, синтаксисе команды или удалённом сервисе.

  1. Получите действительный токен с необходимыми правами.
  2. Сохраните его в защищённом хранилище или переменной окружения.
  3. Убедитесь, что переменная доступна именно тому пользователю и процессу, который запускает Codex CLI.
  4. Передайте имя переменной в --remote-auth-token-env.
  5. Проверьте результат подключения по журналу или диагностическому выводу.
# 1. Создание переменной только для текущей сессии
export CODEX_REMOTE_TOKEN="секретное-значение"

# 2. Проверка наличия переменной без вывода самого токена
if [ -n "$CODEX_REMOTE_TOKEN" ]; then
  echo "Переменная задана"
else
  echo "Переменная отсутствует"
fi

# 3. Запуск Codex CLI
codex app-server --remote-auth-token-env CODEX_REMOTE_TOKEN

Не следует без необходимости выполнять команду вроде echo "$CODEX_REMOTE_TOKEN". Даже если вывод не попадёт в репозиторий, он может сохраниться в истории терминала, журнале CI или системе сбора логов.

Шаг Проверяемый вопрос Признак корректной настройки
Токен Существует ли он и не истёк ли? Токен действителен и имеет нужные права
Переменная Задана ли она в текущем процессе? Проверка длины или наличия проходит успешно
Имя Совпадает ли имя в shell и в аргументе флага? Одинаковое написание без опечаток
Команда Поддерживает ли её установленная версия CLI? Флаг отображается в справке
Соединение Принимает ли удалённая сторона токен? Нет ошибки авторизации

Когда применять

Флаг особенно уместен там, где Codex CLI запускается не вручную на личном компьютере, а как часть удалённой инфраструктуры. Это могут быть сервер разработки, контейнер, агент автоматической сборки или отдельная машина, к которой подключаются несколько пользователей.

В интерактивной локальной работе иногда удобнее использовать штатный механизм входа Codex CLI. Но если процесс запускается автоматически, передача токена через переменную окружения обычно безопаснее и удобнее, чем включение секрета в команду или конфигурацию проекта.

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

| Сценарий | Насколько подходит флаг | Почему |
|—|—:|—|
| Локальный ручной запуск | Иногда | Удобен, если нужен именно удалённый режим |
| CI/CD | Да | Секрет можно передать через secret variables |
| Docker-контейнер | Да | Токен передаётся во время запуска контейнера |
| Kubernetes | Да | Можно использовать Secret и переменную окружения |
| Общий сервер | Да | Значение не приходится записывать в общий скрипт |
| Публичный пример команды | Да | В примере можно показать только имя переменной |
| Хранение токена в Git | Нет | Секрет нельзя коммитить в репозиторий |

Локальная разработка

На рабочем компьютере флаг можно использовать, если вы тестируете именно удалённую схему аутентификации или запускаете локальный процесс, к которому обращается другой компонент. Для кратковременной проверки лучше задавать переменную только на время одной shell-сессии или одной команды.

CODEX_REMOTE_TOKEN="временный-токен" 
codex app-server --remote-auth-token-env CODEX_REMOTE_TOKEN

Такой вариант не сохраняет переменную в профиле shell. Однако секрет всё равно нужно получать из безопасного источника и не вставлять в публичные скрипты.

CI/CD

В системе непрерывной интеграции токен обычно создаётся как защищённая переменная проекта. В job передаётся имя переменной, а не её содержимое. Это позволяет использовать один и тот же сценарий в разных окружениях, не меняя саму команду.

steps:
  - name: Start Codex remote service
    run: codex app-server --remote-auth-token-env CODEX_REMOTE_TOKEN
    env:
      CODEX_REMOTE_TOKEN: ${{ secrets.CODEX_REMOTE_TOKEN }}

Конкретный синтаксис зависит от CI-системы. Важны два принципа: значение должно быть замаскировано в логах, а переменная должна быть доступна процессу, запускающему CLI.

Практика в CI/CD Правильный вариант Рискованный вариант
Передача секрета Protected/secret variable Строка в YAML-файле
Вывод в лог Проверять только наличие Печатать значение токена
Область действия Только нужная job Глобально для всех задач
Ротация Периодически заменять токен Использовать бессрочный секрет
Права Минимально необходимые Максимальные права «на всякий случай»

Контейнеры

В Docker токен можно передать через переменную окружения во время запуска контейнера. Команду запуска при этом можно оставить одинаковой для разных сред, меняя только источник секрета.

docker run --rm 
  -e CODEX_REMOTE_TOKEN 
  codex-runtime:latest 
  codex app-server --remote-auth-token-env CODEX_REMOTE_TOKEN

В этом варианте Docker получает значение переменной из окружения хоста. Не стоит записывать секрет в Dockerfile: образ может попасть в реестр, кеш сборки или к другому разработчику.

Системные службы

Если Codex CLI запускается через systemd, supervisor или другой менеджер процессов, переменную нужно передать именно службе. Наличие значения в вашем интерактивном терминале не означает, что его увидит фоновый процесс.

[Service]
Environment="CODEX_REMOTE_TOKEN=значение_из_защищённого_источника"
ExecStart=/usr/local/bin/codex app-server --remote-auth-token-env CODEX_REMOTE_TOKEN
Restart=on-failure

Для production-среды предпочтительнее использовать отдельный механизм секретов, а не хранить токен в открытом unit-файле. После изменения переменной службу обычно нужно перезапустить, иначе старый процесс продолжит работать с прежним окружением.

Kubernetes

В Kubernetes токен обычно помещают в объект Secret и подключают к контейнеру как переменную окружения. В манифесте приложения остаётся только ссылка на секрет.

env:
  - name: CODEX_REMOTE_TOKEN
    valueFrom:
      secretKeyRef:
        name: codex-auth
        key: remote-token

args:
  - app-server
  - --remote-auth-token-env
  - CODEX_REMOTE_TOKEN

Доступ к Secret следует ограничить политиками Kubernetes. Сам факт использования переменной окружения не отменяет требований к правам доступа к pod, журналам и диагностическим инструментам.

Среда Где хранить значение Что передавать CLI
Локальный shell Временная переменная Имя переменной
GitHub Actions-подобная CI Repository/organization secret Имя переменной job
Docker Secret manager или окружение хоста Имя переменной контейнера
systemd Защищённый EnvironmentFile или менеджер секретов Имя переменной службы
Kubernetes Secret Имя переменной контейнера

Примеры использования

В этом разделе собраны практические варианты для разных окружений. Во всех примерах важно следить за тем, что в --remote-auth-token-env передаётся именно имя переменной, а не значение секрета.

Однократный запуск в Linux или macOS

Этот способ подходит для проверки настройки без изменения профиля пользователя. Переменная существует только во время запуска указанного процесса.

CODEX_REMOTE_TOKEN="токен" 
codex app-server --remote-auth-token-env CODEX_REMOTE_TOKEN

Запуск после export

Такой вариант удобен, когда процесс перезапускается несколько раз в течение одной рабочей сессии.

export CODEX_REMOTE_TOKEN="токен"
codex app-server --remote-auth-token-env CODEX_REMOTE_TOKEN

Проверка переменной без раскрытия секрета

Проверять нужно наличие значения, а не выводить его целиком. Например, можно проверить, что длина строки больше нуля.

if [ -z "${CODEX_REMOTE_TOKEN:-}" ]; then
  echo "Ошибка: CODEX_REMOTE_TOKEN не задан"
  exit 1
fi

codex app-server --remote-auth-token-env CODEX_REMOTE_TOKEN

Запуск из shell-скрипта

Скрипт может завершаться до запуска CLI, если секрет не передан. Это лучше, чем запускать сервис, который гарантированно завершится с ошибкой авторизации.

#!/usr/bin/env bash
set -euo pipefail

: "${CODEX_REMOTE_TOKEN:?Переменная CODEX_REMOTE_TOKEN не задана}"

exec codex app-server 
  --remote-auth-token-env CODEX_REMOTE_TOKEN

Передача в Docker

В команду Docker можно передать только имя переменной, оставив её значение на стороне хоста или менеджера секретов.

export CODEX_REMOTE_TOKEN="токен"

docker run --rm 
  --env CODEX_REMOTE_TOKEN 
  codex-runtime:latest 
  codex app-server --remote-auth-token-env CODEX_REMOTE_TOKEN

Передача через файл окружения Docker Compose

Файл окружения должен находиться под контролем доступа и не должен попадать в репозиторий. В публичном проекте обычно добавляют его в .gitignore.

# .env
CODEX_REMOTE_TOKEN=токен

# compose-команда
docker compose run --rm codex 
  codex app-server --remote-auth-token-env CODEX_REMOTE_TOKEN

Запуск в CI с защищённой переменной

CI-система должна подставить секрет в окружение job. В репозитории остаётся только имя переменной.

export CODEX_REMOTE_TOKEN="$CI_CODEX_REMOTE_TOKEN"

codex app-server 
  --remote-auth-token-env CODEX_REMOTE_TOKEN

Проверка имени переменной в CI

Иногда ошибка возникает не в Codex CLI, а из-за того, что secret настроен под другим именем. Проверка должна сообщать только факт наличия значения.

if [ -n "${CI_CODEX_REMOTE_TOKEN:-}" ]; then
  echo "CI-секрет получен"
else
  echo "CI-секрет не передан"
  exit 1
fi

export CODEX_REMOTE_TOKEN="$CI_CODEX_REMOTE_TOKEN"
codex app-server --remote-auth-token-env CODEX_REMOTE_TOKEN

Использование в systemd

Фоновая служба не наследует переменные из терминала пользователя автоматически. Поэтому значение нужно передать в конфигурации службы или подключить через отдельный защищённый файл.

[Unit]
Description=Codex remote application server
After=network-online.target

[Service]
EnvironmentFile=/etc/codex/codex.env
ExecStart=/usr/local/bin/codex app-server --remote-auth-token-env CODEX_REMOTE_TOKEN
Restart=on-failure

[Install]
WantedBy=multi-user.target

Использование в Kubernetes

В манифесте можно связать переменную контейнера с ключом Kubernetes Secret.

apiVersion: apps/v1
kind: Deployment
metadata:
  name: codex-remote
spec:
  template:
    spec:
      containers:
        - name: codex
          image: codex-runtime:latest
          env:
            - name: CODEX_REMOTE_TOKEN
              valueFrom:
                secretKeyRef:
                  name: codex-auth
                  key: remote-token
          args:
            - app-server
            - --remote-auth-token-env
            - CODEX_REMOTE_TOKEN

Использование собственного имени переменной

Имя переменной не обязано быть именно CODEX_REMOTE_TOKEN. Можно выбрать название, соответствующее внутренним правилам проекта.

export INTERNAL_REMOTE_AUTH="токен"

codex app-server 
  --remote-auth-token-env INTERNAL_REMOTE_AUTH

| Пример | Где хранится токен | Что видит команда |
|—|—|—|
| Однократный shell-запуск | Окружение текущего процесса | Имя переменной |
| Shell-скрипт | Переданное окружение | Имя переменной |
| Docker | Окружение хоста или secret store | Имя переменной контейнера |
| CI/CD | Защищённая переменная job | Имя переменной job |
| systemd | EnvironmentFile или secret manager | Имя переменной службы |
| Kubernetes | Secret | Имя переменной контейнера |
| Пользовательское имя | Любой разрешённый источник | Выбранное имя |

Чем отличается от других способов и команд

Название --remote-auth-token-env легко перепутать с параметрами, которые передают сам токен, включают удалённый режим или настраивают общий вход пользователя. На практике это разные уровни конфигурации: один параметр выбирает режим, другой — источник секрета, третий — адрес или способ подключения.

Главный вопрос при выборе параметра: вы настраиваете транспорт, аутентификацию или способ хранения секрета? У этих задач могут быть разные команды и флаги.

--remote-auth-token-env и передача токена напрямую

Флаг с суффиксом -env получает имя переменной. Гипотетическая прямая передача токена, если она поддерживается конкретной версией, работала бы иначе: в аргументе находилось бы само значение. Такой способ опаснее, потому что аргументы процесса могут быть видны через системные инструменты и попадать в историю shell.

# Предпочтительный вариант
export CODEX_REMOTE_TOKEN="токен"
codex app-server --remote-auth-token-env CODEX_REMOTE_TOKEN

# Не следует делать без крайней необходимости
codex app-server --remote-auth-token "токен"

| Критерий | Через переменную окружения | Через значение в аргументе |
|—|—|—|
| Попадание в history shell | Обычно нет, если export выполнен безопасно | Возможно |
| Видимость в списке процессов | Обычно не отображается как аргумент | Может отображаться |
| Удобство для CI | Высокое | Низкое |
| Риск случайного коммита | Ниже | Выше |
| Удобство быстрой проверки | Высокое | Формально высокое, но небезопасное |

--remote-auth-token-env и обычный вход пользователя

Интерактивная авторизация предназначена для входа конкретного пользователя через поддерживаемый механизм Codex CLI. Переменная с удалённым токеном больше подходит для процесса, которому нужно автоматически проходить удалённую проверку без ручного ввода.

# Интерактивный режим, если он предусмотрен установленной версией
codex login

# Неинтерактивная передача удалённого токена
codex app-server --remote-auth-token-env CODEX_REMOTE_TOKEN

Нельзя автоматически считать эти варианты взаимозаменяемыми. Локальная сессия пользователя может быть успешно авторизована, но не иметь отношения к токену, который нужен удалённому серверу.

--remote-auth-token-env и --api-key

Параметр вроде --api-key, если он есть в конкретной версии или связанном инструменте, обычно означает прямое указание ключа или другой формы учетных данных. --remote-auth-token-env решает другую задачу: указывает, из какой переменной взять токен для удалённой аутентификации.

# Переменная окружения для удалённого токена
codex app-server --remote-auth-token-env CODEX_REMOTE_TOKEN

# Не смешивайте назначение параметров без проверки справки
codex app-server --api-key CODEX_REMOTE_TOKEN

Последняя команда не обязана быть корректной: наличие похожего по смыслу параметра в другом CLI не означает, что он поддерживается Codex CLI.

--remote-auth-token-env и настройки удалённого адреса

Адрес удалённого сервиса, порт, протокол и токен — разные параметры. Даже правильный токен не поможет, если клиент подключается не к тому адресу или сервис не слушает нужный порт.

export CODEX_REMOTE_TOKEN="токен"

codex app-server 
  --listen ws://127.0.0.1:4500 
  --remote-auth-token-env CODEX_REMOTE_TOKEN

Названия и доступность параметров вроде --listen нужно сверять со справкой установленной версии. Не стоит переносить синтаксис из документации другой версии без проверки.

Задача Что обычно отвечает за неё Пример категории
Источник токена --remote-auth-token-env Переменная окружения
Адрес сервиса Параметр адреса или прослушивания Хост и порт
Интерактивный вход Механизм login Пользовательская сессия
Режим выполнения Команда CLI Сервер, exec или другой режим
Права токена Система, выпустившая токен Области доступа и срок действия

Типичные ошибки

Большинство проблем с этим флагом связано не со сложностью синтаксиса, а с неверным представлением о том, что именно он делает. Пользователь видит слово token и вставляет секрет после флага, хотя CLI ожидает имя переменной.

Ошибка: после флага указан сам токен

Это самая распространённая ошибка. Аргументом должен быть идентификатор переменной, а не её содержимое.

# Неправильно
codex app-server --remote-auth-token-env "длинный-секретный-токен"

# Правильно
export CODEX_REMOTE_TOKEN="длинный-секретный-токен"
codex app-server --remote-auth-token-env CODEX_REMOTE_TOKEN

Исправление простое: вынесите значение в окружение и передайте название переменной.

Ошибка: переменная названа иначе

В shell переменная может называться CODEX_REMOTE_TOKEN, а в команде случайно указано CODEX_REMOTE_AUTH_TOKEN. Для программы это два разных имени.

export CODEX_REMOTE_TOKEN="токен"

# Ошибка: такого имени нет
codex app-server --remote-auth-token-env CODEX_REMOTE_AUTH_TOKEN

# Исправленный вариант
codex app-server --remote-auth-token-env CODEX_REMOTE_TOKEN

Проверяйте имена посимвольно, включая подчёркивания, дефисы и регистр букв.

Ошибка: переменная есть в терминале, но отсутствует у службы

Переменная, заданная в интерактивном shell, не обязательно передаётся systemd, Docker daemon, Kubernetes или CI runner. Каждый процесс получает собственное окружение.

# В терминале это может работать
export CODEX_REMOTE_TOKEN="токен"
codex app-server --remote-auth-token-env CODEX_REMOTE_TOKEN

# Но служба может не увидеть переменную
systemctl restart codex-remote

Нужно настроить переменную в том же механизме, который запускает Codex CLI, а затем перезапустить процесс.

Ошибка: секрет пустой

Переменная может существовать, но содержать пустую строку. С точки зрения приложения это почти то же самое, что отсутствие токена.

if [ -z "${CODEX_REMOTE_TOKEN:-}" ]; then
  echo "Токен пустой или не задан"
  exit 1
fi

codex app-server --remote-auth-token-env CODEX_REMOTE_TOKEN

Особенно часто это происходит в CI, когда секрет не передаётся в pull request из внешнего репозитория или недоступен ветке с ограниченными правами.

Ошибка: используется неподдерживаемая версия CLI

Если команда сообщает, что параметр неизвестен, возможно, установленная версия Codex CLI не поддерживает этот флаг или он доступен у другой подкоманды.

codex --version
codex --help
codex app-server --help

Не стоит исправлять проблему случайным удалением флага. Сначала определите, в какой команде и в какой версии он доступен.

Симптом Вероятная причина Что проверить
Unknown option Старая версия или неверная подкоманда --help и версию CLI
Переменная не найдена Опечатка в имени Совпадение имени в окружении и команде
Ошибка авторизации Неверный или истёкший токен Срок действия и права токена
Локально работает, в CI нет Секрет не передан job Настройки secret variables
В контейнере не работает Переменная не проброшена docker run --env или манифест
Сервис использует старый токен Процесс не перезапущен Перезапуск службы или pod

Безопасность и управление токенами

Переменная окружения снижает риск случайной публикации секрета, но не делает его невидимым для всех. Пользователь с достаточными правами на хосте, отладчик процесса или система сбора окружения потенциально могут получить доступ к переменным.

Секрет должен быть доступен только тому процессу, которому он нужен, и только на то время, пока он действительно нужен.

Поэтому желательно соблюдать несколько правил:

  • не записывать токен в Git, Dockerfile и открытые конфигурационные файлы;
  • не выводить переменную в лог;
  • ограничивать права токена минимально необходимым набором;
  • задавать срок действия и регулярно выполнять ротацию;
  • удалять старые токены после перевыпуска;
  • ограничивать доступ к серверу, CI-проекту, Kubernetes Secret и журналам;
  • проверять, не попадает ли окружение процесса в диагностические отчёты.

| Угроза | Как возникает | Мера защиты |
|—|—|—|
| Секрет в Git | Токен записали в скрипт или YAML | Secret variables и проверка коммитов |
| Утечка через логи | Переменную напечатали для диагностики | Проверять только наличие |
| Доступ другого пользователя | Общий сервер без изоляции | Разделение пользователей и прав |
| Старый токен | Секрет не отозван после замены | Регулярная ротация |
| Утечка из образа | Токен попал в Dockerfile или слой | Передавать при запуске |
| Слишком широкие права | Токен выдан «на всё» | Принцип минимальных привилегий |

Как безопасно диагностировать проблему

Диагностика должна подтверждать наличие переменной, но не раскрывать её содержимое. Для этого можно вывести длину значения или статус проверки.

if [ -n "${CODEX_REMOTE_TOKEN:-}" ]; then
  echo "CODEX_REMOTE_TOKEN задан"
  echo "Длина значения: ${#CODEX_REMOTE_TOKEN}"
else
  echo "CODEX_REMOTE_TOKEN отсутствует"
fi

Даже длина иногда может быть чувствительной информацией, поэтому в строгих окружениях лучше выводить только сообщение «задано/не задано».

Ротация токена

При ротации сначала создают новый токен, затем обновляют секрет в окружении и перезапускают процесс. Старый токен отзывают после проверки новой конфигурации.

# Проверка, что новое значение передано процессу
test -n "${CODEX_REMOTE_TOKEN:-}" || exit 1

# Запуск с текущим секретом
codex app-server --remote-auth-token-env CODEX_REMOTE_TOKEN

# После проверки — отзыв старого токена
# выполняется в системе управления токенами

Порядок действий может быть другим, если система не позволяет одновременно держать два действительных токена. В production лучше заранее продумать короткое окно переключения.

Краткая памятка

Флаг --remote-auth-token-env нужен для того, чтобы Codex CLI получил удалённый токен из переменной окружения. Он не принимает секрет напрямую и не заменяет настройку адреса сервиса, выбор режима запуска или интерактивную авторизацию.

Запомнить можно одной фразой: после --remote-auth-token-env пишут имя переменной, а не токен.

| Вопрос | Короткий ответ |
|—|—|
| Что делает флаг? | Указывает переменную окружения с удалённым токеном |
| Что передавать после флага? | Имя переменной, например CODEX_REMOTE_TOKEN |
| Где хранить значение? | В secret manager, CI secret, Docker Secret или защищённом окружении |
| Нужно ли печатать токен для проверки? | Нет |
| Работает ли переменная из терминала для systemd? | Обычно нет, её нужно настроить отдельно |
| Что делать при ошибке неизвестного флага? | Проверить версию и справку конкретной подкоманды |
| Можно ли использовать другое имя переменной? | Да, если оно корректно задано и указано в команде |
| Заменяет ли флаг обычный login? | Нет, это другой способ передачи удалённых учетных данных |
| Нужно ли перезапускать службу после смены токена? | Да, уже запущенный процесс обычно не получит новое окружение |
| Можно ли коммитить токен в репозиторий? | Нет, никогда |

Минимальный шаблон выглядит так:

export CODEX_REMOTE_TOKEN="ваш-токен"

codex app-server 
  --remote-auth-token-env CODEX_REMOTE_TOKEN

Перед использованием в конкретном окружении проверьте справку установленной версии Codex CLI:

codex --version
codex app-server --help

Если команда запускается в CI, контейнере или системной службе, убедитесь не только в правильности синтаксиса, но и в том, что переменная действительно передаётся нужному процессу. Именно на этом этапе чаще всего скрывается причина ошибки: CLI запущен правильно, но секрет до него просто не добрался.

CIO-NAVIGATOR