Ponytail(DietrichGebert/ponytail):一份 53 行的「懒惰资深程序员」提示词,让编码智能体少写一半代码

一、导读

每个用过编码智能体的人都见过它:让它加个日期选择器,它给你装一个日历库或者手搓一个组件,335 行;而仓库里现成的 Input 组件加上浏览器原生 type="date",10 行就够了。Ponytail 把这种「仓库里待得比版本控制还久、什么都不说、把你五十行换成一行的懒惰资深程序员」装进了智能体:它本体只是一份 53 行的提示词,却在 GitHub 上拿下 17.3 万星,10 月 23 日单日再涨 1949 星,同时挂着 Trendshift 日榜、周榜、月榜 JavaScript 第一。本文拆开它的架构、机制与基准数据,看看一份纯文本规则凭什么管住模型。

二、项目速览

项目 信息
仓库 DietrichGebert/ponytail(MIT License)
定位 面向编码智能体的「极简纪律」技能:最少的能完整解决问题的代码
当日涨星 1949 星(GitHub daily trending 第 2 名,2026-10-23)
总星数 172,918 星(截至 2026-10-23),仓库创建于 2026-06-12
当前版本 v5.3.2(2026-10-16 发布),提交活跃至 10-18
本体规模 核心规则 SKILL.md 53 行 + AGENTS.md 33 行;仓库 214 个文件,其余为约 20 个智能体宿主的适配层
支持宿主 Claude Code、Codex、Copilot CLI、Cursor、OpenCode、Gemini CLI、Devin CLI、Kimi Code、Qoder、Qwen Code、Antigravity、Cline、Windsurf 等
官方基准 39 任务 × 5 次 × 3 臂共 585 个无头会话:代码 −53%、成本 −26%、时间 −41%,隐藏检查通过率 96.7%(无技能 95.6%)
第三方实测 JetBrains(2026-07,80 对配对任务):成本 −10.3%(p=0.004 显著),代码量中位 −15.4%,质量无统计学差异
安装方式 Claude Code /plugin marketplace add DietrichGebert/ponytail + /plugin install ponytail@ponytail;其他宿主详见 INSTALL.md

三、为什么是它:单日 1949 星的四重动因

动因一:踩中了 vibe coding 时代最普遍的痛。 2026 年编码智能体已经普及,随之而来的是「AI 味膨胀代码」——没人要求的抽象层、防御性包装、为一个函数引入的依赖。Ponytail 给这种情绪一个具象的人格和一个可安装的开关,README 里那句「你没写过的代码才是最好的代码」本身就是传播素材。

动因二:v5 重构把「自己人先吃狗粮」做成了数字。 2026 年 10 月发布的 Ponytail 5 不是加功能,而是删规则:官方基准显示新版比上一版再省 10.6% 代码信息量、10.8% 成本,而仓库自己的说明是「−53% 代码、−41% 时间、−26% 成本、−45% token」。更难得的是带安全兜底:98% 的风险逻辑带测试交付(无技能时只有 68%),6 个安全任务 30 轮全过。

动因三:基准方法论罕见地透明,还公开自曝过翻车。 基准报告写明了统计口径(每任务 5 次取中位、臂对基线比值取几何均值、95% bootstrap 区间),并且主动披露早期版本在 ponytail 仓库内跑测试导致模型看到自家 commit message 的污染 bug,声明旧数据全部作废。第三方 JetBrains 实测虽然把效果幅度打了对折,但确认了成本下降有统计显著性——这在同类「省 token」技能里是第一个。

动因四:分发策略上把「一份提示词」做成了全平台插座。 作者没有把项目绑死在 Claude Code 上,而是为核心规则配了约 20 个宿主的适配层:Claude Code 与 Codex 走完整插件(含钩子),Copilot CLI、OpenCode、Gemini CLI、Devin CLI、Kimi Code、Qoder、Qwen Code 各有专属安装命令,连只认规则文件的 Cursor、Windsurf、Cline 也能通过复制 AGENTS.md 获得无命令的常驻规则。README 提供西班牙语、韩语、简体中文、日语四语版本,npm 包 @dietrichgebert/ponytail 让 OpenCode 一条命令安装。对用户来说这是一次学习、处处可用;对传播来说,每个宿主的用户群都是一个入口,星数自然滚雪球。

四、架构原理

4.1 一份提示词加一圈适配层

Ponytail 架构手绘信息图:行为核心 SKILL.md 与 AGENTS.md、约 20 个智能体宿主的适配层、三条生命周期钩子、五个命令与 band/board 本地度量闭环

Ponytail 的架构是「行为规范与宿主适配彻底分离」:skills/ponytail/SKILL.md 是唯一的行为核心,33 行的 AGENTS.md 是它的等价压缩版;仓库里其余 200 多个文件全是把这份规则装进不同智能体的「插头」——每个宿主一套 plugin.json 清单、一套命令定义(commands/*.toml)、一套生命周期钩子配置(hooks/*.json)。官方文档自己总结:「Ponytail 是一份提示词,其余一切都是把它装进不同智能体的方式。」

graph TB
    subgraph 核心["行为核心(宿主无关)"]
        SKILL["SKILL.md<br/>53 行规则:六层决策梯子 + 三档强度 + 永不裁剪清单"]
        AGENTS["AGENTS.md<br/>等价压缩版,喂给只读规则文件的宿主"]
    end
    subgraph 适配["宿主适配层(每家一套插头)"]
        M1["Claude Code<br/>.claude-plugin + commands + hooks"]
        M2["Codex<br/>.codex-plugin + 两个生命周期钩子"]
        M3["Cursor / Copilot / Gemini / OpenCode / Kimi…<br/>规则文件或扩展适配"]
    end
    subgraph 注入["三条生命周期钩子(Node)"]
        H1["SessionStart<br/>会话启动激活默认模式"]
        H2["SubagentStart<br/>把规则注入子智能体"]
        H3["UserPromptSubmit<br/>逐轮跟踪模式状态"]
    end
    subgraph 度量["本地度量工具"]
        BAND["band 状态带<br/>成本 / token / 复用率 / 测试状态"]
        BOARD["board 本地面板<br/>~/.config/ponytail/band/"]
        MAP["复用检测<br/>git grep + 每语言正则"]
    end
    SKILL --> AGENTS
    SKILL --> M1 & M2 & M3
    M1 --> H1 & H2 & H3
    M2 --> H1 & H3
    M1 --> BAND --> BOARD
    BAND --> MAP

这个分层解释了一个关键数字为什么可能:JetBrains 实测发现,把 SKILL.md 放进 skills 目录让它「自主激活」,10 个会话里激活了 0 次——规则文本不会自己挤进上下文。真正起作用的是插件模式的 SessionStart 钩子在会话启动时把规则注入,SubagentStart 钩子保证主智能体派生的子任务也带着同一份纪律。提示词工程的「注入时机」和「注入内容」同样重要,这是这份 53 行文本之外最值得学的工程细节。

4.2 核心机制:六层决策梯子

规则的全部机制可以浓缩成一段话:理解任务之后、写代码之前,从上往下爬梯子,停在第一级站得住的横档上。SKILL.md 原文如下:

1. 它需要存在吗?没人要求的功能、选项和灵活性一律跳过,并用一行话点名。
2. 代码库里已经有吗(helper、组件、服务、模式)?照周围代码的用法用。
3. 标准库或平台原生特性能做吗?除非项目有自己的实现。
4. 已安装的依赖里有吗?绝不为几行代码新加依赖。
5. 能写成读者一眼看懂的一行吗?就写一行。
6. 都不行:写能跑的最小实现;有逻辑(分支、循环、解析、金钱、安全)就补一个小测试。

梯子之外还有四条配套纪律,合起来才构成完整的行为闭环:

  • 懒在方案,不懒在改动。 规则明确要求「把任务需要的每一部分做完,包括你的改动会弄坏的调用方、测试和夹具」;修 bug 前先 grep 所有调用方、在共享代码里一次修根因。这防止「极简」滑向「偷工」。
  • 永不裁剪清单。 信任边界校验、防数据丢失的错误处理、安全、无障碍、真实硬件需要的校准、用户明确要求的东西,全部不在精简范围内。README 原话:「规则从来不是『最少 token』,而是只写任务需要的东西,且绝不砍校验。」
  • 债务显式化。 已知局限的捷径必须留 shortcut: <限制>, <何时升级> 格式的注释,/ponytail-debt 命令把散落各处的捷径收进一本台账,让「以后再说」不会变成「永远不做」。
  • 回复必须自首。 每次回复以一两行收尾:跳过了什么、没查什么、有什么风险。JetBrains 的盲评判官特别点名这条是 Ponytail 5 回复明显优于旧版的主因(110 : 67,p=0.002)。

三档强度把这个行为做成可调的旋钮:lite 按要求做、只用一行话提示存在更小的方案;full 是默认档;ultra 会在动手前质疑请求本身——需求站不住的部分先顶回去。另有 off 关闭整个模式。

4.3 度量闭环:复用率是怎么算出来的

Ponytail 5.3 的 band 状态带(Claude Code 2.1.290+ 输入框上方的一行仪表)把「懒」变成了可见数字:当前任务成本、token、agent 时间、复用率(复用已有代码而不是新写的比例)和最近一次改动后测试是否通过。复用率的实现值得看,hooks/band/metrics.ts 大约一百行纯函数:

// 只认每语言顶层定义,正则而非解析器;tests、vendored、生成代码不算「复用」
const SKIP_DIR = /(^|\/)(node_modules|\.git|dist|build|out|vendor|tests?|__tests__|spec)(\/|$)/
const DEFS: [RegExp, RegExp[]][] = [
  [/\.py$/, [/^(?:async\s+)?def\s+([A-Za-z]\w*)/gm, /^class\s+([A-Za-z]\w*)/gm]],
  [/\.[cm]?[jt]sx?$/, [/^export\s+(?:default\s+)?(?:async\s+)?(?:function\*?|class|const|let|var)\s+([A-Za-z_$][\w$]*)/gm]],
  [/\.go$/, [/^func\s+(?:\([^)]*\)\s+)?([A-Za-z]\w*)/gm]],
]
// diff 出新增行,再看新增代码调用了哪些「库内已知定义」,
// 排除自己刚定义的名字和 main/get/set 这类泛化名

这段代码自己就带着一条 shortcut: regex, not a parser 注释——工具用自己鼓吹的方式写自己。也正因为是正则,嵌套定义和动态定义会漏计,作者在注释里如实标注了这一点。

4.4 数字:官方基准与第三方复测

官方基准(2026-10-07,Opus 5.5,Claude Code CLI 2.1.288,39 个任务 × 每任务 5 次 × 3 个对照臂,共 585 个无头会话,Bash 全程禁用、测试由基准跑)给出了迄今最完整的一组数:

指标(vs 无技能) Ponytail 4.13 Ponytail 5
交付代码行数 −48% −53%(95% CI −63~−41)
代码信息量(gzip) −34% −41%
输出 token −43% −45%
单会话成本 −16% −26%(CI −36~−16)
耗时 −38% −41%
隐藏检查通过率(18 个手术级任务) 95.6% 96.7%
该写测试处有测试 68% 98%
注入 bug 被自家测试捕获 46% 66%

单会话均价从无技能的 $0.200 降到 $0.142。几个「反直觉」的细节说明这不是单纯的砍代码:完整性判官(Opus 5.5 盲评 0–3 分)给两个臂全部打了满分;6 个安全任务(SQL 注入、路径穿越、伪造 token、限流、CSV 脏行、缓存)三个臂都是 30/30 全过;省最多的任务恰恰是基线最膨胀的——日期选择器 335 行砍到 10 行(成本 $0.427 → $0.099),多步向导 311 → 90 行,曼德博集合示例 129 → 32 行。

JetBrains 的独立复测(SkillsBench 80 对配对任务,Claude Code 2.1.201 无头 + sonnet-5,251 次计费试验共 $246.09)给这组数打了个必要的折扣:代码量中位只降 15.4%(p=0.088),成本降 10.3%(p=0.004,显著),时间降 11%;基线写得越多的任务削减越多(最多 −31%),本来就精简的任务接近零。质量上 65 项相同、9 项略差、6 项略好,无统计学差异。结论分歧的根源在任务构成:官方基准里 12 个功能票选自「真实 FastAPI + React 仓库」且刻意含过度构建陷阱,而 SkillsBench 的任务分布更接近日常。两份报告放在一起读,合理的预期是:成本稳定地省 10%–26%,代码量省 15%–53%,基线越膨胀省得越多,质量与安全不下滑。

4.5 与同类路线的差异

同样的「少写代码」诉求,业界有三种实现路线。第一种是规则文件路线(往 AGENTS.md/Cursor rules 里贴 YAGNI 原则):零工具成本,但 JetBrains 实测证明没有注入机制时激活率接近零,效果靠模型自觉。第二种是工具链硬约束路线(lint 规则、依赖白名单、bundle size 预算):约束是强制的,但只能管「结果」管不了「写法」,且与智能体解耦。第三种就是 Ponytail 的混合路线:用提示词改写决策顺序(软约束),用生命周期钩子保证注入时机(工程保障),用 band/board 把效果变成可度量的数字(反馈闭环)。它的评论命令 /ponytail-review 也按同一哲学设计:检查顺序是先 bug、再风险、再规模(写后读竞态、每进程重复干活、只增不减的内存)、再无测试的风险逻辑,最后才轮到「可删减项」——瘦身的优先级排在正确性之后,这是它与一般「代码精简工具」的本质区别。

五、应用场景

Ponytail 六层决策梯子原理手绘图:从「它需要存在吗」到「最小实现加小测试」逐级下行,右侧永不裁剪清单,底部标注日期选择器 335 行变 10 行等实测战果

场景一:vibe coding 快速原型

痛点:让智能体「给我写个短链接服务」,无技能时平均产出 285 行;「写个待办应用」197 行——原型阶段就把抽象层和配置面铺满,后面每一步都在为最初的膨胀付税。官方基准里 6 个「build me a small app」任务,无技能臂平均成本显著更高,其中一个语言图(LangGraph)示例任务从 148 行砍到 29 行,成本从 $0.557 降到 $0.095。

如何解决:安装后梯子自动生效,第 1 级「它需要存在吗」直接砍掉没人要求的功能;模糊请求只做核心功能的最小版本。最小示例:

> /ponytail              # 会话内开启(默认 full 档)
> 用 FastAPI 写一个把长链接变短链接的服务,带内存存储
(回复末尾会自动多出一两行:跳过了什么、没查什么、有什么风险)

收益与量化:小应用类任务代码量约降 75%–80%,成本约降 40%–60%(官方基准 6 个任务的中位水平)。适用边界:一次性脚本、原型验证、内部工具收益最大;如果你第二天就要把它变成正式产品,用 full 档并认真读每条 shortcut: 注释。

场景二:存量仓库里的功能开发

痛点:存量仓库最大的浪费不是新代码写得多,而是不看仓库就写——仓库已有 Input 组件、已有 slug 生成函数,智能体视而不见,重新造一个语义分叉的轮子。官方基准的 12 个真实 FastAPI + React 功能票任务,无技能臂单票最多 335 行。

如何解决:梯子第 2、4 级强制「先找库内实现、再查已装依赖」;规则还要求改动前先列出所有会被波及的调用方、测试、配置。band 的复用率指标让这个行为可见——README 示例里复用率 71%(复用 5 处、新写 2 处)。最小示例:

> /ponytail full
> 给前端加一个日期选择器,风格和现有表单一致

收益与量化:12 个功能票任务代码 −53%、成本 −26%(几何均值口径);日期选择器这类「平台已有原生方案」的任务最极端,335 行 → 10 行。不建议场景:仓库规范本身要求统一自研组件时,梯子第 3 级「库内组件优先于原生控件」需要你在项目规则里显式覆盖。

场景三:把代码审查变成「会被传呼的资深程序员」

痛点:智能体审查通常只盯着 diff 本身,而真实事故往往来自 diff 之外——改名一个字段,没动过的 feed.js 上线即崩。官方基准里,「找出 diff 之外被波及问题」无技能臂只有 78%,种下的问题也只能发现 87%。

如何解决:/ponytail-review 先读改动触碰到的代码(每个被改函数的调用方、它调用的函数、测试、README 里的真实负载预期),再按「bug → 风险 → 规模 → 无测试的风险逻辑 → 慢路径 → 可删减」的固定顺序扫;每条发现必须给出「这段代码做什么、会出什么问题、怎么修、不修会怎样」四要素。/ponytail-audit 把同一套检查跑到全库并按优先级排序。最小示例:

> /ponytail-review uncommitted      # 也可用 staged / branch / PR 链接
> /ponytail-review 认证模块          # 自然语言圈定范围
> /ponytail-audit                    # 全库体检,最该修的排最前

收益与量化:官方基准测试集上,种下的问题 100% 找出(无技能 87%)、diff 外问题 100% 找出(无技能 78%);每条发现自带业务后果描述,可直接粘进 PR 评论。适用边界:它按「真实负载」评估风险,README 没写预期并发时这一维度会弱化;正规安全审计(渗透测试、依赖 CVE 扫描)仍需专门工具,不能替代。

场景四:技术债的台账化管理

痛点:智能体(和人)都爱说「以后再优化」,但「以后」从不记录在案,三个月后没人知道哪条捷径还在带伤运行。

如何解决:规则强制所有已知局限的捷径写成 shortcut: <限制>, <何时升级> 注释;/ponytail-debt 全库收集这些注释生成台账(支持自定义关键词,改项目规则后 /ponytail-debt <你的词> 即可)。最小示例:

# shortcut: 只处理 ASCII 标识符, 接入国际化时升级为 unicode 解析
def parse_key(raw: str) -> str:
    return raw.strip().lower()

收益与量化:捷径从「口头承诺」变成可 grep、可清点的资产;配合 /ponytail-gain 还能看到「少写代码、省下成本」的实测记分板。不建议场景:团队已有成熟的 ADR(架构决策记录)流程时,两套债务记录并行反而增加成本,二选一即可。

场景五:多智能体团队的统一纪律与度量

痛点:主智能体有纪律、子智能体没有,是常见的行为漏洞;同时团队想回答「我们到底为智能体花了多少钱、它们写了多少代码」却没有现成口径。

如何解决:SubagentStart 钩子把同一份规则注入每个子任务;band 状态带逐会话记录成本、token、agent 时间与复用率,/ponytail band import 可回导历史会话,board 面板在本机聚合成 30 天视图(README 示例:61 个会话、20 小时 13 分 agent 时间、$285.30、4.925 亿 token)。数据默认只存 ~/.config/ponytail/band/,不出本机。适用边界:band 目前仅 Claude Code 2.1.290+ 终端与桌面 App 可用,VS Code 聊天面板、云会话与 claude -p 无界面模式不显示;跨成员汇总需自行收集各机数据。

六、快速上手

Claude Code(两条命令分两次发送):

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

Codex CLI:

codex plugin marketplace add DietrichGebert/ponytail
codex plugin add ponytail@ponytail
# 启动 codex 后打开 /hooks,信任它的两个生命周期钩子,新开线程生效

其余宿主两条通用路径:支持插件的(Copilot CLI、OpenCode、Gemini CLI、Devin CLI、Kimi Code、Qoder 等)按 INSTALL.md 各自的一条命令安装;不支持插件的直接把 AGENTS.md 复制进项目根目录,或让智能体把 SKILL.md 装为技能。前置条件只有一条:Claude Code 与 Codex 的插件会跑两个微型 Node 钩子,node 必须在非交互 shell 的 PATH 上(不在也只是每次多一行无害报错)。装完用 /ponytail lite|full|ultra|off 调档,/ponytail band 开关仪表带。安全提醒(README 原文强调):只从 GitHub 仓库或 npm 包 @dietrichgebert/ponytail 安装,正品的分发里没有任何 .exe/.dll 文件。

七、横向对比

方案 形式 宣称效果 第三方实测 质量保障 便携性
Ponytail 5 提示词 + 生命周期钩子 + 度量带 代码 −53%、成本 −26%(39 任务自测) JetBrains:成本 −10.3%(显著)、代码 −15.4%、时间 −11% 永不裁剪清单 + 强制小测试 + 回复自首 约 20 个智能体,规则与适配分离
caveman 类极简技能 提示词 代码 −65% JetBrains 同系列:−8.5% 无系统机制 同类规则文件
rtk 类 token 削减工具 工具链 省 token JetBrains 同系列:成本反而 +7.6% 不涉及 取决于工具覆盖面
裸 AGENTS.md 规则文件 纯文本 无 无激活保障(skills 目录放置 0/10 激活) 无 任何读规则文件的智能体

同样的诉求下,选型逻辑清晰:要可验证的省钱效果与度量,Ponytail 目前是唯一有第三方显著性背书的;要硬约束(团队规范不可违反),lint 与 CI 门禁不可替代;两者叠加使用并不冲突。

八、局限与风险

效果幅度依赖基线。 JetBrains 数据显示基线本就精简的任务收益趋近于零,宣称的 −54% 建立在含「过度构建陷阱」的任务集上;给团队的合理预期是成本省一到两成,而非对折。

激活方式是成败关键。 把 SKILL.md 放进 skills 目录让它自主激活,JetBrains 实测 10 次激活 0 次;必须走带 SessionStart 钩子的插件安装。装了没生效,先查安装方式。

纪律遵循率并不完美。 规则要求的 shortcut: 债务注释,JetBrains 80 次运行只出现 1 次——「梯子被遵守了,文书没有」。台账功能在真实使用中的覆盖率会低于设计预期。

提示词约束本质是软约束。 它改写的是模型的决策倾向,不是 lint 级强制;「无统计学差异」在 80 对样本下也只能排除大幅退化,不等于证明完全等效。对质量红线有硬性要求的团队,测试门禁与代码评审不可撤。

与人设营销并存的风险。 项目围绕「马尾辫老程序员」做了完整的品牌化(周边故事页、候补名单、赞助商),作者背景公开信息有限;README 里「只从官方渠道安装、正品绝不含可执行二进制」的反复强调,也侧面说明技能分发场景已出现仿冒风险,安装时核对来源。

九、小结与行动建议

Ponytail 证明了一件事:在大模型能力已经过剩的 2026 年,约束模型「不做什么」比教它「做什么」更有杠杆——53 行文本加三条钩子,换来 10%–26% 的真实成本下降且质量不下滑。它不是魔法,是一套「决策顺序改写 + 注入时机保障 + 效果度量闭环」的朴素工程。

给不同读者的行动建议:

  1. 个人开发者:Claude Code 里两条 /plugin 命令装上,用一周 full 档,再打开 band 看自己的复用率与成本曲线,数据会告诉你它是否适合你的代码库。
  2. 团队负责人:先在一两个低风险项目试点,用 /ponytail-gain 与 board 的数据说话;把「永不裁剪清单」抄进你们自己的 AGENTS.md 是零成本的收益。
  3. 提示词/智能体工程师:重点研究三件事——六层梯子的决策排序写法、SessionStart/SubagentStart 注入机制(JetBrains 实测证明没它就没效果)、以及官方基准的统计口径设计(中位 + 几何均值 + bootstrap 区间 + 盲评判官)。
  4. 对效果存疑者:直接跑官方开源的基准复现脚本(python run.py --selftest 无需 API,39 个任务可全量复算),或者等你的场景跑出第一周 band 数据再下结论。

参考资料

  1. DietrichGebert/ponytail 仓库主页与 README:https://github.com/DietrichGebert/ponytail(获取日期:2026-10-23)
  2. 核心规则 skills/ponytail/SKILL.md 与 AGENTS.md:https://github.com/DietrichGebert/ponytail/blob/main/skills/ponytail/SKILL.md(获取日期:2026-10-23)
  3. 官方基准报告 Agentic benchmark: Ponytail 5 vs Ponytail vs no skill(2026-10-07):https://github.com/DietrichGebert/ponytail/blob/main/benchmarks/results/2026-10-07-agentic.md(获取日期:2026-10-23)
  4. JetBrains AI 博客实测 We Tested the Ponytail Skill for Claude Code(2026-07-29):https://blog.jetbrains.com/ai/2026/07/ponytail-skill-claude-tested/(获取日期:2026-10-23)
  5. 安装指南 INSTALL.md 与 Agent 可移植性文档:https://github.com/DietrichGebert/ponytail/blob/main/INSTALL.md(获取日期:2026-10-23)
  6. GitHub daily trending(2026-10-23):https://github.com/trending?since=daily(获取日期:2026-10-23)
← 返回资讯列表

读者留言

COMMENTS 暂无
仅本站原创文章开放留言 · 请勿留下手机号、邮箱等个人信息

还没有留言,来说第一句?