# Работа с OpenCode

Подключите OpenCode к Nodul Router плагином — в нем останутся только модели вашего ключа.

[OpenCode](https://opencode.ai) — агент для программирования. Плагин [nodul.code.plugin](https://github.com/nodul-app/nodul.code.plugin) для OpenCode 2.2+ делает Nodul Router единственным LLM-провайдером:

- список моделей берется из `GET /api/v1/models` с вашим ключом (см. [Модели вашего ключа](/docs/ru/api/models#модели-вашего-ключа)): если ключ ограничен частью моделей, OpenCode покажет только их;
- в списке только модели с возможностью **Инструменты**: агенту OpenCode они нужны на каждом шаге;
- остальные LLM-провайдеры скрыты, интеграции веб-поиска (Exa, Firecrawl, Parallel, Tavily, TinyFish) остаются;
- модель по умолчанию — `ru-2/deepseek-v4.1-flash`; если ключу она недоступна, выбирается первая доступная;
- список обновляется при запуске, при смене ключа и каждые 10 минут.

## Установка

1. Создайте API-ключ в пространстве Router (см. [Быстрый старт](/docs/ru/quickstart)).

2. Установите [OpenCode Desktop](https://opencode.ai/download).

3. Установите плагин. На macOS:

   ```bash
   /Applications/OpenCode.app/Contents/Resources/opencode-cli plugin add 'git+https://github.com/nodul-app/nodul.code.plugin.git'
   ```

   Если CLI `opencode` есть в `PATH`, можно короче: `opencode plugin add 'git+https://github.com/nodul-app/nodul.code.plugin.git'`.

4. Перезапустите фоновый сервис и OpenCode:

   ```bash
   /Applications/OpenCode.app/Contents/Resources/opencode-cli service restart
   ```

5. Откройте **Settings → Providers → Nodul Router** и вставьте ключ Router (`sk-nr-…`).

Вместо ввода ключа в интерфейсе можно задать переменную окружения `NODUL_ROUTER_API_KEY`.

## Обновление

OpenCode раз в сутки проверяет, есть ли новая версия плагина. Чтобы поставить ее:

```bash
/Applications/OpenCode.app/Contents/Resources/opencode-cli plugin update
```

## Настройки

Если нужно, задайте настройки плагина в `~/.config/opencode/opencode.json`:

```json
{
  "plugins": [
    {
      "package": "git+https://github.com/nodul-app/nodul.code.plugin.git",
      "options": { "defaultModel": "deepseek/deepseek-v4.1-flash" }
    }
  ]
}
```

| Опция          | По умолчанию                     | Что делает             |
| -------------- | -------------------------------- | ---------------------- |
| `defaultModel` | `ru-2/deepseek-v4.1-flash`       | ID модели по умолчанию |
| `baseURL`      | `https://router.nodul.ru/api/v1` | Адрес API роутера      |

## Что важно знать

- **Цены.** Роутер считает в PnP (1 PnP = 100 ₽, см. [Цены и оплата](/docs/ru/pricing-and-billing#pnp)), а OpenCode показывает эти числа со знаком `$`. Точные расходы смотрите в логах кабинета.
- **Бюджет.** Агент отправляет длинные промпты: задайте бюджет на ключе.
- **Первые секунды после запуска сервиса.** Пока плагин загружается, могут мелькнуть другие провайдеры.
- **Свой `provider` или `model` в `opencode.json`.** Эти настройки применяются после плагина и перекрывают его. Чтобы был виден только Nodul Router, не описывайте в конфиге свой провайдер `nodul` и других провайдеров.

## Если раньше Nodul был настроен вручную

Удалите из `~/.config/opencode/opencode.json` блок `provider.nodul`, а также `model`, `small_model` и `enabled_providers`, если вы их добавляли. Затем уберите переменные фонового сервиса, если задавали их:

```bash
/Applications/OpenCode.app/Contents/Resources/opencode-cli service unset env OPENCODE_MODELS_PATH
/Applications/OpenCode.app/Contents/Resources/opencode-cli service unset env OPENCODE_DISABLE_FREE_MODELS
```

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

| Симптом                          | Что делать                                                                                                   |
| -------------------------------- | ------------------------------------------------------------------------------------------------------------ |
| Nodul Router просит войти заново | Роутер ответил `401`: ключ неверный, отключен или истек. Введите новый ключ.                                 |
| Нет моделей                      | Проверьте, что ключ введен и что в кабинете ему доступна хотя бы одна модель с возможностью **Инструменты**. |
| Видны другие провайдеры          | Проверьте `opencode.json`: в нем не должно быть своих `provider`. Перезапустите сервис (`service restart`).  |
| `402` при запросе                | У плательщика мало средств или исчерпан бюджет ключа.                                                        |

Другие агенты (Cursor, Cline, Roo Code, Kilo Code, Continue) подключаются как OpenAI-совместимый провайдер: см. [Агенты в IDE](/docs/ru/ide-agents).
