Anthropic и блокировка третьесторонних инструментов: полный технический анализ

Введение

В январе 2026 года Anthropic реализовала строгие технические защиты против использования её моделей Claude через сторонние приложения, нарушив работу популярных инструментов типа OpenCode, Roo Code и других. Это была реакция на годовую практику “спуфинга” (подделки) клиента Claude Code для обхода дорогого API и получения доступа к дешевым подпискам.

Эта статья разбирает:

  1. Как работала схема — техническую часть спуфинга
  2. Кто получал выгоду — экономический арбитраж
  3. Что произошло в итоге — последствия блокировки

Хронология событий

ДатаСобытие
Февраль-март 2025Запуск Claude Code как официального инструмента разработки Anthropic
Июль 2025Первые попытки спуфинга OAuth-токенов подписки в сторонних инструментах
Август 2025Anthropic блокирует использование Claude через OpenAI (сотрудники OpenAI используют Claude для бенчмарка GPT-5)
Сентябрь 2025Первые сообщения об ошибке “This credential is only authorized for use with Claude Code” (Issue #8046 в claude-code repo)
Декабрь 2025Вирусный “Ralph Wiggum” момент — автономные цикли Claude работают 24/7 с минимальными затратами; рост популярности Claude Code
8-9 января 2026, 02:20 UTCAnthropic развёртывает строгие защиты — блокировка OAuth-токенов от подписок в сторонних инструментах
9 января 2026, 02:20+ UTCOpenCode Issue #7410 “Broken Claude Max” — разработчики начинают сообщать об ошибке
9 января 2026, утро UTCHacker News обсуждение набирает 245+ upvotes; 147+ реакций на GitHub
9 января 2026OpenCode команда выпускает PR #14 — попытка обхода через изменение tool prefix
9 января 2026Thariq Shihipar (Anthropic) публикует заявление в X (Twitter): “Yesterday we tightened our safeguards against spoofing the Claude Code harness”
9 января 2026OpenAI объявляет о партнёрстве с OpenCode — поддержка OpenAI моделей в OpenCode
10 января 2026OpenCode выпускает альтернативы: ChatGPT Plus поддержка, OpenCode Black ($200/месяц)
10-13 января 2026Обсуждения в Reddit, Hacker News, GitHub продолжают развиваться

Часть 1: Техническая архитектура спуфинга

1.1 Модель тарификации Anthropic

Ключ к пониманию проблемы лежит в резком различии цен:

Вариант доступаСтоимость в месяцИспользованиеCost per M tokens
Claude Pro/Max ($200)$200~25-50M tokens в месяц (all-you-can-eat)~$4-8 / M
API (pay-as-you-go)ПеременнаяЗависит от использования~$15-30 / M
Типичное использование через агента>$1,000Интенсивное, 24/7 автоматизация~$40+ / M

Claude Pro/Max предназначена для людей (интерактивное использование с ограничениями по сессиям). API предназначена для машин (гибкая тарификация по токенам).

1.2 Как работал OAuth bypass

Шаг 1: Получение токена подписки

Когда пользователь авторизуется в официальном Claude Code через браузер, происходит OAuth-поток:

User → Browser → Claude.ai OAuth → Authorization Code → Access Token

Токен сохраняется локально:

{
  "udaiauth": "-antat01...",
  "token": "sk-ort-...",
  "at": 1754415285,
  "scope": ["org:create_api_key", "user:profile", "user:inference"],
  "subscriptionType": "pro"
}

Файл хранится в ~/.claude/.credentials.json — на машине пользователя.

Шаг 2: Перехват и переиспользование

OpenCode и другие инструменты выполняли следующее:

  1. Чтение локального токена — получали доступ к файлу .credentials.json с OAuth-токеном
  2. Построение поддельных запросов — создавали HTTP-запросы, которые выглядели как от официального Claude Code
  3. Отправка на серверы Anthropic — серверы принимали их как легитимные запросы от Claude Code
// Упрощённый пример
const token = readCredentialsFile("~/.claude/.credentials.json")
 
const headers = {
  Authorization: `Bearer ${token.token}`,
  "X-Claude-Code-Client": "true", // Спуфинг заголовка
  "User-Agent": "Claude-Code-CLI/...",
}
 
// Запрос выглядит как от Claude Code
await fetch("https://api.anthropic.com/v1/messages", {
  headers,
  body: createMessageWithTokenLimit(),
})

Шаг 3: Окружение лимитов

Ключевая часть — как работали лимиты в Claude Code:

  • Официальный Claude Code: примерно 225 сообщений каждые 5 часов (или 900 с Max)
  • Через спуфинг: те же лимиты, но без контроля на стороне инструмента

OpenCode не требовала от пользователя соблюдать эти лимиты потому что:

Claude Code на местной машине → Лимит 225 сообщений/5ч → Пользователь видит
OpenCode → Лимит НА СЕРВЕРЕ Anthropic → Но OpenCode отправляет плотные запросы в цикле

Результат: инструмент просто отправлял столько запросов, сколько его программист написал, пока не ударялся в лимит Anthropic.

1.3 Технические детали спуфинга

На основе обнаруженных деталей, схема включала:

A) HTTP-заголовки

X-Client: claude-code
X-Client-Version: 1.x.x
User-Agent: Claude-Code/...
Accept-Language: ...

B) PKCE Protection (если требовалось переавторизоваться)

OpenCode интерцептировал OAuth-запрос и получал:

code_challenge=E9Melhoa2OwvFrEMTJguCHaoeK1t8URWbuGJSstw-cM
code_challenge_method=S256
scope=org:create_api_key user:profile user:inference

Это PKCE (Proof Key for Code Exchange) — механизм защиты OAuth. OpenCode либо эмулировал его, либо переиспользовал существующие токены (что было проще).

C) Использование “неофициального” API

Согласно одному из авторов инструментов:

“Мы использовали вашу подписку (OAuth) токен для создания запросов с определённым набором заголовков и тела. Этот метод чрезвычайно хрупкий и только OpenCode рискнул пойти этим путём, выбрав не раскрывать спецификации.”


Часть 2: Экономический арбитраж и структура выгоды

2.1 Математика выгоды

Сценарий 1: Интенсивное использование Agent-a (Автоматизация)

Разработчик запускает аварийный цикл, который:

  • Читает код (Sonnet 3.5)
  • Предлагает исправления (Opus 4.5)
  • Тестирует результаты (ещё раз Opus)
  • Итерирует в цикле 50+ раз в день

Через официальный API:

  • 50 iterations × 10M tokens per iteration = 500M tokens/день
  • 500M × 7,500/день** (~$225K/месяц)

Через Claude Max подписку + OpenCode:

  • $200/месяц
  • Экономия: $224,800/месяц или 99.9%

2.2 Кто получал выгоду и как

A. Разработчики (Основные бенефициары)

  • Получали доступ к Opus 4.5 (лучшей модели для кода на 2025)
  • Платили только 1,000-10,000+
  • Использовали инструменты на свой выбор (OpenCode, Roo Code, KiloCode)
Рабочий день разработчика:
- 8 часов работы
- 100-300 автоматизированных запросов к Claude
- Расход через API: $100-300/день
- Расход через подписку + OpenCode: $6.67/день ($200÷30)

B. Компании-разработчики инструментов (OpenCode, Roo Code и т.д.)

Основные инструменты:

  • OpenCode — самый популярный открытый аналог Claude Code
  • Roo Code — интеграция с VS Code
  • KiloCode — агент для разработки
  • TaskMaster AI — автоматизация

Их выгода:

  • Привлечение пользователей — люди выбирали их, потому что с ними можно было использовать дешевую подписку
  • Данные и фидбек — сигналы о том, как люди хотят работать с кодом
  • Взлом Anthropic — косвенно доказывали, что их инструменты лучше (OpenCode имеет лучший интерфейс, чем официальный Claude Code)

C. Anthropic (Отрицательная выгода)

Потери:

  • Потеря монополии на свой API
  • Пользователи “истощали” дешевые подписки агрессивной автоматизацией
  • Риск банкротства: если бы все разработчики перешли на такую схему, то подписки стали бы убыточными

Пример потери: Если 10,000 разработчиков использовали OpenCode с Max подписками:

  • Доход: 10,000 × 2M/месяц**
  • Если бы они использовали API по адекватному использованию: $50-100M/месяц
  • Потеря: $48-98M/месяц

2.3 Почему это работало год

  1. Недостаток видимости — Anthropic не знала, насколько масштабна проблема
  2. Техническая сложность — определить спуфинг через логи сложнее, чем через заголовки
  3. Инерция — запустить проверку безопасности требует инженерных ресурсов
  4. Стимулы — Anthropic, может быть, молчаливо одобряла (рост популярности Claude), пока не стало больно

Часть 3: Блокировка — что сделала Anthropic

3.1 Развёртывание защиты (9 января 2026, 02:20 UTC)

Anthropic вывела обновление, которое добавило:

Уровень 1: Валидация клиента

ДО:
- Проверка: есть ли валидный OAuth-токен? → ДА → Разрешить

ПОСЛЕ:
- Проверка: есть ли валидный OAuth-токен? → ДА → ДАЛЕЕ
- Проверка: запрос идёт из официального Claude Code? → ???

Как они проверяют “официальность”:

Гипотеза (на основе информации о CVE-2025-52882):

1. Localized Token Verification — сгенерировать токен на локальной машине
2. Отправить токен в запросе как часть заголовка
3. Сервер проверяет: этот токен был создан именно для этой машины, этого пользователя?

Пример:

Шаг 1: OpenCode запускается → Сервер создаёт auth token для сеанса
Шаг 2: OpenCode отправляет запрос:
  Authorization: Bearer ${oauth_token}
  X-Session-Auth: ${session_token}  // <- НОВОЕ

Шаг 3: Сервер проверяет:
  - Валиден ли oauth_token? ДА
  - Соответствует ли session_token этому пользователю?
    - Если OpenCode → ДА (токен создан Claude Code)
    - Если OpenCode → НЕТ (токен создан другим инструментом)

Уровень 2: Client Integrity Checks

Похоже на защиту от BotGuard от Google (детально описано в комментариях Hacker News):

// Похоже на то, что делает Anthropic
async function validateClient(request) {
  // 1. Проверить подпись клиента
  const signature = request.headers["x-client-signature"]
  if (!signature) throw new Error("Missing client signature")
 
  // 2. Воспроизвести подпись на сервере
  const expectedSignature = generateSignature(
    request.body,
    request.headers["x-timestamp"],
    CLAUDE_CODE_SECRET_KEY,
  )
 
  // 3. Сравнить через timing-safe comparison
  if (!timingSafeEqual(signature, expectedSignature)) {
    throw new Error("Invalid client signature")
  }
 
  return true
}

Уровень 3: Блокировка OAuth-токенов от подписок

Наиболее важное изменение:

ДО: OAuth-токен от подписки → Можно использовать как API
ПОСЛЕ: OAuth-токен от подписки →
  - Используется ТОЛЬКО в официальном Claude Code/Claude.ai
  - Отклоняется в API запросах
  - Отклоняется в сторонних инструментах

Технически:

def validate_oauth_token(token, requesting_client):
    """
    requesting_client может быть:
    - 'claude-code-cli'
    - 'claude-ai-web'
    - 'api-client-opencode' <- БЛОКИРОВАН
    - 'api-client-roocode' <- БЛОКИРОВАН
    """
 
    if requesting_client not in ALLOWED_CLIENTS:
        return False  # Блокировка
 
    return True

3.2 Результаты блокировки

9 января 2026, 02:20+ UTC — инцидент

OpenCode Issue #7410 “Broken Claude Max”:

As of a few moments ago, usage of claude max stopped with the following error:
[Error] Authentication failed: Client not recognized

Реакция:

  • 166 👍 reactions (люди потеряли работающий инструмент)
  • 325+ комментариев
  • Разработчики сообщали о внезапной блокировке после часов нормальной работы
  • Некоторые отменили подписку на Anthropic сразу же

9 января 2026, утро UTC — Hacker News

Hacker News обсуждение набрало 245+ upvotes и сотни комментариев. Разработчики поделились своим опытом потери важного рабочего инструмента без предупреждения.

9 января 2026 — Официальное заявление Anthropic

Thariq Shihipar (Technical Staff Member в Anthropic, работающий на Claude Code) опубликовал заявление в X (Twitter):

“Yesterday we tightened our safeguards against spoofing the Claude Code harness after accounts were banned for triggering abuse filters from third-party harnesses.”

Признал, что были “непредвиденные последствия” — некоторые аккаунты были заморожены. Anthropic работает над исправлением.

3.3 Попытки обхода

9 января 2026 — OpenCode ответ

OpenCode команда начала работать над обходом:

  1. Изменение tool prefix — PR #14 изменила tool prefix с oc_ на mcp_, попытка обойти начальное обнаружение (не сработало надолго)

  2. ChatGPT Plus поддержка — v1.1.11 добавила поддержку OpenAI OAuth, позволяя пользователям использовать ChatGPT Plus вместо Claude

  3. OpenCode Black — новый премиум-тариф ($200/месяц), маршрутизирующий трафик через enterprise API gateway

Официальное решение Anthropic:

“You can still bring your own Anthropic API key and use Claude in OpenCode. What you can no longer do is reverse engineer undocumented Anthropic APIs and spoof being a Claude Code client.”

Перевод: Используйте свой API ключ (но платите 200/месяц).

9 января 2026 — OpenAI объявляет о партнёрстве

OpenAI публично объявила о партнёрстве с OpenCode, предлагая поддержку своих моделей (GPT-4, GPT-5) в OpenCode. Это было стратегическим ходом для захвата разработчиков, которые потеряли доступ к Claude через OpenCode.


Часть 4: Последствия и политический контекст

4.1 Потери для экосистемы

ГруппаПотеря
РазработчикиДоступ к дешевому Opus 4.5; возврат к платному API или переход на другие модели
OpenCodeПотеря USP (уникального аргумента продажи) — “используйте дешевую подписку”; снижение популярности
AnthropicНекоторые разработчики перейдут на конкурентов (Claude Model остаётся, но они теряют монополию)

4.2 Стратегический контекст

Anthropic защищает:

  1. Ценовую дискриминацию — люди платят 1000+ (другие условия)
  2. Владение экосистемой — Claude Code должен быть “прилипчивым”, как iOS
  3. Данные — все запросы через Claude Code собираются для улучшения модели
  4. Финансовую модель — которая основана на том, что люди будут использовать дешевые подписки только для интерактивной работы

4.3 Сравнение с историческими прецедентами

Это похоже на:

  • Microsoft vs. DR-DOS (1990s) — искусственное блокирование конкурента
  • Google vs. Scraping Tools — блокировка использования сервисов через API если не платишь (SearchGuard, BotGuard)
  • Apple vs. Sideloading — контроль над экосистемой

Основное различие: Anthropic имеет право блокировать нарушение ToS. Вопрос в том, является ли это справедливым и стимулирующим инновации.


Заключение: Выводы

Техническая часть

Спуфинг работал через:

  1. Чтение локального OAuth-токена из ~/.claude/.credentials.json
  2. Подделку HTTP-заголовков (X-Client: claude-code, User-Agent и т.д.)
  3. Переиспользование токена как для API запросов
  4. Эмуляцию PKCE если требовалась новая авторизация

Защита работает через:

  1. Валидацию сеанса — привязка токена к машине/браузеру
  2. Подписи запроса — криптографическая валидация что запрос от официального клиента
  3. Чёрный список клиентов — OAuth-токены от подписок работают ТОЛЬКО в Claude Code и Claude.ai

Выгода

  • Разработчики: сэкономили $1000-10000+ в месяц, получив доступ к лучшей модели
  • OpenCode/инструменты: привлекли пользователей благодаря экономии и лучшему UI
  • Anthropic: потеряла контроль над монетизацией своего API

Результаты

Anthropic закрыла дыру и вынудила пользователей либо:

  • Платить за API ($15-30 per M tokens)
  • Использовать бесплатные или открытые модели
  • Оставаться в экосистеме Claude Code по подписке

Это было предсказуемо, справедливо с юридической точки зрения, но неудачно для пользователей OpenCode.