IDE里的AI辅助写代码已经不够用了。越来越多开发者把编码Agent搬到了终端——不是为了装逼,而是终端Agent能读整个项目、跑shell命令、自己commit代码,干的活比IDE插件多了一个量级。
2026年3月这个赛道突然加速:Google给Gemini CLI加了Plan Mode,OpenCode的GitHub Star冲到12万,Aider持续迭代多Provider支持。再加上Anthropic的Claude Code和OpenAI的Codex CLI,五个终端Agent摆在面前,到底该选哪个?
我花了一周把这五个全装上跑了一遍,用同一个任务测,直接说结论。
测试环境和任务
测试机器:Ubuntu 22.04,16GB内存,i5-12400。不用Mac测是因为大部分开发者日常环境就是Linux或WSL。
测试任务:给一个中等规模的Express+TypeScript项目(约50个文件,8000行代码)做三件事:
1. 代码理解:解释项目的认证流程,找出所有中间件的调用链
2. Bug修复:修复一个跨文件的类型错误(interface定义和实际使用不一致)
3. 功能新增:添加一个rate limiter中间件,集成到现有路由
三个任务从简到难,覆盖”读代码→改代码→写代码”三个核心场景。
安装体验
# Claude Code npm install -g @anthropic-ai/claude-code # Codex CLI npm install -g @openai/codex # Gemini CLI npm install -g @anthropic-ai/gemini-cli # 错了,实际是: npm install -g @google/gemini-cli # Aider pip install aider-chat # OpenCode curl -fsSL https://opencode.ai/install | bash # 或者直接下载Go二进制
安装这一步已经能看出差异。OpenCode是Go写的单二进制文件,下载即用,没有node_modules也没有Python依赖,启动速度秒杀其他四个。Aider需要Python环境,pip install有时候会撞到依赖冲突。Claude Code和Codex CLI都走npm,中规中矩。
启动速度实测:
| 工具 | 首次启动 | 后续启动 | 安装包大小 |
|---|---|---|---|
| OpenCode | 0.3s | 0.2s | ~25MB(单文件) |
| Codex CLI | 1.8s | 1.2s | ~80MB |
| Claude Code | 2.1s | 1.5s | ~120MB |
| Gemini CLI | 2.0s | 1.3s | ~90MB |
| Aider | 3.2s | 2.0s | ~200MB(含依赖) |
任务一:代码理解——谁能把认证流程讲清楚
Prompt统一用:Explain the authentication flow in this project, trace all middleware calls from login to protected routes.
Claude Code拿到这个任务后,先用find扫了项目目录结构,然后逐个读了auth/目录下的文件,再顺着import链找到了路由文件和中间件注册。最终输出了一个完整的调用链,从POST /login到JWT签发到verifyToken中间件到各个protected route,每一步都标注了文件名和行号。
100万token的上下文窗口在这种任务上是碾压级优势——它能一次性把整个项目吃进去,不需要反复切换文件。
Gemini CLI(Plan Mode)的表现出乎意料。开了Plan Mode后,它先进入只读状态分析项目,用ask_user工具问了我一个问题:”项目用的是session-based还是token-based认证?”——这个反问很聪明,说明它在分析之前先确认方向。最终输出质量和Claude Code接近,调用链完整,但少了几个edge case的中间件。
Aider的分析最快,因为它走的是diff-aware的上下文管理,不会把整个项目都塞进prompt。但也因此漏掉了一个嵌套在utils/目录里的helper函数。
Codex CLI的结果中规中矩,结构清晰但深度不如Claude Code。OpenCode的分析能力取决于你接的是哪个模型,用Claude Sonnet时接近Claude Code的水平,用本地模型就差了一截。
代码理解评分:
| 工具 | 完整度 | 准确度 | 耗时 |
|---|---|---|---|
| Claude Code | ★★★★★ | ★★★★★ | 45s |
| Gemini CLI | ★★★★☆ | ★★★★★ | 38s |
| Codex CLI | ★★★★☆ | ★★★★☆ | 30s |
| OpenCode(Sonnet) | ★★★★☆ | ★★★★☆ | 35s |
| Aider | ★★★☆☆ | ★★★★☆ | 20s |
任务二:跨文件Bug修复——真刀真枪改代码
制造了一个典型bug:types/user.ts里的UserProfile interface有个avatar字段是string | null,但services/user.service.ts里直接当string用了,没做null check。这个错误会在controllers/profile.controller.ts里触发运行时错误。
// types/user.ts
interface UserProfile {
id: string;
name: string;
avatar: string | null; // 这里定义是nullable
}
// services/user.service.ts
function getAvatarUrl(user: UserProfile): string {
return user.avatar.replace(http://, https://); // 没处理null
}
Claude Code不仅找到了这个bug,还顺手发现了另外两处类似的null check缺失。修复方案用了optional chaining加fallback,改了3个文件,每个改动都用git diff展示。
Gemini CLI在Plan Mode下先列出了修复方案:”1. 在UserProfile的avatar字段添加null check 2. 在service层统一处理nullable字段 3. 更新相关测试”。确认方案后切换到执行模式,一气呵成改完。这种”先规划再执行”的流程,做复杂修改时心里踏实很多。
Aider的Git集成在这个场景下发光了。改完代码后自动创建了一个commit,message写的是fix: handle nullable avatar in UserProfile,格式规范,直接能push。其他几个虽然也能auto-commit,但Aider的commit message质量明显最高。
Codex CLI的沙箱执行在这里是个优势——它在隔离环境里跑了tsc --noEmit验证修复是否引入新的类型错误,其他工具都没做这步。
# Codex CLI的沙箱验证输出 $ codex "fix the nullable avatar bug in user service" [sandbox] Running: tsc --noEmit [sandbox] ✓ No errors found [sandbox] Running: npm test -- --filter=user [sandbox] ✓ 12 tests passed
Bug修复评分:
| 工具 | 定位准确 | 修复质量 | 安全性 | Git集成 |
|---|---|---|---|---|
| Claude Code | ★★★★★ | ★★★★★ | ★★★★☆ | ★★★★☆ |
| Gemini CLI | ★★★★★ | ★★★★☆ | ★★★★★ | ★★★☆☆ |
| Aider | ★★★★☆ | ★★★★☆ | ★★★☆☆ | ★★★★★ |
| Codex CLI | ★★★★☆ | ★★★★☆ | ★★★★★ | ★★★★☆ |
| OpenCode | ★★★★☆ | ★★★☆☆ | ★★★☆☆ | ★★★★☆ |
任务三:新增Feature——Rate Limiter中间件
这个任务最能拉开差距。要求:写一个基于sliding window的rate limiter,支持按IP和按用户ID限流,集成到现有的Express路由中,写单元测试。
Claude Code的方案最完整:用Redis做存储、sliding window算法、独立的配置文件、完整的测试用例。问题是它假设项目已经有Redis,但实际项目用的是内存缓存。改了两轮才对。
Gemini CLI的Plan Mode在这种复杂任务上价值最大。它先输出了一份Markdown计划文件:
# Rate Limiter Implementation Plan ## Analysis - Project uses in-memory caching (no Redis) - Existing middleware pattern: function factory returning RequestHandler - Test framework: Jest with supertest ## Implementation Steps 1. Create `middleware/rateLimiter.ts` - sliding window with Map storage 2. Create `config/rateLimit.config.ts` - configurable limits 3. Update `routes/index.ts` - apply to API routes 4. Create `__tests__/rateLimiter.test.ts` - unit + integration tests ## Trade-offs - Map storage: simple but no cross-process sharing - Alternative: could use the existing cache module in utils/cache.ts
看到这个计划我直接把”用utils/cache.ts”这条反馈回去了,它改完计划后执行,一次成功。这种先看计划再执行的工作流,比让Agent直接写代码靠谱得多。
Aider写了一版能跑但相对简陋的实现——固定窗口而不是sliding window,没有按用户ID限流,测试只有3个case。不过它的优势是速度快,从提问到commit完成只用了40秒。
Codex CLI在沙箱里完整跑了一遍npm test确认没有regression,这点很加分。但生成的代码风格和项目现有风格不太统一,用了很多any类型。
OpenCode接Claude Sonnet时表现不错,但MCP集成还比较新,调用外部工具时偶尔会卡住。
费用对比——钱包最关心的部分
三个任务跑完的总花费:
| 工具 | 模型 | 总Token | 总费用 | 免费额度 |
|---|---|---|---|---|
| Claude Code | Sonnet 4 | ~280K | $2.10 | 无 |
| Gemini CLI | Gemini 2.5 Pro | ~320K | $0.00 | 60次/分钟免费 |
| Codex CLI | o4-mini | ~200K | $0.60 | 无 |
| Aider | Sonnet 4 | ~150K | $1.12 | 无 |
| OpenCode | Sonnet 4 | ~250K | $1.87 | 无 |
Gemini CLI的免费额度在这里是杀手级优势。60次/分钟的免费Gemini 2.5 Pro,日常开发完全够用,不需要掏一分钱。Claude Code最贵但效果最好——经典的”一分钱一分货”。
踩坑记录
Gemini CLI的Plan Mode不能在YOLO模式下用。如果你设了--approval-mode=yolo让它自动执行所有操作,Plan Mode的enter_plan_mode工具会被禁用。这两个模式是互斥的,文档里没写清楚,我摸索了半天。
Aider在monorepo里会迷路。如果项目是monorepo结构,Aider的文件选择器有时候会选错package下的同名文件。解决办法是用--file参数手动指定要编辑的文件。
OpenCode的MCP Server配置比较折腾。虽然支持MCP协议,但配置文件格式和Claude Code的不完全兼容,需要手动改。
Codex CLI的沙箱在某些场景下太严格。它默认不允许访问网络,如果你的项目有外部依赖需要resolve,得手动放行。
Claude Code在大项目上容易撞token限制。虽然有100万token上下文,但一个大型monorepo很容易就超了。实际使用中需要用.claudeignore排除不相关的目录。
选择建议
别纠结”哪个最好”,根据你的情况选:
预算为零 → Gemini CLI。免费额度 + Plan Mode,日常开发足够了。Plan Mode是真正有用的功能,不是噱头。
要改大项目 → Claude Code。100万上下文窗口在复杂重构和跨文件修改上没有对手,但得准备好钱包。
不想被厂商绑架 → Aider。支持所有Provider,今天用Claude明天换GPT后天跑本地模型,随便切。Git集成是五个里面最好的。
想要最快的启动体验 → OpenCode。Go单文件二进制,0.2秒启动,12万Star不是白来的。但生态还在早期,遇到问题可能要翻源码。
OpenAI全家桶用户 → Codex CLI。沙箱执行是独家优势,让Agent跑测试、装依赖都不怕搞坏本地环境。
我自己日常的组合是:小改动用Gemini CLI(免费快速)、复杂重构用Claude Code(贵但准)、需要切模型时用Aider。三个工具覆盖90%的场景。
终端AI Agent这个赛道才刚开始。去年这个时候大家还在讨论”AI能不能写代码”,今年的问题已经变成”用哪个Agent写代码效率最高”。工具选型永远没有标准答案,但至少现在你有五个靠谱的选择了。