Перейти к содержимому

Добавить провайдера и запустить Claude Code, Codex или Grok

Эта страница — первый час плоскости провайдеров: куда кладётся ваш API-ключ, как вы узнаёте, что он работает, и как с ним запускается сессия.

В выпуске 26.10 переменная окружения на сервере остаётся одним из ответов на первый вопрос, и эти переменные по-прежнему работают. Они больше не единственный путь и больше не тот путь, с которого начинает новый оператор.

По одной фразе на каждое, потому что продукт их смешивал, а отказы, которые он выдаёт, называют их по отдельности.

Слово Что это
Провайдер API-ключ или конечная точка локальной модели, необязательная base_url и вид (anthropic, openai, xai, gemini, openai_compatible, ollama).
Профиль провайдера Идентичность на этой машине: какой официальный CLI работает и под каким домашним каталогом конфигурации и пользователя.
Сессия Один запущенный дочерний процесс, под одним профилем, с учётными данными одного провайдера.
  1. Откройте Инструменты в верхней панели и найдите раздел API-ключи.
  2. Выберите Добавить API-ключ. Пока не зарегистрировано ни одного ключа, кнопка называется Добавьте первого провайдера.
  3. Выберите провайдера, дайте ему имя, которое вы узнаете в списке выбора, и вставьте ключ. Оставьте конечную точку пустой, если вы не указываете на собственный шлюз; провайдер openai_compatible требует её, потому что нет официальной конечной точки, которую можно было бы предположить.
  4. Подтвердите.

Движок запечатывает ключ в покое и возвращает подсказку из четырёх символов. Ключ больше никогда не возвращается, в том числе сразу после записи. Если вы его потеряли — замените: чтения, которое его восстановит, не существует.

Окно терминала
# Ключ читается из stdin. Он никогда не является значением флага: флаг оставляет
# учётные данные в истории оболочки и в таблице процессов.
olivares provider add --kind anthropic --name "Anthropic (prod)" < key.txt
# Или из переменной окружения вашей собственной оболочки:
ANTHROPIC_KEY=sk-ant-... olivares provider add \
--kind openai --name "Codex" --key-env ANTHROPIC_KEY
Окно терминала
olivares provider test prv_01J8ABCDEF

Проверка спрашивает у провайдера, какие модели он обслуживает. Она не отправляет никаких завершений и ничего не тратит.

Она отвечает одно из трёх, и это три разных вопроса:

Итог Что это значит Что делать
ok Провайдер ответил и принял учётные данные. Ничего. Привяжите их.
refused Провайдер ответил и отклонил учётные данные. Замените ключ.
unreachable Ответа не получено. Проверьте конечную точку, сеть и прокси. Это ничего не говорит о ключе — не генерируйте его заново.

Провайдер, которого вы не проверяли, показывается как не проверен, и никогда — как работающий. Регистрация учётных данных — это намерение; проверка — это факт.

3. Зарегистрируйте профиль и привяжите провайдера

Заголовок раздела «3. Зарегистрируйте профиль и привяжите провайдера»

Явно указанные домашние каталоги должны уже существовать на машине, где работает плоскость управления. Сервер проверяет их там и не создаёт отсутствующие явно указанные каталоги: пустой запасной каталог дал бы сессии личность провайдера, которую никто не настраивал.

Окно терминала
olivares agent profile create \
--driver claude \
--config-home /home/ops/.claude \
--user-home /home/ops \
--name "Claude (работа)" \
--auth-source managed_injection \
--provider prv_01J8ABCDEF

--auth-source решает, откуда берётся личность провайдера у дочернего процесса, и эти два значения не образуют цепочку отката:

  • provider_account_home — вход, уже сохранённый внутри собственных домашних каталогов профиля. Olivares ничего не внедряет и никогда не читает этот файл.
  • managed_injection — учётные данные, которые подаёт движок. С привязанным провайдером это данные именно этого провайдера.

Сокращение объединяет обнаружение, регистрацию и привязку провайдера. Если не указаны ни --config-home, ни --user-home, домашними каталогами управляет движок. Без --provider он выбирает профиль, который использовала бы новая сессия этого драйвера; с --provider он создаёт профиль с собственными домашними каталогами:

Окно терминала
olivares agent deploy claude --provider prv_01J8ABCDEF

Перед использованием этого сокращения установите инструмент в разделе Инструменты ИИ. Оно не выполняет вход в вашу учётную запись провайдера.

Чтобы привязать (или перепривязать) позже:

Окно терминала
olivares provider bind prv_01J8ABCDEF --profile ppf_01J8ZZZZZZ

Движок отклоняет учётные данные, которые драйвер профиля не может прочитать. Ключ OpenAI на профиле Claude — это отказ, называющий и то и другое, и при привязке, и снова при запуске; а не сессия, которая падает посреди рукопожатия.

Вид провайдера Драйверы, которые его читают С собственной base_url
anthropic claude, opencode claude
openai codex, opencode codex
xai grok, opencode grok
gemini gemini-cli
openai_compatible codex, opencode codex
ollama codex, opencode codex, opencode

Для anthropic, openai и xai OpenCode принимает только конечную точку самого поставщика: оставьте base_url пустой. Для шлюза openai_compatible используйте codex; для ollama и для локального сервера openai_compatible, чей base_url — обычный http по loopback- или частному адресу, например http://127.0.0.1:8080/v1 (vLLM, llama.cpp), — codex или opencode. base_url включает /v1.

Окно терминала
olivares agent workspace add /srv/projects/acme --name acme --mode ro --dlp deny
olivares agent session create \
--name acme-1 \
--workspace ws-123 \
--provider-profile ppf_01J8ZZZZZZ
olivares agent session attach run-123

--provider-profile явно выбирает профиль. Если запуск с профилями включён, при отсутствии этого параметра движок определяет профиль для Claude Code — инструмента по умолчанию: использует существующий или создаёт новый профиль для собственного входа инструмента, а если вход не выполнен — для совместимой записи провайдера. Для этого требуется sessions:profile:write; без этого разрешения выберите профиль явно. Отказы при выборе профиля и запуске по-прежнему действуют.

В консоли тот же путь — Онбординг → Агенты и первая сессия или Сессии → Новая сессия.

Окно терминала
olivares provider rotate prv_01J8ABCDEF < new-key.txt # перезапечатывает на месте
olivares provider rm prv_01J8ABCDEF --yes # необратимо

Замена подставляет новое значение под той же ссылкой, поэтому все привязанные профили продолжают работать, а следующий запуск использует новый ключ. Уже идущая сессия сохраняет учётные данные, с которыми она запустилась. Прежний результат проверки стирается: вердикт, измеренный для учётных данных, которых больше нет, ничего не доказывает о тех, что их заменили.

Отзыв уничтожает запечатанное значение и отказывает во всех будущих запусках по имени. Запись и привязки сохраняются намеренно: профиль, который молча перестал бы кого-либо называть, читался бы как профиль, который никто не настраивал. Отзыв здесь не отзывает ключ у провайдера; это делается в его собственной консоли.

Вы видите Это значит
provider credentials cannot be stored on this deployment Запечатанное хранилище не подключено. Движок отказывается сохранить ключ вместо того, чтобы хранить тот, который он не может защитить.
the provider connection test is not available Зонд не подключён. На запуск это не влияет.
a … credential is not readable by driver … Вид и драйвер не совпадают. Смотрите таблицу выше.
the provider this profile is bound to is revoked Привяжите активного провайдера.
this launch has two endpoints Одновременно действуют шлюз вывода развёртывания и собственный base_url провайдера. Уберите один; движок не выбирает.
the registered provider credential could not be opened Запуск отклонён. Он не откатывается на учётные данные хоста — это выполнило бы вашу сессию под учётной записью, которую вы не выбирали.

Переменные окружения и где они по-прежнему действуют

Заголовок раздела «Переменные окружения и где они по-прежнему действуют»

Для профилей Claude с managed_injection, которые не указывают провайдера, OLIVARES_SESSION_RUNTIME_WIF или OLIVARES_SESSION_RUNTIME_TOKEN_FILE задаёт учётные данные вывода на хосте. Профиль, привязанный к провайдеру, использует его учётные данные; при ошибке запуск отклоняется без перехода к данным хоста. Профиль с provider_account_home использует разрешённый вход инструмента и не требует ни одной из этих переменных.