2. Code Agent 架构深度对比(源码级分析)

April 13, 2026 · View on GitHub

基于 9 个开源项目 + 1 个闭源项目(Claude Code)本地源码的深入分析,对比 AI 编程代理的核心架构设计

通用代理循环架构图

graph TD
    U[用户输入] --> SP[系统提示组装]
    SP --> |"系统提示 + 工具定义 + 上下文"| API[LLM API 调用]
    API --> R{响应类型?}
    R --> |文本| OUT[输出给用户]
    R --> |工具调用| TC[工具执行]
    TC --> |权限检查| PERM{允许?}
    PERM --> |允许| EXEC[执行工具]
    PERM --> |拒绝| DENY[用户确认/拒绝]
    DENY --> |用户允许| EXEC
    DENY --> |用户拒绝| FEEDBACK[反馈给 LLM]
    EXEC --> RESULT[工具结果]
    RESULT --> |追加到上下文| CTX{上下文满?}
    CTX --> |否| API
    CTX --> |是| COMPACT[上下文压缩]
    COMPACT --> API
    R --> |停止| STOP{完成?}
    STOP --> |是| END[结束]
    STOP --> |反射/重试| API

    style U fill:#e1f5fe
    style API fill:#fff3e0
    style EXEC fill:#e8f5e9
    style COMPACT fill:#fce4ec
    style END fill:#f3e5f5

各工具架构差异

graph LR
    subgraph "Claude Code (Rust)"
        CC_IN[输入] --> CC_SYS["8模块系统提示<br/>bo1/mo1/Uo1/xo1"]
        CC_SYS --> CC_API["Anthropic API<br/>cache_control: ephemeral"]
        CC_API --> CC_SEC["安全监控<br/>28 BLOCK 规则<br/>双阶段分类器"]
        CC_SEC --> CC_TOOL["20+ 工具<br/>+ MCP + Skill"]
    end

    subgraph "Aider (Python)"
        AI_IN[输入] --> AI_MAP["RepoMap<br/>PageRank + Tree-sitter"]
        AI_MAP --> AI_API["LiteLLM<br/>100+ 模型"]
        AI_API --> AI_EDIT["14种编辑格式<br/>diff/whole/patch/udiff"]
        AI_EDIT --> AI_REF["反射循环<br/>lint→test→retry×3"]
    end

    subgraph "Codex CLI (Rust)"
        CX_IN[输入] --> CX_API["OpenAI API<br/>GPT-5 系列"]
        CX_API --> CX_GUARD["Guardian<br/>审批系统"]
        CX_GUARD --> CX_SAND["3平台沙箱<br/>Seatbelt/Bwrap/WinToken"]
        CX_SAND --> CX_TOOL["apply_patch<br/>+ Shell"]
    end

上下文管理对比

graph TD
    subgraph "压缩触发阈值"
        G["Gemini CLI<br/>50% ← 最早触发"] --> K["Kimi CLI<br/>80%/85%"]
        K --> C["Claude Code<br/>~95% ← 最晚触发"]
    end

    subgraph "压缩算法复杂度"
        A_SIMPLE["Aider<br/>递归分割×3<br/>后台线程"] --> K_STRUCT["Kimi CLI<br/>结构化XML<br/>自定义焦点"]
        K_STRUCT --> C_THREE["Claude Code<br/>三层压缩<br/>微+自动+手动"]
        C_THREE --> G_FOUR["Gemini CLI<br/>四阶段+验证<br/>最复杂"]
    end

分析范围

项目语言代码量本地路径
AiderPython~30k 行/root/git/aider
GooseRust~55k 行/root/git/goose
Gemini CLITypeScript~191k 行/root/git/gemini-cli
Qwen CodeTypeScript~191k 行(分叉)/root/git/qwen-code
OpenCodeTypeScript(Bun)~50k 行/root/git/opencode
ClineTypeScript~40k 行/root/git/cline
SWE-agentPython~20k 行/root/git/swe-agent
OpenHandsPython~60k 行/root/git/openhands
Kimi CLIPython~20k 行/root/git/kimi-cli
Claude CodeRust专有/root/git/claude-code

1. 代理循环模式

所有工具的核心都是一个代理循环,但实现方式差异显著:

工具调用循环(主流)

消息 → LLM → function calling → 工具执行 → 结果 → 重复

使用者:Claude Code、Gemini CLI、Qwen Code、Codex CLI、OpenCode、Cline、Goose、Copilot CLI、Kimi CLI

  • Claude Code 使用 Anthropic tool_use API,20+ 内置工具
  • Gemini CLI/Qwen Code 使用 @google/genai function calling,CoreToolScheduler(1790 行)调度工具
  • Codex CLI 使用 OpenAI function calling + apply_patch
  • OpenCode 使用 Vercel AI SDK v5 统一接口,18 工具(14 无条件 + 4 有条件)
  • Cline 在 VS Code 内执行,24+ 工具,每步自动 Git Checkpoint
  • Goose 通过 MCP 协议统一工具接口(所有工具走 MCP)
  • Copilot CLI 使用 YAML 定义的代理,tool_choice 列出现在模型配置矩阵
  • Kimi CLI "工具调用解析" + ToolCall/ToolResult Wire 事件,多提供商

注 1:许多交互式 coding agent 都可以理解为 ReAct-like 循环(reasoning → acting → observation → repeat)。差异主要在于动作表达/编排机制:function calling、文本解析、编辑格式、事件流等。

注 2:Cursor、Warp、Continue、Qoder CLI 等闭源/IDE 嵌入式 Agent 具有工具系统能力(多支持 MCP),但本仓库现有证据不足以确认其使用原生 API function calling,暂不列入。Oh My OpenAgent 基于 OpenCode Harness 层,继承工具调用架构但不直接调用 LLM API。

混合 ReAct 循环

思考 → 动作 → 解析 → 执行 → 观察 → 重复

使用者:SWE-agent

  • SWE-agent 的 DefaultAgent.step() 支持多种解析器,FunctionCallingParser(原生 function calling,默认)和纯文本 ThoughtActionParserActionOnlyParser
  • 文本动作解析是兼容路径,适用于不支持 function calling 的模型,也是其鲜明特征之一
  • 与"工具调用"流派的区别:SWE-agent 同时支持两种动作表达方式,而非仅依赖原生 function calling

编辑-提交循环

发送 → 解析编辑 → 应用修改 → Git 提交 → Lint/测试 → 反思

使用者:Aider

  • 独特的编辑格式系统(14 种),模型输出直接包含代码修改
  • 反思循环:lint/测试失败自动重试(最多 3 次)
  • 每次修改自动 Git 提交,天然版本控制

事件驱动循环

Action → EventStream → Runtime → Observation → 订阅者通知

使用者:OpenHands

  • 最复杂的架构:EventStream 发布/订阅总线
  • Action 和 Observation 完全解耦
  • 支持多代理委托和异步执行

2. LLM 接入策略

策略对比

策略实现方式支持提供商使用者
LiteLLM 统一Python 包装 100+ 模型100+Aider, SWE-agent, OpenHands
Vercel AI SDKTS SDK 统一 streamText() + models.dev 动态加载100+OpenCode(TUI 层)
独立 Generator每个提供商独立实现1(Gemini CLI)/ 6+(Qwen Code)Gemini CLI, Qwen Code
Provider traitRust trait 抽象58+Goose
Handler 工厂每个提供商一个 Handler48+Cline
单提供商直连特定 API1Claude Code

模型选择与路由

Agent模型路由弱模型回退
Aidermodel-settings.yml 预配置✓(历史摘要用便宜模型)手动切换
Gemini CLIModelRouterService(Fallback/Override/Classifier)✓ 自动回退链
Goose模型注册表✓(轻量操作)手动切换
SWE-agent配置驱动 + 多 Key 负载均衡✓ LiteLLM fallbacks
其他单模型或手动选择

3. 工具系统设计

工具数量与类型

Agent内置工具数文件操作Bash搜索Web浏览器MCP
Aider~15 命令
GooseMCP 驱动✓(截图)✓ 原生
Gemini CLI23(17 核心 + 6 任务追踪)
Qwen Code16
OpenCode18(14 无条件 + 4 有条件)
Cline24+✓(Headless)
SWE-agentBundle 驱动
OpenHands8 核心✓(Playwright)

工具定义模式

模式定义方式校验使用者
声明式类TypeScript 抽象类Zod / FunctionDeclarationGemini CLI, Qwen Code, OpenCode
Rust traitrmcp::ToolJSON SchemaGoose
Python dataclass@dataclass ActionPydanticOpenHands, SWE-agent
YAML Bundle配置文件定义参数类型校验SWE-agent
无正式注册命令行解析configargparseAider

编辑策略

Agent编辑方式特色
Aider14 种编辑格式(whole/diff/udiff/patch/architect...)按模型能力自动选择
Claude Code原生编辑工具差异预览
OpenCodeedit + apply_patch(GPT 专用)按模型切换
Clinereplace_in_file (search/replace) + write_to_fileCheckpoint 回滚
Gemini CLIedit 工具(声明式)策略审批
SWE-agentstr_replace_editor (Bundle)支持 undo_edit
OpenHandsStrReplaceEditorTool + LLMBasedFileEditTool双编辑模式

4. 权限与安全

安全模型对比

Agent权限模型策略格式特殊能力
Claude Code精细工具权限配置文件沙箱网络控制
OpenCode分层规则 (allow/deny/ask)JSONTree-sitter bash AST 分析
Gemini CLIPolicyEngineTOML外挂安全检查器进程
Qwen Codedeny > ask > allow > defaultJSONHook 拦截权限请求
Cline命令权限控制器正则 + 设置重定向/子 shell 检测
Goose四模式 (Auto/Approve/Smart/Chat)YAML环境变量白名单(31 项)
SWE-agentDocker 沙箱隔离配置命令超时 + 成本上限
OpenHands三层安全分析配置 + 外部LLM 风险 + Invariant + GraySwan
Aider信任模式用户确认 shell 命令

创新安全特性

特性工具说明
Tree-sitter Bash 分析OpenCodeAST 级解析命令,自动提取目录和操作
TOML 策略引擎Gemini CLI通配符 + 正则 + 四种审批模式
Doom Loop 保护OpenCode3 次连续拒绝自动中断
Loop 检测Qwen CodeLevenshtein 距离检测重复调用
三层安全分析OpenHandsLLM 风险评估 + 策略检查 + 外部监控
环境变量白名单Goose31 个危险变量禁止注入
Git CheckpointCline每步操作 Git 快照,一键回滚
重定向检测Cline检测 >, >>,

5. 上下文管理

上下文窗口策略

Agent最大上下文压缩策略特殊优化
Claude Code100 万 token自动压缩最大上下文窗口
Aider按模型ChatChunks 分块 + 弱模型摘要Prompt 缓存保活 ping
Gemini CLI~100 万ChatCompressionService思维链不回传
Qwen Code~100 万ChatCompressionService(继承)Token 阈值触发
OpenCode按模型会话压缩工具输出 32K 截断
Cline按模型Hook 压缩扩展思维预算控制
SWE-agent按模型HistoryProcessor(LastN/CacheControl)成本上限 $3/实例
OpenHands按模型递归对话压缩Condenser 深度可配置

Aider 的 RepoMap——最独特的上下文方案

Tree-sitter AST 解析(30+ 语言)
  → 提取函数/类定义标签
  → SQLite 磁盘缓存
  → 按提及标识符排名
  → 树形结构输出
  → Token 预算截断

其他工具依赖 LLM 工具调用来探索代码库,Aider 主动构建代码地图,大幅减少 LLM 需要的探索轮次。


6. 存储架构

Agent存储方式查询能力持久化
OpenCodeSQLite(Drizzle ORM)SQL 查询完整关系存储
OpenHandsEventStream + FileStore (PostgreSQL V1)事件过滤 + SQL事件持久化
Aiderdiskcache (SQLite) + 内存缓存查询标签缓存
Gemini CLI.gemini/sessions/ 文件文件遍历JSON 会话
Qwen Code.qwen/tmp/ JSONL 文件分页读取JSONL 追加
Cline~/.cline/data/ 文件文件读取JSON
SWE-agenttrajectory JSON无查询轨迹文件
GooseJSON 文件 + keyring文件读取会话 + 密钥链
Hermes AgentSQLite + FTS5 虚拟表hermes_state.pyFTS5 BM25 全文搜索 + LLM 摘要Markdown(MEMORY.md/USER.md/SKILL.md)+ SQLite(会话 + 索引)

7. 扩展/插件生态

MCP 支持程度

AgentMCP 客户端MCP 服务器传输方式
Goose✓(原生)✓(内置)Stdio, HTTP, Builtin
Hermes Agent✓(tools/mcp_tool.py✓(mcp_serve.py,9 OpenClaw 工具 + channels_list)Stdio, HTTP/StreamableHTTP
Claude CodeStdio, SSE, Streamable-HTTP
OpenCodeHTTP, SSE, Stdio, WebSocket
Gemini CLIStdio, SSE, HTTP
Qwen CodeStdio, SSE, HTTP
ClineStdio, SSE, HTTP
OpenHandsFastMCP
Kimi CLIStdio, HTTP
Aider不支持
SWE-agent不支持

扩展系统

Agent扩展类型加载方式
OpenCodenpm 插件 + Hook配置文件引用
Qwen Code扩展 + Claude/Gemini 格式转换Git clone / Release
ClineSkills + Workflows + HookMarkdown 文件
GooseMCP 扩展 + RecipeYAML 配置
Gemini CLISkills + MCPMarkdown + 配置
OpenHands插件 + MicroagentPython + Markdown

8. TUI/UI 框架

Agent框架特点
Aiderprompt_toolkit + RichPython 终端,最轻量
Hermes Agentprompt_toolkit + RichPython 终端 + 14 个消息渠道 Web/Bot UI
GooseRust CLI + Electron 桌面Rust 原生性能
Gemini CLIInk 6 + React 19终端 React 组件
Qwen CodeInk 6 + React 19(继承)+ Vim 模式
OpenCodeOpenTUI + Solid.js信号驱动响应式
ClineVS Code WebView + ReactIDE 原生
SWE-agentTextual + RichPython TUI
OpenHandsFastAPI + ReactWeb UI

9. 多代理设计

Agent代理类型并行能力委托
OpenCodebuild, plan, general, explore + 自定义✓(子代理)@ 引用
Qwen Code主代理 + 子代理 + Arena✓(Tmux/iTerm2)agent 工具
OpenHandsCodeAct, Browsing, Visual, ReadOnlyAgentDelegate
Cline主代理 + 子代理Skill 调用
Claude Code主代理 + 子代理✓(worktree)Agent 工具
AiderArchitect 两阶段内部委托
SWE-agentDefaultAgent + RetryAgent审查循环
Goose单代理 + 调度Recipe
Hermes Agent主代理 + 后台 Review 子代理(memory/skill 学习闭环)✓(线程异步)delegate_tool + mixture_of_agents_tool + 后台 spawn

10. 技术栈总览

Agent语言运行时包管理构建
AiderPythonCPythonpip/pipxsetuptools
SWE-agentPythonCPythonpipsetuptools
OpenHandsPythonCPythonPoetryPoetry
GooseRust原生CargoCargo
Claude CodeRust原生npm(发布)Cargo
Gemini CLITypeScriptNode.jsnpmesbuild
Qwen CodeTypeScriptNode.jsnpmesbuild
OpenCodeTypeScriptBunBunTurbo
ClineTypeScriptNode.jsnpmesbuild
Hermes AgentPython(369K 行,822 文件)CPython 3.11+pip / setuptoolssetuptools

关键洞察

1. 四大架构流派

  • 编辑优先(Aider):LLM 直接输出代码修改,需文本解析,工具是辅助
  • 工具调用(Claude Code、Gemini CLI、Qwen Code、Codex CLI、OpenCode、Cline、Goose、Copilot CLI、Kimi CLI):LLM 通过结构化 function calling 操作环境,是主流模式
  • 混合 ReAct(SWE-agent、mini-swe-agent):兼容 function calling(默认)与文本动作解析,文本解析是其鲜明特征
  • 事件驱动(OpenHands):完全解耦的事件总线,最灵活但最复杂

关键认知:许多交互式 coding agent 都可以理解为 ReAct-like 循环(reasoning → acting → observation → repeat)。本文为了可操作地分类,主要按动作表达/编排机制区分:function calling、文本解析、编辑格式、事件流等。ReAct 原论文的核心是 reasoning + acting + observation 的交错交互模式,不强制要求动作用纯文本表达。

未列入的 Agent:Cursor、Warp、Continue、Qoder CLI 等闭源/IDE 嵌入式 Agent 暂因证据不足未列入「工具调用」流派。Oh My OpenAgent 基于 OpenCode Harness 层,继承工具调用架构但不直接调用 LLM API,视为「工具调用」的间接成员。

2. Gemini CLI 是事实上的"开源 Claude Code 模板"

Gemini CLI 的架构被 Qwen Code 直接分叉,其设计模式(声明式工具 + 事件调度器 + 策略引擎)影响了多个后续项目。

3. Rust vs TypeScript vs Python

  • Rust(Goose, Claude Code):性能最佳,内存最低,但插件生态门槛高
  • TypeScript(Gemini CLI, Qwen Code, Cline)/ TypeScript(Bun)(OpenCode):生态最丰富,Ink/React 终端 UI 成熟
  • Python(Aider, SWE-agent, OpenHands):LiteLLM 生态强大,学术研究首选

4. 安全是差异化关键

  • 权限系统从"无"(Aider 信任模式)到"三层分析"(OpenHands)差异巨大
  • 创新方向:Tree-sitter 命令分析(OpenCode)、TOML 策略引擎(Gemini CLI)、环境变量白名单(Goose)

5. MCP 正在成为标准

8/10 个工具支持 MCP(仅 Aider 和 SWE-agent 不支持),Goose 甚至将所有工具都通过 MCP 提供。未来 MCP 将是代理工具扩展的统一协议。Hermes Agent 实现 MCP 双向集成:既是 MCP Client(连接外部 server)也是 MCP Server(暴露跨平台对话为 9 个 OpenClaw 工具 + channels_list),让 Claude Code / Cursor / Codex 等可以通过 MCP 操控 Hermes 的消息渠道。

6. 闭环学习系统:新的差异化方向

Hermes Agent 引入了原生的闭环学习系统(Closed Learning Loop),包含 4 个子系统:

  1. 冻结快照 Memory(保护 prompt cache)
  2. 自主 Skill 创建 + patch 自修补
  3. SQLite FTS5 跨会话搜索 + Gemini Flash 摘要
  4. 双计数器 Nudge 触发后台 review 子代理

这是 19 款 Code Agent 中唯一完整实现该范式的产品。Claude Code Auto-Memory 和 Qwen Code PR #3087(开发中)在部分功能上有对标。详见 闭环学习系统深度对比


分析基于本地源码仓库,截至 2026 年 3 月。


附录 A:源码级精确参数(GitHub API 验证)

以下数据全部通过 gh api 直接从各项目 GitHub 仓库提取,附带源码位置。

A.1 Aider — 编辑格式(14 种)

编辑格式名称源码文件说明
diffeditblock_coder.py搜索/替换代码块(默认)
diff-fencededitblock_fenced_coder.py围栏搜索/替换块
wholewholefile_coder.py输出整个文件
udiffudiff_coder.py统一 diff 格式
udiff-simpleudiff_simple.py简化统一 diff
patchpatch_coder.pyGit patch 格式
architectarchitect_coder.py架构师→编辑器两阶段
askask_coder.py仅问答,不编辑
contextcontext_coder.py上下文选择
helphelp_coder.py帮助系统
editor-diffeditor_editblock_coder.py编辑器模式搜索/替换
editor-wholeeditor_whole_coder.py编辑器模式整文件
editor-diff-fencededitor_diff_fenced_coder.py编辑器模式围栏 diff
(函数调用)wholefile_func_coder.py, editblock_func_coder.py, single_wholefile_func_coder.py基于 function calling 的变体

A.2 Aider — 代理循环与 API 参数

循环结构 (base_coder.py):

run() → run_one() → while message: send_message() → 检查 reflected_message → 重复
参数源码位置
max_reflections3base_coder.py:101 — lint/测试失败后自动反思次数上限
temperature0(默认)models.py:988use_temperature=True 时默认 0
use_temperatureFalse 用于推理模型models.py — DeepSeek R1、o1/o3/o4、GPT-5 关闭温度
request_timeout600 秒models.py — API 请求超时
RETRY_TIMEOUT60 秒models.py — 重试退避上限(初始 0.125s,指数增长)
streamingTrue(默认)models.py — 默认流式输出
LLM 调用方式litellm.completion(**kwargs)models.py:1020 — 通过 LiteLLM 统一调用

重试策略: 指数退避(0.125s → 0.25s → 0.5s → ... → 最大 60s),仅重试 LiteLLM 标记为可重试的错误。

A.3 Gemini CLI — 代理循环与 API 参数

循环结构 (client.ts):

generateContent() → processTurn() → handleToolCalls() → 重复(最多 MAX_TURNS 轮)
参数源码位置
MAX_TURNS100client.ts:81 — 单次对话最大轮次
DEFAULT_TOKEN_LIMIT1,048,576 (1M)tokenLimits.ts:20 — 所有 Gemini 模型
DEFAULT_MAX_ATTEMPTS(重试)10retry.ts:20 — API 调用最大重试次数
initialDelayMs(重试)5000retry.ts:44 — 重试初始延迟 5 秒
maxDelayMs(重试)30000retry.ts:45 — 重试最大延迟 30 秒
重试条件429 + 5xxretry.ts:150 — 仅重试速率限制和服务器错误

生成配置 (defaultModelConfigs.ts):

配置别名temperaturetopPtopKthinkingConfig
base01
chat-base10.9564includeThoughts: true
chat-base-2.5继承 chat-base继承继承thinkingBudget: DEFAULT_THINKING_MODE
chat-base-3继承 chat-base继承继承thinkingLevel: HIGH
classifier继承 base (0)继承 (1)thinkingBudget: 512, maxOutputTokens: 1024
prompt-completion0.3继承thinkingBudget: 0, maxOutputTokens: 16000
fast-ack-helper0.2继承thinkingBudget: 0, maxOutputTokens: 120

A.4 Kimi CLI — 代理循环与 API 参数

循环结构 (kimisoul.py):

run() → while True: step_no++ → 检查 max_steps → auto_compact → _step() → 检查 stop_reason
参数源码位置
max_steps_per_turn100config.py:71-72 — 单轮最大步数
max_retries_per_step3config.py:77 — 单步最大重试次数
max_ralph_iterations0(默认),-1 无限config.py:79 — Ralph 模式额外迭代
reserved_context_size50,000 tokensconfig.py:81 — LLM 响应预留空间
compaction_trigger_ratio0.85 (85%)config.py:85 — 上下文使用率触发压缩阈值
default_max_tokens50,000(Anthropic provider)llm.py:171
重试策略tenacity 指数抖动退避kimisoul.py:687-691initial=0.3, max=5, jitter=0.5
环境变量覆盖KIMI_MODEL_TEMPERATURE, KIMI_MODEL_TOP_P, KIMI_MODEL_MAX_TOKENS, KIMI_MODEL_MAX_CONTEXT_SIZEllm.py:139-144, 75-77

上下文压缩: 双触发条件 — context_tokens >= max_context_size * 0.85 context_tokens + 50000 >= max_context_size。压缩时用 LLM 生成摘要,保留最近消息,字符级 token 估算(~4 字符/token)。

A.5 Goose — 代理循环与 API 参数

循环结构 (agent.rs):

reply() → loop { provider.complete() → handle tool_calls → execute → append results → 重复 }
参数源码位置
temperatureNone(默认),可通过 GOOSE_TEMPERATURE 环境变量设置model.rs:157-158
max_tokensNone(默认),可通过 GOOSE_MAX_TOKENS 设置model.rs:178-179
GOOSE_AUTO_COMPACT_THRESHOLD0.8 (80%)环境变量(官方文档)— 上下文压缩触发阈值
DEFAULT_RETRY_TIMEOUT_SECONDS300(5 分钟)types.rs:16 — Recipe 重试超时
DEFAULT_ON_FAILURE_TIMEOUT_SECONDS600(10 分钟)types.rs:19 — 失败后操作超时
RetryConfig.max_retries用户配置,必须 > 0types.rs:25 — Recipe 执行重试上限
工具输出批量摘要10 个工具调用/批次context_mgmt/mod.rs:21TOOLCALL_SUMMARIZATION_BATCH_SIZE

ModelConfig 结构 (model.rs:48):

pub struct ModelConfig {
    pub model_name: String,
    pub context_limit: Option<usize>,
    pub temperature: Option<f32>,
    pub max_tokens: Option<i32>,
    pub toolshim: bool,           // 为不支持工具调用的模型启用 shim
    pub toolshim_model: Option<String>,
    pub request_params: Option<HashMap<String, Value>>,
    pub reasoning: Option<bool>,
}

A.6 跨项目参数对比总览

维度AiderGemini CLIKimi CLIGoose
循环上限3 次反思100 轮100 步/轮无固定上限
默认温度00(base)/ 1(chat)环境变量控制环境变量控制
重试次数指数退避到 60s10 次3 次/步用户配置
重试延迟0.125s → 60s5s → 30s0.3s → 5s(+抖动)300s 超时
压缩阈值ChatChunks 分块50% 容量85% 上下文80% 上下文
预留空间50K tokens
LLM 调用LiteLLM@google/genai SDKkosong (自研) + tenacityProvider trait
流式输出默认开启默认流式流式Provider 决定

代理循环工程洞察

Codex CLI 代理循环内部(来源:OpenAI Engineering Blog,2026-01-24)

"The agent loop is the core logic in Codex CLI that is responsible for orchestrating the interaction between the user, the model, and the tools the model invokes."

二次方成本问题:每次工具调用迭代都追加到 prompt,导致"A single turn can involve many iterations between model inference and tool execution",发送到 Responses API 的 JSON 量呈二次方增长。

解决方案——Prompt 缓存使采样变为线性:通过保持请求间的精确前缀匹配实现缓存命中,"With cache hits, sampling becomes linear rather than quadratic."

无状态架构(隐私优先):Codex CLI 故意不使用 previous_response_id,"every request is stateless, which is essential for ZDR customers who have opted out of data storage."

三类工具的信任边界

工具来源沙箱信任级别
Codex 内置工具OS 级沙箱最高
API 提供的工具无沙箱中等
MCP 服务器工具无沙箱,需自行保障最低

"Other tools from MCP servers are not sandboxed by Codex and must enforce their own guardrails."

Agent 反馈循环设计原则(来源:Claude Agent SDK,2025-09-29)

"The key design principle behind Claude Code is that Claude needs the same tools that programmers use every day."

"Agents often operate in a specific feedback loop: gather context -> take action -> verify work -> repeat."

三层验证模式

类型示例
规则反馈确定性代码 lint、类型检查、测试
视觉反馈半确定性截图/渲染比较
LLM-as-Judge概率性另一个模型评估输出质量

Agent 协议全景(来源:Google Developers Blog,2026-03-18)

6 大标准化协议构成分层架构:

协议解决的问题
MCP数据层Agent ↔ 系统/数据库
A2AAgent 层Agent ↔ Agent 互操作
UCP商业层标准化交易
AP2授权层支付护栏
A2UIUI 层18 个组件原语的声明式 JSON
AG-UI流式层Agent → 前端的标准化 SSE 事件流

A2A 是 MCP 的补充而非替代——"MCP provides helpful tools and context to agents; A2A lets agents talk to each other as opaque peers."

Harness Engineering:代理循环之上的环境设计(来源:OpenAI Blog,2026-02-11)

代理循环是 Agent 的内核,而 Harness 是包裹内核的外壳——决定了 Agent 在什么约束下、使用什么文档、通过什么反馈循环来工作。

"Humans steer. Agents execute."

"Give Codex a map, not a 1,000-page instruction manual."——AGENTS.md 作为导航地图指向 docs/ 结构化文档,而非把所有信息塞进一个文件。

Harness vs 代理循环的关系

Harness(环境设计)
  ├── 文档系统(AGENTS.md → docs/ 结构化文档)
  ├── 架构约束(分层依赖规则、linter 检查)
  ├── 反馈循环(测试失败 → Agent 自修复)
  └── 熵管理(定期清理 Agent)

      └── 代理循环(Agent 内核)
            ├── 系统提示组装
            ├── LLM API 调用
            ├── 工具执行 + 权限检查
            └── 上下文压缩

关键实证:LangChain coding agent 仅修改 Harness(不改模型),Terminal Bench 2.0 分数从 52.8% 提升到 66.5%——表明 Harness 优化可以在不更换模型的情况下带来显著性能提升。详见构建自己的 AI 编程 Agent中的「Harness Engineering」章节。

实践案例Oh My OpenAgent45k Stars)在 OpenCode 之上构建了 710 个 Discipline Agent 编排 + 分类模型路由 + Hash-Anchored Edit,是目前最成功的开源 Harness 层实践。