Codemodeは、LLMエージェントがモデルのコンテキストウィンドウに結果をダンプすることなく複雑なツール相互作用をオーケストレーションできるハーネスサイド実行環境です。通常のインターフェースを通じてツールを呼び出すと、エージェントのコンテキストには出力の最後の2000行のみが保持され、これが画像生成や大規模データセットの処理などの大規模出力を生成する操作のボトルネックになります。Codemodeはオーケストレーションレイヤーをハーネス自身に移動し、エージェントの「ブレイン」(LLMとそのコンテキスト)とツールが実際に実行される「ハンド」を明確に分離します。これにより、エージェントはコンテキストを軽量に保ちながら複数のステップをチェーンすることができます。

この図は、LLMエージェントのコンテキストが軽量のまま保たれ、複雑なツールオーケストレーションがハーネスサイドのJavaScriptサンドボックスで行われるというCodemodeの核心コンセプトを視覚化しています。
ハーネス内部では、Codemodeはネットワークアクセス、ファイルシステムアクセス、タイマーを意図的に無効にし、RAMを制限したQuickJSをベースとしたWebAssemblyランタイム上のJavaScriptサンドボックスとして実行されます。これらの制約の下では、エージェントはツールコールを発行し、テキストに切り詰められるのではなく、プログラムで処理可能な完全な構造化出力を受け取ることができます。store()関数により、エージェントはセッショントランスクリプトにデータを永続化でき、後続のCodemode呼び出しでそれを読み戻すことが可能になります。これにより、ツールの応答をプローブしてその形を調べ、残りのアイテムを処理するスクリプトを書くなどの状態を持つワークフローを可能にします。ブログ記事では、具体的な例として、Codemodeを使ってmodels.getAvailableOfTypeとmodels.generateImagesを介して画像生成モデルを呼び出し、Jev分類器を使ってGitHubイッシュのバッチに対する感情分類を実行し、Jevがゲーム状態に基づいて次のアクションを決定するシンプルなゲームデバッグループを駆動することを示しています。
Codemodeはリッチなエージェントの振る舞いを可能にしますが、それに伴う顕著なトレードオフがあります。サンドボックスはネットワークやファイルシステムに直接アクセスできないため、すべての相互作用は基盤となるシステムへのツールコールを経由する必要があります。これによりセキュリティは保たれますが、新しいツールを追加せずに行えることは制限されます。Codemodeの言語としてJavaScriptが選ばれたことは議論で指摘されており、一部の観察者はコマンドラインツールに慣れたエージェントにとってbashベースのアプローチの方が自然だと感じるかもしれません。ただし、JavaScriptの非同期機能とオブジェクト操作は、Codemodeが可能にする並行操作や状態管理パターンに適しています。さらに、CodemodeはMCPサーバーへのパスを提供します:エージェントはサンドボックス内のツール検索ユーティリティを使用して、Sentry MCPなどのサービスを見つけて呼び出すことができます。これにより、ハーネスサイドスクリプティング層が外部の拡張ポイントへのブリッジとしても機能することを示しています。