Эта альтернатива нужна, если вы хотите настроить клиенты сами. Для автоматического пути скачайте установщик. Если уже пробовали подключение, сначала сохраните конфиги и пройдите проверку старых настроек. Команды ниже не записывают ключ в историю команд, TOML или JSON: его вводят скрыто в текущем терминале либо хранят через helper установщика.
- Создайте или откройте ключ на странице API-ключей. Вводите всю строку, включая
sk-, без словаBearer. Не вставляйте настоящий ключ в примеры конфигов ниже. - Узнайте точный ID доступной ключу модели в каталоге или в ответе своего
/v1/models.gpt-6-solиclaude-sonnet-5-5ниже — примеры, доступность которых зависит от вашего ключа и тарифа. Меняйте только значениеmodelна фактически доступный ID. - Адрес Codex:
https://codex.neuroapi.host/v1; адрес Claude:https://claude.neuroapi.host. Не дописывайте/responsesили/v1/messagesк базовому адресу клиента.
| Клиент | Файл или экран | Что меняется |
|---|---|---|
| Codex CLI | ~/.codex/neuroapi-manual.config.toml или %USERPROFILE%\.codex\neuroapi-manual.config.toml |
model, model_catalog_json, model_provider, base_url, env_key |
| Codex Desktop | ~/.codex/config.toml или %USERPROFILE%\.codex\config.toml |
root model/model_catalog_json/model_provider и секция провайдера; нужен защищённый helper |
| Claude Code | отдельный ~/.claude/neuroapi-manual-settings.json или %USERPROFILE%\.claude\neuroapi-manual-settings.json |
ANTHROPIC_BASE_URL, ANTHROPIC_MODEL; ключ только в терминале |
| Claude Desktop | Developer → Configure Third-Party Inference |
Gateway URL, ключ и схема авторизации в форме приложения |
Если задан CODEX_HOME, профиль CLI кладите в <CODEX_HOME>. Обычный GUI Codex Desktop настраивается в пользовательском ~/.codex/config.toml (%USERPROFILE%\.codex\config.toml на Windows). Не создавайте для Codex provider только в проектном .codex/config.toml: текущий клиент игнорирует там эти параметры по соображениям безопасности.
macOS, Terminal (ключ вставляется после запуска команды и не попадает в историю):
printf 'Ключ NeuroAPI: '
read -r -s NEUROAPI_API_KEY
printf '\n'
export NEUROAPI_API_KEYWindows, PowerShell:
$secret = Read-Host 'Ключ NeuroAPI' -AsSecureString
$ptr = [Runtime.InteropServices.Marshal]::SecureStringToBSTR($secret)
try { $env:NEUROAPI_API_KEY = [Runtime.InteropServices.Marshal]::PtrToStringBSTR($ptr) }
finally { [Runtime.InteropServices.Marshal]::ZeroFreeBSTR($ptr) }
Remove-Variable secret, ptrПеременная существует только в этом терминале и его дочерних процессах. Не записывайте строку ключа через export ...="sk-...", setx или в файл настроек.
Скачайте и распакуйте публичный ZIP, затем откройте терминал в корне распакованной папки (рядом с scripts/). Запускать setup для этого шага не нужно: команды используют его проверенные библиотеки. При ручном CLI используется временный NEUROAPI_API_KEY из шага 1; для Desktop без этой переменной команда читает уже сохранённый Keychain/DPAPI ключ установщика.
Каталог определяет возможности модели, включая поиск, поэтому обязателен вместе с web_search = "live". Нельзя заменять его стандартным OpenAI-списком { "data": [...] } или придумывать capability-поля. Команды принимают только актуальный authenticated ответ выделенного Codex endpoint, проверяют схему, IDs, default, права и отсутствие отражённого ключа, затем атомарно заменяют приватный файл. При ошибке не запускайте клиент со старым каталогом.
macOS — выполните весь блок из Bash (/bin/bash, если текущий shell другой):
(
set +x
set -euo pipefail
umask 077
repo_root="$(pwd -P)"
. "$repo_root/scripts/macos/common.sh"
catalog_root="$HOME/.local/share/neuroapi-manual-codex"
[[ ! -L "$catalog_root" ]] || exit 1
mkdir -p "$catalog_root"
chmod 700 "$catalog_root"
[[ ! -L "$catalog_root/models.json" ]] || exit 1
[[ ! -e "$catalog_root/models.json" || -f "$catalog_root/models.json" ]] || exit 1
stage="$(mktemp -d "$catalog_root/.update.XXXXXX")"
trap 'rm -rf -- "$stage"' EXIT
credential="${NEUROAPI_API_KEY:-}"
helper="$HOME/.local/share/neuroapi-agents/bin/get-neuroapi-key.sh"
if [[ -z "$credential" ]]; then credential="$("$helper" 2>/dev/null)"; fi
[[ ${#credential} -le 4096 && "$credential" =~ ^[A-Za-z0-9._~-]+$ ]] || exit 1
if ! printf 'header = "Authorization: Bearer %s"\n' "$credential" |
/usr/bin/curl --disable --config - --silent --fail --proto '=https' \
--proto-redir '=https' --max-redirs 0 --connect-timeout 5 --max-time 20 \
--max-filesize 4194304 --header 'Accept: application/json' \
--write-out '\n%{http_code}' 'https://codex.neuroapi.host/v1/models' 2>/dev/null |
/usr/bin/osascript -l JavaScript "$repo_root/scripts/macos/catalog-validator.js" \
codex "$stage" "$helper" 3< <(printf '%s' "$credential") >/dev/null 2>/dev/null; then
printf 'Каталог не обновлён. Проверьте ключ и соединение; запуск отменён.\n' >&2
exit 1
fi
unset credential
model="$(<"$stage/model.txt")"
mv -f -- "$stage/models.json" "$catalog_root/models.json"
printf 'model_catalog_json = "%s"\nmodel = "%s"\n' \
"$(toml_escape "$catalog_root/models.json")" "$model"
)Windows PowerShell — выполните весь блок из распакованной папки:
& {
$ErrorActionPreference = 'Stop'
$repoRoot = (Get-Location).Path
. (Join-Path $repoRoot 'scripts/windows/common.ps1')
. (Join-Path $repoRoot 'scripts/windows/managed-catalog.ps1')
$catalogRoot = Join-Path $env:LOCALAPPDATA 'NeuroAPIManualCodex'
Ensure-Directory -Path $catalogRoot
Set-NeuroAPIPrivateDirectory -Path $catalogRoot
$catalogPath = Join-Path $catalogRoot 'models.json'
if (Test-Path -LiteralPath $catalogPath) {
$item = Get-Item -LiteralPath $catalogPath -Force
if ($item.PSIsContainer -or ($item.Attributes -band [IO.FileAttributes]::ReparsePoint)) {
throw 'Каталог моделей не должен быть каталогом или ссылкой.'
}
}
$stage = New-NeuroAPILaunchDirectory -StateRoot $catalogRoot
try {
$secretPath = Join-Path $env:LOCALAPPDATA 'NeuroAPIAgents/secret/api-key.dpapi'
if (-not [string]::IsNullOrEmpty($env:NEUROAPI_API_KEY)) {
# Windows DPAPI ciphertext only; never write the plaintext key.
$secretPath = Join-Path $stage 'temporary-key.dpapi'
$secure = ConvertTo-SecureString $env:NEUROAPI_API_KEY -AsPlainText -Force
try { Write-Utf8NoBom -Path $secretPath -Content (ConvertFrom-SecureString $secure) }
finally { $secure.Dispose() }
}
$json = Get-NeuroAPICatalogJson -Client codex -SecretPath $secretPath
$catalog = ConvertFrom-NeuroAPICatalog -Client codex -Json $json
$stagedCatalog = Join-Path $stage 'models.json'
Write-Utf8NoBom -Path $stagedCatalog -Content ($catalog.Content | ConvertTo-Json -Depth 100)
if (Test-Path -LiteralPath $catalogPath) {
[IO.File]::Replace($stagedCatalog, $catalogPath, (Join-Path $stage 'previous-models.json'))
} else {
[IO.File]::Move($stagedCatalog, $catalogPath)
}
'model_catalog_json = ' + (ConvertTo-TomlBasicString -Value $catalogPath)
'model = ' + (ConvertTo-TomlBasicString -Value $catalog.DefaultModel)
} finally {
Remove-Item -LiteralPath $stage -Recurse -Force
}
}Оба блока печатают две безопасные TOML-строки: абсолютный model_catalog_json и доступную model. Скопируйте их в root конфигурации перед первой [секцией], заменяя существующие значения без дубликатов. JSON содержит только проверенные метаданные моделей, не ключ. Обновляйте его перед каждым ручным CLI-запуском, перед запуском Desktop и после смены ключа/тарифа; после обновления перезапустите Desktop. Для автоматического обновления каждого CLI-запуска используйте codex-neuroapi.
macOS: mkdir -p ~/.codex && nano ~/.codex/neuroapi-manual.config.toml. Windows: New-Item -ItemType Directory -Force "$HOME\.codex" | Out-Null; notepad "$HOME\.codex\neuroapi-manual.config.toml". Если установлен CODEX_HOME, откройте файл в нём. Вставьте весь блок:
Hosted поиск включён (web_search = "live"). plugins = false и remote_plugin = false отключают плагины только в отдельном CLI-профиле, чтобы запуск с API-ключом не зависел от фоновой синхронизации ChatGPT/Git-каталогов. Отдельно настроенные MCP остаются доступны, инструменты плагинов — нет. Остальные ограничения CLI-профиля оставьте как в примере. Подробнее — ручная настройка.
model = "gpt-6-sol" # замените только ID модели, если вашему ключу доступна другая
model_catalog_json = "/АБСОЛЮТНЫЙ/ПУТЬ/models.json" # строка из шага 2
model_provider = "neuroapi_manual"
web_search = "live"
[features]
plugins = false
remote_plugin = false
multi_agent = false
goals = false
apps = false
browser_use = false
[model_providers.neuroapi_manual]
name = "NeuroAPI"
base_url = "https://codex.neuroapi.host/v1"
wire_api = "responses"
supports_websockets = true
env_key = "NEUROAPI_API_KEY"Сохраните файл и из того же терминала запустите codex --profile neuroapi-manual. В клиенте проверьте /debug-config, затем поручите короткую файловую задачу. При проблеме с WebSocket замените только supports_websockets = true на false, перезапустите CLI и повторите задачу по HTTP/SSE. Перед каждым запуском повторите шаг 2; при ошибке обновления остановитесь. model должна присутствовать в проверенном каталоге. Не удаляйте файл, пока клиент работает. После работы закройте терминал либо выполните unset NEUROAPI_API_KEY (macOS) / Remove-Item Env:NEUROAPI_API_KEY (PowerShell).
В том же терминале, где временно введён NEUROAPI_API_KEY, создайте отдельный файл настроек. macOS: mkdir -p ~/.claude && nano ~/.claude/neuroapi-manual-settings.json. Windows: New-Item -ItemType Directory -Force "$HOME\.claude" | Out-Null; notepad "$HOME\.claude\neuroapi-manual-settings.json". Вставьте:
{
"env": {
"ANTHROPIC_BASE_URL": "https://claude.neuroapi.host",
"ANTHROPIC_MODEL": "claude-sonnet-5-5"
}
}Замените claude-sonnet-5-5 точным доступным ID. Для запуска передайте ключ клиенту только в текущей сессии:
macOS:
export ANTHROPIC_API_KEY="$NEUROAPI_API_KEY"
claude --settings "$HOME/.claude/neuroapi-manual-settings.json"Windows PowerShell:
$env:ANTHROPIC_API_KEY = $env:NEUROAPI_API_KEY
claude --settings "$HOME\.claude\neuroapi-manual-settings.json"В Claude Code проверьте /status: Anthropic base URL должен быть https://claude.neuroapi.host, источник credential — ANTHROPIC_API_KEY. Если вывод показывает другой URL, ANTHROPIC_AUTH_TOKEN, apiKeyHelper или claude.ai login, найдите старое переопределение в ~/.claude/settings.json, переменных среды или политике организации; не удаляйте весь файл. После работы удалите переменные ANTHROPIC_API_KEY и NEUROAPI_API_KEY из терминала или закройте его. Для постоянного безопасного доступа используйте helper установщика: простое копирование ключа в settings.json оставляет его открытым текстом.
Для обычного запуска Desktop из Dock/Start временная переменная терминала не подходит. Ниже — ручное редактирование после запуска setup-файла без опции Codex Desktop: setup уже сохранил ключ в Keychain/DPAPI и создал helper. Если setup уже настроил Desktop, повторно вставлять блок не нужно. Если установщика вообще не было, сперва используйте его для защищённого сохранения ключа или подготовьте собственный credential helper; запись ключа прямо в config.toml здесь не предлагается.
- Полностью закройте Codex Desktop. Скопируйте существующий
config.tomlв резервную копию с датой. macOS:cp -p ~/.codex/config.toml ~/.codex/config.toml.before-neuroapi-$(date +%Y%m%d-%H%M%S)(если файла ещё нет, пропустите). Windows PowerShell:Copy-Item "$HOME\.codex\config.toml" "$HOME\.codex\config.toml.before-neuroapi-$(Get-Date -Format yyyyMMdd-HHmmss)"(если файл существует). - Проверьте наличие helper: macOS —
~/.local/share/neuroapi-agents/bin/get-neuroapi-key.sh; Windows —%LOCALAPPDATA%\NeuroAPIAgents\bin\get-neuroapi-key.ps1и%LOCALAPPDATA%\NeuroAPIAgents\secret\api-key.dpapi. Не запускайте helper для диагностики с выводом на экран: он печатает секрет. - Для Desktop очистите только временную переменную текущего терминала:
unset NEUROAPI_API_KEY(macOS) илиRemove-Item Env:NEUROAPI_API_KEY -ErrorAction SilentlyContinue(PowerShell). Затем из распакованного ZIP выполните шаг загрузки каталога выше: он использует уже сохранённый ключ helper — тот же, с которым Desktop будет отправлять запросы. Сохраните выведенныеmodel_catalog_jsonиmodel. - Откройте
~/.codex/config.toml(Windows:%USERPROFILE%\.codex\config.toml). Если файл пустой, вставьте соответствующий блок ниже целиком. Если уже содержит настройки, замените существующие rootmodel,model_catalog_jsonиmodel_provider, добавьтеweb_search = "live"в root, а секцию[model_providers.neuroapi_manual_desktop]с auth добавьте один раз в конец. Не создавайте второй[features]: обновите указанные поля внутри существующей секции. Не удаляйте другие провайдеры.
macOS: в command замените ИМЯ_ПОЛЬЗОВАТЕЛЯ на имя домашней папки из echo "$HOME" (например, roman):
model = "gpt-6-sol"
model_catalog_json = "/АБСОЛЮТНЫЙ/ПУТЬ/models.json" # строка из шага 3
model_provider = "neuroapi_manual_desktop"
web_search = "live"
[features]
remote_plugin = false
multi_agent = false
goals = false
apps = false
browser_use = false
[model_providers.neuroapi_manual_desktop]
name = "NeuroAPI"
base_url = "https://codex.neuroapi.host/v1"
wire_api = "responses"
supports_websockets = false
[model_providers.neuroapi_manual_desktop.auth]
command = "/Users/ИМЯ_ПОЛЬЗОВАТЕЛЯ/.local/share/neuroapi-agents/bin/get-neuroapi-key.sh"
timeout_ms = 5000
refresh_interval_ms = 300000Windows: сначала выполните $env:LOCALAPPDATA в PowerShell. Подставьте выведенный абсолютный путь вместо C:/Users/ИМЯ/AppData/Local в обоих аргументах. В TOML удобно писать прямые слэши /; строку %LOCALAPPDATA% буквально вставлять нельзя:
model = "gpt-6-sol"
model_catalog_json = "/АБСОЛЮТНЫЙ/ПУТЬ/models.json" # строка из шага 3
model_provider = "neuroapi_manual_desktop"
web_search = "live"
[features]
remote_plugin = false
multi_agent = false
goals = false
apps = false
browser_use = false
[model_providers.neuroapi_manual_desktop]
name = "NeuroAPI"
base_url = "https://codex.neuroapi.host/v1"
wire_api = "responses"
supports_websockets = false
[model_providers.neuroapi_manual_desktop.auth]
command = "powershell.exe"
args = ["-NoLogo", "-NoProfile", "-NonInteractive", "-ExecutionPolicy", "Bypass", "-File", "C:/Users/ИМЯ/AppData/Local/NeuroAPIAgents/bin/get-neuroapi-key.ps1", "-SecretPath", "C:/Users/ИМЯ/AppData/Local/NeuroAPIAgents/secret/api-key.dpapi"]
timeout_ms = 5000
refresh_interval_ms = 300000Desktop сохраняет ваши настройки плагинов. Если плагины не нужны и вы видите ошибки ChatGPT/Git-каталога, по желанию добавьте plugins = false в существующую [features]. Это отключит инструменты плагинов, но не отдельно настроенные MCP. Не создавайте вторую [features]; установщик сам значение plugins Desktop не меняет.
В обоих Desktop-блоках замените пример model_catalog_json и model точными строками, выведенными шагом 3. В Windows это уже экранированный TOML-путь; не вставляйте буквально %LOCALAPPDATA%, $HOME или ~. Каталог постоянный и приватный, но обновляется вручную: перед запуском Desktop и после смены ключа/тарифа повторяйте загрузку; при ошибке обновления клиент не запускайте. Перезапустите приложение, создайте новую локальную задачу и проверьте её в истории NeuroAPI. Не удаляйте helper/ключ через uninstaller, пока Desktop-config ссылается на него. Если захотите перейти на автоматическое управление Desktop, сначала уберите ручную секцию и верните прежние root-настройки из сохранённой копии, затем повторите setup с опцией Desktop: иначе последующее удаление установщика может восстановить конфиг, который всё ещё ссылается на удаляемый helper.
Откройте приложение → Developer → Configure Third-Party Inference. В форме выберите inference provider Gateway, credential kind Static API key, укажите gateway base URL https://claude.neuroapi.host, вставьте полный ключ NeuroAPI в поле Gateway API key и выберите auth scheme Bearer. Сохраните, начните новый локальный чат и проверьте запрос в истории NeuroAPI. Настройка Claude Code CLI на Desktop не переносится. Не редактируйте claude_desktop_config.json: это файл подключений MCP, а не настройки inference gateway. Подробности и актуальный вид формы: наша инструкция и официальная инструкция Anthropic.
Проверьте реальную задачу и запись в истории запросов NeuroAPI. Если запроса нет, клиент обращается к другому URL или использует другое удостоверение; проверьте /debug-config в Codex и /status в Claude Code. Если запрос есть, но завершился ошибкой, используйте решение проблем. Не публикуйте ключ, дамп полного конфига с секретами или raw HTTP-лог в issue.
Имена полей сверены с официальным справочником Codex, инструкцией Anthropic для Claude Code gateway и инструкцией Anthropic для Claude Desktop gateway.