Pi コーディングエージェントのモデル設定は 3 層に分かれます。組み込み provider は /login でログイン(サブスクリプションまたは API キー)するか、環境変数を設定します。Pi に組み込まれていないものの OpenAI/Anthropic/Google API と互換性のあるエンドポイントは ~/.pi/agent/models.json に記述します。特殊な認証またはプロトコルが必要なサービスだけが拡張機能を必要とします。選択後は /model で切り替えます。このページでは、2026 年 9 月 22 日の Pi のドキュメント改訂後の内容と、2026 年 9 月 30 日公開の v0.99.2 ソースコードに基づき、各層の設定方法、キーの読み取り順序(改訂後に変更)、カスタムモデルで気付かないうちに問題を起こす 3 つのデフォルト値、OpenAI 互換エンドポイントへの完全な接続例を説明します。
まず、どの Pi かを確認してください。このページで扱うのは、Earendil 社が pi.dev で公開しているターミナル用コードエージェントで、リポジトリは earendil-works/pi(旧 badlogic/pi-mono)、ライセンスは MIT です。Inflection のチャットボット Pi(pi.ai)、Pi Network の通貨、Raspberry Pi、または別の作者による Oh My Pi ではありません。
接続方法を選ぶ
Pi のモデルドキュメントの冒頭には、この対応表があります。
| 手元にあるもの | 推奨方法 |
|---|---|
| 対応するサブスクリプションプラン | /login でログイン |
| 特定 provider の API キー | /login で保存するか、その provider の環境変数を設定 |
| ローカルの GGUF モデル | llama.cpp router に接続(/llama で管理) |
| OpenAI、Anthropic、または Google 互換エンドポイント | models.json に記述 |
| カスタムプロトコルまたは認証フローの provider | provider extension を記述またはインストール |
Pi には組み込みのモデルカタログがあり、pi.dev から新しいカタログデータを追加できます。オフライン時はキャッシュを使用し、強制更新には pi update --models を実行します。必要な provider またはエンドポイントが Pi にない場合にのみ、カスタムモデル設定が必要です。
Pi でモデルを選択する
/model:モデルを検索して選択します。provider に利用可能な認証情報があるモデルだけが表示されます。- モデル上で Ctrl+S:新しいセッションのデフォルトモデルとして保存します。
/thinking:現在のモデルの思考レベルを選択します。Pi にはそのモデルが対応するレベルだけが表示されます。同じく Ctrl+S で起動時のデフォルトとして保存します。- Ctrl+P:利用可能なモデルを切り替えます。
/scoped-modelsで切り替え対象を制御し、保存します。
セッションにはモデルと思考レベルの変更が記録され、セッションを復元するとその状態に戻りますが、新しいセッションのデフォルトは変更されません。
キーの読み取り順序(改訂後に変更)
複数のキーソースを同時に設定した場合、Pi のドキュメントに記載された順序は、実行時の --api-key → auth.json に保存された認証情報 → models.json の apiKey → provider の環境変数(またはクラウドプラットフォームの環境認証情報)です。そのため、/login で保存した古いキーがファイルに新しく書き込んだキーより優先されます。これは「設定を変更したのに古いアカウントが使われる」最も一般的な原因です。/logout で保存済みの認証情報を削除できます。注意:9 月 22 日の改訂前は、環境変数が models.json より前に記載されていました。オンライン上の古いチュートリアルには旧順序が残っている可能性があります。
もう 1 つのよくある誤解について:モデルが /model に表示されない場合、その原因はたいてい JSON の記述ミスではなく認証の問題です。ドキュメントではカスタムモデルを models.json から読み込めると説明されていますが、Pi が認証情報を取得できるまでは「利用不可」のままです。
models.json:OpenAI 互換エンドポイントへの完全な接続例
Pi 自身の例はローカル Ollama です。dummy キーはモデルを利用可能にするためだけのもので、Ollama 自体はそれを参照しません。
{
"providers": {
"ollama": {
"baseUrl": "http://localhost:11434/v1",
"api": "openai-completions",
"apiKey": "ollama",
"models": [{ "id": "qwen2.5-coder:7b" }]
}
}
}Kunavo のように認証が必要なエンドポイントへの接続は、次のようにします。
{
"providers": {
"kunavo": {
"baseUrl": "https://api.kunavo.com/v1",
"api": "openai-completions",
"apiKey": "$KUNAVO_API_KEY",
"models": [
{
"id": "claude-sonnet-5",
"name": "Claude Sonnet 5",
"reasoning": true,
"input": ["text", "image"],
"contextWindow": 1000000,
"maxTokens": 128000
},
{
"id": "claude-haiku-4-5",
"name": "Claude Haiku 4.5",
"input": ["text", "image"],
"contextWindow": 200000,
"maxTokens": 64000
}
]
}
}
}baseUrlとapiは必須です。provider 層またはモデル層に記述できます。v0.99.2 のソースコードでは、どちらか一方が欠けると Pi はそのモデルを読み込みません。apiは 4 択ではありません。9 月 22 日の改訂前、Pi のドキュメントはカスタム provider 向けに 4 つの値(openai-completions、openai-responses、anthropic-messages、google-generative-ai)を列挙していました。改訂後のドキュメントでは一覧がなくなり、上の対応表に「OpenAI、Anthropic、または Google 互換のエンドポイント」と記載され、例で使われているのもopenai-completionsだけです。v0.99.2 のソースコードではapiは任意の文字列として定義され、10 種類の組み込み実装のうち対応するものに渡されます。上記 4 つに加えて、openai-codex-responses、azure-openai-responses、google-vertex、mistral-conversations、bedrock-converse-stream、pi-messagesです。前半の 4 つだけがカスタム provider の用途として文書化されており、残り 6 つはここではテストしていません。このページでも第三者エンドポイントに接続できるとは主張しません。openai-completionsのbaseUrlには/v1を付けます。ドキュメントは一文で規定していませんが、互換エンドポイントの例にはすべてバージョンパスがあります。/v1がないと、認証エラーではなく 404 になります。- キーをハードコードしないでください。
apiKeyとヘッダー値には、$NAMEまたは${NAME}による環境変数参照、直接指定した値、または!指令による取得を記述できます。ドキュメントによると、models.json内のコマンドは各リクエスト時に実行され、キャッシュされません。auth.jsonとキーを取得するコマンドはすべて秘密にしてください。 - 変更後に再起動する必要はありません。
/modelを開くとファイルが再読み込みされます。models内の同じ ID の項目は、その provider のモデルを追加または置換します。組み込みモデルのメタデータを変更し、一覧全体は置き換えない場合はmodelOverridesを使用します。
気付かないうちに問題を起こす 3 つのデフォルト値
9 月 22 日のドキュメント改訂でフィールド表は削除されましたが、デフォルト値はソースコード(v0.99.2 の provider-composer.ts)に残っています。カスタムモデルに値を入力しないと、次が適用されます。
| フィールド | 未入力時のデフォルト | 発生すること |
|---|---|---|
cost | input、output、cacheRead、cacheWrite がすべて 0 | 下部と /session の費用が常に $0 と表示される。無料という意味ではなく、価格情報がないだけ |
contextWindow | 128000 | コンテキストの大きいモデルが早すぎる段階で圧縮される |
maxTokens | 16384 | 長い応答が途中で切れる |
さらに、reasoning のデフォルトは false、input のデフォルトはテキストのみです。上の Kunavo 例では料金表に基づいてコンテキストと出力上限を入力しています。cost は含めていません。価格をファイルにハードコードするとすぐに古くなるためです。下部に費用を表示したい場合は、料金表に従って 100 万 token あたりの価格を自分で入力してください。Pi は promptCache もサポートしています(秒単位でプロバイダーキャッシュの存続時間を宣言し、キャッシュのウォームアップに使用)。ドキュメントでは、公開範囲内で保守的な値を選ぶことを推奨しています。
anthropic-messages:接続は可能だが、baseUrl には結論がない
anthropic-messages は、改訂前のドキュメントがカスタム provider 向けに列挙していた 4 つの値の 1 つです。Kunavo も Anthropic Messages インターフェースを提供しているため、api: "anthropic-messages" という経路は存在します。ただし Pi のドキュメントは、この型の baseUrl に /v1 を付けるべきかを一度も明確にしていません。改訂前には、一方の例が https://proxy.example.com/v1 を記載し、別の例はパスを付けない https://proxy.example.com を記載していました。改訂後は両方の例が削除されましたが、結論は示されていません。この経路を使う場合はまず一方を試し、最初のリクエストが 401 ではなく 404 を返したら、この行を変更してください。compat には、純正ではないエンドポイント向けに設計されたスイッチ(例:supportsEagerToolInputStreaming、supportsStrictTools)もあります。ただしドキュメントは、互換設定は「検証済みの動作差異」を表すべきであり、エンドポイントが OpenAI または Anthropic 互換を称しているというだけで有効にしてはいけないと注意しています。上の openai-completions 例はこれらの問題を避けています。ここから始めることを推奨する本当の理由はそれであり、より高速だからではありません。
率直な説明と料金
ここまでの内容は Pi のドキュメントとソースコードを読んで整理した設定リファレンスです。Kunavo は自社エンドポイントを Pi で実際に実行していません。セッション、ストリーミング、ツールの往復を実行しておらず、リクエストが最終的にどのモデルへ到達するかも確認していません。現在使えている経路を維持し、実際のファイルを読み書きするタスクを Pi に試させてください。Pi はほぼすべての手順をツール呼び出しに依存するため、最初の実行でストリーミングやツール形式の不一致が最も明らかになります。英語の完全な設定ページは Pi integration guide に、各種の有料経路(Earendil 独自の Radius ゲートウェイを含む)の比較は Pi coding agent pricing にあります。
Kunavoは前払いチャージ方式で、トークン単位で差し引かれ、月額料金はありません。最低チャージは$10で、決済はStripeを利用します。台湾ではクレジットカード(Visa、Mastercard、American Express、JCB、UnionPay)、Apple Pay、Google Pay、Linkを利用できます。JKOPayとLINE Payは利用できません。詳しくは請求についてをご覧ください。準備ができたらアカウントを作成してキーを生成できます。
よくある質問
Pi コーディングエージェントでモデルを変更するには?
Pi で /model と入力して利用可能なモデルを検索し、選択します。モデル上で Ctrl+S を押すと、新しいセッションのデフォルトとして保存できます。/thinking で思考レベルを選択し、同様に Ctrl+S で起動時のデフォルトとして保存します。Ctrl+P では利用可能なモデルを切り替え、/scoped-models で切り替え対象の範囲を制御します。メニューには、利用可能な認証情報がある provider のモデルだけが表示されます。セッションにはモデル変更の履歴が記録され、セッションを復元するとその履歴も復元されますが、新しいセッションのデフォルトは変更されません。
Pi をカスタム API エンドポイントに接続するには?
組み込み provider では /login または環境変数を使用します。Pi に組み込まれていないものの、Pi が対応する API(OpenAI、Anthropic、または Google 互換)を提供するエンドポイントには、~/.pi/agent/models.json に provider ブロックを追加し、baseUrl、api、apiKey、および models の一覧を記述します。baseUrl または api のいずれかが欠けると、Pi のソースコードはそのモデルを読み込みません。api は固定された選択肢から選ぶものではありません。2026 年 9 月 22 日のドキュメント改訂前、Pi がカスタム provider 向けに文書化していた値は 4 つ(openai-completions、openai-responses、anthropic-messages、google-generative-ai)でした。改訂後のドキュメントでは一覧がなくなっています。v0.99.2 のソースコードでは api は任意の文字列として定義され、10 種類の組み込み実装のうち対応するものに渡されます。残り 6 種類はカスタム provider の用途として文書化されたことがなく、ここでもテストしていません。OpenAI 互換エンドポイントに接続する場合は、改訂後のドキュメント例でも使われている openai-completions を指定します。カスタムストリーミング、モデル探索、または特殊な認証フローが必要なサービスに限り、provider extension を記述する必要があります。
Pi は API キーをどこから読み取りますか?順序は?
Pi のモデルドキュメント(2026 年 10 月 1 日)に記載された順序は、実行時の --api-key が最優先、次に auth.json に保存された認証情報(/login が保存するのはこれ)、その次が models.json の apiKey、最後が provider の環境変数です。したがって、以前 /login で保存した古いキーは、models.json に新しく書いたキーより優先されます。apiKey フィールドには、環境変数を参照する $NAME または ${NAME}、直接指定した値、または ! で始まるコマンド実行による取得を記述できます。注意:2026 年 9 月 22 日のドキュメント改訂前はこの順序が異なり、環境変数が models.json より前でした。古いチュートリアルには旧順序が残っている可能性があります。
自分で追加したモデルが Pi の下部に $0 と表示されるのはなぜですか?
v0.99.2 のソースコードでは、カスタムモデルの cost のデフォルトがすべて 0 だからです。下部と /session に表示されるのは設定ファイル内の価格であり、エンドポイントが実際に請求する金額ではありません。無料という意味ではなく、価格情報がないだけです。プロバイダーの料金表に従い、100 万 token あたりの input、output、cacheRead、cacheWrite を入力してください。contextWindow と maxTokens も入力してください。未指定の場合、それぞれ 128000 と 16384 がデフォルトになり、大きなコンテキストのモデルでは圧縮が早すぎたり、応答が途中で切れたりします。
Pi の baseUrl に /v1 を付ける必要がありますか?
openai-completions 型では付けます。Pi のドキュメントは規則を一文で明記していませんが、互換エンドポイントの例は Ollama の http://localhost:11434/v1 であり、改訂前の OpenRouter、Vercel AI Gateway、llama.cpp の例にもバージョンパスが含まれていました。したがって、OpenAI 互換エンドポイントには /v1 ルートを指定します。例:https://api.kunavo.com/v1。anthropic-messages 型については結論がありません。改訂前のドキュメントでは、ある箇所は /v1 を記載し、別の箇所は記載していません。改訂後は両方の例から削除され、どちらが正しいかの説明もありません。
2026 年 10 月 1 日に確認:pi.dev/docs/latest/models(Choose a Model)および providers ページ、earendil-works/pi の v0.99.2 タグにある src/core/model-config.ts と provider-composer.ts、さらに GitHub API のバージョン情報。同日に api フィールドも別途確認:現在 models ページに列挙されている値(Ollama 例の openai-completions のみ)、v0.99.2 の model-config.ts における api の型(任意の文字列、第 191 行、233 行)、provider-composer.ts によるカスタムモデルの振り分け(第 579 行)、packages/ai/src/compat.ts の BUILTIN_APIS(第 180 行、全 10 種類)。Kunavo は自社エンドポイントを Pi で実際に実行していません。