Что это решает
Claude Code API key — ключ из консоли Anthropic, которым клиент авторизуется вместо входа в аккаунт с подпиской. Он нужен там, где интерактивного входа нет: пайплайн CI, cron на сервере, скрипт с claude -p, чужая машина без браузера. Второй повод — учёт: расход по ключу и рабочему пространству виден отдельно, поэтому проект, команду или клиента считают по счёту, а не по ощущениям. Третий — потолок: подписка упирается в лимиты плана, ключ упирается только в тот лимит расхода, который поставили сами.
Как устроено
Два способа авторизации
| Подписка | Ключ API | |
|---|---|---|
| Вход | /login, браузер, аккаунт | переменная ANTHROPIC_API_KEY |
| Оплата | фиксированный платёж за план | счёт за фактически потраченные токены |
| Потолок | лимиты использования по окну | лимит расхода и ограничения скорости организации |
| Где работает | интерактивная сессия на машине с браузером | любой процесс, куда можно передать переменную окружения |
| Учёт | общий по аккаунту | по ключу и рабочему пространству |
Переключение живёт в окружении, а не в конфиге: заданная переменная ANTHROPIC_API_KEY перебивает сохранённый вход в аккаунт. Команда /status внутри сессии показывает, чем клиент авторизован прямо сейчас, — с неё и начинают любой разбор «почему списалось не туда».
Из чего складывается счёт
Оплата считается по токенам: отдельно вход, отдельно выход, ставки различаются по моделям. Чтение из кеша дешевле обычного ввода. Ключевая механика агентной работы: на каждом шаге в модель уходит весь накопленный контекст заново, поэтому расход растёт быстрее, чем длина переписки.
Практические следствия:
- одна длинная сессия дороже двух коротких на ту же работу;
- большой файл, оставшийся в контексте, оплачивается на каждом последующем шаге;
- субагент, который перемалывает выдачу в своём окне и возвращает абзац, дешевле той же выдачи, вываленной в главный контекст;
- модель попроще на механической работе экономит больше, чем любая правка промпта.
Точные ставки смотрят на странице цен Anthropic: они различаются по моделям и меняются, держать их в голове бессмысленно.
Где живёт ключ
В процесс ключ попадает несколькими путями, и в проекте выбирают один:
- переменная окружения
ANTHROPIC_API_KEY— через~/.zshrc,direnv, секрет пайплайна, обёртку запуска; apiKeyHelperв~/.claude/settings.json— путь к команде, которая печатает ключ в stdout. Удобно, когда ключ выдаёт хранилище секретов и его ротируют по расписанию: сам ключ на диске в открытом виде не лежит;- шлюз:
ANTHROPIC_BASE_URLвместе сANTHROPIC_AUTH_TOKEN, когда трафик обязан идти через корпоративный прокси с логированием; - облако компании:
CLAUDE_CODE_USE_BEDROCKилиCLAUDE_CODE_USE_VERTEX— тогда авторизация берётся из кредов AWS или Google, а ключ Anthropic не нужен вовсе.
Что видно в консоли
Ключ выпускается в консоли Anthropic и привязан к организации и рабочему пространству. Значение показывается один раз при создании; дальше в консоли остаются имя, дата и расход. Забыли скопировать — выпускают новый, восстановить прежний нельзя.
Как подключить
- Консоль Anthropic → API keys → создать ключ. Имя — по месту использования:
ci-rih-api,mac-dmitry,cron-reports. Имена вродеtestчерез месяц не дадут понять, что отзывать. - Скопировать сразу и положить в менеджер секретов: Keychain, 1Password, Vault, секреты CI. Не в заметки, не в чат, не в репозиторий.
- Завести отдельное рабочее пространство на проект, если расход нужно разделять. Тогда счёт бьётся по проектам сам, без ручного разбора выгрузки.
- Поставить лимит расхода на организацию или пространство до первого запуска. Ночной цикл, ушедший вразнос, останавливает лимит, а не человек у экрана.
- Отдать ключ процессу, не записывая его в файлы проекта:
export ANTHROPIC_API_KEY="$(security find-generic-password -s anthropic-api -w)"
claude -p "проверка связи, ответь одним словом ok"
Либо через помощник в ~/.claude/settings.json:
{
"apiKeyHelper": "/usr/local/bin/get-anthropic-key.sh"
}
- В CI использовать секрет пайплайна, прокинутый в переменные окружения шага. Не файл в репозитории и не аргумент командной строки: аргументы видны в логе задания и в выводе
ps. - Проверить, что локальные настройки с ключом не уезжают в git. Значения кладут в окружение или в
.claude/settings.local.json, а не в коммитимый.claude/settings.json.
Полезные сценарии
- Ночной прогон отчёта или чеклиста на сервере через
claude -pбез интерактивной сессии. - Проверка merge request в CI: агент читает дифф, пишет замечания комментарием.
- Отдельный ключ на клиента или проект, чтобы перевыставить расход по счёту.
- Корпоративный контур через Bedrock или Vertex, когда трафик не должен покидать периметр облака компании.
- Шлюз с логированием запросов, когда служба безопасности требует аудита переписки с моделью.
- Разовая работа на чужой машине, где входить в личный аккаунт не нужно.
Ограничения
- Платится каждый токен, включая перечитывание одних и тех же файлов на каждом шаге. Небрежная постановка задачи стоит денег напрямую, а не нервов.
- Без выставленного лимита расход ограничен только временем работы процесса. Цикл, который «почти починил» тест до утра, обнаруживается по счёту.
- Ключ даёт доступ к деньгам организации. Утёкший ключ отзывают в консоли и выпускают новый; переписывание истории git проблему не решает, коммит остаётся в форках, зеркалах и кешах CI.
- Набор возможностей у двух способов авторизации совпадает не полностью — что доступно конкретно вашей организации, проверяют на своей организации, а не по чужим рассказам.
- Ограничение скорости у организации общее: параллельные субагенты и батчи упираются в него и получают отказ. Скрипт, который на такой отказ не умеет ждать и повторять, падает целиком.
- Ключ снимает потолок и вместе с ним снимает тормоз: с подпиской перерасход упирается в лимит окна, с ключом — в счёт.
Как проверить результат
/statusв сессии — показывает, чем клиент авторизован. Первое, что смотрят при расхождении ожиданий со счётом.- Убедиться, что переменная доехала до процесса, не печатая значение:
[ -n "$ANTHROPIC_API_KEY" ] && echo "ключ задан" || echo "ключа нет"
- Пробный headless-вызов
claude -p "ответь одним словом: ok"— дешёвый способ убедиться, что ключ живой и organization не заблокирована. - Страница Usage в консоли: расход должен появиться на нужном ключе и в нужном рабочем пространстве. Пусто там, где ждали, значит процесс авторизовался чем-то другим.
- Учебный отзыв: отозвать тестовый ключ и убедиться, что пайплайн падает с внятной ошибкой авторизации, а не молча переезжает на чужую.
- Перед первым пушем прогнать по репозиторию поиск секретов и просмотреть
git diff --stagedглазами: ключ чаще всего утекает не в коде, а в конфиге, который «просто закоммитили заодно».
Правило одной строкой: ключ хранится в менеджере секретов, попадает в процесс переменной окружения, и лимит расхода ставится раньше первого запуска.
