Ponytail 技能组使用简记

发表于 15 小时前  19 次阅读


文章目录

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: - lines possible.` 没什么可删就说 `Lean already. Ship.`

边界: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 无技能基线LOCtokenscosttime安全
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`,配套技能同理。

简记。

本站文章基于国际协议BY-NA-SA 4.0协议共享;
如未特殊说明,本站文章皆为原创文章,请规范转载。

0

scanz个人博客