Aider headless模式在API全部失败时仍exit 0,导致CI误判通过;已有issue #5552及复现步骤。
Pipeline nightly 以 headless 模式调用 Aider,任务显示成功,没有任何 diff 被提交。你以为 agent 跑完了,没什么需要改的——但实际上所有 API 调用都失败了,没有一次真正接触到模型。下面是识别这个问题的方法,以及今天就能部署的三层防护。
根据 Dev.to 上分析的 bug 报告,一次 Aider headless 跑程"从未接触到模型——每个 API 调用都失败了,每次 retry 都耗尽了——但仍然以状态码 0 退出。和一次成功跑程报告的状态码一样"。该 issue 编号为 Aider-AI/aider 仓库的 #5552,由遇到该错误的用户(noelsaw1)于 2025/08/11 开启,附有精确的复现步骤:将 AIDER_OPENAI_API_BASE 指向一个无效或不可达的主机,然后调用 aider --message "test"。
机制非常简单:Aider 捕获 litellm 底层的连接异常,按配置重试到上限,将错误日志写入自己的 output——然后干净地以 code 0 退出。没有产生任何 edit,没有任何 API 调用成功,process 仍向调用方报告 success。
Exit code 是 CLI 工具与所有 orchestration 层(CI job、cron wrapper、agent pipeline)之间的契约。这个 bug 静默破坏了这个契约——从调用方来看,一次彻底的连接失败和一次干净的 no-op 跑程无法区分。如果下一步只依赖 $? 做 gate,grep 日志也无济于事。
更值得警惕的是:分析记录指出这是同一周内第三份报告,指向 Aider 某条 code path 吃掉了 failure signal——此前是一个合法 diff 被静默丢弃,标为"no tracked changes"(#5486),以及一个 partial-hunk application 的 warning 从未触发(#5573)。三个不同函数,同一种错误形态。事件来源将其定级为 severity 4.8 / medium(编号 STUPID-2026-0081)。
这是技术分析,不是官方修复:来源明确指出尚无 maintainer 响应,因此没有 fix 时间线,也未确认这是 retry behavior 的有意设计还是一个 oversight。
不要信任 exit code——验证副作用。 每次 agent 跑完后,通过工作证据而非 status code 来判断:仓库是否 dirty,是否有新 commit。示例:git diff --quiet && echo "NO_CHANGE",然后根据 job 上下文自行判断 NO_CHANGE 是 pass 还是 fail。
不要信任 exit code——验证副作用。 每次 agent 跑完后,通过工作证据而非 status code 来判断:仓库是否 dirty,是否有新 commit。示例:git diff --quiet && echo "NO_CHANGE",然后根据 job 上下文自行判断 NO_CHANGE 是 pass 还是 fail。
Preflight fail-fast。 在调用 agent 前用最便宜的请求 ping model endpoint;endpoint 挂了立即 kill job。
Preflight fail-fast。 在调用 agent 前用最便宜的请求 ping model endpoint;endpoint 挂了立即 kill job。
对 agent 日志做 assert。 将 output 重定向到文件,当匹配到 connection/retry-exhausted 模式时 fail job——虽然粗糙,但是唯一能看见 exit code 所掩盖内容的层级。
对 agent 日志做 assert。 将 output 重定向到文件,当匹配到 connection/retry-exhausted 模式时 fail job——虽然粗糙,但是唯一能看见 exit code 所掩盖内容的层级。
由于 Aider 通过 litellm 调用 provider,很多团队在中间放一个 gateway 来集中处理 retry 和 fallback。LiteLLM 介绍文章将 Proxy 描述为"一个独立服务器(通常用 Docker),位于你的应用和 provider 之间",集中处理 routing、virtual keys、spend tracking、budgets、rate limits 和 fallbacks;文章中的对比表显示 load balancing、fallbacks 和 retries 都位于开源版本(MIT)中。企业版"每月约 $250"起,含 SSO、audit trails 和 compliance——这些数字由作者提供,上 budget slide 前请自行核实。
注意 gateway 层的 fallback 能降低所有 provider 同时挂掉的概率,但无法修复 exit code bug:当所有路径都失败时,Aider 仍返回 0。
Issue #5552 仍为 open 状态,尚未被 maintainer 确认。任何以 exit code 作为下一步 gate 的 headless Aider 调用都正在承受此风险——先建立 side-effect 验证层,然后关注 #5552、#5486 和 #5573 是否会一并处理。
This article was originally published on NextFuture. Follow us for more fullstack & AI engineering content.
For further actions, you may consider blocking this person and/or reporting abuse