Skip to content

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 コアcoreAgent メインループ、LLM クライアント、圧縮 (compaction)、セッションスレッド (thread)、ツール
パッチプロトコルapply-patchapply_patch テキストパッチ形式
サンドボックスsandboxing / linux-sandbox / bwrap / windows-sandbox-rsクロスプラットフォームなコマンド隔離
実行ポリシーexecpolicyコマンド分類と許可ポリシー
実行exec / exec-serverコマンド実行と exec-server プロトコル
TUItuiターミナル UI、chatwidget、diff_model
App-serverapp-server / app-server-protocol / app-server-transportオーケストレーションサービスとプロトコル
MCPmcp-server / rmcp-client / codex-mcp / connectorsModel Context Protocol 統合
Providermodel-provider / model-provider-info / backend-clientモデル provider 抽象
Cloudcloud-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-patch crate がパースして適用する。

推奨読書順

  1. CLI 入口とサブコマンドディスパッチ——codex コマンドに入ってどうディスパッチされるか
  2. Agent メインループ——Agent がどう Op を消費して LLM を駆動するか
  3. LLM クライアントと Responses API——OpenAI バックエンドとどう話すか
  4. クロスプラットフォームサンドボックス——コマンドがどう隔離されるか
  5. execpolicy コマンド分類——コマンドがどう分類されて許可されるか
  6. App-server アーキテクチャ——どうプロトコルで外部に公開するか

この流れを読めば、codex が「ユーザがコマンドを叩く」から「LLM がツールを走らせてファイルを書き換える」までの全リンクを説明できる。