ドキュメント
Factory Droid
Droidのカスタムモデルは、必須フィールドが3つあるJSON配列です。読み違えやすいのはbaseUrlです。正しい形式は、3種類のprovider値のうちどれを選択したかによって異なります。
~/.factory/settings.jsonのcustomModelsエントリ — model、baseUrl、provider — で、DroidをAnthropic MessagesまたはOpenAI Chat Completionsに対応する任意のエンドポイントへ接続します。
// ~/.factory/settings.json (Windows: %USERPROFILE%\.factory\settings.json)
{
"customModels": [
{
"model": "claude-sonnet-5",
"displayName": "Sonnet 5 [Kunavo]",
"baseUrl": "https://api.kunavo.com",
"apiKey": "${KUNAVO_API_KEY}",
"provider": "anthropic"
},
{
"model": "gpt-5-6-sol",
"displayName": "GPT-5.6 Sol [Kunavo]",
"baseUrl": "https://api.kunavo.com/v1",
"apiKey": "${KUNAVO_API_KEY}",
"provider": "generic-chat-completion-api"
}
]
}
// Then, in the shell Droid starts from:
// export KUNAVO_API_KEY=sk-kn-...
// ${VAR_NAME} expansion is a settings.json feature. It does NOT apply to the
// legacy ~/.factory/config.json, which Factory still loads and merges./v1は一方の項目に属し、もう一方には属しません。 Factoryのドキュメントでは文章ではなく表で明示されています。Providerリファレンスでは、provider: "anthropic"に対して、パスのないオリジンであるhttps://api.anthropic.comが示されています。一方、https://api.openai.com/v1、https://openrouter.ai/api/v1、https://api.groq.com/openai/v1はいずれも/v1ルートを含みます。Droidがルートを追加するため、上記のAnthropic項目にはオリジンのみを指定し、Chat Completions項目には/v1を指定します。Anthropic項目に/v1を指定すると/v1/v1/messagesへのリクエストになり、認証失敗ではなく404になります。詳しくはbase URLのリファレンスを参照してください。curlは10秒で確認できる部分です。クライアントの動作については、利用者とFactoryの間の問題です。authModeは省略できます。Factoryのドキュメントによると、デフォルトではprovider-defaultとして認証情報をx-api-keyに送信します。KunavoのMessagesエンドポイントもそのヘッダーとAuthorization: Bearerの両方を受け付けます。Bearer形式を明示的に使う場合、Factoryのドキュメントではprovider: "anthropic"に対してauthMode: "bearer"を指定しており、こちらでも機能します。sk-kn-で始まります)。$10からクレジットを追加すると、呼び出しはその残高から支払われ、失敗した呼び出しは課金されません。ダッシュボードを開くと、Factory Droid設定が表示されます。手順
/app/keysでキーを作成してコピーします。キーが表示されるのは一度だけです。Droidを起動するシェルで環境変数KUNAVO_API_KEYとして設定してください。これにより、キーそのものが設定ファイルに保存されることはありません。~/.factory/settings.jsonを開き(存在しない場合は作成し)、上記のcustomModels配列を追加します。Factoryが必須としているフィールドはmodel、baseUrl、providerの3つで、displayNameはモデル選択画面に表示されるラベルです。providerの表記を確認してください。anthropic、openai、generic-chat-completion-apiのいずれかと完全に一致する必要があります。Factoryのトラブルシューティングでは、表記ミスが"Invalid provider"エラーの原因として挙げられています。- CLIで
/modelを実行します。項目はFactory独自のセクションの下にある別個のカスタムモデルセクションに、設定したdisplayNameのラベルで表示されます。Factoryは設定ファイルを監視しているため、保存するだけで反映され、再起動は不要です。 - 挨拶ではなく、ファイルを読み書きするタスクを与えてください。Droidはほぼすべての処理でツール呼び出しを利用するため、通常のチャットだけではその部分を確認できません。次に
/costを実行します。ここでFactoryがキャッシュヒット率を報告します。KunavoはAnthropicのcache_controlマーカーをネイティブに提供します。一方、Factoryは汎用Chat Completionsプロバイダーについて、キャッシュの動作は「プロバイダーによって異なり、保証できない」と説明しています。
FactoryのCustom Models(BYOK)ページで2026年9月21日に確認しました。サードパーティの設定は変更されます。ここに記載されたフィールド名が表示内容と一致しなくなった場合は、このページではなく、そのページを正しい情報源としてください。
クライアントをデバッグする前に確認すること
1回のリクエストで、失敗の原因がエンドポイント、キー、設定ファイルのどれかを特定できます。これがJSONを返すなら、同じベースURLとキーがFactory Droidで機能します。
# Settles whether a failure is the endpoint, the key, or the client.
curl -sS https://api.kunavo.com/v1/messages \
-H "Authorization: Bearer sk-kn-..." \
-H "anthropic-version: 2023-06-01" \
-H "content-type: application/json" \
-d '{"model":"claude-sonnet-5","max_tokens":16,"messages":[{"role":"user","content":"ping"}]}'フィールドに入力するモデルID
すべてのテキストモデルにはモデルIDでアクセスできます。現在の一覧はGET /v1/models、価格付きのカタログはモデルページにあります。料金は100万トークンあたりのUSDで、入力 / 出力の順です。
| モデル ID | Kunavo 入力 / 出力 | Factory Droidでの位置付け |
|---|---|---|
claude-sonnet-5 | $1.40 / $7.00 | デフォルトの作業モデル — provider: "anthropic"の項目に指定 |
claude-opus-5 | $3.50 / $17.50 | 間違えると高くつく変更を計画中。同じAnthropicエントリ |
claude-haiku-4-5 | $0.70 / $3.50 | 安価なターンとファイルの振り分け。量が支配的な場合。同じAnthropicエントリ |
gpt-5-6-sol | $2.00 / $12.00 | 別の系列によるセカンドオピニオン — generic-chat-completion-apiの項目が必要 |
Droidのカスタムモデルで利用できない機能
Factoryの公式ページに記載された3つの制限は、いずれも上記の設定が機能するかどうかではなく、何を期待できるかに関わります。
- ローカル環境でのみ利用できます。 FactoryのBYOKページには、カスタムモデルはローカルの
settings.jsonを読み込むDroid CLIとデスクトップアプリで利用できる一方、「Factoryのホスト型Webプラットフォームやモバイルプラットフォームには表示されない」と記載されています。ホスト型製品を通じて委任した処理では、ここで設定したキーにかかわらず、引き続きFactory請求の推論が使われます。 - 管理者が無効にできます。 Factoryのエンタープライズ向け制御には、ユーザーのBYOKを全面的に無効にする
modelPolicy.allowCustomModelsと、すべてのカスタムモデルの接続先を承認済みホスト1つに固定するallowedBaseUrlsが記載されています。管理対象のマシンでは、設定ファイルの問題を調べる前に確認してください。 - プラン料金は引き続き発生します。 ここで使うキーは置き換えではなく追加です。BYOKの利用枠を超えた場合のFactoryの請求と、利用枠の内容については料金ガイドで説明されており、このページでは再計算していません。
他の場所から設定をコピーする前に知っておきたい注意点が1つあります。Factoryは、snake_case形式のcustom_modelsとbase_urlを使う旧式の~/.factory/config.jsonも引き続き読み込み、それをsettings.jsonの下にマージします。また、そこでは${VAR_NAME}の展開が適用されないことがドキュメントに記載されています。そのファイルにプレースホルダーとして書かれたキーは、そのままの文字列で送信されます。settings.jsonを使ってください。
よくある質問
Factory DroidにカスタムAPIエンドポイントを追加するにはどうすればよいですか?
~/.factory/settings.json(Windowsでは%USERPROFILE%\.factory\settings.json)を編集し、customModels配列を追加します。各項目にはmodel、baseUrl、providerの3つの必須フィールドが必要で、displayName、apiKey、authMode、maxOutputTokens、extraHeadersなどの任意フィールドも指定できます。設定用のフォームはなく、JSONファイルが設定用のインターフェースです。Factoryはファイルを監視しているので、保存後にCLIで/modelを実行すると、項目が独立した「Custom models」という見出しの下に表示されます。
Factory DroidのbaseUrlの末尾に/v1を付ける必要がありますか?
providerの値によって異なります。Factoryのドキュメントでは文章ではなくProviderリファレンス表で明示されています。Anthropicの行ではパスなしのhttps://api.anthropic.comが示されているため、providerが"anthropic"の場合はオリジンのみ、Kunavoではhttps://api.kunavo.comを指定します。表にあるChat Completionsの行はいずれも/v1ルート(https://api.openai.com/v1、https://openrouter.ai/api/v1)を含むため、providerが"generic-chat-completion-api"の場合はhttps://api.kunavo.com/v1を指定します。Droidがルートを追加するため、Anthropic項目に/v1を付けると/v1/v1/messagesにアクセスし、認証エラーではなく404が返されます。
サードパーティのエンドポイントでClaudeモデルを使う場合、どのprovider値を指定すればよいですか?
"anthropic"を指定します。Factoryのドキュメントではprovider値を3種類定めており、それぞれ使用する通信プロトコルが異なります。"anthropic"は/v1/messagesのAnthropic Messages API、"openai"はOpenAI Responses API、"generic-chat-completion-api"はOpenAI Chat Completionsを表します。この値は請求元ではなく、エンドポイントが使用するプロトコルを示します。そのため、/v1/messagesに応答するゲートウェイなら、キーがどのアカウントに属するかにかかわらず"anthropic"を指定します。Factoryは、OpenAIまたはAnthropicの公式APIを呼び出す場合を除き、"generic-chat-completion-api"を使うよう案内しています。ただし、これは提供されるプロトコルについての説明であり、複数のプロトコルに対応するエンドポイントでは選択できます。
Factory Droidでproviderが無効と表示されたり、カスタムモデルが表示されなかったりするのはなぜですか?
Factoryのトラブルシューティングでは、原因が3つ挙げられています。モデルが選択画面に表示されない場合、通常はsettings.jsonのJSON構文エラーか、必須フィールド(model、baseUrl、provider)の不足です。「Invalid provider」エラーは表記の問題です。値はanthropic、openai、generic-chat-completion-apiのいずれかと完全に一致する必要があります。認証エラーの場合はキーかベースURLが原因です。Factoryは、ベースURLがプロバイダーのドキュメントに記載されたものと一致するか確認するよう案内しています。まず上記のcurlでクライアント外から原因を切り分けてください。JSONが返るなら、エンドポイントとキーは正常で、問題は設定ファイルにあります。