aider: настройка через переменные окружения

aider настраивается без конфиг-файлов, целиком через переменные окружения. Разбираю, какие имена переменных он реально читает и куда девается base URL.

4 мин · · Обновлено · IDE · терминал

aider — терминальный инструмент, и вместо графических настроек у него переменные окружения плюс флаг --model. Это удобно для шлюза: одна и та же пара переменных решает, куда идёт запрос — на Claude или на OpenAI-совместимую модель.

Два набора переменных

Под капотом aider использует библиотеку с провайдерными префиксами в имени модели (anthropic/..., openai/...), и от префикса зависит, какую пару переменных она читает.

Для Anthropic-режима:

bash
export ANTHROPIC_API_KEY="fetch_ваш_ключ"
export ANTHROPIC_API_BASE="https://api.zukko.pro"

Для OpenAI-совместимого режима:

bash
export OPENAI_API_KEY="fetch_ваш_ключ"
export OPENAI_API_BASE="https://api.zukko.pro/v1"

Обратите внимание на разницу в base URL — она та же, что и везде: Anthropic-путь без /v1, OpenAI-совместимый с /v1. Перепутанный суффикс здесь даёт тот же 404, что и в любом другом клиенте, просто без наглядного интерфейса, где это заметно.

Запуск с конкретной моделью

Дальше модель указывается флагом с префиксом:

bash
aider --model anthropic/claude-sonnet-5
bash
aider --model openai/gpt-5.6-sol
bash
aider --model openai/glm-5.3
bash
aider --model openai/glm-5.3-flash

Префикс openai/ тут не означает, что модель от OpenAI — он означает только формат запроса (OpenAI Chat Completions), который шлюз одинаково понимает для GPT и GLM, потому что все они у нас OpenAI-совместимые (и для Claude тоже — шлюз конвертирует формат). Сам id модели после слэша должен точно совпадать с каталогом: claude-opus-5-5, claude-sonnet-5, gpt-5.6-sol, gpt-5.6-luna, glm-5.3, glm-5.3-flash (актуальный список — GET https://api.zukko.pro/v1/models).

Если переменные не подхватываются

aider читает окружение того шелла, из которого его запускают. Частая причина, почему настройки "не работают" — переменные экспортированы в одном терминале, а aider запущен из другого, или из скрипта с чистым окружением. Проверить, что переменная реально видна процессу:

bash
env | grep -i api_key

Если используете .env в проекте — aider подхватывает его сам при старте из директории проекта, отдельно ничего подключать не нужно, но переменные из .env не перекрывают уже экспортированные в шелле — при конфликте побеждает shell.

Проверка ключа отдельно от aider

Прежде чем разбираться, почему не работает именно aider, стоит убедиться, что ключ и адрес рабочие сами по себе:

bash
curl https://api.zukko.pro/v1/chat/completions \
  -H "Authorization: Bearer fetch_ваш_ключ" \
  -H "Content-Type: application/json" \
  -d '{"model":"gpt-5.6-sol","messages":[{"role":"user","content":"тест"}]}'

Если curl отвечает нормально, а aider — нет, ищите проблему в том, какое именно окружение видит процесс aider, а не в ключе.

Частые ошибки и что они значат

  • 401 authentication_error — ключ не долетел в заголовок; проверьте, что переменная действительно экспортирована (export, а не просто присвоение без него — без export дочерний процесс aider её не увидит).
  • 402 insufficient_balance — баланс на нуле, запрос до модели не дошёл, значит и не потрачен впустую.
  • 404 model_not_found — либо неверный id после слэша, либо перепутан ANTHROPIC_API_BASE/OPENAI_API_BASE местами.
  • 400 model_retired — в тексте ошибки указан актуальный id взамен, обновите флаг --model.
  • 503 model_disabled — модель выключена в каталоге; выберите другую из /v1/models.
  • 429 с key_daily_limit_reached — на ключе в кабинете стоит дневной лимит расхода, и он исчерпан (сброс в 00:00 UTC; общего rate limit на шлюзе нет, 429 без этого кода приходит от провайдера модели); лимиты и разрешённые модели настраиваются на странице ключа в /app/api-keys.

Idempotency и повторные запросы

Если пишете вокруг aider свои скрипты и ретраи, добавляйте заголовок Idempotency-Key со своим уникальным значением на каждый логический запрос (одинаковым при его повторах) — повтор с тем же ключом за 24 часа вернёт тот же ответ без повторного списания. Это удобно для CI, где шаг может ретраиться при сетевом сбое, но не должен биллиться дважды.

Смотрим лимиты и цены модели перед выбором

Прежде чем зашивать конкретную модель в скрипты запуска aider, стоит свериться с актуальными лимитами и ценой — они лежат в GET /v1/models/info, без ключа:

bash
curl https://api.zukko.pro/v1/models/info | jq '.data[] | select(.id=="claude-sonnet-5")'

Это тот же самый каталог, что отдаёт GET /v1/models, но с ценами и лимитами по каждой модели — удобно, если пишете обёртку над aider, которая сама выбирает модель по бюджету задачи.

История расходов, если aider используется в паре с другими инструментами

Когда один и тот же ключ стоит и в aider, и, например, в CI-скриптах, полезно время от времени смотреть общий расход через /v1/usage с курсорной пагинацией — история там по всему аккаунту (все ключи вместе, фильтра по ключу нет):

bash
curl "https://api.zukko.pro/v1/usage?limit=50" \
  -H "Authorization: Bearer fetch_ваш_ключ"

Если суммы неожиданно большие, а в терминале aider всё выглядело скромно — вероятно, часть трафика идёт от другого процесса на этом аккаунте, и стоит развести ключи по инструментам, задав каждому свой дневной лимит в кабинете, — тогда перерасход одного инструмента упрётся в его собственный лимит.

Ключ и деньги

Ключи создаются на https://zukko.pro/app/api-keys и показываются один раз — сохраните сразу в менеджер секретов или переменные окружения shell-профиля, а не в историю терминала. Пополнить баланс можно СБП, картой через PayPear или криптой; для иностранных карт Mastercard EU с 2026-09-16 работает эквайринг через Fride (комиссия около 13%, суммы $2–$594); минимальное пополнение — $1. Стартового баланса нет; при нулевом балансе привяжите Telegram в кабинете, подпишитесь на @zukkopro и нажмите «Проверить» — это разово даёт $0.50.

zukko

Платите в 25×
меньше

за Claude Code & ChatGPT

Один ключ fetch_* и base URL api.zukko.pro — в Cursor, Claude Code, Codex и любом SDK.