Claude Code 默认就会过度设计:拦住它的六个问题,插件可装可不装
修复靠的不是人设,而是写码前的强制暂停:先给自己五次不写代码的机会;下面给出免安装版本,也讲清极简主义什么时候会反噬。
你让编码代理做邮箱校验,拿到的不是一行代码,而是一个 27 行的 EmailValidator 类:外面套一层包装,带没人要的配置项,正则还照样不对。这个失败模式太常见了,以至于今天 r/ClaudeCode 顶帖就是它的解法:作者做了一个 “lazy senior dev” 技能(skill),在发布任务上自测代码量大约只有原来的 1/6。帖子有 1,200+ 赞,仓库几天内过了 750 stars。
这个技能(skill)值得知道。更值得拆的是里面的机制;哪怕你什么都不装,也只差十来行 CLAUDE.md。本文讲两种用法,也讲同一条帖子里那些庆功帖跳过的两条尖锐批评。
30 秒版
- 代理会超额交付,因为它把每条指令都当成功能需求。它的奖励信号里,没有一行代码的维护成本。
- 真正有效的修复是强制暂停:生成任何东西之前,代理必须先按固定顺序问完一串“能不能不写代码?”。
- 你可以把它装成插件:Ponytail,MIT 许可,会在 Claude Code 里自动激活,并附带 Cursor/Windsurf/Cline/Copilot/Aider/Kiro 的规则文件。
- 也可以把下面的免安装版本贴进
CLAUDE.md。真正起作用的是清单,人设只是装饰。 - 注意反向失败:所谓“最少代码”不是“行数最少”,而是不多于必要;必要也包括正确抽象。
为什么代理会把 13 行任务写成 190 行仪表盘
发布帖里最好的例子,是让代理写一个倒计时器。没有改造的代理给出了 190 行的“仪表盘”,还带没人要求的动画;装了技能(skill)后,交付的是 13 行。
这不是 Claude 的怪癖,而是当前所有编码代理的默认姿态。三股力量叠在一起:
- 完整有奖励,简短没有。 模型被调成要有帮助、要完整。一个代理处理了你没提到的边界条件,看起来更能干,于是这种行为赢了。
- 每条指令都像功能需求。 有评论说得很准:多数过量生成,是因为模型把每条指令当成开工许可,而不是先拿来确认范围的问题。
- 没人给输出定价。 资深工程师加一个类之前会犹豫,因为以后要维护。代理不用维护,你要;在计量套餐上,你还要为每个 token 付费。同一周,另一篇 588 赞的帖子把成本说得很直白:有经验的用户会让 Claude 生成确定性脚本,正是为了让重复工作不再消耗 token。输出量同时是额度、钱和审查负担。
机制:五次不写代码的机会
拿掉马尾和眼镜的人设,这个技能(skill)的核心是一条决策阶梯。生成代码前,代理必须按顺序走完:
- 这个东西真的需要存在吗?如果不需要,包括可以删代码,那就停在这里。
- 标准库已经做了吗?用标准库。
- 平台原生能力能做吗?用平台能力。
- 已经安装的依赖能做吗?用它。
- 能不能一行解决?能,就一行。
- 前五个都不行,才写新代码:写能工作的最小实现。
作者扩展后的评测(仓库里 6 个对抗任务)自报:相比未修改的对照组,token 少 47%,运行约快 3 倍,总行数 490 vs 3,629;两组都通过了同一套安全和并发检查。后续功能扩展任务里,改动行数是 96 vs 1,115。把这些数字当项目作者演示,不要当独立评测:发布帖早先 5 个任务跑出来的是另一组数(token 少 16%,约快 4 倍,293→47),说明数字还在变。但方向一致,也符合机制预期:多数生成出来的代码,第一关“它需要存在吗?”就过不了。
可以装成插件(在 Claude Code 里运行 /plugin marketplace add DietrichGebert/ponytail),也可以在 Cursor、Windsurf、Cline、Copilot、Aider 或 Kiro 里直接拿仓库里的各工具规则文件。插件形态会在每个会话自动激活,这一点很重要;有评论点中了包装方式真正赢的原因:一致性胜过你每次都可能忘掉的完美提示。
免安装版本
大部分效果只靠普通规则就能拿到。下面这版,是我们把阶梯和帖子里的纠偏合并后的写法;贴进项目的 CLAUDE.md 即可(放在哪里见我们的 CLAUDE.md 指南):
## Code volume rules
Before writing any code, answer in order — first "yes" wins:
1. Solvable by deleting code or doing nothing? Do that.
2. Standard library already does it? Use it.
3. Platform or an installed dependency already does it? Use it.
4. A small edit to existing code suffices? Make that edit.
5. Only then write new code — the minimum that satisfies the stated requirement.
- No wrapper classes, managers, or abstraction layers for a single call site.
- No handling for error conditions that cannot occur in this codebase.
- No features, options, or configuration beyond what was asked.
- After tests pass, do one simplification pass: remove anything the tests don't require.
- If the request is ambiguous between a small fix and a subsystem, ask before building the subsystem.
- Exception: when the task is structural (shared logic, public interfaces), prefer the proper
abstraction over the shortest diff — say which rule you're overriding and why.
注意这里没有什么:没有角色设定。下一节解释为什么。
帖子里的怀疑者说对了什么
两条反驳最值得看,而且和这些模型的实际工作方式对得上。
人设是开销,不是机制。 最尖锐的批评说,人设会污染上下文:每个思考片段都要花 token 去解释 “a lazy senior dev who’s seen it all” 对当前代码意味着什么,而不是直接执行约束。真正改变输出的,是清单,也就是一串具体、按顺序执行的检查。那层外衣会跟着进入每个上下文窗口,消耗 token,还增加解释噪声。你自己写规则时,写命令式约束,不要写角色。(插件结果不能反驳这一点;它的规则里同时有阶梯和人设,真正出力的很可能是阶梯。)
最少 ≠ 行数最少。 顶部工程评论把边界划得很准:资深工程师不会因为短就把东西写成一行;他们写的是不多于必要,而必要包括功能完整性,也包括这段代码未来需要的正确抽象(职责分离、关键处的 DRY、有边界的上下文)。硬性偏好“能一行就一行”,会产出创可贴式补丁:局部最小,什么债都没还,还继续计息。他给的反制提示值得抄:当代理提出方案时,问它这是不是能还掉技术债的正确修复,还是只是盖在上面的补丁;按他的经验,模型经常会承认那只是补丁,然后在追问后给出结构性修复。这个检查,就是我们规则块里的 Exception 行。
不用写规则也能调的地方
- 先要计划,再收紧计划。 过度设计最便宜的拦截点是计划阶段:“你的计划有 4 个组件;哪 2 个能删?”只花一条消息。代码生成后再砍,花的是审查时间。
- 明确要求做简化轮次。 测试全绿后,说:“删除测试不需要的一切。”你只要开口,代理通常很会做;但你不说,它几乎不会主动做。同一个偏差既会让它多建,也会让它少删。
- 机械活调低 effort 档位。 对暴露 effort 控制的模型,较低 effort 往往会给出更短的输出、更少且更集中的工具调用。我们会把机械编辑调低,把设计工作调高。这是一个不用付成本就能转的音量旋钮。
什么会改变本文判断
有人独立复现这组评测(仓库数字是自报的,而且已经在发布帖和 README 之间变过一次);Claude Code 原生开始给输出量定价,比如内置的 diff 预算模式;或者有证据表明这些规则会让结构性任务的正确性下降。最后这一点,正是帖子里最好的批评者预判的失败方向。
配套阅读
- CLAUDE.md 完全指南 —— 项目规则应该放在哪里,应该写什么,不该写什么
- CLAUDE.md 中 5 个偷烧 token 的坏习惯 —— 这个问题在输入侧的孪生版本:不是输出膨胀,而是上下文膨胀
- 管理 Claude Code 的上下文窗口 —— 少生成代码就是少消耗上下文;同一道 token 账的运行时一侧
- Claude Code 用量限额讲清楚 —— 为什么在有上限的套餐里,真正要盯的是输出 token
来源
- r/ClaudeCode — “I gave Claude Code a ‘lazy senior dev’ mode and it writes like 6x less code”(6 月 12 日)
- Ponytail — 技能(skill)、规则文件与评测数据(DietrichGebert,MIT)
- r/ClaudeAI — “build tools with Claude Code that cost zero tokens to run”(6 月 11 日)
- Anthropic engineering — Claude Code best practices(
CLAUDE.md约定)
FAQ
如何阻止 Claude Code 写太多代码?
把明确的代码量规则写进 CLAUDE.md:一套固定的写码前检查清单(这东西是否需要存在 → 标准库 → 平台 → 现有依赖 → 小改现有代码),之后才写最少的新代码。插件版本会自动激活;上面的规则版本不安装任何东西,也能拿到大部分效果。
Ponytail 技能(skill)能在 Cursor、Windsurf 或 Copilot 里用吗?
能。它首先是一个 Claude Code 插件,但仓库同时提供给 Cursor、Windsurf、Cline、Copilot、Aider 和 Kiro 使用的纯规则文件,也给其他工具准备了 AGENTS.md。MIT 许可。
像「you are a lazy senior dev」这样的人设提示真的有用吗? 真正起作用的是清单;外衣是开销。人设文本会进入每个上下文窗口,模型还要花 token 解释这个角色。直接写命令式约束,通常能用更低成本得到同样的克制。
强行要求最少代码会不会反噬? 会,主要两种:本该做结构性修复时打了补丁(局部最少,全局昂贵),以及过于绝对的规则和合理的多步骤实现打架。保留结构性任务的明确例外,并要求代理判断当前方案是正确修复还是补丁;它通常会告诉你。
这篇对你有帮助吗?