3 ポイント 投稿者 GN⁺ 2026-01-24 | 1件のコメント | WhatsAppで共有
  • Codex CLI は、ローカル環境で安全かつ効率的に 高品質なソフトウェア変更を実行するエージェント として設計されている
  • 中核構造である エージェントループ(agent loop) は、ユーザー入力、モデル推論、ツール呼び出しを循環的に結び付けて意味のある作業を実行する
  • ループの過程で生成される プロンプト構成、コンテキストウィンドウ管理、プロンプトキャッシュ が、性能と安定性の中核要素として機能する
  • Codex は Responses API を通じてモデルと通信し、各リクエストは完全な JSON ペイロードで構成されることで ステートレス(stateless) な動作を維持する
  • この構造により、Zero Data Retention(ZDR)プロンプトキャッシュ自動圧縮(compaction) などの高度な機能が可能になり、大規模エージェント設計の基盤を形成する

Codexエージェントループ概要

  • Codex CLI は ユーザー、モデル、ツール間の相互作用を調整するループ構造 を中心に動作する
    • ユーザーの入力を受け取り、モデルに渡す プロンプト(prompt) を構成する
    • モデルが応答を生成するか ツール呼び出し(tool call) を要求すると、エージェントがそれを実行し、結果を再びプロンプトに追加する
    • モデルがこれ以上ツール呼び出しを行わず、assistant メッセージ を生成すると 1 ターンが終了する
  • 各ターンは 会話(conversation) の一部であり、以前のメッセージとツール呼び出し履歴はすべて次のリクエストのプロンプトに含まれる
  • プロンプト長はモデルの コンテキストウィンドウ(context window) 制限の影響を受けるため、Codex はこれを管理する必要がある

Responses APIとCodexの通信構造

  • Codex CLI はモデル推論のために Responses API に HTTP リクエストを送る
    • API エンドポイントは設定に応じて異なり、OpenAI、ChatGPT、Azure、ローカル(LM Studio、Ollama など)環境ですべて利用できる
  • API リクエストは JSON ペイロードで構成され、主要フィールドは次のとおり
    • system/developer メッセージ: モデルの基本コンテキスト設定
    • instructions: モデルが呼び出せるツール一覧
    • tools: Codex CLI、Responses API、ユーザー(MCP サーバーなど)が提供するツール定義
    • input: 会話履歴と環境情報を含むメッセージリスト
  • Codex は ~/.codex/config.toml の設定と、プロジェクト内の AGENTS.mdskills ファイルなどを読み取り、ユーザー指示と環境情報を自動挿入 する

プロンプト構成とイベント処理

  • Codex は各メッセージを JSON オブジェクト(type, role, content)として構成し、Responses API に送信する
  • サーバーはこの JSON を基に モデルプロンプトを生成 し、SSE(Server-Sent Events)ストリームで応答を返す
    • response.output_text.delta イベントはストリーミング出力に使われる
    • response.output_item.added イベントは次のリクエストの input に追加され、ループを継続する
  • 以前のプロンプトが 新しいプロンプトの正確な接頭辞(prefix) になるよう設計されており、プロンプトキャッシュ(prompt caching) を活用できる

性能最適化: キャッシュとステートレス設計

  • Codex は previous_response_id を使わず、完全なステートレス(stateless) リクエスト構造を維持する
    • これにより Zero Data Retention(ZDR) 顧客対応とデータ保持の最小化が可能になる
  • プロンプトキャッシュは同一の接頭部を再利用して サンプリングコストを線形化(linear) する
    • キャッシュヒットはプロンプトの 正確な接頭辞一致 のときにのみ発生する
    • ツール一覧、モデル、サンドボックス設定、作業ディレクトリの変更はキャッシュミスを引き起こす
  • MCP ツールの動的変更はキャッシュ損失を招く可能性があるため、Codex は 新しいメッセージ挿入方式で変更を反映 する

コンテキストウィンドウ管理と自動圧縮(compaction)

  • 会話が長くなると、コンテキストウィンドウ超過を防ぐために 会話圧縮(compaction) を実行する
    • 当初は /compact コマンドで手動要約を行っていたが、現在は Responses API の /responses/compact エンドポイント を自動使用する
    • このエンドポイントは type=compaction 項目暗号化された encrypted_content を返し、モデルの理解を維持する
  • Codex は auto_compact_limit を超えると自動で圧縮を実行し、会話の継続性を確保する

結論と今後の方向性

  • Codex のエージェントループは、モデル推論、ツール呼び出し、キャッシュ、コンテキスト管理 を統合した中核構造
  • この構造は 高性能・ステートレス・セキュリティ重視のエージェント設計 を可能にする
  • 今後の投稿では、CLI アーキテクチャ、ツール利用実装、サンドボックスモデル など Codex の内部構造をさらに扱う予定

1件のコメント

 
GN⁺ 2026-01-24
Hacker Newsのコメント
  • このブログ記事の最も良い点は、まったく意外ではないことだ。Codex CLIがオープンソースなので、リバースエンジニアリングなしで内部を確認できる
    Eric Traut(Pyrightで有名な開発者)のコミュニケーションも素晴らしい。issueやPRに積極的に参加している
    GitHubリポジトリ

    • 昨年Codex CLIがオープンソースとして公開されたときは本当に驚いた。TypeScriptからRustに移植されたcodex-rsも含まれていて、コーディングエージェントの動作原理を学びたい人には非常に有用だ
      私もCLIにいくつか改善を貢献し、リリースやPRを継続的に追いながら知識を広げている
    • 多くの人はClaude Codeがプロプライエタリソフトウェアだということを知らないようだ
    • 正直、Claude Codeがオープンソースではない理由は、コード品質があまりにひどくて恥ずかしいからだと思う。毎月200ドルのサブスクリプションを使っているが、CLIが遅くて頻繁に壊れるので、近いうちに解約する予定だ
    • Codex CLIが単にリモートロジックを呼び出すフロントエンドなのか、それともオフラインでも完全に動作できるのか気になる。FLOWライセンスで重みを提供しているのか、ビルドプロセスを文書化しているのかも知りたい
  • 興味深いのは、圧縮(compaction)が「モデルの潜在的理解を保持する暗号化メッセージ」で行われるという部分だ
    Codexはauto_compact_limitを超えると自動的にこのエンドポイントを使って会話コンテキストを効率的に縮小する

    • Codexのcompactionエンドポイントは業界最高レベルだ。Claudeのものは最悪に近い
    • compactorエンドポイントを独立して使えるのか気になる。私たちにはドメイン専用のエージェントループがあるが、自前の圧縮システムよりCodexのほうが性能が良さそうだ
    • この機能がOpenAIモデル以外の他のモデルでも動作するのか知りたい
  • Codexの内部を見ていて驚いたのは、reasoningトークンがエージェントのツール呼び出しループでは維持される一方、ユーザーターンが変わるたびに削除されることだ
    そのため複数ターンにわたってコンテキストを維持できるが、関連するユーザー要求の間では一部の文脈が失われる可能性がある
    私はモデルに進捗や計画、デバッグ内容をMarkdownファイルに記録させ、複数のコンテキストウィンドウ間で一種のスナップショットとして機能するようにしている

    • APIパスによって異なる。Chat completionsはあなたの言う方式だが、responses v1 APIでは逆だ。reasoningトークンは次のメッセージを送るときにも維持される。ただしxhighモードはコンテキストをはるかに速く消費する
    • reasoningトークンを保持しないほうが、むしろ良い判断かもしれない。そうでないとユーザーに見えないコンテキストが蓄積し続け、モデルとユーザーの理解が不一致になるリスクがある
    • 私は過去の会話を反映するCodex Reflect Skillを作って、並列セッションでコンテキストを構築している
      GitHubリポジトリ
    • コードと一緒に記録を保存するのは便利だが、チーム環境や複数ブランチを同時に扱うと問題を引き起こす。次の実験では、外部ストレージを持つデーモンにこのデータを分離し、CLIクライアントからアクセスする方式を試す予定だ
    • 私はemacsのagent-shellをよく使うが、会話履歴全体を保存してくれる。そのおかげで「前の会話を参照して」と簡単に言える。ログを残すのはエージェントではなくemacsなので、取りこぼしの心配がない
  • Codexで私が本当に欲しいのはCopilotスタイルのチェックポイント機能だ。GitHubに関連issueがいくつかあるが(#2788#3585)、チームの優先事項ではないようだ

    • Gemini CLIにはすでにこの機能がある
    • CodexチームはGitHubで絵文字アップボート数で優先順位を決めているそうだ。欲しい機能があるなら、ぜひアップボートすべきだ
  • エージェントループでユーザー指示を集約するとき、複数ターンの会話でコンテキスト維持をどう管理しているのか気になる。ユーザー要求が変化したときに動的に調整する手法を試したことがあるのかも知りたい

  • Codexは好きだが、ChatGPTのWebインターフェースより遅く感じる。アイデアを素早くやり取りするときは、今でもWebでコピペするほうが生産的だ
    Codexはしばしば見当違いのコードを修正し始めるので、フィードバックループが遅くてじれったい。それでもうまく動くときは素晴らしい。いつかWebのように速く、それでいてローカル作業もできる水準になることを願っている

    • ChatGPT PlusのWebインターフェースでは、5.2モデルのxhigh reasoning effortモードは提供されていない
  • 特に新しい内容ではないが、それでも価値のある記事だった。エージェント型コーディングCLIでは、ループや履歴をもっと簡単に**振り返る(reflect)**ことができるとよい。MCP経由でチャット履歴を問い合わせる方法を試したが、明示的に指定しなければならず不便だ。継続学習がこうした問題を解決できるかもしれない

  • こうした挙動はOTELテレメトリでも観察できる。私はheadless codex execをよく使うが、組み込みテレメトリのサポートが不十分で、デバッグが難しい
    そこでcodex-plusを自作して使っている。codex execインターフェースをそのまま反映しつつTypeScript SDK上に実装してあり、実行後にセッションログをリモートのOpenTelemetryコレクタへ送信し、codex-plus-log-viewerで分析できる

  • スキルを説明する部分は奇妙に感じた
    関連コードへのリンク
    なぜ単純にファイルを直接公開せず、モデルに通常のファイルのように要求させるのか疑問だ

    • それこそがスキルの核心だ。関連ファイルだけを開くようにして、コンテキストウィンドウの使用量を減らす構造になっている
  • Codex CLIを本気で使ってみた人がいるのか気になっていた。私はVSCode Codex拡張、Gemini CLI、Claude Code CLIを使ってきたが、どれも性能がひどいものだった
    ところがRustで新しく作られたCodex CLIは性能が桁違いだ。UXも完璧で、ショートカットのような細かな部分までよくできている。Theoは「CLI最適化よりモデル改善に集中すべきだった」と言っていたが、使ってみるとまったく同意できない

    • Codex CLIはClaude Codeよりはるかに良いと感じる。指示に正確に従い、望まない動作をしない。月20ドルのサブスクリプションで5.2 codex highモデルを十分に使える。私はSSLバイオアコースティクスモデルを扱っている
    • OpenCodeも他のCLIより速くて安定している。最近はCodexをより多く使っていて、Claude Proは解約する予定だ。OpenAIがOpenCodeを公式サポートしている点が魅力的だ。複数の競争的な選択肢がある今の状況は良いことだ
    • Codexは大半のコーディング作業で95%以上一貫した結果を出す。しかし非定型作業(例: 会話やストーリー作成)では見当違いの出力をすることもある。git rebase中にループにはまったこともある。Aiderも使ってみたが、ほとんど役に立たなかった
    • Codex CLIのメモリとCPU効率は非常に良い。しかもオープンソースなので、動作原理を自分で確認できる。Theoの発言には今でも不満がある
    • Codexの問題は、まだhookサポートがないことだ。私はhookを使ってエージェントのトークン消費を30%削減するツールを作った。hookを通じてエージェントの非効率な挙動をリアルタイムで矯正できる
      関連記事: Scribe Swebench Benchmark