ドキュメント

ドキュメント

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で動かせます。

~/.config/crush/crushrc
# 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
ベースURLには/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を使ってください。
KunavoではCrushの実行時テストを行っていません。このクライアントも、これらのページに掲載された他のクライアントも未テストです。ここで確認したのは、Kunavoが公開するエンドポイントに対するCrush公式の設定方法です。設定ページはテスト結果ではありません。日常的に使う環境を移行する前に、範囲を限定したタスクを1つ実行してください。
まだキーをお持ちですか?Kunavoアカウントを作成し、キーを作成します(sk-kn-で始まります)。$10からクレジットを追加すると、呼び出しはその残高から支払われ、失敗した呼び出しは課金されません。ダッシュボードを開くと、Crush設定が表示されます。

手順

  1. /app/keysでキーを作成してコピーしてください。キーは一度しか表示されません。KUNAVO_API_KEYとしてエクスポートするか、設定内でパスワードマネージャーから読み込んでください。
  2. 上記のブロックを~/.config/crush/crushrcに記述します。Crushはまず./.crushrc、次に./crushrc、その次にグローバル設定を読み込むため、プロジェクトの設定でマシン全体の設定を上書きできます。一方、クローンしたリポジトリに設定ファイルが含まれている場合もあります。
  3. crushを起動し、ctrl+lを押してモデルピッカーを開きます。上記のmodel largeとmodel smallの行で両方のスロットがすでに固定されているため、ピッカーは初期設定ではなく、モデルの切り替えに使います。
  4. IDを手動で登録したくない場合: openai-compatプロバイダーのモデルリストが空のとき、または--discover-models trueを指定したときに、自動検出が実行されます。KunavoはGET /v1/modelsを返すため、リストは自動で作成されます。競合があれば、独自のmodel addフィールドが優先されます。
  5. 範囲を限定したタスクを1つ実行し、/app/billingでアカウントに記録された請求額を確認してください。ターミナルに表示される金額は、入力した--price-*の数値を使った計算結果です。請求額を確認するには台帳を参照してください。

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

これが短い概要です。完全な手順 — モデルの選択、実際のセッション費用、失敗するケース — はCrushとOpenCodeの比較にあります。

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

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

モデル IDKunavo 入力 / 出力Crushでの位置付け
claude-sonnet-5$1.40 / $7.00model largeスロット — 日常的なコーディングや編集に使うモデル
claude-haiku-4-5$0.70 / $3.50model 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を使うのは想定どおりの組み合わせです。タイプが示すのは通信プロトコルであり、ベンダーではありません。