Models
Claude Code
Claude Code は、Anthropic Messages 形式を話すホストをすべてゲートウェイとして扱います。Grafilab はその形式を https://llm.grafilab.ai/v1/messages で提供しているので、CLI を Grafilab に向けるのに必要なのは環境変数 2 つとモデル ID だけです。
- Claude Code がインストールされ、動作していること。
claude --versionで確認できます。
- A Grafilab API key. In the console open API (
https://app.grafilab.ai/api) and click Generate New Key — see API Keys.
キーには claude-code という名前を付けて、他のツールと支出を分けておきます。
モデル ID を選ぶ
Section titled “モデル ID を選ぶ”The model catalog is live, so list it rather than copying ids from a page. Every entry’s id is the exact string to use in any tool or SDK.
curl https://llm.grafilab.ai/v1/models \ -H "Authorization: Bearer $GRAFILAB_API_KEY" | jq -r '.data[].id'from openai import OpenAI
client = OpenAI(api_key="sk-grafilab-...", base_url="https://llm.grafilab.ai/v1")for model in client.models.list(): print(model.id)import OpenAI from "openai";
const client = new OpenAI({ apiKey: "sk-grafilab-...", baseURL: "https://llm.grafilab.ai/v1" });for await (const model of client.models.list()) { console.log(model.id);}The same ids appear as cards in the Playground, with context size and prices.
Anthropic 互換 API 自体にはモデル一覧がないので、上記のように OpenAI 互換 API でカタログを取得し、id を ANTHROPIC_MODEL に貼り付けてください。
クイックスタート
Section titled “クイックスタート”ベース URL にはホスト部分のみを設定します。Claude Code は /v1/messages を自分で追加するため、/v1 で終わるベース URL を指定すると /v1/v1/messages へのリクエストになり 404 が返ります。
export ANTHROPIC_BASE_URL="https://llm.grafilab.ai"export ANTHROPIC_AUTH_TOKEN="sk-grafilab-..."export ANTHROPIC_MODEL="grafilab/qwen3.6-flash"
claude$env:ANTHROPIC_BASE_URL = "https://llm.grafilab.ai"$env:ANTHROPIC_AUTH_TOKEN = "sk-grafilab-..."$env:ANTHROPIC_MODEL = "grafilab/qwen3.6-flash"
claudeANTHROPIC_AUTH_TOKEN はキーを Authorization: Bearer として送り、Grafilab はこれを受け付けます。ANTHROPIC_API_KEY を併用しないでください。こちらはキーを x-api-key として送るもので Grafilab も受け付けますが、両方を設定していると Claude Code が API キーの承認を求めてきたうえ、認証情報が 2 系統あるという起動時の警告が出ます。どちらか一方にし、ANTHROPIC_AUTH_TOKEN を選んでください。
ANTHROPIC_MODEL が対象とするのはセッションのメインモデルだけです。Claude Code はバックグラウンド処理のために小さなモデルも呼び出し、サブエージェントも起動しますが、どちらも既定では Grafilab が提供していない Anthropic のモデル名を指しています。これらにも Grafilab の ID を設定しないと、その呼び出しは 404 で失敗します。
export ANTHROPIC_DEFAULT_HAIKU_MODEL="grafilab/qwen3.6-flash"export CLAUDE_CODE_SUBAGENT_MODEL="grafilab/qwen3.6-flash"$env:ANTHROPIC_DEFAULT_HAIKU_MODEL = "grafilab/qwen3.6-flash"$env:CLAUDE_CODE_SUBAGENT_MODEL = "grafilab/qwen3.6-flash"ANTHROPIC_DEFAULT_HAIKU_MODEL は haiku エイリアスの解決先であり、Claude Code がバックグラウンド処理に使うモデルでもあります。ANTHROPIC_DEFAULT_SONNET_MODEL と ANTHROPIC_DEFAULT_OPUS_MODEL が sonnet と opus に対して同じ役割を果たすので、/model でモデルを切り替えるならそれらも設定してください。ANTHROPIC_SMALL_FAST_MODEL は haiku 用変数の非推奨の前身なので、新しい名前を使ってください。
export はターミナルのセッション 1 回きりです。すべての Claude Code セッションを Grafilab で動かしたいのか、一部だけにしたいのかによって、設定を残す方法が 2 つあります。
常時使うなら設定ファイル
Section titled “常時使うなら設定ファイル”変数を Claude Code の設定ファイルの env ブロックに書きます。~/.claude/settings.json はすべてのプロジェクトに適用され、.claude/settings.local.json は 1 つのプロジェクトだけに適用されて自動的に gitignore されます。設定ファイルはバックグラウンドエージェントにも届きますが、シェルの export は確実には届きません。
{ "env": { "ANTHROPIC_BASE_URL": "https://llm.grafilab.ai", "ANTHROPIC_AUTH_TOKEN": "sk-grafilab-...", "ANTHROPIC_MODEL": "grafilab/qwen3.6-flash", "ANTHROPIC_DEFAULT_HAIKU_MODEL": "grafilab/qwen3.6-flash", "CLAUDE_CODE_SUBAGENT_MODEL": "grafilab/qwen3.6-flash" }}設定ファイルは厳密な JSON です。末尾のカンマや // コメントがあると、次回の起動時に Claude Code が設定エラーを報告します。
併用するならシェル関数
Section titled “併用するならシェル関数”Anthropic に対しても Claude Code を使っているなら、Grafilab 用の設定を関数にまとめておけば、素の claude はそのままで gclaude が Grafilab で動きます。
gclaude() { ANTHROPIC_BASE_URL="https://llm.grafilab.ai" \ ANTHROPIC_AUTH_TOKEN="sk-grafilab-..." \ ANTHROPIC_MODEL="grafilab/qwen3.6-flash" \ ANTHROPIC_DEFAULT_HAIKU_MODEL="grafilab/qwen3.6-flash" \ CLAUDE_CODE_SUBAGENT_MODEL="grafilab/qwen3.6-flash" \ command claude "$@"}function gclaude { $env:ANTHROPIC_BASE_URL = "https://llm.grafilab.ai" $env:ANTHROPIC_AUTH_TOKEN = "sk-grafilab-..." $env:ANTHROPIC_MODEL = "grafilab/qwen3.6-flash" $env:ANTHROPIC_DEFAULT_HAIKU_MODEL = "grafilab/qwen3.6-flash" $env:CLAUDE_CODE_SUBAGENT_MODEL = "grafilab/qwen3.6-flash" try { claude @args } finally { Remove-Item Env:ANTHROPIC_BASE_URL, Env:ANTHROPIC_AUTH_TOKEN, Env:ANTHROPIC_MODEL, Env:ANTHROPIC_DEFAULT_HAIKU_MODEL, Env:CLAUDE_CODE_SUBAGENT_MODEL -ErrorAction SilentlyContinue }}PowerShell では finally ブロックが重要です。$env: への代入は関数の外にも残り、そのウィンドウで次に素の claude を実行したときに漏れ込んでしまいます。bash の書き方は 1 コマンドだけに変数を設定するので、後始末は不要です。
両方を用意する場合は、設定ファイルの env の値が同じ変数のシェル export より優先されることを覚えておいてください。
動作を確認する
Section titled “動作を確認する”-
Claude Code を開く前にエンドポイントをテストしておくと、失敗したときに CLI ではなくゲートウェイが原因だと切り分けられます。
ターミナルウィンドウ curl -X POST "$ANTHROPIC_BASE_URL/v1/messages" \-H "Authorization: Bearer $ANTHROPIC_AUTH_TOKEN" \-H "content-type: application/json" \-d '{"model": "grafilab/qwen3.6-flash", "max_tokens": 16, "messages": [{"role": "user", "content": "Say hi."}]}'{"id":"msg_で始まるボディが返れば、URL とキーの両方が機能しています。 -
セッションを開始してプロンプトを送ります。
ターミナルウィンドウ claude "say hi" -
/statusを実行して Status タブを見ます。次の 2 行が経路を裏づけます。Anthropic base URL: https://llm.grafilab.aiAuth token: ANTHROPIC_AUTH_TOKENベース URL の行がない場合、変数がセッションに届いていません。export したシェルから
claudeを起動するか、設定ファイルに移してください。 -
/costを実行します。トークン数と支出はいつもどおり表示されますが、キャッシュ書き込みの数値はゼロのままです。これは想定どおりで、下で説明します。
その後、コンソールで API を開き、claude-code キーの View Usage を選ぶと、同じリクエストを Grafilab 側から確認できます。集計は 30 分ほど遅れることがあります。
Grafilab は Messages プロトコルのサブセットを実装しています。編集、コマンド実行、MCP サーバーの呼び出しなど Claude Code に必要なものはすべて揃っていますが、次の点は目に付くかもしれません。
| 項目 | 見え方 | 対処 |
|---|---|---|
| トークン数計測エンドポイントなし | Grafilab は /v1/messages/count_tokens を実装していないため、Claude Code はゲートウェイにプロンプトの計測を依頼できず、残りコンテキストの表示は推定値になります | 対処不要。コンテキストの表示は概算だと考えてください |
| サーバーサイドツールの拒否 | web_search_*、bash_*、および type が custom 以外のツールは 400 を返します。Claude Code 組み込みの WebSearch ツールは機能を落として動くのではなく失敗します | 設定ファイルの permissions.deny に "WebSearch" を追加し、Claude Code がそもそも提示しないようにします |
cache_control の無視 | プロンプトキャッシュの書き込みは報告されません。cache_creation_input_tokens は常に 0 で、/cost にもキャッシュ書き込みは表示されません。モデルがキャッシュに対応していれば、キャッシュ読み取りは引き続き報告されます | 対処不要。ゼロをバグと読まないでください |
thinking の無視 | モデルがネイティブに推論しない限り、拡張思考の切り替えは効果がありません。Claude Code は認識できないモデル名(Grafilab のエイリアスを含む)に対して thinking を送りますが、Grafilab はエラーにせず受け付けたうえで破棄します | 対処不要 |
top_k、output_config、context_management の無視 | 受け付けたうえで破棄されるので、effort やコンテキスト編集の設定は致命的ではなく単に無効になります | 対処不要 |
anthropic-version を読まない | 送っても害はありません | 対処不要 |
| ゲートウェイのモデル検出 | CLAUDE_CODE_ENABLE_GATEWAY_MODEL_DISCOVERY=1 を設定すると Claude Code は起動時に /v1/models を読みますが、claude または anthropic を含む ID しか残さないため、Grafilab の ID はほとんど /model のピッカーに現れません | ANTHROPIC_MODEL または claude --model でモデルを指定します |
429 はウォレットが空という意味 | Grafilab は残高不足に対して 429 を返すのであって、スループット制限ではありません | コンソールでチャージします |
| Anthropic を直接呼ぶ機能 | Remote Control と音声ディクテーションは claude.ai の ID を必要とするため、ゲートウェイの認証情報を設定している間は使えません | それらが必要なセッションでは変数を解除します |
トラブルシューティング
Section titled “トラブルシューティング”| 症状 | 原因 | 対処 |
|---|---|---|
すべてのリクエストで authentication_error | トークンに改行や末尾の空白が入っている。多くはターミナルからコピーしたときに起こります | コンソールの API からコピーし直し、値を引用符で囲む |
| curl のテストは通るのに Claude Code がログイン画面を出す | 到達できるベース URL は認証情報ではなく、プロジェクトの env ブロックはフォルダー信頼のプロンプトの後にしか適用されません | ANTHROPIC_AUTH_TOKEN をシェルの export か ~/.claude/settings.json で設定する |
モデル名を挙げた not_found_error | エイリアスの綴りが違うか、バックグラウンドまたはサブエージェントのモデルが Anthropic の名前のままになっています | GET /v1/models で取り直し、ANTHROPIC_DEFAULT_HAIKU_MODEL と CLAUDE_CODE_SUBAGENT_MODEL を設定する |
すべてのリクエストで 404 | ベース URL が /v1 で終わっている | ホストのみの https://llm.grafilab.ai を使う |
| リクエストが固まり、何も表示されないまま落ちる | 上流呼び出しには最初のトークンまで 120 秒の制限があります | 再試行する。出力が出なかったリクエストは課金されていません |
| 返答が途中で止まりエラーになる | 最初のフレームより後で失敗したストリームは HTTP 200 のまま、event: error をインバンドで届けます | 再試行する。生成された分の部分的な出力は課金されています |
ゲートウェイからの 500 | インフラ障害であり、502 や 504 ではなく意図的に 500 を返しています | レスポンスに x-should-retry: false がない限り再試行して問題ありません。この値は処理が完了して課金済みであることを示します |

