Подключение Zed к vibecode.moe

Zed

Zed подключает модели через два разных провайдера: openai_compatible для GPT, Gemini, Grok и DeepSeek, и anthropic_compatible для Claude. Оба берут api_url из настроек, ключ — один и тот же vk-. Ставить ничего не нужно, всё правится в settings.json.

·

Открыть настройки: Ctrl/Cmd+Shift+P → zed: open settings (файл settings.json), либо agent: open settings — панель, где вводится ключ.

A

GPT / Gemini / Grok / DeepSeek — блок openai_compatible. Имя провайдера (vibecode) — твоё, оно же задаёт имя переменной окружения для ключа.

{
  "language_models": {
    "openai_compatible": {
      "vibecode": {
        "api_url": "https://vibecode.moe/v1",
        "available_models": [
          {
            "name": "gpt-6-astra",
            "display_name": "GPT 6 Astra",
            "max_tokens": 1000000,
            "max_completion_tokens": 32000,
            "reasoning_effort": "medium",
            "capabilities": { "tools": true, "images": true, "parallel_tool_calls": false, "prompt_cache_key": true }
          },
          {
            "name": "gemini-3.8-flash",
            "display_name": "Gemini 3.8 Flash",
            "max_tokens": 1000000,
            "max_completion_tokens": 32000,
            "capabilities": { "tools": true, "images": true, "parallel_tool_calls": false, "prompt_cache_key": false }
          },
          {
            "name": "grok-4-6",
            "display_name": "Grok 4.6",
            "max_tokens": 256000,
            "max_completion_tokens": 32000,
            "capabilities": { "tools": true, "images": false, "parallel_tool_calls": false, "prompt_cache_key": false }
          },
          {
            "name": "grok-4-7",
            "display_name": "Grok 4.7",
            "max_tokens": 256000,
            "max_completion_tokens": 32000,
            "capabilities": { "tools": true, "images": false, "parallel_tool_calls": false, "prompt_cache_key": false }
          },
          {
            "name": "deepseek-flash",
            "display_name": "DeepSeek Flash",
            "max_tokens": 600000,
            "max_completion_tokens": 32000,
            "capabilities": { "tools": true, "images": true, "parallel_tool_calls": false, "prompt_cache_key": false }
          },
          {
            "name": "glm-5.3-flash",
            "display_name": "GLM 5.3 Flash",
            "max_tokens": 800000,
            "max_completion_tokens": 32000,
            "capabilities": { "tools": true, "images": false, "parallel_tool_calls": false, "prompt_cache_key": false }
          },
          {
            "name": "glm-5.3-flashx",
            "display_name": "GLM 5.3 FlashX",
            "max_tokens": 800000,
            "max_completion_tokens": 32000,
            "capabilities": { "tools": true, "images": false, "parallel_tool_calls": false, "prompt_cache_key": false }
          }
        ]
      }
    }
  }
}

Копируй capabilities целиком. Zed требует все четыре поля — tools, images, parallel_tool_calls, prompt_cache_key: если хоть одного нет, settings.json подсветит ошибку вида «missing field». "tools": true даёт агенту читать и править файлы — без него модель только разговаривает. prompt_cache_key включает кэш промпта на GPT-моделях: без него каждый запрос считается как холодный.

B

Claude — отдельный блок anthropic_compatible: Claude-модели говорят на своём протоколе и через openai_compatible не подключатся (вернётся ошибка «only available via /v1/messages»). Обрати внимание: тут api_url без /v1 — Zed допишет путь сам.

{
  "language_models": {
    "anthropic_compatible": {
      "vibecode-claude": {
        "api_url": "https://vibecode.moe",
        "available_models": [
          {
            "name": "claude-opus-5-5",
            "display_name": "Claude Opus 5.5",
            "max_tokens": 1000000,
            "max_output_tokens": 32000,
            "capabilities": { "tools": true, "images": true, "prompt_caching": true }
          },
          {
            "name": "claude-opus-5",
            "display_name": "Claude Opus 5",
            "max_tokens": 1000000,
            "max_output_tokens": 32000,
            "capabilities": { "tools": true, "images": true, "prompt_caching": true }
          },
          {
            "name": "claude-sonnet-5",
            "display_name": "Claude Sonnet 5",
            "max_tokens": 1000000,
            "max_output_tokens": 32000,
            "capabilities": { "tools": true, "images": true, "prompt_caching": true }
          }
        ]
      }
    }
  }
}

Здесь в capabilities свои три поля — tools, images, prompt_caching, и Zed тоже требует все три.

C

Ключ — в settings.json его класть не нужно и не следует. Два рабочих способа:

  • Через интерфейс: agent: open settings → LLM Providers → свой провайдер → вставить vk-YOUR-KEY. Zed кладёт его в системный keychain.
  • Через переменную окружения: имя выводится из имени провайдера в верхнем регистре — для vibecode это VIBECODE_API_KEY, для vibecode-claude — VIBECODE_CLAUDE_API_KEY. Непустая переменная имеет приоритет над keychain.

Переменную Zed читает из окружения, в котором он запущен — на macOS запуск из Dock не видит того, что прописано в ~/.zshrc. Если ключ «не подхватывается», это почти всегда оно: проще ввести через интерфейс.

D

Выбрать модель — открой Agent Panel (Ctrl/Cmd+?) и выбери модель в списке внизу: она будет подписана именем провайдера. Полный список доступных name — на странице моделей, они же отдаются по GET https://vibecode.moe/v1/models.

·

Если что-то не работает

  • Модель не появилась в списке — settings.json не перечитан или в нём синтаксическая ошибка: Zed покажет её прямо в редакторе. Проверь, что блок лежит внутри language_models, а не на верхнем уровне.
  • Ошибка «missing field» в settings.json — в capabilities не хватает поля (чаще всего parallel_tool_calls). Скопируй строку capabilities из блока выше целиком.
  • Агент отвечает, но не трогает файлы — не задан "tools": true в capabilities.
  • 401 — ключ не дошёл: проверь, что он вставлен именно у этого провайдера, и что переменная окружения не перебивает его пустым значением.
  • «only available via /v1/messages» — Claude-модель попала в openai_compatible. Перенеси её в блок B.