Сегодня Anthropic закрыла использование своих подписок в сторонних инструментах вроде OpenClaw — они больше не покрываются подпиской. А использование по API обходится во много раз дороже. Весь вечер разбирался и обошёл блокировку. Всё работает как раньше.
Расскажу как, потому что процесс для меня оказался интереснее результата. Забавно, что я не пишу код, и помогал мне в обходе их блокировкок Opus 4.6.
Отправная точка
Суть блокировки: Anthropic на уровне сервера определяет, откуда пришёл запрос. Если из Claude Code / Cowork или чата — покрывается подпиской. Если из OpenClaw или любого другого стороннего инструмента — идёт в Extra Usage, где платишь pay-per-token по ценам API. Я не делаю ничего сложного, но проверил что мой OpenClaw на Opus за вечер спокойно нажигает на десятки долларов.
Запрос к API по сути просто HTTP-запрос с заголовком, телом и токеном. Я подумал, что если сформировать запрос так, чтобы он выглядел как от Claude Code — Anthropic не должен отличить.
CLIProxyAPI
Нашёл проект CLIProxyAPI (23 тысячи звёзд на GitHub). Это Go-прокси, который берёт OAuth-токен от Claude Code и пересылает запросы в Anthropic API с заголовками настоящего Claude Code: user-agent, billing header, client_id. Для Anthropic запрос выглядит идентично тому, как если бы ты сам работал в терминале.
Поставил. Авторизовался через OAuth (прокси даёт ссылку, открываешь в браузере, логинишься, токен сохраняется на сервере). Поднял на localhost. Направил OpenClaw на него и отключил Extra Usage.
Не сработало. Та же ошибка — "You're out of extra usage".
Начал копать дальше
Первое что сделал — отправил простой запрос через curl напрямую в прокси. "Say hi". Работает. Anthropic отвечает, а Extra Usage отключён и всё идет через подписку.
Значит прокси сам по себе работает, а проблема в том, что именно OpenClaw отправляет в теле запроса.
Очевидная гипотеза — Anthropic ищет "OpenClaw" в запросе. В системном промпте OpenClaw прямо написано "You are a personal assistant running inside OpenClaw" — найти очень легко. Плюс ещё 109 упоминаний в промпте.
Написал с Opus промежуточный прокси, который стоит между OpenClaw и CLIProxyAPI, перехватывает тело запроса, заменяет "OpenClaw" на "Assistant" и отправляет дальше в прокси.
Но всё ещё не работает. Приходит та же ошибка.
Начал сужать проблему
Значит детектируют не по слову, и нужно было понять по чему именно. Запрос OpenClaw к API это JSON файл, в котором есть системный промпт, 17 инструментов, история сообщений, метаданные.
Дал задачу Opus, чтобы он перебирал слова и блоки запроса. Убрал историю сообщений, оставил только системный промпт — работает. Добавил tools — не работает. Убрал tools, вернул историю — работает.
Так определил, что дело именно в tools которые передаются в теле запроса. OpenClaw отправляет 17 инструментов (read, write, exec, web_search и так далее). Большинство из них есть и в Claude Code. Но некоторые — уникальные для OpenClaw.
Разбил tools на группы и начал тестировать каждую отдельно:
read, edit, write -- ок
exec, process -- ок
sessions_list, sessions_history, sessions_send -- ок
web_search, web_fetch -- ок
image, memory_search, memory_get -- ок
subagents -- блок
session_status -- блок
Каждая группа по отдельности проходит. Но как только добавляешь subagents или session_status -- всё, запрос улетает в Extra Usage.
Получается, что в Anthropic знают конкретные имена инструментов, которых нет в Claude Code, ищут их, и если находят в теле запроса — отправляют его на Extra Usage. Всего два инструмента из семнадцати — и этого достаточно, чтобы определить что запрос не от Claude Code.
Придумал решение
Поверх CLIProxyAPI сделать еще один прокси, который заменяет имена инструментов в обе стороны.
В запросе: subagents → sub_dispatch, session_status → check_status. Для Anthropic это выглядит как незнакомые, но легитимные кастомные tools.
В ответе обратная замена. Когда модель вызывает sub_dispatch, OpenClaw получает subagents и обрабатывает как обычно. Для streaming-ответов прокси буферизирует каждое событие отдельно и заменяет в каждом.
133 строки на Node.js, никаких зависимостей. Systemd сервис с автозапуском и перезапуском при падении.
Итоговая цепочка получилась такая: OpenClaw → replace-proxy (8318) → CLIProxyAPI (8317) → api.anthropic.com
Что в итоге нужно для настройки
1. CLIProxyAPI
Прокси к Anthropic, имитирующий Claude Code. Нужно авторизоваться, открыть ссылку в браузере и залогиниться. Прокси стартует на выбранном порту.
2. Replace-proxy
Минимальный HTTP-прокси на Node.js, который:
Перехватывает тело запроса и заменяет
subagents→sub_dispatch,session_status→check_status(плюсOpenClaw→Assistantна всякий случай)В ответах делает обратную замену и обрабатывает все построчно
Код очень простой, Opus сделал за минуту.
3. Настройка OpenClaw
В openclaw.json добавить кастомный провайдер:
{ "models": { "providers": { "custom-proxy": { "baseUrl": "<http://localhost>:<порт твой>", "apiKey": "<api-key-из-конфига-CLIProxyAPI>", "api": "anthropic-messages", "models": [ {"id": "claude-opus-4-6", "contextWindow": 1000000, "maxTokens": 16384}, {"id": "claude-sonnet-4-6", "contextWindow": 200000, "maxTokens": 16384} ] } } } }
Сделать его дефолтным, а после перезапустить весь OpenClaw
openclaw config set "agents.defaults.model.primary" "custom-proxy/claude-opus-4-6"
Переключение моделей дальше работает как обычно через чат. Нужно только не забыть прописать все нужные модели в конфиге провайдера.
Важно помнить
Технически это обход ограничений Anthropic. Аккаунт наверное могут забанить. Но думаю, многие готовы пойти на этот риск, потому что альтернатива — платить за каждый токен поверх подписки, которая и так $200/мес.
CLIProxyAPI хранит refresh_token и обновляет access_token сам. Но если refresh_token протухнет нужно будет заново авторизоваться через браузер.
Anthropic может обновить детекцию. Сегодня они ловят по двум tool-ам. Завтра могут начать ловить по структуре промпта, по паттернам запросов, по чему-то ещё. Но прямо сейчас работает.
Я бы не пытался повторить это для коммерческого использования.
Выводы для меня
Весь процесс занял один вечер. Самое интересное для меня не сам результат, а путь к нему. Я не технарь и не пишу код, но генерируя правильные гипотезы и проводя серию экспериментов с ИИ, уже сегодня можно делать вещи, которые раньше требовали серьезных навыков разработки.
