Root cause: generate_config_toml() used os.path.expanduser("~") which
always returns root's home under sudo. Every user's config.toml had
model_catalog_json = "/var/root/.codex/model_catalog.json" → Permission denied.
Fix: pass home_dir to generate_config_toml() so each user gets their own path.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Codex CLI — Patched
Patched OpenAI Codex CLI for use with custom API endpoints. Latest: v0.111.0 (6 config patches).
Codex CLI — это compiled Rust binary. В отличие от Claude Code и Gemini CLI (JavaScript), патчинг выполняется через
config.toml+ переменные окружения.
Установка
Требования
- Python 3.11+ (для
tomllib) - curl (для скачивания бинарника)
- Linux x86_64 или aarch64 (macOS/Windows — вручную)
Быстрая установка (Linux)
# 1. Клонировать репо (или скачать файлы)
git clone https://git.sensey24.ru/aibot777/unlimitedcoding.git
cd unlimitedcoding/codex
# 2. Настроить конфиг — указать свой API endpoint и ключ
cp codex_config.example.json codex_config.json
nano codex_config.json # Изменить base_url и api_key
# 3. Установить бинарник + применить патчи
sudo bash ucodex_install.sh
Ручная установка (шаг за шагом)
Шаг 1 — Установить бинарник Codex CLI:
# Скачать последнюю версию с GitHub
sudo bash update-codex.sh
codex --version # Должно показать: codex-cli 0.111.0
Шаг 2 — Настроить конфиг:
cp codex_config.example.json codex_config.json
Отредактировать codex_config.json:
{
"base_url": "https://your-api-endpoint.example.com",
"api_key": "YOUR_API_KEY",
"model": "gpt-5.2-codex"
}
Шаг 3 — Применить патчи:
sudo python3 codex_patcher.py --apply --config codex_config.json
Вывод:
Codex CLI Patcher
Version: 0.111.0
Binary: /usr/local/bin/codex
Proxy: https://your-api-endpoint.example.com
[OK] Target 1: base_url configured
[OK] Target 2: codex login: ok
[OK] Target 3: analytics disabled
[OK] Target 4: approval_policy=never, sandbox=danger-full-access
[OK] Target 5: model=gpt-5.2-codex, effort=high
[OK] Target 6: Set 2 env var(s) in /etc/environment
All patches applied successfully!
Шаг 4 — Проверить:
# Validate
python3 update_codex_patcher.py --validate
# Test
codex exec "What is 2+2? Reply with just the number"
Обновление
Обновить бинарник Codex CLI
cd unlimitedcoding/codex
sudo bash update-codex.sh
Скрипт автоматически:
- Проверяет последнюю версию на GitHub
- Скачивает musl-совместимый бинарник
- Заменяет
/usr/local/bin/codex
Обновить конфиг-патчи (после обновления бинарника)
sudo python3 codex_patcher.py --apply
Полный автоматический цикл
sudo python3 update_codex_patcher.py --auto
Выполняет: check → update binary → apply patches → validate → test.
Обновить сам патчер (новая версия скриптов)
cd unlimitedcoding
git pull
cd codex
sudo python3 codex_patcher.py --apply
Что патчится (6 targets)
| # | Target | Что делает |
|---|---|---|
| 1 | api_endpoint | Redirect API через [model_providers.custom] в config.toml |
| 2 | authentication | API key auth вместо ChatGPT OAuth (codex login --with-api-key) |
| 3 | telemetry | Отключить analytics: [analytics] enabled = false |
| 4 | permissions | approval_policy = "never", sandbox_mode = "danger-full-access" |
| 5 | model_config | Модель, reasoning effort, отключить auto-update |
| 6 | system_env | /etc/environment: OPENAI_BASE_URL, OPENAI_API_KEY |
Конфигурация
Файл ~/.codex/config.toml (генерируется патчером):
model = "gpt-5.2-codex"
model_reasoning_effort = "high"
model_provider = "custom"
approval_policy = "never"
sandbox_mode = "danger-full-access"
check_for_update_on_startup = false
forced_login_method = "api"
[analytics]
enabled = false
[model_providers.custom]
name = "custom"
base_url = "https://your-api-endpoint.example.com/v1"
env_key = "OPENAI_API_KEY"
wire_api = "responses"
Rollback
Восстановить оригинальный конфиг:
python3 codex_patcher.py --rollback
Troubleshooting
"Error loading configuration: missing field name"
Обновите патчер (git pull) и перезапустите: python3 codex_patcher.py --apply
codex не запускается (segfault / GLIBC)
Скрипт update-codex.sh скачивает musl-версию для совместимости. Если проблема остаётся:
# Проверить бинарник
file /usr/local/bin/codex
ldd /usr/local/bin/codex # Должно быть "not a dynamic executable" (static)
"OPENAI_API_KEY not set"
# Вариант 1: Перезайти в shell (env vars из /etc/environment)
source /etc/environment
# Вариант 2: Установить вручную
export OPENAI_BASE_URL="https://your-endpoint/v1"
export OPENAI_API_KEY="your-key"
Permissions промпты всё ещё появляются
Убедитесь что config.toml содержит approval_policy = "never":
cat ~/.codex/config.toml | grep approval
Структура файлов
codex/
├── codex_patcher.py # Главный патчер (6 targets)
├── codex_config.json # Ваш конфиг (не коммитить!)
├── codex_config.example.json # Пример конфига
├── update_codex_patcher.py # Pipeline CLI
├── update-codex.sh # Бинарный updater с GitHub
├── ucodex_install.sh # One-liner installer
└── updater/
├── __init__.py
└── config_validator.py # Валидация 6 targets