Zed: настройка ИИ-ассистента на своём ключе

Zed настраивается через settings.json, и провайдер anthropic там ожидает адрес без /v1 — забытая деталь, которая превращается в постоянные 404 в панели ассистента.

4 мин · · Обновлено · IDE

Zed — редактор с текстовым конфигом settings.json, и встроенный ассистент настраивается тоже через него, без отдельной формы для базового URL. Формат простой, но одна деталь ломает всё: провайдер anthropic в Zed ожидает адрес без /v1, а в конфиге он часто оказывается с суффиксом, скопированным откуда-то ещё.

Где менять настройки

Command Palette (Cmd+Shift+P / Ctrl+Shift+P) → zed: open settings открывает личный settings.json. Секция ассистента называется language_models или assistant, в зависимости от версии Zed — если один ключ не подхватывается, проверьте, под каким именем ассистент ищет конфиг в вашей версии через zed: open default settings для сравнения.

Anthropic-совместимая настройка

bash
{
  "language_models": {
    "anthropic": {
      "api_url": "https://api.zukko.pro",
      "api_key": "fetch_ваш_ключ"
    }
  },
  "assistant": {
    "default_model": {
      "provider": "anthropic",
      "model": "claude-sonnet-5"
    }
  }
}

api_url — без /v1. Провайдер anthropic в Zed сам обращается к /v1/messages и подставляет заголовок anthropic-version. Если приписать /v1 вручную, путь задвоится, и каждый запрос будет улетать на несуществующий адрес — это самая частая причина 404 при первом подключении здесь.

OpenAI-совместимая настройка

Если нужны GPT или GLM, используйте провайдер openai_compatible (или openai, в зависимости от версии Zed):

bash
{
  "language_models": {
    "openai_compatible": {
      "zukko": {
        "api_url": "https://api.zukko.pro/v1",
        "api_key": "fetch_ваш_ключ",
        "available_models": [
          { "name": "gpt-5.6-sol" },
          { "name": "gpt-5.6-luna" },
          { "name": "glm-5.3" }
        ]
      }
    }
  }
}

Здесь api_url — с /v1: этот провайдер ходит на /chat/completions относительно указанного адреса.

Проверка ключа перед тем, как копаться в JSON

Прежде чем разбирать settings.json построчно, убедитесь, что ключ вообще работает:

bash
curl https://api.zukko.pro/v1/messages \
  -H "Authorization: Bearer fetch_ваш_ключ" \
  -H "Content-Type: application/json" \
  -H "anthropic-version: 2023-06-01" \
  -d '{"model":"claude-sonnet-5","max_tokens":64,"messages":[{"role":"user","content":"ping"}]}'

Ответ пришёл — значит дело в конфиге Zed, а не в ключе или балансе. Дальше стоит проверить самое частое: лишнюю запятую в JSON. settings.json не прощает висячую запятую перед закрывающей скобкой — файл в этом случае тихо не применяется, и Zed продолжает работать со старыми (или пустыми) настройками, без явной ошибки в интерфейсе.

Как читать ошибки от API

  • 401 — ключ не принят: {"error":{"message":"Invalid API key. Use Authorization: Bearer fetch_*","type":"authentication_error"}}. Проверьте, что в JSON ключ в кавычках и без лишних пробелов.
  • 402 — баланс пуст: {"error":{"message":"Недостаточно средств на балансе","code":"insufficient_balance"}}. Проверка идёт до обращения к модели, неудачный запрос ничего не стоит.
  • 404 model_not_found — имя модели не совпадает с каталогом. Точный список без ключа: curl https://api.zukko.pro/v1/models.
  • 400 model_retired — модель сняли с обслуживания, замена указана в самом сообщении об ошибке.
  • 503 model_disabled — модель выключена в каталоге; замените её в settings.json на одну из актуальных.
  • 429 — от Zukko это только лимит конкретного ключа (key_daily_limit_reached со сбросом в 00:00 UTC / key_monthly_limit_reached), если он настроен в кабинете; общего rate limit на шлюзе нет, прочие 429 приходят от провайдера модели.

Что стоит знать про модели в Zed

Сейчас в каталоге шесть моделей: claude-opus-5-5, claude-sonnet-5, gpt-5.6-sol, gpt-5.6-luna, glm-5.3 и glm-5.3-flash (актуальный список — GET https://api.zukko.pro/v1/models). Модели Claude и GPT поддерживают vision и контекст 1,000,000 токенов, так что вставка скриншотов и больших файлов в контекст ассистента Zed на них работает; у glm-5.3 и glm-5.3-flash контекст 128K и изображения они не принимают.

Лимиты, стоимость и деньги

Обычные (не потоковые) ответы API несут заголовки X-Zukko-Cost-Micros (стоимость запроса в микродолларах, 1,000,000 = $1) и X-Fetch-Balance-Cents (остаток после списания, тоже в микродолларах) — они полезны, если вы дергаете тот же ключ скриптами параллельно с редактором. Сам ассистент Zed получает ответы потоково, а у потоковых ответов этих заголовков нет — его расход смотрите в кабинете, через GET /v1/usage или GET /v1/balance.

На странице ключа в кабинете https://zukko.pro/app/api-keys можно выставить дневной или месячный лимит расхода в долларах и ограничить список разрешённых моделей. Пополнение — СБП, карта через PayPear, крипта, иностранная карта Mastercard EU через Fride (комиссия около 13%, суммы $2–$594); минимум — $1. Разовый бонус $0.50 — за подписку на @zukkopro: привязка Telegram в кабинете, подписка, кнопка «Проверить»; один раз на Telegram-аккаунт. Стартового баланса при обычной регистрации нет.

Поддержка — https://t.me/zukkopro?direct.

Бесплатный подсчёт токенов

Прежде чем вставлять в ассистента Zed большой файл или несколько сразу, можно узнать их вес в токенах без реального запроса и без списания — эндпоинт /v1/messages/count_tokens только считает:

bash
curl https://api.zukko.pro/v1/messages/count_tokens \
  -H "Authorization: Bearer fetch_ваш_ключ" \
  -H "Content-Type: application/json" \
  -H "anthropic-version: 2023-06-01" \
  -d '{"model":"claude-sonnet-5","messages":[{"role":"user","content":"текст запроса"}]}'

Это особенно полезно для контекста в 1,000,000 токенов (у моделей Claude и GPT): сама по себе такая ёмкость не защищает от того, что конкретный собранный контекст окажется дороже, чем ожидалось.

Веб-поиск для моделей без него

Если в settings.json настроена модель без встроенного поиска в сети — например, GLM — а задаче в ассистенте Zed нужны свежие данные, тем же ключом можно вызвать POST /v1/web-search отдельно от основного диалога и вставить результат в промпт вручную.

Если settings.json синхронизируется между машинами

Zed поддерживает синхронизацию настроек, и ключ в settings.json может незаметно оказаться на второй машине или у другого разработчика. В этом случае стоит сразу задать лимиты на странице ключа в кабинете и периодически проверять GET /v1/usage — история списаний с курсорной пагинацией (общая на весь аккаунт, по всем ключам) покажет, действительно ли расход соответствует только вашей работе.

zukko

Платите в 25×
меньше

за Claude Code & ChatGPT

Один ключ fetch_* и base URL api.zukko.pro — в Cursor, Claude Code, Codex и любом SDK.

Zed: настройка ассистента на своём API-ключе · Zukko