Cline アーキテクチャ総覧
一言で
Cline は VSCode 拡張 + 再帰的 agent ループ + ツール調整器 からなる AI プログラミングアシスタントである。activate が Controller を組み立て、ユーザーがメッセージを送ると Task が作られ、Task は recursivelyMakeClineRequests で「LLM ストリーム → アシスタントメッセージの解析 → ツール実行 → 結果の再流入」を再帰的に駆動し、ターンが終わるまで回す。ツールは ToolExecutorCoordinator が名前でディスパッチし、Provider は buildApiHandler で switch 分岐させ、MCP/サブ Agent/コンテキスト切り詰め/checkpoints/hooks はそれぞれ独立している。
レイヤ構成
各レイヤを一言で
- 起動とホスト:
activateが host→マイグレーション→webview→コマンド登録の順に組み立てる。Controller は Task、McpHub、StateManager を保持する。 - Agent メインループ:Task クラスは単ターンの状態機械であり、
recursivelyMakeClineRequestsが各ラウンドを再帰的に駆動する。 - アシスタントメッセージ解析:
parseAssistantMessageV2が LLM のテキストストリームを text/tool_use/reasoning block に切り分け、diff アルゴリズムで新ファイル内容を構築する。 - ツールシステム:
ToolExecutorCoordinatorがClineDefaultToolの名前で 25 以上の handler にディスパッチする。 - Providerチャネル:
buildApiHandlerが一つの switch で 40 以上のベンダー handler に振り分ける。 - システムプロンプトとモード:PromptBuilder がモデル variant ごとにシステムプロンプトを組み立て、plan/act の両モードが「計画のみ」か「実行」かを制御する。
- MCP とサブ Agent:McpHub が外部 MCP server に接続し、SubagentRunner が隔離されたサブタスクを実行し、ContextManager が履歴を切り詰める。
- ストレージと Hooks:StateManager がグローバル状態を永続化し、Hooks がライフサイクルイベントで外部コマンドを発火し、Checkpoints がタスクのスナップショットを取る。
レイヤ構成の動機
Cline は「VSCode とどう統合するか」(ホスト)、「ターンをどう駆動するか」(Task ループ)、「LLM 出力をどう解析するか」(parsing)、「ツールをどう実行するか」(tools)、「モデルをどう呼ぶか」(providers)、「プロンプトをどう組み立てるか」(prompts)、「どう拡張するか」(MCP/サブ Agent)、「どう永続化するか」(storage) を完全に疎結合にしている。これにより、モデルを替えてもツールに影響せず、ツールを替えてもループに影響せず、MCP server を追加してもコアを書き換えずに済む。Task クラスが唯一の中枢であり、すべてのターン状態はこのクラスに集まる。
よくある誤読
- 「Cline は ChatGPT のラッパー」——それは表面的な見方。Provider の振り分けは表層にすぎず、真の中核は再帰的 agent ループとツール調整器であり、LLM はループ内の一ステップに過ぎない。
- 「ツールはハードコードされている」——ToolExecutorCoordinator はレジストリ式で、handler は独立したファイルにあり、名前で登録・拡張できる。
- 「plan と act は別のコード」——それは違う。両者は Task ループを共有し、システムプロンプトと許可されるツールセットが異なるだけである。
推奨される読む順序
まず 起動とホスト を読み、次に Task クラス と 再帰駆動 を読み、その後 ツールシステム → Provider → システムプロンプトとモード → MCP とサブ Agent → ストレージと Hooks の順に降りていく。
公式資料: Cline 公式サイト · Cline ドキュメント · GitHub