AIコーディングエージェント 8ツール 詳細比較表

概要
AIコーディングエージェント 8ツール 詳細比較表
本ドキュメントは comparison-detailed.md の全内容を含み、各セクションに日本語の解説を付加したガイド版である。 8つのAIコーディングエージェント (Claude Code, Cline, Codebuff, Codex CLI, Kilocode, OpenClaw, OpenCode, Roo Code) の内部アーキテクチャを、ソースコードレベルで比較している。 各ツールのシステムプロンプト構成、ツール定義、Agentic機能、長期記憶の実装を網羅的に調査した結果をまとめたものである。
調査対象バージョン(2026-02時点):
- Claude Code 2.1.59 / Cline 3.67.1 / Codebuff 0.10.6 / Codex CLI 0.106.0
- Kilocode 5.7.0 / OpenClaw 2026.2.26 / OpenCode 1.1.36 / Roo Code 3.50.4
1. 基本情報・アーキテクチャ
この章では各ツールの実装言語、ライセンス、実行環境、LLMプロバイダといった基本属性と、 システムプロンプトがどのように組み立てられるか(エントリーポイント関数、パイプライン構造)を比較する。 「エントリーポイント」とは、システムプロンプト生成の起点となる関数のことである。 「パイプライン」とは、各セクションを順次組み立てて最終的なプロンプト文字列を生成する処理の流れを指す。
1-1. プロジェクト概要
| 項目 | Claude Code | Cline | Codebuff | Codex CLI |
|---|---|---|---|---|
| バージョン | 2.1.59 | 3.67.1 | SDK 0.10.6 | 0.106.0 (rust-v0.106.0) |
| 実装言語 | TypeScript (npmパッケージ) | TypeScript | TypeScript (モノレポ) | Rust (codex-rs) + TypeScript (レガシー) |
| ライセンス | クローズドソース | OSS | Apache-2.0 | OSS |
| 実行環境 | CLI + VSCode拡張 | VSCode拡張 | CLI + Web (Next.js) | CLI (TUI) |
| LLMプロバイダ | Anthropic固定 | マルチ (16+ Variant) | マルチ | OpenAI固定 |
| ツールコール方式 | Claude API native tool use | Variant別 (XML / native) | JSON (<codebuff_tool_call>) | OpenAI Responses API |
| 項目 | Kilocode | OpenClaw | OpenCode | Roo Code |
|---|---|---|---|---|
| バージョン | 5.7.0 | 2026.2.26 | 1.1.36 | 3.50.4 (e25b1f276) |
| 実装言語 | TypeScript | TypeScript | TypeScript | TypeScript |
| ライセンス | OSS | OSS | OSS | OSS |
| 実行環境 | VSCode拡張 | CLI (自律デーモン) | CLI + TUI + Desktop | VSCode拡張 |
| LLMプロバイダ | マルチ | マルチ | マルチ | マルチ |
| ツールコール方式 | XML or Native (JSON Schema) | プロバイダ native | AI SDK (Vercel) | Native (JSON Schema) |
実装言語は大半がTypeScriptだが、Codex CLIはRustで書かれている点が特徴的である。 LLMプロバイダが「固定」のツール (Claude Code=Anthropic、Codex CLI=OpenAI) と「マルチ」対応のツールに大別される。 ツールコール方式もXML形式、JSON形式、プロバイダnative形式など多様である。
1-2. システムプロンプト組み立てのエントリーポイント
| ツール | エントリーポイント関数 | ファイル | 呼び出し元 |
|---|---|---|---|
| Claude Code | (ソース非公開。動的組み立て) | — | — |
| Cline | getSystemPrompt(context: SystemPromptContext) | src/core/prompts/system-prompt/index.ts | Task.attemptApiRequest() (L1873付近) |
| Codebuff | loopAgentSteps() 内の getAgentPrompt() | packages/agent-runtime/src/run-agent-step.ts | callMainPrompt() (packages/agent-runtime/src/main-prompt.ts) |
| Codex CLI | build_prompt(input, router, turn_context, base_instructions) | codex-rs/core/src/codex.rs:5410 | run_sampling_request() |
| Kilocode | SYSTEM_PROMPT() → generatePrompt() | src/core/prompts/system.ts | タスク実行ループ |
| OpenClaw | buildAgentSystemPrompt() | src/agents/system-prompt.ts:189-664 | buildEmbeddedSystemPrompt() (pi-embedded-runner/system-prompt.ts) |
| OpenCode | SystemPrompt.provider(model) + SystemPrompt.environment() | packages/opencode/src/session/system.ts | LLM.stream() (session/llm.ts:48) |
| Roo Code | SYSTEM_PROMPT(context, cwd, mode, ...) → generatePrompt() | src/core/prompts/system.ts | Task.recursivelyMakeClineRequests() |
システムプロンプトの組み立てはツールごとに大きく異なる。 Claude Codeはソース非公開だが動的組み立てを行い、Clineはテンプレートエンジンによるプレースホルダ置換方式、 Codex CLIはRust構造体ベースで型安全なプロンプト構築を行う。 各ツールの「呼び出し元」列を見ると、プロンプト生成がどのタイミングで発動するかがわかる。
1-3. プロンプト組み立てパイプライン
| ツール | パイプライン構造 | 中間表現 |
|---|---|---|
| Claude Code | セクション1-13を順序結合 → APIリクエストのsystemパラメータ | 文字列結合 |
| Cline | PromptRegistry.get(context) → getModelFamily() でVariant選択 → PromptBuilder.build() → buildComponents() → preparePlaceholders() → TemplateEngine.resolve() → postProcess() | SystemPromptContext → Variant → {{SECTION_NAME}} テンプレート → 最終文字列 |
| Codebuff | getAgentTemplate() → getAgentPrompt('systemPrompt') → formatPrompt() でプレースホルダ置換 → getAgentPrompt('instructionsPrompt') → ステップごとに getAgentPrompt('stepPrompt') | AgentDefinition → {CODEBUFF_*} プレースホルダ → 3層プロンプト (system/instructions/step) |
| Codex CLI | BaseInstructions 解決 (config > session > model_info) → CollaborationMode developer_instructions → Memory instructions → ContextualUserMessage fragments | Prompt { input, tools, base_instructions, personality, output_schema } (Rust構造体) |
| Kilocode | カスタムシステムプロンプト存在チェック → generatePrompt() → 各セクション関数 → addCustomInstructions() | SystemPromptSettings → テンプレートリテラル結合 → 最終文字列 |
| OpenClaw | resolveBootstrapContextForRun() → buildAgentSystemPrompt() → 各セクションビルダー → contextFiles ループ → lines.filter(Boolean).join("\\n") | PromptMode (“full”/“minimal”/“none”) → 配列 → join |
| OpenCode | agent.prompt ?? SystemPrompt.provider(model) → SystemPrompt.environment() → InstructionPrompt.system() → Plugin.trigger("experimental.chat.system.transform") | system[] 配列 → join → AI SDK streamText() |
| Roo Code | getModeSelection() → generatePrompt() → 各セクション関数 → addCustomInstructions() | テンプレートリテラル結合 → 最終文字列 |
2. プロンプトセクション構成の詳細比較
この章ではシステムプロンプトを構成する「セクション」の一覧と注入順序、 モデルファミリー別の分岐(Variant)、テンプレート変数の置換方式を比較する。 セクション数はツールにより5〜24と大きく異なり、設計思想の違いが如実に表れている。
2-1. セクション一覧(注入順序)
Claude Code (13セクション、ソース非公開):
| # | セクション | 条件 |
|---|---|---|
| 1 | Core Identity & Safety | 常時 |
| 2 | System Behavior | 常時 |
| 3 | Task Execution Guidelines | 常時 |
| 4 | Tool Usage Guidelines | 常時 |
| 5 | Tone and Style | 常時 |
| 6 | Git Operations Protocol | 常時 |
| 7 | Auto Memory Instructions | 常時 |
| 8 | Environment Context | 常時 |
| 9 | CLAUDE.md Files (全階層) | 常時 |
| 10 | Auto Memory (MEMORY.md 先頭200行) | 常時 |
| 11 | Skill Descriptions | 常時 (バジェット: context windowの2%) |
| 12 | IDE/Extension Context | 実行環境に応じて |
| 13 | system-reminder Tags | 動的 (会話中に挿入) |
Cline (13セクション):
| # | セクション | 生成関数 | ファイル | 条件 |
|---|---|---|---|---|
| 1 | AGENT_ROLE | getAgentRoleSection() | components/agent_role.ts | 常時 |
| 2 | TOOL_USE | getToolUseSection() | components/tool_use/index.ts | 常時 |
| 3 | TASK_PROGRESS | getUpdatingTaskProgress() | components/task_progress.ts | Next-Gen系のみ |
| 4 | MCP | getMcp() | components/mcp.ts | MCP接続時のみ |
| 5 | EDITING_FILES | getEditingFilesSection() | components/editing_files.ts | 常時 |
| 6 | ACT_VS_PLAN | getActVsPlanModeSection() | components/act_vs_plan_mode.ts | 常時 |
| 7 | CAPABILITIES | getCapabilitiesSection() | components/capabilities.ts | 常時 |
| 8 | SKILLS | getSkillsSection() | components/skills.ts | Skill存在時のみ |
| 9 | FEEDBACK | getFeedbackSection() | components/feedback.ts | Next-Gen系のみ |
| 10 | RULES | getRulesSection() | components/rules.ts | 常時 |
| 11 | SYSTEM_INFO | getSystemInfo() | components/system_info.ts | 常時 |
| 12 | OBJECTIVE | getObjectiveSection() | components/objective.ts | 常時 |
| 13 | USER_INSTRUCTIONS | getUserInstructions() | components/user_instructions.ts | 常時 |
Codebuff (5層):
| # | セクション | 生成関数 | ファイル | tags |
|---|---|---|---|---|
| 1 | System Prompt | getAgentPrompt({ type: 'systemPrompt' }) | templates/strings.ts | — (system role) |
| 2 | User Prompt | (ユーザー入力) | — | ['USER_PROMPT'] |
| 3 | Additional System Prompt | additionalSystemPrompts[prompt] | system-prompt/prompts.ts | ['SYSTEM_INSTRUCTION'] |
| 4 | Instructions Prompt | getAgentPrompt({ type: 'instructionsPrompt' }) | templates/strings.ts | ['INSTRUCTIONS_PROMPT'] |
| 5 | Step Prompt | getAgentPrompt({ type: 'stepPrompt' }) | templates/strings.ts | ['STEP_PROMPT'] (<system_reminder>ラップ) |
Codex CLI (6セクション):
| # | セクション | 生成箇所 | ファイル |
|---|---|---|---|
| 1 | BaseInstructions | build_prompt() 内分岐 | codex.rs:377-386 + prompt.md or model-specific |
| 2 | CollaborationMode developer_instructions | default_mode_instructions() | collaboration_mode_presets.rs:50 |
| 3 | Memory developer_instructions | build_memory_tool_developer_instructions() | memories/prompts.rs:158 |
| 4 | Session prefix (user messages) | ContextualUserMessage fragments | contextual_user_message.rs |
| 5 | Conversation history | ResponseItem 配列 | (ランタイム) |
| 6 | Tool definitions | ToolRouter::specs() | tools/spec.rs |
Kilocode (13セクション):
| # | セクション | 生成関数 | ファイル | 条件 |
|---|---|---|---|---|
| 1 | roleDefinition | getModeSelection() | src/shared/modes.ts | 常時 |
| 2 | MARKDOWN RULES | markdownFormattingSection() | sections/markdown-formatting.ts | 常時 |
| 3 | TOOL USE | getSharedToolUseSection() | sections/tool-use.ts | 常時 |
| 4 | # Tools | getToolDescriptionsForMode() | tools/index.ts | XMLプロトコル時のみ |
| 5 | Tool Use Guidelines | getToolUseGuidelinesSection() | sections/tool-use-guidelines.ts | 常時 |
| 6 | MCP SERVERS | getMcpServersSection() | sections/mcp-servers.ts | MCPサーバー存在時 |
| 7 | CAPABILITIES | getCapabilitiesSection() | sections/capabilities.ts | 常時 |
| 8 | MODES | getModesSection() | sections/modes.ts | 常時 |
| 9 | AVAILABLE SKILLS | getSkillsSection() | sections/skills.ts | Skill存在時 |
| 10 | RULES | getRulesSection() | sections/rules.ts | 常時 |
| 11 | SYSTEM INFORMATION | getSystemInfoSection() | sections/system-info.ts | 常時 |
| 12 | OBJECTIVE | getObjectiveSection() | sections/objective.ts | 常時 |
| 13 | USER’S CUSTOM INSTRUCTIONS | addCustomInstructions() | sections/custom-instructions.ts | 常時 |
OpenClaw (24セクション):
| # | セクション | 生成箇所 | 条件 |
|---|---|---|---|
| 1 | Identity | 直接文字列 (L419) | 常時 |
| 2 | Tooling | インライン (L421-455) | 常時 |
| 3 | Safety | safetySection 定数 (L390-396) | 常時 |
| 4 | CLI Quick Reference | 直接文字列 (L464-471) | 常時 |
| 5 | Skills | buildSkillsSection() (L20-35) | full/minimal |
| 6 | Memory Recall | buildMemorySection() (L37-63) | fullのみ |
| 7 | Self-Update | 条件付きインライン (L476-486) | fullのみ, gateway有 |
| 8 | Model Aliases | 条件付きインライン (L489-498) | fullのみ |
| 9 | Workspace | 直接文字列 (L502-506) | 常時 |
| 10 | Documentation | buildDocsSection() (L171-187) | fullのみ |
| 11 | Sandbox | 条件付きインライン (L508-552) | sandbox有効時 |
| 12 | Authorized Senders | buildUserIdentitySection() (L65-70) | fullのみ |
| 13 | Date & Time | buildTimeSection() (L96-101) | 常時 |
| 14 | Workspace Files | インライン | 常時 |
| 15 | Reply Tags | buildReplyTagsSection() (L103-117) | fullのみ |
| 16 | Messaging | buildMessagingSection() (L119-158) | fullのみ |
| 17 | Voice (TTS) | buildVoiceSection() (L160-169) | fullのみ, hint有 |
| 18 | Group Chat / Subagent Context | extraSystemPrompt | 有時 |
| 19 | Reactions | 条件付きインライン | 有効時 |
| 20 | Reasoning Format | 条件付きインライン | reasoningTagHint有時 |
| 21 | Project Context | contextFilesループ (L605-625) | 常時 |
| 22 | Silent Replies | 条件付きインライン (L628-643) | fullのみ |
| 23 | Heartbeats | 条件付きインライン (L646-656) | fullのみ |
| 24 | Runtime | buildRuntimeLine() (L667-704) | 常時 |
全ファイル: src/agents/system-prompt.ts
OpenCode (6セクション):
| # | セクション | 生成関数 | ファイル |
|---|---|---|---|
| 1 | エージェント/プロバイダプロンプト | agent.prompt ?? SystemPrompt.provider(model) | session/system.ts |
| 2 | 環境情報 | SystemPrompt.environment(model) | session/system.ts |
| 3 | ユーザーインストラクション | InstructionPrompt.system() | session/instruction.ts |
| 4 | ユーザー指定system | input.user.system | — |
| 5 | プラグイン変換 | Plugin.trigger("experimental.chat.system.transform") | session/llm.ts:86 |
| 6 | コンテキストメッセージ | insertReminders() | session/prompt.ts:1198 |
Roo Code (11セクション):
| # | セクション | 生成関数 | ファイル |
|---|---|---|---|
| 1 | roleDefinition | getModeSelection() | src/shared/modes.ts |
| 2 | MARKDOWN RULES | markdownFormattingSection() | sections/markdown-formatting.ts |
| 3 | TOOL USE | getSharedToolUseSection() | sections/tool-use.ts |
| 4 | Tool Use Guidelines | getToolUseGuidelinesSection() | sections/tool-use-guidelines.ts |
| 5 | CAPABILITIES | getCapabilitiesSection() | sections/capabilities.ts |
| 6 | MODES | getModesSection() | sections/modes.ts |
| 7 | AVAILABLE SKILLS | getSkillsSection() | sections/skills.ts |
| 8 | RULES | getRulesSection() | sections/rules.ts |
| 9 | SYSTEM INFORMATION | getSystemInfoSection() | sections/system-info.ts |
| 10 | OBJECTIVE | getObjectiveSection() | sections/objective.ts |
| 11 | USER’S CUSTOM INSTRUCTIONS | addCustomInstructions() | sections/custom-instructions.ts |
セクション数の多さは機能の豊富さを示す。OpenClawが24セクションと最多で、 メッセージング統合型パーソナルアシスタントとしての多機能性を反映している。 各セクションの「条件」列に注目すると、常時注入されるものと特定条件でのみ有効になるものがある。
2-2. Variant / モデルファミリー別プロンプト分岐
| ツール | 分岐方式 | 分岐数 | 選択ロジック | 定義ファイル |
|---|---|---|---|---|
| Claude Code | なし(Anthropic専用) | 1 | — | — |
| Cline | ModelFamily enum + PromptRegistry | 16種 (GENERIC, NEXT_GEN, NATIVE_NEXT_GEN, GPT_5, NATIVE_GPT_5, NATIVE_GPT_5_1, GEMINI, GEMINI_3, XS, GLM, HERMES, DEVSTRAL, TRINITY等) | PromptRegistry.getModelFamily(context) が全Variantの matcher(context) を順次評価、最初のマッチ採用 | src/core/prompts/system-prompt/variants/index.ts |
| Codebuff | CostMode → agentType マッピング | 5 (ask→ask, free→base-free, normal→base2, max→base2-max, plan→base2-plan) | mainPrompt() 内で costMode → agentType 変換 | packages/agent-runtime/src/main-prompt.ts |
| Codex CLI | モデル固有 *_prompt.md + Personality テンプレート | 5+2 (base, gpt_5_2, gpt_5_codex, gpt-5.1-codex-max, gpt-5.2-codex + friendly/pragmatic personality) | ModelInfo::get_model_instructions(personality) | codex-rs/core/prompt.md, gpt_5_2_prompt.md 等 + templates/personalities/ |
| Kilocode | なし (ツールプロトコルのみXML/Native切替) | 2 (XMLプロトコル / Nativeプロトコル) | effectiveProtocol 判定 | src/core/prompts/system.ts |
| OpenClaw | なし | 1 | — | — |
| OpenCode | プロバイダ別 .txt ファイル | 5 (anthropic, beast(GPT/o), gemini, qwen, codex_header) | SystemPrompt.provider() 内のモデルID判定 | packages/opencode/src/session/prompt/*.txt |
| Roo Code | なし (Nativeツールコール固定) | 1 | — | — |
Variantとは、接続するLLMモデルに応じてプロンプトの内容を切り替える仕組みである。 Clineが16種と最多で、GPT-5系、Gemini系、Next-Gen系など細かくプロンプトを最適化している。 一方、Claude Code、OpenClaw、Roo Codeはプロバイダ固定または単一プロンプトのため分岐がない。
2-3. 変数置換・テンプレートエンジン
| ツール | テンプレート構文 | エンジン | 標準変数 | ファイル |
|---|---|---|---|---|
| Claude Code | なし | — | — | — |
| Cline | {{PLACEHOLDER_NAME}} (二重中括弧) | TemplateEngine.resolve() (正規表現置換、ドット記法ネストアクセス可) | CWD, OS, SHELL, HOME_DIR, WORKING_DIR, SUPPORTS_BROWSER, MODEL_FAMILY, CURRENT_DATE, MCP_SERVERS_LIST, 全 SystemPromptSection 名 | src/core/prompts/system-prompt/templates/TemplateEngine.ts, placeholders.ts |
| Codebuff | {CODEBUFF_*} (単一中括弧) | formatPrompt() (文字列replace) | AGENT_NAME, FILE_TREE_PROMPT_SMALL, FILE_TREE_PROMPT, FILE_TREE_PROMPT_LARGE, GIT_CHANGES_PROMPT, INITIAL_AGENT_PROMPT, KNOWLEDGE_FILES_CONTENTS, PROJECT_ROOT, REMAINING_STEPS, SYSTEM_INFO_PROMPT, USER_CWD, USER_INPUT_PROMPT | packages/agent-runtime/src/templates/strings.ts |
| Codex CLI | {{ variable }} (Askama テンプレート) | Askama (Rust compile-time) + 手動 .replace() | {{ personality }}, {{KNOWN_MODE_NAMES}}, {{REQUEST_USER_INPUT_AVAILABILITY}}, {{ASKING_QUESTIONS_GUIDANCE}}, {{ memory_root }}, {{ memory_summary }}, {{ phase2_input_selection }} | codex-rs/protocol/src/openai_models.rs:285, collaboration_mode_presets.rs, memories/prompts.rs |
| Kilocode | {{variable}} (二重中括弧) | interpolatePromptContent() | {{workspace}}, {{mode}}, {{language}}, {{shell}}, {{operatingSystem}} | src/core/prompts/sections/custom-system-prompt.ts |
| OpenClaw | なし (関数引数で直接注入) | — | — | — |
| OpenCode | $1, $ARGUMENTS (コマンドテンプレートのみ) | 文字列replace (コマンド展開時のみ) | $1, $2, $ARGUMENTS | packages/opencode/src/command/index.ts |
| Roo Code | なし (関数引数で直接注入) | — | — | — |
3. カスタムプロンプト・ルールファイル
この章ではユーザーがプロジェクト固有の指示をエージェントに与える仕組みを比較する。 CLAUDE.md、.clinerules、AGENTS.md、knowledge.mdなど、ツールごとに異なるファイル名と配置規則がある。 スコープ(組織/グローバル/プロジェクト/ローカル)の階層構造と、他ツールのルールファイルとの互換性も重要な比較軸である。
3-1. プロジェクトルールファイル体系
| ツール | メインファイル | 読み込み関数 | ファイル |
|---|---|---|---|
| Claude Code | CLAUDE.md, .claude/CLAUDE.md | (非公開) | — |
| Cline | .clinerules | getLocalClineRules() | src/core/context/instructions/user-instructions/cline-rules.ts |
| Codebuff | knowledge.md | formatPrompt() 内 KNOWLEDGE_FILES_CONTENTS | packages/agent-runtime/src/templates/strings.ts |
| Codex CLI | AGENTS.md | walk_agents_md() | codex-rs/core/src/project_doc.rs |
| Kilocode | .kilocode/rules/ ディレクトリ | loadRuleFiles() / loadEnabledRules() | src/core/prompts/sections/custom-instructions.ts |
| OpenClaw | AGENTS.md | loadWorkspaceBootstrapFiles() | src/agents/workspace.ts:441 |
| OpenCode | AGENTS.md, CLAUDE.md | InstructionPrompt.system() | packages/opencode/src/session/instruction.ts |
| Roo Code | .roo/rules/ ディレクトリ | loadRuleFiles() | src/core/prompts/sections/custom-instructions.ts |
3-2. ルールファイルのスコープ・階層
| ツール | マネージド (組織) | グローバル (ユーザー) | プロジェクト | ローカル (gitignore) | サブディレクトリ |
|---|---|---|---|---|---|
| Claude Code | C:\Program Files\ClaudeCode\CLAUDE.md (Win) / /Library/Application Support/ClaudeCode/CLAUDE.md (Mac) / /etc/claude-code/CLAUDE.md (Linux) | ~/.claude/CLAUDE.md, ~/.claude/rules/*.md | ./CLAUDE.md, ./.claude/CLAUDE.md, ./.claude/rules/*.md | ./CLAUDE.local.md | 親ディレクトリ再帰走査、子ディレクトリはオンデマンド |
| Cline | リモートConfig (サーバーから取得・キャッシュ) | ~/Documents/Cline/Rules/ (ディレクトリ内全ファイル) | .clinerules (ファイル or ディレクトリ) | — | — |
| Codebuff | — | ~/.knowledge.md, ~/.AGENTS.md, ~/.CLAUDE.md (読取専用) | knowledge.md, AGENTS.md, CLAUDE.md (大文字小文字不問) | — | — |
| Codex CLI | — | $CODEX_HOME/prompts/*.md | リポジトリ内任意の AGENTS.md (CWDからルートまで走査) | — | 配置ディレクトリ以下のツリー全体 |
| Kilocode | — | ~/.kilocode/rules/, ~/.kilocode/rules-{mode}/ | .kilocode/rules/, .kilocode/rules-{mode}/ | — | enableSubfolderRules 設定で制御 |
| OpenClaw | — | — | ~/.openclaw/workspace/ 内の AGENTS.md, SOUL.md, TOOLS.md, IDENTITY.md, USER.md, HEARTBEAT.md, BOOTSTRAP.md, MEMORY.md | — | — |
| OpenCode | — | ~/.config/opencode/AGENTS.md, ~/.claude/CLAUDE.md | AGENTS.md, CLAUDE.md (findUp), config.instructions (glob/URL) | — | InstructionPrompt.resolve() でReadツール実行時にディレクトリ別動的ロード |
| Roo Code | — | ~/.roo/rules/, ~/.roo/rules-{mode}/ | .roo/rules/, .roo/rules-{mode}/ | — | enableSubfolderRules で制御 |
3-3. 互換ルールファイル対応
| ツール | .clinerules | .cursorrules | .cursor/rules/*.mdc | .windsurfrules | AGENTS.md | CLAUDE.md |
|---|---|---|---|---|---|---|
| Claude Code | — | — | — | — | — | ✓ (メイン) |
| Cline | ✓ (メイン) | ✓ | ✓ | ✓ | ✓ (再帰スキャン) | — |
| Codebuff | — | — | — | — | ✓ | ✓ |
| Codex CLI | — | — | — | — | ✓ (メイン) | — |
| Kilocode | ✓ (レガシー) | — | — | — | ✓ | — |
| OpenClaw | — | — | — | — | ✓ (メイン) | — |
| OpenCode | — | — | — | — | ✓ (メイン) | ✓ |
| Roo Code | ✓ (フォールバック) | — | — | — | ✓ (useAgentRules設定) | — |
互換ルールファイル対応表は、ツール間の移行や併用の容易さを示す。 AGENTS.mdは最も広くサポートされており、Codebuff、Codex CLI、OpenClaw、OpenCodeなど多くのツールが対応している。 ClineはAGENTS.md、.cursorrules、.cursor/rules等も読み込む最も互換性の高いツールである。
3-4. 条件付きルール (パスベースフィルタリング)
| ツール | 対応 | 構文 | 評価ロジック | ファイル |
|---|---|---|---|---|
| Claude Code | ✓ | YAML frontmatter paths: (.claude/rules/*.md) | glob照合 | — (非公開) |
| Cline | ✓ | YAML frontmatter paths: (.clinerules) | RuleContextBuilder がファイルパス・エディタタブ・メッセージテキストに対してglob照合 | src/core/context/instructions/user-instructions/rule-conditionals.ts |
| Codebuff | — | — | — | — |
| Codex CLI | — | — | — | — |
| Kilocode | — | — | — | — |
| OpenClaw | — | — | — | — |
| OpenCode | — | — | — | — |
| Roo Code | — | — | — | — |
条件付きルールとは、特定のファイルパスに対してのみ有効になるルール定義である。 現状ではClaude CodeとClineのみが対応しており、YAML frontmatterの paths フィールドでglob指定する。 例えば *.test.ts にのみ適用されるテスト固有の指示を書くことができる。
3-5. カスタムシステムプロンプト完全差替
| ツール | 対応 | パス | 失われるセクション | 残るセクション | ファイル |
|---|---|---|---|---|---|
| Claude Code | — | — | — | — | — |
| Cline | — | — | — | — | — |
| Codebuff | ✓ | カスタムエージェントの systemPrompt 設定 | Buffy デフォルトプロンプト全体 | instructionsPrompt のサブエージェント仕様は自動追記 | agents/types/agent-definition.ts |
| Codex CLI | ✓ | config.base_instructions | model_info.base_instructions | CollaborationMode instructions, Memory instructions, Session prefix | codex-rs/core/src/codex.rs:377 |
| Kilocode | ✓ | .kilocode/system-prompt-{mode} | TOOL USE, MCP, CAPABILITIES, MODES, SKILLS, RULES, SYSTEM INFO, OBJECTIVE | roleDefinition + カスタムプロンプト + customInstructions | src/core/prompts/sections/custom-system-prompt.ts |
| OpenClaw | — (ブートストラップファイルは追加方式) | — | — | — | — |
| OpenCode | ✓ | agent.prompt フィールド | SystemPrompt.provider() 全体 | SystemPrompt.environment(), InstructionPrompt.system(), モード遷移リマインダー | packages/opencode/src/session/llm.ts |
| Roo Code | — (カスタムモードの roleDefinition 上書きのみ) | — | — | — | — |
4. ツール定義・フィルタリング
この章ではLLMに提供するツール(関数呼び出し)の定義形式と、 モードやコンテキストに応じてツールの可視性を制御するフィルタリング機構を比較する。 定義形式はJSON Schema、Zod、XML、TypeBox等ツールにより多様であり、 フィルタリングの層数も1〜7層と大きな差がある。層が多いほどきめ細かいアクセス制御が可能である。
4-1. ツール定義形式
| ツール | スキーマ形式 | 定義ファイル | 登録/集約 | LLMへの送信方式 |
|---|---|---|---|---|
| Claude Code | JSON Schema (Claude API tools パラメータ) | (非公開、バイナリ内蔵) | — | APIリクエストの tools パラメータ |
| Cline | ClineToolSpec (独自インターフェース) | src/core/prompts/system-prompt/tools/*.ts (1ファイル=1ツール) | registerClineToolSets() → ClineToolSet (registry/ClineToolSet.ts) | 非ネイティブ: プロンプト内XML形式。ネイティブ: toolSpecInputSchema() / toolSpecFunctionDefinition() / toolSpecFunctionDeclarations() でプロバイダ変換 (spec.ts) |
| Codebuff | Zod v4 スキーマ | common/src/tools/ (パラメータ定義) + packages/agent-runtime/src/tools/handlers/tool/ (ハンドラ) | toolParams オブジェクト → toolDescriptions マップ (tools/prompts.ts) | <codebuff_tool_call>{ "cb_tool_name": "..." }</codebuff_tool_call> JSON形式をプロンプトに注入 |
| Codex CLI | ToolSpec::Function (JSON Schema) / ToolSpec::Freeform (自由形式) | codex-rs/core/src/tools/spec.rs (ビルダー関数群) + tools/handlers/ | build_tools_for_config() → ToolRouter | OpenAI Responses API の tools パラメータ |
| Kilocode | XML: TypeScript関数が文字列返却。Native: OpenAI.Chat.ChatCompletionTool JSON Schema | XML: src/core/prompts/tools/*.ts。Native: src/core/prompts/tools/native-tools/*.ts | XML: getToolDescriptionsForMode()。Native: filterNativeToolsForMode() | XML: システムプロンプトの # Tools セクション。Native: API tools 配列 |
| OpenClaw | TypeBox (@sinclair/typebox, JSON Schema互換) | src/agents/tools/*.ts (1ファイル=1ツール、create*Tool() 関数) | createOpenClawTools() + createOpenClawCodingTools() | プロバイダ native tools/functions |
| OpenCode | Zod → z.toJSONSchema() → AI SDK jsonSchema() | packages/opencode/src/tool/*.ts (1ファイル=1ツール、Tool.define()) | ToolRegistry.tools() → resolveTools() | AI SDK tool() の description + parameters |
| Roo Code | OpenAI.Chat.ChatCompletionTool (JSON Schema、satisfies 型) | src/core/prompts/tools/native-tools/*.ts (1ファイル=1ツール) | getNativeTools() → filterNativeToolsForMode() | API tools 配列 |
4-2. ツールフィルタリング機構
Claude Code:
| 層 | フィルタ | 制御元 |
|---|---|---|
| 1 | Permission Mode | permissions.defaultMode / Shift+Tab (default / acceptEdits / plan / bypassPermissions) |
| 2 | SubAgent tools フィールド | エージェント定義の許可リスト |
| 3 | SubAgent disallowedTools フィールド | エージェント定義の拒否リスト |
| 4 | permissions.deny | Task(Explore) 等でSubAgent起動先も制限 |
Cline (5層):
| 層 | フィルタ | 実装箇所 |
|---|---|---|
| 1 | Variant定義 | variants/*/config.ts の .tools(...) で各Variantに含めるツール一覧を指定 |
| 2 | contextRequirements ゲーティング | ClineToolSpec.contextRequirements: browser → supportsBrowserUse, web_* → clineWebToolsEnabled, ask → !yoloModeToggled 等 |
| 3 | ACT/PLANモード | plan_mode_respond はPLAN MODEのみ(プロンプト指示制御) |
| 4 | ネイティブtool callフラグ | variant.labels.use_native_tools === 1 でXML/ネイティブ切替 |
| 5 | パラメータレベル | 個別パラメータに contextRequirements と dependencies |
フィルタリング関数: ClineToolSet.getEnabledToolSpecs(variant, context) (registry/ClineToolSet.ts)
Codebuff:
| 層 | フィルタ | 実装箇所 |
|---|---|---|
| 1 | toolNames 配列 | エージェント定義の toolNames でツール可視性を決定 |
| 2 | モード別条件 | createBase2() 内 buildArray() でモード別条件分岐 (例: !isFast && !isFree && 'write_todos') |
Codex CLI:
| 層 | フィルタ | 実装箇所 |
|---|---|---|
| 1 | CollaborationMode | Planモードでは update_plan を除外 (plan.rs でエラー返却) |
| 2 | Feature flag | Feature::Collab → multi-agentツール群、Feature::MemoryTool → メモリ関連 |
| 3 | SandboxPolicy | DangerFullAccess vs WorkspaceWrite で承認レベル変更 |
フィルタリング関数: build_tools_for_config() (codex-rs/core/src/tools/spec.rs)
Kilocode (2段階 + 追加条件):
| 層 | フィルタ | 実装箇所 |
|---|---|---|
| 1 | TOOL_GROUPS × モードの groups | getToolsForMode() (src/shared/modes.ts) |
| 2 | 条件付き除外/追加 | isToolAllowedForMode() (src/core/tools/validateToolUse.ts) + filterNativeToolsForMode() (filter-tools-for-mode.ts) |
| 追加 | codebase_search有効性, todoList有効性, 実験フラグ(imageGeneration, runSlashCommand), Fast Apply, yoloモード時ask_followup_question除外, ブラウザ無効化 | 各所 |
OpenClaw (7層パイプライン):
| 層 | フィルタ | 実装箇所 |
|---|---|---|
| 1 | ToolProfile | CORE_TOOL_PROFILES (“minimal”/“coding”/“messaging”/“full”) (tool-catalog.ts) |
| 2 | エージェント設定 | config.agents.list[].tools.allow/deny |
| 3 | オーナー専用 | OWNER_ONLY_TOOL_NAME_FALLBACKS = {“whatsapp_login”, “cron”, “gateway”} (tool-policy.ts:31) |
| 4 | サブエージェント深度別 | SUBAGENT_TOOL_DENY_ALWAYS / SUBAGENT_TOOL_DENY_LEAF (pi-tools.policy.ts:46-66) |
| 5 | サンドボックス | pickSandboxToolPolicy() (pi-tools.policy.ts) |
| 6 | グループ/チャネル | resolveChannelGroupToolsPolicy() |
| 7 | メッセージプロバイダー | voice → tts拒否 |
OpenCode (2段階):
| 層 | フィルタ | 実装箇所 |
|---|---|---|
| 1 | モデルIDベース | ToolRegistry.tools() (registry.ts:125): codesearch/websearch → opencode or Exa有効、apply_patch → GPT系のみ、plan_enter/plan_exit → 実験フラグ+CLI |
| 2 | エージェントパーミッション | PermissionNext.disabled() がdenyツールを特定 + input.user.tools 明示除外。LLM.resolveTools() (llm.ts:277) |
Roo Code:
| 層 | フィルタ | 実装箇所 |
|---|---|---|
| 1 | TOOL_GROUPS × モードの groups | filterNativeToolsForMode() (src/core/prompts/tools/filter-tools-for-mode.ts) |
| 2 | ALWAYS_AVAILABLE_TOOLS | ask_followup_question, attempt_completion, switch_mode, new_task, update_todo_list, run_slash_command, skill (src/shared/tools.ts) |
| 追加 | applyModelToolCustomization() でモデル別 includedTools/excludedTools、TOOL_ALIASES によるエイリアス解決、disabledTools設定 | 各所 |
5. 実装済みツール統合比較
この章では各ツールが実装しているツール(LLMが呼び出せる関数)を機能カテゴリ別に比較する。 ファイル操作、検索、実行、Web、エージェント制御、計画・管理、MCP、固有ツールの8カテゴリで整理している。 同じ機能でもツール名や実装方式が異なるため、移行時の機能マッピングに役立つ。
5-1. ファイル操作ツール
| 機能 | Claude Code | Cline | Codebuff | Codex CLI | Kilocode | OpenClaw | OpenCode | Roo Code |
|---|---|---|---|---|---|---|---|---|
| ファイル読取 | Read | read_file | read_files | read_file (実験) | read_file | read | read | read_file |
| ファイル書込 | Write | write_to_file | write_file | — (apply_patchで代替) | write_to_file | write | write | write_to_file |
| 差分編集 | Edit (文字列置換) | replace_in_file (SEARCH/REPLACE) | str_replace | apply_patch (JSON or Freeform/Lark文法) | apply_diff | edit | edit (文字列置換) | apply_diff |
| パッチ適用 | — | apply_patch (GPT-5系のみ) | apply_patch (Codex形式) | apply_patch | apply_patch (Codex形式) | apply_patch | apply_patch (unified diff, GPT系) | apply_patch (opt-in) |
| 複数箇所編集 | — | — | — | — | search_and_replace / search_replace / edit_file | — | multiedit | — |
| ファイル削除 | — | — | — | — | delete_file | — | — | — |
| Notebook編集 | NotebookEdit | — | — | — | — | — | — | — |
| 画像読取 | Read (マルチモーダル) | read_file (PDF/DOCX対応) | — | view_image | — | image | — | read_file (画像対応) |
5-2. 検索ツール
| 機能 | Claude Code | Cline | Codebuff | Codex CLI | Kilocode | OpenClaw | OpenCode | Roo Code |
|---|---|---|---|---|---|---|---|---|
| ファイル名検索 | Glob | list_files | find_files / glob | list_dir (実験) | list_files | find / ls | glob / list | list_files |
| 内容検索 (grep) | Grep (ripgrep) | search_files (正規表現) | code_search (ripgrep) | grep_files (実験) | search_files (正規表現) | grep | grep (ripgrep) | search_files |
| セマンティック検索 | — | — | — | — | codebase_search (CodeIndexManager/ManagedIndexer) | — | codesearch (Exa API) | codebase_search |
| コード定義一覧 | — | list_code_definition_names | read_subtree (ディレクトリツリー+変数名) | — | — | — | — | — |
| LSPシンボル検索 | — | — | — | — | — | — | lsp (experimental) | — |
5-3. 実行ツール
| 機能 | Claude Code | Cline | Codebuff | Codex CLI | Kilocode | OpenClaw | OpenCode | Roo Code |
|---|---|---|---|---|---|---|---|---|
| シェルコマンド | Bash | execute_command (requires_approval付) | run_terminal_command (SYNC/BACKGROUND) | shell / shell_command / exec_command (PTY, timeout, yield) | execute_command | exec (PTY対応) | bash | execute_command |
| 標準入力書込 | — | — | — | write_stdin | — | — | — | — |
| プロセス管理 | — | — | — | — | — | process (バックグラウンド) | — | — |
| REPL | — | — | — | js_repl / js_repl_reset | — | — | — | — |
5-4. Web ツール
| 機能 | Claude Code | Cline | Codebuff | Codex CLI | Kilocode | OpenClaw | OpenCode | Roo Code |
|---|---|---|---|---|---|---|---|---|
| Web検索 | WebSearch | web_search (Clineプロバイダ限定) | web_search (Linkup API) | web_search | — | web_search (Brave API) | websearch (条件付き) | — |
| URL取得 | WebFetch | web_fetch (Clineプロバイダ限定) | — | — | — | web_fetch | webfetch | — |
| ブラウザ操作 | — | browser_action (Puppeteer) | — | — | browser_action | browser | — | — |
| ドキュメント取得 | — | — | read_docs (Context7 API) | — | — | — | — | — |
5-5. エージェント/タスク制御ツール
| 機能 | Claude Code | Cline | Codebuff | Codex CLI | Kilocode | OpenClaw | OpenCode | Roo Code |
|---|---|---|---|---|---|---|---|---|
| SubAgent起動 | Task (foreground/background) | use_subagents (最大5並列) | spawn_agents (並列) / spawn_agent_inline | spawn_agent / spawn_agents_on_csv (最大64) | new_task (逐次) | sessions_spawn (隔離セッション) | task (子セッション) | new_task (逐次) |
| SubAgent出力取得 | TaskOutput | — (自動返却) | — (自動返却) | wait (複数待機) | — (attempt_completionで返却) | — (push-based自動通知) | — (自動返却) | — (attempt_completionで返却) |
| SubAgent停止 | TaskStop | — | — | close_agent | — | subagents (kill) | — | — |
| SubAgent通信 | — | — | — | send_input / resume_agent | — | sessions_send / subagents (steer) | — | — |
| タスク完了 | — (テキスト応答) | attempt_completion | task_completed / end_turn | — | attempt_completion | — | — | attempt_completion |
| モード切替 | — (Permission Mode) | — (act/plan UIのみ) | /mode:* CLI | — (CollaborationMode API) | switch_mode | — | PlanEnter/PlanExit (experimental) | switch_mode |
5-6. 計画・対話・管理ツール
| 機能 | Claude Code | Cline | Codebuff | Codex CLI | Kilocode | OpenClaw | OpenCode | Roo Code |
|---|---|---|---|---|---|---|---|---|
| TodoList | TodoWrite | — (attempt_completionのtask_progress) | write_todos | update_plan | update_todo_list | — | todowrite / todoread | update_todo_list |
| ユーザー質問 | AskUserQuestion (選択肢UI) | ask_followup_question | ask_user (複数選択) / suggest_followups | request_user_input | ask_followup_question | — | question | ask_followup_question |
| Plan Mode | EnterPlanMode / ExitPlanMode | plan_mode_respond | PLAN mode (base2-plan) | CollaborationMode Plan | — | — | plan_enter / plan_exit (experimental) | — |
| Skill読込 | Skill | use_skill | skill | — (description triggerで自動) | fetch_instructions | — (readツールで読込) | skill | skill |
| Worktree | EnterWorktree | — | — | — | — | — | — | — |
| コンテキスト圧縮 | — (自動) | condense / summarize_task | — (context-pruner自動) | — (自動) | condense | — (自動) | — (自動) | — (自動) |
| ルール作成 | — | new_rule | — | — | new_rule | — | — | — |
5-7. MCP ツール
| 機能 | Claude Code | Cline | Codebuff | Codex CLI | Kilocode | OpenClaw | OpenCode | Roo Code |
|---|---|---|---|---|---|---|---|---|
| MCPツール呼出 | mcp__<server>__<tool> (命名規則) | use_mcp_tool | mcpServers 経由 | MCP経由動的ツール | use_mcp_tool | — | MCP.tools() 経由 | use_mcp_tool |
| MCPリソース | — | access_mcp_resource | — | list_mcp_resources / read_mcp_resource / list_mcp_resource_templates | access_mcp_resource | — | — | access_mcp_resource |
| MCPドキュメント | — | load_mcp_documentation | — | — | — | — | — | — |
5-8. その他固有ツール
| ツール | 固有ツール |
|---|---|
| Claude Code | NotebookEdit (Jupyter), EnterWorktree (Git worktree隔離) |
| Cline | browser_action (Puppeteer), new_task (コンテキスト付き新タスク提案), generate_explanation (Git diff説明, VSCode), report_bug |
| Codebuff | read_docs (Context7 API), propose_str_replace / propose_write_file (提案のみ), lookup_agent_info, set_output, set_messages / add_message (履歴操作), run_file_change_hooks, think_deeply |
| Codex CLI | shell (配列コマンド), exec_command (PTY+yield), write_stdin, js_repl, spawn_agents_on_csv (バッチ64並列), send_input / resume_agent / wait / close_agent (エージェント間通信), view_image, report_agent_job_result |
| Kilocode | codebase_search (セマンティック), fast_edit_file (Morph), delete_file, generate_image (実験), new_rule, report_bug, act_mode_respond, search_and_replace / search_replace / edit_file (複数編集バリアント) |
| OpenClaw | memory_search / memory_get, canvas, nodes, cron, gateway, message (チャネルルーティング), sessions_list / sessions_history / sessions_send / session_status, subagents (list/steer/kill), agents_list, tts, image, process |
| OpenCode | multiedit, lsp (experimental), batch (並列実行, experimental), codesearch (Exa API), plan_enter / plan_exit (experimental) |
| Roo Code | codebase_search (ベクトル), read_command_output, run_slash_command (実験), edit / search_replace / edit_file / apply_patch (opt-in編集バリアント), generate_image (実験) |
6. Agentic機能 詳細比較 (Mode / SubAgent / Skill)
この章ではエージェントの振る舞いを定義する3つの中核概念を比較する。
Mode: エージェントの動作モード(計画/実行/レビュー等)の切り替え方式。
SubAgent: 親エージェントが子エージェントを起動して並列・委譲処理する仕組み。
Skill: 特定タスク向けの再利用可能なプロンプト+設定のパッケージ。
これらの組み合わせにより、複雑なタスクを構造化して処理する能力が決まる。
6-1. Mode
| 項目 | Claude Code | Cline | Codebuff | Codex CLI |
|---|---|---|---|---|
| 型定義 | "default" | "acceptEdits" | "dontAsk" | "bypassPermissions" | "plan" | type Mode = "plan" | "act" | CostMode = 'ask' | 'free' | 'normal' | 'max' | CollaborationModeMask { name, mode: Option<ModeKind>, model, reasoning_effort, developer_instructions } + ModeKind { Default, Plan } |
| 定義ファイル | 設定ファイル permissions.defaultMode | src/shared/storage/types.ts, components/act_vs_plan_mode.ts | packages/agent-runtime/src/main-prompt.ts | core/src/models_manager/collaboration_mode_presets.rs, core/src/agent/role.rs |
| 組み込みモード数 | 5 (Permission Mode) | 2 (act/plan) | 5+1 (ask/free/normal/max/fast + plan) | 2 CollabMode (Default/Plan) + 4 AgentRole (default/explorer/worker/awaiter) |
| 切替方式 | Shift+Tab / CLI --permission-mode | UI切替 | /mode:* CLI | クライアントがターン開始時指定 |
| ツール制御方式 | Permission Modeがツール承認動作を制御 | プロンプト指示のみ(ハードフィルタなし) | toolNames 配列の条件分岐 | developer_instructions差替。AgentRoleはConfig TOMLマージ |
| カスタムモード | — | — | — | カスタムCollaborationModeプリセット |
| SubAgent別設定 | permissionMode フィールドで個別設定(親がbypass時は上書き不可) | — | エージェント定義ごとに独立 | AgentRole TOML overlay (apply_role_to_config()) |
| 項目 | Kilocode | OpenClaw | OpenCode | Roo Code |
|---|---|---|---|---|
| 型定義 | ModeConfig { slug, name, roleDefinition, whenToUse, groups, customInstructions, source?, iconName? } | ToolProfileId = "minimal" | "coding" | "messaging" | "full" + PromptMode = "full" | "minimal" | "none" | Agent.Info { name, mode("primary"|"subagent"|"all"), permission(Ruleset), prompt?, model? } | ModeConfig { slug, name, roleDefinition, whenToUse?, groups, customInstructions? } |
| 定義ファイル | packages/types/src/mode.ts (DEFAULT_MODES), src/shared/modes.ts | src/agents/tool-catalog.ts, src/agents/system-prompt.ts | packages/opencode/src/agent/agent.ts | packages/types/src/mode.ts, src/shared/modes.ts |
| 組み込みモード数 | 6 (architect/code/ask/debug/orchestrator/review) | ToolProfile 4種 + PromptMode 3種 | 2 primary (build/plan) + 2 subagent (general/explore) + 3 hidden | 5 (architect/code/ask/debug/orchestrator) |
| 切替方式 | switch_mode ツール / UI | エージェント設定 | @ 指定 / PlanEnter/PlanExit | switch_mode ツール / UI |
| ツール制御方式 | groups × TOOL_GROUPS + isToolAllowedForMode() | allow/denyリスト | エージェント別 permission ルールセット | groups × TOOL_GROUPS |
| カスタムモード | ✓ (VSCode globalState customModes / .kilocode/) | エージェント定義で設定 | .opencode/agent/*.md / opencode.json agent | ✓ (VSCode customModes / .roomodes) |
| SubAgent別設定 | — (逐次new_task) | サブエージェント深度別ToolPolicy | エージェント別 permission + disabled tools | — (逐次new_task) |
6-2. SubAgent / NewTask
| 項目 | Claude Code | Cline | Codebuff | Codex CLI |
|---|---|---|---|---|
| ツール名 | Task | use_subagents | spawn_agents / spawn_agent_inline | spawn_agent / spawn_agents_on_csv |
| 実装ファイル | — (非公開) | SubagentToolHandler.ts, SubagentRunner.ts (src/core/task/tools/subagent/) | spawn-agents.ts, spawn-agent-utils.ts (packages/agent-runtime/src/tools/handlers/tool/) | multi_agents.rs, control.rs, guards.rs (core/src/tools/handlers/, core/src/agent/) |
| 並列実行 | ✓ (run_in_background パラメータ) | ✓ (最大5, Promise.allSettled) | ✓ (Promise.allSettled) | ✓ (agent_max_threads 制限 + CSV batch 最大64) |
| 再帰制限 | 不可 (SubAgentはSubAgent起動不可) | 不可 (!context.isSubagentRun ガード) | 可 (loopAgentSteps() 再帰呼び出し) | 深度制限 (agent_max_depth) |
| コンテキスト | 独立 (resume対応: agent IDで再開可能) | 独立 (親の会話履歴参照なし) | 独立 or 親継承 (inheritParentSystemPrompt, includeMessageHistory) | fork可能 (fork_context: bool) |
| 結果返却 | サマリとして親に返却 | attempt_completion で親に返却 | 自動返却 | completion_watcher が親に完了通知 |
| エージェント間通信 | — | — | — | send_input / resume_agent |
| isolation | isolation: "worktree" でGit worktree隔離 | — | — | — |
| トランスクリプト | ~/.claude/projects/{project}/{sessionId}/subagents/agent-{agentId}.jsonl | — | — | — |
| 項目 | Kilocode | OpenClaw | OpenCode | Roo Code |
|---|---|---|---|---|
| ツール名 | new_task | sessions_spawn | task | new_task |
| 実装ファイル | src/core/tools/NewTaskTool.ts | src/agents/subagent-spawn.ts, tools/sessions-spawn-tool.ts | packages/opencode/src/tool/task.ts | src/core/tools/NewTaskTool.ts |
| 並列実行 | 不可 (逐次) | ✓ (Gateway API経由) | LLM判断依存 (複数task同時発行) | 不可 (逐次) |
| 再帰制限 | 不可 | 深度制限 (DEFAULT_SUBAGENT_MAX_SPAWN_DEPTH) | 不可 (hasTaskPermission チェック) | 不可 |
| コンテキスト | 独立 (delegateParentAndOpenChild()) | 独立 (隔離セッション) | 独立 (Session.create({ parentID })) | 独立 (delegateParentAndOpenChild()) |
| 結果返却 | attempt_completion で返却 | 完了時自動アナウンス (push-based) | テキスト結果を親に返却 | attempt_completion で返却 |
| エージェント間通信 | — | sessions_send / subagents (steer/kill) | — | — |
| 特記 | newTaskRequireTodos 設定でtodos必須化可能 | mode: “run” (一回実行) / “session” (永続スレッドバインド) | サブセッションはtodowrite/todoread無効 | newTaskRequireTodos 設定でtodos必須化可能 |
6-3. Skill
| 項目 | Claude Code | Cline | Codebuff | Codex CLI |
|---|---|---|---|---|
| 配置パス | .claude/skills/<name>/SKILL.md (project), ~/.claude/skills/<name>/SKILL.md (user) | .clinerules/skills/, .cline/skills/, .claude/skills/, .agents/skills/, ~/.cline/skills/, ~/.agents/skills/ | .agents/skills/{name}/SKILL.md | $CODEX_HOME/skills/<name>/SKILL.md |
| frontmatter | name, description, disable-model-invocation, user-invocable, allowed-tools, model, context, agent, hooks | name, description | name, description | description (トリガーマッチング用) |
| 読み込みツール | Skill | use_skill | skill | 自動 (descriptionマッチ→ボディ注入) |
| プロンプト注入方式 | セッション開始時にdescription一覧を注入 (バジェット: context windowの2%, フォールバック16,000文字) | SKILLS_SECTIONにリスト注入 → LLMが名前指定で読込 | formatAvailableSkillsXml() でXML形式に変換しdescriptionに埋込 | 起動時に install_system_skills() でアセット展開 → フロントマターdescriptionでマッチ |
| モード別フィルタ | — | — | — | — |
| 特記 | context: fork で独立SubAgentコンテキスト。allowed-tools で権限昇格。agent フィールドで実行SubAgent指定 | — | /skill:{name} でスラッシュコマンドからも呼出可能 | Built-in: skill-creator, skill-installer |
| 実装ファイル | — (非公開) | src/core/context/instructions/user-instructions/skills.ts, tools/use_skill.ts | packages/agent-runtime/src/tools/handlers/tool/skill.ts | codex-rs/skills/src/lib.rs |
| 項目 | Kilocode | OpenClaw | OpenCode | Roo Code |
|---|---|---|---|---|
| 配置パス | .kilocode/skills/, .kilocode/skills-{mode}/ (global/project) | workspace内 skills/ + バンドル + プラグイン | .opencode/{skill,skills}/**/SKILL.md, .claude/skills/**/SKILL.md, ~/.claude/skills/ | .roo/skills/, .roo/skills-{mode}/, .agents/skills/ (global/project) |
| frontmatter | name, description | name, description, always, os, requires.bins/env/config, install | name, description | name, description, modeSlugs |
| 読み込みツール | fetch_instructions | read ツールで読込 | skill | skill |
| プロンプト注入方式 | AVAILABLE SKILLSセクションに一覧 + mandatory_skill_check 指示 | <available_skills> セクション注入 → LLMがマッチ選択 | SkillToolのdescriptionにスキル一覧をXML形式で埋込 | AVAILABLE SKILLSセクションにXMLリスト + mandatory_skill_check |
| モード別フィルタ | ✓ (skills-{mode}/ ディレクトリ) | — | — | ✓ (skills-{mode}/ ディレクトリ + modeSlugs frontmatter) |
| 特記 | 優先順位: project > global, mode-specific > generic | always frontmatterで常時読込。requires で前提条件指定。SkillCommandSpecでスラッシュコマンド登録 | Skillはプロンプトテキスト注入のみ(ツールセット切替なし) | 優先順位: project > global, mode-specific > generic, .roo > .agents |
| 実装ファイル | src/services/skills/SkillsManager.ts, sections/skills.ts | src/agents/skills/workspace.ts, skills/types.ts | packages/opencode/src/skill/skill.ts, tool/skill.ts | src/services/skills/SkillsManager.ts, sections/skills.ts |
7. Agentic機能 詳細比較 (Compaction / Checkpoint / Plan / Permission)
この章ではエージェントの長時間実行を支える4つの機能を比較する。
Context Compaction: コンテキストウィンドウの溢れを防ぐ会話圧縮。
Checkpoint/Rollback: ファイル変更の巻き戻し(アンドゥ)機能。
Plan + TodoList: タスクの計画・進捗管理。
Tool Permission: ツール実行の承認・拒否制御とサンドボックス。
7-1. Context Compaction
| 項目 | Claude Code | Cline | Codebuff | Codex CLI |
|---|---|---|---|---|
| トリガー | 自動: context windowの約95%到達。手動: /compact [focus] | 自動: コンテキストウィンドウ超過。手動: /smol (/compact) → condense ツール | 自動: 毎ステップ先頭でcontext-prunerが判定 (maxContextLength超過 or プロンプトキャッシュミス5分超) | 自動: コンテキストウィンドウ溢れ。手動: ユーザー明示 |
| 圧縮方式 | 古いツール出力クリア → 必要に応じLLMで要約 | summarize_task → LLMが8セクション要約生成。condense → getNextTruncationRange() でトランケーション | context-pruner (gpt-5-mini) が全履歴を要約 → <conversation_summary> タグ → set_messages で置換 | Inline: 同一モデルに会話履歴+Compactionプロンプト送信→要約生成→新履歴構築。Remote: OpenAI専用APIで圧縮済み履歴受信 |
| 保持ルール | CLAUDE.mdの指示は保持。“Compact Instructions"セクションで制御可能 | keepStrategy: “lastTwo”/“none” | 目標サイズ: maxContextLength × 0.1 (10%) | ユーザーメッセージ最新優先、20,000トークン上限。Ghost Snapshot再付加 |
| 実装ファイル | — (非公開) | src/core/context/context-management/ContextManager.ts, src/core/prompts/contextManagement.ts, CondenseHandler.ts | agents/context-pruner.ts | core/src/compact.rs (Inline), core/src/compact_remote.rs (Remote) |
| 閾値設定 | CLAUDE_AUTOCOMPACT_PCT_OVERRIDE 環境変数 | — | maxContextLength (デフォルト200K) | — |
| Hook | PreCompact フックイベント (matcher: manual | auto) | PreCompact Hook (外部スクリプトが contextModification で注入可能) | — | — |
| SubAgent | SubAgentも独立してauto-compaction | SubAgent: useAutoCondense 設定で75%閾値 | 親のhandleStepsが毎ステップ呼出 (inheritParentSystemPrompt) | — |
| 項目 | Kilocode | OpenClaw | OpenCode | Roo Code |
|---|---|---|---|---|
| トリガー | 自動: MIN_CONDENSE_THRESHOLD(5%)~MAX_CONDENSE_THRESHOLD(100%)到達 | 自動: トークン上限到達 | 自動: isOverflow() (入力トークン > limit.input) | 自動: トークン上限接近。手動: /compact |
| 圧縮方式 | 最後の3メッセージ (N_MESSAGES_TO_KEEP) 保持、残りをLLMで要約 → 要約をassistantメッセージとして挿入、元メッセージを condenseParent タグで非表示化(非破壊的) | chunkMessagesByMaxTokens() でチャンク分割 → 各チャンク generateSummary() (reasoning: “high”) → 要約で置換 | compaction agent で要約生成 (summary: true assistantメッセージ) → prune() で古いツール出力を compacted マーク (40,000トークン以降) | summarizeConversation() でLLM要約 → 全メッセージに condenseParent タグ付与 → 要約メッセージのみAPI送信 (Fresh Start Model) |
| 保持ルール | — | BASE_CHUNK_RATIO=0.4, SAFETY_MARGIN=1.2 | skill ツール出力はプルーニング保護 | <command> ブロックとファイルコンテキストは保持 |
| 実装ファイル | src/core/condense/index.ts | src/agents/compaction.ts | packages/opencode/src/session/compaction.ts | src/core/condense/index.ts |
| カスタマイズ | カスタム要約プロンプト + カスタムAPI handler | — | config.compaction.auto (デフォルトtrue), config.compaction.prune (デフォルトtrue) | customCondensingPrompt で要約指示カスタマイズ |
Context Compactionはロングランニングタスクにおいて不可欠な機能である。 圧縮方式はツールにより異なり、LLM要約型(Claude Code, Kilocode等)、チャンク分割要約型(OpenClaw)、 専用圧縮エージェント型(Codebuff, OpenCode)、リモートAPI型(Codex CLI)等がある。 保持ルールの違いにより、圧縮後にどれだけの情報が残るかが大きく変わる。
7-2. Checkpoint / Rollback
| 項目 | Claude Code | Cline | Codebuff | Codex CLI |
|---|---|---|---|---|
| 実装 | ✓ | ✓ | — (未実装) | ✓ |
| 方式 | セッションローカルスナップショット | Shadow Gitリポジトリ (CheckpointTracker) | — | Ghost Commit (git) + ShellSnapshot + Thread Rollback API |
| 保存タイミング | ファイル編集前に自動 | ツール実行ごとに commit() | — | ターン開始時に GhostSnapshotTask が create_ghost_commit_with_report() 実行 |
| 復元方式 | Esc×2 → /rewind ダイアログ → 任意時点に巻き戻し | 3タイプ: "task" (会話のみ), "workspace" (ファイルのみ, git reset --hard), "taskAndWorkspace" (両方) | — | /undo → 履歴末尾の GhostSnapshot 検索 → restore_ghost_commit_with_options()。Thread Rollback: 最後Nターン切捨て (ファイル復元なし) |
| 追加機能 | --fork-session で特定時点から分岐 | — | — | Shell Snapshot: シェル環境 (functions/aliases/env vars) キャプチャ → $CODEX_HOME/shell_snapshots/ (3日保持) |
| 実装ファイル | — (非公開) | src/integrations/checkpoints/CheckpointTracker.ts, index.ts | — | core/src/tasks/ghost_snapshot.rs, core/src/tasks/undo.rs, utils/git/src/ghost_commits.rs, core/src/shell_snapshot.rs |
| 制限 | リモートシステム操作はチェックポイント対象外 | 初期化に15秒タイムアウト | — | tracked+untracked全ファイル (node_modules除外, 10MiB超untracked除外, 200ファイル超untrackedディレクトリ除外) |
| 項目 | Kilocode | OpenClaw | OpenCode | Roo Code |
|---|---|---|---|---|
| 実装 | ✓ | — (未実装) | ✓ | ✓ |
| 方式 | Shadow Gitリポジトリ (RepoPerTaskCheckpointService) | — | Snapshot (Git write-tree) | Shadow Gitリポジトリ (RepoPerTaskCheckpointService) |
| 保存タイミング | ツール実行前 | — | 各ステップ開始時 (Snapshot.track()) | ツール実行後 (checkpointSave()) |
| 復元方式 | Git restoreで復元 | — | SessionRevert.revert() でSnapshotパッチを逆適用。Snapshot.restore() でunrevert | checkpointRestore() で指定コミットに復元 + メッセージ履歴巻き戻し |
| 追加機能 | — | — | Snapshot.cleanup() が1時間間隔で7日超をGC。Snapshot.patch() で差分記録 | checkpointDiff() で差分表示 |
| 実装ファイル | src/core/checkpoints/index.ts | — | packages/opencode/src/snapshot/index.ts, session/revert.ts | src/core/checkpoints/index.ts, src/services/checkpoints/ |
| 制限 | task.enableCheckpoints と task.checkpointTimeout で制御 | — | 専用gitdir $DATA/snapshot/$projectID | Git インストール必須。タイムアウト設定あり |
7-3. Plan + TodoList + Progress
| 項目 | Claude Code | Cline | Codebuff | Codex CLI |
|---|---|---|---|---|
| Plan機構 | EnterPlanMode / ExitPlanMode ツール。Shift+Tab切替。--permission-mode plan で起動 | ACT/PLAN 2値切替。PLAN時は plan_mode_respond のみ使用可 | PLAN mode (base2-plan): ファイル変更禁止、<PLAN> タグで仕様記述 | CollaborationMode Plan: plan.md 注入、Explore/Intent Chat/Implementation Chat の3フェーズ、<proposed_plan> 出力、ファイル変更禁止 |
| TodoListツール | TodoWrite (content, activeForm, status: pending|in_progress|completed) | FocusChain: attempt_completion/summarize_task の task_progress パラメータ内Markdownチェックリスト (- [x]/- [ ]) | write_todos ({ todos: [{ task: string, completed: boolean }] }) | update_plan ({ explanation?, plan: [{ step, status: "pending"|"in_progress"|"completed" }] }) |
| 永続化 | — | <taskDir>/<taskId>-focuschain.md + chokidar監視 | UI側で表示 (ハンドラは成功を返すのみ) | EventMsg::PlanUpdate → TUI/クライアント表示 (サーバー側永続化なし) |
| 実装ファイル | — (非公開) | src/core/task/focus-chain/index.ts (FocusChainManager) | packages/agent-runtime/src/tools/handlers/tool/write-todos.ts, agents/base2/base2-plan.ts | core/src/tools/handlers/plan.rs |
| 制限 | — | Next-Gen系モデルでのみFEEDBACK/TASK_PROGRESSセクション有効。focusChainSettings.enabled | — | 同時にin_progressは1ステップのみ。Planモードではupdate_plan拒否 |
| 項目 | Kilocode | OpenClaw | OpenCode | Roo Code |
|---|---|---|---|---|
| Plan機構 | Architectモードの customInstructions がタスク分解→TodoList作成を指示 | — (未実装) | Plan Agent + plan_enter / plan_exit (experimental: OPENCODE_EXPERIMENTAL_PLAN_MODE)。計画ファイルは .opencode/plans/ 保存 | Architectモードの customInstructions が計画→todoリスト作成→進捗更新を指示 |
| TodoListツール | update_todo_list (Markdownチェックリスト: [ ]=pending, [-]=in_progress, [x]=completed) | — | todowrite / todoread (Todo.Info { content, status, id }) | update_todo_list (Markdownチェックリスト: [ ], [-], [x]) |
| 永続化 | — | — | Todo.update() でセッション内管理 | — |
| 実装ファイル | src/core/prompts/tools/update-todo-list.ts, src/core/tools/UpdateTodoListTool.ts | — | packages/opencode/src/tool/plan.ts, tool/todo.ts, session/todo.ts | src/core/prompts/tools/native-tools/update_todo_list.ts |
| 制限 | todoListEnabled 設定で無効化可能 | — | サブセッションはtodowrite/todoread無効 | todoListEnabled 設定で無効化可能 |
Plan機構はタスクの分解と進捗追跡を行う仕組みである。 専用ツール(EnterPlanMode等)を持つものと、モードの一部として実装するもの(Architectモード等)に分かれる。 TodoListのステータス管理方式もツールにより異なり、3値(pending/in_progress/completed)が標準的だが、 Markdownチェックリスト形式を採用するツールもある。
7-4. Tool Permission / Approval
| 項目 | Claude Code | Cline | Codebuff | Codex CLI |
|---|---|---|---|---|
| 承認モデル | Permission Rules (allow/ask/deny) | AutoApprovalSettings.actions (ツール種別ごとのbool) + YOLOモード | なし (エージェントランタイム側に承認制御なし) | AskForApproval enum (Never/OnFailure/OnRequest/UnlessTrusted/Reject) + SandboxPolicy + ExecPolicyManager |
| 設定形式 | permissions: { allow: ["Bash(npm run lint)"], ask: ["Bash(git push *)"], deny: ["Read(./.env)"] } | actions: { readFiles, readFilesExternally, editFiles, editFilesExternally, executeSafeCommands, executeAllCommands, useBrowser, useMcp } | CLI側 requestToolCall コールバック (制限的) | .rules ファイル (Starlark DSL): exec_policy.check_multiple() → Allow/Prompt/Forbidden |
| 評価順序 | deny → ask → allow (最初のマッチ) | — | — | ExecPolicyManager → セッション内承認キャッシュ (with_cached_approval()) → default.rules に自動追記で永続化 |
| ワイルドカード | Bash(npm run *), Read(./src/**) | — | — | Starlark DSL内のパターンマッチ |
| サンドボックス | sandbox.enabled, autoAllowBashIfSandboxed, excludedCommands, ネットワーク制限 | — | — | Seatbelt (macOS), Landlock (Linux), Windows Sandbox。sandbox失敗時「sandbox無しで再実行」オプション |
| Hook連携 | PreToolUseフックで動的ブロック/承認 | PreToolUse Hook (cancel/contextModification) | — | — |
| 設定階層 | Managed > CLI > Local > Project > User。allowManagedPermissionRulesOnly で制限 | リモートConfig > セッションオーバーライド > タスク設定 > グローバル設定 | — | $CODEX_HOME/rules/*.rules |
| 実装ファイル | — (非公開) | src/shared/AutoApprovalSettings.ts, src/core/task/tools/autoApprove.ts, src/core/permissions/CommandPermissionController.ts | — | core/src/tools/sandboxing.rs, core/src/exec_policy.rs, core/src/config/permissions.rs |
| 項目 | Kilocode | OpenClaw | OpenCode | Roo Code |
|---|---|---|---|---|
| 承認モデル | AutoApprovalHandler + yoloモード + リクエスト数/コスト上限 | ToolProfile + allow/deny + オーナー専用 + 深度別 + サンドボックス + グループ + プロバイダー (7層パイプライン) | PermissionNext (allow/deny/ask 3段階。ルールセット、エージェント別) | AutoApprovalHandler + askApproval() |
| 設定形式 | AutoApprovalSettings.actions (Cline互換) + CommandPermissionController (env CLINE_COMMAND_PERMISSIONS) | config.agents.list[].tools.allow/deny (グループ名 “group:fs” 等も使用可) | PermissionNext.Rule { permission(ツール名glob), pattern(引数glob), action } | Auto-Approve設定 (allowedMaxRequests, allowedMaxCost) |
| 評価順序 | — | サブエージェント深度 → サンドボックス → エージェント → グループ → ToolProfile → オーナー → プロバイダ | findLast (後勝ち) でルールセット評価。デフォルト ask | — |
| バイパスモード | yoloMode: 全承認スキップ (ask_followup_question も無効化) | — | config.permission でグローバル "allow" 設定可能 | — |
| Doom Loop検出 | — | — | ✓ (同一ツール+同一入力が3回連続 → doom_loop パーミッション要求) | — |
| exec承認 | CommandPermissionController: CLINE_COMMAND_PERMISSIONS 環境変数でallow/deny globパターン。&&, ||, |, ; セグメント分割、バックティック禁止 | bash-tools.exec-approval-request.ts で実行前承認フロー | — | — |
| 実装ファイル | src/core/auto-approval/AutoApprovalHandler.ts | src/agents/tool-policy.ts, pi-tools.policy.ts, tool-policy-pipeline.ts | packages/opencode/src/permission/next.ts | src/core/auto-approval/AutoApprovalHandler.ts |
Tool Permissionはセキュリティ上最も重要な機能の一つである。 Claude Codeのallow/ask/deny 3段階ルールとワイルドカードパターン、 Codex CLIのStarlark DSLによるポリシー定義、OpenClawの7層パイプラインなど、 承認モデルの粒度と柔軟性に大きな差がある。サンドボックス対応もセキュリティ面で重要な差別化要因である。
7-5. Hooks
| 項目 | Claude Code | Cline | Codebuff | Codex CLI |
|---|---|---|---|---|
| Hookイベント数 | 5 (PreToolUse, PostToolUse, UserPromptSubmit, Stop, PreCompact) | 8 (PreToolUse, PostToolUse, UserPromptSubmit, TaskStart, TaskResume, TaskCancel, TaskComplete, PreCompact) | — | — |
| 定義場所 | settings.json 内hooks設定 | .clinerules/hooks/<HookName> or ~/Documents/Cline/Hooks/<HookName> | — | — |
| 実行方式 | シェルコマンド | 実行可能ファイル → JSON stdin → JSON stdout | — | — |
| 制御 | フィードバックをユーザーからの入力として扱う | cancel: true でブロック、contextModification でコンテキスト注入。30秒タイムアウト、1MB出力制限 | — | — |
| Plugin対応 | Plugin hookで配布可能 | — | — | — |
| 項目 | Kilocode | OpenClaw | OpenCode | Roo Code |
|---|---|---|---|---|
| Hookイベント数 | — | applyBootstrapHookOverrides() (ブートストラップフック) | Plugin.trigger() (実験的) | — |
| 定義場所 | — | src/agents/bootstrap-hooks.ts | Plugin定義内 | — |
| 実行方式 | — | プラグインがブートストラップファイルを書き換え | "experimental.chat.system.transform", "tool.execute.before/after" | — |
8. 長期記憶 詳細比較
この章ではセッションを跨いで知識を保持する「長期記憶」の実装を比較する。 実装パターンは大きく分けて、ファイルベース(C型)、パイプライン型(B+C型)、ベクトル検索型(独自)、未実装(F型)がある。 2026年2月時点で本格的な長期記憶を実装しているのはClaude Code、Codex CLI、OpenClawの3ツールのみであり、 Cline、Kilocode、Roo Codeは未実装である。
8-1. 実装パターン分類
| ツール | パターン | 自動抽出 | 検索方式 | 格納形式 |
|---|---|---|---|---|
| Claude Code | C (ファイルベース) | ✓ Auto Memory | 全文注入 (MEMORY.md先頭200行) + Read/Grep/Globツールでオンデマンド | Markdown (~/.claude/projects/<project>/memory/MEMORY.md + *.md) |
| Cline | F (未実装) | — | — | — |
| Codebuff | C (ファイルベース) | △ (AI判断write) | 全文注入 ({CODEBUFF_KNOWLEDGE_FILES_CONTENTS}) | Markdown (knowledge.md, AGENTS.md, CLAUDE.md) |
| Codex CLI | B+C (パイプライン + ファイル) | ✓ 2フェーズ自動 | 全文注入 (memory_summary.md, 上限5,000トークン) + grepベースキーワード検索 | Markdown + SQLite ($CODEX_HOME/memories/ + StateDB) |
| Kilocode | F (未実装) | — | — | — |
| OpenClaw | 独自 (C + ベクトル検索) | △ (ファイル監視→再インデックス) | ハイブリッド (ベクトル0.7 + BM25 0.3 + MMR + 時間減衰) | SQLite (sqlite-vec + FTS5) (~/.openclaw/state/memory/{agentId}.sqlite) |
| OpenCode | F (未実装) / 部分的C | — | — | — |
| Roo Code | F (未実装) | — | — | — |
8-2. Claude Code: Auto Memory
| 項目 | 詳細 |
|---|---|
| 格納先 | ~/.claude/projects/<project-hash>/memory/MEMORY.md (インデックス) + *.md (トピックファイル) |
| プロンプト注入 | MEMORY.md先頭200行をシステムプロンプトに自動注入。トピックファイルはRead/Grep/Globでオンデマンド |
| 書き込みトリガー | 自動 (Auto Memory: LLMが有用コンテキストを自動判断) + 明示 (ユーザー指示 “remember that…”) + /memory コマンド |
| 書き込み方法 | LLMがWrite/Editツールで memory/MEMORY.md や memory/*.md に直接書き込み |
| 更新指示 | “Update or remove memories that turn out to be wrong or outdated” (システムプロンプト内) |
| サイズ制限 | MEMORY.md 200行。超過時はトピックファイルへ移動する指示あり |
| SubAgent永続メモリ | memory フィールド (user/project/local) で有効化。パス: ~/.claude/agent-memory/<name>/, .claude/agent-memory/<name>/, .claude/agent-memory-local/<name>/ |
| 無効化 | autoMemoryEnabled: false (settings.json) / CLAUDE_CODE_DISABLE_AUTO_MEMORY=1 環境変数 |
Claude CodeのAuto Memoryは、LLMが自律的に有用な情報を判断してMEMORY.mdに書き込む方式である。 シンプルだが実用的で、先頭200行がシステムプロンプトに自動注入される。 SubAgent永続メモリ(user/project/local)により、サブエージェントも独自の記憶領域を持てる点が特徴的である。
8-3. Codex CLI: 2フェーズメモリパイプライン
| 項目 | Phase 1 (抽出) | Phase 2 (統合) |
|---|---|---|
| トリガー | start_memories_startup_task() (root session開始時、非SubAgent、非ephemeral、Feature::MemoryTool有効時) | Phase 1完了後自動 |
| 実行モデル | gpt-5.1-codex-mini, reasoning_effort=Low | gpt-5.3-codex, reasoning_effort=Medium |
| 並列度 | 最大8件 | グローバルロック排他 (1件) |
| 入力 | 過去ロールアウト (会話ログ) → serialize_filtered_rollout() (70%コンテキスト切り詰め) | Stage1Output (selected + removed + retained) |
| 出力 | raw_memory (タスク別), rollout_summary (要約), rollout_slug | MEMORY.md (統合ハンドブック), memory_summary.md (索引), skills/<name>/SKILL.md |
| プロンプト | system: stage_one_system.md, user: stage_one_input.md template | consolidation.md template |
| 後処理 | redact_secrets() → StateDB.mark_stage1_job_succeeded() | SubAgent (SessionSource::SubAgent(MemoryConsolidation)) として spawn |
| 実装ファイル | core/src/memories/phase1.rs | core/src/memories/phase2.rs |
読み取りパス:
| 項目 | 詳細 |
|---|---|
| 全文注入 | memory_summary.md → developer instructions注入 (read_path.md テンプレート経由、上限5,000トークン) |
| キーワード検索 | MEMORY.md をgrepで検索。memory_summary.mdの “What’s in Memory” セクションがルーティングガイド |
| 選択的参照 | rollout_summaries/*.md からMEMORY.md参照ポインタで1-2件選択 |
| 矛盾解決 | updated_at タイムスタンプ + 検証強度 (ユーザーフィードバック > テスト結果 > アシスタント自己申告) |
| プルーニング | max_raw_memories_for_global, max_unused_days 設定。retained_memories() で上限超過分を切り捨て。prune_rollout_summaries() で物理ファイル同期削除 |
| 実装ファイル | core/src/memories/prompts.rs:158 (build_memory_tool_developer_instructions()), core/src/memories/storage.rs |
Codex CLIの2フェーズメモリは8ツール中最も高度な記憶システムである。
Phase 1でgpt-5.1-codex-miniが過去の会話ログから記憶を抽出し、
Phase 2でgpt-5.3-codexが統合ハンドブック(MEMORY.md)と索引(memory_summary.md)を生成する。
秘密情報の自動削除(redact_secrets)やプルーニング(未使用日数超過で自動削除)も備える。
8-4. OpenClaw: ベクトル+BM25ハイブリッドメモリ
| 項目 | 詳細 |
|---|---|
| 記憶ソース | MEMORY.md, memory/*.md (ユーザー/LLMが直接編集) + セッションtranscript (experimental: experimental.sessionMemory: true) |
| インデックスDB | SQLite (sqlite-vec + FTS5) — ~/.openclaw/state/memory/{agentId}.sqlite |
| 埋め込みプロバイダ | OpenAI text-embedding-3-small / Gemini gemini-embedding-001 / Voyage voyage-4-large / Mistral mistral-embed / ローカル (node-llama) |
| ベクトル検索 | sqlite-vec拡張。デフォルト重み: 0.7 |
| 全文検索 | SQLite FTS5 (BM25)。buildFtsQuery() でクエリ変換。デフォルト重み: 0.3 |
| マージ | mergeHybridResults() でベクトルスコアとBM25スコアを重み付き加算 |
| MMR | オプション。lambda=0.7 で多様性確保 |
| 時間減衰 | オプション。halfLifeDays=30 で古い記憶のスコアを減衰 |
| ファイル監視 | chokidar watcherがメモリファイル変更を検知 → watchDebounceMs=1500 後に再チャンク化 → 埋め込み再計算 → SQLiteインデックス更新 |
| ツール | memory_search (セマンティック検索), memory_get (ファイル読み取り) |
| 全文注入 | MEMORY.md自体はブートストラップファイルとしてProject Contextセクションに全文注入 (resolveBootstrapMaxChars() で制御) |
| サブエージェント | SUBAGENT_TOOL_DENY_ALWAYS に memory_search/memory_get 含まれるため利用不可 |
| 実装ファイル | src/memory/manager.ts (MemoryIndexManager), src/memory/hybrid.ts, src/memory/embeddings.ts, src/memory/sqlite-vec.ts, src/memory/mmr.ts, src/memory/temporal-decay.ts, src/agents/tools/memory-tool.ts |
8-5. Codebuff: knowledge.md
| 項目 | 詳細 |
|---|---|
| 格納先 | プロジェクトルートの knowledge.md, AGENTS.md, CLAUDE.md + ~/.knowledge.md 等 |
| 注入方式 | {CODEBUFF_KNOWLEDGE_FILES_CONTENTS} プレースホルダ経由でシステムプロンプトに全文注入 |
| 書き込み | LLMが write_file/str_replace で直接更新。knowledgeFilesPrompt が「いつ更新すべきか」をプロンプトで指示 |
| 初期化 | /init コマンド → README/package.json等を読み取り → knowledge.md生成 |
| 矛盾解決 | なし (AIが既存内容を読み取りマージ判断) |
| 実装ファイル | packages/agent-runtime/src/system-prompt/prompts.ts (knowledgeFilesPrompt, additionalSystemPrompts['/init']), templates/strings.ts (formatPrompt()) |
9. カスタマイズ性・拡張性
この章ではユーザーが各ツールの動作をどこまでカスタマイズできるかを比較する。 カスタムエージェント/モード定義、スラッシュコマンド、カスタムツール定義、 およびカスタムプロンプト使用時に何が失われ何が残るかを詳細に整理している。 拡張性の高さはツール選定時の重要な判断基準となる。
9-1. カスタムエージェント/モード定義
| ツール | 定義形式 | 配置パス | 上書き方式 | 優先順位 | 実装ファイル |
|---|---|---|---|---|---|
| Claude Code | Markdownファイル (YAMLフロントマター + マークダウン本文=システムプロンプト) | .claude/agents/<name>.md (project), ~/.claude/agents/<name>.md (user) | 同名で優先置換 (CLIフラグ > project > user > Plugin) | 1. --agents CLI 2. .claude/agents/ 3. ~/.claude/agents/ 4. Plugin agents | — (非公開) |
| Cline | なし (名前付きAgent定義の仕組みなし) | — | — | — | — |
| Codebuff | TypeScript (AgentDefinition インターフェース) | .agents/ ディレクトリ | localAgentTemplates が最優先 (getAgentTemplate()) | 1. localAgentTemplates 2. DBキャッシュ 3. DBクエリ | agents/types/agent-definition.ts, packages/agent-runtime/src/templates/agent-registry.ts |
| Codex CLI | TOMLファイル (Agent Role overlay) | codex-rs/core/src/agent/builtins/*.toml, $CODEX_HOME/prompts/*.md | apply_role_to_config() でConfigにTOMLレイヤーマージ | Config上書き | core/src/agent/role.rs, custom_prompts.rs |
| Kilocode | ModeConfig (VSCode globalState or .kilocode/) | VSCode globalState "customModes" / .kilocode/ | 同一slug上書き (getAllModes() でindex上書き) | カスタム > 組み込み。customModePrompts > カスタムモード > 組み込み | packages/types/src/mode.ts, src/shared/modes.ts |
| OpenClaw | YAML/JSON設定ファイル (config.agents.list[]) | 設定ファイル内 | エージェント設定で完全定義 | — | src/agents/agent-scope.ts |
| OpenCode | Markdownファイル (frontmatter + body) | .opencode/agent/ or .opencode/agents/ | Config.Agent スキーマでパース → マージ。agent.disable: true で無効化 | 1. リモート 2. グローバル 3. OPENCODE_CONFIG 4. プロジェクト 5. OPENCODE_CONFIG_CONTENT | packages/opencode/src/config/config.ts (loadAgent()) |
| Roo Code | ModeConfig[] (VSCode拡張状態 or .roomodes) | VSCode customModes / .roomodes | 同一slug上書き | カスタム > 組み込み。customModePrompts > カスタム > 組み込み | packages/types/src/mode.ts, src/shared/modes.ts |
9-2. カスタムエージェントのフロントマター項目
| フィールド | Claude Code | Codebuff | Codex CLI | OpenCode |
|---|---|---|---|---|
| name | ✓ | ✓ | — | ✓ |
| description | ✓ | ✓ | description (YAML) | ✓ |
| tools | ✓ | toolNames | — | — |
| disallowedTools | ✓ | — | — | — |
| model | ✓ | ✓ | ✓ (TOML) | ✓ |
| permissionMode | ✓ | — | — | permission (Ruleset) |
| maxTurns | ✓ | — | — | steps |
| skills | ✓ | spawnableAgents | — | — |
| mcpServers | ✓ | — | — | — |
| hooks | ✓ | — | — | — |
| memory | ✓ (user/project/local) | — | — | — |
| background | ✓ | — | — | — |
| isolation | ✓ (worktree) | — | — | — |
| prompt (system) | — (markdown本文がプロンプト) | systemPrompt | base_instructions | prompt |
| inheritParent | — | inheritParentSystemPrompt | — | — |
| includeHistory | — | includeMessageHistory | fork_context | — |
9-3. カスタムコマンド (Slash Command)
| ツール | 定義パス | 形式 | テンプレート変数 | 実装ファイル |
|---|---|---|---|---|
| Claude Code | .claude/skills/<name>/SKILL.md (user-invocable: true) | YAML frontmatter + Markdown | $ARGUMENTS, $ARGUMENTS[N], $N, ${CLAUDE_SESSION_ID}, !`command` (動的出力) | — (非公開) |
| Cline | .clinerules/workflows/ or ~/Documents/Cline/Workflows/ | Markdownファイル | — | src/core/slash-commands/index.ts |
| Codebuff | — (組み込みのみ: /init, /export, /compact) | SLASH_COMMANDS 配列 + additionalSystemPrompts | — | cli/src/data/slash-commands.ts, system-prompt/prompts.ts |
| Codex CLI | $CODEX_HOME/prompts/*.md | YAML frontmatter (description, argument-hint) + Markdown | — | core/src/custom_prompts.rs |
| Kilocode | .kilocode/ (実験的: runSlashCommand フラグ) | — | — | src/core/prompts/tools/run-slash-command.ts |
| OpenClaw | Skill frontmatterの commands (SkillCommandSpec) | SkillCommandSpec { name, skillName, description, dispatch? } | — | src/agents/skills/types.ts |
| OpenCode | .opencode/command/ or .opencode/commands/ + MCP prompts | Markdown (frontmatter + body) | $1, $2, $ARGUMENTS | packages/opencode/src/command/index.ts |
| Roo Code | .roo/commands/{name}.md | Markdown (frontmatter: description, argument-hint, mode) | — | src/services/command/commands.ts |
9-4. カスタムツール定義
| ツール | 対応 | 定義方式 | ファイル |
|---|---|---|---|
| Claude Code | ✓ (MCP) | MCP サーバー経由 (.mcp.json) | — |
| Cline | ✓ (MCP) | MCPサーバー (McpHub.ts) 経由で動的取得 | src/services/mcp/McpHub.ts |
| Codebuff | ✓ | fileContext.customToolDefinitions + MCP | — |
| Codex CLI | ✓ (MCP) | mcp_connection_manager.rs 経由 | tools/handlers/mcp.rs |
| Kilocode | ✓ (実験) | customToolRegistry (実験フラグ customTools) + MCP | — |
| OpenClaw | ✓ | プラグインツール (src/plugins/tools.ts) | src/plugins/tools.ts |
| OpenCode | ✓ | .opencode/{tool,tools}/*.{js,ts} (@opencode-ai/plugin ToolDefinition形式) + Plugin + MCP | packages/opencode/src/plugin/index.ts |
| Roo Code | ✓ (MCP) | MCPサーバー経由 | src/services/mcp/McpHub.ts |
9-5. カスタムプロンプト使用時の影響範囲まとめ
| ツール | カスタム時に失われるもの | カスタム時に残るもの |
|---|---|---|
| Claude Code | SubAgent: メインClaude Codeシステムプロンプトを受け取らない | CLAUDE.mdはSubAgentにも読み込まれる。ツール定義は指定ツールに応じて含まれる |
| Cline | なし (.clinerules等はUSER_INSTRUCTIONS_SECTIONに追加) | ツール定義・ACT/PLANモード・RULES等の全組み込みセクション |
| Codebuff | カスタム systemPrompt 設定時: Buffyデフォルトプロンプト全体 | instructionsPrompt のサブエージェント仕様は自動追記。Knowledge は {CODEBUFF_KNOWLEDGE_FILES_CONTENTS} をsystemPromptに含める場合のみ |
| Codex CLI | config.base_instructions 設定時: model_info.base_instructions | CollaborationMode instructions, Memory instructions, Session prefix |
| Kilocode | .kilocode/system-prompt-{mode} 存在時: TOOL USE, MCP, CAPABILITIES, MODES, SKILLS, RULES, SYSTEM INFO, OBJECTIVE | roleDefinition + カスタムプロンプト + customInstructions。Nativeプロトコル使用時はtools配列は独立 |
| OpenClaw | なし (ブートストラップファイルは追加方式) | Built-inセクション全て。TOOLS.mdはガイダンスのみ (ツール可視性は制御しない) |
| OpenCode | agent.prompt 設定時: SystemPrompt.provider() 全体 | SystemPrompt.environment(), InstructionPrompt.system(), モード遷移リマインダー, ツール定義 |
| Roo Code | なし (roleDefinition 上書きのみ) | MARKDOWN RULES, TOOL USE, CAPABILITIES, RULES, SYSTEM INFO, OBJECTIVE全セクション + ツール定義 |
10. 系譜・コードベース関係
この章では8ツール間のコードベースの派生関係を示す。 ClineからKilocodeとRoo Codeがフォークしており、共通のアーキテクチャを持つ。 Claude Code(Anthropic公式)とCodex CLI(OpenAI公式)は各社独自の実装である。 Codebuff、OpenClaw、OpenCodeはそれぞれ独立した設計思想を持つ。 フォーク元と派生先の差分を把握することで、各ツールの独自性が明確になる。
Cline (OSS, VSCode拡張)
├── fork → Kilocode 5.7.0
│ 差分: モード6種に拡張、カスタムシステムプロンプト完全差替(.kilocode/system-prompt-{mode})
│ XML/Native 2系統ツール定義、.kilocode/独自ディレクトリ体系
└── fork → Roo Code 3.50.4
差分: Native tool-calling専用化(XML系除去)、.roo/ディレクトリ体系
orchestratorモード追加、reviewモード削除
Claude Code 2.1.59 ← Anthropic公式 (クローズドソース)
特徴: Auto Memory、Plugin、Managed Settings、Worktree隔離、SubAgent永続メモリ
Codex CLI 0.106.0 ← OpenAI公式 (Rust実装)
特徴: 2フェーズメモリパイプライン、ネイティブサンドボックス、Starlark DSL exec policy
Ghost Commit、Shell Snapshot、AgentRole TOML overlay、CSV batch 64並列
Codebuff 0.10.6 ← 独自 (マルチエージェントオーケストレーター)
特徴: 毎ステップcontext-pruner自動実行、エージェント=ツール設計、3層プロンプト
inheritParentSystemPrompt、プロンプトキャッシュ最適化
OpenClaw 2026.2.26 ← 独自 (メッセージング統合型パーソナルアシスタント)
特徴: ベクトル+BM25ハイブリッドメモリ、Discord/WhatsApp等チャネル統合
Cron/Gateway自動化、sessions_spawn隔離セッション、7層ツールポリシー
OpenCode 1.1.36 ← 独自 (マルチプロバイダCLI)
特徴: Pluginシステム(system.transform hook)、プロバイダ別4種プロンプト
Zod + AI SDK統合、Git write-tree Snapshot、Doom Loop検出
付録: 用語集
本ドキュメントで使用される主要な用語を以下に整理する。
| 用語 | 説明 |
|---|---|
| システムプロンプト | LLMに送信される最初の指示文。エージェントの人格、能力、制約を定義する |
| セクション | システムプロンプトを構成する個々のパーツ。ロール定義、ツール説明、ルール等 |
| エントリーポイント | プロンプト生成処理の起点となる関数 |
| パイプライン | セクションを順次組み立てて最終プロンプトを生成する処理の流れ |
| Variant | 接続するLLMモデルに応じてプロンプト内容を切り替える仕組み |
| テンプレート変数 | {{CWD}} や {CODEBUFF_*} のようなプレースホルダ。実行時に実際の値に置換される |
| ルールファイル | CLAUDE.md、.clinerules、AGENTS.md等。プロジェクト固有の指示をエージェントに与えるファイル |
| スコープ | ルールファイルの適用範囲。組織(マネージド) > グローバル(ユーザー) > プロジェクト > ローカルの階層がある |
| ツール定義 | LLMが呼び出せる関数のスキーマ。名前、説明、パラメータ型を含む |
| ツールフィルタリング | モードやコンテキストに応じてLLMに見えるツールを制限する機構 |
| JSON Schema | JSONデータの構造を定義する標準仕様。ツールパラメータの型定義に広く使用される |
| Zod | TypeScript向けのスキーマ検証ライブラリ。JSON Schemaへの変換機能を持つ |
| TypeBox | JSON Schema互換のTypeScript型ビルダー。OpenClawが採用 |
| Mode | エージェントの動作モード。plan(計画)/act(実行)/architect(設計)等 |
| SubAgent | 親エージェントが起動する子エージェント。タスクの並列処理や委譲に使用する |
| Skill | 特定タスク向けの再利用可能なプロンプト+設定のパッケージ。SKILL.mdファイルで定義 |
| Context Compaction | コンテキストウィンドウの溢れを防ぐため、古い会話を要約・圧縮する処理 |
| Checkpoint | ファイル変更のスナップショット。問題発生時にロールバック(巻き戻し)できる |
| Shadow Git | 本来のGitリポジトリとは別に、チェックポイント用に作成される隠しGitリポジトリ |
| Ghost Commit | Codex CLI独自。通常のgit logに表示されない隠しコミットでスナップショットを保存する |
| TodoList | タスクの進捗管理リスト。pending(未着手)/in_progress(進行中)/completed(完了)の3状態 |
| Plan Mode | ファイル変更を禁止し、計画立案のみを行うモード |
| Tool Permission | ツール実行前にユーザー承認を求める仕組み。allow(許可)/ask(確認)/deny(拒否) |
| サンドボックス | コマンド実行を隔離環境で行い、ホストシステムへの影響を制限する機構 |
| Hook | ツール実行の前後に外部スクリプトを呼び出す拡張ポイント |
| MCP (Model Context Protocol) | LLMとツール間の標準プロトコル。外部ツールの動的追加を可能にする |
| 長期記憶 | セッションを跨いで知識を保持する仕組み。ファイルベース、ベクトル検索等の方式がある |
| Auto Memory | Claude Code独自。LLMが自律的に有用情報をMEMORY.mdに書き込む機能 |
| ベクトル検索 | テキストを数値ベクトルに変換し、意味的類似度で検索する方式 |
| BM25 | 全文検索の重み付けアルゴリズム。SQLite FTS5等で使用される |
| MMR (Maximal Marginal Relevance) | 検索結果の多様性を確保するアルゴリズム |
| フォーク | 既存のOSSリポジトリをコピーして独自開発を進めること |
