Apa itu Ponytail: Ejen AI Pembangun Senior Malas
Ketahui cara Ponytail mengarahkan ejen AI untuk menulis kod paling minimum yang berfungsi. Dapatkan panduan praktikal untuk menggunakan peraturan ini dalam projek anda.
Apakah itu Ponytail
Ponytail ialah set peraturan yang mengarahkan ejen pengekodan AI untuk menulis kod dengan lebih sedikit. Projek ini menerangkan dirinya dalam satu baris: "Menjadikan ejen AI anda berfikir seperti pembangun senior paling malas di dalam bilik. Kod terbaik ialah kod yang tidak pernah anda tulis." Ia dilesenkan di bawah MIT. Ia tidak mempunyai runtime sendiri, dan tiada apa-apa di dalamnya yang dilaksanakan. Ia hanyalah teks yang dimasukkan ke dalam arahan ejen, dibungkus sebagai kemahiran (skill) untuk hos yang memuatkan kemahiran dan sebagai fail peraturan biasa untuk hos yang tidak memuatkannya.
Repositori ini ialah DietrichGebert/ponytail. Ia dicipta pada 12 Jun 2026 dan melepasi 90,000 bintang menjelang 1 Ogos 2026. Pada 1 Ogos 2026, keluaran bertag terkini ialah v4.8.4, yang diterbitkan pada 29 Jun 2026, dan halaman keluaran menyenaraikan sepuluh tag antara 14 hingga 29 Jun sahaja. Ia tidak perlahan: pada 17 Oktober 2026, keluaran terkini ialah v5.3.2, diterbitkan lewat pada 16 Oktober, keluaran ketiga pada hari itu selepas v5.3.0 dan v5.3.1. Sebelum itu muncul v5.2.0 pada 13 Oktober, lima hari selepas v5.0.0 dan v5.1.0 kedua-duanya mendarat pada 8 Oktober, dan repositori tersebut menunjukkan lebih daripada 165,000 bintang. Projek yang bergerak pada kadar sedemikian akan berubah apabila anda membaca ini, jadi tetapkan (pin) tag sebelum anda membina apa-apa di atasnya.
Idea sebelum alatan: berhenti pada anak tangga pertama yang kukuh
Teras Ponytail ialah tangga keputusan. Ejen akan memanjat tangga ini sebelum menulis apa-apa dan berhenti pada anak tangga pertama yang kukuh.
- Adakah perkara ini perlu wujud? Ini ialah YAGNI (you are not going to need it). Jika jawapannya tidak, abaikan.
- Adakah ia sudah wujud dalam pangkalan kod ini? Gunakan semula pembantu atau corak yang sedia ada.
- Adakah pustaka standard melakukannya? Gunakannya.
- Adakah ciri platform natif melindunginya? Gunakannya.
- Adakah dependensi yang sudah dipasang menyelesaikannya? Gunakannya.
- Bolehkah ia menjadi satu baris? Jadikan ia satu baris.
- Hanya selepas itu, tulis kod minimum yang berfungsi.
Itulah tangga seperti yang ditulis pada v4.8.4, dan nombor anak tangga dalam bahagian artikel seterusnya mengikut urutan tersebut. Cawangan utama semasa menggabungkan anak tangga 3 dan 4 menjadi satu, "Pustaka standard atau ciri platform? Gunakannya, melainkan projek mempunyai versinya sendiri", dan menambah bahawa "komponen dalaman lebih baik daripada widget natif", jadi ia mempunyai enam anak tangga. Urutannya tetap sama.
Urutan inilah yang melakukan kerja, bukan mana-mana anak tangga secara individu. Ejen yang diminta untuk membuat pemilih tarikh (date picker) akan menulis pemilih tarikh, kerana menulisnya adalah apa yang diarahkan untuk dilakukan. Tangga ini memaksanya menyemak apa yang sudah wujud sebelum ia membina apa-apa: anak tangga 2 bertanya sama ada repositori sudah mempunyai komponen untuknya, dan anak tangga 4 menyatakan pelayar sudah mempunyai <input type="date">. Penanda aras semasa projek mencatatkan kes ini dengan tepat: pemilih tarikh yang terhasil sebanyak 335 baris tanpa peraturan tersebut, terhasil sebanyak 10 baris dengan Ponytail 5, kerana ejen menggunakan semula komponen Input milik repositori sendiri dengan type="date" dan membiarkan pelayar menyediakan kalendar. Pemilih warna (colour picker) mengecil kurang drastik, daripada 135 baris kepada 26. Anak tangga 2 adalah yang gagal secara senyap, kerana ejen yang tidak dapat melihat pembantu yang anda sudah miliki akan dengan gembira menulis yang kedua, iaitu jurang yang peta pangkalan kod anda yang boleh disoal bertujuan untuk tutup.
Malas di sini tidak bermaksud cuai, dan set peraturan menyatakan perkara itu secara langsung. Senarai "jangan sesekali malas tentang" merangkumi pemahaman masalah sebelum membuat keputusan, pengesahan input pada sempadan kepercayaan, pengendalian ralat yang menghalang kehilangan data, keselamatan, kebolehcapaian, dan apa sahaja yang anda minta mengikut nama. Ia juga meminta satu semakan boleh laku yang kecil bagi setiap bahagian logik yang tidak remeh. Peraturan ini memotong penciptaan yang tidak perlu. Ia tidak memotong ketepatan.
Apa yang sebenarnya dihantar oleh repositori
AGENTS.md, set peraturan yang sentiasa aktif, yang merupakan keseluruhan idea dalam satu fail yang boleh anda baca dalam lima minit.skills/ponytail/SKILL.md, definisi kemahiran, dengan pembayang argumenlite,full,ultraatauoff.- Fail peraturan di bawah direktori khusus editor seperti
.cursor/rules/dan.windsurf/rules/, untuk hos yang membaca peraturan tetapi tidak memuatkan kemahiran. hooks/,benchmarks/,examples/danscripts/.
Argumen keamatan (intensity) mengubah sejauh mana peraturan itu mendesak. lite membina apa yang anda minta dan menamakan pilihan yang lebih malas dalam satu baris. full ialah lalai dan menguatkuasakan tangga (ladder). ultra ialah tetapan ekstremis YAGNI: ia lebih mengutamakan pemadaman daripada penambahan dan ia akan berhujah dengan keperluan itu sendiri.
Hos yang berkemampuan kemahiran juga mendapat arahan slash. /ponytail menetapkan tahap, /ponytail-review menyemak diff untuk over-engineering, /ponytail-audit menyemak keseluruhan repositori, /ponytail-debt mengumpul pintasan yang anda tangguhkan, dan /ponytail-gain mencetak kad skor penanda aras. Hos yang hanya membaca fail peraturan mendapat set peraturan tanpa arahan. Sejak v5.3.0, yang dikeluarkan pada 16 Oktober 2026, Claude Code juga mendapat jalur di atas prompt yang menunjukkan kos tugas, penggunaan semula kod dan status ujian. Ia memerlukan Claude Code 2.1.290 atau lebih baharu, ia tidak muncul dalam panel sembang VS Code, sesi awan atau claude -p, dan /ponytail band off menyembunyikannya. Sejak v5.3.2, /ponytail band import membaca sesi Claude Code anda yang lalu sekali dan menambahkannya ke papan dengan kos, masa ejen dan tokennya, supaya anda boleh membandingkannya dengan sesi yang dijalankan di bawah peraturan tersebut.
Untuk membaca sumber sebelum anda mempercayainya, clone tag tersebut dan bukannya cawangan (branch). Ini adalah tag yang berasal dari tangga di atas; tukar dengan v5.3.2, yang terkini pada 17 Oktober 2026, untuk membaca perkataan semasa:
git clone --depth 1 --branch v4.8.4 https://github.com/DietrichGebert/ponytail.gitPada Claude Code, projek ini mendokumentasikan pemasangan pemalam (plugin) sebaliknya, dan dua baris ini adalah seperti yang didokumentasikan pada 17 Oktober 2026:
/plugin marketplace add DietrichGebert/ponytail
/plugin install ponytail@ponytailLaluan pemalam mengikut cawangan lalai dan bukannya tag, jadi arahan yang mengemudi ejen anda boleh berubah di bawah anda antara sesi. Itulah pertukaran yang anda terima untuk kemudahan arahan kemas kini.
Mengapa ejen yang malas lebih murah pada VPS
Diff yang ditulis oleh ejen tidak meninggalkan perbualan. Pada giliran seterusnya, ia menjadi konteks yang dibaca semula oleh model, bersama-sama dengan setiap fail yang dibuka untuk menghasilkannya. Oleh itu, perubahan sebanyak 500 baris membebankan setiap giliran berikutnya dalam sesi tersebut sehingga pemadatan menggantikan giliran lama dengan ringkasan, bukan hanya giliran yang menghasilkannya. Inilah sebabnya mengapa refactor yang tidak terkawal menjadikan ejen terasa lebih perlahan dan kurang bijak apabila sesi berlanjutan: tetingkap dipenuhi dengan output ejen itu sendiri, jadi ruang yang tinggal untuk kod sebenar anda semakin mengecil. Mengawal perkara ini adalah subjek keseluruhan bagi mengurus tetingkap konteks ejen pengekodan.
Token dibilkan semasa masuk dan keluar, jadi diff yang separuh saiznya adalah lebih murah dua kali ganda, sekali semasa ia ditulis dan sekali lagi pada setiap giliran yang membacanya semula. Sama ada penjimatan itu memberi kesan kepada bil anda bergantung pada cara anda membayar, kerana langganan Pro atau Max menyerap token tambahan hanya sehingga had penggunaan, selepas itu kredit penggunaan opt-in dicaj secara berasingan, manakala pengebilan API per-token mencaj anda untuk setiap satu daripadanya. Jika anda memantau bil pada persediaan self-hosted, fail arahan ialah tuil yang tidak memerlukan kos untuk ditarik. Mengawal kos ejen AI anda bermula dengan volum output, dan bagaimana ejen pengekodan membelanjakan tokennya menjelaskan mengapa pembacaan semula lebih penting daripada yang dijangkakan orang ramai.
Manusia masih membaca diff tersebut. Perubahan 400 baris yang sepatutnya hanya 20 baris memakan perhatian penyemak, dan perhatian adalah sumber yang habis paling cepat. Tiada siapa yang menyemak diff panjang keempat pada hari itu dengan ketelitian yang diberikan pada yang pertama, jadi pembinaan berlebihan bukan sahaja membuang masa. Ia secara senyap merendahkan kualiti semakan yang sepatutnya menangkap kesilapan.
Pada pelayan, taruhannya berubah, kerana ejen sering berjalan tanpa dipantau oleh sesiapa. Ejen yang bekerja dalam sesi tmux atau pada pemasa mempunyai masa berjam-jam untuk membina keputusan yang buruk sebelum anda melihatnya. Itulah risiko praktikal dalam menjalankan ejen pengekodan pada VPS, dan itulah sebabnya orang yang melakukan loop engineering menghabiskan begitu banyak perhatian pada arahan tetap berbanding pada prompt individu. Peraturan dalam fail yang sentiasa aktif terpakai pada giliran 200. Peraturan yang anda taip dalam sembang hanya terpakai pada giliran 3. Ia juga terpakai pada sesi kedua yang anda mulakan pada kotak yang sama, yang membaca fail yang telah dikomit tetapi tidak mewarisi apa-apa yang anda taip dalam sesi pertama, walaupun apabila kedua-dua sesi boleh menghantar mesej antara satu sama lain.
Dependency baharu adalah satu lagi kos tersembunyi. Rung 5 menyatakan gunakan apa yang telah dipasang. Setiap pakej yang ditambah oleh ejen atas inisiatifnya sendiri adalah sesuatu yang anda tampal (patch) kemudian dan sesuatu yang akhirnya berada dalam setiap imej kontena yang anda bina daripada repositori tersebut.
Apa yang dikatakan oleh nombor penanda aras Ponytail sendiri
Projek ini telah menerbitkan dua jenis keputusan, dan ia tidak bersetuju antara satu sama lain dengan margin yang besar. Kedua-duanya adalah angka yang diterbitkan oleh projek itu sendiri. Tiada satu pun ujian bebas.
Data di sebalik carta ini
[
{
"label": "Lines of code",
"v4_13_pct": 48,
"v5_pct": 53
},
{
"label": "Cost per run",
"v4_13_pct": 16,
"v5_pct": 26
},
{
"label": "Wall clock time",
"v4_13_pct": 38,
"v5_pct": 41
}
]Carta tersebut ialah penanda aras ejen semasa projek, bertarikh 7 Oktober 2026. Sesi Headless Claude Code 2.1.288 pada Opus 5.5 pada usaha lalai menyelesaikan 39 tugasan, lima larian setiap tugasan dan lengan, 585 sesi kesemuanya merentasi tanpa kemahiran, Ponytail v4.13.0 dan Ponytail 5. Dua belas daripada tugasan tersebut ialah tiket ciri dalam full-stack-fastapi-template milik tiangolo, repositori FastAPI dan React sebenar, yang dinilai pada git diff yang ditinggalkan. Selebihnya ialah 18 tugasan pembedahan dengan semakan tersembunyi, enam permintaan aplikasi kecil dan tiga permintaan "tunjukkan saya contoh". Bash dilumpuhkan untuk setiap lengan. Token output jatuh sebanyak 45 peratus dengan Ponytail 5.
Baca itu berbanding angka satu pukulan yang diterbitkan oleh projek itu pada Jun 2026. Itu datang daripada model kosong yang menjawab lima gesaan harian dengan dan tanpa peraturan, dilaporkan sebagai median sepanjang larian berulang. Ia menunjukkan 80 hingga 94 peratus kurang kod merentasi Haiku, Sonnet dan Opus, dan pengesahan kos bertarikh 17 Jun 2026 meletakkan Haiku pada 63 peratus lebih murah. Keputusan ejen semasa untuk Ponytail 5 ialah 53 peratus lebih sedikit baris kod, 26 peratus kos lebih rendah dan 41 peratus kurang masa jam dinding. Projek itu membetulkan angka satu pukulan dengan cepat. Menjelang v4.8.4, pada 29 Jun 2026, README sudah mengetengahkan keputusan ejen, "~54% kurang kod (sehingga 94%)", dengan nota bahawa 80 hingga 94 peratus yang lebih awal adalah "siling setiap tugasan, bukan purata", dan ia telah mengalihkan nombor satu pukulan ke dalam bahagian yang diruntuhkan bertajuk "Nombor satu pukulan lama". Bahagian itu jujur tentang sebab wujudnya jurang tersebut: garis dasar satu pukulan ialah model kosong yang "memadatkan jawapannya dengan prosa dan pilihan", yang merupakan perkara mudah untuk dikalahkan. Ukur berbanding ejen sebenar yang melakukan kerja sebenar dan kemenangan itu mengecil. Ia juga kekal nyata, yang merupakan fakta yang lebih berguna. Larian ejen Jun itu, dua belas tiket pada Haiku 4.5 dengan empat larian setiap satu, telah mendarat hampir dengan angka hari ini pada 54 peratus lebih sedikit baris, dan README semasa tidak lagi membawa nombor satu pukulan sama sekali.
Satu kaveat adalah milik projek itu sendiri, dan ia adalah satu-satunya yang menentukan sama ada ini membantu anda. Penjimatan adalah paling besar di mana terdapat perangkap binaan berlebihan yang tulen dan hampir sifar pada kod yang sudah minimum, dan jadual setiap tugasan Oktober membuktikannya, dengan beberapa tugasan pembedahan mendarat pada kiraan baris yang sama dalam ketiga-tiga lengan. Tiga puluh sembilan tugasan pada satu model dan satu hos, dengan Bash dimatikan, tidak meramalkan repositori anda. Jika nombor itu penting kepada anda, jalankan perbandingan pada tiket anda sendiri, dengan dan tanpa peraturan, dan kira baris itu sendiri.
Corak yang boleh anda salin hari ini tanpa memasang apa-apa
Tangga ini adalah teks, jadi anda tidak memerlukan pemalam untuk menggunakan idea tersebut. Tampal blok seperti ini ke dalam fail arahan yang sudah dibaca oleh ejen anda, sama ada AGENTS.md, CLAUDE.md atau fail peraturan editor anda.
## Before you write code
Climb this list in order. Stop at the first line that applies.
1. Does this need to exist? If not, say so and stop.
2. Does this repo already have it? Reuse the helper.
3. Does the standard library do it? Use it.
4. Does the platform do it natively? Use it.
5. Does an installed dependency do it? Use it.
6. Can it be one line? Write one line.
7. Otherwise write the minimum that works.
Never take the shortcut on: reading the code before changing it, validating
input that crosses a trust boundary, error handling that would otherwise lose
data, security, accessibility, or anything I asked for by name.
Do not add an abstraction I did not ask for. Do not add a dependency without
saying why in one line. Prefer deleting code to adding it.
Mark a deliberate simplification with a comment naming its ceiling and the
upgrade path.Peraturan terakhir itu wajar diambil secara berasingan. Konvensyen Ponytail dalam keluaran semasanya ialah komen yang ditanda shortcut: yang menamakan had dan masa untuk menaik taraf (keluaran Jun, termasuk v4.8.4, melabelnya sebagai ponytail: sebaliknya):
# shortcut: global lock, per-account locks if throughput mattersKomen tersebut memerlukan dua baris kerja dan ia menyelesaikan persoalan yang jika tidak, akan memakan kos satu kitaran semakan. Ia memberitahu pembaca seterusnya bahawa versi ringkas itu adalah satu keputusan, dan ia menamakan syarat di mana keputusan itu tidak lagi terpakai. Tanpanya, penyemak tidak dapat membezakan antara jalan pintas yang dipertimbangkan dengan sesuatu yang dilupakan oleh ejen, jadi mereka terpaksa bertanya.
Di mana anda meletakkan blok tersebut adalah sama penting dengan apa yang dinyatakannya. Fail yang dimuatkan oleh ejen pada setiap pelaksanaan akan mengemudi setiap pelaksanaan, termasuk yang tidak anda pantau. Perbezaan itu adalah subjek bagi menulis AGENTS.md yang benar-benar diikuti oleh ejen anda, dan itulah sebabnya corak ini perlu berada dalam fail yang dikomitkan dan bukannya dalam sejarah shell anda. Dalam monorepo, ia perlu berada dalam lebih daripada satu fail yang dikomitkan, kerana satu AGENTS.md bagi setiap pakej memastikan peraturan setiap direktori kekal ringkas dan bukannya memaksa ejen membaca konvensyen keseluruhan pepohon pada setiap pelaksanaan. Walau bagaimanapun, penempatan bukanlah satu jaminan, dan adalah wajar untuk mengetahui mengapa ejen mengabaikan peraturan yang telah dimuatkannya sebelum anda membuat kesimpulan bahawa tangga tersebut memerlukan olahan kata yang lebih tegas.
Di mana peraturan ini tidak lagi tepat
Tangga ini ditala untuk kerja-kerja ciri dalam pangkalan kod yang sedia ada, di mana penggunaan semula biasanya tersedia dan biasanya tepat. Ia kurang sesuai untuk projek baharu (greenfield), kerana anak tangga 2 tiada apa-apa untuk digunakan semula dan anak tangga 5 tiada apa-apa yang dipasang. Ejen masih boleh berhenti pada anak tangga 1, pustaka standard, ciri platform atau kod satu baris, tetapi dua jalan keluar paling murah telah tiada, jadi lebih banyak tugasan berakhir dengan penulisan kod baharu. Ia juga kurang sesuai pada saat anda benar-benar mahukan abstraksi. Jika anda hampir menambah pemanggil keempat bagi blok yang disalin sama, "diff terpendek" akan memberikan anda salinan kelima.
Tahap ultra akan mencabar keperluan anda. Itulah tujuan tahap tersebut, dan ia merupakan kos sebenar apabila anda telah membuat keputusan dan mahukan kerja itu disiapkan. Gunakan full untuk kerja biasa dan gunakan ultra apabila anda mengesyaki permintaan ciri adalah puncanya.
Tiada blok arahan yang dapat menyelamatkan anda daripada salah membaca masalah. Perkara pertama dalam set peraturan itu sendiri ialah memahami kod sebelum membuat keputusan, yang merupakan bahagian yang mahal dan bahagian yang tidak boleh dilakukan oleh teks untuk anda. Diff minimum dalam fungsi yang salah tetap merupakan pembaikan yang salah, dan kini ia menjadi pembaikan salah yang kecil dan mudah diluluskan.
Ringkasan yang jujur ialah Ponytail merupakan prompt yang ditulis dengan teliti, diedarkan dengan baik, dan disertakan dengan nombor. Tiada apa-apa di dalamnya yang memerlukan plugin. Apa yang projek ini berikan kepada anda ialah seseorang telah menulis senarai tersebut dengan betul, mengujinya terhadap repositori sebenar, dan menerbitkan kaedah tersebut di samping hasilnya.
FAQ
Adakah Ponytail berfungsi dengan ejen selain Claude Code?
Ya. Ia dikeluarkan sebagai skill untuk hos yang memuatkan skill, satu senarai yang merangkumi Claude Code, Codex, OpenCode, Gemini dan beberapa yang lain yang dinamakan dalam README. Editor yang membaca fail peraturan tetapi tidak memuatkan skill, seperti Cursor, Windsurf, Cline dan Copilot, mengambil set peraturan sentiasa aktif (always-on) daripada direktori peraturan yang sepadan dan tidak mendapat slash commands. Teksnya adalah sama dalam kedua-dua keadaan, jadi perbezaan sebenar ialah sama ada hos anda mengekalkan teks tersebut dalam konteks pada setiap pusingan atau hanya apabila sesuatu skill dicetuskan.
Adakah ejen yang malas akan melangkau ujian, pengesahan atau keselamatan?
Tidak, dan set peraturan menyatakan perkara ini secara terus. Senarai "jangan sekali-kali malas tentang" (never lazy about) menamakan pengesahan input pada sempadan kepercayaan, pengendalian ralat yang menghalang kehilangan data, keselamatan dan kebolehcapaian, serta ia meminta satu semakan boleh laksana yang kecil untuk setiap bahagian logik yang bukan remeh. Apa yang dibuang oleh peraturan ini ialah struktur yang direka-reka: abstraksi yang tidak diminta oleh sesiapa dan dependency yang tidak diperlukan oleh sesiapa. Jika ejen anda mula menggugurkan ujian selepas anda memasangnya, puncanya ialah arahan lain dalam konfigurasi anda sendiri yang mengatasi arahan ini, jadi baca fail yang dimuatkan oleh ejen paling akhir.
Adakah nombor kelajuan dan kos yang diterbitkan boleh dipercayai?
Ia adalah ukuran projek itu sendiri, diterbitkan bersama kaedah pengukurannya, dan ia harus dibaca sebagai sedemikian. Angka single shot dari Jun 2026 dibandingkan dengan model kosong yang memenuhkan jawapannya dengan prosa dan pilihan, yang mana README pada masa itu sendiri melabelkannya sebagai baseline yang lemah. Angka ejen semasa datang daripada sesi Claude Code tanpa kepala pada Opus 5.5, 39 tugasan dengan lima larian setiap satu, dua belas daripadanya adalah tiket ciri dalam satu repositori FastAPI dan React. Itu adalah nombor yang jujur untuk persediaan tersebut. Ia bukan ramalan untuk codebase anda, kerana keputusan per-tugasan projek itu sendiri menunjukkan penjimatan jatuh hampir kepada sifar pada kod yang sudah pun minimum.
Adakah saya perlu memasang apa-apa untuk mendapatkan manfaatnya?
Tidak. Tangga tersebut adalah teks, dan blok setara yang ditampal ke dalam fail arahan yang ejen anda sudah baca memberikan anda sebahagian besar kesan tersebut. Plugin ini memberikan anda perkataan yang diselenggara, tahap keamatan, arahan semakan dan laluan kemas kini. Mencuba blok yang disalin terlebih dahulu adalah jawapan anak tangga 1 kepada persoalan sama ada pemasangan itu perlu wujud sama sekali.
Bagaimanakah cara saya menghalang ejen tanpa pengawasan daripada membina secara berlebihan sepanjang malam?
Letakkan peraturan dalam fail arahan sentiasa aktif (always-on) dan bukannya dalam mesej sembang, supaya ia terpakai pada pusingan 200 bagi larian yang panjang dan bukan hanya pada pusingan 3. Kemudian hadkan kerosakan secara berasingan: berikan ejen checkout yang ia dibenarkan untuk merosakkannya dan bukannya salinan tunggal anda, dan wajibkan semakan diff manusia sebelum apa-apa digabungkan (merge). Peraturan diff minimum mengurangkan jumlah yang perlu anda baca. Ia tidak menentukan apa yang akan dimasukkan, dan ia tidak sepatutnya berbuat demikian.