ドキュメント
Crush
CrushはCharmのターミナル向けコーディングエージェントで、同じ名前のRust製シェルとは別のものです。設定はBash形式なので、別のエンドポイントを指定するには、タイプ、ベースURL、キーを指定してプロバイダーを追加します。
Crushの設定はBashです — crushrcに`provider add kunavo --type openai-compat --base-url "https://api.kunavo.com/v1"`を1行追加すると、CharmのターミナルエージェントをClaudeとGPTで動かせます。
# A crushrc is Bash, not a settings file. Everything here is executed.
provider add kunavo \
--type openai-compat \
--base-url "https://api.kunavo.com/v1" \
--api-key "${KUNAVO_API_KEY:?set KUNAVO_API_KEY}"
model add kunavo/claude-sonnet-5 \
--name "Claude Sonnet 5" \
--context-window 1000000 \
--default-max-tokens 32000 \
--price-input 1.4 \
--price-output 7
model add kunavo/claude-haiku-4-5 \
--name "Claude Haiku 4.5" \
--context-window 200000 \
--default-max-tokens 16000 \
--price-input 0.7 \
--price-output 3.5
model large kunavo/claude-sonnet-5
model small kunavo/claude-haiku-4-5/v1サフィックスを付けます。Crushの公式ドキュメントにあるOpenAI互換の例は--base-url "https://api.deepseek.com/v1"で、Anthropic互換の例も同じサフィックスで終わります。したがって、これは推測ではなくクライアント側の仕様です。省略すると認証エラーではなく404になります。openaiではなく--type openai-compatを使います。READMEでは用途が明確に分けられています。openaiはOpenAI経由でリクエストをプロキシまたはルーティングする場合に、openai-compatはOpenAI互換APIを持つOpenAI以外のプロバイダーに使います。Kunavoは後者に該当します。crushrcはCrush組み込み機能を備えたBashであり、Crushの公式警告によると、信頼されたコードとしてフルシェル内で実行されます。この仕組みにより、--api-key "$(op read ...)"ではキーをファイルの外に置けます。従来のcrush.jsonも引き続き読み込めますが、READMEでは非推奨とされています。今後はcrushrcを使ってください。sk-kn-で始まります)。$10からクレジットを追加すると、呼び出しはその残高から支払われ、失敗した呼び出しは課金されません。ダッシュボードを開くと、Crush設定が表示されます。手順
/app/keysでキーを作成してコピーしてください。キーは一度しか表示されません。KUNAVO_API_KEYとしてエクスポートするか、設定内でパスワードマネージャーから読み込んでください。- 上記のブロックを
~/.config/crush/crushrcに記述します。Crushはまず./.crushrc、次に./crushrc、その次にグローバル設定を読み込むため、プロジェクトの設定でマシン全体の設定を上書きできます。一方、クローンしたリポジトリに設定ファイルが含まれている場合もあります。 crushを起動し、ctrl+lを押してモデルピッカーを開きます。上記のmodel largeとmodel smallの行で両方のスロットがすでに固定されているため、ピッカーは初期設定ではなく、モデルの切り替えに使います。- IDを手動で登録したくない場合:
openai-compatプロバイダーのモデルリストが空のとき、または--discover-models trueを指定したときに、自動検出が実行されます。KunavoはGET /v1/modelsを返すため、リストは自動で作成されます。競合があれば、独自のmodel addフィールドが優先されます。 - 範囲を限定したタスクを1つ実行し、
/app/billingでアカウントに記録された請求額を確認してください。ターミナルに表示される金額は、入力した--price-*の数値を使った計算結果です。請求額を確認するには台帳を参照してください。
Crushの「Custom Providers」セクションで2026年9月21日に確認しました。サードパーティの設定は変更されます。ここに記載されたフィールド名が表示内容と一致しなくなった場合は、このページではなく、そのページを正しい情報源としてください。
クライアントをデバッグする前に確認すること
1回のリクエストで、失敗の原因がエンドポイント、キー、設定ファイルのどれかを特定できます。これがJSONを返すなら、同じベースURLとキーがCrushで機能します。
# 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 入力 / 出力 | Crushでの位置付け |
|---|---|---|
claude-sonnet-5 | $1.40 / $7.00 | model largeスロット — 日常的なコーディングや編集に使うモデル |
claude-haiku-4-5 | $0.70 / $3.50 | model smallスロット — タイトルや要約の生成でCrushが頻繁に使うモデル |
claude-opus-5 | $3.50 / $17.50 | 誤った計画のコストが大きいリファクタリングでは、model largeに切り替える |
gpt-5-6-terra | $0.70 / $4.20 | 同じキーで別のモデル系列を追加。モデルをもう1つ登録するだけです |
よくある質問
Crush CLIにカスタムAPIプロバイダーを追加するにはどうすればよいですか?
Crush組み込み機能を備えたBash形式のcrushrcに設定します。provider add kunavo --type openai-compat --base-url "https://api.kunavo.com/v1" --api-key "$KUNAVO_API_KEY" の1行でエンドポイントを登録します。続いて、呼び出すモデルIDごとにmodel addを実行し、Crushの画面上の見積もりに使う表示名、コンテキストウィンドウ、100万トークンあたりの価格を登録します。Crushは ./.crushrc、次に ./crushrc、最後に ~/.config/crush/crushrc の順で読み込みます。そのため、同じブロックをプロジェクト単位でもマシン単位でも使えます。
CrushのベースURLの末尾に /v1 は必要ですか?
はい。Crushのカスタムプロバイダー設定例では、両方のタイプでサフィックスが指定されています。OpenAI互換の場合は https://api.deepseek.com/v1、Anthropic互換の場合は https://api.anthropic.com/v1 です。Kunavoキーの場合は https://api.kunavo.com/v1 を指定します。これは、ANTHROPIC_BASE_URLにオリジンのみを指定するClaude Codeとは逆です。Claude Codeはパスを自分で追加するためです。同じゲートウェイでも表記はクライアントによって異なり、/v1を省略すると401ではなく404になります。
--type openai と --type openai-compat のどちらを使うべきですか?
第三者のゲートウェイにはopenai-compatを使います。CrushのREADMEでは、openaiはOpenAI自体を経由したリクエストのプロキシまたはルーティング用とされ、OpenAI互換APIを持つOpenAI以外のプロバイダーにはopenai-compatを使うよう案内されています。このタイプはワイヤ形式以外の動作も決定します。モデルリストが空のopenai-compatプロバイダーでは、モデルの自動検出が実行されます。CrushはAnthropic互換エンドポイント用の --type anthropic にも対応しており、その場合は --extra-header anthropic-version 2023-06-01 を指定します。
crush.jsonは今もこの設定に適したファイルですか?
いいえ。crush.jsonは旧形式です。Crushの公式ドキュメントでは非推奨とされ、新機能も追加されていません。現在の形式はcrushrcです。なお、どちらも解析されるだけでなく実行されます。crushrcはフルシェルで実行され、crush.json内の $(...) は読み込み時に展開されます。そのため、ドキュメントでは設定を読んでいないディレクトリでCrushを起動しないよう警告しています。また、設定内でパスワードマネージャーからキーを読み込めるのも、この仕組みによるものです。
Crushに表示される料金と実際の請求額が異なるのはなぜですか?
表示される金額と実際の請求額は、算出元の異なる別の数値だからです。手動登録したプロバイダーの場合、画面上の見積もりはmodel addで入力した --price-input と --price-output の値から計算されます。組み込みプロバイダーの場合は、Crushの外部プロバイダーカタログであるCatwalkから取得されます。どちらもアカウント情報を参照しません。--price-* フラグの入力ミスで誤るのは表示額であり、請求額ではありません。/app/billing の台帳で照合してください。
Crushではカスタムプロバイダー経由でClaudeやGPTのモデルを利用できますか?
はい。Crush側に制限はありません。オンボーディングでは公式プロバイダーのCharm Hyperが案内されますが、カスタムプロバイダーもドキュメントに記載された正式な利用方法であり、プランによる制限はありません。モデルIDはクライアントではなくエンドポイントで解決されます。そのため、openai-compatプロバイダーでClaudeのIDを使うのは想定どおりの組み合わせです。タイプが示すのは通信プロトコルであり、ベンダーではありません。