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

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

分支40Tags15
文件最后提交记录最后更新时间
2 个月前
1 个月前
2 个月前
1 个月前
2 个月前
1 个月前
1 个月前
1 个月前
2 个月前
2 个月前
2 个月前
1 个月前
2 个月前
2 个月前
19 天前
2 个月前
2 个月前
1 个月前
3 个月前
1 个月前
2 个月前
1 个月前
2 个月前
2 个月前
1 个月前
3 个月前
3 个月前
2 个月前
3 个月前
22 天前
22 天前
19 天前
2 个月前
2 个月前
1 个月前
3 个月前
1 个月前
1 个月前
1 个月前

Ponytail,最懒的资深工程师

Ponytail

他不多话。只写一行。直接能跑。

DietrichGebert%2Fponytail | Trendshift

星标 版本 npm 支持 20 个智能体 MIT 许可证

DietrichGebert/ponytail | Trendshift DietrichGebert/ponytail | Trendshift DietrichGebert%2Fponytail | Trendshift 月度排名

代码量减少约 54%(最高 94%)· 成本降低约 20% · 速度提升约 27% · 100% 安全
在真实的 Claude Code 会话中编辑一个真实开源仓库(FastAPI + React)时测得,并与未启用技能的同一智能体对比。~54% 是 12 个功能任务的平均值(Haiku 4.5,n=4);当智能体过度构建时(例如日期选择器)可达 94%,而当代码已经极简时则接近零。ponytail 保留所有安全护栏,而仅使用“只写一行代码”的提示词会缺失其中一项。(此前的一次性基准测试将 80-94% 报告为统一数值;对照公平的智能体基线,这是单任务上限,而非平均值。) 完整报告 · 复现方法。

Español · 한국어


有新东西即将上线,加入等待名单

已使用 Ponytail 构建

Retriever

你认识他。一条长马尾,一副椭圆形眼镜。他在公司的年头比版本控制还长。你拿五十行代码给他看,他扫一眼,一言不发,然后换成一行。

Ponytail 会把“他”装进你的 AI agent 里。

之前 / 之后

你要一个 date picker。你的 agent 会安装 flatpickr,写一个封装组件,加一份样式表,然后开始讨论时区。

有了 ponytail:

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

还有更多幸存示例见 examples/。

数据

真正诚实的测量方式,是让真实智能体执行真实工作:一个无界面的 Claude Code 会话编辑 tiangolo's full-stack-fastapi-template(一个真实的 FastAPI + React 仓库),并以它留下的 git diff 作为评分依据。十二个功能工单,同一个智能体分别开启技能和无技能,n=4,Haiku 4.5。

每个实验组相对于无技能基线的百分比,覆盖 LOC、tokens、成本和时间(Haiku 4.5)。ponytail 在所有指标上最低(LOC 46%,tokens 78%,成本 80%,时间 73%);caveman 在 tokens、成本和时间上高于 100%;yagni-oneliner 的 LOC 为 67%。安全是单独的对抗层级:基线、caveman 和 ponytail 均为 100%,yagni-oneliner 为 95%。

相比无技能基线 LOC tokens 成本 时间 安全
ponytail -54% -22% -20% -27% 100%
caveman(简洁文字对照组) -20% +7% +3% +2% 100%
“YAGNI + one-liners” 提示词 -33% -14% -21% -30% 95%

ponytail 是唯一在每项指标上都下降的实验组,也是唯一做到这一点的同时保持完全安全的组。降幅最大的是那些真正存在过度实现陷阱的地方(日期选择器从 404 行降到 23 行,颜色选择器从 287 行降到 23 行,因为它直接使用原生 <input> 而不是组件);对于本来已经极简的代码,降幅几乎为零。完整方法、逐任务表格以及局限性:benchmarks/results/2026-06-18-agentic.md。

较旧的单次数据(隔离生成)

五个日常任务、三个模型、三个实验组(无技能、caveman、ponytail),每组运行十次,报告中位数。一次提示、一次补全,按答案的行数统计:

各实验组在 Haiku、Sonnet 和 Opus 上的中位代码行数

这显示出 少 80-94% 的代码。#126 合理地指出,裸模型基线会用文字和选项填充答案,因此这种差距部分是对话式基线造成的假象。上面的智能体数据是修正后、可辩护的版本。可使用 npx promptfoo eval -c benchmarks/promptfooconfig.yaml 复现单次运行。

规则从来不是“最少的 tokens”。 而是:只写任务真正需要的内容,绝不削减校验、错误处理、安全性或可访问性。代码之所以变小,是因为它必要,而不是因为被压到最短。对于遵循这套阶梯的模型,更低的成本和延迟只是附带结果;而一个风格简练却消耗思考 token 反复权衡每一级的推理模型,方向可能相反(在 GPT-5.5 上确实如此)。

工作原理

在编写代码之前,智能体会停在第一个可行的层级:

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 桌面应用的 Code 选项卡中,步骤相同:将上文的两条 /plugin 命令输入到提示框中,或点击旁边的 + 按钮,选择 Plugins → Add plugin 以浏览已配置的市场,并在侧边栏的 Customize 中管理市场。

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

在 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 的 Skill 系统使用;位于 .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 二进制文件);相同的扩展也可以安装在那里:

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/。

Grok Build

grok plugin install DietrichGebert/ponytail --trust

启用该插件(默认关闭):/plugins → 插件 → 对 ponytail 按空格键,或在 ~/.grok/config.toml 中:

[plugins]
enabled = ["ponytail"]

开始一个新的会话(或重新加载插件)。技能会显示为 /ponytail、/ponytail-review、/ponytail-audit、/ponytail-debt、/ponytail-gain、/ponytail-help。使用 grok inspect 验证。Grok 可以根据其技能描述,在编码任务中自动调用 ponytail;当需要显式激活时,请使用 /ponytail(或 /ponytail lite、/ponytail full、/ponytail ultra)。不使用 Grok 生命周期钩子,因为其 SessionStart 输出无法注入指令。

即使在没有插件的检出目录中,AGENTS.md 仍可仅以指令方式工作。

就是这些。他会满意的。但他不会说出来。

每次会话均会激活,并提供一组命令(参见 命令)。当代码库与你私仇深重时,可以使用 /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.md、AGENTS.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 可在 Settings → Tools → Junie → Project Settings → Guidelines Path 中指定路径后读取 AGENTS.md(目前还不是自动行为)。本仓库已提供 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
Grok Build grok plugin uninstall 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 自带脚本时,它才会移除该条目,因此你自己配置的 statusline 不会被改动。

命令

命令 功能
/ponytail [lite | full | ultra | off] 设置强度,或将其关闭。不带参数时,会报告当前级别。
/ponytail-review 检查当前 diff 中是否存在过度设计,并返回一份可删除清单。
/ponytail-audit 对整个仓库进行过度设计审查,而不仅是 diff。
/ponytail-debt 将你延后处理的 ponytail: 快捷标记汇总到台账中,避免“以后”变成“永不”。
/ponytail-gain 展示来自基准测试的量化成效记分板(代码更少、成本更低、速度更快)。
/ponytail-help 上述命令的快速参考。

这些命令需要支持 skill 的宿主(Claude Code、Codex、Devin CLI、OpenCode、Gemini、pi、Swival、Hermes Agent、Qoder、Grok Build)。在 Codex 中,它们是 skill,使用 @ 调用(@ponytail-review)。仅指令型适配器(Cursor、Windsurf、Cline、Copilot、Kiro、Antigravity)会加载常驻规则集,但不包含这些命令。

开发

当修改精简规则文本时,请确保各 agent 副本保持一致:

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 中的版本一次性发布全部 6 个技能;传入 --dry-run 可预览)。

正确性基准测试会启动 Python 进程,用于执行邮件和 CSV 检查;会优先尝试 python3,再尝试 python。CSV 检查需要本地安装 pandas。

常见问题

能否与 caveman 一起使用? 可以,而且你应该这么做。Caveman 精简智能体的表达;ponytail 精简它构建的产物。各占一半,互不重叠:caveman 让代码逐字节保持原样,ponytail 不碰文字表达。用最简短的话,谈论极简代码。

需要配置文件吗? 不需要。可选的 ~/.config/ponytail/config.json 或 PONYTAIL_DEFAULT_MODE 环境变量可用于设置默认级别,但没有任何必填项。

如果我确实需要那个 120 行的缓存类呢? 你不需要。可如果你仍坚持,它会把它写出来。慢慢地。正确地。一边看着你。

可扩展吗? 你从未写过的代码可以无限扩展。零缺陷,零 CVE,从始至终保持 100% 正常运行时间。

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

赞助商

GreenPT

许可

MIT。最短却管用的许可协议。

星标历史

星标历史图表

项目介绍

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

定制我的领域
353146.41 K7.87 K访问 GitHub