CodingAgent / ponytail /README.ko.md
smlflg's picture
Initial public upload from Projekte/CodingAgent (part 6)
bf57148 verified
|
Raw History Blame Contribute Delete
19.7 kB

Ponytail, the lazy senior dev

Ponytail

๋ง์ด ์—†๋‹ค. ํ•œ ์ค„์„ ์“ด๋‹ค. ๋Œ์•„๊ฐ„๋‹ค.

DietrichGebert%2Fponytail | Trendshift

Stars Release npm Works with 15 agents MIT license

DietrichGebert/ponytail | Trendshift DietrichGebert/ponytail | Trendshift DietrichGebert%2Fponytail | Trendshift monthly ranking

์ฝ”๋“œ ์•ฝ 54% ๊ฐ์†Œ(์ตœ๋Œ€ 94%) ยท ์•ฝ 20% ์ €๋ ด ยท ์•ฝ 27% ๋น ๋ฆ„ ยท 100% ์•ˆ์ „
์‹ค์ œ ์˜คํ”ˆ์†Œ์Šค ์ €์žฅ์†Œ(FastAPI + React)๋ฅผ ๊ณ ์น˜๋Š” ์‹ค์ œ Claude Code ์„ธ์…˜์—์„œ, ์Šคํ‚ฌ์„ ๋ˆ ๊ฐ™์€ ์—์ด์ „ํŠธ์™€ ๊ฒฌ์ค˜ ์ธก์ •ํ–ˆ๋‹ค. ์•ฝ 54%๋Š” ๊ธฐ๋Šฅ ์ž‘์—… 12๊ฑด์˜ ํ‰๊ท ์ด๋‹ค(Haiku 4.5, n=4). ์—์ด์ „ํŠธ๊ฐ€ ๊ณผํ•˜๊ฒŒ ์งค ์—ฌ์ง€๊ฐ€ ์žˆ๋Š” ๊ณณ(๋‚ ์งœ ์„ ํƒ๊ธฐ)์—์„  94%๊นŒ์ง€ ์˜ค๋ฅด๊ณ , ์ฝ”๋“œ๊ฐ€ ์ด๋ฏธ ์ตœ์†Œํ•œ์ธ ๊ณณ์—์„  0์— ๊ฐ€๊น๋‹ค. ponytail์€ ์•ˆ์ „ ๊ฐ€๋“œ๋ฅผ ํ•˜๋‚˜๋„ ๋นผ๋†“์ง€ ์•Š์ง€๋งŒ, ๊ทธ๋ƒฅ "ํ•œ ์ค„๋กœ ์จ"๋ผ๊ณ ๋งŒ ์‹œํ‚จ ํ”„๋กฌํ”„ํŠธ๋Š” ๊ทธ์ค‘ ํ•˜๋‚˜๋ฅผ ๋†“์นœ๋‹ค. (์˜ˆ์ „ ๋‹จ๋ฐœ์„ฑ ๋ฒค์น˜๋งˆํฌ๋Š” 80-94%๋ฅผ ๋‹จ์ผ ์ˆ˜์น˜๋กœ ๋‚ด์„ธ์› ๋Š”๋ฐ, ๊ณต์ •ํ•œ ์—์ด์ „ํŠธ ๊ธฐ์ค€์„ ์— ๊ฒฌ์ฃผ๋ฉด ๊ทธ๊ฑด ํ‰๊ท ์ด ์•„๋‹ˆ๋ผ ์ž‘์—…๋ณ„ ์ƒํ•œ์ด๋‹ค.) ์ „์ฒด ๋ณด๊ณ ์„œ ยท ์ง์ ‘ ์žฌํ˜„ํ•˜๊ธฐ.

์ปค๋ฎค๋‹ˆํ‹ฐ ๋ฒˆ์—ญ์ด๋‹ค. ๊ธฐ์ค€์ด ๋˜๋Š” ์ตœ์‹  ๋ฒ„์ „์€ ์˜์–ด README๋‹ค.


์ƒˆ๋กœ์šด ๊ฒƒ์ด ๋‹ค๊ฐ€์˜ค๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค, ๋Œ€๊ธฐ์ž ๋ช…๋‹จ ์‹ ์ฒญ

์ด๋Ÿฐ ์‚ฌ๋žŒ, ๋‹ค๋“ค ์•Œ ๊ฑฐ๋‹ค. ๊ธด ํฌ๋‹ˆํ…Œ์ผ์— ํƒ€์›ํ˜• ์•ˆ๊ฒฝ. ๋ฒ„์ „ ๊ด€๋ฆฌ ์‹œ์Šคํ…œ๋ณด๋‹ค ํšŒ์‚ฌ์— ์˜ค๋ž˜ ์žˆ์—ˆ๋‹ค. ์ฝ”๋“œ ์‰ฐ ์ค„์„ ๋“ค์ด๋ฐ€๋ฉด ์ž ๊น ๋ณด๋”๋‹ˆ, ๋ง์—†์ด ํ•œ ์ค„๋กœ ๋ฐ”๊ฟ” ๋†“๋Š”๋‹ค.

Ponytail์€ ๊ทธ๋ฅผ ๋‹น์‹ ์˜ AI ์—์ด์ „ํŠธ ์•ˆ์— ์•‰ํ˜€ ๋‘”๋‹ค.

Before / after

๋‚ ์งœ ์„ ํƒ๊ธฐ ํ•˜๋‚˜ ๋งŒ๋“ค์–ด ๋‹ฌ๋ผ๊ณ  ํ•œ๋‹ค. ์—์ด์ „ํŠธ๋Š” flatpickr๋ฅผ ๊น”๊ณ , ๋ž˜ํผ ์ปดํฌ๋„ŒํŠธ๋ฅผ ์งœ๊ณ , ์Šคํƒ€์ผ์‹œํŠธ๋ฅผ ๋ถ™์ด๋”๋‹ˆ, ํƒ€์ž„์กด ์–˜๊ธฐ๋ฅผ ๊บผ๋‚ด๊ธฐ ์‹œ์ž‘ํ•œ๋‹ค.

ponytail์ด๋ผ๋ฉด:

<!-- ponytail: browser has one -->
<input type="date">

์‚ด์•„๋‚จ์€ ๊ฒƒ๋“ค์ด ๋” ๊ถ๊ธˆํ•˜๋‹ค๋ฉด examples/๋กœ.

Numbers

๊ณต์ •ํ•˜๊ฒŒ ์žฌ๋ ค๋ฉด ์‹ค์ œ ์—์ด์ „ํŠธ์—๊ฒŒ ์‹ค์งˆ์ ์ธ ์ž‘์—…์„ ์‹œ์ผœ ๋ด์•ผ ํ•œ๋‹ค. ํ—ค๋“œ๋ฆฌ์Šค Claude Code ์„ธ์…˜์—๊ฒŒ tiangolo์˜ full-stack-fastapi-template(์ง„์งœ FastAPI + React ์ €์žฅ์†Œ)์„ ๋งก๊ธฐ๊ณ , ๋‚จ๊ธด git diff๋กœ ์ ์ˆ˜๋ฅผ ๋งค๊ฒผ๋‹ค. ๊ธฐ๋Šฅ ํ‹ฐ์ผ“ 12๊ฑด, ๊ฐ™์€ ์—์ด์ „ํŠธ๋ฅผ ์Šคํ‚ฌ๋งŒ ์ผœ๊ณ  ๋„๋ฉฐ ๋น„๊ต, n=4, Haiku 4.5.

Each arm as a percent of the no-skill baseline across LOC, tokens, cost and time (Haiku 4.5). ponytail is lowest on every metric (LOC 46%, tokens 78%, cost 80%, time 73%); caveman rises above 100% on tokens, cost and time; yagni-oneliner LOC 67%. Safety, separate adversarial tier: baseline, caveman and ponytail 100%, yagni-oneliner 95%.

์Šคํ‚ฌ ์—†๋Š” ๊ธฐ์ค€์„  ๋Œ€๋น„ LOC tokens cost time safe
ponytail -54% -22% -20% -27% 100%
caveman (๊ฐ„๊ฒฐํ•œ ์‚ฐ๋ฌธ ๋Œ€์กฐ๊ตฐ) -20% +7% +3% +2% 100%
"YAGNI + one-liners" ํ”„๋กฌํ”„ํŠธ -33% -14% -21% -30% 95%

๋ชจ๋“  ์ง€ํ‘œ๋ฅผ ๊นŽ์€ ๊ฑด ponytail๋ฟ์ด๊ณ , ๊ทธ๋Ÿฌ๋ฉด์„œ ์•ˆ์ „๊นŒ์ง€ ์˜จ์ „ํžˆ ์ง€ํ‚จ ๊ฒƒ๋„ ponytail๋ฟ์ด๋‹ค. ๊นŽ์ด๋Š” ํญ์€ ๊ณผ์ž‰ ๊ตฌํ˜„์˜ ํ•จ์ •์ด ์‹ค์ œ๋กœ ์žˆ๋Š” ๊ณณ์—์„œ ๊ฐ€์žฅ ํฌ๋‹ค. ์ปดํฌ๋„ŒํŠธ ๋Œ€์‹  ๋„ค์ดํ‹ฐ๋ธŒ <input>์œผ๋กœ ์†์ด ๊ฐ€๋‹ˆ ๋‚ ์งœ ์„ ํƒ๊ธฐ๋Š” 404์ค„์—์„œ 23์ค„๋กœ, ์ƒ‰์ƒ ์„ ํƒ๊ธฐ๋Š” 287์ค„์—์„œ 23์ค„๋กœ ์ค„์–ด๋“ ๋‹ค. ๋ฐ˜๋Œ€๋กœ ์ด๋ฏธ ๊ตฐ๋”๋”๊ธฐ ์—†๋Š” ์ฝ”๋“œ์—์„  ๊ฑฐ์˜ 0์ด๋‹ค. ์ „์ฒด ๋ฐฉ๋ฒ•๋ก , ์ž‘์—…๋ณ„ ํ‘œ, ํ•œ๊ณ„๋Š” benchmarks/results/2026-06-18-agentic.md์— ์žˆ๋‹ค.

์˜ˆ์ „ ๋‹จ๋ฐœ์„ฑ ์ˆ˜์น˜ (๊ฒฉ๋ฆฌ๋œ ์ƒ์„ฑ)

์ผ์ƒ์ ์ธ ์ž‘์—… ๋‹ค์„ฏ ๊ฐ€์ง€, ๋ชจ๋ธ ์…‹, ๋น„๊ต๊ตฐ ์…‹(์Šคํ‚ฌ ์—†์Œ, caveman, ponytail), 10ํšŒ ์‹คํ–‰, ์ค‘์•™๊ฐ’ ๊ธฐ์ค€. ํ”„๋กฌํ”„ํŠธ ํ•˜๋‚˜์— ์‘๋‹ต ํ•˜๋‚˜, ๋‹ต๋ณ€์˜ ์ค„ ์ˆ˜๋ฅผ ์…Œ๋‹ค:

Median lines of code per arm across Haiku, Sonnet and Opus

์—ฌ๊ธฐ์„  ์ฝ”๋“œ 80-94% ๊ฐ์†Œ๊ฐ€ ๋‚˜์™”๋‹ค. ๋‹ค๋งŒ #126์ด ๋งž๊ฒŒ ์งš์—ˆ๋“ฏ, ์Šคํ‚ฌ์„ ์ „ํ˜€ ์•ˆ ๋ถ™์ธ ๊ธฐ์ค€์„  ๋ชจ๋ธ์€ ๋‹ต๋ณ€์„ ์„ค๋ช…๊ณผ ์„ ํƒ์ง€๋กœ ๋ถ€ํ’€๋ฆฐ๋‹ค. ๊ทธ๋ž˜์„œ ๊ทธ ๊ฒฉ์ฐจ์˜ ์ผ๋ถ€๋Š” ๋Œ€ํ™”ํ˜• ๊ธฐ์ค€์„ ์ด ๋งŒ๋“ค์–ด ๋‚ธ ์ฐฉ์‹œ๋‹ค. ์œ„์˜ ์—์ด์ „ํŠธ ์ˆ˜์น˜๊ฐ€ ๊ทธ๊ฑธ ๋ฐ”๋กœ์žก์€, ๊ทผ๊ฑฐ ์žˆ๋Š” ๋ฒ„์ „์ด๋‹ค. ๋‹จ๋ฐœ์„ฑ ์‹คํ–‰์€ npx promptfoo eval -c benchmarks/promptfooconfig.yaml๋กœ ์žฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.

๊ทœ์น™์€ ์• ์ดˆ์— "ํ† ํฐ ์ตœ์†Œํ™”"๊ฐ€ ์•„๋‹ˆ์—ˆ๋‹ค. ์ž‘์—…์— ํ•„์š”ํ•œ ๋งŒํผ๋งŒ ์“ฐ๋˜, ๊ฒ€์ฆยท์—๋Ÿฌ ์ฒ˜๋ฆฌยท๋ณด์•ˆยท์ ‘๊ทผ์„ฑ์€ ์ ˆ๋Œ€ ๋œ์–ด๋‚ด์ง€ ์•Š๋Š”๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. ์ฝ”๋“œ๊ฐ€ ์ž‘์•„์ง€๋Š” ๊ฑด ์–ต์ง€๋กœ ์ค„์—ฌ์„œ๊ฐ€ ์•„๋‹ˆ๋ผ ๋”ฑ ๊ทธ๋งŒํผ๋งŒ ํ•„์š”ํ•ด์„œ๋‹ค. ๋น„์šฉ๊ณผ ์ง€์—ฐ์ด ๋‚ฎ์•„์ง€๋Š” ๊ฒƒ๋„ ๋‹จ๊ณ„๋ฅผ ์ถฉ์‹คํžˆ ๋ฐŸ๋Š” ๋ชจ๋ธ์—์„œ๋‚˜ ๋ถ€์ˆ˜์ ์œผ๋กœ ๋”ธ๋ ค ์˜ค๋Š” ํšจ๊ณผ์ผ ๋ฟ์ด๋‹ค. ๊ทธ ๋‹จ๊ณ„๋ฅผ ๊ณ ๋ฏผํ•˜๋А๋ผ ์‚ฌ๊ณ  ํ† ํฐ์„ ์Ÿ๋Š” ๊ฐ„๊ฒฐํ•œ ์ถ”๋ก  ๋ชจ๋ธ์€ ์˜คํžˆ๋ ค ๊ฑฐ๊พธ๋กœ ๊ฐˆ ์ˆ˜๋„ ์žˆ๋‹ค(GPT-5.5๊ฐ€ ๊ทธ๋ ‡๋‹ค).

How it works

์ฝ”๋“œ๋ฅผ ์“ฐ๊ธฐ ์ „์—, ์—์ด์ „ํŠธ๋Š” ๊ฐ€์žฅ ๋จผ์ € ๋“ค์–ด๋งž๋Š” ๋‹จ๊ณ„์—์„œ ๋ฉˆ์ถ˜๋‹ค:

1. ์ด๊ฒŒ ์žˆ์„ ํ•„์š”๊ฐ€ ์žˆ๋‚˜?      โ†’ ์—†๋‹ค: ๊ฑด๋„ˆ๋›ด๋‹ค (YAGNI)
2. ์ด๋ฏธ ์ด ์ฝ”๋“œ๋ฒ ์ด์Šค์— ์žˆ๋‚˜?  โ†’ ๋‹ค์‹œ ์งœ์ง€ ๋ง๊ณ  ๊ฐ€์ ธ๋‹ค ์“ด๋‹ค
3. ํ‘œ์ค€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ ๋˜๋‚˜?     โ†’ ์“ด๋‹ค
4. ๋„ค์ดํ‹ฐ๋ธŒ ํ”Œ๋žซํผ ๊ธฐ๋Šฅ์ธ๊ฐ€?   โ†’ ์“ด๋‹ค
5. ๊น”๋ ค ์žˆ๋Š” ์˜์กด์„ฑ์ด ํ‘ธ๋‚˜?    โ†’ ์“ด๋‹ค
6. ํ•œ ์ค„๋กœ ๋˜๋‚˜?               โ†’ ํ•œ ์ค„
7. ๊ทธ์ œ์„œ์•ผ: ๋Œ์•„๊ฐ€๋Š” ์ตœ์†Œํ•œ

๋‹จ๊ณ„๋ฅผ ๋ฐŸ๋Š” ๊ฑด ๋ฌธ์ œ๋ฅผ ์ดํ•ดํ•œ ๋‹ค์Œ์ด์ง€, ์ดํ•ด๋ฅผ ๋Œ€์‹ ํ•˜๋Š” ๊ฒŒ ์•„๋‹ˆ๋‹ค. ๋ณ€๊ฒฝ์ด ๋‹ฟ๋Š” ์ฝ”๋“œ๋ฅผ ์ฝ๊ณ  ์‹ค์ œ ํ๋ฆ„์„ ๋”ฐ๋ผ๊ฐ€ ๋ณธ ๋’ค์—์•ผ ๋‹จ๊ณ„๋ฅผ ๊ณ ๋ฅธ๋‹ค. ํ•ด๋ฒ•์—๋Š” ๊ฒŒ์„๋Ÿฌ๋„, ์ฝ๋Š” ๋ฐ๋Š” ์ ˆ๋Œ€ ๊ฒŒ์œผ๋ฅด์ง€ ์•Š๋‹ค.

๊ฒŒ์œผ๋ฅธ ๊ฑฐ์ง€ ๋ถ€์ฃผ์˜ํ•œ ๊ฒŒ ์•„๋‹ˆ๋‹ค. ์‹ ๋ขฐ ๊ฒฝ๊ณ„์˜ ๊ฒ€์ฆ, ๋ฐ์ดํ„ฐ ์†์‹ค ๋ฐฉ์ง€, ๋ณด์•ˆ, ์ ‘๊ทผ์„ฑ์€ ๊ฒฐ์ฝ” ์ž˜๋ ค ๋‚˜๊ฐ€์ง€ ์•Š๋Š”๋‹ค.

Install

ponytail์ด ๋‹น์‹ ์—๊ฒŒ ์š”๊ตฌํ•  ์ˆ˜๊ณ ์˜ ์ตœ๋Œ€์น˜:

Claude Code์™€ Codex ํ”Œ๋Ÿฌ๊ทธ์ธ์€ ์ž๊ทธ๋งˆํ•œ Node.js ๋ผ์ดํ”„์‚ฌ์ดํด ํ›… ๋‘ ๊ฐœ๋ฅผ ๋Œ๋ฆฌ๋‹ˆ, node๊ฐ€ PATH์— ์žกํ˜€ ์žˆ์–ด์•ผ ํ•œ๋‹ค(Nix/nvm ์‚ฌ์šฉ์ž๋ผ๋ฉด ๋น„๋Œ€ํ™”ํ˜• ์…ธ์˜ PATH์— ์žˆ์–ด์•ผ ํ•œ๋‹ค). ์—†์–ด๋„ ์Šคํ‚ฌ์€ ๋ฉ€์ฉกํžˆ ๋Œ์•„๊ฐ„๋‹ค. ๋‹ค๋งŒ ๋Š˜ ์ผœ์ ธ ์žˆ๋˜ ์ž๋™ ํ™œ์„ฑํ™”๊ฐ€ ๋งค ํ”„๋กฌํ”„ํŠธ๋งˆ๋‹ค ์—๋Ÿฌ๋ฅผ ๋ฑ‰๋Š” ๋Œ€์‹  ์กฐ์šฉํžˆ ๋น„ํ™œ์„ฑ์œผ๋กœ ๋‚จ์„ ๋ฟ์ด๋‹ค.

Claude Code

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

(์„ค์น˜๊ฐ€ ๋˜๋ ค๋ฉด ๋‘ ํ”„๋กฌํ”„ํŠธ๋ฅผ ๋”ฐ๋กœ ๋ณด๋‚ด์•ผ ํ•œ๋‹ค)

๋ฐ์Šคํฌํ†ฑ ์•ฑ์—๋Š” /plugin ๋ช…๋ น์ด ์—†๋‹ค. ๋Œ€์‹  UI์—์„œ ์„ค์น˜ํ•œ๋‹ค: Customize, ๊ฐœ์ธ ํ”Œ๋Ÿฌ๊ทธ์ธ ์˜†์˜ +, Create plugin and add marketplace, Add from repository, ๊ทธ๋‹ค์Œ ์ €์žฅ์†Œ URL ์ž…๋ ฅ(๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค @NiklasDHahn, #98).

Codex

codex plugin marketplace add DietrichGebert/ponytail
codex

/plugins๋ฅผ ์—ด์–ด Ponytail ๋งˆ์ผ“ํ”Œ๋ ˆ์ด์Šค๋ฅผ ๊ณ ๋ฅด๊ณ  Ponytail์„ ์„ค์น˜ํ•œ๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ /hooks๋ฅผ ์—ด์–ด ๋ผ์ดํ”„์‚ฌ์ดํด ํ›… ๋‘ ๊ฐœ๋ฅผ ๊ฒ€ํ† ํ•˜๊ณ  ์‹ ๋ขฐํ•œ ๋’ค, ์ƒˆ ์Šค๋ ˆ๋“œ๋ฅผ ์‹œ์ž‘ํ•œ๋‹ค.

์ด ์„ค์น˜ ํ•œ ๋ฒˆ์ด๋ฉด Codex ๋ฐ์Šคํฌํ†ฑ ์•ฑ๋„ ๊ฐ™์ด ์žกํžŒ๋‹ค. ์„ค์น˜ ํ›„ ์•ฑ์„ ๋‹ค์‹œ ์ผœ๋ฉด ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ์•Œ์•„์ฑˆ๋‹ค.

GitHub Copilot CLI

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

๋Œ€ํ™”ํ˜• Copilot CLI ์„ธ์…˜์—์„œ๋Š” ์Šฌ๋ž˜์‹œ ๋ช…๋ น์œผ๋กœ ๋˜‘๊ฐ™์ด ํ•˜๋ฉด ๋œ๋‹ค:

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

Copilot CLI๋Š” ํ”Œ๋Ÿฌ๊ทธ์ธ ๋ช…๋ น์— ๊ทธ ์ด๋ฆ„์„ ๋„ค์ž„์ŠคํŽ˜์ด์Šค๋กœ ๋ถ™์ธ๋‹ค. ์˜ˆ๋ฅผ ๋“ค๋ฉด:

/ponytail:ponytail ultra
/ponytail:ponytail-review

Pi agent harness

pi install git:github.com/DietrichGebert/ponytail

OpenCode

opencode.json์— ๋‹ค์Œ์„ ๋”ํ•œ๋‹ค:

{ "plugin": ["@dietrichgebert/ponytail"] }

์ฒดํฌ์•„์›ƒ์—์„œ ์ง์ ‘ ๋Œ๋ ค๋„ ๋œ๋‹ค(ํ”Œ๋Ÿฌ๊ทธ์ธ์ด hooks/์™€ skills/๋ฅผ ๊ทธ๋Œ€๋กœ ์“ด๋‹ค):

{ "plugin": ["./.opencode/plugins/ponytail.mjs"] }

๋งค ํ„ด๋งˆ๋‹ค ์ง€๊ธˆ ๋ ˆ๋ฒจ์˜ ๋ฃฐ์…‹์„ ์ฃผ์ž…ํ•˜๊ณ , /ponytail ๋ช…๋ น๋“ค์„ ๋ถ™์—ฌ ์ค€๋‹ค(Commands ์ฐธ๊ณ ). OpenCode๋Š” ์ด ์ €์žฅ์†Œ์˜ AGENTS.md๋„ ์•Œ์•„์„œ ๋ถˆ๋Ÿฌ์˜ค๋‹ˆ, ํ”Œ๋Ÿฌ๊ทธ์ธ์ด ์—†์–ด๋„ ๊ทœ์น™์€ ์‚ด์•„ ์žˆ๋‹ค. ํ”Œ๋Ÿฌ๊ทธ์ธ์€ lite/full/ultra/off ๋ ˆ๋ฒจ์„ ์–น์–ด ์ค€๋‹ค.

./ ๊ฒฝ๋กœ๋Š” ํ”„๋กœ์ ํŠธ์˜ opencode.json์„ ๊ธฐ์ค€์œผ๋กœ ํ’€๋ฆฐ๋‹ค. ์ฒดํฌ์•„์›ƒ ํ•˜๋‚˜๋ฅผ ์—ฌ๋Ÿฌ ํ”„๋กœ์ ํŠธ์—์„œ ๊ฐ™์ด ์“ฐ๋ ค๋ฉด, ๋Œ€์‹  .mjs์˜ ์ ˆ๋Œ€ ๊ฒฝ๋กœ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋ฉด ๋œ๋‹ค(๊ทธ ํŒŒ์ผ์€ ์ œ ์œ„์น˜๋ฅผ ๊ธฐ์ค€์œผ๋กœ hooks/์™€ skills/๋ฅผ ์ฐพ๋Š”๋‹ค).

Gemini CLI

gemini extensions install https://github.com/DietrichGebert/ponytail

๋งค ์„ธ์…˜ ๋ฃฐ์…‹์„ ๋Š˜ ์ผœ์ง„ ์ปจํ…์ŠคํŠธ๋กœ ๋ถˆ๋Ÿฌ์˜ค๊ณ  /ponytail ๋ช…๋ น๋“ค์„ ๋“ฑ๋กํ•œ๋‹ค. skills/๋„ ํ•จ๊ป˜ ์‹ค๋ฆฌ๋ฉฐ, ์ž‘์—…์— ํ•„์š”ํ•  ๋•Œ ์ผœ์ง„๋‹ค. Gemini ์–ด๋Œ‘ํ„ฐ๋Š” ์ผ๋ถ€๋Ÿฌ ๋ฃจํŠธ hooks/hooks.json์„ ๋‘์ง€ ์•Š๋Š”๋‹ค. Gemini๋Š” ๊ทธ ๊ฒฝ๋กœ๋ฅผ ์ž๋™์œผ๋กœ ๋ถˆ๋Ÿฌ์˜ค๋Š”๋ฐ, ponytail์˜ ๋ผ์ดํ”„์‚ฌ์ดํด ํ›…์€ Claude/Codex ์ด๋ฒคํŠธ ์ด๋ฆ„์„ ์“ฐ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

Antigravity CLI

Google์ด Gemini CLI๋ฅผ Antigravity CLI(agy ๋ฐ”์ด๋„ˆ๋ฆฌ)๋กœ ์ด๋ฆ„์„ ๋ฐ”๊พธ๋Š” ์ค‘์ธ๋ฐ, ๊ฐ™์€ ํ™•์žฅ์ด ๊ฑฐ๊ธฐ์—๋„ ์„ค์น˜๋œ๋‹ค:

agy plugin install https://github.com/DietrichGebert/ponytail

์ด ์ €์žฅ์†Œ์˜ gemini-extension.json์„ ๊ทธ๋Œ€๋กœ ์žฌ์‚ฌ์šฉํ•œ๋‹ค. ์ฐจ์ด๋Š” ํ•˜๋‚˜๋‹ค. Antigravity๋Š” /ponytail ๋ช…๋ น๋“ค์„ ์Šคํ‚ฌ๋กœ ๋ฐ”๊ฟ” ๋ฒ„๋ ค์„œ, ์Šฌ๋ž˜์‹œ ๋ฉ”๋‰ด์—์„œ ๊ณ ๋ฅด๋Š” ๋Œ€์‹  ์ฑ„ํŒ…์— ์ง์ ‘ ์นœ๋‹ค(์˜ˆ: /ponytail-review๋ฅผ ๋ฉ”์‹œ์ง€๋กœ). ์ „ํ™˜์ด ๋งˆ๋ฌด๋ฆฌ๋  ๋•Œ๊นŒ์ง€(2026๋…„ 6์›” 18์ผ๊ฒฝ)๋Š” gemini extensions install๋„ ์—ฌ์ „ํžˆ ๋จนํžŒ๋‹ค. ๋Š˜ ์ผœ์ง„ ๊ทœ์น™์œผ๋กœ ๋Œ๋ฆฌ๊ณ  ์‹ถ์œผ๋ฉด, ๋ฃฐ์…‹์„ .agents/rules/์— ๋„ฃ์œผ๋ฉด ๋œ๋‹ค.

CodeWhale

ํ”„๋กœ์ ํŠธ ๋ฃจํŠธ์˜ AGENTS.md๋ฅผ ์ฝ๊ณ , ์„ค์ •์€ ์ „ํ˜€ ํ•„์š” ์—†๋‹ค. AGENTS.md๋ฅผ ํ”„๋กœ์ ํŠธ์— ๋ณต์‚ฌํ•˜๊ฑฐ๋‚˜, ์ด ์ €์žฅ์†Œ๋ฅผ ์ฒดํฌ์•„์›ƒํ•œ ๊ณณ์—์„œ codewhale์„ ๋Œ๋ฆฌ๋ฉด ๋œ๋‹ค. ๊ทธ๊ฒŒ ๋์ด๋‹ค.

Swival

๋จผ์ € ์ปฌ๋ ‰์…˜์„ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— ์Šคํ…Œ์ด์ง•ํ•œ ๋‹ค์Œ, ์›ํ•˜๋Š” ์Šคํ‚ฌ์„ ๋”ํ•œ๋‹ค:

swival skills add --global https://github.com/DietrichGebert/ponytail  # ~/.config/swival/library์— ์Šคํ…Œ์ด์ง•
swival skills add ponytail                                             # ์ด ํ”„๋กœ์ ํŠธ์— ์ปฌ๋ ‰์…˜ ์„ค์น˜
swival skills add --global ponytail                                    # ๋˜๋Š” ๋ชจ๋“  ํ”„๋กœ์ ํŠธ์—์„œ ์ผœ๊ธฐ

Swival๋„ ํ”„๋กœ์ ํŠธ ๋ฃจํŠธ์˜ AGENTS.md์™€ ์ „์—ญ์˜ ~/.config/swival/AGENTS.md๋ฅผ ์ฝ๋Š”๋‹ค. ์ง€์‹œ๋ฌธ ์ „์šฉ ํด๋ฐฑ์ด๋‹ค.

๋ช…๋ น์ค„์—์„œ๋Š” $ ์ ‘๋‘์‚ฌ๋กœ ์Šคํ‚ฌ์„ ๋ช…์‹œ์ ์œผ๋กœ ์ผ ๋‹ค. ์˜ˆ: $ponytail-review.

Devin CLI

devin plugins install DietrichGebert/ponytail

ponytail์„ Devin ํ”Œ๋Ÿฌ๊ทธ์ธ์œผ๋กœ ์„ค์น˜ํ•œ๋‹ค. ์Šคํ‚ฌ์€ /ponytail:ponytail, /ponytail:ponytail-review ๋“ฑ์œผ๋กœ ์“ธ ์ˆ˜ ์žˆ๋‹ค.

OpenClaw

clawhub install ponytail

ClawHub์—์„œ ponytail์„ OpenClaw ์Šคํ‚ฌ๋กœ ์„ค์น˜ํ•œ๋‹ค. review, audit, debt, gain, help ์Šคํ‚ฌ๋„ ๊ฐ™์€ ์‹์œผ๋กœ ๊น๋‹ค(clawhub install ponytail-review ๋“ฑ). OpenClaw๋Š” ์ฝ”๋”ฉ ์ž‘์—…์— ์ด๋ฅผ ์ ์šฉํ•˜๊ณ  /ponytail ๋ช…๋ น์œผ๋กœ๋„ ์—ด์–ด ์ค€๋‹ค. ClawHub๊ฐ€ ์—†์œผ๋ฉด .openclaw/skills/ponytail์„ ~/.openclaw/skills/์— ๋ณต์‚ฌํ•˜๋ฉด ๋œ๋‹ค.

Grok Build

grok plugin install DietrichGebert/ponytail --trust

ํ”Œ๋Ÿฌ๊ทธ์ธ์€ ๊ธฐ๋ณธ์ด ๊บผ์ ธ ์žˆ๋‹ค. /plugins โ†’ Plugins์—์„œ ponytail์— Space, ๋˜๋Š” ~/.grok/config.toml:

[plugins]
enabled = ["ponytail"]

์ƒˆ ์„ธ์…˜์„ ์—ด๊ฑฐ๋‚˜ ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ๋‹ค์‹œ ๋กœ๋“œํ•œ๋‹ค. ์Šคํ‚ฌ์€ /ponytail, /ponytail-review, /ponytail-audit, /ponytail-debt, /ponytail-gain, /ponytail-help๋กœ ๋ณด์ธ๋‹ค. grok inspect๋กœ ํ™•์ธ. Grok์€ ์Šคํ‚ฌ ์„ค๋ช…์„ ๋ฐ”ํƒ•์œผ๋กœ ์ฝ”๋”ฉ ์ž‘์—…์—์„œ ponytail์„ ์ž๋™์œผ๋กœ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ๋‹ค. ๋ช…์‹œ์ ์œผ๋กœ ํ™œ์„ฑํ™”ํ•ด์•ผ ํ•˜๋ฉด /ponytail(๋˜๋Š” /ponytail lite, /ponytail full, /ponytail ultra)์„ ์‚ฌ์šฉํ•œ๋‹ค. SessionStart ์ถœ๋ ฅ์œผ๋กœ๋Š” ์ง€์‹œ๋ฌธ์„ ์ฃผ์ž…ํ•  ์ˆ˜ ์—†์œผ๋ฏ€๋กœ Grok ๋ผ์ดํ”„์‚ฌ์ดํด ํ›…์€ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค.

์ฒดํฌ์•„์›ƒ์˜ AGENTS.md๋งŒ์œผ๋กœ๋„ ์ง€์‹œ๋ฌธ ์ „์šฉ ๋ชจ๋“œ๋Š” ๋œ๋‹ค. ์ œ๊ฑฐ: grok plugin uninstall ponytail.

์ด๊ฒŒ ๋์ด์—ˆ๋‹ค. ๊ทธ ์‚ฌ๋žŒ์ด๋ผ๋ฉด ํ๋ญ‡ํ•ดํ•  ๊ฑฐ๋‹ค. ์ž… ๋ฐ–์œผ๋กœ ๋‚ด์ง„ ์•Š๊ฒ ์ง€๋งŒ.

๋งค ์„ธ์…˜ ์ผœ์ ธ ์žˆ๊ณ , ๋ช…๋ น ๋ช‡ ๊ฐœ๊ฐ€ ๋”ธ๋ ค ์˜จ๋‹ค(Commands ์ฐธ๊ณ ). /ponytail ultra๋Š” ์ฝ”๋“œ๋ฒ ์ด์Šค๊ฐ€ ๋‹น์‹ ์—๊ฒŒ ๋‹จ๋‹จํžˆ ๋ฐ‰๋ณด์ธ ๋‚ ์„ ์œ„ํ•ด ์žˆ๋‹ค. ์‹œ์ž‘ํ•  ๋•Œ์™€ ๋ชจ๋“œ๋ฅผ ๋ฐ”๊ฟ€ ๋•Œ ์ง€๊ธˆ ๋ชจ๋“œ๋ฅผ ๋ณด์—ฌ ์ค€๋‹ค.

์ƒˆ ์„ธ์…˜๋งˆ๋‹ค ์ ์šฉํ•  ๋ ˆ๋ฒจ์€ PONYTAIL_DEFAULT_MODE ํ™˜๊ฒฝ ๋ณ€์ˆ˜(lite/full/ultra/off)๋กœ, ๋˜๋Š” ~/.config/ponytail/config.json์˜ defaultMode ํ•„๋“œ(Windows์—์„  %APPDATA%\ponytail\config.json)๋กœ ์ •ํ•œ๋‹ค. ๊ธฐ๋ณธ๊ฐ’์€ full์ด๋‹ค.

Cursor, Windsurf, Cline, GitHub Copilot(์—๋””ํ„ฐ), Aider, Kiro, Zed, CodeWhale: ์ด ์ €์žฅ์†Œ์—์„œ ๋งž๋Š” ๊ทœ์น™ ํŒŒ์ผ์„ ๋ณต์‚ฌํ•˜๋ฉด ๋œ๋‹ค(.cursor/rules/, .windsurf/rules/, .clinerules/, .github/copilot-instructions.md, AGENTS.md, .kiro/steering/).

Kiro: .kiro/steering/ponytail.md๋ฅผ ~/.kiro/steering/(์ „์—ญ)์ด๋‚˜ ํ”„๋กœ์ ํŠธ์˜ .kiro/steering/์— ๋ณต์‚ฌํ•œ๋‹ค.

GitHub Copilot CLI ํด๋ฐฑ(์ง€์‹œ๋ฌธ ์ „์šฉ ๋ชจ๋“œ): ํ”„๋กœ์ ํŠธ์˜ AGENTS.md์™€ .github/copilot-instructions.md๋ฅผ ์ฝ๊ฑฐ๋‚˜, ๋ชจ๋“  ํ”„๋กœ์ ํŠธ์—์„œ ponytail์„ ๋Œ๋ฆฌ๋ ค๋ฉด ๊ทœ์น™์„ ~/.copilot/copilot-instructions.md์— ๋ณต์‚ฌํ•œ๋‹ค. ์ด ๊ฒฝ๋กœ๋Š” ๋Š˜ ์ผœ์ง„ ๊ฐ€์ด๋“œ๋Š” ์‚ด๋ฆฌ์ง€๋งŒ, ํ”Œ๋Ÿฌ๊ทธ์ธ ๋ชจ๋“œ ์ „ํ™˜์ด๋‚˜ ํ›…์€ ๋”ํ•ด ์ฃผ์ง€ ์•Š๋Š”๋‹ค.

Codex ํ™•์žฅ์„ ์“ฐ๋Š” VS Code๋Š” ์ด ์ €์žฅ์†Œ๊ฐ€ ํ•จ๊ป˜ ์‹ฃ๋Š” AGENTS.md๋ฅผ ์ฝ์œผ๋‹ˆ, ์ €์žฅ์†Œ ๋ฃจํŠธ์—์„œ ์„ค์ • ์—†์ด ๋Œ์•„๊ฐ„๋‹ค(~/.codex/AGENTS.md๋ฅผ ๋‘๋ฉด Codex ์ „์—ญ์œผ๋กœ ์žกํžŒ๋‹ค).

์–ด๋–ค ํŒŒ์ผ์ด ์–ด๋А ์—์ด์ „ํŠธ์— ๋งคํ•‘๋˜๋Š”์ง€: Agent portability.

Commands

๋ช…๋ น ํ•˜๋Š” ์ผ
/ponytail [lite | full | ultra | off] ๊ฐ•๋„๋ฅผ ์ •ํ•˜๊ฑฐ๋‚˜, ๋ˆ๋‹ค. ์ธ์ˆ˜๊ฐ€ ์—†์œผ๋ฉด ์ง€๊ธˆ ๋ ˆ๋ฒจ์„ ์•Œ๋ ค ์ค€๋‹ค.
/ponytail-review ์ง€๊ธˆ diff๋ฅผ ๊ณผ์ž‰ ๊ตฌํ˜„ ๊ด€์ ์—์„œ ํ›‘๊ณ , ์‚ญ์ œ ๋ชฉ๋ก์„ ๋Œ๋ ค์ค€๋‹ค.
/ponytail-audit diff๋งŒ์ด ์•„๋‹ˆ๋ผ ์ €์žฅ์†Œ ์ „์ฒด๋ฅผ ๊ณผ์ž‰ ๊ตฌํ˜„ ๊ด€์ ์—์„œ ๊ฐ์‚ฌํ•œ๋‹ค.
/ponytail-debt ๋ฏธ๋ค„ ๋‘” ponytail: ๊ฐ„์†Œํ™”๋“ค์„ ์žฅ๋ถ€๋กœ ๋ชจ์•„, "๋‚˜์ค‘์—"๊ฐ€ "์˜์˜"์ด ๋˜์ง€ ์•Š๊ฒŒ ํ•œ๋‹ค.
/ponytail-gain ๋ฒค์น˜๋งˆํฌ๋กœ ์žฐ ํšจ๊ณผ ์Šค์ฝ”์–ด๋ณด๋“œ(์ฝ”๋“œ ์ ˆ๊ฐ, ๋น„์šฉ ์ ˆ๊ฐ, ์†๋„ ํ–ฅ์ƒ)๋ฅผ ๋ณด์—ฌ ์ค€๋‹ค.
/ponytail-help ์œ„ ๋ช…๋ น๋“ค์˜ ๋น ๋ฅธ ์ฐธ์กฐ.

๋ช…๋ น๋“ค์€ ์Šคํ‚ฌ์„ ์ง€์›ํ•˜๋Š” ํ˜ธ์ŠคํŠธ๊ฐ€ ์žˆ์–ด์•ผ ๋ˆ๋‹ค(Claude Code, Codex, Devin CLI, OpenCode, Gemini, pi, Swival). Codex์—์„  ์Šคํ‚ฌ์ด๋ผ @๋กœ ๋ถ€๋ฅธ๋‹ค(@ponytail-review). ์ง€์‹œ๋ฌธ ์ „์šฉ ์–ด๋Œ‘ํ„ฐ(Cursor, Windsurf, Cline, Copilot, Kiro, Antigravity)๋Š” ๋ช…๋ น ์—†์ด ๋Š˜ ์ผœ์ง„ ๋ฃฐ์…‹๋งŒ ๋ถˆ๋Ÿฌ์˜จ๋‹ค.

Development

์••์ถ• ๊ทœ์น™ ํ…์ŠคํŠธ๋ฅผ ๋ฐ”๊ฟ€ ๋•Œ๋Š”, ์—์ด์ „ํŠธ ์‚ฌ๋ณธ๋“ค์„ ๊ฐ™์€ ์ƒํƒœ๋กœ ๋งž์ถฐ ๋‘”๋‹ค:

node scripts/check-rule-copies.js
npm test

OpenClaw ์Šคํ‚ฌ ํŒจํ‚ค์ง€(.openclaw/skills/)๋Š” skills/์—์„œ ์ƒ์„ฑ๋œ๋‹ค. ์Šคํ‚ฌ์„ ๋ฐ”๊พผ ๋’ค์—๋Š” node scripts/build-openclaw-skills.js๋ฅผ ๋‹ค์‹œ ๋Œ๋ฆฐ๋‹ค. ๋ฌต์€ ์ƒํƒœ๋ฉด ํ…Œ์ŠคํŠธ ์Šค์œ„ํŠธ๊ฐ€ ์‹คํŒจํ•œ๋‹ค.

์ •ํ™•์„ฑ ๋ฒค์น˜๋งˆํฌ๋Š” ์ด๋ฉ”์ผยทCSV ๊ฒ€์‚ฌ๋ฅผ ์œ„ํ•ด Python์„ ๋„์šด๋‹ค. python๋ณด๋‹ค python3๋ฅผ ๋จผ์ € ์‹œ๋„ํ•œ๋‹ค. CSV ๊ฒ€์‚ฌ๋Š” ๋กœ์ปฌ์— pandas๊ฐ€ ๊น”๋ ค ์žˆ์–ด์•ผ ํ•œ๋‹ค.

FAQ

์„ค์ • ํŒŒ์ผ์ด ํ•„์š”ํ•œ๊ฐ€? ์•„๋‹ˆ๋‹ค. ์„ ํƒ ์‚ฌํ•ญ์ธ ~/.config/ponytail/config.json์ด๋‚˜ PONYTAIL_DEFAULT_MODE ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋กœ ๊ธฐ๋ณธ ๋ ˆ๋ฒจ์„ ์ •ํ•  ์ˆœ ์žˆ์ง€๋งŒ, ๊ผญ ์žˆ์–ด์•ผ ํ•˜๋Š” ๊ฑด ์—†๋‹ค.

๊ทธ๋ž˜๋„ 120์ค„์งœ๋ฆฌ ์บ์‹œ ํด๋ž˜์Šค๊ฐ€ ์ •๋ง ํ•„์š”ํ•˜๋‹ค๋ฉด? ํ•„์š” ์—†๋‹ค. ๊ทธ๋ž˜๋„ ์šฐ๊ธฐ๋ฉด ๊ทธ๊ฐ€ ๋งŒ๋“ค์–ด ์ค€๋‹ค. ์ฒœ์ฒœํžˆ. ์ •ํ™•ํ•˜๊ฒŒ. ๋‹น์‹ ์„ ์ณ๋‹ค๋ณด๋ฉด์„œ.

ํ™•์žฅ์€ ๋˜๋‚˜? ๋‹น์‹ ์ด ์•ˆ ์“ด ์ฝ”๋“œ๋Š” ๋ฌดํ•œํžˆ ํ™•์žฅ๋œ๋‹ค. ๋ฒ„๊ทธ 0, CVE 0, ๊ฐ€๋™๋ฅ  100%. ์˜ˆ๋‚˜ ์ง€๊ธˆ์ด๋‚˜.

์™œ ํ•˜ํ•„ "ponytail"์ธ๊ฐ€? ๋‹น์‹ ์€ ์ด์œ ๋ฅผ ์ •ํ™•ํžˆ ์•ˆ๋‹ค.

Sponsors

GreenPT

License

MIT. ๋Œ์•„๊ฐ€๋Š” ๊ฐ€์žฅ ์งง์€ ๋ผ์ด์„ ์Šค.

Star History

Star History Chart