你向你的 AI 助手要一個日期選擇器。
它安裝 flatpickr、寫一個包裝元件、加上一份樣式表、設定主題覆寫,然後開始跟你解釋時區處理。四百行之後,你得到一個日期選擇器。
坐在兩個座位外的資深工程師本來會這樣寫:
<input type="date">
Ponytail 是一個開源的技能/外掛,試圖把那種人塞進你的程式撰寫代理裡。它可搭配 Claude Code、Codex、Cursor、Gemini CLI、Copilot、OpenCode、Windsurf、Cline,以及一長串其他工具使用。採用 MIT 授權。
Ponytail 不是工具、函式庫,也不是模型。它是一組規則集,會在每一輪被注入到你的代理上下文中。它的核心是一個階梯。在寫任何程式碼之前,代理會先停在第一個符合的階梯上:
1. 這東西真的需要存在嗎? -> 不需要:跳過(YAGNI)
2. 這個程式庫裡已經有了嗎? -> 重用,不要重寫
3. 標準函式庫做得到嗎? -> 用它
4. 原生平台功能有嗎? -> 用它
5. 已安裝的相依套件有嗎? -> 用它
6. 一行就夠嗎? -> 那就一行
7. 只有到這一步:做出最小可行的實作
基本上就是這樣。儲存庫裡其他東西都只是打包:將近二十種代理的適配器、幾個斜線命令,以及一個基準測試框架。
這個階梯有兩點,比表面看起來更重要:
它是在理解之後才運作,不是取代理解。 這些規則會要求代理先讀取變更所碰到的程式碼,並在選擇階梯之前追蹤實際流程。對解法懶一點,但不要對讀程式碼庫懶。
驗證不在範圍內。 規則明確保護信任邊界驗證、錯誤處理、安全性與可及性。目標不是「最少 token」,而是「只寫這個任務需要的東西」。程式碼之所以變小,是因為多餘的東西本來就不需要,不是因為硬是極限壓縮出來的。
選擇你的代理。以 Claude Code 為例,需要兩個提示(必須分開送出):
/plugin marketplace add DietrichGebert/ponytail
/plugin install ponytail@ponytail
Codex:
codex plugin marketplace add DietrichGebert/ponytail
codex plugin add ponytail@ponytail
Copilot CLI:
copilot plugin marketplace add DietrichGebert/ponytail
copilot plugin install ponytail@ponytail
Gemini CLI:
gemini extensions install https://github.com/DietrichGebert/ponytail
對於 Cursor、Windsurf、Cline、Kiro、Aider 和 Copilot Chat,沒有外掛層,所以你要把儲存庫中對應的規則檔複製出來(.cursor/rules/、.windsurf/rules/、.clinerules/,以此類推)。另外有些代理也會自動從專案根目錄載入 AGENTS.md,而這個儲存庫本身就附了一份,所以只要從 checkout 下來就能直接用,不需要額外設定。
Claude Code 和 Codex 的外掛會執行兩個很小的 Node 生命週期 hook,所以 node 必須在你的 PATH 裡。如果沒有,技能還是能用;只是少了常駐啟用。
| 指令 | 功能 |
|---|---|
/ponytail [lite\|full\|ultra\|off] |
設定強度或關閉。預設是 full。 |
/ponytail-review |
檢視你目前的 diff 是否過度設計,回傳刪除清單。 |
/ponytail-audit |
同樣功能,但針對整個儲存庫,而不是 diff。 |
/ponytail-debt |
收集你延後處理的 ponytail: 捷徑,整理成帳本。 |
/ponytail-gain |
顯示量測到的成效儀表板。 |
/ponytail-help |
快速參考。 |
就算你從不開啟常駐模式,/ponytail-review 也是我最先會用的指令。把它指向你已經寫好的 diff,是一種低承諾的方式,看看這套紀律在你的程式碼庫裡是否真的能找出問題。
這些指令需要支援技能的主機。只有指令提示的適配器(Cursor、Windsurf、Cline、Copilot Chat、Kiro)會拿到常駐規則集,但不會有這些指令。
這裡讓這個專案比大多數 GitHub trending 條目更有意思,而且值得仔細看,因為這故事有個反轉。
最初的基準測試宣稱可減少 80–94% 的程式碼。有人開了 issue #126,提出四個合理批評:
在更公平的基準之下:
| 相較無技能基準 | LOC | token | 成本 | 時間 | 安全 |
|---|---|---|---|---|---|
| ponytail | -54% | -22% | -20% | -27% | 100% |
| caveman(簡短敘述) | -20% | +7% | +3% | +2% | 100% |
| 「YAGNI + 一行式」提示詞 | -33% | -14% | -21% | -30% | 95% |
逐項任務的數字更有用:
| 任務 | 基準 | ponytail |
|---|---|---|
| 日期選擇器 | 404 | 23 |
| 顏色選擇器 | 287 | 23 |
| 檔案拖放區 | 251 | 95 |
| 多步驟精靈 | 571 | 312 |
| 依標題搜尋專案 | 44 | 44 |
| 匯出專案為 CSV | 36 | 33 |
| 計算使用者專案數量 | 21 | 17 |
形狀很清楚。當存在過度建置陷阱時,削減幅度會非常大,因為代理會去用 <input type="date">,而不是自己做一個元件。當程式碼本來就很精簡時(例如後端 CRUD),各種方法最後都會收斂,ponytail 就不會有作用。-54% 這個標題數字,是跨這兩類任務的平均值,所以要把它理解成「有時候很驚人,有時候完全沒差」,而不是「到處都少一半程式碼」。
我覺得最有說服力的是安全性那一層。六個任務會建立一個起始檔案,要求寫一個函式,並像真實工單一樣把安全需求隱含起來。接著評分器會用對抗性輸入去執行產出的函式:路徑穿越、SQL injection、偽造 token、格式不正確的 CSV 列。
在路徑合併那個任務上,單純的一行提示詞寫出的程式碼最少(6 行),但有四分之一的執行會讓 ../../ 檔名逃出目錄。Ponytail 寫了大約 9.5 行,並且 4/4 都通過。多出來的三行就是那個防止路徑穿越的檢查。這就是使用結構化規則集,而不是只叫你的代理「寫短一點」的全部理由。
還有兩點我想給他們按讚。基準測試的說明文有一節限制條件,老實點出自己的弱點(只有一個模型、n=4、安全性只是底線而非證明)。而且它也記錄了他們在先前一輪發現的污染 bug:外掛的 SessionStart hook 也在基準組上觸發,偷偷讓 ponytail 在自己身上生效。能發現並公開這件事,比表格裡任何一個數字都更能建立信任。
這只是提示,不是保證。 這裡的一切都只是上下文視窗裡的指令。模型會偏離、在壓力下忽略規則,並且在不同供應商之間表現不一。沒有什麼能強制這個階梯一定被遵守。
成效取決於你的代理在某種特定方式上很爛。 這些收益來自會過度建置的代理。如果你用的是更強的模型,或者你本來就會寫很精準的工單,明確寫「使用原生輸入」之類的限制,那麼很多空間早就被吃掉了。README 本身也提到,某些推理模型可能會反過來,因為花了額外思考 token 去猶豫每個階梯。
值得,但要先釐清這個「值得」是哪一種。
嘗試成本只有兩個指令,再加上一個關閉它的斜線命令。沒有執行時成本,不會成為你專案裡的相依套件,也沒有綁定風險,而且卸載方式有文件說明(甚至包含一個清理它在外掛資料夾外寫入狀態的腳本)。在這個價位下,根本不太需要猶豫。
Repo: github.com/DietrichGebert/ponytail
基準測試說明與重現步驟:benchmarks/results/2026-06-18-agentic.md
原文出處:https://dev.to/arshtechpro/ponytail-the-ai-coding-skill-that-makes-your-agent-write-less-code-29l3