ドキュメント

ドキュメント

Junie CLI

Junie CLIでは、設定画面ではなくJSONファイルでカスタムエンドポイントを指定します。$JUNIE_HOME/models/kunavo.jsonに9行記述し、junie --model custom:kunavoを実行すれば、1つのキーでClaudeとGPTを利用でき、補助処理の通信は安価な宛先に送られます。

Junie CLIはカスタムエンドポイントを$JUNIE_HOME/models/のJSONプロファイルとして受け取り、baseUrlには完全なエンドポイントURLを指定し、fasterModelで補助トラフィックの送信先を決めます。

$JUNIE_HOME/models/kunavo.json — または .junie/models/kunavo.json
{
  "id": "claude-sonnet-5",
  "baseUrl": "https://api.kunavo.com/v1/chat/completions",
  "displayName": "Kunavo",
  "providerName": "Kunavo",
  "apiType": "OpenAICompletion",
  "apiKey": "${KUNAVO_API_KEY}",
  "fasterModel": {
    "id": "claude-haiku-4-5"
  }
}
baseUrlには、パスを含む完全なエンドポイントを指定します。 JetBrainsは明確に、「baseUrlは完全なエンドポイントURLとして使用され、Junieがパスを追加することはありません」と述べ、「選択したapiTypeの完全なエンドポイントを設定する」よう案内しています。したがって、このフィールドに指定するのは、オリジンでも、多くのクライアントが求める/v1ルートでもなく、https://api.kunavo.com/v1/chat/completionsです。https://api.kunavo.com/v1までしか指定しないことが、ほかは正しいプロファイルで404が返る最もありがちな原因です。
環境変数が不足すると、リクエストではなくプロファイル全体が失敗します。 apiKeyとextraHeadersの値には$${VAR_NAME}参照を使用できます。JetBrainsは失敗時の挙動を明確に記載しています。「参照された環境変数が設定されていない場合、プロファイルの読み込みに失敗し、Junieは不足している変数を示すエラーを報告します。」Junieを起動する前にKUNAVO_API_KEYをエクスポートしてください。プロファイルは最初のリクエスト時ではなく読み込み時に読み取られるため、エクスポートが失われたシェルでは401ではなく、プロファイルが/modelから消えるという形で現れます。
fasterModelは、Junieがユーザーから依頼されていない処理を送る先です。 JetBrainsはこれを「コンテキストの要約やタスクの分類など、内部の補助タスクに使用するモデル」と説明し、primaryModelまたはfasterModelが「明示的に定義されていない場合は、トップレベルのプロパティを継承する」と述べています。したがって、fasterModelブロックのないプロファイルでは、内部の管理処理にもメインモデルの料金が適用されます。上記の1行の上書き設定だけで対処できるため、このブロックは付録ではなく最小構成に含めています。
このプロファイルは、以下の日付時点で確認したJetBrains公開のスキーマに基づいています。Kunavoでは、Kunavoのエンドポイントに対してJunie CLIを実行していません。セッション、ストリーミングのターン、ツールの往復処理はいずれも実行しておらず、特定のクライアントビルドを固定して承認したこともありません。設定手順を公開していても、テストを実施したことにはなりません。本ページの内容をテスト結果とみなさないでください。以下のcurlは10秒で確認できる部分です。その上でJunieがどう動作するかは、ユーザーとJetBrainsの間の問題です。
まだキーをお持ちですか?Kunavoアカウントを作成し、キーを作成します(sk-kn-で始まります)。$10からクレジットを追加すると、呼び出しはその残高から支払われ、失敗した呼び出しは課金されません。ダッシュボードを開くと、Junie CLI設定が表示されます。

手順

  1. /app/keysでキーを作成し、コピーします。表示されるのは1度だけです。Junieを起動するシェルでKUNAVO_API_KEYとしてエクスポートするか、代わりにファイルにキーを直接記述してください。JetBrainsは「$${...}参照を含まない値は、そのまま使用される」と説明しています。
  2. 上記のJSONをアカウント用の$JUNIE_HOME/models/kunavo.json、またはリポジトリで共有する場合は.junie/models/kunavo.jsonに保存します。.jsonより前のファイル名がプロファイルIDになります。これにより、下のセレクターにcustom:kunavoと表示されます。
  3. idに、実際に使用したいモデルIDを設定します。この項目は「APIエンドポイントが想定するモデル識別子」と説明されているため、下の表にあるKunavoのスラッグをそのまま指定します。IDを解決するのはJunie内部ではなく、エンドポイントです。
  4. Junieを起動し、junie --model custom:kunavo、または対話セッション内の/modelコマンドでプロファイルを選択します。カスタムモデルは「モデル選択リストで組み込みプロバイダーの後に表示されます」。
  5. 挨拶ではなく、ファイルを編集するタスクを依頼してください。Junieはエージェント型クライアントであり、ほとんどの処理でツール呼び出しを使うため、初回の実行で実際に何かを読み書きさせると、返信を1件受け取るだけよりはるかに多くのことを確認できます。

Junie向けJetBrains Custom LLMsページで2026年9月21日に確認しました。サードパーティの設定は変更されます。ここに記載されたフィールド名が表示内容と一致しなくなった場合は、このページではなく、そのページを正しい情報源としてください。

これが短い概要です。完全な手順 — モデルの選択、実際のセッション費用、失敗するケース — はJunie CLIとClaude Codeの比較 — エンドポイントの境界にあります。

クライアントをデバッグする前に確認すること

1回のリクエストで、失敗の原因がエンドポイント、キー、設定ファイルのどれかを特定できます。これがJSONを返すなら、同じベースURLとキーがJunie CLIで機能します。

# 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で、入力 / 出力の順です。

モデル IDKunavo 入力 / 出力Junie CLIでの位置付け
claude-sonnet-5$1.40 / $7.00ファイルを編集する通常の作業向けのprimaryModel
claude-opus-5$3.50 / $17.50失敗時のコストが大きい計画では、セッションごとに固定したモデル
claude-haiku-4-5$0.70 / $3.50コンテキストの要約やタスクの分類に使うfasterModelの役割
gpt-5-6-sol$2.00 / $12.00別のモデルファミリーからのセカンドオピニオン — 同じキーで使う2つ目のプロファイル
請求は月額料金なしの前払い残高からトークン単位で行われます — 請求を参照してください。繰り返し送られるコンテキスト(エディターやチャットクライアントが送る内容の大半)では、プロンプトキャッシュのほうがモデル選択より請求額を大きく左右します。

Kunavoが応答する、もう2つのapiType値

apiTypeが指定するのはリクエスト形式であり、ベンダーではありません。Junieが受け付ける値は4つです。OpenAICompletion、OpenAIResponses、Google、Anthropicです。Kunavoが提供するルートは3つあるため、残り3つの値のうち2つは対応するbaseUrlをここで利用できます。また、Junieはパスを追加しないため、形式を変える場合は同じ編集でURLも変更してください。

  1. "apiType": "OpenAICompletion"とhttps://api.kunavo.com/v1/chat/completionsの組み合わせです。上記のプロファイルで、本ページが推奨する設定です。3つのルートのうち、このルートが最も広く使われているためです。
  2. "apiType": "Anthropic"とhttps://api.kunavo.com/v1/messagesの組み合わせです。このパスではKunavoがMessages形式に応答します。
  3. "apiType": "OpenAIResponses"とhttps://api.kunavo.com/v1/responsesの組み合わせです。

特定のモデルに対してJunieの3つの方式のどれが最もよく動作するかは、まさに実行テストで答えるべき問題であり、ドキュメントを読むだけではわかりません。そのため、このページでは最初の行を超えて順位付けはしていません。1つを選び、URLとapiTypeの整合性を保ってください。キーを設定したプロファイルで401が返る場合は、Junieのヘッダーを推測するのではなく、認証情報を明示してください。JetBrainsがapiKeyについて記載しているのは、「省略した場合、リクエストはAuthorizationヘッダーなしで送信される」という否定形の説明だけで、指定した場合に使用されるスキームは明記していません。extraHeadersは「すべてのリクエストに含める追加のHTTPヘッダー」と説明されており、同じ$${VAR}参照を使用できるため、"extraHeaders": {"Authorization": "Bearer $${KUNAVO_API_KEY}"}が曖昧さのない形式になります。

よくある質問

Junie CLIにカスタムプロバイダーを追加するにはどうすればよいですか?

Junie CLIでは、設定画面ではなくJSONプロファイルでカスタムプロバイダーを読み込みます。自分のアカウント用なら$JUNIE_HOME/models/、プロジェクト内で共有するなら.junie/models/にファイルを配置してください。.json拡張子を除いたファイル名がプロファイルIDになります。必須キーはid、baseUrl、apiTypeです。apiKey、displayName、providerName、extraHeaders、extraBody、temperature、maxContextLength、primaryModel、fasterModelは任意です。その後、`junie --model custom:<id>`または/modelコマンドで選択します。カスタムモデルは組み込みプロバイダーの後に一覧表示されます。

Junie CLIのbaseUrlには/v1と完全なパスのどちらを指定すればよいですか?

完全なパスを指定します。JetBrainsによると、baseUrlは完全なエンドポイントURLとして使われ、Junieはパスを追加しません。また、選択したapiTypeに対応する完全なエンドポイントを指定するよう案内されています。Kunavoを使うOpenAICompletionプロファイルの場合、指定するのはhttps://api.kunavo.com/v1/chat/completionsです。オリジンでも、Kilo Codeのようなクライアントが求める/v1ルートでもありません。JetBrainsの公式ドキュメントにある2つのプロファイル例でも、同じ理由で完全なパスが指定されています。

環境変数が見つからず、Junieでプロファイルの読み込みに失敗するのはなぜですか?

apiKeyとextraHeadersの値は${VAR_NAME}参照に対応しています。JetBrainsによると、参照先の環境変数が設定されていない場合、プロファイルの読み込みに失敗し、不足している変数名を示すエラーがJunieに表示されます。変数はプロファイルの読み込み時に解決されるため、リクエスト失敗ではなく、モデルリストからプロファイルが消える形で現れます。Junieを起動する前に変数をエクスポートするか、参照を直接値に置き換えてください。

Junie CLIでは、Kunavoのようなゲートウェイに対して独自のBYOKキーを使えますか?

BYOK画面とカスタムプロファイルは、別々の設定方法です。JetBrainsのBYOKページでは、/accountまたはウェルカム画面の「Use your own API key」から、OpenAI、Anthropic、Google、xAI、OpenRouter、GitHub Copilotという名前付きプロバイダーを接続する方法を案内しています。また、使用料はすべてプロバイダーから請求され、JetBrains AIのサブスクリプションは不要と説明しています。Kunavoを含め、その一覧にないエンドポイントはカスタムLLMプロファイルとして追加します。このページで紹介するJSONファイルを使う方法です。独自キーの持ち込みはJunie CLIの機能です。JetBrainsのプラグインドキュメントによると、Junieプラグインではサポートされていません。

選択していないモデルをJunieが呼び出すのはなぜですか?

Junieではプロファイルが2つの役割に分かれており、fasterModelはコンテキストの要約やタスクの分類など、内部の補助タスクに使うモデルと説明されています。このブロックを定義しない場合、JetBrainsによると、各役割はトップレベルのプロパティを継承します。そのため、補助処理にはメインモデルが使われ、その料金がかかります。本ページのプロファイルのように、fasterModel.idに安価なIDを設定してください。トップレベルのbaseUrl、apiType、apiKeyは両方の役割に継承されるため、変更するのはIDだけです。

KunavoではJunie CLIの動作確認を行いましたか?

いいえ。2026年9月21日に確認したのは、JetBrains公式のCustom LLMsドキュメントです。フィールド名、順序、使用できるapiType値、完全なエンドポイントを指定するルールは、同ドキュメントから引用しています。KunavoではJunie CLIをインストールしておらず、ビルドを固定したことも、Junie CLIを通じてリクエストを送信したこともありません。また、ここではストリーミング、ツールの往復処理、クライアント内のモデルルーティングについて何も主張していません。単独で確認できるのは、エンドポイントとキーがそもそも機能するかどうかです。本ページのcurlでそれを確認できます。