codex アーキテクチャ概要
源码版本rust-v0.145.0
codex は OpenAI のオープンソースコーディング Agent。この版は Rust で書き直されたもので、初期の TypeScript 版は codex-cli/ に残って npm インストールの壳としてのみ機能する。ソース本体は codex-rs/ で、Cargo workspace 配下に 90 以上の独立 crate を置き、責務ごとに極めて細かく分割している。本サイトは crate ごとにレイヤーを分けて分解し、各重要ファイルに SrcLink で GitHub の対応行へ直接リンクする。
全体レイヤー構成
主要 crate 一覧
| レイヤー | crate | 責務 |
|---|---|---|
| CLI 入口 | cli | サブコマンドのディスパッチ、doctor、login、mcp_cmd |
| Agent コア | core | Agent メインループ、LLM クライアント、圧縮 (compaction)、セッションスレッド (thread)、ツール |
| パッチプロトコル | apply-patch | apply_patch テキストパッチ形式 |
| サンドボックス | sandboxing / linux-sandbox / bwrap / windows-sandbox-rs | クロスプラットフォームなコマンド隔離 |
| 実行ポリシー | execpolicy | コマンド分類と許可ポリシー |
| 実行 | exec / exec-server | コマンド実行と exec-server プロトコル |
| TUI | tui | ターミナル UI、chatwidget、diff_model |
| App-server | app-server / app-server-protocol / app-server-transport | オーケストレーションサービスとプロトコル |
| MCP | mcp-server / rmcp-client / codex-mcp / connectors | Model Context Protocol 統合 |
| Provider | model-provider / model-provider-info / backend-client | モデル provider 抽象 |
| Cloud | cloud-tasks / cloud-config | クラウドでのタスク実行 |
| 設定 | config / codex-home | 設定システムと home ディレクトリ |
| 周辺 | prompts / skills / memories / hooks / plugin / rollout | プロンプト、スキル、メモリ、フック、プラグイン、trace |
各レイヤー一言
- CLI 入口:
codexコマンドのサブコマンドディスパッチ。main.rsが clap でパースして各サブコマンドへルーティングする。 - Agent コア:Agent メインループが
Opを消費し、LLM 呼び出しとツール実行を駆動する。CodexThreadがセッションオーケストレーションの入口。 - Sandbox 実行:コマンドはサンドボックス (sandbox) 内で走る。
execpolicyが先にコマンドを分類して許可/拒否/承認を決め、プラットフォーム沙箱に渡して隔離する。 - TUI/App-server:TUI はターミナルフロントエンド。App-server は Agent 能力をプロトコルで IDE/外部クライアントに公開する。
- Provider/Cloud:
model-providerが異なるバックエンドを抽象化し、cloud-tasksがタスクをクラウドに投げて実行する。
設計動機
codex が Rust で書き直した理由の中核はサンドボックスと性能だ。コーディング Agent はユーザのマシン上の任意の shell コマンドを走らせるので、信頼できるプロセス隔離なしでは安全が成り立たない。Rust の型システムとゼロコスト抽象により、90 以上の crate への細粒度分割が実行時オーバーヘッドを生まない。workspace を責務ごとに crate で切るのはインクリメンタルコンパイルと境界の明確化のためで、TUI を変えても core は再コンパイルされない。
よくある誤読
- 「codex は CLI ツール」——半分正解。CLI は入口にすぎず、実際に走るのは
core+sandbox+tui/app-serverの三層の組み合わせ。 - 「Rust 化は速さのため」——Rust がもたらすのはサンドボックス隔離とプロセスレベルの安全で、性能は副産物。
- 「apply_patch は codex の私的フォーマット」——codex が使うテキストパッチプロトコルで、モデルが生成し、
apply-patchcrate がパースして適用する。
推奨読書順
- CLI 入口とサブコマンドディスパッチ——
codexコマンドに入ってどうディスパッチされるか - Agent メインループ——Agent がどう Op を消費して LLM を駆動するか
- LLM クライアントと Responses API——OpenAI バックエンドとどう話すか
- クロスプラットフォームサンドボックス——コマンドがどう隔離されるか
- execpolicy コマンド分類——コマンドがどう分類されて許可されるか
- App-server アーキテクチャ——どうプロトコルで外部に公開するか
この流れを読めば、codex が「ユーザがコマンドを叩く」から「LLM がツールを走らせてファイルを書き換える」までの全リンクを説明できる。