AIエージェント
Codex app-serverとは:承認をアプリに残す組み込みの仕組み
- Codex app-server
- AIエージェント
- ハーネス
- OpenAI
- Codex
- JSON-RPC
- Agent Client Protocol
- Harness-Bench
- SWE-bench Verified
- VS Code
- MCP
- エージェントのループ
- サンドボックス
- 承認
- プロトコル
- 業務アプリ
- 動的なツール
- 完了率
- 実行の隔離
- 追加の権限
- WebSocket
- ARC-AGI-3
- GitHub
- 立場論文
- 管理者
- Gemini CLI
- JetBrains
目次
自社の業務アプリの中でコーディングエージェント(コードを書き、コマンドを走らせるAIエージェント)を働かせたい、という状況を考える。そのアプリには顧客の記録があり、業務の規則があり、変更を通す前に人が確かめる承認の手順がある。望むのは、この記録と規則と手順の中でエージェントが仕事をすることであって、アプリの横に別の窓を開くことではない。
これまでの作法は二つあった。一つは、仕事のほうを汎用のコーディングアシスタントへ移すことである。この作法では、アプリが持つ記録や規則はアシスタントの側から見えず、承認の手順はアプリの外で起こるか、起こらない。もう一つは、エージェントが考えてツールを呼び出し、結果を読んでまた考えるという繰り返しの部分と、コマンドを隔離して走らせる部分を、チームが自分で書くことである。本稿の判断では、この部分は作るのがもっとも難しく、しかも自社の製品に固有の中身をもっとも含まない。
どちらの作法も、同じ場所で行き詰まる。エージェントの働きを、外へ渡す部分と手元に残す部分に分ける線を、チームがまだ引けていないからである。
本稿は、OpenAIのコーディングエージェントCodexを自社の製品へ組み込むためのプロトコル、Codex app-serverを例に取る。
業務アプリにエージェントを組み込むとき、どの部分を外へ渡し、どの部分を手元に残すのか。エージェントを作る側は、いまその線をどこに引いているのか。
OpenAIはCodexの組み込みで、公開したハーネスのループと実行の隔離をプロトコル経由で渡し、画面と承認とツールはアプリが持つという線を引いた。仕事を汎用のアシスタントへ移す型に対する、作った側自身の答えである。 ハーネスとは、モデルを包む外側のソフトウェア一式を指す。何を見せるか、どのツールを呼び出させるか、コマンドをどこで走らせるかを決めて、モデルを実際の作業に当たらせる。作った側はこの分担を自分の文章とプロトコルの文書に書き、自社のクライアントも同じプロトコルで動かしている12。研究の側は、ハーネスをモデルと別の層として測り、結果をモデルとハーネスの組で報告するよう求め始めた34。代償は、製品の完了率と失敗の振る舞いが自分の書いていないハーネスに依存することである。この依存はこの型に内在するので、一時的ではない。一方、組み込みの経路が実験的で本番に対応しないという制約は文書の現在の状態であり、モデルへのアクセスが公開の範囲に入らないことは、線の位置とは別の、作った側の事業上の決定である12。
ファイル変更の承認一つを、三つの組み込み方でたどる
経費精算を扱う社内アプリが、設定の手直しをエージェントに任せたいとする。アプリには申請の記録と、金額の上限という規則と、設定を変える前に担当者が確かめる承認の画面がある。エージェントが仕事の途中で、精算の規則を書いた設定ファイルを書き換えようとした場面を、三つの組み込み方でたどる。
仕事を汎用のコーディングアシスタントへ移す場合、担当者はアシスタントの画面で依頼する。アシスタントは申請の記録も金額の上限も見えないまま設定ファイルを書き換え、アプリの承認の画面はこの変更を知らない。承認はアプリの外で起こるか、起こらない。
ループを自分で書く場合、書き換えの前にアプリの承認の画面を挟める。そのかわり、モデルを呼んでツールを走らせ、結果を読んでまた呼ぶ繰り返しと、コマンドを隔離して走らせる仕組みを、チームが自分で書いて保守する。
公開ハーネスをプロトコル経由で組み込む場合、繰り返しと隔離はハーネスの側で動く。ハーネスは書き換えの前に、承認を求める要求をアプリへ送る。アプリは自分の承認の画面に変更を出し、担当者の決定をハーネスへ返す。繰り返しはハーネスに任せ、承認の判断はアプリの側で担当者が下す。
三つを並べると、承認がアプリの画面に残るのは後の二つで、繰り返しと隔離を自分で書かずに済むのは最後の一つだけである。そのかわり最後の一つでは、同じ依頼でもハーネスが変われば書き換えの中身が変わりうる。
承認はサーバからクライアントへの要求として置かれ、ループとサンドボックスは向こう側にある
OpenAIは企業で、Codexはその製品であり、OpenAIが公開しているハーネスはopenai/codexリポジトリにあって1、2025年4月13日に作られた5。本稿は組み込みの作法を三つに分ける。エージェントのループを自分で書く型、仕事のほうを汎用のアシスタントへ移す型、そして公開ハーネスのループをプロトコル経由で組み込み、自分の画面を保つ型である。Codex app-serverは第三の型に属する。本稿がCodex app-serverを選んだのは、作った側が分担とその理由を自社の開発者向けサイトに書き、プロトコルを文書にし、ハーネスのリポジトリを公開していて、読者が自分で読めるからである12。第一の型では線引きはチームの内部にあり、第二の型ではアシスタントの内部にあって、どちらも外から読めない。第三の型は、線引きを二つのプログラムの間の約束事として書き出すので、読者は線がどこにあるかを文書から確かめられる。
OpenAIの開発者向けサイトにある「Codex as a platform」の頁は、2026年9月15日の時点で、公開されたハーネスを組み込みの土台として位置づけている。頁に公開日は示されていない1。分担は作った側の言葉でこう置かれる。アプリが持つのは「product context, business rules, and tools」、つまり製品のコンテキストと業務規則とツールである。「Codex app-server provides the agent loop and sandboxed execution」、つまりapp-serverがエージェントのループとサンドボックス化された実行を提供する。アプリが手元に残すものとして頁は「dashboards, editors, queues, maps, records, and approval flows」を挙げる。ダッシュボード、エディタ、キュー、地図、記録、そして承認の流れである1。頁がこの文で挙げる公開部品はCodex CLI、Codex app-server、公式のCodex SDKの三つで、頁が併せて指す公開部品の案内は十の部品を表にし、八つに所在を示して、IDE拡張とCodex cloudは公開していないと書く16。
同じ線は、プロトコルの文書では要求の向きとして現れる。文書は目的を「Embed Codex into your product with the app-server protocol」と書き、同じプロトコルがVS Code拡張のようなクライアントを動かしていると述べる2。やり取りの形は「bidirectional communication using JSON-RPC 2.0 messages」、JSON-RPC 2.0のメッセージによる双方向通信である。JSON-RPCとは、呼び出したいメソッドの名前と引数をJSONで送り、結果を同じ形式で受け取る、遠隔呼び出しの約束事を指す。プロトコルは、会話をスレッド、一つの依頼とそれに続く作業をターン、入出力の単位をアイテムと呼ぶ三つの型で会話の形を固定する。クライアントは接続ごとに一度初期化し、スレッドを開始または再開し、ユーザーの入力でターンを始め、ターンが完了するまで通知を読み続ける2。
分担はここで線になる。プロトコル文書は分担を一覧にはしないが、コマンド実行とファイル変更の承認、動的なツールの実行、追加の権限は、いずれもサーバがクライアントへ送る要求であり、クライアントが決定や結果を返す2。ループとサンドボックス化された実行をapp-serverが提供する、というのは作った側の頁の図の言葉である1。したがって承認の判断はクライアント側にあり、ループとサンドボックスはサーバ側にあって、線はその間を通る。ただし線の位置は固定ではない。承認は利用者の設定次第で要求され、隔離もホストが自前で行うならapp-serverの強制を省く設定(externalSandbox)がある2。どちらも、クライアントがスレッドやターンを始めるときに渡す設定で変えられる。ただし、管理者が置く要件(requirements.toml や MDM から読まれる)には、許す承認の方式とサンドボックスの種類を並べる欄もある2。
作った側の頁の図は承認を二つに分けて描き、app-serverの箱には「runtime approvals」が、アプリの箱には「human decisions」がある1。承認を求める仕掛けはサーバ側にあり、決める判断はアプリ側にある。頁はまた、どのファイルやツールに触れさせ、どの操作に承認を求めるかを、組み込む側のアプリが決められると書く1。
仕事ではなくエージェントを動かす、という作った側の一文
作った側は、それまでの作法と自分の答えを一文で書く。「Instead of asking every team to move its work into a general-purpose coding assistant, you can bring the agent into software designed around the actual job」1。すべてのチームに仕事を汎用のコーディングアシスタントへ移すよう求めるかわりに、実際の仕事に合わせて設計されたソフトウェアの中へエージェントを持ち込める、という意味である。向きは、仕事を動かすことではなく、エージェントを動かすことにある。
自作の型に対しては、頁は「再利用できる部分」という見出しでループを挙げ、新しい実行系を発明するかわりにCodexから始めて、周りのアプリが何を持つべきかをそのあとで決めればよいと書く1。作る難しさの序列は頁に無く、ループがもっとも難しく製品固有の中身をもっとも含まないという判断は本稿のものである。公開する理由も同じ頁が書く。ハーネスが公開されているので、アプリとモデルの間にある層を検査し、その振る舞いを理解し、統合を製品に合わせて調整できる、という1。
完了率は他人のハーネスに依存し続け、実験的という制約は文書の現在の状態
第一の代償は、ループとサンドボックスを外から受け取るということが、製品の完了率と失敗の振る舞いを、チームが書いていないハーネスに依存させることである。作った側の頁自身が、ハーネスの設計は結果を大きく変えうると書き、その例として自社の ARC-AGI-3 の得点が 13.3% から 38.3% へ動いた別記事を引いている1。
Yaoらは、ハーネスを「コンテキスト、ツール、状態、制約、権限、追跡、回復を管理するシステム層」と定義し、要旨によれば、106のサンドボックス化されたオフライン課題で5,194の実行軌跡を集め、モデルとハーネスの組み合わせによって完了、過程の質、効率、失敗の振る舞いが大きく変わると観察した。同じ論文は Codex そのものも既定構成で106課題すべてに走らせ、参考値として別枠で報告している——GPT-5.4 を土台にした総合得点は 80.4 で、同じモデルを載せた構成型ハーネス六本の幅は 54.3 から 81.3 だった3。論文はまた、強い基盤モデルほど平均の得点が高く、ハーネスを替えたときの得点の分散が小さい傾向も報告しており、著者らはこの傾向も含めて、エージェントの能力は基盤モデル単独に帰すのではなく、モデルとハーネスの構成の単位で報告すべきだと結論する3。
Zhangらは立場論文で、長期のタスクを同程度の最前線能力を持つモデルの間で比べる場面では、エージェントの実行ハーネスがそれの包むモデルよりも強く性能を決めることがしばしばあると主張する4。同じ論文は、コーディングの順位表で得点の近い3モデルと、コンテキストの圧縮、再試行、検証と回復の仕掛けを段階的に足した3ハーネスを、SWE-bench Verified の100課題で走らせ、ハーネス由来の分散がモデル由来の 7.80 倍だったと報告している4。著者らは、この比が普遍だとは主張していない4。
どちらもあらかじめ用意された課題で測った数であり、承認の手順を持つ業務アプリを測ったものではない。この二本を本稿の主張に当てると、ハーネスを組み込んだチームは、結果をアプリとハーネスの組として報告することになり、自分の側に変更がなくても、ハーネスの更新が結果を動かすと見込んでおくことになる。この代償は、ループを外から受け取るという型そのものから出るので、文書が整っても消えない。
第二の代償は文書の現在の状態であり、型に内在するものではない。作った側自身が、app-serverコマンドとWebSocketの経路は実験的で、本番の作業には対応しないと文書に書いている2。クライアント側でツールを走らせる動的なツールの流れも、既定では拒否される実験的なAPIである2。作った側の頁は、app-serverを選ぶ理由の中にアプリがツールを渡せること(expose tools)を挙げる一方で、アプリが持つツールの例として挙げるのはアプリが所有するMCPサービスである1。
第三は代償というより公開の範囲の限界で、線の位置とは別に決まっている。「The open-source layer is the harness and integration surface; model access and managed services remain separate.」公開されている層はハーネスと統合面であり、モデルへのアクセスと管理されたサービスは別に残る1。検査できるという性質はモデルの境界で止まる。これは作った側の事業上の決定であり、頁はそれを一文で明示している。
承認を手元に残す線は、作った側の製品と研究の測り方に現れ、組み込む側の採用はまだ読めない
方向は、本稿の出典が届く範囲で二つの側から読める。作った側は、公開したハーネスを組み込みの土台と位置づけ、自社のVS Code拡張を同じプロトコルで動かしている12。研究の側は、ハーネスをモデルと別の層として定義して測り、結果をモデルとハーネスの組で報告するよう求めている34。ループと隔離を製品から切り離して扱う見方は、作る側と測る側の両方に現れた。同じ形の約束事はOpenAIの外にもある。Agent Client Protocolは、エディタとコーディングエージェントの間をJSON-RPC 2.0で結び、権限の要求をエージェントからクライアントへの要求として置く公開のプロトコルである7。エージェント側にはCodex CLI(ACPの側のアダプタ経由)、Gemini CLI、GitHub Copilot、JetBrainsのJunieなどが、クライアント側にはJetBrainsなどが載る7。ただしこのプロトコルは、利用者が主にエディタの中にいることを想定すると自分で書いており、業務アプリへの組み込みをどれだけ担っているかは、その一覧からも読めない7。OpenAIの頁は公開実装としてGitHubとJetBrains、Cisco、Thrive HoldingsとCreteの三つを挙げるが、app-serverを使うと書かれたものは無い1。頁がapp-serverを土台にした例として示すのは、OpenAI自身が架空の出荷データで作ったサンプル一つで、出荷を手配し直す前に人の承認を求める1。本稿は、どちらも採用の根拠には使わない。
出典7件
-
OpenAI Developers「Codex as a platform: build on the open agent harness」developers.openai.com, 2026. https://developers.openai.com/blog/codex-as-a-platform — 9月15日時点。アプリが規則・ツール・承認を持ち、app-serverがループと隔離した実行を担う。モデルへのアクセスは別。 ↩ ↩2 ↩3 ↩4 ↩5 ↩6 ↩7 ↩8 ↩9 ↩10 ↩11 ↩12 ↩13 ↩14 ↩15 ↩16 ↩17 ↩18 ↩19
-
「Codex App Server protocol documentation」learn.chatgpt.com/docs, 2026(9月15日時点). https://learn.chatgpt.com/docs/app-server — JSON-RPC 2.0の双方向プロトコル。承認・動的なツール・追加の権限はサーバからクライアントへの要求で、経路は実験的で本番に対応しないとする。 ↩ ↩2 ↩3 ↩4 ↩5 ↩6 ↩7 ↩8 ↩9 ↩10 ↩11
-
Y. Yao ほか「Harness-Bench: Measuring Harness Effects across Models in Realistic Agent Workflows」arXiv:2605.27922, 2026. https://arxiv.org/abs/2605.27922 — 106課題・5,194軌跡で組み合わせ次第で結果が大きく変わると報告。Codexは別枠。 ↩ ↩2 ↩3 ↩4
-
Y. Zhang ほか「Stop Comparing LLM Agents Without Disclosing the Harness」arXiv:2605.23950, 2026. https://arxiv.org/abs/2605.23950 — 立場論文。SWE-bench Verifiedの100課題で、ハーネス由来の分散がモデル由来の7.80倍と報告し、普遍とは主張しない。 ↩ ↩2 ↩3 ↩4 ↩5
-
GitHub REST API「openai/codex」api.github.com, 2026(10月6日時点). https://api.github.com/repos/openai/codex — リポジトリの記録。作成日時(created_at)は2025年4月13日(UTC)。 ↩
-
OpenAI「Open Source」learn.chatgpt.com/docs, 2026(9月15日時点). https://learn.chatgpt.com/docs/open-source — 公開部品の案内。表は Codex App Server など八つの部品の所在を示し、IDE拡張とCodex cloudを公開していないと書く。 ↩
-
Agent Client Protocol「Introduction」ほか, agentclientprotocol.com, 2026(9月20日時点). https://agentclientprotocol.com/overview/introduction — エディタとコーディングエージェントをJSON-RPC 2.0で結び、権限の要求をエージェントからクライアントへ送る。利用者が主にエディタにいると想定する。 https://agentclientprotocol.com/protocol/overview https://agentclientprotocol.com/overview/agents https://agentclientprotocol.com/overview/clients ↩ ↩2 ↩3
この記事はAIを使用して執筆されました。内容には誤りが含まれる可能性があります。事実や数字の出典は脚注から確かめられます。