OpenDev は、ソフトウェアエンジニアリングのためのオープンソースのコマンドラインのコーディングエージェントである。作者によれば Rust で書かれており、そのアーキテクチャを文書化した技術レポート ターミナル向けの効果的な AI コーディングエージェントの構築:スキャフォールディング、ハーネス、コンテキストエンジニアリング、そして得られた教訓 とともに公開されている。IDE のプラグインとしてではなく、ソース管理、ビルドシステム、リモートセッション、ヘッドレス環境がすでに存在するターミナルでネイティブに動作するよう作られている。共通の UI コントラクトの上にターミナルインターフェースと Web インターフェースという 2 つのフロントエンドを提供しており、エージェント層そのものはインターフェースに依存しない。
アーキテクチャ
システムは、エントリーと UI、エージェント、ツールとコンテキスト、永続化の 4 層で構成されている。中心的な設計上の選択は、単一のモデル呼び出しではなく複合 AI システムとすることである。作業はセッション、エージェント、ワークフロー、LLM という階層として構成され、5 つの専門化されたモデルの役割がそれぞれ別のモデルに割り当てられる。これにより、各ワークフローを、そのコスト、レイテンシ、能力の要件に合ったモデルに結びつけられる。レポートはこれを、構造上モデルに依存しないシステムにするものとして提示しており、プロバイダーの変更はコードの変更ではなく設定の変更で済む。
推論は拡張された ReAct ループで行われ、標準的なサイクルにいくつかのフェーズが加えられている。トークン予算が尽きかけたときの自動的なコンテキストのコンパクション、深さを設定できるオプションの思考フェーズ、オプションの自己批評フェーズ、そして行動フェーズである。レポートのアーキテクチャ概要は 2 つの動作モードを説明している。読み書きのツールに完全にアクセスできる通常モードと、読み取り専用のツールに制限されたプランモードである。一方、後の節では、メインエージェントは一貫して通常モードにとどまり、計画は Planner サブエージェントに委任するとされ、前者のモードは削除されたと述べられている。
コンテキストエンジニアリング
コンテキスト管理は、最適化ではなく第一級の関心事として扱われている。適応的コンパクションは、ハードな上限に達した時点ですべてを一度にコンパクションするのではなく、観測をアクティブ、フェード、アーカイブの各状態へと順に移していく。レポートは、これによって観測によるコンテキスト消費のピークがおよそ 54% 削減されたとしている。サイズのしきい値を超えるツールの結果はスクラッチファイルに書き出され、短いプレビューとファイル参照として返される。MCP 経由で利用する外部ツールは、レポートの言葉では、事前に一括で読み込まれるのではなく遅延的に発見されるものであり、段階的開示(Progressive Disclosure) の一例である。search_tools の呼び出しが、登録されたツールの名前と説明をキーワードクエリに対して採点し、発見されたスキーマだけがコンテキストに入る。レポートによれば、これによりベースラインのオーバーヘッドはコンテキスト予算の 40% から 5% 未満に削減された。イベント駆動のシステムリマインダーは、長いセッションの後半で指示が守られなくなることに対抗するため、判断の時点で短く的を絞ったガイダンスを注入する。また、自動化されたメモリシステムがセッションをまたいでプロジェクト固有の知識を蓄積する。
安全性
エージェントは任意のシェルコマンドを実行し、ファイルを上書きし、永続的なプロセスを生成できるため、システムは単一の仕組みではなく 5 つの独立した安全層を用いている。プロンプトレベルのガードレール、プランモードのホワイトリストとサブエージェントごとのツール制限による スキーマゲーティング、永続的な権限を備えた実行時の承認システム、危険なパターンのブロックリストや古い読み取りの検出といったツールレベルの検証、そしてツール呼び出しをブロックしたりその引数を書き換えたりできるユーザー定義のライフサイクルフックである。各層はそれぞれ独立してある種の害を防ぐよう設計されており、1 つの層が失敗しても残りの層が損なわれることはない。ファイルシステムへの変更は、操作ログとスナップショットに基づく取り消しによって元に戻せるようになっている。