Claude Code、AmazonQ、Opencode、Goose、Aider、Gemini、GitHub Copilot、Sourcegraph Amp、Codex、Auggie、およびCursor CLI を HTTP API で制御します。
AgentAPI は以下のような用途で使用できます:
- コーディングエージェント向けの統一されたチャットインターフェースを構築する
- 1 つのエージェントが別のコーディングエージェントを制御できるようにする MCP サーバーのバックエンドとして使用する
- プルリクエストレビューをエージェントに送信するツールを作成する
- その他にも多くの使い方があります!
-
agentapiをインストールしてください:OS=$(uname -s | tr "[:upper:]" "[:lower:]"); ARCH=$(uname -m | sed "s/x86_64/amd64/;s/aarch64/arm64/"); curl -fsSL "https://github.com/coder/agentapi/releases/latest/download/agentapi-${OS}-${ARCH}" -o agentapi && chmod +x agentapi
または、最新のリリースバイナリをリリースページからダウンロードすることもできます。
-
インストールを確認してください:
agentapi --help
macOS では、システムがバイナリを検証できないというメッセージが表示された場合は、
System Settings → Privacy & Securityに移動し、「Open Anyway」をクリックしてからコマンドを再度実行してください。 -
Claude Code サーバーを実行してください(システムに
claudeがインストールされており、PATHに含まれていることを前提としています):agentapi server -- claude
claudeがPATHにないというエラーが表示されても、シェルから実行できる場合は、which claudeを使用して完全なパスを取得し、代わりにそのパスを使用してください。 -
エージェントにメッセージを送信してください:
curl -X POST localhost:3284/message \ -H "Content-Type: application/json" \ -d '{"content": "Hello, agent!", "type": "user"}'
-
会話履歴を取得してください:
curl localhost:3284/messages
-
http://localhost:3284/chat でチャット Web インターフェースを試してください。
エージェントを制御できる HTTP サーバーを実行します。エージェントに追加の引数を渡したい場合は、-- フラグの後に完全なエージェントコマンドを渡してください。
agentapi server -- claude --allowedTools "Bash(git*) Edit Replace"agentapi を使用して Aider および Goose エージェントを実行することもできます:
agentapi server -- aider --model sonnet --api-key anthropic=sk-ant-apio3-XXX
agentapi server -- goose注
Claude、Codex、Opencode、Copilot、Gemini、Amp または CursorCLI を使用する場合は、常にエージェントタイプを明示的に指定してください(例:agentapi server --type=codex -- codex)。指定しないと、メッセージのフォーマットが崩れる可能性があります。
OpenAPI スキーマは openapi.json で利用できます。
デフォルトでは、サーバーはポート 3284 で実行されます。さらに、サーバーは同じ OpenAPI スキーマを http://localhost:3284/openapi.json で公開し、利用可能なエンドポイントをドキュメンテーション UI で http://localhost:3284/docs で公開します。
4 つのエンドポイントがあります:
- GET
/messages- エージェントとの会話内のすべてのメッセージのリストを返します - POST
/message- エージェントにメッセージを送信します。200 応答が返された場合、AgentAPI はエージェントがメッセージの処理を開始したことを検出しています - GET
/status- エージェントの現在のステータスを返します。「stable」または「running」のいずれかです - GET
/events- エージェントからのイベントの SSE ストリーム:メッセージとステータスの更新
デフォルトでは、サーバーはホストヘッダーが localhost に設定されたリクエストのみを許可します。AgentAPI を他の場所でホストしたい場合は、AGENTAPI_ALLOWED_HOSTS 環境変数または --allowed-hosts フラグを使用して変更できます。ホストはホスト名のみである必要があります(ポートなし)。サーバーは認可時に受け取ったリクエストのポート部分を無視します。
任意のホストからのリクエストを許可するには、許可されたホストとして * を使用します。
agentapi server --allowed-hosts '*' -- claude特定のホストを許可するには、次を使用します:
agentapi server --allowed-hosts 'example.com' -- claude複数のホストを指定するには、--allowed-hosts フラグを使用するときはカンマで区切られたリストを、AGENTAPI_ALLOWED_HOSTS 環境変数を使用するときはスペースで区切られたリストを使用します。
agentapi server --allowed-hosts 'example.com,example.org' -- claude
# or
AGENTAPI_ALLOWED_HOSTS='example.com example.org' agentapi server -- claudeデフォルトでは、サーバーは http://localhost:3284、http://localhost:3000、および http://localhost:3001 からの CORS リクエストを許可します。AgentAPI へのクロスオリジンリクエストを行うことができるオリジンを変更する場合は、AGENTAPI_ALLOWED_ORIGINS 環境変数または --allowed-origins フラグを使用して変更できます。
任意のオリジンからのリクエストを許可するには、許可されたオリジンとして * を使用します:
agentapi server --allowed-origins '*' -- claude特定のオリジンを許可するには、次を使用します:
agentapi server --allowed-origins 'https://example.com' -- claude複数のオリジンを指定するには、--allowed-origins フラグを使用するときはカンマで区切られたリストを、AGENTAPI_ALLOWED_ORIGINS 環境変数を使用するときはスペースで区切られたリストを使用します。オリジンはプロトコル(http:// または https://)を含む必要があり、ワイルドカード(例:https://*.example.com)をサポートします:
agentapi server --allowed-origins 'https://example.com,http://localhost:3000' -- claude
# or
AGENTAPI_ALLOWED_ORIGINS='https://example.com http://localhost:3000' agentapi server -- claude実行中のエージェントのターミナルセッションにアタッチします。
agentapi attach --url localhost:3284ctrl+c を押してセッションからデタッチします。
AgentAPI はメモリ内ターミナルエミュレータを実行します。API呼び出しを適切なターミナルキーストロークに変換し、エージェントの出力を個別のメッセージに解析します。
メッセージには 2 つのタイプがあります:
- ユーザーメッセージ:ユーザーからエージェントに送信されるメッセージ
- エージェントメッセージ:エージェントからユーザーに送信されるメッセージ
ターミナル出力から個別のメッセージを解析するために、以下の手順を実行します:
- ユーザーメッセージが送信される前の初期ターミナル出力は、エージェントの最初のメッセージとして扱われます。
- ユーザーが API 経由でメッセージを送信すると、キーストロークが送信される前にターミナルのスナップショットが取得されます。
- ユーザーメッセージがエージェントに送信されます。この時点から、ターミナル出力が変更されるたびに新しいスナップショットが取得されます。初期スナップショットと比較され、初期コンテンツの下に表示される新しいテキストがエージェントの次のメッセージとして扱われます。
- 新しいユーザーメッセージが送信される前にターミナル出力が再度変更された場合、エージェントメッセージが更新されます。
これにより、ターミナル出力をメッセージのシーケンスに分割できます。
各エージェントメッセージには、エンドユーザーにとって有用でない余分な部分が含まれています:
- メッセージの開始時のユーザー入力。コーディングエージェントは、入力をターミナルで見やすくするために、ユーザーに入力をエコーバックすることがよくあります。
- メッセージの最後にある入力ボックス。これはユーザーが通常入力を入力する場所です。
AgentAPI は自動的にこれらを削除します。
- ユーザー入力については、ユーザーの最後のメッセージからのテキストを含む行を削除します。
- 入力ボックスについては、メッセージの最後にある、一般的な TUI 要素を含む行を探します。例えば
>または------のような行です。
ターミナル出力をメッセージのシーケンスに分割することは、TUI 構造に依存しないため、引き続き機能するはずです。余分なビットを削除するロジックは、新しい要素に対応するために更新が必要になる場合があります。AgentAPI は引き続き使用できますが、エージェントメッセージに一部の余分な TUI 要素が表示される可能性があります。
フィードバック待機中、以下の機能を検討しています:
短期的には、AgentAPI はコーディングエージェントをプログラムで制御する方法の問題を解決します。時間が経つにつれて、主要なエージェントが適切な SDK をリリースすることを期待しています。その時点で AgentAPI がまだ必要かどうか疑問に思う人がいるかもしれません。これはエージェントベンダーが共通の API に標準化することを決定するか、または各自が独自の形式に固執するかによって異なると思います。
前者の場合、公式 SDK に優先して AgentAPI は廃止されます。後者の場合、AgentAPI を任意のコーディングエージェントを制御するユニバーサルアダプターにすることが目標になります。これにより、AgentAPI を使用する開発者がコードを変更せずにエージェント間を切り替えることができます。

