先建立坐标系:aider 是「所有 terminal coding agent 的爸爸」

工坊写了 80 多篇文章,居然一直没写 aider——这本身就是一个信息点。补课之前先看时间线:aider 2023 年 5 月 9 日建仓。那是什么年代?GPT-4 刚出三个月,GitHub Copilot 还是 IDE 里的补全插件,「agent」这个词在编程圈指的还是 CI 里的自动化任务。Claude Code 是 2025 年 2 月才出的,OpenAI Codex CLI 是 2025 年 4 月,OpenCode 是 2024 年底——aider 比它们全部早一到两年。你现在用的每个 terminal coding agent 的骨架子,几乎都是 aider 先搭的:

所以它 48.6K Star 不是「又一个工具」的 Star,是「教科书」的 Star。而且它不是被时代抛弃的老古董:实测装完 v0.86.2 能正常跑通全链路(下面有完整命令),只是 GitHub 元数据开始露出疲态——release 停在 v0.86.0(2025-08-09),PyPI 上有个孤零零的 0.86.2,main 分支 2026-05-22 之后三个月零提交,1,838 个 open issues 无人认领。三年周更的传奇,现在进入休眠。这跟工坊写过的 vibe-kanban(公司倒闭)、Claw Code(195K Star 博物馆展品)凑在一起,是 2026 年开源 coding agent 生态的三张切片。

核心机制一:repo map——tree-sitter 提符号,PageRank 排重要性

aider 上下文压缩的核心是 repomap.py(867 行,全文可读)。机制分三步:

实测 aider --show-repo-map 能看到地图长什么样(就一个 8 行文件的 demo 仓库):

hello.py:
│def greet(name):
⋮
│def add(a, b):
⋮

每个符号一行,│ 和 ⋮ 是 TreeContext 的树形标记。tag 数据落在仓库根目录的 .aider.tags.cache.v4/(diskcache SQLite,实测两张表 Settings + Cache,按文件路径 + mtime 做缓存键,文件没变就不重新解析)——所以第二次启动地图生成是秒级的。这套「本地语法分析 + 图排序 + 磁盘缓存」的工程组合,今天很多标榜 code intelligence 的新项目(工坊写过的 codedb、codegraph)用的还是同样的思路,只是换成了 C/Rust/Zig。

核心机制二:编辑格式——为什么 gpt-4o-mini 差点把我 demo 仓库写坏

aider 有五种编辑格式(--edit-format 可选 whole / diff / udiff / patch / diff-fenced),每种格式决定「模型怎么把修改吐回来」:

坑就在格式和模型的不匹配上。我第一轮 mock 测试用的是默认配置(gpt-4o-mini → whole 格式),mock 返回的是 SEARCH/REPLACE 块——结果 aider 把 fence 里的内容当成「整个文件的新版本」直接写盘:hello.py 变成了字面量的 <<<<<<< SEARCH ... >>>>>>> REPLACE 原文,原来的 add() 函数整个没了。这不是 aider 的 bug,是格式契约被打破的正常后果——但对所有「拿老教程的 SEARCH/REPLACE 示例去喂新配置」的人来说,这就是实打实的坑:文件会坏,且 git 里能救(这就是自动 commit 的意义)。

另一个细节:diff 格式内部有个很妙的实现——search_replace.py 里的 RelativeIndenter,把每行缩进改写成「相对上一行的增量」再匹配(缩进变少用 ←←←← 标记)。这样模型写出来的代码块哪怕整体缩进层级跟原文差几级,也能正确对上——这是 2025 年 aider 为弱模型适配做的关键优化之一。还有个冷知识:whole 格式的 few-shot 示例里,aider 会把一段虚构的 show_greeting.py 教学对话(「Change the greeting to be more casual」+ 示例 assistant 回复)内联进每个请求——我扒 mock 请求日志时看到的,8.8K 字符的 system prompt 里全是这种「教学注入」。

核心机制三:git 集成——每次改动一个 commit,错了随时 undo

aider 的工作流哲学是「git 是安全网」:模型每应用一次编辑,它就自动生成一条 commit(--auto-commits 默认开)。commit message 由模型根据 diff 现场生成,实测 mock 返回 feat: make greet more excited,aider 原样落进 git log:

737c9a4 feat: make greet more excited
8f29611 init

配套机制:/undo 回滚上一个 AI commit;--dirty-commits 允许在有未提交改动时也干活(默认会先拦你);--commit-prompt / COMMIT_PROMPT 自定义 commit 风格;--attribute-co-authored-by 给 commit 加 Co-Authored-By 署名。这套「改一步存一步」的节奏,跟现在 vibe-coding 那种「一口气改 20 个文件再 review」是两种哲学——前者每步可回滚,后者省交互但 diff 巨大。实测全链路只花了 2 个请求:1 个主请求(编辑)+ 1 个 commit message 请求,干净利落。

核心机制四:其他值得知道的——voice、watch、copypaste、lint/test

上手:我在沙箱实测跑通的命令(含 mock 全链路验证)

Ubuntu 无头沙箱,Python 3.11 venv。全链路:安装 → 版本 → 命令面 → 坏 key → repo map → mock 服务验证「编辑应用 + 自动 commit」闭环,都走了一遍。

# 1) 安装(两条路都行,官方推荐前者)
python3 -m venv venv && source venv/bin/activate
pip install aider-install && aider-install     # 官方安装器
# 或直接:pip install aider-chat
aider --version                                 # v0.86.2

# 2) 基本用法
export OPENAI_API_KEY=sk-xxx                   # 或 ANTHROPIC_API_KEY / DEEPSEEK_API_KEY
aider hello.py                                  # 交互模式,把文件加进聊天
aider -m "make greet more excited"              # 单次消息,跑完退出
aider --model sonnet                            # 换模型(别名系统很全)
aider --edit-format diff                        # 强制 SEARCH/REPLACE 格式

# 3) 看仓库地图
aider --show-repo-map
# hello.py:
# │def greet(name):
# ⋮
# │def add(a, b):
# ⋮

# 4) 坏 key 实测(不静默,报错清晰)
aider -m "hi" --model gpt-4o-mini
# litellm.AuthenticationError: OpenAIException - Incorrect API key provided:
# sk-inval******-123. You can find your API key at https://platform.openai.com/account/api-keys.

# 5) mock 全链路(本地 OpenAI 兼容服务,SSE 流式)
OPENAI_API_KEY=sk-mock OPENAI_API_BASE=http://127.0.0.1:8778/v1 \
  aider hello.py --model gpt-4o-mini --edit-format diff -m "make greet more excited"
# Model: gpt-4o-mini with diff edit format
# Repo-map: using 4096 tokens, auto refresh
# Tokens: 2.6k sent, 50 received. Cost: $0.00042 message
# Applied edit to hello.py
# Commit 737c9a4 feat: make greet more excited

数据落盘:会话历史 .aider.chat.history.md、输入历史 .aider.input.history、repo map 缓存 .aider.tags.cache.v4/(自动加进 .gitignore)。首次启动默认会问「把 .aider* 加进 .gitignore?」和「要看 release notes 吗?」——非交互模式下全部自动取默认值 Yes,不会卡住(这点比不少 agent 工具强,但要注意它确实动了你的 .gitignore)。

实测与踩坑:5 个坑,第 1 个最危险

对比:Terminal Coding Agent 族谱上的站位

维度AiderClaude CodeCodex CLIOpenCode
出生2023-05(祖师爷)2025-022025-042024-12
许可✅ Apache-2.0❌ 专有✅ Apache-2.0✅ MIT
代码理解✅ tree-sitter + PageRank repo map(首创)✅ 自带索引⚠️ 轻量✅ LSP + 索引
编辑方式✅ SEARCH/REPLACE / whole / udiff / patch 可切换✅ 原生编辑✅ 原生编辑✅ 原生编辑
git 集成✅ 自动 commit 是核心哲学 + /undo⚠️ 手动 commit⚠️ 手动⚠️ 手动
模型支持✅ litellm 全家桶 + 本地模型 + 任意 OpenRouter⚠️ Anthropic 为主⚠️ OpenAI 系为主✅ 多后端
Star / 状态48,605 / ⚠️ 休眠 3 个月143,456 / ✅ 活跃120,039 / ✅ 活跃202,539 / ✅ 活跃

一句话定位:Claude Code / Codex 是「大厂重兵、按月迭代」的当红炸子鸡,aider 是「单核驱动、三年沉淀、范式输出」的教科书——repo map、编辑块、自动 commit 这三样它都是原创,但它的开发节奏已经追不上 2026 年的模型迭代了。跟工坊写过的其他开源 agent 比:它比 qwen-code(阿里系全家桶)纯粹,比 openclaude(fork 改造)正统,比 deepseek-reasonix(缓存优化狂魔)全面——它是「什么都能接、什么都不锁」的通用底座。

值不值得装:三个场景对号入座

最后说句公道话:aider 现在最大的风险不是代码烂,是「没人维护」。2026 年的新模型、新协议(MCP 支持很弱、没有 skills 生态)、新交互范式它都跟不上了——如果你要的是「跟着模型能力迭代走」的工具,选当红的那几个;如果你要的是「稳定、可读、可改、范式正统」的底座,aider 依然是那个 48.6K Star 的教科书。Apache-2.0,仓库 github.com/Aider-AI/aider,安装 pip install aider-chat——「AI pair programming in your terminal」,祖师爷教的活儿,到今天依然成立。