TL;DR
CometAPI を OpenCode で一度構成し、プログラミングタスクごとに Claude、GPT、または DeepSeek を選択します。本ガイドは、公式の CometAPI OpenCode 連携ガイドを完全なプロジェクトセットアップに拡張したものです。1 つの CometAPI API キー、3 つのモデル例を含む設定ファイル、モデル切り替えコマンド、そして再現可能な確認を伴う小さな JavaScript タスクを提供します。
Key Takeaways
- OpenCode の CometAPI 設定には、プロバイダー ID、API ベース URL、認証情報、およびモデル ID が必要です。
- 実際の API キーを opencode.json に含めないために {env:COMETAPI_KEY} を使用します。
- 1 つの opencode.json に Claude、GPT、DeepSeek の例を登録します。3 つのエントリはすべて同じ CometAPI キーとゲートウェイを使用します。
- 別々の Anthropic、OpenAI、DeepSeek のキーを取得せずに、OpenCode で選択するプロバイダー/モデルを切り替えます。
- 欠落した環境変数、不一致の API ルート、保留中のリクエストのように見える承認プロンプトに注意します。
What Is OpenCode and Why Use It with CometAPI?
OpenCode は、ターミナル、デスクトップアプリ、IDE 拡張を備えたオープンソースの AI コーディングエージェントです。プロジェクト内で、既存コードの説明、変更計画、ファイル編集、構成済み権限の下でのコマンド実行を行えます。本チュートリアルではターミナルワークフローを使用します。エージェントに小さなプログラミングタスクを与え、その提案アクションを確認し、ローカルテストで結果ファイルを検証します。インストールと使用方法は公式 OpenCode ドキュメントを参照してください。
CometAPI はモデルアクセス層を提供します。マルチモデルのワークフローでは、通常、サプライヤー間で認証情報、課金、接続設定を管理する必要があります。サポートされるモデルを 1 つの CometAPI アカウント経由でルーティングすると、このプロジェクトに共通のキーとベース URL を提供でき、リポジトリとタスク指示は OpenCode が保持します。同じタスクに対するモデルの比較や、プロジェクト構成を変えずに選択モデルを変更する場合に有用です。集約ゲートウェイは任意であり、単一プロバイダーのワークフローや特定の契約要件には直接アクセスが適する場合もあります。ここでの利点はマルチプロバイダーアクセスの簡素化ですが、API 形式、モデル挙動、ツール互換性は個別に検証が必要です。
CometAPI は OpenAI 互換の Chat Completions をサポートし、他の API 形式も公開しています。公式連携では各形式にアダプターを選択します。ここでは、Claude Sonnet 5 が Messages、GPT-6.1 Sol が Responses、DeepSeek V4.1 Flash が Chat Completions を使用します(以下の例に従います)。すべてのリクエストは同じキーで CometAPI に送られます。サプライヤー名と API 形式は別の概念であり、単一のモデルがすべての形式を受け付けると仮定すべきではありません。
| Configuration | Claude Sonnet 5 API in CometAPI | GPT-6.1 Sol API in CometAPI | DeepSeek V4.1 Flash API in CometAPI |
|---|---|---|---|
| Model supplier | Anthropic | OpenAI | DeepSeek |
| Model ID | claude-sonnet-5 | gpt-6.1-sol | deepseek-v4.1-flash |
| OpenCode provider ID | cometapi-messages | cometapi-responses | cometapi-chat |
| API format used here | Messages | Responses/ chat | Chat Completions |
| Adapter | @ai-sdk/anthropic | @ai-sdk/openai | @ai-sdk/openai-compatible |
What Do You Need Before Configuring CometAPI in OpenCode?
ターミナル、npm 付きの Node.js、API アクセスと利用可能残高のある CometAPI アカウント、および使い捨てのプロジェクトディレクトリを使用します。Bash の例は macOS、Linux、または WSL に適用されます。ラベル付きの PowerShell の例は Windows の構文を使用します。後述の JavaScript 確認のため、同じセッションで Node.js が利用可能である必要があります。
この手順では OpenCode 1 の設定スタイルを使用します。公式ドキュメントは OpenCode 1 と OpenCode 2 を区別しますが、どちらも opencode コマンドを使用します。開始前に opencode --version を記録し、そのメジャーバージョンの設定ドキュメントを参照してください。以下の 3 モデルのワークフローは連携手順と期待結果であり、エンドツーエンドテスト完了の主張ではありません。
例を実行する際には、CLI、Node.js、npm、オペレーティングシステム、テスト日を記録してください。API の使用は CometAPI アカウントに課金されます。以下のコマンドは期待される結果を伴うハンズオン手順であり、モデル生成出力や 3 モデル連携の成功を主張するものではありません。
node --versionnpm --versionopencode --version
How to Configure CometAPI in OpenCode Step by Step?
Step 1: Install OpenCode
OpenCode が利用できない場合は公式 npm パッケージをインストールします。ピン留めしないインストールは現在のパッケージリリースに従います。構成を使用する前にインストールされたバージョンを記録してください。ソースガイドの環境を再現する必要がある場合、記載の CLI バージョンは 1.18.16 です。
OpenCode CLI をインストールし、そのバージョンを表示します。
npm install -g opencode-aiopencode --version
インストール後に実行ファイルが見つからない場合は新しいターミナルを開いてください。最初のエージェントタスクの境界を明確にするため、使い捨てのプロジェクトディレクトリ内で続行します。
プロジェクトディレクトリを作成して移動します。
mkdir cometapi-opencode-democd cometapi-opencode-demo
Step 2: Create a CometAPI API Key
CometAPI アカウントから API キーを生成し、OpenCode を開始するのと同じターミナルで設定します。プレースホルダーはローカルで置き換えてください。キーをコミットしたり、プロンプトに貼り付けたり、共有ログに含めないでください。
変数は現在のシェルと、そのシェルから起動されるプロセスに適用されます。実際のトークンのスクリーンショットは撮らないでください。以下の確認は値を表示せず、変数の存在を報告します。
現在の Bash セッションに CometAPI キーを設定します。
export COMETAPI_KEY="YOUR_COMETAPI_KEY"
現在の PowerShell セッションに CometAPI キーを設定します。
$env:COMETAPI_KEY = "YOUR_COMETAPI_KEY"test -n "$COMETAPI_KEY" && printf "COMETAPI_KEY is set\n" || printf "COMETAPI_KEY is missing\n"if ([string]::IsNullOrWhiteSpace($env:COMETAPI_KEY)) { "COMETAPI_KEY is missing"} else { "COMETAPI_KEY is set"}
Step 3: Create opencode.json
プロジェクトルートに opencode.json を作成するか、~/.config/opencode/opencode.json を使用してエントリを複数プロジェクトで利用可能にします。プロジェクトファイルは本チュートリアルを自己完結に保ちます。以下の 3 つのエントリを含む単一の provider オブジェクトを使用してください。すでに provider オブジェクトがある場合は、重複した JSON キーを作らずに、そのエントリをマージします。
競合するフィールドについては、プロジェクト設定がグローバル設定を上書きします。競合しないフィールドは保持されます。カスタム OPENCODE_CONFIG ファイルはグローバル設定とプロジェクト設定の間で読み込まれます。管理された設定やインライン設定が存在する場合は、ドキュメント化された優先チェーンを確認してください。
以下の完全な設定を opencode.json として保存します。各プロバイダーは環境から COMETAPI_KEY を読み取ります。既定のモデルは意図的に省略しているため、3 つの例のいずれかを明示的に選択できます。
Flash バリアントは要求された DeepSeek V4.1 の例を明示にします。ツール利用のため GPT は Responses アダプターのままにします。CometAPI DeepSeek ガイドはここで使用される Chat Completions ルートを文書化しています。例を実行する前に、アカウントでのモデルの利用可能性と権限を再確認してください。
{ "$schema": "https://opencode.ai/config.json", "provider": { "cometapi-messages": { "npm": "@ai-sdk/anthropic", "name": "CometAPI Claude", "options": { "baseURL": "https://api.cometapi.com/v1", "apiKey": "{env:COMETAPI_KEY}" }, "models": { "claude-sonnet-5": { "name": "Claude Sonnet 5" } } }, "cometapi-responses": { "npm": "@ai-sdk/openai", "name": "CometAPI GPT", "options": { "baseURL": "https://api.cometapi.com/v1", "apiKey": "{env:COMETAPI_KEY}" }, "models": { "gpt-6.1-sol": { "name": "GPT-6.1 Sol" } } }, "cometapi-chat": { "npm": "@ai-sdk/openai-compatible", "name": "CometAPI DeepSeek", "options": { "baseURL": "https://api.cometapi.com/v1", "apiKey": "{env:COMETAPI_KEY}" }, "models": { "deepseek-v4.1-flash": { "name": "DeepSeek V4.1 Flash" } } } }, "permission": { "edit": "ask", "shell": "ask" }}
正しい baseURL: https://api.cometapi.com/v1。誤った baseURL: https://api.cometapi.com/v1/chat/completions。エンドポイントパスはアダプターが追加します。無関係の設定を削除せずに、既存の opencode.json にこの例をマージしてください。
edit と shell の設定は、現在の OpenCode の権限ルールの下でのファイル変更とコマンドの承認を要求します。コーディング例は対話的に実行し、そのリクエストを確認してください。OpenCode は、起動プロセスの OS アクセスも継承します。この演習では使い捨てディレクトリを使用してください。
Step 4: Check the Gateway Connection
3 モデルの接続確認の後に、任意の Gemini セットアップと検証を提供します。
以下の HTTP 例は DeepSeek の Chat Completions エントリを直接確認します。OpenCode からゲートウェイ接続を切り離して検査するのに有用です。Claude と GPT は次のステップで選択されたアダプターのルートを使用します。この HTTP リクエスト内のモデル ID を変更しても、そのプロトコルが自動的に変更されるわけではありません。
Bash から最小の Chat Completions リクエストを送信します。
curl --silent --show-error \ --output response.json \ --write-out "HTTP %{http_code}\n" \ https://api.cometapi.com/v1/chat/completions \ -H "Authorization: Bearer $COMETAPI_KEY" \ -H "Content-Type: application/json" \ -d '{"model":"deepseek-v4.1-flash","messages":[{"role":"user","content":"Reply with a short greeting."}]}'
このコマンドは curl の write-out と output オプションを使用して、HTTP ステータスを response.json から分離します。転送が成功しても HTTP エラーを含む場合があるため、出力されたステータスと JSON 本文を確認してください。これは curl 7.76.0 以降が必要な --fail-with-body に依存しない方法です。
シェル特有の JSON クォートを使わず、PowerShell から同じリクエストを送信します。
$body = @{ model = "deepseek-v4.1-flash" messages = @(@{ role = "user"; content = "Reply with a short greeting." })} | ConvertTo-Json -Depth 4$response = Invoke-WebRequest -UseBasicParsing -Method Post ` -Uri "https://api.cometapi.com/v1/chat/completions" ` -Headers @{ Authorization = "Bearer $env:COMETAPI_KEY" } ` -ContentType "application/json" ` -Body $body$response.Content | Set-Content -Encoding UTF8 response.json"HTTP $($response.StatusCode)"
HTTP エラー時、PowerShell は最後の 2 行が実行される前に例外を送出する場合があります。その失敗からステータスとマスクされたエラー詳細を取得してください。成功したレスポンスとして記録しないでください。
DeepSeek リクエストの期待結果: HTTP 200 と choices[0].message.content に空ではないテキスト。HTTP 200 のみを受け入れるのではなく、保存した response.json を確認してください。以下の追加はレスポンス形状と、構成済みの 3 つのルートを確認する方法を示します。例は説明目的であり、この改訂はライブの CometAPI テスト結果を主張するものではありません。テキストのみのリクエストでは、ストリーミングやツール呼び出しは検証されません。
説明用の DeepSeek レスポンス形状: あいさつ文、usage 値、その他のフィールドは実際のリクエストに依存します。以下の JSON は意図的に短縮した例であり、取得された API レスポンスではありません。
{"choices":[{"message":{"role":"assistant","content":"Hello!"}}]}
実際に成功した HTTP リクエスト後、ステータス行は HTTP 200 と表示され、response.json には空でない assistant テキストが含まれているはずです。実際のステータスと本文は自身の実行で保持し、テスト証拠として例をコピーしないでください。
Step 5: Switch Between Claude, GPT, and DeepSeek
このステップのコマンドは、要求したアシスタントのマーカーを返すはずです。端末バナー、タイミング、メタデータを省いた説明用のアシスタントテキスト:
Claude: CLAUDE_READYGPT: GPT_READYDeepSeek: DEEPSEEK_READY
これらの行は期待される内容のみを示します。端末トランスクリプトではありません。各プロバイダーの実際の出力とプロセスの終了ステータスを記録してください。マーカーが欠落している、またはリクエストが失敗する場合は調査が必要です。
opencode.json を含むディレクトリから開始します。構成済みの各プロバイダーのモデルを一覧表示し、各エントリに短いテキストリクエストを送ります。これらのコマンドは選択モデルとアダプターを切り替えます。CometAPI キーとベース URL は同じままです。
以下のコマンドで、3 つのエントリが可視でテキストを返せることを確認します。
opencode models cometapi-messagesopencode models cometapi-responsesopencode models cometapi-chatopencode run --model cometapi-messages/claude-sonnet-5 "Reply exactly with: CLAUDE_READY"opencode run --model cometapi-responses/gpt-6.1-sol "Reply exactly with: GPT_READY"opencode run --model cometapi-chat/deepseek-v4.1-flash "Reply exactly with: DEEPSEEK_READY"
対話的に切り替えるには、opencode を起動し、/models に入り、CometAPI Claude、CometAPI GPT、または CometAPI DeepSeek を選択します。OpenCode はそのエントリのプロバイダー/モデルの組み合わせを使用します。3 つのサプライヤーアカウントや 3 つの API キーは不要です。この環境変数連携構成では、2 つ目の認証情報を供給するために /connect を使用しないでください。COMETAPI_KEY が欠落している場合は、起動シェルで修正する必要があります。
期待結果: 各短いリクエストが要求されたマーカーを返します。各モデルの実際の結果を記録してください。可視なモデルエントリは登録を確認し、成功したテキストレスポンスはそのリクエストパスを確認します。いずれか片方だけではファイルツールが機能することの証明にはなりません。
Gemini は別のプロバイダーとプロトコルを使用します。上記の Claude、GPT、DeepSeek エントリは保持し、以下のエントリを既存の provider オブジェクトにマージしてください。以下の base URL は、レビューアが提示した CometAPI 構成に従います。使用前に CometAPI アカウントで現在のルートとモデルアクセスを確認してください。
Google アダプターはカスタム baseURL をサポートし、apiKey を x-goog-api-key で送信します。AI SDK Google プロバイダーリファレンスを参照してください。これはアダプター設定を確認するものであり、特定の Gemini モデルが CometAPI ゲートウェイで有効になっていることを証明するものではありません。
{ "provider": { "cometapi-gemini": { "npm": "@ai-sdk/google", "name": "CometAPI Gemini", "options": { "baseURL": "https://api.cometapi.com/v1beta", "apiKey": "{env:COMETAPI_KEY}" }, "models": { "YOUR_GEMINI_MODEL_ID": { "name": "CometAPI Gemini (account-selected model)" } } } }}
YOUR_GEMINI_MODEL_ID を、JSON キーと以下のコマンドの両方で、CometAPI アカウントで有効な正確な Gemini モデル ID に置き換えてください。これはプレースホルダーであり、実在のモデル ID ではありません。このプロバイダーエントリを、最上位の provider キーを重複させずにマージし、COMETAPI_KEY が設定された同じシェルから OpenCode を起動します。
opencode models cometapi-geminiopencode run --model cometapi-gemini/YOUR_GEMINI_MODEL_ID "Reply exactly with: GEMINI_READY"
期待されるアシスタントテキスト: GEMINI_READY。モデルが一覧表示されることはローカル登録を確認し、マーカーを受け取ることはテキストリクエストを確認します。実際のレスポンスと終了ステータスを保存してください。コーディングツールを検証するには、使い捨ての新しいディレクトリで opencode --model cometapi-gemini/YOUR_GEMINI_MODEL_ID を起動し、以下の greet.cjs/check.cjs タスクを繰り返します。テキストの成功だけではストリーミング、編集、ツール呼び出しは検証されません。
How Do You Run a Coding Task with Claude, GPT, and DeepSeek?
各モデルで同じ小さなタスクを使用します。greeting 関数を作成し、アサーションを追加し、実行します。2 番目のモデルが最初のモデルで作成されたファイルを単純に再利用できないよう、3 つの新しいディレクトリを用意してください。これはパフォーマンス比較ではなく、連携ワークフローを確認するものです。
opencode.json と同じ場所に prepare-runs.cjs を保存して一度実行します。これは 3 つの新しいディレクトリを作成し、共有設定のみをコピーします。任意のターゲットディレクトリがすでに存在する場合は停止し、以前の作業は上書きされません。
const fs = require("node:fs");const path = require("node:path");const root = __dirname;const names = ["claude-demo", "gpt-demo", "deepseek-demo"];const config = path.join(root, "opencode.json");if (!fs.existsSync(config)) throw new Error("Missing opencode.json");for (const name of names) { if (fs.existsSync(path.join(root, name))) { throw new Error(`Directory already exists: ${name}`); }}for (const name of names) { const dir = path.join(root, name); fs.mkdirSync(dir); fs.copyFileSync(config, path.join(dir, "opencode.json"));}node prepare-runs.cjscd claude-demoopencode --model cometapi-messages/claude-sonnet-5# After exiting OpenCode:cd ..cd gpt-demoopencode --model cometapi-responses/gpt-6.1-sol# After exiting OpenCode:cd ..cd deepseek-demoopencode --model cometapi-chat/deepseek-v4.1-flash# After exiting OpenCode:cd ..
以下のセッションのいずれかを 1 度に 1 つずつ、親プロジェクトディレクトリから開始して実行します。次の例に移る前にセッションを終了してください。各セッションで、同じタスクを送信し、提案された編集とコマンドを確認します。OpenCode を起動するプロセスから Node.js が利用可能である必要があります。
エージェントに小さな JavaScript 関数を作成して検証するよう依頼します。
Create greet.cjs in this directory.Export a function named greet(name) that returns "Hello, " + name + "!".Create check.cjs using node:assert/strict.Assert that greet("Ada") equals "Hello, Ada!".Run node check.cjs and report its actual exit status.Do not modify opencode.json or unrelated files.
期待結果: エージェントが構成された承認を要求し、2 つのファイルを作成し、node check.cjs を終了ステータス 0 で完了します。実際に何が起きたかを記録してください。ファイルを検査し、確認を自分で再実行してください。成功の文章的主張だけでは不十分です。ツール呼び出しが拒否されたり不正な形式の場合は、保留中の承認とは別にルート互換性を調査してください。
Reference Files and Local Verification
以下のファイルは、要求されたタスクの参照実装です。本ガイドのために直接作成されており、モデル生成された成果物として提示しているわけではありません。観測可能な挙動が一致することが、エージェント実行の受け入れ条件です。
function greet(name) { return "Hello, " + name + "!";}module.exports = { greet };const assert = require("node:assert/strict");const { greet } = require("./greet.cjs");assert.equal(greet("Ada"), "Hello, Ada!");node check.cjsprintf "exit=%s\n" "$?"node check.cjs"exit=$LASTEXITCODE"
ローカル参照確認: Windows、Node.js v24.19.0、2026 年 10 月 22 日。node check.cjs は標準出力なしで終了ステータス 0 を返しました。これは 2 つの参照ファイルのみを確認します。OpenCode のインストール、CometAPI アクセス、承認プロンプト、モデルツール呼び出しは検証しません。
| Run | Selected model entry | What to record |
|---|---|---|
| Claude | cometapi-messages/claude-sonnet-5 | レスポンス、生成ファイル、承認、テストの終了コード |
| GPT | cometapi-responses/gpt-6.1-sol | レスポンス、生成ファイル、承認、テストの終了コード |
| DeepSeek | cometapi-chat/deepseek-v4.1-flash | レスポンス、生成ファイル、承認、テストの終了コード |
モデルごとに 1 件の結果記録を保持してください。選択したプロバイダー/モデル、レスポンス有無、greet.cjs と check.cjs の作成有無、承認の表示有無、node check.cjs の終了コードを記録します。失敗は失敗として記録し、参照実装から合格を推測しないでください。
Protect Credentials and Verify Reliability
COMETAPI_KEY はリポジトリファイルや共有ログではなく環境変数に保存してください。ファイル編集とシェルコマンドの承認を有効に保ち、新しい構成は使い捨てプロジェクトでテストしてください。
直接の API リクエスト、OpenCode のレスポンス、ファイル編集ワークフローを個別に検証します。エラーとテスト結果を記録し、一時的な失敗のみ再試行し、中断したタスクを繰り返す前にワークスペースを確認します。
CometAPI はモデル切り替えを簡素化しますが、この構成だけで OpenCode による自動クロスモデルフェイルオーバーが提供されるわけではありません。モデルが利用不能になった場合は、手動で別の検証済みモデルを選択し、受け入れ確認を繰り返してください。
How much does it cost to use Opencode with CometAPI?
Prices for CometAPI, and how is billing structured
CometAPI は月額サブスクリプション料なしの従量課金制を提供し、実際の API 利用分のみ課金します。公式モデルの料金は一般的にプロバイダーの標準価格より 20% 低く、追加のボリュームディスカウントも利用可能です。開発者は 1 つのアカウントで Claude、GPT、DeepSeek その他のモデルにアクセスでき、選択したモデルのトークン消費に基づいて支払います。現在の料金は CometAPI の料金ページを確認してください。
キャッシュや追加料金のないリクエストの場合:
コスト = (Input tokens × Input rate + Output tokens × Output rate) / 1,000,000
たとえば、仮のレートが $1/M input tokens と $4/M output tokens、使用量が 20,000 input と 2,000 output tokens の場合、コストは $0.028 です。これは説明用のレートであり、実際のモデル価格ではありません。
各タスクのトークン使用量、総 API 料金、実行時間、テスト結果を記録してください。コストを削減するには、不要なコンテキストを抑え、簡潔なプロンプトを使用し、失敗したリクエストの繰り返しを避け、同等の品質要件を満たす低コストモデルを選択します。
OpenCode API Cost Optimization Strategies
コーディング品質を損なわずに OpenCode のコストを削減するには、モデル選択、トークン効率、不要な API リクエストに注目します。
- 適切なモデルを選ぶ: 日常的なコーディングタスクには DeepSeek などの低コストモデルを使用し、複雑なデバッグ、リファクタリング、推論には Claude や GPT を割り当てます。
- トークン消費を減らす: プロンプトを簡潔に保ち、関連するプロジェクトファイルのみ提供し、大量のリポジトリコンテキストを繰り返し送信しないでください。
- プロンプトキャッシュを活用: プロジェクトの指示やコード参照など繰り返しのコンテキストに対して、サポートされるキャッシュ機能を活用し、入力コストを削減します。
- 不要な再試行を避ける: 再試行の前に構成と認証エラーを修正し、重複作業を防ぐために前回の出力を確認します。
- 実際の支出を監視: CometAPI でトークン使用量、API 料金、タスク完了率を追跡します。トークン価格ではなく、成功したタスクあたりのコストを比較します。
CometAPI の割引された従量課金と組み合わせることで、信頼性を維持しながら支出を管理できます。
How Can You Extend the CometAPI Configuration?
モデルを追加するには、その API 形式をサポートするプロバイダーの下にモデル ID を配置するか、必要なアダプターを持つ新しいプロバイダーエントリを追加します。その後、/models でそのプロバイダー/モデルを選択します。認証情報は COMETAPI_KEY に保持し、既存エントリは残して切り替えを選択操作のままにしてください。
公式ガイドは 4 つの API 形式(Gemini を含む)を扱います。本記事は Claude、GPT、DeepSeek に必要な 3 つのエントリを使用します。複数の選択モデルが Chat Completions をサポートする場合、1 つの cometapi-chat の models マップを共有できます。Responses 専用や Messages 専用のルートを、マップ数を減らしたいという理由だけでそのマップに移動しないでください。
呼び出すルートに基づいてアダプターを選び、プログラミングタスクに基づいてモデルを選びます。サプライヤーの変更には新しい CometAPI キーは不要ですが、API 形式の変更には一致する構成済みアダプターが必要です。
How to Troubleshoot CometAPI in OpenCode?
最初に失敗する段階を追います: HTTP リクエスト → OpenCode プロバイダー → ファイルツール。HTTP が失敗する場合は、認証情報、モデルアクセス、エンドポイント詳細を確認します。HTTP が機能し、OpenCode が失敗する場合は、構成と起動環境を確認します。テキストが両方で機能し、ファイルアクションが失敗する場合は、権限とツール呼び出しの互換性を確認します。
| 症状 | 最初に確認する点 | 次のアクション | 診断コマンド / 根拠 |
|---|---|---|---|
| 401 応答 | キー値と Authorization ヘッダー | 現在のターミナルでキーを設定。空白の混入に注意。 | キーを表示せずに変数の存在を確認。HTTP ステータスとマスクしたエラーを保持。 |
| 403 またはアカウント制限 | エラー本文とアカウント権限 | CometAPI でモデルアクセスとアカウント状態を確認。 | マスクしたエラー応答を保存し、アカウントアクセスを確認。 |
| 404 応答 | ホスト、エンドポイントパス、モデル ID | リクエストを選択モデルの API ドキュメントと比較。 | response.json をリクエストしたモデルとエンドポイントと比較。 |
| OpenCode にモデルが表示されない | プロジェクトディレクトリとプロバイダー設定 | 有効な JSON と一致するプロバイダー/モデル名を確認。編集後に再起動。 | opencode models cometapi-chat / cometapi-messages / cometapi-responses を実行。opencode --version を記録。 |
| テキストは機能、ツールは失敗 | ツール呼び出しレスポンスとアダプター互換性 | ルートのサポートを確認。承認プロンプトと拒否されたツール呼び出しを区別。 | 短いテキストリクエストと失敗したツールアクションを比較。エラーを保持。 |
| コマンドが承認待ちで停止 | 対話セッションと権限設定 | 意図したアクションを確認して承認。保留中のリクエストを API 障害と見なさない。 | 対話セッションを使用。要求されたアクションと承認結果を記録。 |
| 429 または一時的サーバーエラー | エラー詳細と利用制限 | リクエストの同時実行を減らす。再試行ガイダンスがある場合はそれに従い、連続再試行は避ける。 | HTTP ステータスと再試行ガイダンスを保持。同時実行を削減。 |
問題を共有する際は、OpenCode バージョン、OS、モデル ID、エンドポイントパス、マスクしたエラーテキストを含めてください。API キーや非公開リポジトリの内容は除外します。最小限の再現リクエストを維持し、構成とツールの失敗を個別に調査できるようにします。
FAQ
新しいターミナルで OpenCode が CometAPI キーを見失うのはなぜですか?
上記の export と PowerShell コマンドは、現在のセッションとその子プロセスのために環境変数を設定します。別途開いたターミナルやすでに実行中のエディタはそれを継承しない場合があります。OpenCode を起動する環境でキーを設定し、そのプロセスを再起動してください。永続的な設定には、シークレットをリポジトリファイルに埋め込むのではなく、環境の資格情報管理を使用してください。
OpenCode は .env ファイルから COMETAPI_KEY を自動的に読み込みますか?
{env:COMETAPI_KEY} 式はプロセス環境を読み取ります。単に .env ファイルを作成するだけでは、その変数が読み込まれたことにはなりません。OpenCode を起動する前に、シェルまたは明示的に構成された環境ローダーを使用してください。プロバイダーの不具合と決めつけるのではなく、起動プロセスで空の値を診断してください。
グローバルの OpenCode 構成がこのプロジェクトセットアップを変更することはありますか?
OpenCode は構成を置き換えるのではなくマージします。プロジェクトファイルはグローバルファイルの重複フィールドを上書きし、無関係なグローバル設定は残ります。カスタム OPENCODE_CONFIG ファイルはその間に読み込まれます。リポジトリごとに挙動が異なる場合、ローカルファイルだけを入力と仮定せず、これらのソースと管理/インライン設定を比較してください。
OpenCode のモデルリストを更新すると CometAPI へのアクセスが有効になりますか?
いいえ。モデル更新オプションは models.dev キャッシュを更新しますが、アカウントアクセスを付与したり、エンドポイントがモデル ID を受け付けることを証明するものではありません。手動で構成したエントリは、成功したリクエストの前でも可視になり得ます。実際のリクエストでルートを確認し、CometAPI アカウント設定でアクセス制限を確認してください。
curl は機能するのに、OpenCode が CometAPI を呼び出せないのはなぜですか?
2 つのプロセスが異なる認証情報を読み込んでいたり、異なるモデル ID を使用していたり、異なるリクエスト形状を送っている可能性があります。まず、成功した HTTP リクエストと同じターミナルから短いテキストプロンプトを再実行してください。その後、プロバイダーのベース URL、アダプター、選択モデルを比較します。単純なテキストが機能し、エージェントタスクが失敗する場合は、ツール関連のエラーを別途保持してください。HTTP 接続性だけではツール互換性は示されません。
Conclusion
これで、Claude、GPT、DeepSeek の例を含む 1 つの opencode.json、共有の CometAPI 認証情報、アクティブモデルを切り替えるコマンドが揃いました。短いテキストリクエストでアクセスを確認し、別々のディレクトリで同じファイル作成タスクを実行してコーディングワークフローを検証します。より大きなリポジトリに適用する前に、観測結果を環境詳細とともに保持してください。
