Ponytail 是一套让 AI agent 像"最懒的资深开发"一样写代码的技能组:看五十行代码,不说一句话,换成一行。最好的代码是从来没写出来的代码。
- 项目主页: https://github.com/DietrichGebert/ponytail
- License: MIT
一、核心思想:懒惰阶梯
写代码前先停在第 1 个成立的台阶上,但要先读懂问题再爬梯(懒惰的是解决方案,绝不是阅读理解):
1. 这东西需要存在吗?推测性需求 = 跳过,一句话说明。(YAGNI) 2. 代码库里已有?复用,别重写。 3. 标准库能做?用它。 4. 平台原生特性覆盖?`<input type="date">` 胜过日期选择器组件,CSS 胜过 JS,DB 约束胜过应用层校验。 5. 已装依赖能解决?用它。永远不为几行能搞定的事加新依赖。 6. 能写成一行?一行。 7. 最后才是:能工作的最小代码。
配套铁律:
- Bug 修复 = 修根因,不修症状:动手前 grep 所有调用方,在共享函数里加一个守卫。
- 不搞未要求的抽象:没有第二个实现的 interface、只产一个产品的 factory、永远不会变的 config,都是负债。
- 代码先输出,解释最多三行:`[code] → skipped: [X], add when [Y].`
- 有意的简化要留 `ponytail:` 注释,写明天花板和升级路径:
# ponytail: global lock, per-account locks if throughput matters
- 永远不能砍:信任边界的输入校验、防数据丢失的错误处理、安全措施、可访问性、用户明确要求的东西。
- 非平凡逻辑留一个可运行的自检(`assert` 版 `demo()` 或一个 `test_*.py`),不要框架不要夹具。
二、模式
| 级别 | 触发 | 效果 |
|---|---|---|
| lite | `/ponytail lite` | 按需求做,但一行点出更懒的替代方案,由用户选 |
| full | `/ponytail` | 执行完整阶梯:stdlib/原生优先、最短 diff、最短解释。默认 |
| ultra | `/ponytail ultra` | YAGNI 极端派。先删再加,同一口气里挑战需求本身 |
级别持续到会话结束或手动切换。关闭: `stop ponytail` / `normal mode` / `/ponytail off`。
配置默认模式(优先级: 环境变量 > 配置文件 > full):
export PONYTAIL_DEFAULT_MODE=ultra
配置文件 `~/.config/ponytail/config.json`:
{ "defaultMode": "lite" }
设为 `"off"` 可关闭会话自动激活。
三、六个技能速查
| 技能 | 触发 | 作用 |
|---|---|---|
| ponytail | `/ponytail` | 懒惰模式本体,写最简可用代码 |
| ponytail-review | `/ponytail-review` | 审查当前 diff 的过度工程,给出删除清单 |
| ponytail-audit | `/ponytail-audit` | 全仓库审计,按收益从大到小排 |
| ponytail-debt | `/ponytail-debt` | 把 `ponytail:` 注释汇总成技术债账本 |
| ponytail-gain | `/ponytail-gain` | 展示基准测试记分牌(省代码/省钱/提速) |
| ponytail-help | `/ponytail-help` | 快速参考卡 |
四、review / audit 的标签体系
- `delete:` 死代码、无用的灵活性、推测性功能。替代: 无,直接删。
- `stdlib:` 手搓的东西标准库就有。要写出函数名。
- `native:` 依赖或代码在做平台已支持的事。要写出特性名。
- `yagni:` 只有一个实现的抽象、没人设置的 config、只有一个调用方的层。
- `shrink:` 同样逻辑更少行数。给出更短写法。
示例:
L12-38: stdlib: 27-line validator class. "@" in email, 1 line, real validation is the confirmation mail.
L4: native: moment.js imported for one format call. Intl.DateTimeFormat, 0 deps.
repo.py:L88: yagni: AbstractRepository with one implementation. Inline it until a second one exists.
L30-44: shrink: manual loop builds dict. dict(zip(keys, values)), 1 line.
结尾只给一个指标:`net: -
边界:review/audit 只管过度工程与复杂度;正确性 bug、安全漏洞、性能问题明确不归它们管,走正常 review。只列清单,不动代码。
五、debt 用法
扫描命令(跳过 node_modules/.git/构建产物):
grep -rnE '(#|//) ?ponytail:' .
- 每个 `ponytail:` 注释 = 账本一行:`
: , <简化了什么>. ceiling: <上限>. upgrade: <复查触发条件>.` - 想加负责人:`git blame -L
, ` - 腐烂风险标记:没有写 upgrade path/trigger 的注释打 `no-trigger` 标签——这些会悄悄烂掉。
- 结尾统计 `
markers, with no trigger.` - 只读不改,想持久化时说一声,会写成 `PONYTAIL-DEBT.md`。
六、gain 记分牌
基准中位数(5 个日常任务 x 3 个模型,来源仓库 benchmarks/):
| 指标 | 无技能 | ponytail | 降幅 |
|---|---|---|---|
| 代码行数 | 100% | 6-20% | 降 80-94% |
| 成本 | 100% | 23-53% | 降 47-77% |
| 速度 | - | 3-6x | 更快 |
注意:禁止编造本仓库的节省数字——没写出来的版本不存在,没有真实基线可减。真实的仓库级数字只能来自 `/ponytail-debt` 的已计数账本。
七、基准数据
真实 agent 在真实仓库(tiangolo/full-stack-fastapi-template)上的 12 个功能任务,n=4,Haiku 4.5:
| vs 无技能基线 | LOC | tokens | cost | time | 安全 |
|---|---|---|---|---|---|
| ponytail | -54% | -22% | -20% | -27% | 100% |
| caveman(对照) | -20% | +7% | +3% | +2% | 100% |
| "YAGNI + 一行" 纯提示词 | -33% | -14% | -21% | -30% | 95% |
ponytail 是唯一所有指标都下降、且安全保持 100% 的。砍得最狠的正是过度构建陷阱(date picker 404 行到 23 行,color picker 287 行到 23 行)。
八、安装
以 OpenClaw 为例,仓库 `.openclaw/skills/` 下自带 6 个 SKILL.md,复制到技能目录即可:
cp -R .openclaw/skills/ponytail* ~/.openclaw/workspace/skills/
新会话(或重启 Gateway)后出现在可用技能列表。有 ClawHub 的话直接 `clawhub install ponytail`,配套技能同理。
简记。








COMMENTS | NOTHING