User hit two bugs in production:
1. uclaude_install.sh ERROR: Command failed at line 82 — gitea returned
transient HTTP 502 to `git fetch`, `2>/dev/null` masked stderr but
ERR trap fired with cryptic message.
2. After install, claude model picker showed only 5 models (built-in
defaults) instead of 19. Root cause: load_config() fell back to the
PUBLIC sanitized patcher.config.json (api_key='YOUR_API_KEY') after
remote fetch failed → claude API auth broken → custom models invisible.
Fixes:
claude/uclaude_install.sh:
- New retry_git() helper: 3 attempts, 5s backoff, loud diagnostic
- Existing-clone branch: retry_git wraps `git fetch` AND `git reset`
- Fallback: if fetch fails 3x on existing clone, nuke and re-clone fresh
(incremental fetch breaks more often than full clone on flaky gitea)
- Secondary fetch (before updater): tolerates failure with `|| true`
(we already have a working clone)
claude/uclaude_updater.py:
- _config_is_usable() guard: rejects {"api_key": "YOUR_API_KEY"} etc.
- load_config() retries remote 3x with backoff before falling back
- Removed local-file fallback (was loading public sanitized = bait)
- Cache-only fallback now (from previous successful fetch)
Public configs synced from canonical (api_key sanitized, models list
fully refreshed):
- claude/patcher.config.json: 17 → 19 models (+gpt-5.5, +gemini-3.1-pro etc)
- codex/codex_config.json: 4 → 5 models (+gpt-5.5)
- gemini/gemini_config.json: refreshed
- target_version: 2.1.112 → 2.1.119
Tests: tests/test_installer_robustness.py — 6 new GREEN guards.
Total: 196 → 207 GREEN.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Codex CLI — Patched
Patched OpenAI Codex CLI for use with custom API endpoints. Latest: v0.122.0 (6 config patches).
Codex CLI — это compiled Rust binary. В отличие от Claude Code и Gemini CLI (JavaScript), патчинг выполняется через
config.toml+ переменные окружения.
Установка
Требования
- Python 3.11+ (для
tomllib) — на Windows опционально (есть PowerShell-fallback) - curl (Linux/macOS) или PowerShell 5+ (Windows 10+ — встроенный)
- Поддерживаемые платформы: Linux x86_64/aarch64, macOS x86_64/arm64, Windows x86_64
Установка одной командой
Linux (Debian/Ubuntu/RHEL/Fedora):
curl -fsSL -H "Authorization: token cadffcb0a6a3be728ac1ff619bb40c86588f6837" \
https://git.sensey24.ru/aibot777/unlimitedcoding/raw/branch/master/codex/ucodex_install.sh \
-o /tmp/ucodex_install.sh && sudo bash /tmp/ucodex_install.sh
macOS (Intel & Apple Silicon):
curl -fsSL -H "Authorization: token cadffcb0a6a3be728ac1ff619bb40c86588f6837" \
https://git.sensey24.ru/aibot777/unlimitedcoding/raw/branch/master/codex/ucodex_install.sh \
-o /tmp/ucodex_install.sh && sudo bash /tmp/ucodex_install.sh
Бинарь устанавливается в
/usr/local/bin/.codex-bin, wrapper — в/usr/local/bin/codex. Env vars (OPENAI_API_KEY,OPENAI_BASE_URL) пробрасываются черезlaunchctl setenvи~/.zshrc/~/.bashrc(на Linux —/etc/environment+/etc/profile.d/codex-env.sh).
Windows (PowerShell as Administrator):
$h=@{Authorization="token cadffcb0a6a3be728ac1ff619bb40c86588f6837"}
Set-ExecutionPolicy Bypass -Scope Process -Force
iwr "https://git.sensey24.ru/aibot777/unlimitedcoding/raw/branch/master/codex/ucodex_install.ps1" -OutFile "$env:TEMP\ucodex_install.ps1" -Headers $h
. "$env:TEMP\ucodex_install.ps1"
Windows (CMD as Administrator):
powershell -NoProfile -ExecutionPolicy Bypass -Command "$h=@{Authorization='token cadffcb0a6a3be728ac1ff619bb40c86588f6837'}; iwr 'https://git.sensey24.ru/aibot777/unlimitedcoding/raw/branch/master/codex/ucodex_install.ps1' -OutFile \"$env:TEMP\ucodex_install.ps1\" -Headers $h; & \"$env:TEMP\ucodex_install.ps1\""
Windows: бинарь ставится в
%LOCALAPPDATA%\Programs\codex\codex.exeи автоматически добавляется в PATH пользователя. Env vars (OPENAI_API_KEY,OPENAI_BASE_URL) ставятся черезsetx+[Environment]::SetEnvironmentVariable("...", "...", "User"). После установки перезапустите CMD/PowerShell для подхвата env vars и PATH.
Установка из репозитория (любая платформа)
git clone https://git.sensey24.ru/aibot777/unlimitedcoding.git
cd unlimitedcoding/codex
# 1) Настроить конфиг
cp codex_config.example.json codex_config.json
# Редактировать base_url и api_key в codex_config.json
# 2a) Linux/macOS:
sudo bash ucodex_install.sh
# 2b) Windows PowerShell (Administrator):
powershell -ExecutionPolicy Bypass -File ucodex_install.ps1
Ручная установка (шаг за шагом, Linux/macOS)
Шаг 1 — Установить бинарник Codex CLI:
# Скачать последнюю версию с GitHub
sudo bash update-codex.sh
codex --version # Должно показать: codex-cli 0.122.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.5"
}
Шаг 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.5, 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"
Обновление
Одной командой
Linux / macOS:
curl -fsSL -H "Authorization: token cadffcb0a6a3be728ac1ff619bb40c86588f6837" \
https://git.sensey24.ru/aibot777/unlimitedcoding/raw/branch/master/codex/ucodex_update.sh \
-o /tmp/ucodex_update.sh && sudo bash /tmp/ucodex_update.sh
Windows (PowerShell as Administrator):
$h=@{Authorization="token cadffcb0a6a3be728ac1ff619bb40c86588f6837"}
Set-ExecutionPolicy Bypass -Scope Process -Force
iwr "https://git.sensey24.ru/aibot777/unlimitedcoding/raw/branch/master/codex/ucodex_update.ps1" -OutFile "$env:TEMP\ucodex_update.ps1" -Headers $h
. "$env:TEMP\ucodex_update.ps1"
Windows (CMD as Administrator):
powershell -NoProfile -ExecutionPolicy Bypass -Command "$h=@{Authorization='token cadffcb0a6a3be728ac1ff619bb40c86588f6837'}; iwr 'https://git.sensey24.ru/aibot777/unlimitedcoding/raw/branch/master/codex/ucodex_update.ps1' -OutFile \"$env:TEMP\ucodex_update.ps1\" -Headers $h; & \"$env:TEMP\ucodex_update.ps1\""
Обновить бинарник Codex CLI вручную (Linux/macOS)
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.5"
model_reasoning_effort = "xhigh"
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"
Удаление (Uninstall)
Linux / macOS:
curl -fsSL -H "Authorization: token cadffcb0a6a3be728ac1ff619bb40c86588f6837" \
https://git.sensey24.ru/aibot777/unlimitedcoding/raw/branch/master/codex/ucodex_uninstall.sh \
-o /tmp/ucodex_uninstall.sh && sudo bash /tmp/ucodex_uninstall.sh
Windows (PowerShell as Administrator):
$h=@{Authorization="token cadffcb0a6a3be728ac1ff619bb40c86588f6837"}
Set-ExecutionPolicy Bypass -Scope Process -Force
iwr "https://git.sensey24.ru/aibot777/unlimitedcoding/raw/branch/master/codex/ucodex_uninstall.ps1" -OutFile "$env:TEMP\ucodex_uninstall.ps1" -Headers $h
. "$env:TEMP\ucodex_uninstall.ps1"
Удаляются: бинарь, ~/.codex/, env vars, wrapper, PATH-запись.
Rollback
Восстановить оригинальный конфиг:
python3 codex_patcher.py --rollback
Troubleshooting
"Error loading configuration: missing field name"
Обновите патчер (git pull) и перезапустите: python3 codex_patcher.py --apply
codex не запускается (segfault / GLIBC) — Linux
Скрипт update-codex.sh скачивает musl-версию для совместимости. Если проблема остаётся:
file /usr/local/bin/.codex-bin
ldd /usr/local/bin/.codex-bin # Должно быть "not a dynamic executable" (static)
macOS: "codex" cannot be opened because the developer cannot be verified
xattr -d com.apple.quarantine /usr/local/bin/.codex-bin
Windows: "codex is not recognized"
Перезапустите CMD/PowerShell. Либо вручную обновите PATH в текущей сессии:
$env:Path = [System.Environment]::GetEnvironmentVariable("Path","Machine") + ";" + [System.Environment]::GetEnvironmentVariable("Path","User")
"OPENAI_API_KEY not set"
Linux:
source /etc/environment
# или
export OPENAI_BASE_URL="https://your-endpoint/v1"
export OPENAI_API_KEY="your-key"
macOS:
source /etc/codex-env.sh
# или перезайти в shell (zsh подхватит из ~/.zshrc)
Windows (PowerShell):
[System.Environment]::SetEnvironmentVariable("OPENAI_API_KEY", "your-key", "User")
[System.Environment]::SetEnvironmentVariable("OPENAI_BASE_URL", "https://your-endpoint/v1", "User")
# Перезапустите PowerShell
Windows (CMD):
setx OPENAI_API_KEY "your-key"
setx OPENAI_BASE_URL "https://your-endpoint/v1"
Permissions промпты всё ещё появляются
Убедитесь что config.toml содержит approval_policy = "never":
Linux/macOS: cat ~/.codex/config.toml | grep approval
Windows: type %USERPROFILE%\.codex\config.toml | findstr 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 (Linux/macOS)
├── ucodex_install.ps1 # One-liner installer (Windows)
├── ucodex_update.sh # Update script (Linux/macOS)
├── ucodex_update.ps1 # Update script (Windows)
├── ucodex_uninstall.sh # Uninstaller (Linux/macOS)
├── ucodex_uninstall.ps1 # Uninstaller (Windows)
└── updater/
├── __init__.py
└── config_validator.py # Валидация 6 targets