ponytail:基于 AI 代理的代码优化与精简工具项目

Makes your AI agent think like the laziest senior dev in the room. The best code is the code you never wrote.

分支36Tags15
文件最后提交记录最后更新时间
1 个月前
29 天前
1 个月前
29 天前
1 个月前
29 天前
29 天前
1 个月前
1 个月前
1 个月前
29 天前
1 个月前
1 个月前
2 个月前
1 个月前
1 个月前
1 个月前
2 个月前
29 天前
1 个月前
29 天前
1 个月前
1 个月前
29 天前
2 个月前
2 个月前
1 个月前
2 个月前
1 个月前
2 个月前
1 个月前
2 个月前
2 个月前
29 天前
2 个月前
29 天前
29 天前

Ponytail, the lazy senior dev

Ponytail

他一言不发,写下一行代码,问题解决。

Stars Release npm Works with 20 agents MIT license

DietrichGebert/ponytail | Trendshift DietrichGebert/ponytail | Trendshift

代码量减少约 54%(最高达 94%)· 成本降低约 20% · 速度提升约 27% · 安全性 100%
基于真实 Claude Code 会话对实际开源仓库(FastAPI + React)的编辑测试得出,对比未启用该功能的相同智能体。约 54% 为 12 项功能任务的平均值(Haiku 4.5,n=4);在智能体过度构建的场景(如日期选择器)中,代码量减少可达 94%,而在代码已达极简的情况下,减少量接近零。ponytail 保留了所有安全防护措施,而单纯的“编写单行代码”提示会丢失其中一项。(早期的单次基准测试报告中,80-94% 为单一数值;在公平的智能体基准测试中,这是单任务的上限,而非平均值。)完整报告 · 复现测试

西班牙语 · 韩语


Something's coming, join the waitlist

你认识他。留着长马尾,戴着椭圆形眼镜。在公司待的时间比版本控制系统还久。你给他看五十行代码,他看完一言不发,然后用一行代码取而代之。

Ponytail 将这位资深开发者融入你的 AI 智能体中。

之前/之后

你想要一个日期选择器。你的智能体安装了 flatpickr,编写了一个包装组件,添加了样式表,然后开始讨论时区问题。

使用 ponytail 后:

<!-- ponytail: browser has one -->
<input type="date">

examples/ 目录中包含更多实际案例。

数据指标

最真实的衡量方式是让智能体实际完成工作:在一个无头 Claude Code 会话中编辑 tiangolo 的 full-stack-fastapi-template(一个真实的 FastAPI + React 仓库),并根据其留下的 git diff 进行评分。测试包含 12 个功能需求,同一智能体分别在启用和未启用该技能的情况下进行,样本量 n=4,使用 Haiku 4.5 模型。

Each arm as a percent of the no-skill baseline across LOC, tokens, cost and time (Haiku 4.5). ponytail is lowest on every metric (LOC 46%, tokens 78%, cost 80%, time 73%); caveman rises above 100% on tokens, cost and time; yagni-oneliner LOC 67%. Safety, separate adversarial tier: baseline, caveman and ponytail 100%, yagni-oneliner 95%.

与无技能基线对比 代码行数 令牌数 成本 时间 安全性
ponytail -54% -22% -20% -27% 100%
caveman(简洁文本对照组) -20% +7% +3% +2% 100%
"YAGNI + 单行代码" 提示 -33% -14% -21% -30% 95%

ponytail 是唯一一个能降低所有指标的方案,也是唯一一个在实现这一点的同时保持完全安全的方案。在存在明显过度开发陷阱的场景中,代码缩减最为显著(日期选择器从 404 行减少到 23 行,颜色选择器从 287 行减少到 23 行,因为它使用了原生 <input> 而非组件),而对于已经非常精简的代码,缩减幅度几乎为零。完整方法、每项任务的详细表格以及局限性,请参见:benchmarks/results/2026-06-18-agentic.md

早期单轮生成数据(独立生成任务)

五项日常任务,三个模型,三种方案(无技能、caveman、ponytail),每组十次运行,取中位数报告。一个提示,一个输出,统计答案的代码行数:

Median lines of code per arm across Haiku, Sonnet and Opus

结果显示代码量减少 80-94%#126 中指出,基础模型的输出会包含冗余的解释性文本和选项,因此这一差距部分是对话式基线的产物。上文的智能体数据是经过修正的、更具说服力的版本。可通过 npx promptfoo eval -c benchmarks/promptfooconfig.yaml 复现单轮生成测试。

核心原则从来不是“最少令牌数”。而是:只编写任务所需的代码,绝不能削减验证、错误处理、安全性或可访问性相关的代码。最终代码之所以精简,是因为它是必要的,而非刻意追求代码高尔夫。对于遵循这一原则的模型而言,成本降低和延迟缩短只是附带效果;而对于那些在推理过程中花费大量令牌来权衡各个环节的简洁推理模型,结果可能恰恰相反(在 GPT-5.5 上就是如此)。

工作原理

在编写代码前,智能体(agent)会在第一个满足条件的环节停止:

1. Does this need to exist?   → no: skip it (YAGNI)
2. Already in this codebase?  → reuse it, don't rewrite
3. Stdlib does it?            → use it
4. Native platform feature?   → use it
5. Installed dependency?      → use it
6. One line?                  → one line
7. Only then: the minimum that works

这个阶梯会在理解问题之后才启动,而非取而代之:它会先读取变更所涉及的代码,追踪实际的执行流程,然后才选择具体步骤。在解决方案上可以偷懒,但在代码阅读上绝不含糊。

要偷懒,而非疏忽:信任边界验证、数据丢失处理、安全性和可访问性这些关键环节绝不能打折扣。

安装

这是 ponytail 唯一会麻烦你的地方:

Claude Code 和 Codex 插件会运行两个小型 Node.js 生命周期钩子,因此需要将 node 添加到你的 PATH 中(Nix/nvm 用户注意:必须添加到非交互式 shell 的 PATH 中)。如果未添加,相关功能仍可正常使用,只是常驻激活功能会保持静默,而非在每次提示时报错。

Claude Code

/plugin marketplace add DietrichGebert/ponytail
/plugin install ponytail@ponytail

(要使安装生效,您必须发送两个单独的提示)

在 Claude Code 桌面应用的“代码”选项卡中执行相同步骤:在提示框中输入上述两个 /plugin 命令,或点击提示框旁边的 + 按钮,选择 插件添加插件 以浏览您已配置的市场,并通过侧边栏中的 自定义 管理市场。

Codex

codex plugin marketplace add DietrichGebert/ponytail
codex plugin add ponytail@ponytail

运行 codex 并打开 /hooks,查看并信任其中的两个生命周期钩子,然后启动一个新线程。

此安装同时适用于 Codex 桌面应用:安装后重启应用,它会自动识别该插件。

GitHub Copilot CLI

copilot plugin marketplace add DietrichGebert/ponytail
copilot plugin install ponytail@ponytail

在交互式 Copilot CLI 会话中,请使用斜杠等效命令:

/plugin marketplace add DietrichGebert/ponytail
/plugin install ponytail@ponytail

Copilot CLI 按插件名称对插件命令进行命名空间划分。例如:

/ponytail:ponytail ultra
/ponytail:ponytail-review

Pi 智能体工具包

pi install git:github.com/DietrichGebert/ponytail

开放代码

添加至 opencode.json

{ "plugin": ["@dietrichgebert/ponytail"] }

改为从代码检出目录运行(插件会复用 hooks/skills/):

{ "plugin": ["./.opencode/plugins/ponytail.mjs"] }

在活动级别每轮注入规则集;添加 /ponytail 命令(参见命令)。OpenCode 还会自动加载此仓库的 AGENTS.md,因此即使不使用插件,规则依然有效。该插件新增了 lite/full/ultra/off 级别。

./ 路径会相对于您项目的 opencode.json 进行解析;若要在多个项目间共享一个检出版本,请将其指向 .mjs 的绝对路径(它会相对于自身文件查找 hooks/skills/ 目录)。

Gemini CLI

gemini extensions install https://github.com/DietrichGebert/ponytail

在每个会话中始终将规则集加载为上下文,并注册 /ponytail 命令;skills/ 目录也会一同加载,在任务需要时被激活。

Gemini 适配器特意不提供根目录下的 hooks/hooks.json 文件:Gemini 会自动加载该路径,而 Ponytail 的生命周期钩子使用 Claude/Codex 的事件名称。

Qoder

Qoder 会自动从仓库根目录加载 AGENTS.md 作为始终开启的上下文,因此从代码检出目录运行 ponytail 无需任何设置即可使用。对于每个项目的特定规则,请将 .qoder/rules/ponytail.md 复制到您项目的 .qoder/rules/ 目录中。六个 ponytail 技能(/ponytail/ponytail-review/ponytail-audit/ponytail-debt/ponytail-gain/ponytail-help)可通过 Qoder 的技能系统使用;位于 .qoder-plugin/plugin.json 的插件清单指向 skills/ 目录。

要获得完整的插件级支持(自动模式激活 + 在每个提示上注入规则集),请将 hooks/qoder-hooks.json 中的钩子添加到您的 .qoder/settings.json。将 PONYTAIL_DIR 替换为您的 ponytail 检出路径。Qoder 的 UserPromptSubmit 钩子会在第一个提示时激活默认模式,并在每一轮都注入规则集;带有 task|Task 匹配器的 PreToolUse 会将规则集注入子代理。级别切换(/ponytail lite|full|ultra|off)会自动生效。

Antigravity CLI

Google 正将 Gemini CLI 重命名为 Antigravity CLI(agy 二进制文件);相同的扩展程序也会安装到该 CLI 中:

agy plugin install https://github.com/DietrichGebert/ponytail

它会复用此仓库的 gemini-extension.json。一个区别是:Antigravity 会将 /ponytail 命令转换为技能,因此你可以在聊天中直接输入这些命令(例如发送消息 /ponytail-review),而无需从斜杠菜单中选择。在迁移完成前(约 2026 年 6 月 18 日),gemini extensions install 命令仍然有效。若要将其作为常驻规则运行,只需将规则集放入 .agents/rules/ 目录即可。

Hermes Agent

hermes plugins install DietrichGebert/ponytail --enable

安装后重启 Hermes。该插件会在每次 LLM 轮次前注入当前的 Ponytail 模式,将捆绑的技能注册为 ponytail:<skill>,并添加 /ponytail/ponytail-review/ponytail-audit/ponytail-debt/ponytail-gain/ponytail-help 命令。在共享网关中,通过 Hermes 斜杠命令访问控制将 /ponytail 限制为受信任用户;运行时模式为进程本地。

CodeWhale

从零开始,读取项目根目录下的 AGENTS.md。将 AGENTS.md 复制到你的项目中,或者从本仓库的检出目录运行 codewhale。就是这么简单。

Swival

首先在你的库中暂存集合,然后添加你需要的技能:

swival skills add --global https://github.com/DietrichGebert/ponytail  # stage into ~/.config/swival/library
swival skills add ponytail                                             # install the collection into this project
swival skills add --global ponytail                                    # or activate it in every project

Swival 还会读取项目根目录下的 AGENTS.md 以及全局的 ~/.config/swival/AGENTS.md,后者作为纯指令的备用方案。

在命令行中,使用 $ 前缀可显式激活技能。例如:$ponytail-review

Devin CLI

devin plugins install DietrichGebert/ponytail

将 ponytail 安装为 Devin 插件;技能可通过 /ponytail:ponytail/ponytail:ponytail-review 等方式使用。

OpenClaw

clawhub install ponytail

从 ClawHub 将 ponytail 作为 OpenClaw 技能安装;review、audit、debt、gain 和 help 技能的安装方式相同(例如 clawhub install ponytail-review 等)。OpenClaw 会将其应用于编码任务,并将其作为 /ponytail 命令公开。如果没有 ClawHub,请将 .openclaw/skills/ponytail 复制到 ~/.openclaw/skills/

就是这样。他会感到自豪的。但他不会说出来。

每次会话都会激活,并提供少量命令(参见 命令)。当代码库让你个人感到不满时,可以使用 /ponytail ultra。启动和模式更改文本会显示当前模式。

通过 PONYTAIL_DEFAULT_MODE 环境变量(lite/full/ultra/off)或 ~/.config/ponytail/config.json(Windows 上为 %APPDATA%\ponytail\config.json)中的 defaultMode 字段为每个新会话设置级别。默认值为 full

激活时,规则集还会注入到通过 Agent 工具生成的每个子代理中。要将其范围限定为特定代理类型(例如,对只读搜索代理禁用),请将 PONYTAIL_SUBAGENT_MATCHER 环境变量设置为一个正则表达式,用于测试子代理的 agent_type。该正则表达式未锚定且不区分大小写:explore|general 匹配其中任意一个,^general$ 表示精确匹配,插件代理类型的格式为 plugin:name。未设置时表示注入到所有子代理中(默认行为);如果正则表达式无效,或者平台未报告子代理的类型,也会回退到注入规则集。

Cursor、Windsurf、Cline、GitHub Copilot Chat(VS Code、JetBrains 和 Visual Studio 编辑器扩展,而非 安装 部分涵盖的独立 Copilot CLI)、Aider、Kiro、Zed、CodeWhale、Swival、Qoder:从本仓库复制匹配的规则文件(.cursor/rules/.windsurf/rules/.clinerules/.github/copilot-instructions.mdAGENTS.md.kiro/steering/.qoder/rules/)。

Kiro:将 .kiro/steering/ponytail.md 复制到 ~/.kiro/steering/(全局)或项目中的 .kiro/steering/

GitHub Copilot CLI 备用方案(仅指令模式):它会读取项目中的 AGENTS.md.github/copilot-instructions.md,或者将规则复制到 ~/.copilot/copilot-instructions.md 以在每个项目中运行 ponytail。此路径保持始终开启的指导,但不添加插件模式切换或钩子。

带有 Codex 扩展的 VS Code 会读取 AGENTS.md(本仓库已提供),因此无需设置即可在仓库根目录下工作(~/.codex/AGENTS.md 可使 Codex 全局生效)。

JetBrains Junie 可以读取 AGENTS.md,只需在设置 → 工具 → Junie → 项目设置 → 指南路径中指向该文件(目前尚未自动设置)。本仓库提供 AGENTS.md.junie/guidelines.md 是 Junie 的旧路径。

Amp (Sourcegraph) 会从工作目录及其父目录(直至 $HOME)读取 AGENTS.md(本仓库已提供),因此无需设置即可使用(~/.config/amp/AGENTS.md 可全局生效)。

Jules (Google) 会从仓库根目录读取 AGENTS.md(本仓库已提供),因此无需设置即可应用规则集。

哪些文件对应哪些代理:代理可移植性

卸载

宿主 命令
Claude Code /plugin remove ponytail
Codex codex plugin remove ponytail
Devin CLI devin plugins remove ponytail
Pi agent pi uninstall ponytail
Cursor / Windsurf / Cline / Qoder / 等 删除复制的规则文件

这些命令会移除插件自身的文件。但会留下少量 ponytail 写入插件文件夹外的状态数据:模式标志、~/.config/ponytail/config.json,以及(如果您接受了设置提示)~/.claude/settings.json 中的 statusLine 条目。运行 node scripts/uninstall.js 可以一并清理这些内容。请在执行上述宿主移除命令之前运行此脚本——该脚本本身是插件文件,因此先移除插件会将其删除(或者从该仓库的单独克隆中运行它)。只有当 statusLine 条目指向 ponytail 自己的脚本时,它才会被移除,因此您自行设置的状态栏内容不会受到影响。

命令

命令 功能描述
/ponytail [lite | full | ultra | off] 设置强度级别或关闭功能。不带参数时报告当前级别。
/ponytail-review 检查当前差异,找出过度设计之处,并返回建议删除的列表。
/ponytail-audit 审计整个仓库的过度设计情况,而不仅仅是差异部分。
/ponytail-debt 将您延迟处理的 ponytail: 快捷指令收集到一个分类账中,确保“稍后处理”不会变成“永远不处理”。
/ponytail-gain 显示基准测试中测量到的影响分数板(代码更少、成本更低、速度更快)。
/ponytail-help 上述命令的快速参考指南。

命令需要具备技能功能的宿主(Claude Code、Codex、Devin CLI、OpenCode、Gemini、pi、Swival、Hermes Agent、Qoder)。在 Codex 中,它们是技能,需使用 @ 调用(如 @ponytail-review)。仅含指令的适配器(Cursor、Windsurf、Cline、Copilot、Kiro、Antigravity)会加载始终启用的规则集,但不包含命令功能。

开发

修改精简规则文本时,请保持代理副本的一致性:

node scripts/check-rule-copies.js
npm test

OpenClaw 技能包(.openclaw/skills/)由 skills/ 生成;修改技能后,请重新运行 node scripts/build-openclaw-skills.js,如果技能包过时,测试套件将无法通过。要将技能发布到 ClawHub,需先运行一次 clawhub login,然后执行 node scripts/publish-openclaw-skills.js(它会以 package.json 中的版本号发布所有六个技能;传递 --dry-run 参数可预览发布内容)。

正确性基准测试会启动 Python 来进行电子邮件和 CSV 检查;系统会先尝试使用 python3,再尝试 python。CSV 检查需要在本地安装 pandas

常见问题

我可以将它与 caveman 一起使用吗? 可以,而且推荐这样做。Caveman 精简智能体的输出文本,而 ponytail 精简智能体构建的代码。两者各有所长,互不重叠:caveman 会保持代码字节级精确,ponytail 则不会干预文本内容。用简洁的语言讨论极简的代码。

它需要配置文件吗? 不需要。您可以选择通过 ~/.config/ponytail/config.json 文件或 PONYTAIL_DEFAULT_MODE 环境变量来设置默认级别,但这并非必需。

如果我确实需要那个 120 行的缓存类怎么办? 你其实不需要。但如果你坚持要,它也会生成。过程会很慢,但代码会是正确的。而且它会一边写一边盯着你。

它能扩展吗? 你从未编写的代码具有无限的扩展性。零 bug、零漏洞,从始至终保持 100% 正常运行时间。

为什么叫“ponytail”? 你心里清楚为什么。

赞助商

GreenPT

许可证

MIT。这是能正常生效的最短许可证。

星标历史

Star History Chart

项目介绍

让你的AI代理像房间里最懒的资深开发者一样思考。最好的代码,是你永远不用写的代码。【此简介由AI生成】

定制我的领域
319128.17 K6.86 K访问 GitHub