ドキュメント
opencode
opencodeはVercel AI SDKを使ってプロバイダーを構成します。そのため、新しいエンドポイントへの接続は、npmパッケージとbaseURLを指定する1つのブロックで設定できます。指定するパッケージによって、使用する2種類のワイヤー形式のいずれかが決まります。
opencode.json内の1つのプロバイダーブロック — チャット補完には@ai-sdk/openai-compatible、/v1/responsesサーフェスを使う場合は@ai-sdk/openai。
{
"$schema": "https://opencode.ai/config.json",
"provider": {
"kunavo": {
"npm": "@ai-sdk/openai-compatible",
"name": "Kunavo",
"options": {
"baseURL": "https://api.kunavo.com/v1",
"apiKey": "{env:KUNAVO_API_KEY}"
},
"models": {
"claude-sonnet-5": {
"name": "Claude Sonnet 5",
"limit": { "context": 200000, "output": 64000 }
},
"claude-haiku-4-5": { "name": "Claude Haiku 4.5" }
}
}
}
}npmフィールドでワイヤー形式を選択します。@ai-sdk/openai-compatibleは/v1/chat/completionsを使用し、@ai-sdk/openaiは/v1/responsesを使用します。Kunavoは両方に対応しているため、どちらも使えます。GPTファミリーでreasoning itemを引き継ぎたい場合はResponsesパッケージを使用し、それ以外の場合はchat-completionsパッケージを使用してください。"apiKey": "{env:KUNAVO_API_KEY}"は読み込み時に環境変数からキーを取得します。opencode.jsonはリポジトリに含まれるファイルです。キーを直接記述しても秘密は保てません。limit.contextとlimit.outputを設定します。opencodeはこれらの数値を基に残りのコンテキストを追跡するため、設定しないモデルは、そのモデル固有の値ではなくデフォルト値で予算が計算されます。sk-kn-で始まります)。$10からクレジットを追加すると、呼び出しはその残高から支払われ、失敗した呼び出しは課金されません。ダッシュボードを開くと、opencode設定が表示されます。手順
/app/keysでキーを作成してコピーします。キーは一度だけ表示されます。- 次の値をエクスポートします。
export KUNAVO_API_KEY=sk-kn-... - プロバイダーブロックを
opencode.jsonに追加します。すべてのプロジェクトに適用する場合はグローバル設定の~/.config/opencode/opencode.jsonに、現在のリポジトリだけに適用する場合はプロジェクトルートにあるファイルに追加します。 opencodeを起動し、モデル一覧からモデルを選択します。プロバイダーは、指定したnameの下に表示されます。- 後からモデルを追加する場合は、
modelsの下に別のキーを追加します。IDは実際のリクエストで使われ、nameはラベルとしてのみ使われます。
opencodeのプロバイダーに関するドキュメントで2026年9月6日に確認しました。サードパーティの設定は変更されます。ここに記載されたフィールド名が表示内容と一致しなくなった場合は、このページではなく、そのページを正しい情報源としてください。
クライアントをデバッグする前に確認すること
1回のリクエストで、失敗の原因がエンドポイント、キー、設定ファイルのどれかを特定できます。これがJSONを返すなら、同じベースURLとキーがopencodeで機能します。
# Settles whether a failure is the endpoint, the key, or the client.
curl -sS https://api.kunavo.com/v1/models \
-H "Authorization: Bearer sk-kn-..."フィールドに入力するモデルID
すべてのテキストモデルにはモデルIDでアクセスできます。現在の一覧はGET /v1/models、価格付きのカタログはモデルページにあります。料金は100万トークンあたりのUSDで、入力 / 出力の順です。
| モデル ID | Kunavo 入力 / 出力 | opencodeでの位置付け |
|---|---|---|
claude-sonnet-5 | $1.40 / $7.00 | 標準のビルドモデル |
claude-opus-5 | $3.50 / $17.50 | その後のすべてを計画に基づいて進めるプランモード |
claude-haiku-4-5 | $0.70 / $3.50 | リクエスト数が多いサブエージェント処理と検索 |
gpt-5-6-sol | $2.00 / $12.00 | reasoning itemを往復後も保持するには、@ai-sdk/ |
よくある質問
opencodeにカスタムプロバイダーを追加するにはどうすればよいですか?
opencode.jsonの「provider」配下にブロックを追加し、npmパッケージ、表示名、options.baseURL、options.apiKey、modelsマップを指定します。/v1/chat/completionsを提供するエンドポイントには@ai-sdk/openai-compatibleを、/v1/responsesを提供するエンドポイントには@ai-sdk/openaiを使用します。プロバイダーは、指定した名前でopencodeのモデル一覧に表示されます。
APIキーをopencode.jsonに含めずに設定するにはどうすればよいですか?
options.apiKeyで{env:VAR_NAME}形式の補間構文を使用します。たとえば、"apiKey": "{env:KUNAVO_API_KEY}"と指定し、シェルで変数をエクスポートします。opencodeは設定の読み込み時にその値を解決するため、設定対象のプロジェクトと一緒にファイルを安全にコミットできます。
opencodeにおける@ai-sdk/openaiと@ai-sdk/openai-compatibleの違いは何ですか?
同じベースURL上の異なるエンドポイントを選択します。@ai-sdk/openai-compatibleは、ほとんどすべてのゲートウェイが実装している/chat/completionsを呼び出します。@ai-sdk/openaiは、新しいOpenAI APIである/responsesを呼び出します。実際にエンドポイントが提供している方を選んでください。誤ったパッケージを使うと、ベースURLが正しくても404が返ります。
opencodeが想定より早くコンテキストを使い切るのはなぜですか?
モデルエントリーに上限ブロックがないため、opencodeがモデル本来のコンテキストウィンドウではなく、デフォルト値を基に予算を計算しているからです。プロバイダーのカタログに記載された数値を使って、opencode.json内の該当モデルに"limit": { "context": <window>, "output": <max output> }を追加してください。コンテキスト表示と圧縮のタイミングが実際の値に合うようになります。