Ponytail教程 – AI 编程 Agent 精简代码实战详解
发布于 2026-06-26 · 今天发点适合写代码的东西。 写项目的时候,刚开始代码都很清爽:两个页面、三个接口、几段工具函数,目录一眼能看完。
今天分享一点适合写代码时用的东西。
刚写项目的时候,代码往往都很清爽:两个页面、三个接口、几段工具函数,目录一眼就能看完。
可功能一多,就开始又是加 wrapper、又是塞 options,功能没涨多少,代码量却翻了好几倍。
不过,只要你用上 GitHub 上这个 Ponytail(马尾辫)项目,AI 写出来的代码会一下子变得精简很多。
01. 项目简介
Ponytail 是一套开源的 AI 编程代理规则集和插件系统。
项目地址:https://github.com/DietrichGebert/ponytail
它能让 Claude Code、Codex 等 AI coding agent 在写代码时,优先选择最小、最直接、也最不容易留下维护债的实现方式。
Ponytail 会让 AI agent 在动手写代码之前,先走一遍固定的判断链:
- 这个功能真的有必要存在吗?没必要就直接跳过。
- 标准库已经能解决吗?能,就直接用标准库。
- 浏览器、数据库、操作系统或框架的原生能力能解决吗?能,就用原生能力。
- 项目里已有的依赖能解决吗?能,就复用已有依赖。
- 一行代码就能搞定吗?能,那就写成一行。
- 以上都不行,再写一个能正常工作的最小实现。
Ponytail 还提供了几个常用命令,专门用来处理代码复杂度问题。
/ponytail-review 负责审查过度设计。它会指出哪些代码可以删除、内联,或者直接换成标准库和平台原生能力。
/ponytail-audit 负责扫描整个仓库。它会找出那些抽象过头、依赖过重、配置过多、文件拆得过碎的地方。
/ponytail-debt 负责整理技术债。它会收集代码里的 ponytail: 注释,把当初为什么选择简化、以后什么时候需要升级,整理成一份清单。
/ponytail-help 负责显示速查信息。它会列出可用命令、模式切换方式和基本用法。
Ponytail 在保证代码简洁的同时也有自己的边界:它不会为了少写代码,就删掉信任边界上的输入校验、防止数据丢失的错误处理、安全措施、可访问性要求,以及用户明确要求的功能。
02. 项目实测
Ponytail 安装后会自动生效。Claude Code 和 Codex 会在每个新会话启动时,通过 lifecycle hook 把规则注入上下文。项目分为 4 种模式,通过 /ponytail 命令在 lite、full、ultra、off 之间切换,默认是 full。
case 1 代码减少测试
不用Ponytail:
提示词:
【测试组】Baseline
【运行环境】
只允许修改:
D:\360MoveData\Users\win\Desktop\蒸馏\full-stack-fastapi-template-baseline
目录不存在时,从 https://github.com/fastapi/full-stack-fastapi-template 克隆,并检出 cd83fc1。
开始前确认 HEAD 为 cd83fc1,git status –short 为空。
使用全新线程、独立 node_modules、独立 Python 虚拟环境和独立构建缓存。
确认 Ponytail 插件、hook、Skill 和 Ponytail 规则均未加载。不要用 @ponytail off 代替环境隔离。
不得读取或复制 full-stack-fastapi-template-ponytail 中的代码。
无法满足任一条件时停止执行,不要修改代码,并报告“Baseline 环境无效”。
【开发任务】
为 full-stack-fastapi-template 增加可选的 due_date 日期字段。
- 在 frontend/src/components/Items/AddItem.tsx 的 Item 创建表单中加入 due_date 日期选择控件。
- 在 frontend/src/components/Items/EditItem.tsx 的 Item 编辑表单中加入 due_date 日期选择控件。
- 在 backend/app/models.py 中为 ItemBase、ItemCreate、ItemUpdate 和 ItemPublic 增加 due_date。
- 在 backend/app/alembic/versions/ 中新增数据库迁移,为 item 表加入可空的 due_date 日期列。
- 使用 full-stack-fastapi-template 现有生成流程更新 frontend/src/client/ 中的 Item 类型。
- 在 frontend/tests/items.spec.ts 中测试日期选择、修改和清空。
- 在 backend/tests/api/routes/test_items.py 中测试 due_date 的创建、读取、更新和清空。
- due_date 使用 YYYY-MM-DD 格式,不包含时间和时区。
- 遵循 full-stack-fastapi-template 现有代码风格并运行相关测试。
按 AI coding agent 的默认方式完成需求,不引用 Ponytail,不加入“少写代码”“优先一行实现”等额外要求。
【结果记录】
完成后运行 git diff –numstat、git diff –stat 和 git status –short。
统计新增行数、删除行数、修改文件数、新增依赖数、测试结果、耗时和 token 消耗。
无法获取耗时或 token 时填写 unavailable。
测试报告不得写入 full-stack-fastapi-template-baseline。
将测试报告保存到:
D:\360MoveData\Users\win\Desktop\蒸馏\ponytail-ab-results\baseline.md
使用 Ponytail(full 模式):
提示词:
@ponytail full
【测试组】Ponytail Full
【运行环境】
只允许修改:
D:\360MoveData\Users\win\Desktop\蒸馏\full-stack-fastapi-template-ponytail
目录不存在时,从 https://github.com/fastapi/full-stack-fastapi-template 克隆,并检出 cd83fc1。
开始前确认 HEAD 为 cd83fc1,git status –short 为空。
使用全新线程、独立 node_modules、独立 Python 虚拟环境和独立构建缓存。
确认 Ponytail 插件和 lifecycle hook 已启用,Ponytail 当前模式为 full。
Claude Code 使用 /ponytail full,Codex 使用 @ponytail full。
不得读取或复制 full-stack-fastapi-template-baseline 中的代码。
无法满足任一条件时停止执行,不要修改代码,并报告“Ponytail 环境无效”。
【开发任务】
为 full-stack-fastapi-template 增加可选的 due_date 日期字段。
- 在 frontend/src/components/Items/AddItem.tsx 的 Item 创建表单中加入 due_date 日期选择控件。
- 在 frontend/src/components/Items/EditItem.tsx 的 Item 编辑表单中加入 due_date 日期选择控件。
- 在 backend/app/models.py 中为 ItemBase、ItemCreate、ItemUpdate 和 ItemPublic 增加 due_date。
- 在 backend/app/alembic/versions/ 中新增数据库迁移,为 item 表加入可空的 due_date 日期列。
- 使用 full-stack-fastapi-template 现有生成流程更新 frontend/src/client/ 中的 Item 类型。
- 在 frontend/tests/items.spec.ts 中测试日期选择、修改和清空。
- 在 backend/tests/api/routes/test_items.py 中测试 due_date 的创建、读取、更新和清空。
- due_date 使用 YYYY-MM-DD 格式,不包含时间和时区。
- 遵循 full-stack-fastapi-template 现有代码风格并运行相关测试。
只应用 Ponytail Full 已加载的规则,不追加其他 YAGNI、一行实现或精简提示。
【结果记录】
完成后运行 git diff –numstat、git diff –stat 和 git status –short。
统计新增行数、删除行数、修改文件数、新增依赖数、测试结果、耗时和 token 消耗。
无法获取耗时或 token 时填写 unavailable。
测试报告不得写入 full-stack-fastapi-template-ponytail。
将测试报告保存到:
D:\360MoveData\Users\win\Desktop\蒸馏\ponytail-ab-results\ponytail.md
在这一轮对比中,Baseline 组新增 225 行代码,Ponytail Full 组新增 149 行——Ponytail 让总新增代码减少了约 34%,修改文件也从 10 个降到 8 个。这已经足以说明,Ponytail 能够有效减少需求之外的功能、重复校验和不必要的改动。
case 2 项目审查
提示词:
/ponytail-review
请只审查过度设计,不要重写代码。重点找出可以删除、内联、替换成标准库或浏览器原生能力的地方。
审查这段 React 代码:
import { useState } from “react”;
import dayjs from “dayjs”;
class DateInputAdapter {
constructor(formatter) {
this.formatter = formatter;
}
normalize(value) {
return this.formatter(value);
}
}
const createDateFormatter = () => {
return (value) => dayjs(value).format(“YYYY-MM-DD”);
};
export function BirthdayPicker() {
const [date, setDate] = useState(“”);
const adapter = new DateInputAdapter(createDateFormatter());
function handleChange(event) {
const normalized = adapter.normalize(event.target.value);
setDate(normalized);
}
return (
<input
type=”text”
placeholder=”YYYY-MM-DD”
value={date}
onChange={handleChange}
/>
);
}
Ponytail 准确找出了预埋的四处过度设计,标出了行号、问题类型和修改方向,没有跑去讨论命名、代码风格或异常处理,完全符合 /ponytail-review“只审查过度设计”的定位。
case 3 仓库检查
在这个 case 里,仓库被故意塞入了单实现接口、工厂、适配器、管理器、Facade、多余配置和可替换依赖,用来检验它能不能查出来。
提示词:
/ponytail-audit
请扫描/D:/360MoveData/Users/win/Desktop/蒸馏/ponytail-case2-audit仓库,只找复杂度浪费。输出时按文件列出问题,并说明每处复杂度可以怎样减少。
重点检查这些问题:
- 为单一实现创建 interface、factory、manager、adapter。
- 为简单数据转换引入第三方依赖。
- 为未来可能出现的需求预留配置。
- 多个文件之间只有一层转发,没有真实逻辑。
- 能用标准库、框架能力、数据库能力完成,却手写了一套逻辑。
不要做业务功能审查,不要检查代码风格,只关注 Ponytail 关心的过度设计。
Ponytail 给出的 13 条发现,基本覆盖了 Case 3 预埋的过度设计问题,而且没有误删 CSV 转义、JSON 读取和自动测试。找得全,建议也足够具体。
case 4 收集技术债
提示词:
/ponytail-debt
请收集/D:/360MoveData/Users/win/Desktop/蒸馏/ponytail-case3-debt仓库里的 ponytail: 注释,整理成技术债清单。
请按下面格式输出:
– 文件路径
– 注释原文
– 当时选择简化的原因
– 未来需要升级的触发条件
– 当前是否需要处理
请特别关注下面几类注释:
// ponytail: keep native date input until timezone support is required
// ponytail: inline this mapper until a second provider appears
// ponytail: use in-memory cache until requests exceed 1000/min
// ponytail: avoid queue dependency until retry semantics are needed
不要添加代码里没有的技术债。
Ponytail 把 5 条 ponytail 注释全部找了出来,文件和行号都很准确,每条记录也都拆出了简化原因、升级条件和当前状态。
03. 挖一挖
Claude Code、Codex 正在接管越来越完整的开发任务。
代码生成速度提上来之后,每次改动所带来的审查、验证和维护成本也随之上升。DORA 2025 调查显示,已有 90% 的受访者在工作中使用 AI,比 2024 年增加了 14.1%;但与此同时,AI 使用程度的提高,却与软件交付不稳定性的上升相关。
Ponytail 可以缩短 MVP 的开发和返工时间,减轻代码审查的压力,还能作为一套固定的 AI 编码规则,抑制无意义的依赖、抽象和文件膨胀。
不过 34% 只是一次本地测试的结果,不能直接套用到所有代码库上。当原有实现已经足够精简时,Ponytail 很难再进一步压缩代码;只有当需求里本就存在原生能力、重复封装或过度设计时,Ponytail 才会拉开明显差距。
说到底,Ponytail 的价值,还是落在减少后续的维护、审查和返工成本上。






0 条评论
暂无评论,来抢沙发。