Подключение к API
OpenAI-совместимый API. Работает с Cursor, Codex, Claude Code, SDK на Python/JS и curl. Все запросы — на этот адрес:
Базовый адрес (Base URL)
/v1Доступные модели
Загрузка моделей…
Список обновляется автоматически. Указывайте точный id в поле model.
Выбери провайдера / IDE
Модель
Операционная система
VS Code · Windows
Установщик меняет только ключ, endpoint и провайдера в ~/.codex — чаты, sessions и projects не трогаются. Запускай его на той машине, где реально работает VS Code.
Шаг 1
Открой PowerShell на той машине, где запускается VS Code (для Remote/SSH — на удалённом сервере).
Шаг 2
Один раз выполни скрипт ниже. Он делает бэкап конфига, прописывает NanoKeys провайдером и задаёт ключ.
Шаг 3
Полностью закрой ВСЕ окна VS Code (скрипт это сделает сам на Windows), затем открой заново. Или в открытом VS Code нажми F1 → "Developer: Reload Window" — этого тоже достаточно, чтобы Codex-extension перечитал ~/.codex/config.toml.
PowerShell
$ApiKey = 'sk-cvc-...'
$ErrorActionPreference = "Stop"
$codexDir = Join-Path $HOME ".codex"
$backupDir = Join-Path $HOME (".codex-backup-" + (Get-Date -Format "yyyyMMdd-HHmmss"))
New-Item -ItemType Directory -Force $codexDir | Out-Null
# Бэкап текущей конфигурации (chats/sessions не трогаем)
foreach ($name in @("config.toml", "auth.json")) {
$src = Join-Path $codexDir $name
if (Test-Path $src) {
New-Item -ItemType Directory -Force $backupDir | Out-Null
Copy-Item $src $backupDir -Force
}
}
$utf8 = New-Object System.Text.UTF8Encoding($false)
$authJson = @"
{
"auth_mode": "apikey",
"OPENAI_API_KEY": "$ApiKey"
}
"@
[System.IO.File]::WriteAllText((Join-Path $codexDir "auth.json"), $authJson, $utf8)
# МЕРЖ, а не перезапись: сохраняем твои существующие настройки Codex (проекты/trust, MCP-серверы, плагины, другие провайдеры). Затираем только старую CVC-секцию и верхние model-ключи, остальное оставляем как есть — иначе пропали бы старые чаты и настройки.
$configPath = Join-Path $codexDir "config.toml"
$body = ""
if (Test-Path $configPath) {
$lines = (Get-Content -Raw -LiteralPath $configPath) -split "`r?`n"
$kept = New-Object System.Collections.Generic.List[string]
$skip = $false; $seenTable = $false
foreach ($ln in $lines) {
if ($ln -match '^\[') {
$seenTable = $true
if ($ln -match '^\[model_providers\.nanokeys\]\s*$') { $skip = $true; continue }
$skip = $false
}
if ($skip) { continue }
if (-not $seenTable -and $ln -match '^\s*(model|model_reasoning_effort|model_provider)\s*=') { continue }
$kept.Add($ln)
}
$body = ($kept -join "`n").Trim()
}
$header = "model = ""gpt-5.6-sol""`nmodel_reasoning_effort = ""high""`nmodel_provider = ""nanokeys"""
$cvcBlock = @"
[model_providers.nanokeys]
name = "NanoKeys"
base_url = "https://api.mekdiz.online/v1"
wire_api = "responses"
env_key = "CVC_API_KEY"
supports_websockets = false
"@
if ($body -ne "") {
$configToml = $header + "`n`n" + $body + "`n`n" + $cvcBlock
} else {
$configToml = $header + "`n`n" + $cvcBlock
}
[System.IO.File]::WriteAllText($configPath, $configToml, $utf8)
[Environment]::SetEnvironmentVariable("CVC_API_KEY", $ApiKey, "User")
[Environment]::SetEnvironmentVariable("OPENAI_API_KEY", $ApiKey, "User")
$env:CVC_API_KEY = $ApiKey
$env:OPENAI_API_KEY = $ApiKey
# Перезапуск IDE, чтобы ключ подхватился
# VS Code Codex extension читает ~/.codex/config.toml при старте, поэтому VS Code надо ПОЛНОСТЬЮ закрыть (включая extension host).
$names = @("Code", "Code - Insiders", "VSCodium")
foreach ($n in $names) {
$p = Get-Process -Name $n -ErrorAction SilentlyContinue
if ($p) { $p | Stop-Process -Force -ErrorAction SilentlyContinue }
}
# Чистим завис extension host / server, если VS Code оставил его в фоне.
Get-CimInstance Win32_Process -Filter "name='Code.exe' OR name='node.exe'" -ErrorAction SilentlyContinue |
Where-Object { $_.CommandLine -match 'extensionHost|vscode-server' } |
ForEach-Object { Stop-Process -Id $_.ProcessId -Force -ErrorAction SilentlyContinue }
Start-Sleep -Seconds 2
Write-Host "Готово. Codex настроен на NanoKeys."
Write-Host ("Конфиг: " + (Join-Path $codexDir "config.toml"))
if (Test-Path $backupDir) { Write-Host ("Бэкап: " + $backupDir) }