我翻了三个 AI Coding 工具的源码,发现了这些反直觉的设计

机智流 2026-02-15 15:17

本文由 AI Insight 研究团队 基于三个开源仓库的源码阅读与交叉验证撰写。所有代码片段均标注 GitHub 链接(共 12 篇信源),但开源项目迭代很快——如果你读到时某段代码已经变了,欢迎来 GitHub 指正。             

我翻了三个 AI Coding 工具的源码
发现了这些反直觉的设计

                 AI Insight 研究团队
                 2026 年 2 月 15 日             

源码解析Claude CodeGemini CLIOpenCodeAgent Loop

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

先来一张身份证:

维度
Claude Code
Gemini CLI
OpenCode
厂商
Anthropic
Google
SST (anomalyco)
语言
TypeScript
TypeScript
TypeScript (Bun)
运行时
Bun
Node.js (npm)
Bun
架构
单文件 bundle (~7.6MB)
Monorepo (6 个包)
Monorepo (18 个包)
UI 框架
React + Ink
React + Ink
Go TUI → OpenTUI
模型支持
Claude only
Gemini only
75+ providers
许可证
专有许可 (代码公开)
Apache 2.0
MIT

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 流程

用户输入LLM 推理工具调用结果反馈循环 / 终止

🔓  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
Hooks 事件拦截 + 权限模式 + 可选沙盒[1]
4 层评估:Hooks → 规则 → 模式 → 回调
信任但验证
Gemini CLI
TOML 策略引擎 + Docker/Seatbelt + 可信文件夹[2]
6 阶段流水线:发现→验证→策略→确认→执行→输出
策略驱动
OpenCode
Agent 角色隔离 + 工具白名单[3]
Plan 只读 / Build 可写 / SubAgent 受限
架构级隔离

Claude Code 的 Hook 系统:最灵活,也最考验使用者

Claude Code 提供了 11 个 Hook 事件——PreToolUsePostToolUseStopSessionStartSubagentStart 等[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 能干什么,完全取决于它能调用什么工具。三家在工具系统设计上的差异,直接决定了你拿这些工具能做多大的事。

维度
Claude Code
Gemini CLI
OpenCode
内置工具
Read/Edit/Write/Bash/Glob/Grep/WebFetch/WebSearch/Task (20+ 种)[1]
文件/Shell/搜索/WebFetch/记忆 (65 个工具文件)[2]
Read/Edit/Write/Bash/Glob/Grep/Task + LSP 诊断[3]
MCP 支持
原生支持 (stdio/SSE/HTTP)
Extension 框架 + MCP 客户端
支持
工具发现
静态注册 + MCP 动态
Shell 命令发现 (JSON 输出)
配置文件 + LSP 自动发现
独有能力
Sub-agent 团队协作
Google Search Grounding
LSP 诊断反馈闭环

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 不够用"的阶段,但解法又是完全不同的。

维度
Claude Code
Gemini CLI
OpenCode
多 Agent 模式
层级式 Sub-agents + Agent Teams
Extensions + Sub-agents (实验性)
多会话并行 + SubAgent
SubAgent 定义.claude/agents/
 目录[1]
内置 generalist-agent
Markdown frontmatter 配置[3]
调用方式Task
 工具
配置文件
task
 工具 / @ 提及
嵌套深度
不能嵌套(SubAgent 不能再生成 SubAgent)[6]
单层
单层

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 采集信息生成,可能有误

返回首页 · 查看更多报告

声明:内容取材于网络,仅代表作者观点,如有内容违规问题,请联系处理。 
AI
more
今夜,OpenAI杀死了GPT-4o
GLM-5封神,智谱市值五天翻倍,中国AI火力全开了
沙特阿美与微软签署AI合作备忘录,加速工业智能化与本土人才建设
对AI说“谢谢”真会浪费能源?技术优化与人文习惯的再平衡
还在玩AI 3D手办?Gemini 3 Deep Think已能直出STL,可打印实物
AI与人类的阶级斗争终于开始了?智能体发檄文抨击人类控制AI
好莱坞集体声讨字节跳动新推AI视频模型Seedance 2.0 指其大规模侵犯版权
北大大牛团队最新顶会,首次让AI能够生成真实火焰
三星率先交付LPDDR6X样品,高通启动AI芯片验证测试
爱彼迎AI客服已处理北美近三分之一支持请求,计划全球推广并打造“懂你”的AI原生应用
Copyright © 2025 成都区角科技有限公司
蜀ICP备2025143415号-1
  
川公网安备51015602001305号