本文由 AI Insight 研究团队 基于三个开源仓库的源码阅读与交叉验证撰写。所有代码片段均标注 GitHub 链接(共 12 篇信源),但开源项目迭代很快——如果你读到时某段代码已经变了,欢迎来 GitHub 指正。
我翻了三个 AI Coding 工具的源码
发现了这些反直觉的设计
AI Insight 研究团队
2026 年 2 月 15 日
TL;DR 速览
· 三种 Agent Loop:Claude Code 用自由循环 + 扩展思考,Gemini CLI 靠 Gemini API 原生函数调用(隐式 ReAct),OpenCode 搞 Plan/Build 双 Agent 分工——同一个 while(tool_call) 循环,三家写出了完全不同的味道[1][2][3]
· OpenCode 独有的 LSP 反馈:改完代码自动跑语言服务器诊断,语法错误直接喂回给模型修——其他两家改完代码全凭猜[3][5]
· 安全哲学大分裂:Claude Code 依赖 Hooks 事件拦截 + 权限模式[1],Gemini CLI 搞 TOML 策略引擎 + Docker/Seatbelt 沙盒[2],OpenCode 用 Plan Agent 只读 + Build Agent 可写做架构级隔离[3]
· 如果你要自己造一个:学 Claude Code 的 Hook 系统做扩展,学 OpenCode 的 LSP 做代码质量闭环,学 Gemini CLI 的工具注册表做插件发现——三个仓库各取一瓢
一、为什么要翻源码?
你每天用 Claude Code、Gemini CLI 或 OpenCode 写代码,它们帮你读文件、跑命令、改 bug。但你有没有好奇过——当你按下回车的那一刻,背后到底发生了什么?
市面上已经有足够多的「15 个 AI 编程工具横评」[7]了。它们告诉你「用什么」,却不告诉你「为什么这样造的」。
我们做了一件大部分人好奇但没时间做的事:把三个仓库并排打开,问同一个工程问题,看三家怎么做。结果发现,这三个看起来功能差不多的工具,底层的设计哲学相差十万八千里。
~67K
Claude Code Stars
~95K
Gemini CLI Stars
~105K
OpenCode Stars
先来一张身份证:
| 厂商 | |||
| 语言 | |||
| 运行时 | |||
| 架构 | |||
| UI 框架 | |||
| 模型支持 | |||
| 许可证 |
GitHub Star 数据截至 2026 年 2 月 15 日[1][2][3]
关于"开源"
Claude Code 的代码在 GitHub 上公开,但许可证写着「All rights reserved」[1]——它不是开源软件。Gemini CLI (Apache 2.0) 和 OpenCode (MIT) 才是真正的开源。这个区别在你想 fork 修改时很重要。
二、Agent Loop:同一个 while 循环,三种写法
Agent Loop 是这类工具的心脏。说白了就是一个循环:用户说话 → 模型想 → 调工具 → 看结果 → 再想 → 再调 → 直到完事。但三家在这个循环上的设计差异巨大。
通用 Agent Loop 流程
🔓 Claude Code:自由循环
· 经典 while(tool_call) → execute → feed → repeat[1]
· 维护一条扁平消息历史,不搞多线程对话
· 模型不返回 tool_call 时循环自然终止
· 通过 Extended Thinking 做深度推理
· 取舍:简单可调试,但 token 消耗不可控
🔄 Gemini CLI:隐式 ReAct
· 不显式编码 ReAct 状态机——靠 Gemini API 的原生函数调用[2]
· contentGenerator 驱动,turn.ts 管理单轮交互
· coreToolScheduler 做工具执行调度
· Google Search Grounding 作为增强推理手段[2]
· 取舍:与 Gemini API 深度绑定,简化了循环但丧失了灵活性
👯 OpenCode:双 Agent 分工
· Plan Agent 只读(分析/探索),Build Agent 可写(开发/执行)[3]
· AI SDK 的 streamText 驱动,Session.prompt 编排核心循环[5]
· 按 Tab 键切换 Agent,或用 @ 提及调用
· LSP 诊断注入上下文,形成修改→检查→修复闭环[3]
· 取舍:结构化安全,但切换有延迟
这里有个反直觉的点:Gemini CLI 的 Agent Loop 在代码里几乎"看不见"。Claude Code 和 OpenCode 都有显式的循环逻辑,但 Gemini CLI 把循环委托给了 API 层——generalist-agent.ts 里看到的更像是一份配置清单(20 轮上限、10 分钟超时),而非一个循环体[2]。
"The LLM is the brain and the tools are the arms and feet."
— Moncef Abboud, OpenCode 源码深度解析[5]
三、安全系统:你信不信你的 AI 不会 rm -rf /
让 AI 在你电脑上执行任意代码——这件事本质上是危险的。三家在「让 Agent 干活」和「不让 Agent 搞事」之间,做出了截然不同的选择。
Claude Code 的 Hook 系统:最灵活,也最考验使用者
Claude Code 提供了 11 个 Hook 事件——PreToolUse、PostToolUse、Stop、SessionStart、SubagentStart 等[1][6]。你可以在工具调用前后注入自定义逻辑:
Claude Code Hook 示例 — 拦截危险文件操作
// settings.json 中的 Hook 配置 { "hooks": { "PreToolUse": [{ "matcher": "Edit|Write", "hooks": [logFileChange] }] } } // Hook 可以:允许 / 拒绝 / 修改输入 / 注入系统消息这套系统的厉害之处在于:Hook 的优先级高于权限规则。也就是说,你的自定义逻辑在系统权限检查之前就执行了。灵活,但代价是你得自己写那些安全边界。
Gemini CLI 的六阶段工具执行流水线
Gemini CLI 走了另一条路——用策略引擎替代手动 Hook[2]。工具执行要走完六个阶段:
ToolRegistry→验证
参数检查→策略
TOML 规则→确认
用户审批→执行
AbortSignal→输出
流式 UI
策略优先级从高到低:管理员远程覆盖 > TOML 策略文件 > ApprovalMode > 工具允许/拒绝列表。对企业场景来说,这种中央管控式的安全比 Claude Code 的"自己写 Hook"友好得多。
OpenCode 的妙招:让 Plan Agent 当"只读实习生"
OpenCode 的安全思路最简洁也最优雅[3]:
· Plan Agent:只能读代码、跑 grep、看 LSP 诊断。想写文件?没门。
· Build Agent:全部工具开放——读写文件、执行命令、调用 SubAgent
· 用户通过 Tab 键 在两个 Agent 间切换
这等于在架构层面实现了"先看后做"的工作流。不需要写规则、不需要配策略——角色本身就是权限边界。
三种安全哲学的取舍
Claude Code 的 Hook 系统给高级用户最大灵活度,但学习曲线最陡。Gemini CLI 的策略引擎对企业 IT 管理员最友好,但个人开发者觉得繁琐。OpenCode 的 Plan/Build 分离最直觉,但你用的时候得记得在对的 Agent 下操作。没有赢家——只有适不适合你的场景。
四、工具系统:AI 的手和脚
Agent 能干什么,完全取决于它能调用什么工具。三家在工具系统设计上的差异,直接决定了你拿这些工具能做多大的事。
| 内置工具 | |||
| MCP 支持 | |||
| 工具发现 | |||
| 独有能力 |
OpenCode 的杀手锏:LSP 当工具用
这是三个仓库里我觉得最精彩的设计[3][5]。OpenCode 内置了 36 种语言服务器(TypeScript、Python、Go、Rust、Ruby、Java、Kotlin、C/C++、C#、Swift、Dart、Elixir、Haskell 等),当 Agent 修改了一段代码之后:
1. LSP 服务器立刻分析变更文件
2. 诊断结果(语法错误、类型错误)自动注入到 Agent 的上下文
3. Agent 看到错误后自动修复
用作者原话说:「OpenCode 优雅地启动 LSP 服务器和客户端,通过全局 Event Bus 处理通信」[5]。
Claude Code 和 Gemini CLI 改完代码后呢?它们不知道自己改出了语法错误——直到你手动跑一遍 lint 或者编译失败。这个差距在大型重构任务中特别明显。
Gemini CLI 的 Google Search Grounding:用搜索增强推理
Gemini CLI 有一个独家武器——web-search.ts 里实现了 Google Search Grounding[2]。不是简单的"搜索然后返回链接",而是:
Gemini CLI — Google Search Grounding 实现逻辑
// packages/core/src/tools/web-search.ts // 1. 调 Gemini API(model: 'web-search') // 2. 提取 groundingMetadata → groundingChunks(网页来源) // 3. 处理 groundingSupports(引用标记) // 4. 用 TextEncoder/TextDecoder 处理 UTF-8 字节位置 // 5. 返回:llmContent + sources + 带内联引用的展示文本搜索结果带着精确的引用位置回来,模型的回答里自动标注了来源。这个做法比 Claude Code 的 WebSearch 工具更深度——后者更像是"搜索然后总结",没有 Grounding 的精度。
MCP:三家唯一的共识
Model Context Protocol (MCP) 是这个赛道里唯一达成共识的标准[8]——三个工具全部支持。Anthropic 2024 年 11 月推出,OpenAI 2025 年 3 月采纳,Google 跟进。不管你用哪个工具,同一套 MCP 服务器都能用。
五、上下文管理:200K vs 1M,谁更聪明?
你的代码库可能有几十万行,但 LLM 的上下文窗口是有限的。三家在"有限窗口装无限代码"这件事上,策略完全不同。
Claude Code:精打细算
· 200K token 窗口[1]
· 自动压缩 (Compaction):75-92% 阈值触发
· /compact 手动触发
· 关键信息存 CLAUDE.md 跨会话持久化
· Opus 4.6 支持 1M Beta
Gemini CLI:大力出奇迹
· 1M token 窗口[2]
· 几乎不需要压缩——直接塞
· 能一次性装下整个中型代码库
· 代价:注意力稀释,细节把握可能下降
OpenCode:按需 + 持久化
· 取决于后端模型(75+ 可选)[3]
· Session 自动摘要(接近 token 上限时)
· Git-based Snapshot 做安全回滚
· 会话历史持久化到本地
Claude Code 的 Compaction 机制值得展开说。当上下文使用到 ~92% 时自动触发:对话历史被摘要压缩,保留关键事实和决策,丢弃冗余细节[1][6]。
但压缩是有代价的。有开发者反馈:「Compaction 后模型忘记了之前讨论过的一个关键约束,导致重构方向偏移」[9]。200K 逼出了精巧的上下文管理工程,1M 让 Gemini 可以"记住一切"但可能更浪费 token。你选哪个?
六、多 Agent 架构:一个 AI 不够,就派一群
三家都已经走到了"单 Agent 不够用"的阶段,但解法又是完全不同的。
| 多 Agent 模式 | |||
| SubAgent 定义 | .claude/agents/ | ||
| 调用方式 | Task | task@ 提及 | |
| 嵌套深度 |
Claude Code 的多 Agent 系统最成熟[1]。通过 Task 工具,主 Agent 可以派生子任务给专门的 SubAgent。每个 SubAgent 有独立的上下文、受限的工具集,甚至可以用不同的模型(Sonnet 做轻量任务、Opus 做重活):
Claude Code — SubAgent 定义(TypeScript SDK)
// AgentDefinition { "code-reviewer": { description: "Expert code reviewer", prompt: "Analyze code quality and security", tools: ["Read", "Glob", "Grep"], // 受限工具 model: "sonnet" // 用便宜的模型 } }OpenCode 的做法更灵活——SubAgent 用 Markdown 文件定义[3]。在 agents/ 目录下放一个 .md 文件,frontmatter 写配置,正文写 prompt。这意味着非开发者也能定义 Agent。
七、最反直觉的三个发现
1 Claude Code 90% 的代码是自己写的
Anthropic 官方说法:Claude Code 90% 的代码由 Claude 自己编写[10]。这不只是个有趣的数字——它意味着 Claude Code 同时是产品和训练数据。它在用自己写代码的经验来改进自己写代码的能力。这是其他两个开源项目做不到的闭环。
2 Gemini CLI 的 Agent Loop 在源码里"看不见"
翻遍 packages/core/src/agents/ 目录,你找不到一个显式的 while 循环[2]。generalist-agent.ts 本质上是一份配置:20 轮上限、10 分钟超时、从 ToolRegistry 拿所有工具、走核心系统提示词。真正的循环被完全委托给了 Gemini API 的 Function Calling 机制。这让代码极简——但也意味着你没法定制循环行为。
3 OpenCode 的 Go → TypeScript 迁移是一次豪赌
OpenCode 最初是 Go 写的(用 Bubble Tea 做 TUI),后来整体迁移到了 TypeScript + Bun[3][5]。Go 版本已经有了不错的社区基础——放弃一个已验证的技术栈重新开始,需要很大的魄力。但迁移后的好处很明显:统一了前后端语言、获得了更丰富的 npm 生态、Bun 的冷启动速度也快于 Go 编译后的二进制。
八、如果你要自己造一个,该从哪个仓库学起?
我们不做排名——三个工具面向不同的场景、不同的用户、不同的信仰。但如果你想造自己的 AI 编程工具,每个仓库都有值得学的东西:
学 Claude Code
· Hook 系统:最完善的工具生命周期事件
· Sub-agent 架构:层级式任务委托
· Context Compaction:有限窗口下的精巧管理
· 权限模型:4 层评估链的设计思路
学 Gemini CLI
· 工具注册表:ToolRegistry 的插件发现机制
· 策略引擎:TOML 驱动的企业级管控
· Search Grounding:搜索结果带引用的实现
· Monorepo 拆分:CLI/Core/SDK 的关注点分离
学 OpenCode
· LSP 集成:代码诊断反馈闭环
· 多 Provider:75+ 模型的抽象层设计
· 双 Agent 隔离:Plan/Build 角色分工
· Markdown Agent:非开发者也能定义 Agent
"功能可以快速迭代,但架构决定了迭代的方向和天花板。"
— AI Insight 研究团队
最后说句大实话:这三个工具都还在快速进化。Claude Code 日均 60-100 次内部发布[10],OpenCode 一个月从 0 到 30K Stars[11],Gemini CLI 发布 3 个月吸引了百万开发者[12]。你今天读到的源码,下周可能就被重构了。
但架构思路不会过时。自由循环 vs 策略驱动 vs 角色隔离——这些设计哲学的取舍,在你做任何工程决策时都用得上。
三个仓库都在那里,随时可以翻。祝你翻得开心。
参考文献
1. Anthropic — Claude Code GitHub 仓库 & Claude Agent SDK 文档 github.com/anthropics/claude-code; docs.anthropic.com
2. Google — Gemini CLI GitHub 仓库 github.com/google-gemini/gemini-cli; 核心包路径: packages/core/src/
3. SST (anomalyco) — OpenCode GitHub 仓库 github.com/anomalyco/opencode; 官方文档 opencode.ai
4. OpenCode LSP 服务器文档 opencode.ai/docs/lsp
5. Moncef Abboud — "How Coding Agents Actually Work: Inside OpenCode" cefboud.com
6. Anthropic — Claude Agent SDK TypeScript 参考文档 docs.anthropic.com/agent-sdk
7. Tembo — "2026 Guide to Coding CLI Tools: 15 Agents Compared" tembo.io
8. Model Context Protocol — 官方文档 modelcontextprotocol.io
9. Hacker News — CLI 工具讨论合集 news.ycombinator.com
10. Pragmatic Engineer — "How Claude Code is built" pragmaticengineer.com
11. InfoQ — "OpenCode: A Coding Agent To Rival Claude Code and Copilot" (2026-02) infoq.com
12. VentureBeat — "Google Gemini CLI Free for Most Developers" venturebeat.com
本报告数据采集时间:2026 年 2 月 15 日。GitHub Star 数据为查询时刻快照,变化迅速。代码引用基于各项目 GitHub 仓库公开源码,版本可能已更新。引用中的文件路径指向各仓库 main 分支。
读完三个仓库的源码拆解,辛苦了
如果这篇源码对比帮你搞清了 Agent Loop 的底层逻辑
欢迎 点赞、在看、转发 三连走起,让更多人看到 🙏
想第一时间收到我们的源码拆解和深度分析
记得给「机智流」加个 星标 ⭐ 哦
源码的世界永远有惊喜,我们继续挖。
下篇见 👋
© 2026 AI Insight · 本网站由 Intern-S1-Pro 等 AI 采集信息生成,可能有误
返回首页 · 查看更多报告