Ponytail: Skill Agen Coding AI yang Malas
Ponytail mengarahkan agen coding AI memilih perubahan terkecil yang berhasil. Simak isi proyek, hasil benchmark-nya, dan cara menyalin aturannya hari ini.
Apa itu Ponytail
Ponytail adalah seperangkat aturan yang membuat agen coding AI menulis lebih sedikit kode. Proyek ini mendeskripsikan dirinya dalam satu kalimat: "Membuat agen AI Anda berpikir seperti developer senior yang paling malas di ruangan. Kode terbaik adalah kode yang tidak pernah Anda tulis." Proyek ini menggunakan lisensi MIT. Ponytail tidak memiliki runtime sendiri, dan tidak ada bagian di dalamnya yang dieksekusi. Isinya adalah teks yang dimasukkan ke dalam instruksi agen, dikemas sebagai skill untuk host yang memuat skill dan sebagai berkas aturan biasa untuk host yang tidak memuat skill.
Repositorinya adalah DietrichGebert/ponytail. Repositori ini dibuat pada 12 June 2026 dan telah mencapai 90,000 star pada 1 August 2026. Rilis bertag terbaru pada 1 August 2026 adalah v4.8.4, yang dipublikasikan pada 29 June 2026, dan halaman rilis mencantumkan sepuluh tag hanya antara 14 dan 29 June. Proyek yang bergerak secepat itu akan berubah saat Anda membaca ini, jadi tetapkan sebuah tag sebelum membangun apa pun di atasnya.
Gagasan sebelum alat: berhenti pada tingkat pertama yang memenuhi syarat
Inti Ponytail adalah tangga keputusan. Agen menaikinya sebelum menulis apa pun dan berhenti pada tingkat pertama yang memenuhi syarat.
- Apakah ini memang perlu ada? Ini adalah YAGNI (Anda tidak akan membutuhkannya). Jika jawabannya tidak, lewati.
- Apakah ini sudah ada di codebase ini? Gunakan kembali helper atau pola yang sudah ada.
- Apakah standard library dapat menanganinya? Gunakan.
- Apakah fitur platform native dapat menanganinya? Gunakan.
- Apakah dependency yang sudah terpasang dapat menyelesaikannya? Gunakan.
- Apakah ini dapat ditulis dalam satu baris? Jadikan satu baris.
- Hanya setelah itu, tulis kode minimum yang berfungsi.
Urutan inilah yang menjalankan prosesnya, bukan salah satu tingkat saja. Agen yang diminta membuat pemilih tanggal akan membuat pemilih tanggal, karena itulah yang diperintahkan. Tangga ini membuatnya memeriksa tingkat 4 terlebih dahulu, dan tingkat 4 menunjukkan bahwa browser sudah memiliki <input type="date">. Catatan benchmark proyek ini secara tepat mencatat kasus tersebut: pemilih tanggal yang terdiri dari 404 baris tanpa aturan ini menjadi 23 baris dengan aturan ini, karena agen memilih input native alih-alih membangun komponen. Pemilih warna berkurang dari 287 baris menjadi 23 baris karena alasan yang sama.
Bersikap malas di sini bukan berarti ceroboh, dan ruleset menyatakannya secara langsung. Daftar hal yang "tidak boleh dianggap sepele" mencakup memahami masalah sebelum mengambil keputusan, validasi input di batas kepercayaan, penanganan error yang mencegah kehilangan data, keamanan, aksesibilitas, serta semua hal yang Anda minta secara spesifik. Ruleset ini mengurangi penciptaan yang tidak perlu. Ruleset ini tidak mengurangi ketepatan.
Apa yang sebenarnya dirilis oleh repositori
AGENTS.md, ruleset yang selalu aktif dan merangkum seluruh konsep dalam satu file yang dapat Anda baca dalam lima menit.skills/ponytail/SKILL.md, definisi skill, dengan petunjuk argumen berupalite,full, atauultra.- File aturan dalam direktori khusus editor, seperti
.cursor/rules/dan.windsurf/rules/, untuk host yang membaca aturan tetapi tidak memuat skill. hooks/,benchmarks/,examples/, danscripts/.
Argumen intensitas mengubah seberapa kuat aturan tersebut diterapkan. lite membangun hal yang Anda minta dan menyebutkan opsi yang lebih longgar dalam satu baris. full adalah nilai default dan menerapkan jenjang tersebut. ultra adalah pengaturan ekstrem YAGNI: pengaturan ini lebih memilih menghapus daripada menambahkan, serta akan mempertanyakan persyaratannya sendiri.
Host yang mendukung skill juga mendapatkan slash command. /ponytail menetapkan tingkat, /ponytail-review memeriksa diff untuk menemukan rekayasa berlebihan, /ponytail-audit memeriksa seluruh repositori, /ponytail-debt mengumpulkan pintasan yang Anda tunda, dan /ponytail-gain menampilkan scorecard benchmark. Host yang hanya membaca file aturan mendapatkan ruleset tanpa command.
Untuk membaca source sebelum mempercayainya, clone tag, bukan branch:
git clone --depth 1 --branch v4.8.4 https://github.com/DietrichGebert/ponytail.gitPada Claude Code, proyek ini mendokumentasikan instalasi plugin. Dua baris berikut sesuai dengan dokumentasi pada 1 August 2026:
/plugin marketplace add DietrichGebert/ponytail
/plugin install ponytail@ponytailPath plugin mengikuti default branch, bukan tag. Karena itu, instruksi yang mengarahkan agent Anda dapat berubah tanpa Anda sadari di antara sesi. Itulah konsekuensi yang Anda terima demi kemudahan update command.
Mengapa agent yang malas lebih hemat pada VPS
Diff yang ditulis agent tetap berada dalam percakapan. Pada giliran berikutnya, model membaca diff tersebut lagi sebagai konteks, bersama setiap file yang dibuka untuk membuatnya. Karena itu, perubahan 500 baris membebani setiap giliran berikutnya dalam sesi, bukan hanya giliran saat perubahan tersebut dibuat. Inilah sebabnya refaktor yang tidak terkendali membuat agent terasa semakin lambat dan kurang cerdas selama sesi berlangsung: jendela konteks dipenuhi output agent sendiri, sehingga ruang untuk kode Anda yang sebenarnya semakin kecil. Mengendalikan hal ini adalah inti dari pengelolaan jendela konteks agent coding.
Token ditagihkan untuk input dan output. Karena itu, diff yang ukurannya setengah lebih murah dua kali: sekali saat ditulis, dan sekali lagi pada setiap giliran ketika dibaca ulang. Jika Anda memantau biaya pada setup yang di-host sendiri, file instruksi adalah tuas yang dapat digunakan tanpa biaya. Mengendalikan biaya yang ditimbulkan AI agent dimulai dari volume output, sedangkan cara agent coding menggunakan token menjelaskan mengapa pembacaan ulang lebih berpengaruh daripada yang diperkirakan banyak orang.
Manusia tetap membaca diff tersebut. Perubahan 400 baris yang seharusnya hanya 20 baris menghabiskan perhatian reviewer, sedangkan perhatian adalah sumber daya yang paling cepat habis. Tidak ada orang yang meninjau diff panjang keempat pada hari yang sama dengan ketelitian seperti saat meninjau diff pertama. Jadi, pembangunan berlebihan tidak hanya membuang waktu. Hal ini juga secara diam-diam menurunkan kualitas review yang seharusnya menemukan kesalahan.
Pada server, risikonya berbeda karena agent sering berjalan tanpa pengawasan. Agent yang bekerja dalam sesi tmux atau berdasarkan pengatur waktu memiliki waktu berjam-jam untuk memperbesar dampak keputusan yang salah sebelum Anda melihatnya. Inilah risiko praktis dalam menjalankan agent coding pada VPS, dan inilah sebabnya orang yang melakukan rekayasa loop sangat memperhatikan instruksi yang terus berlaku, bukan hanya prompt individual. Aturan dalam file yang selalu aktif berlaku hingga giliran 200. Aturan yang Anda ketik dalam chat hanya berlaku hingga giliran 3.
Dependensi baru adalah biaya tersembunyi lainnya. Rung 5 menyatakan untuk menggunakan yang sudah terinstal. Setiap paket yang ditambahkan agent atas inisiatifnya sendiri harus Anda patch nanti, dan paket tersebut akan masuk ke setiap image container yang Anda bangun dari repositori itu.
Angka benchmark Ponytail sendiri
Proyek ini memublikasikan dua kelompok hasil, dan keduanya berbeda jauh. Keduanya merupakan angka yang dipublikasikan oleh proyek itu sendiri. Tidak satu pun merupakan pengujian independen.
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
}
]Kolom single shot berasal dari model dasar yang menjawab sekumpulan kecil prompt dengan dan tanpa aturan tersebut. Angka ini dihitung sebagai median dari beberapa proses yang dilakukan pada 13 dan 17 June 2026. Kolom agentic berasal dari sesi Claude Code tanpa antarmuka grafis yang mengedit full-stack-fastapi-template milik tiangolo, yaitu repositori FastAPI dan React nyata, untuk dua belas tiket fitur dengan empat proses pada masing-masing tiket menggunakan Haiku 4.5. Penilaiannya didasarkan pada git diff yang tersisa.
Perhatikan kolom kedua. Hasil agentic menghasilkan 54 persen lebih sedikit baris kode, biaya 20 persen lebih rendah, dan waktu wall clock 27 persen lebih singkat. Sebagai perbandingan, penyiapan single shot menghasilkan 93 persen dan 74 persen untuk ukuran yang sama. README menjelaskan alasannya secara terbuka: baseline single shot adalah model dasar yang "menjawab dengan beberapa opsi beserta komentar", sehingga mudah dikalahkan. Jika dibandingkan dengan agent nyata yang mengerjakan tugas nyata, keuntungannya menyusut. Hasilnya tetap nyata, dan itulah fakta yang lebih berguna.
Ada satu catatan dari proyek itu sendiri. Catatan ini menentukan apakah pendekatan tersebut bermanfaat bagi Anda. Penghematan terbesar terjadi ketika terdapat risiko nyata untuk membangun secara berlebihan, dan mendekati nol pada kode yang sejak awal sudah minimal. Dua belas tiket dalam satu repositori Python dan TypeScript tidak dapat memprediksi kondisi repositori Anda. Jika angka tersebut penting bagi Anda, jalankan perbandingan pada tiket Anda sendiri, dengan dan tanpa aturan tersebut, lalu hitung sendiri jumlah barisnya.
Pola yang dapat Anda salin hari ini tanpa menginstal apa pun
Ladder tersebut berupa teks, jadi Anda tidak memerlukan plugin untuk menggunakan idenya. Tempelkan blok seperti ini ke dalam file instruksi yang sudah dibaca oleh agent Anda, baik file tersebut adalah AGENTS.md, CLAUDE.md, maupun file aturan 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.Aturan terakhir itu layak dibahas secara terpisah. Konvensi Ponytail adalah komentar yang diberi tag nama tool:
# ponytail: global lock, per-account locks if throughput mattersKomentar tersebut menjelaskan dua baris pekerjaan dan menyelesaikan pertanyaan yang jika tidak demikian akan memerlukan satu siklus peninjauan. Komentar itu memberi tahu pembaca berikutnya bahwa versi sederhana tersebut merupakan keputusan, serta menyebutkan kondisi yang membuat keputusan itu tidak lagi berlaku. Tanpa komentar tersebut, reviewer tidak dapat membedakan jalan pintas yang dipertimbangkan dari sesuatu yang terlupa oleh agent, sehingga mereka harus bertanya.
Lokasi penempatan blok sama pentingnya dengan isinya. File yang dimuat agent pada setiap proses akan mengarahkan setiap proses, termasuk proses yang tidak Anda pantau. Perbedaan ini dibahas dalam menulis AGENTS.md yang benar-benar diikuti agent Anda, dan itulah alasan pola ini harus ditempatkan dalam file yang di-commit, bukan dalam shell history Anda.
Saat aturan tidak lagi tepat
Tangga ini disesuaikan untuk pekerjaan fitur pada codebase yang sudah ada, tempat penggunaan ulang biasanya tersedia dan biasanya tepat. Pendekatan ini kurang cocok untuk proyek greenfield, karena pada tingkat 2 tidak ada yang dapat digunakan ulang dan pada tingkat 5 tidak ada yang terpasang, sehingga agen selalu turun ke tingkat 7. Pendekatan ini juga kurang cocok ketika Anda benar-benar ingin menggunakan abstraksi tersebut. Jika Anda akan menambahkan pemanggil keempat untuk blok salinan yang sama, “diff terpendek” akan menghasilkan salinan kelima.
Tingkat ultra akan menantang persyaratan Anda. Itulah tujuan tingkat tersebut, dan ini merupakan biaya nyata ketika Anda sudah mengambil keputusan dan ingin pekerjaan diselesaikan. Gunakan full untuk pekerjaan biasa, dan pilih ultra ketika Anda menduga permintaan fitur merupakan masalahnya.
Tidak ada blok instruksi yang dapat menyelamatkan Anda dari kesalahan memahami masalah. Butir pertama dalam ruleset itu sendiri adalah memahami kode sebelum mengambil keputusan. Inilah bagian yang mahal dan tidak dapat dilakukan oleh teks untuk Anda. Diff minimal pada fungsi yang salah tetap merupakan perbaikan yang salah, dan sekarang menjadi perbaikan salah yang kecil serta mudah disetujui.
Ringkasan yang jujur adalah bahwa Ponytail merupakan prompt yang ditulis dengan cermat, didistribusikan dengan baik, dan dilengkapi angka. Tidak ada bagian di dalamnya yang mengharuskan penggunaan plugin. Yang diberikan proyek ini adalah daftar yang ditulis dengan benar, diuji pada repository nyata, dan diterbitkan bersama hasilnya.
FAQ
Apakah Ponytail berfungsi dengan agent selain Claude Code?
Ya. Ponytail dirilis sebagai skill untuk host yang memuat skill, termasuk Claude Code, Codex, OpenCode, Gemini, dan beberapa lainnya yang disebutkan dalam README. Editor yang membaca file aturan tetapi tidak memuat skill, seperti Cursor, Windsurf, Cline, dan Copilot, menggunakan ruleset yang selalu aktif dari direktori aturan yang sesuai dan tidak mendapatkan slash command. Teksnya sama dalam kedua kondisi tersebut. Perbedaan sebenarnya adalah apakah host Anda mempertahankan teks itu dalam konteks pada setiap giliran atau hanya saat skill dipicu.
Apakah agent yang malas akan melewati pengujian, validasi, atau keamanan?
Tidak. Ruleset menyatakan hal ini secara langsung. Daftar "never lazy about" mencakup validasi input pada batas kepercayaan, penanganan error yang mencegah kehilangan data, keamanan dan aksesibilitas. Daftar itu juga meminta satu pemeriksaan kecil yang dapat dijalankan untuk setiap bagian logika non-trivial. Aturan ini menghapus struktur yang dibuat-buat: abstraksi yang tidak diminta dan dependensi yang tidak diperlukan. Jika agent Anda mulai menghapus pengujian setelah Anda memasangnya, penyebabnya adalah instruksi lain dalam konfigurasi Anda sendiri yang memiliki prioritas lebih tinggi daripada aturan ini. Karena itu, baca file yang terakhir dimuat oleh agent.
Apakah angka kecepatan dan biaya yang dipublikasikan dapat dipercaya?
Angka tersebut adalah hasil pengukuran proyek sendiri, yang dipublikasikan bersama metodenya. Karena itu, bacalah dalam konteks tersebut. Angka single shot membandingkan hasilnya dengan model dasar yang hanya memberikan opsi dan komentar. README sendiri menyatakan bahwa ini adalah baseline yang lemah. Angka agentic berasal dari sesi Claude Code tanpa antarmuka grafis pada satu repositori FastAPI dan React, dengan dua belas tiket dan empat proses per tiket, menggunakan Haiku 4.5. Angka tersebut valid untuk konfigurasi itu. Angka tersebut bukan perkiraan untuk codebase Anda, karena proyek itu juga menyatakan bahwa penghematannya turun mendekati nol pada codebase yang sejak awal sudah minimal.
Apakah saya perlu memasang sesuatu untuk mendapatkan manfaatnya?
Tidak. Ladder tersebut berupa teks. Blok yang setara, jika ditempelkan ke file instruksi yang sudah dibaca oleh agent Anda, memberikan sebagian besar manfaatnya. Plugin menyediakan susunan kata yang dipelihara, tingkat intensitas, command untuk peninjauan, dan jalur pembaruan. Mencoba blok yang disalin terlebih dahulu merupakan jawaban rung 1 untuk pertanyaan apakah instalasi memang perlu dilakukan.
Bagaimana cara menghentikan agent tanpa pengawasan agar tidak membangun terlalu banyak pada malam hari?
Letakkan aturan tersebut dalam file instruksi yang selalu aktif, bukan dalam pesan chat. Dengan demikian, aturan itu berlaku pada giliran 200 dalam proses panjang, bukan hanya pada giliran 3. Setelah itu, batasi dampaknya secara terpisah: berikan agent checkout yang boleh dirusaknya, bukan satu-satunya salinan Anda, dan wajibkan peninjauan diff oleh manusia sebelum perubahan apa pun digabungkan. Aturan diff minimal mengurangi jumlah hal yang harus Anda baca. Aturan itu tidak menentukan perubahan yang masuk, dan memang seharusnya tidak.