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

Не работает. И причина этого интереснее самой новости, потому что она объясняет, какие инструменты вообще устойчивы к таким событиям, а какие нет.

Я каждый день работаю с моделями по API, и мне пришлось разбираться в этом не из любопытства. Ниже — разбор архитектуры и то, что из него следует практически.

Что мы обычно называем «AI‑редактором»

Со стороны пользователя AI‑редактор выглядит как один продукт: пишешь код, рядом чат, сверху автодополнение. На деле это как минимум пять независимых подсистем, и живут они в разных местах.

Слой

Что делает

Где выполняется

Аутентификация

пускает вас в рабочий режим

облако вендора

Автодополнение (Tab)

дописывает код по мере набора

собственная модель вендора

Агент

планирует шаги, вызывает инструменты

оркестрация на стороне вендора

Индекс проекта

эмбеддинги файлов для поиска по коду

облако вендора

Чат с моделью

запрос‑ответ

провайдер модели

Поле «свой API‑ключ» влияет ровно на последнюю строку таблицы. Всё остальное идёт через инфраструктуру вендора — и именно она отключается, когда речь про региональные ограничения.

Отсюда первый практический вывод: вопрос «можно ли подставить свой ключ» и вопрос «переживёт ли инструмент отключение вендора» — разные вопросы. Первый про экономику, второй про архитектуру.

Почему индекс проекта — отдельная проблема

Индексация заслуживает отдельного абзаца, потому что о ней вспоминают в последнюю очередь.

Чтобы агент отвечал «где у нас валидируется токен», ему нужен семантический поиск по репозиторию. Это значит, что файлы разбиваются на фрагменты, для каждого считаются эмбеддинги, и всё это где‑то хранится. У облачных редакторов «где‑то» — это их серверы.

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

Классификация инструментов по «облачной привязке»

Если разложить популярные инструменты по тому, сколько у них собственного облака, картина получается такая.

Полный вертикальный стек. Редактор, авторизация, агент, индекс и автодополнение — всё своё, ключ можно подставить только в чат. Максимум удобства и минимум контроля: любое решение вендора вы получаете целиком.

Агент‑расширение поверх чужого редактора — Cline, Roo‑подобные форки, Continue. Расширение живёт в вашем VS Code, состояние — на диске, запросы идут прямо на тот адрес, который вы указали. Промежуточного сервиса нет: некому проверять, из какой вы страны.

Терминальные агенты — Claude Code, Codex CLI, aider. Здесь всё принадлежит вам, кроме самой модели. Плата за это — отсутствие интеграции с редактором и другая эргономика: агент не «дополняет строку», а выполняет задачу целиком.

Редакторы с подключаемым провайдером — например, Zed: свой редактор, но модель добавляется как обычный OpenAI‑совместимый провайдер.

Разница не в качестве, а в том, кто владеет цепочкой. Чем длиннее чужая часть цепочки, тем больше событий вне вашего контроля способны её оборвать — и региональные ограничения тут только один из сценариев. В том же ряду стоят изменение тарифов, закрытие бесплатного плана, смена модели «по умолчанию» и остановка проекта вендором.

Практика: три параметра, которые нужны всегда

Настройка любого из перечисленных инструментов сводится к трём вещам — адресу API, ключу и идентификатору модели. Дальше просто разные места, куда это вписывается.

Cline (расширение VS Code) — в настройках выбирается провайдер OpenAI Compatible, затем заполняются Base URLAPI KeyModel ID. Конфигурационного файла у него нет, настройки лежат внутри VS Code.

Continue.dev — ~/.continue/config.yaml:

models:
  - name: Основная модель
    provider: openai
    model: <идентификатор-модели>
    apiBase: https://<адрес-провайдера>/v1
    apiKey: <ключ>
    roles: [chat, edit]

Codex CLI — ~/.codex/config.toml, провайдер описывается блоком, а ключ берётся из переменной окружения, а не из файла:

model_provider = "custom"
model = "<идентификатор-модели>"

[model_providers.custom]
name = "Custom"
base_url = "https://<адрес-провайдера>/v1"
env_key = "CUSTOM_API_KEY"
wire_api = "chat"

Claude Code — две переменные окружения:

export ANTHROPIC_BASE_URL=https://<адрес-провайдера>
export ANTHROPIC_AUTH_TOKEN=<ключ>

Zed — провайдер добавляется в настройках агента либо прямо в settings.json:

{
  "language_models": {
    "openai_compatible": {
      "custom": {
        "api_url": "https://<адрес-провайдера>/v1",
        "available_models": [
          { "name": "<идентификатор>", "display_name": "Модель", "max_tokens": 200000 }
        ]
      }
    }
  }
}

Общее правило, на котором спотыкаются чаще всего: базовый адрес — это именно база, обычно оканчивающаяся на /v1. Дописывать туда /chat/completions не нужно, библиотека добавит путь сама, иначе получится /v1/chat/completions/chat/completions и загадочный 404.

Чего лишаешься при переезде

Честно про минусы, иначе разбор неполный.

Автодополнение уровня Tab. Это отдельная быстрая модель, обученная вендором под свой продукт, и открытого эквивалента такого же качества нет. Автодополнение Continue работает, но ощущается иначе.

Единый UX. В вертикальном стеке чат, агент и индекс знают друг о друге. Собрав то же самое из расширения и терминального агента, вы получите набор инструментов, а не продукт.

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

Здесь же практический совет, экономящий больше всего: включайте кэширование контекста, если провайдер его поддерживает. В агентских сценариях один и тот же проект уезжает в модель десятки раз подряд, и чтение из кэша обычно дешевле обычного ввода на порядок. На реальном профиле нагрузки — агент, 27 тысяч токенов контекста, 76 запросов подряд — доля кэша дошла до 86% входных токенов, а счёт оказался вчетверо ниже, чем был бы без него.

Что из этого следует

Я не считаю, что вертикальные AI‑редакторы — плохая идея. У них лучший UX на рынке, и купили их не зря.

Но стоит понимать, за что именно платишь: часть цены — это удобство, а часть — зависимость от решений вендора, включая те, которые он принимает не по техническим причинам. Если непрерывность работы для вас важнее последних 10% удобства, разумно держать рабочий процесс на инструментах, где чужой в цепочке только сама модель. Тогда любое отключение чинится сменой адреса и ключа, а не переездом между редакторами

И, пожалуй, главный вывод, который я вынесла из этой истории: проверять надо не «есть ли поле для своего ключа», а «что перестанет работать, если вендор завтра скажет нет». Ответ на второй вопрос обычно длиннее, чем ожидаешь.