# OpenCode

> Добавьте NotHoly как провайдер в opencode.json.


Для `notholy run opencode` нужен установленный CLI NotHoly, в котором выполнен вход ([Установка CLI](/ru/cli/install)), и сам OpenCode: `npm i -g @opencode/cli`. Для ручной настройки ниже нужен только API-ключ.

```bash
notholy run opencode
```

Эти настройки существуют только на время запуска, на отдельном приватном сервере OpenCode. Ваши файлы OpenCode и его фоновый сервис остаются как были.

`notholy connect opencode` записывает те же настройки в `~/.config/opencode/opencode.json` и сохраняет другие ваши провайдеры. Сначала он делает бэкап, а `notholy connect opencode --undo` его восстанавливает.

`connect` также добавляет MCP-сервер `notholy` в раздел `mcp` этого файла, а `notholy run opencode` передаёт тот же сервер только на этот запуск. Оба используют абсолютный путь к этому CLI и сохранённый вход.

## Ручная настройка

Добавьте провайдер в `~/.config/opencode/opencode.json`. В Windows файл находится здесь: `%USERPROFILE%\.config\opencode\opencode.json`. Если задана `XDG_CONFIG_HOME`, OpenCode ищет файл там.

```json
{
  "$schema": "https://opencode.ai/config.json",
  "model": "notholy/notholy-specter",
  "providers": {
    "notholy": {
      "name": "NotHoly",
      "env": ["NOTHOLY_API_KEY"],
      "package": "@opencode/ai/providers/openai-compatible",
      "settings": { "baseURL": "https://api.notholy.com/v1" },
      "models": {
        "notholy-specter": { "name": "NotHoly Specter", "capabilities": { "tools": true, "input": ["text"], "output": ["text"], "reasoning": { "supported": true, "effort": ["low", "high", "max"] } }, "limit": { "context": 1048576, "output": 131072 } },
        "notholy-pulse": { "name": "NotHoly Pulse Flash", "capabilities": { "tools": true, "input": ["text", "image"], "output": ["text"], "reasoning": { "supported": true, "effort": ["low", "high", "max"] } }, "limit": { "context": 1048576, "output": 131072 } },
        "notholy-vector": { "name": "NotHoly Vector Flash 1017", "capabilities": { "tools": true, "input": ["text", "image"], "output": ["text"], "reasoning": { "supported": true, "effort": ["off", "low", "high", "max"] } }, "limit": { "context": 1048576, "output": 131072 } },
        "notholy-wisp": { "name": "NotHoly Wisp Flash", "capabilities": { "tools": true, "input": ["text", "image"], "output": ["text"], "reasoning": { "supported": true, "effort": ["off", "low", "high", "max"] } }, "limit": { "context": 1048576, "output": 131072 } }
      }
    }
  }
}
```

Запишите ключ в `NOTHOLY_API_KEY`. В PowerShell это `$env:NOTHOLY_API_KEY = "nh_live_..."`. Если фоновый сервис OpenCode уже запущен, перезапустите его: он читает переменную при старте.

```bash
export NOTHOLY_API_KEY="nh_live_..."
opencode service restart
opencode models
```

Модели NotHoly появятся в этом списке как `notholy/...`. Каждый уровень из `effort` — это вариант, который можно выбрать, добавив его к модели: `opencode run -m notholy/notholy-specter#<level> "..."`.

Если лимиты или уровни изменятся, сверьте их с `GET /v1/models`.

## OpenCode 1

Пакет `opencode-ai` в npm — это OpenCode 1. Он игнорирует `providers`, поэтому ему нужна такая версия файла. Фонового сервиса у него нет, а переменную он читает ту же.

```json
{
  "$schema": "https://opencode.ai/config.json",
  "model": "notholy/notholy-specter",
  "provider": {
    "notholy": {
      "npm": "@ai-sdk/openai-compatible",
      "name": "NotHoly",
      "options": { "baseURL": "https://api.notholy.com/v1", "apiKey": "{env:NOTHOLY_API_KEY}" },
      "models": {
        "notholy-specter": { "name": "NotHoly Specter", "tool_call": true, "reasoning": true, "attachment": false, "modalities": { "input": ["text"], "output": ["text"] }, "limit": { "context": 1048576, "output": 131072 }, "variants": { "low": { "reasoningEffort": "low" }, "high": { "reasoningEffort": "high" }, "max": { "reasoningEffort": "max" } } },
        "notholy-pulse": { "name": "NotHoly Pulse Flash", "tool_call": true, "reasoning": true, "attachment": true, "modalities": { "input": ["text", "image"], "output": ["text"] }, "limit": { "context": 1048576, "output": 131072 }, "variants": { "low": { "reasoningEffort": "low" }, "high": { "reasoningEffort": "high" }, "max": { "reasoningEffort": "max" } } },
        "notholy-vector": { "name": "NotHoly Vector Flash 1017", "tool_call": true, "reasoning": true, "attachment": true, "modalities": { "input": ["text", "image"], "output": ["text"] }, "limit": { "context": 1048576, "output": 131072 }, "variants": { "off": { "reasoningEffort": "off" }, "low": { "reasoningEffort": "low" }, "high": { "reasoningEffort": "high" }, "max": { "reasoningEffort": "max" } } },
        "notholy-wisp": { "name": "NotHoly Wisp Flash", "tool_call": true, "reasoning": true, "attachment": true, "modalities": { "input": ["text", "image"], "output": ["text"] }, "limit": { "context": 1048576, "output": 131072 }, "variants": { "off": { "reasoningEffort": "off" }, "low": { "reasoningEffort": "low" }, "high": { "reasoningEffort": "high" }, "max": { "reasoningEffort": "max" } } }
      }
    }
  }
}
```

Проверьте результат командой `opencode models notholy`. `notholy run` и `notholy connect` работают с обеими версиями.

## Что дальше

- [Models API](/ru/api/models)
