Клиенты · Терминал

Агенты в терминале

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

Общая пара#

bash
export OPENAI_BASE_URL=https://nirastudio.org/v1
export OPENAI_API_KEY=$NIRA_API_KEY

Для клиентов протокола Anthropic — та же идея, но без /v1:

bash
export ANTHROPIC_BASE_URL=https://nirastudio.org
export ANTHROPIC_AUTH_TOKEN=$NIRA_API_KEY
Некоторые сборки читают устаревшее OPENAI_API_BASE вместо OPENAI_BASE_URL. Задать можно обе — лишняя переменная никому не мешает.

Aider#

bash
export OPENAI_API_BASE=https://nirastudio.org/v1
export OPENAI_API_KEY=$NIRA_API_KEY

aider --model openai/anthropic/claude-sonnet-4.6

Префикс openai/ — это указание Aider, каким протоколом идти; дальше следует идентификатор модели целиком. Выглядит громоздко, но именно так он различает провайдера и модель.

yaml
# .aider.conf.yml в корне проекта
model: openai/anthropic/claude-sonnet-4.6
weak-model: openai/anthropic/claude-haiku-4.5

weak-model Aider использует для сообщений коммитов и мелких сводок — старшая модель там не нужна.

Остальные#

Codex CLI

bash
export OPENAI_BASE_URL=https://nirastudio.org/v1
export OPENAI_API_KEY=$NIRA_API_KEY

Модель задаётся флагом --model или в ~/.codex/config.toml. Имя — из каталога.

OpenCode, Goose и прочие

У них в настройках есть выбор совместимого с OpenAI провайдера: указываете https://nirastudio.org/v1, ключ и имя модели. Ключевой признак, что инструмент подойдёт, — наличие поля для базового адреса.

Свои скрипты#

Для одноразовой задачи библиотека не нужна — хватит curl:

bash
#!/usr/bin/env bash
# Объясняет ошибку из вывода команды
set -euo pipefail

OUT=$("$@" 2>&1) || true

curl -sN https://nirastudio.org/v1/chat/completions \
  -H "Authorization: Bearer $NIRA_API_KEY" \
  -H "Content-Type: application/json" \
  -d "$(jq -n --arg out "$OUT" '{
        model: "anthropic/claude-haiku-4.5",
        messages: [
          { role: "system", content: "Коротко объясни ошибку и предложи исправление." },
          { role: "user", content: $out }
        ]
      }')" | jq -r '.choices[0].message.content'

jq -n --arg здесь не для красоты: вывод команды содержит кавычки и переводы строк, и вручную собранный JSON на них ломается.

В сборках и на серверах#

  • Отдельный ключ на каждое окружение: отзыв одного не остановит остальные.
  • Дневной лимит у ключа — единственная защита от цикла, который никто не смотрит.
  • Ключ можно ограничить по IP, если сборка ходит с постоянного адреса.
  • В журналы CI ключ попадать не должен: echo $OPENAI_API_KEY в отладке — самый частый способ его потерять.

Проверить доступ из окружения сборки можно самым дешёвым запросом: curl https://nirastudio.org/v1/account — см. аккаунт и баланс.