SSD Nodes Learn 8GB RAM — $66/taon
Mga Gabay Matt ConnorNi Matt Connor · Na-update 2026-08-02

Ponytail: Paano Paliitin ang Code ng AI Agent

Alamin kung paano inuutos ng Ponytail sa coding agent ang pinakamaliit na gumaganang pagbabago, ano ang ipinapakita ng benchmark nito, at paano kopyahin ang rule.

Ano ang Ponytail

Ang Ponytail ay isang set ng mga panuntunan na nag-uutos sa AI coding agent na magsulat ng mas kaunting code. Inilalarawan ng proyekto ang sarili nito sa isang linya: “Pinag-iisip nito ang AI agent na tulad ng pinakatamad na senior dev sa team. Ang pinakamagandang code ay ang code na hindi mo kailanman isinulat.” May lisensyang MIT ito. Wala itong sariling runtime, at walang bahagi nito ang nag-e-execute. Teksto ito na inilalagay sa mga instruction ng agent. Ipinapamahagi ito bilang skill para sa mga host na naglo-load ng skills at bilang mga plain rule file para sa mga host na hindi naglo-load ng skills.

Ang repository ay DietrichGebert/ponytail. Nilikha ito noong 12 June 2026 at umabot sa 90,000 stars pagsapit ng 1 August 2026. Ang pinakabagong tagged release noong 1 August 2026 ay v4.8.4, na inilathala noong 29 June 2026. Nakalista sa releases page ang sampung tag mula 14 hanggang 29 June lamang. Ang proyektong gumagalaw sa ganoong bilis ay maaaring nagbago na pagdating ng oras na mabasa mo ito, kaya mag-pin ng tag bago ka bumuo ng anuman batay rito.

Ang ideya bago ang tool: huminto sa unang baitang na gumagana

Ang pangunahing prinsipyo ng Ponytail ay isang hagdan ng pagpapasya. Tinatahak ito ng agent bago magsulat ng anuman at humihinto sa unang baitang na naaangkop.

  1. Kailangan ba talaga itong umiral? Ito ang YAGNI (hindi mo ito kakailanganin). Kung hindi ang sagot, laktawan ito.
  2. Umiiral na ba ito sa codebase na ito? Gamitin muli ang helper o pattern na naroon na.
  3. Kaya ba ito ng standard library? Gamitin ito.
  4. May native platform feature bang sumasaklaw dito? Gamitin ito.
  5. May naka-install na dependency bang lumulutas dito? Gamitin ito.
  6. Maaari ba itong maging isang line? Gawin itong isang line.
  7. Saka lamang isulat ang minimum na code na gumagana.

Ang pagkakasunod-sunod ang gumagawa ng trabaho, hindi ang alinmang baitang lamang. Kapag inutusan ang isang agent na gumawa ng date picker, gagawa ito ng date picker dahil iyon ang ipinagawa rito. Pinapatingin muna ito ng hagdan sa baitang 4, at sinasabi ng baitang 4 na mayroon nang <input type="date"> ang browser. Eksaktong tinatalakay ng sariling benchmark notes ng proyekto ang kasong ito: ang date picker na umabot sa 404 lines nang walang rule ay naging 23 lines kapag ginamit ang rule, dahil ginamit ng agent ang native input sa halip na bumuo ng component. Bumaba rin ang colour picker mula 287 lines tungo sa 23 sa parehong dahilan.

Ang pagiging lazy rito ay hindi nangangahulugang pabaya, at malinaw itong sinasabi ng ruleset. Saklaw ng listahan nitong “never lazy about” ang pag-unawa sa problema bago magpasya, validation ng input sa trust boundaries, error handling na pumipigil sa pagkawala ng data, seguridad, accessibility, at anumang tahasan mong ipinagawa. Hinihiling din nito ang isang maliit na runnable check para sa bawat bahagi ng hindi-trivial na logic. Binabawasan ng rule ang pag-iimbento. Hindi nito binabawasan ang correctness.

Ang aktuwal na inilalabas ng repository

  • AGENTS.md, ang always-on ruleset, na naglalaman ng buong ideya sa isang file na mababasa mo sa loob ng limang minuto.
  • skills/ponytail/SKILL.md, ang skill definition, na may argument hint na lite, full o ultra.
  • Mga rule file sa ilalim ng mga directory na partikular sa editor, gaya ng .cursor/rules/ at .windsurf/rules/, para sa mga host na nagbabasa ng rules ngunit hindi naglo-load ng skills.
  • hooks/, benchmarks/, examples/ at scripts/.

Binabago ng intensity argument kung gaano kalakas ipinatutupad ng rule ang panuntunan. Binubuo ng lite ang hiningi mo at tinutukoy nito sa isang linya ang mas maluwag na option. Ang full ang default at ipinapatupad nito ang ladder. Ang ultra ang pinakamatinding YAGNI setting: mas pinipili nito ang pagtanggal kaysa pagdaragdag, at kinukuwestiyon nito mismo ang requirement.

Nakakakuha rin ng slash command ang mga host na kayang gumamit ng skills. Itinatakda ng /ponytail ang level, sinusuri ng /ponytail-review ang diff para sa over-engineering, sinusuri ng /ponytail-audit ang buong repository, kinokolekta ng /ponytail-debt ang mga shortcut na ipinagpaliban mo, at ipinapakita ng /ponytail-gain ang benchmark scorecard. Ang mga host na rule file lamang ang binabasa ay nakakakuha ng ruleset nang walang mga command.

Para mabasa ang source bago ito pagkatiwalaan, i-clone ang tag sa halip na ang branch:

git clone --depth 1 --branch v4.8.4 https://github.com/DietrichGebert/ponytail.git

Sa Claude Code, plugin install ang idinodokumento ng project. Ang dalawang linyang ito ay ayon sa dokumentasyon noong 1 August 2026:

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

Sinusundan ng plugin path ang default branch sa halip na isang tag. Dahil dito, maaaring magbago ang mga instruction na gumagabay sa agent sa pagitan ng mga session. Ito ang kapalit na tinatanggap mo para sa kaginhawaan ng isang update command.

Bakit mas mura ang isang matipid na agent sa isang VPS

Hindi umaalis sa conversation ang diff na ginawa ng agent. Sa susunod na turn, bahagi na ito ng context na muling binabasa ng model, kasama ang bawat file na binuksan nito para gawin ang diff. Kaya ang 500-line na pagbabago ay may gastos sa bawat susunod na turn sa session, hindi lamang sa turn kung kailan ito ginawa. Ito ang dahilan kung bakit habang tumatagal ang session, mas nagmumukhang mabagal at hindi mahusay ang isang runaway refactor: napupuno ang window ng sariling output ng agent, kaya lumiit ang espasyong natitira para sa aktuwal mong code. Ang pagkontrol dito ang buong paksa ng pamamahala sa context window ng coding agent.

Sinisingil ang tokens sa input at output, kaya ang diff na kalahati ang laki ay dalawang beses na mas mura: una kapag isinusulat ito, at muli sa bawat turn na muling nagbabasa nito. Kung sinusubaybayan mo ang bill sa isang self-hosted setup, ang instruction file ay isang lever na walang gastos gamitin. Nagsisimula ang pagkontrol sa gastos ng isang AI agent sa dami ng output, at ipinapaliwanag ng kung paano ginagamit ng coding agent ang mga token nito kung bakit mas mahalaga sa inaasahan ng marami ang muling pagbabasa.

Binabasa pa rin ng tao ang diff. Ang 400-line na pagbabago na dapat sana ay 20 lines lamang ay kumokonsumo sa atensyon ng reviewer, at ang atensyon ang unang nauubos. Walang nagre-review sa ikaapat na mahabang diff ng araw nang kasing-ingat ng pag-review sa una. Kaya ang sobrang pagbuo ay hindi lamang nagsasayang ng oras. Unti-unti rin nitong ibinababa ang kalidad ng review na dapat makatuklas sa mga pagkakamali.

Sa server, nagbabago ang mga panganib dahil madalas tumatakbo ang agent nang walang nagbabantay. Ang agent na gumagana sa isang tmux session o ayon sa timer ay may ilang oras para palalimin ang isang maling desisyon bago mo ito makita. Ito ang praktikal na panganib sa pagpapatakbo ng coding agent sa isang VPS, at ito ang dahilan kung bakit ang mga gumagawa ng loop engineering ay naglalaan ng malaking pag-iingat sa standing instructions, sa halip na sa mga indibidwal na prompt. Nalalapat ang rule sa always-on file sa turn 200. Nalalapat ang rule na itina-type mo sa chat sa turn 3.

Ang mga bagong dependency ang isa pang tahimik na gastos. Sinasabi ng Rung 5 na gamitin ang mga naka-install na. Bawat package na idinadagdag ng agent sa sarili nitong pasya ay kailangan mong i-patch sa hinaharap, at mapupunta rin ito sa bawat container image na binubuo mo mula sa repository na iyon.

Ang sinasabi ng sariling benchmark numbers ng Ponytail

Naglalathala ang proyekto ng dalawang set ng resulta, at malaki ang pagkakaiba ng mga ito. Parehong sariling inilathalang datos ng proyekto ang mga ito. Wala sa mga ito ang resulta ng independenteng test.

ChartPonytail's published reduction vs baseline, percent, Haiku
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
  }
]

Ang column na single shot ay mula sa bare model na sumagot sa maliit na set ng prompts, mayroon man o walang rule, at kinuha bilang median mula sa paulit-ulit na runs na may petsang 13 at 17 June 2026. Ang agentic column ay mula sa headless Claude Code session na nag-edit sa full-stack-fastapi-template ni tiangolo, isang aktuwal na FastAPI at React repository, para sa labindalawang feature ticket na may tig-aapat na run sa Haiku 4.5. Sinukat ang mga resulta batay sa git diff na naiwan.

Basahin ang ikalawang column. Sa agentic result, 54 percent na mas kaunti ang lines of code, 20 percent na mas mababa ang cost, at 27 percent na mas kaunti ang wall-clock time, kumpara sa 93 percent at 74 percent para sa parehong sukatan sa single shot setup. Tapat ang README tungkol sa dahilan: ang single shot baseline ay isang bare model na “sumasagot gamit ang ilang option at karagdagang paliwanag,” kaya madaling higitan. Kapag inihambing sa isang aktuwal na agent na gumagawa ng aktuwal na trabaho, lumiit ang pakinabang. Gayunman, nananatili itong makabuluhang resulta, at iyon ang mas kapaki-pakinabang na impormasyon.

Sariling caveat ito ng proyekto, at ito ang magpapasya kung makatutulong ito sa iyo. Pinakamalaki ang matitipid kapag may tunay na panganib ng sobrang pagbuo, at halos wala kapag minimal na ang code. Hindi sapat na batayan ang labindalawang ticket sa isang Python at TypeScript repository para mahulaan ang resulta sa repository mo. Kung mahalaga sa iyo ang numero, patakbuhin ang paghahambing sa sarili mong mga ticket, mayroon man o walang rule, at ikaw mismo ang magbilang ng mga linya.

Ang pattern na maaari mong kopyahin ngayon nang walang ini-install

Text ang ladder, kaya hindi mo kailangan ang plugin para magamit ang ideya. I-paste ang block na tulad nito sa instruction file na binabasa na ng iyong agent, maging iyon man ay AGENTS.md, CLAUDE.md, o rules file ng iyong editor.

## 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.

Mahalagang tingnan nang hiwalay ang huling rule na iyon. Ang convention ng Ponytail ay isang comment na may tag ng pangalan ng tool:

# ponytail: global lock, per-account locks if throughput matters

Dalawang linya ng trabaho ang comment, at nilulutas nito ang isang tanong na kung hindi ay mangangailangan ng review cycle. Sinasabi nito sa susunod na reader na sinadyang desisyon ang simpleng bersyon, at tinutukoy nito ang kondisyon kung kailan hindi na naaangkop ang desisyong iyon. Kung wala ito, hindi matutukoy ng reviewer kung pinag-isipang shortcut ba ito o nakalimutan lang ito ng agent, kaya kailangan pa nilang magtanong.

Mahalaga kung saan mo ilalagay ang block, kasinghalaga ng sinasabi nito. Ang file na nilo-load ng agent sa bawat run ang gumagabay sa bawat run, kabilang ang mga run na hindi mo binabantayan. Ang pagkakaibang iyon ang paksa ng pagsulat ng AGENTS.md na aktuwal na sinusunod ng iyong agent, at ito ang dahilan kung bakit dapat ilagay ang pattern na ito sa isang committed file sa halip na sa shell history mo.

Kung kailan hindi na tama ang panuntunan

Ang ladder ay ginawa para sa feature work sa isang umiiral nang codebase, kung saan karaniwang available at tama ang reuse. Hindi ito angkop sa greenfield project, dahil walang mare-reuse sa rung 2 at walang naka-install sa rung 5, kaya palaging napupunta ang agent sa rung 7. Hindi rin ito angkop kapag talagang kailangan mo na ng abstraction. Kung magdaragdag ka na ng ikaapat na caller para sa parehong kinopyang block, bibigyan ka ng “shortest diff” ng ikalimang kopya.

Hahamonin ng level na ultra ang iyong mga requirement. Iyan ang layunin ng level, at tunay itong dagdag na gastos kapag nakapagpasya ka na at gusto mo nang matapos ang trabaho. Gamitin ang full para sa karaniwang trabaho, at gamitin ang ultra kapag pinaghihinalaan mong ang feature request mismo ang problema.

Walang instruction block na makapagliligtas sa iyo mula sa maling pag-unawa sa problema. Ang unang item mismo ng ruleset ay ang pag-unawa sa code bago magpasya. Iyan ang magastos na bahagi, at hindi iyon magagawa para sa iyo ng teksto. Ang minimal diff sa maling function ay mali pa ring fix, at isa na itong maliit na maling fix na madaling ma-approve.

Ang tapat na buod ay isang maingat na isinulat na prompt ang Ponytail, na maayos na ipinamahagi at may kalakip na mga numero. Walang bahagi nito ang nangangailangan ng plugin. Ang ibinibigay ng project ay ang wastong pagkakasulat ng listahan, ang pagsubok dito laban sa isang tunay na repository, at ang paglalathala ng method katabi ng resulta.

FAQ

Gumagana ba ang Ponytail sa mga agent maliban sa Claude Code?

Oo. Inilalabas ito bilang skill para sa mga host na naglo-load ng skills. Kabilang sa listahan ang Claude Code, Codex, OpenCode, Gemini, at ilang iba pa na binanggit sa README. Ang mga editor na nagbabasa ng rule files pero hindi naglo-load ng skills, gaya ng Cursor, Windsurf, Cline, at Copilot, ay kumukuha ng always-on ruleset mula sa katugmang rules directory at walang slash commands. Pareho ang text sa dalawang paraan. Ang tunay na kaibahan ay kung pinananatili ng host ang text na iyon sa context sa bawat turn o kapag na-trigger lang ang isang skill.

Lalaktawan ba ng isang tamad na agent ang mga test, validation, o security?

Hindi. Direktang sinasabi ito ng ruleset. Kasama sa listahang "never lazy about" nito ang input validation sa mga trust boundary, error handling na pumipigil sa pagkawala ng data, security, at accessibility. Hinihingi rin nito ang isang maliit na runnable check para sa bawat piraso ng non-trivial logic. Ang inaalis ng rule ay ang istrukturang inimbento lamang: mga abstraction na hindi hiningi ng sinuman at mga dependency na hindi kailangan. Kung nagsimulang magtanggal ng mga test ang agent mo pagkatapos mong i-install ito, ang sanhi ay isa pang instruction sa sarili mong config na mas mataas ang priority kaysa rito. Basahin ang file na huling nilo-load ng agent.

Mapagkakatiwalaan ba ang mga inilathalang numero para sa speed at cost?

Sarili itong mga sukat ng proyekto, na inilathala kasama ang pamamaraan ng pagsukat. Dapat silang unawain ayon dito. Inihahambing ng single shot figures ang mga resulta sa isang bare model na sumasagot gamit ang mga option at commentary. Tinutukoy mismo ng README na mahina ang baseline na iyon. Ang agentic figures ay mula sa isang headless Claude Code session sa isang FastAPI at React repository, na may twelve tickets at four runs bawat isa, gamit ang Haiku 4.5. Tapat ang mga numerong ito para sa setup na iyon. Hindi ang mga ito forecast para sa codebase mo. Sinasabi rin ng proyekto na halos nagiging zero ang natitipid sa code na minimal na dati pa.

May kailangan ba akong i-install para mapakinabangan ito?

Hindi. Text ang ladder. Kung mag-paste ka ng katumbas na block sa instruction file na binabasa na ng agent mo, makukuha mo ang malaking bahagi ng epekto. Ibinibigay ng plugin ang pinapanatiling wording, mga intensity level, review commands, at update path. Ang unang pagsubok sa kinopyang block ay sagot ng rung 1 sa tanong kung kailangan nga bang magkaroon ng install.

Paano ko mapipigilan ang unattended agent na magdagdag ng sobrang dami ng build overnight?

Ilagay ang rule sa always-on instruction file sa halip na sa chat message. Sa ganitong paraan, gagana ito sa turn 200 ng mahabang run at hindi lamang sa turn 3. Pagkatapos, hiwalay na limitahan ang posibleng pinsala. Bigyan ang agent ng checkout na maaari nitong sirain sa halip na ang nag-iisa mong kopya. At mag-require ng human diff review bago magkaroon ng merge. Binabawasan ng minimal diff rule ang dami ng kailangan mong basahin. Hindi nito pinagpapasyahan kung ano ang mapasasama, at hindi rin dapat.