Интеграции
OpenCode
Добавьте NotHoly как провайдер в opencode.json.
Для notholy run opencode нужен установленный CLI NotHoly, в котором выполнен вход (Установка CLI), и сам OpenCode: npm i -g @opencode/cli. Для ручной настройки ниже нужен только API-ключ.
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 ищет файл там.
{
"$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 уже запущен, перезапустите его: он читает переменную при старте.
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, поэтому ему нужна такая версия файла. Фонового сервиса у него нет, а переменную он читает ту же.
{
"$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 работают с обеими версиями.