ドキュメント

ドキュメント

Jan Agent

Jan Agentには推論エンジンが付属していないため、常に指定したエンドポイントを呼び出します。jan config setの1行でKunavoの設定を~/.jan/config.tomlに書き込めば、ターミナルエージェントを単一のキーでClaudeとGPT上で動作させられます。

`jan config set --base-url https://api.kunavo.com/v1`の1行で~/.jan/config.tomlにKunavoを書き込みます。推論エンジンを搭載しないJan AgentプレビューCLIは、そのキーで動作します。

jan config set — ~/.jan/config.toml に書き込み
# Jan Agent is a preview on a nightly channel — check your build first.
jan --version

jan config set \
  --provider kunavo \
  --api-key sk-kn-... \
  --base-url https://api.kunavo.com/v1 \
  --model claude-sonnet-5 \
  --model claude-haiku-4-5 \
  --api-type openai

jan config list   # configured providers as JSON, keys redacted
どちらの通信形式でも、ベースURLの/v1は残します。 Janが追加するのはルートだけです。プロバイダーの追加に関するページには、サインイン時に「GET {base_url}/modelsに対してキーを検証する」とあり、プロバイダーのページには、セッション内で初めて/modelを開いたときに、設定済みのエントリにGET /modelsを問い合わせるとあります。これらのドキュメントに掲載されているベースURLは、jan cli models listのサンプルにあるAnthropicのURLも含め、すべて/v1で終わっています。そのため、--api-type anthropicにもhttps://api.kunavo.com/v1を付けます。これはClaude Codeや公式Anthropic SDKとは逆で、そちらでは同じサフィックスを付けると/v1/v1/messagesになり、404が返ります。エラーに重複したパスが含まれていれば、どちらの規則が適用されているかを判別できます。
Jan Agentはプレビュー版であり、自らそう明記しています。 クイックスタートには、devのインストーラーはagent-nightlyチャネルから取得するため、「ナイトリービルド相当の品質を想定してください」との注意があります。参照できるタグ付きリリースはないため、jan --versionを実行し、その文字列をこの設定と一緒に記録してください。以下のフラグは、このページの末尾に記載した日付のドキュメントから読み取ったものであり、ナイトリービルドでは名前が変わる可能性があります。ソースからのビルド(scripts/install-jan-agent.sh --source)は自動更新されないため、バージョンを固定する方法の1つになります。
この設定はJan自身のドキュメントから読み取ったものです。KunavoはJan Agentを自社のエンドポイントに接続して実行していません。 セッション、ストリーミングのターン、ツールの往復呼び出しのいずれも実行しておらず、この系列のすべてのクライアントについて同様です。公開された設定ページは互換性テストではありません。この接続方法を試す間も、現在動作している接続方法を利用できる状態にしておき、元に戻す操作はjan config unset --provider kunavoだけで完了することを覚えておいてください。
Kunavoは埋め込み、テキスト読み上げ、音声文字起こしのモデルを提供していないため、Kunavoのプロバイダーエントリが対応するのはチャットだけです。Jan Agentもそれ以上を必要としません。メモリはベクトルストアではなく<project>/.jan/agent/memory/配下の通常のファイルに保存されるため、エージェント自身のループに別種のモデルが必要な処理はありません。
まだキーをお持ちですか?Kunavoアカウントを作成し、キーを作成します(sk-kn-で始まります)。$10からクレジットを追加すると、呼び出しはその残高から支払われ、失敗した呼び出しは課金されません。ダッシュボードを開くと、Jan Agent設定が表示されます。

手順

  1. /app/keys でキーを作成してコピーします。キーは一度だけ表示されます。
  2. 設定対象を確認します:jan --version。Jan Desktopにもjanとして呼び出すCLIが付属していますが、コマンドの構成が異なるため、残りのコマンドを入力する前にjan config set --helpに--base-urlが表示されることを確認してください。
  3. 上記のjan config setの行を実行します。--providerは固定の一覧から選ぶ名前ではなく、自分で決めるIDです。ドキュメントにあるローカルハードウェアの例でも--provider localを使用しています。また、--modelは繰り返し指定できますが、既存の一覧に追加するのではなく、一覧を置き換えます。
  4. jan config list(キーは伏せられます)、またはファイル自体を表示するjan config pathで設定が反映されたことを確認し、その後jan cli models listで各プロバイダーが提供しているモデルを確認します。手入力したモデルIDは、エンドポイントの一覧から消えても残ります。一方、jan cli models refresh --provider kunavoはエンドポイントの一覧を正とします。
  5. プロジェクトのディレクトリに移動してjanを実行し、/modelでモデルを選びます。初回はjan --planを推奨します。読み取り専用なので、ディスクに何かを書き込む前にプロトコルの不一致を検出できます。
  6. ファイルを編集するタスクを与えてください。Jan Agentはエージェントなので、初回実行ではツール呼び出しとストリーミングを試す必要があります。エンドポイントとの互換性が不十分な場合、最初に失敗するのはこれらの機能であり、あいさつだけではどちらも試せません。

Jan Agentのプロバイダーページで2026年9月21日に確認しました。サードパーティの設定は変更されます。ここに記載されたフィールド名が表示内容と一致しなくなった場合は、このページではなく、そのページを正しい情報源としてください。

これが短い概要です。完全な手順 — モデルの選択、実際のセッション費用、失敗するケース — はJan Desktopも扱う、JanのモデルとAPI料金ガイドにあります。

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

1回のリクエストで、失敗の原因がエンドポイント、キー、設定ファイルのどれかを特定できます。これがJSONを返すなら、同じベースURLとキーがJan Agentで機能します。

# 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 入力 / 出力Jan Agentでの位置付け
claude-sonnet-5$1.40 / $7.00標準で使用するモデル — --modelの先頭に置くID
claude-opus-5$3.50 / $17.50間違えると高くつく計画です。jan --plan と組み合わせてください
claude-haiku-4-5$0.70 / $3.50低コストのターン:トリアージ、要約、終日実行するループ
gpt-5-6-sol$2.00 / $12.00同じキーと同じベースURLで、別のモデル系列から意見を得る
gpt-5-6-terra$0.70 / $4.20長いコンテキストの読み取り。api-typeは引き続きopenai
請求は月額料金なしの前払い残高からトークン単位で行われます — 請求を参照してください。繰り返し送られるコンテキスト(エディターやチャットクライアントが送る内容の大半)では、プロンプトキャッシュのほうがモデル選択より請求額を大きく左右します。

Jan APIキーと呼ばれるものは2種類あります

同じファイルに保存されますが、意味は正反対です。そのため、もう一方を想定している人にはjan config listが間違っているように見えることがあります。

何を取得元認証先
jan loginシェルから、またはコンソールの/loginで、セルフホスト型バックエンドのTokamakにサインインご自身のTokamakデプロイ環境。Jan Agentが受け取ったキーを~/.jan/config.tomlに書き込みます
jan config set --api-keyエンドポイント用にすでに保有している認証情報。このページではKunavoのsk-kn-キーリクエストごとに課金される、そのエンドポイント。このページで扱っているのはこの行です

Jan Desktopはどちらも発行しません。アカウントがないため、そこで生成できるものもありません。ローカルAPIサーバーには自分で決めたキーを設定しますが、これはさらに別の3つ目の意味であり、別のホストに属します。

Jan Desktopから引き継がれるものと、その範囲

Jan Agentはプロバイダー設定を4つのソースから読み込み、下にあるものほど上にあるものより優先されます。多くの人が意外に感じるのは2つ目です。

  1. ~/.jan/config.toml — 基本となる設定であり、jan config setが書き込む唯一のファイルです。
  2. Jan Desktopのsettings.json — 継承のみ。Agentでまだ設定していないプロバイダーを追加し、すでに設定済みのプロバイダーを上書きすることはなく、書き戻されることもありません。
  3. プロジェクトのagent.toml内にある[provider]ブロック — プロジェクトごとの明示的な選択なので、前の2つより優先されます。このファイルは通常コミットされるため、api_keyを含めないでください。
  4. コマンドラインの--provider / --api-key、またはJAN_API_KEY / <PROVIDER>_API_KEY — 最も明示的で、最も一時的な設定です。

見当違いのデバッグを始める前に知っておくべき影響が2つあります。jan config listではプロバイダーがないと表示されても、jan cli models listでは多数返される場合があります。後者にはDesktopから継承したプロバイダーも含まれ、それらは~/.jan/config.tomlには保存されていません。また、継承したプロバイダーは更新されません。ここには書き換え対象のエントリがないためです。Kunavoのモデル一覧を最新に保ちたい場合は、独自のjan config setエントリが必要であり、上記のブロックがそれを作成します。

2つのプロバイダーが同じモデルIDを提供している場合

Kunavoはclaude-sonnet-5のようなIDを提供しており、ベンダーに直接接続するプロバイダーエントリも同じIDを提供します。Jan Agentはどちらかを選ぶ必要があります。文書化されている優先順位は、まずプロバイダーのmodels一覧での完全一致、次に設定済みプロバイダーを指定する<provider>/<model>プレフィックスです。複数のプロバイダーが同じIDを提供している場合は、認証情報のあるプロバイダーが、キーのない同等のプロバイダーより優先されます。そのため、どちらを指定したいのかはkunavo/claude-sonnet-5で明示します。この修飾子はJan専用であり、上流側はプロバイダーで修飾されたIDを拒否するため、リクエスト送信前に取り除かれます。

コンソール内から同じエントリを設定する

フラグを入力したくない場合は、/settings > providersで同じ~/.jan/config.tomlエントリを管理できます。aは追加フォームを開き、入力項目はname、base url、api key、スペース区切りのmodelsです。このフォームには、フラグにはない動作が2つあります。ベースURLはhttps://である必要があります(localhostのエンドポイントではhttp://も使用できます)。そのため、暗号化されていないリモート接続でキーが送信されることはありません。Kunavoはhttps://なので、これは問題になりません。また、編集時のAPIキー欄には(unchanged)が表示され、入力しない限り保存済みの値が保持されます。この欄を空にすると、キーはそのまま残るのではなく、削除されます。

よくある質問

Jan AgentをカスタムAPIエンドポイントに接続するにはどうすればよいですか?

次のコマンド1つで設定できます。jan config set --provider <id> --api-key <key> --base-url <url> --model <model> --api-type openai。provider idは固定リストから選ぶ名前ではなく、自分で決める値です。--modelは複数回指定でき、既存のリストを置き換えます。--api-typeのデフォルトはOpenAI互換なので、OpenAI形式のエンドポイントでは省略できます。設定は~/.jan/config.tomlに書き込まれます。このファイルはコンソール内の/settings > providersから編集することもできます。Janの「プロバイダーの追加」ページによると、一般的なOpenAI互換エンドポイントにコードは一切不要で、この設定だけで利用できます。

Jan AgentのベースURLの末尾に/v1は必要ですか?

はい。Anthropicのワイヤ形式でも必要です。Janが追加するのはルートパスだけです。「プロバイダーの追加」ページによると、サインイン時にGET {base_url}/modelsへキーを送って検証し、providersページによると、セッションで初めて/modelを開いたときに設定済みエントリーのGET /modelsを呼び出します。追加されるパスは/v1/modelsではなく/modelsなので、保存するベースURLにはあらかじめ/v1まで含めておく必要があります。Kunavoの場合はhttps://api.kunavo.com/v1です。Janのドキュメントに記載されているベースURLはすべて同じ形式で、jan cli models listのサンプルにあるAnthropicエントリーも例外ではありません。これは、/v1を追加すると/v1/v1/messagesになって404が返るClaude CodeやAnthropic公式SDKとは逆です。

jan loginとjan config set --api-keyの違いは何ですか?

認証する対象が異なります。jan loginはセルフホスト型バックエンドのTokamakにサインインし、取得したキーを~/.jan/config.tomlに保存します。これは自分のデプロイ環境へのサインインです。jan config set --api-keyは、すでに持っているエンドポイント用の認証情報を保存するコマンドで、Kunavoなどのサードパーティープロバイダーを使う場合はこちらを使用します。Jan Desktop自体はどちらのキーも発行しません。発行元となるアカウントがないためです。ローカルAPIサーバーが求めるキーは自分で決める文字列で、これもまた別の意味で使われる「キー」です。

jan cli models listにはモデルが表示されるのに、jan config listには何も表示されないのはなぜですか?

2つのコマンドが異なる情報を参照するためです。jan config listが表示するのは~/.jan/config.tomlに保存された内容だけですが、jan cli models listにはJan Desktopから継承されたプロバイダーも含まれます。これらは同ファイルには保存されません。Janのドキュメントにもこの点が明記されています。そのため、継承されたプロバイダーは更新されません。書き換えるエントリーがないからです。プロバイダーのモデルリストを最新の状態に保ちたい場合は、まずjan config setで追加してください。

Jan AgentでAnthropicアカウントなしにClaudeモデルを実行できますか?

はい。Jan Agentには推論エンジンが組み込まれていないため、モデルは常に設定したエンドポイントで実行されます。また、--api-typeが指定するのはベンダーではなくワイヤプロトコルです。ClaudeのIDは設定したベースURLで解決されるため、必要な認証情報はそのエンドポイント用のものです。Kunavoでは、1つのキーでOpenAI互換のインターフェースを通じてClaudeとGPTのIDを利用できます。この設定はJanの公式ドキュメントをもとに掲載しており、クライアント上でのテスト実行によるものではありません。また、Jan Agent自体もnightlyチャンネルで提供されているプレビュー版です。フラグの動作は、jan --versionで確認したビルドに対するものとしてお考えください。

Jan Agentがすべてのリクエストで404を返します。原因は何ですか?

ほとんどの場合、ベースURLが原因です。/v1がないと、Janはオリジンに/modelsと/chat/completionsをリクエストするため、認証エラーではなく404になります。エラーに/v1/v1が重複して表示される場合は、すでに/v1が含まれるベースURLに同じサフィックスを追加しています。まずクライアントの外で、同じキーを使ってエンドポイントのGET /v1/modelsを通常のcurlで呼び出し、切り分けてください。JSONが返ればエンドポイントとキーは正常で、設定エントリーに問題があります。401ならキー、404ならURLが原因です。その後、jan config pathを確認し、保存されたbase_urlを直接読み取ってください。