← 返回全部文章
实战指南 · 2026年6月12日 · 6 分钟阅读

Claude Code 默认就会过度设计:拦住它的六个问题,插件可装可不装

修复靠的不是人设,而是写码前的强制暂停:先给自己五次不写代码的机会;下面给出免安装版本,也讲清极简主义什么时候会反噬。

你让编码代理做邮箱校验,拿到的不是一行代码,而是一个 27 行的 EmailValidator 类:外面套一层包装,带没人要的配置项,正则还照样不对。这个失败模式太常见了,以至于今天 r/ClaudeCode 顶帖就是它的解法:作者做了一个 “lazy senior dev” 技能(skill),在发布任务上自测代码量大约只有原来的 1/6。帖子有 1,200+ 赞,仓库几天内过了 750 stars。

这个技能(skill)值得知道。更值得拆的是里面的机制;哪怕你什么都不装,也只差十来行 CLAUDE.md。本文讲两种用法,也讲同一条帖子里那些庆功帖跳过的两条尖锐批评。

30 秒版

  1. 代理会超额交付,因为它把每条指令都当成功能需求。它的奖励信号里,没有一行代码的维护成本。
  2. 真正有效的修复是强制暂停:生成任何东西之前,代理必须先按固定顺序问完一串“能不能不写代码?”。
  3. 你可以把它装成插件:Ponytail,MIT 许可,会在 Claude Code 里自动激活,并附带 Cursor/Windsurf/Cline/Copilot/Aider/Kiro 的规则文件。
  4. 也可以把下面的免安装版本贴进 CLAUDE.md。真正起作用的是清单,人设只是装饰。
  5. 注意反向失败:所谓“最少代码”不是“行数最少”,而是不多于必要;必要也包括正确抽象。

为什么代理会把 13 行任务写成 190 行仪表盘

发布帖里最好的例子,是让代理写一个倒计时器。没有改造的代理给出了 190 行的“仪表盘”,还带没人要求的动画;装了技能(skill)后,交付的是 13 行。

这不是 Claude 的怪癖,而是当前所有编码代理的默认姿态。三股力量叠在一起:

  • 完整有奖励,简短没有。 模型被调成要有帮助、要完整。一个代理处理了你没提到的边界条件,看起来更能干,于是这种行为赢了。
  • 每条指令都像功能需求。 有评论说得很准:多数过量生成,是因为模型把每条指令当成开工许可,而不是先拿来确认范围的问题。
  • 没人给输出定价。 资深工程师加一个类之前会犹豫,因为以后要维护。代理不用维护,你要;在计量套餐上,你还要为每个 token 付费。同一周,另一篇 588 赞的帖子把成本说得很直白:有经验的用户会让 Claude 生成确定性脚本,正是为了让重复工作不再消耗 token。输出量同时是额度、钱和审查负担。

机制:五次不写代码的机会

拿掉马尾和眼镜的人设,这个技能(skill)的核心是一条决策阶梯。生成代码前,代理必须按顺序走完:

  1. 这个东西真的需要存在吗?如果不需要,包括可以删代码,那就停在这里。
  2. 标准库已经做了吗?用标准库。
  3. 平台原生能力能做吗?用平台能力。
  4. 已经安装的依赖能做吗?用它。
  5. 能不能一行解决?能,就一行。
  6. 前五个都不行,才写新代码:写能工作的最小实现。

作者扩展后的评测(仓库里 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 预算模式;或者有证据表明这些规则会让结构性任务的正确性下降。最后这一点,正是帖子里最好的批评者预判的失败方向。

配套阅读

来源

  1. r/ClaudeCode — “I gave Claude Code a ‘lazy senior dev’ mode and it writes like 6x less code”(6 月 12 日)
  2. Ponytail — 技能(skill)、规则文件与评测数据(DietrichGebert,MIT)
  3. r/ClaudeAI — “build tools with Claude Code that cost zero tokens to run”(6 月 11 日)
  4. 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 解释这个角色。直接写命令式约束,通常能用更低成本得到同样的克制。

强行要求最少代码会不会反噬? 会,主要两种:本该做结构性修复时打了补丁(局部最少,全局昂贵),以及过于绝对的规则和合理的多步骤实现打架。保留结构性任务的明确例外,并要求代理判断当前方案是正确修复还是补丁;它通常会告诉你。

这篇对你有帮助吗?

相关阅读


文章独立产出 · 编辑政策

继续阅读 →