NanoKeys

Проверка ключа

Вставьте свой API-ключ, чтобы увидеть баланс и статистику. Логин не нужен.

Подключение к API

OpenAI-совместимый API. Работает с Cursor, Codex, Claude Code, SDK на Python/JS и curl. Все запросы — на этот адрес:

Базовый адрес (Base URL)

/v1

Доступные модели

Загрузка моделей…

Список обновляется автоматически. Указывайте точный id в поле model.

Выбери провайдера / IDE

Claude

Модель

Операционная система

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) }