В начале сентября разработчики в ряде регионов увидели в Cursor сообщение not available in your region, а у части пользователей отменились платные подписки. Первый совет, разошедшийся по чатам, звучал логично: в настройках есть поле для своего ключа OpenAI и переопределение базового адреса — подставьте туда любой доступный эндпоинт. На практике это не сработало, и причина интереснее самой новости.

Со стороны ИИ-редактор выглядит как один продукт: пишешь код, рядом чат, сверху автодополнение. На деле это минимум пять независимых подсистем. Аутентификация пускает вас в рабочий режим и выполняется в облаке вендора. Автодополнение (Tab) дописывает код по мере набора — это собственная модель вендора. Агент планирует шаги и вызывает инструменты, оркестрация идёт на стороне вендора. Индекс проекта считает эмбеддинги файлов для поиска по коду и хранится в облаке вендора. И только чат с моделью уходит напрямую к провайдеру. Поле «свой API-ключ» влияет ровно на последнюю строку. Всё остальное идёт через инфраструктуру вендора — и именно она отключается, когда речь про региональные ограничения. Отсюда вывод: вопрос «можно ли подставить свой ключ» и вопрос «переживёт ли инструмент отключение вендора» — разные вопросы. Первый про экономику, второй про архитектуру.

СлойЧто делаетГде выполняется
Аутентификацияпускает вас в рабочий режимоблако вендора
Автодополнение (Tab)дописывает код по мере наборасобственная модель вендора
Агентпланирует шаги, вызывает инструментыоркестрация на стороне вендора
Индекс проектаэмбеддинги файлов для поиска по кодуоблако вендора
Чат с модельюзапрос-ответпровайдер модели

Индексация заслуживает отдельного абзаца, потому что о ней вспоминают в последнюю очередь. Чтобы агент отвечал «где у нас валидируется токен», ему нужен семантический поиск по репозиторию. Файлы разбиваются на фрагменты, для каждого считаются эмбеддинги, и всё это где-то хранится. У облачных редакторов «где-то» — это их серверы. Отсюда два следствия. Первое: даже с вашим ключом код всё равно уходит на сторону вендора — просто не в модель, а в индекс. Второе: индекс — ещё одна точка отказа, полностью независимая от того, чей ключ вы вставили.

Поле «свой API-ключ» в Cursor влияет только на чат, тогда как авторизация, автодополнение, агент и индекс проекта идут через инфраструктуру вендора

Если разложить популярные инструменты по тому, сколько у них собственного облака, картина получается такая. Полный вертикальный стек — редактор, авторизация, агент, индекс и автодополнение свои, ключ можно подставить только в чат. Максимум удобства и минимум контроля: любое решение вендора вы получаете целиком. Агент-расширение поверх чужого редактора — Cline, Roo-подобные форки, Continue. Расширение живёт в вашем VS Code, состояние — на диске, запросы идут прямо на тот адрес, который вы указали. Промежуточного сервиса нет: некому проверять, из какой вы страны. Терминальные агенты — Claude Code, Codex CLI, aider. Здесь всё принадлежит вам, кроме самой модели. Плата за это — отсутствие интеграции с редактором и другая эргономика: агент не «дополняет строку», а выполняет задачу целиком. Редакторы с подключаемым провайдером — например, Zed: свой редактор, но модель добавляется как обычный OpenAI-совместимый провайдер. Разница не в качестве, а в том, кто владеет цепочкой. Чем длиннее чужая часть цепочки, тем больше событий вне вашего контроля способны её оборвать — и региональные ограничения тут только один из сценариев. В том же ряду стоят изменение тарифов, закрытие бесплатного плана, смена модели «по умолчанию» и остановка проекта вендором.

Настройка любого из перечисленных инструментов сводится к трём вещам — адресу API, ключу и идентификатору модели. Дальше просто разные места, куда это вписывается. В Cline (расширение VS Code) выбирается провайдер OpenAI Compatible, затем заполняются Base URL, API Key, Model ID; конфигурационного файла нет, настройки лежат внутри VS Code. В Continue.dev — файл ~/.continue/config.yaml с блоком models, где указываются name, provider: openai, model, apiBase, apiKey и roles: [chat, edit]. В Codex CLI — ~/.codex/config.toml, провайдер описывается блоком, а ключ берётся из переменной окружения, а не из файла: model_provider = "custom", model = "<идентификатор-модели>", [model_providers.custom] с полями name, base_url, env_key, wire_api. В Claude Code — две переменные окружения: ANTHROPIC_BASE_URL и ANTHROPIC_AUTH_TOKEN. В Zed провайдер добавляется в настройках агента или прямо в settings.json через блок language_models.openai_compatible. Общее правило, на котором спотыкаются чаще всего: базовый адрес — это именно база, обычно оканчивающаяся на /v1, и дописывать туда /chat/completions не нужно.