Ponytail: Skill Ejen AI untuk Perubahan Kod Minimum
Ponytail mengajar ejen pengekodan memilih perubahan paling kecil yang berfungsi. Ketahui kandungan projek, keputusan benchmark sendiri, dan cara menyalin aturannya hari ini.
Apakah Ponytail
Ponytail ialah set peraturan yang membuat ejen pengekodan AI menulis kurang kod. Projek ini menerangkan dirinya dalam satu ayat: "Membuat ejen AI anda berfikir seperti pembangun kanan yang paling malas dalam bilik ini. Kod terbaik ialah kod yang tidak pernah anda tulis." Projek ini dilesenkan di bawah MIT. Projek ini tidak mempunyai runtime sendiri dan tiada apa-apa di dalamnya yang dilaksanakan. Kandungannya ialah teks yang dimasukkan ke dalam arahan ejen, dibungkus sebagai skill untuk hos yang memuatkan skill dan sebagai fail peraturan biasa untuk hos yang tidak berbuat demikian.
Repositori ini ialah DietrichGebert/ponytail. Projek ini dicipta pada 12 June 2026 dan mencapai 90,000 stars menjelang 1 August 2026. Release bertag terbaharu pada 1 August 2026 ialah v4.8.4, diterbitkan pada 29 June 2026, dan halaman releases menyenaraikan sepuluh tag antara 14 hingga 29 June sahaja. Projek yang bergerak sepantas itu akan berubah pada masa anda membaca ini, jadi tetapkan tag sebelum anda membina apa-apa berasaskannya.
Idea sebelum menggunakan alat: berhenti pada anak tangga pertama yang sesuai
Teras Ponytail ialah tangga keputusan. Ejen menaikinya sebelum menulis apa-apa dan berhenti pada anak tangga pertama yang sesuai.
- Adakah perkara ini perlu wujud sama sekali? Ini ialah YAGNI (anda tidak akan memerlukannya). Jika jawapannya tidak, abaikannya.
- Adakah perkara ini sudah wujud dalam pangkalan kod ini? Guna semula helper atau corak yang sudah ada.
- Adakah pustaka standard boleh melakukannya? Gunakannya.
- Adakah ciri platform natif dapat mengendalikannya? Gunakannya.
- Adakah kebergantungan yang sudah dipasang dapat menyelesaikannya? Gunakannya.
- Bolehkah perkara ini ditulis dalam satu baris? Jadikan satu baris.
- Hanya selepas itu, tulis kod minimum yang berfungsi.
Susunan itulah yang melaksanakan kerja, bukan mana-mana anak tangga secara berasingan. Ejen yang diminta membuat pemilih tarikh akan menulis pemilih tarikh, kerana itulah arahan yang diterimanya. Tangga ini memaksanya menyemak anak tangga 4 dahulu, dan anak tangga 4 menyatakan bahawa pelayar sudah mempunyai <input type="date">. Nota penanda aras projek itu sendiri menunjukkan kes ini dengan tepat: pemilih tarikh yang menghasilkan 404 baris tanpa peraturan ini hanya menghasilkan 23 baris dengannya, kerana ejen menggunakan input natif dan bukannya membina komponen. Pemilih warna berkurang daripada 287 baris kepada 23 baris atas sebab yang sama. Anak tangga 2 ialah bahagian yang gagal secara senyap, kerana ejen yang tidak dapat melihat helper yang sudah anda miliki akan dengan mudah menulis helper kedua. Jurang inilah yang cuba ditutup oleh peta pangkalan kod anda yang boleh dibuat pertanyaan.
Bersikap malas di sini tidak bermaksud cuai, dan set peraturan menyatakannya secara langsung. Senarai perkara yang "tidak boleh diambil mudah" meliputi pemahaman terhadap masalah sebelum membuat keputusan, pengesahan input pada sempadan kepercayaan, pengendalian ralat yang mencegah kehilangan data, keselamatan, kebolehcapaian, serta apa-apa yang anda minta secara khusus. Set peraturan itu juga meminta satu semakan kecil yang boleh dijalankan bagi setiap bahagian logik yang bukan remeh. Peraturan ini mengurangkan penciptaan yang tidak perlu. Peraturan ini tidak mengurangkan ketepatan.
Perkara yang sebenarnya disertakan oleh repositori
AGENTS.md, set peraturan yang sentiasa aktif. Set ini merangkumi keseluruhan konsep dalam satu fail yang boleh dibaca dalam masa lima minit.skills/ponytail/SKILL.md, definisi kemahiran dengan petunjuk argumenlite,fullatauultra.- Fail peraturan dalam direktori khusus editor seperti
.cursor/rules/dan.windsurf/rules/, untuk hos yang membaca peraturan tetapi tidak memuatkan kemahiran. hooks/,benchmarks/,examples/danscripts/.
Argumen intensity mengubah tahap ketegasan peraturan. lite membina perkara yang diminta dan menyatakan pilihan yang lebih longgar dalam satu baris. full ialah nilai lalai dan menguatkuasakan peringkat tersebut. ultra ialah tetapan ekstrem YAGNI: tetapan ini lebih mengutamakan pemadaman daripada penambahan dan akan mempertikaikan keperluan itu sendiri.
Hos yang menyokong kemahiran turut mendapat slash command. /ponytail menetapkan tahap, /ponytail-review menyemak diff untuk mengesan over-engineering, /ponytail-audit menyemak keseluruhan repositori, /ponytail-debt mengumpulkan pintasan yang ditangguhkan, dan /ponytail-gain mencetak scorecard penanda aras. Hos yang hanya membaca fail peraturan mendapat set peraturan tanpa command.
Untuk membaca kod sumber sebelum mempercayainya, clone tag dan bukannya branch:
git clone --depth 1 --branch v4.8.4 https://github.com/DietrichGebert/ponytail.gitPada Claude Code, projek tersebut sebaliknya mendokumenkan pemasangan plugin. Dua baris ini adalah seperti yang didokumenkan pada 1 August 2026:
/plugin marketplace add DietrichGebert/ponytail
/plugin install ponytail@ponytailLaluan plugin mengikut default branch dan bukannya tag. Oleh itu, arahan yang membimbing agent anda boleh berubah antara sesi tanpa anda sedari. Itulah pertukaran yang anda terima demi kemudahan update command.
Mengapa ejen yang tidak banyak membuat perubahan lebih menjimatkan pada VPS
Perubahan dalam diff yang ditulis oleh ejen tidak hilang daripada perbualan. Pada giliran seterusnya, model membaca semula perubahan itu bersama-sama setiap fail yang dibukanya untuk menghasilkan perubahan tersebut. Oleh itu, perubahan sebanyak 500 baris membebankan setiap giliran berikutnya dalam sesi, bukan hanya giliran yang menghasilkannya. Inilah sebabnya refaktor yang tidak terkawal menyebabkan ejen terasa semakin perlahan dan kurang cekap apabila sesi berterusan: tetingkap konteks dipenuhi output ejen sendiri, lalu ruang untuk kod sebenar anda semakin berkurang. Mengawal perkara ini ialah keseluruhan topik mengurus tetingkap konteks ejen pengekodan.
Token dicaj semasa input dan output, jadi diff yang separuh saiznya lebih murah dua kali: sekali apabila ditulis dan sekali lagi pada setiap giliran yang membacanya semula. Sama ada penjimatan itu mengurangkan bil anda bergantung pada cara anda membuat bayaran, kerana langganan Pro atau Max kadar tetap menyerap token tambahan, manakala pengebilan API berdasarkan setiap token mengenakan caj bagi setiap token. Jika anda memantau bil dalam persediaan yang dihos sendiri, fail arahan ialah satu kawalan yang boleh digunakan tanpa kos. Mengawal kos ejen AI kepada anda bermula dengan jumlah output, manakala cara ejen pengekodan menggunakan tokennya menerangkan sebab pembacaan semula lebih penting daripada jangkaan kebanyakan orang.
Manusia masih perlu membaca diff tersebut. Perubahan sebanyak 400 baris yang sepatutnya hanya 20 baris menggunakan perhatian penyemak, sedangkan perhatian ialah sumber yang paling cepat habis. Tiada siapa menyemak diff panjang yang keempat pada hari itu dengan ketelitian seperti diff pertama. Oleh itu, pembinaan berlebihan bukan sekadar membazirkan masa. Perkara ini secara senyap mengurangkan kualiti semakan yang sepatutnya mengesan kesilapan.
Pada pelayan, risikonya berbeza kerana ejen sering berjalan tanpa pengawasan. Ejen yang bekerja dalam sesi tmux atau mengikut pemasa mempunyai masa berjam-jam untuk membina perubahan lanjut berdasarkan keputusan yang salah sebelum anda menyedarinya. Inilah risiko praktikal dalam menjalankan ejen pengekodan pada VPS, dan sebabnya mereka yang mengamalkan kejuruteraan gelung begitu teliti terhadap arahan berterusan, bukan hanya terhadap prompt individu. Peraturan dalam fail yang sentiasa digunakan terpakai pada giliran 200. Peraturan yang anda taip dalam chat hanya terpakai pada giliran 3. Peraturan itu juga terpakai pada sesi kedua yang anda mulakan pada kotak yang sama. Sesi tersebut membaca fail yang telah dilakukan commit, tetapi tidak mewarisi apa-apa yang anda taip dalam sesi pertama, walaupun kedua-dua sesi boleh menghantar mesej antara satu sama lain.
Dependency baharu ialah satu lagi kos tersembunyi. Rung 5 menyatakan supaya menggunakan perkara yang telah dipasang. Setiap package yang ditambah oleh ejen atas inisiatifnya sendiri ialah sesuatu yang perlu anda tampal kemudian dan sesuatu yang akhirnya masuk ke dalam setiap imej container yang anda bina daripada repositori tersebut.
Perkara yang ditunjukkan oleh angka penanda aras Ponytail sendiri
Projek ini menerbitkan dua set keputusan, dan perbezaannya sangat besar. Kedua-duanya ialah angka yang diterbitkan oleh projek itu sendiri. Tiada satu pun merupakan ujian bebas.
The data behind this chart
[
{
"label": "Lines of code",
"single_shot_pct": 93,
"agentic_pct": 54
},
{
"label": "Cost per run",
"single_shot_pct": 63,
"agentic_pct": 20
},
{
"label": "Wall clock time",
"single_shot_pct": 74,
"agentic_pct": 27
}
]Lajur single shot berasal daripada model asas yang menjawab sekumpulan kecil prompt dengan dan tanpa peraturan tersebut. Nilai ini ialah median daripada beberapa larian berulang yang bertarikh 13 dan 17 June 2026. Lajur agentic pula berasal daripada sesi Claude Code tanpa antara muka grafik yang mengedit full-stack-fastapi-template milik tiangolo, iaitu repositori FastAPI dan React sebenar. Sesi ini meliputi dua belas tiket ciri, dengan empat larian bagi setiap tiket pada Haiku 4.5. Penilaian dibuat berdasarkan git diff yang ditinggalkan.
Baca lajur kedua. Keputusan agentic menunjukkan 54 peratus lebih sedikit baris kod, kos 20 peratus lebih rendah dan masa wall clock 27 peratus lebih singkat, berbanding 93 peratus dan 74 peratus bagi ukuran yang sama dalam persediaan single shot. README menerangkan sebabnya dengan jelas: garis dasar single shot ialah model asas yang “menjawab dengan beberapa pilihan serta ulasan”, dan perkara itu mudah ditewaskan. Apabila dibandingkan dengan agent sebenar yang menjalankan kerja sebenar, kelebihannya mengecil. Namun, hasilnya masih nyata, dan itulah fakta yang lebih berguna.
Terdapat satu batasan yang dinyatakan oleh projek itu sendiri, dan batasan inilah yang menentukan sama ada pendekatan ini membantu anda. Penjimatan paling besar berlaku apabila terdapat risiko sebenar untuk membina lebih banyak daripada yang diperlukan. Penjimatan hampir sifar berlaku pada kod yang sememangnya sudah minimum. Dua belas tiket dalam satu repositori Python dan TypeScript tidak boleh meramalkan hasil untuk repositori anda. Jika angka itu penting bagi anda, jalankan perbandingan pada tiket anda sendiri, dengan dan tanpa peraturan tersebut, kemudian kira sendiri baris kodnya.
Corak yang boleh anda salin hari ini tanpa memasang apa-apa
Tangga itu berupa teks, jadi anda tidak memerlukan plugin untuk menggunakan idea ini. Tampalkan blok seperti ini ke dalam fail arahan yang sudah dibaca oleh agent 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 dipertimbangkan secara berasingan. Konvensyen Ponytail ialah komen yang ditandai dengan nama alat tersebut:
# ponytail: global lock, per-account locks if throughput mattersKomen itu memerlukan dua baris kerja dan menyelesaikan persoalan yang sebaliknya boleh mengambil satu kitaran semakan. Komen itu memberitahu pembaca seterusnya bahawa versi ringkas tersebut dibuat dengan sengaja, serta menyatakan keadaan yang menyebabkan keputusan itu tidak lagi terpakai. Tanpa komen itu, penyemak tidak dapat membezakan jalan pintas yang dipertimbangkan daripada sesuatu yang terlupa dilakukan oleh agent, lalu mereka perlu bertanya.
Lokasi anda meletakkan blok itu sama penting dengan kandungannya. Fail yang dimuatkan oleh agent pada setiap pelaksanaan akan mempengaruhi setiap pelaksanaan, termasuk yang tidak anda pantau. Perbezaan itu dibincangkan dalam menulis AGENTS.md yang benar-benar dipatuhi oleh agent anda, dan itulah sebabnya corak ini wajar diletakkan dalam fail yang disimpan dalam repositori, bukan dalam sejarah shell anda. Dalam monorepo, corak ini wajar diletakkan dalam lebih daripada satu fail yang disimpan dalam repositori, kerana satu AGENTS.md bagi setiap pakej memastikan peraturan setiap direktori kekal ringkas dan agent tidak perlu membaca konvensyen seluruh pepohon pada setiap pelaksanaan. Namun, peletakan fail bukan jaminan. Sebelum membuat kesimpulan bahawa tangga itu memerlukan ayat yang lebih tegas, anda wajar memahami sebab agent melepasi peraturan yang telah dimuatkannya.
Apabila peraturan ini tidak lagi sesuai
Tangga ini disesuaikan untuk kerja ciri dalam codebase sedia ada, apabila penggunaan semula biasanya tersedia dan biasanya betul. Tangga ini kurang sesuai untuk projek greenfield kerana anak tangga 2 tiada apa-apa untuk digunakan semula, manakala anak tangga 5 tiada apa-apa yang dipasang. Oleh itu, ejen akan sentiasa jatuh ke anak tangga 7. Tangga ini juga kurang sesuai apabila anda benar-benar mahu menggunakan abstraksi. Jika anda bakal menambah pemanggil keempat bagi blok yang sama yang disalin, "perbezaan paling ringkas" akan menghasilkan salinan kelima.
Tahap ultra akan mencabar keperluan anda. Itulah tujuan tahap ini, dan cabaran tersebut merupakan kos sebenar apabila anda sudah membuat keputusan serta mahu kerja itu dilaksanakan. Gunakan full untuk kerja biasa dan pilih ultra apabila anda mengesyaki permintaan ciri itu sendiri merupakan masalahnya.
Tiada blok arahan yang dapat mengelakkan anda daripada tersalah memahami masalah. Item pertama dalam set peraturan itu sendiri ialah memahami kod sebelum membuat keputusan. Itulah bahagian yang mahal dan bahagian yang tidak dapat dilakukan oleh teks untuk anda. Perbezaan minimum dalam fungsi yang salah tetap merupakan pembaikan yang salah, dan kini ia menjadi pembaikan salah yang kecil serta mudah diluluskan.
Ringkasan yang jujur ialah Ponytail merupakan prompt yang ditulis dengan teliti, diedarkan dengan baik dan disertakan nombor. Tiada apa-apa dalamnya yang memerlukan plugin tersebut. Sumbangan projek itu ialah seseorang telah menulis senarai tersebut dengan betul, mengujinya pada repositori sebenar dan menerbitkan kaedah itu bersama hasilnya.
FAQ
Adakah Ponytail berfungsi dengan agent selain Claude Code?
Ya. Ia disediakan sebagai skill untuk hos yang memuatkan skill, termasuk Claude Code, Codex, OpenCode, Gemini dan beberapa agent lain yang disenaraikan dalam README. Editor yang membaca fail peraturan tetapi tidak memuatkan skill, seperti Cursor, Windsurf, Cline dan Copilot, menggunakan ruleset sentiasa aktif daripada direktori peraturan yang sepadan dan tidak mendapat slash command. Kandungan teksnya sama, tetapi perbezaan sebenar ialah sama ada hos anda mengekalkan teks itu dalam konteks pada setiap giliran atau hanya apabila skill dicetuskan.
Adakah agent malas akan melangkau ujian, pengesahan atau keselamatan?
Tidak, dan ruleset menyatakan perkara ini secara langsung. Senarai "never lazy about" menetapkan pengesahan input pada sempadan kepercayaan, pengendalian ralat yang mencegah kehilangan data, keselamatan dan kebolehcapaian. Ia juga meminta satu pemeriksaan kecil yang boleh dijalankan bagi setiap bahagian logik yang bukan remeh. Peraturan ini membuang struktur yang direka-reka: abstraksi yang tidak diminta dan dependency yang tidak diperlukan. Jika agent anda mula menggugurkan ujian selepas anda memasangnya, puncanya ialah arahan lain dalam konfigurasi anda sendiri mengatasi peraturan ini. Oleh itu, baca fail yang dimuatkan oleh agent paling akhir.
Adakah angka kelajuan dan kos yang diterbitkan boleh dipercayai?
Angka itu ialah ukuran projek sendiri yang diterbitkan bersama kaedah pengukurannya, dan hendaklah dibaca dalam konteks tersebut. Angka single shot membandingkan hasil dengan model asas yang hanya memberikan pilihan dan ulasan, yang turut dinyatakan oleh README sebagai baseline yang lemah. Angka agentic datang daripada sesi Claude Code tanpa kepala pada satu repositori FastAPI dan React, dengan dua belas tiket dan empat larian bagi setiap tiket, menggunakan Haiku 4.5. Angka itu tepat untuk persediaan tersebut. Angka itu bukan ramalan untuk codebase anda kerana projek tersebut turut menyatakan bahawa penjimatan menurun hampir kepada sifar bagi code yang sememangnya minimum.
Adakah saya perlu memasang apa-apa untuk mendapatkan manfaatnya?
Tidak. Ladder itu ialah teks, dan blok yang setara yang ditampal ke dalam fail arahan yang sedia dibaca oleh agent anda sudah memberikan sebahagian besar kesannya. Plugin menyediakan teks yang diselenggara, tahap intensiti, arahan semakan dan laluan kemas kini. Mencuba blok yang disalin terlebih dahulu ialah jawapan rung 1 kepada persoalan sama ada pemasangan itu perlu wujud langsung.
Bagaimanakah saya boleh menghalang agent tanpa pengawasan daripada membina terlalu banyak pada waktu malam?
Letakkan peraturan itu dalam fail arahan sentiasa aktif, bukan dalam mesej chat, supaya peraturan itu terpakai pada giliran 200 dalam larian yang panjang dan bukan hanya pada giliran 3. Kemudian hadkan risiko secara berasingan: berikan agent checkout yang boleh diubah atau dirosakkan, bukan satu-satunya salinan anda, dan wajibkan semakan diff oleh manusia sebelum apa-apa digabungkan. Peraturan diff minimum mengurangkan jumlah kandungan yang perlu anda baca. Peraturan itu tidak menentukan perkara yang diterima, dan memang tidak sepatutnya menentukan perkara tersebut.