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
<p align="center">
<picture>
<source media="(prefers-color-scheme: dark)" srcset="assets/logo-dark.png">
<img src="assets/logo.png" width="220" alt="Ponytail, the lazy senior dev">
</picture>
</p>
<h1 align="center">Ponytail</h1>
<p align="center">
<em>๋ง์ด ์—†๋‹ค. ํ•œ ์ค„์„ ์“ด๋‹ค. ๋Œ์•„๊ฐ„๋‹ค.</em>
</p>
<p align="center">
<a href="https://trendshift.io/repositories/50668?utm_source=repository-badge&amp;utm_medium=badge&amp;utm_campaign=badge-repository-50668" target="_blank" rel="noopener noreferrer"><img src="https://trendshift.io/api/badge/repositories/50668" alt="DietrichGebert%2Fponytail | Trendshift" width="250" height="55"/></a>
</p>
<p align="center">
<img src="https://img.shields.io/github/stars/DietrichGebert/ponytail?style=flat-square&color=111111&label=stars" alt="Stars">
<img src="https://img.shields.io/github/v/release/DietrichGebert/ponytail?style=flat-square&color=111111&label=release" alt="Release">
<img src="https://img.shields.io/npm/v/@dietrichgebert/ponytail?style=flat-square&color=111111&label=npm" alt="npm">
<img src="https://img.shields.io/badge/works%20with-15%20agents-111111?style=flat-square" alt="Works with 15 agents">
<img src="https://img.shields.io/badge/license-MIT-111111?style=flat-square" alt="MIT license">
</p>
<p align="center">
<a href="https://trendshift.io/repositories/50668" target="_blank" rel="noopener noreferrer"><img src="https://trendshift.io/api/badge/trendshift/repositories/50668/daily" alt="DietrichGebert/ponytail | Trendshift" width="250" height="55"/></a>
<a href="https://trendshift.io/repositories/50668" target="_blank" rel="noopener noreferrer"><img src="https://trendshift.io/api/badge/trendshift/repositories/50668/weekly" alt="DietrichGebert/ponytail | Trendshift" width="250" height="55"/></a>
<a href="https://trendshift.io/repositories/50668?utm_source=trendshift-badge&amp;utm_medium=badge&amp;utm_campaign=badge-trendshift-50668" target="_blank" rel="noopener noreferrer"><img src="https://trendshift.io/api/badge/trendshift/repositories/50668/monthly?language=JavaScript" alt="DietrichGebert%2Fponytail | Trendshift monthly ranking" width="250" height="55"/></a>
</p>
<p align="center">
<strong>์ฝ”๋“œ ์•ฝ 54% ๊ฐ์†Œ(์ตœ๋Œ€ 94%) &middot; ์•ฝ 20% ์ €๋ ด &middot; ์•ฝ 27% ๋น ๋ฆ„ &middot; 100% ์•ˆ์ „</strong><br>
<sub>์‹ค์ œ ์˜คํ”ˆ์†Œ์Šค ์ €์žฅ์†Œ(FastAPI + React)๋ฅผ ๊ณ ์น˜๋Š” ์‹ค์ œ Claude Code ์„ธ์…˜์—์„œ, ์Šคํ‚ฌ์„ ๋ˆ ๊ฐ™์€ ์—์ด์ „ํŠธ์™€ ๊ฒฌ์ค˜ ์ธก์ •ํ–ˆ๋‹ค. ์•ฝ 54%๋Š” ๊ธฐ๋Šฅ ์ž‘์—… 12๊ฑด์˜ ํ‰๊ท ์ด๋‹ค(Haiku 4.5, n=4). ์—์ด์ „ํŠธ๊ฐ€ ๊ณผํ•˜๊ฒŒ ์งค ์—ฌ์ง€๊ฐ€ ์žˆ๋Š” ๊ณณ(๋‚ ์งœ ์„ ํƒ๊ธฐ)์—์„  94%๊นŒ์ง€ ์˜ค๋ฅด๊ณ , ์ฝ”๋“œ๊ฐ€ ์ด๋ฏธ ์ตœ์†Œํ•œ์ธ ๊ณณ์—์„  0์— ๊ฐ€๊น๋‹ค. ponytail์€ ์•ˆ์ „ ๊ฐ€๋“œ๋ฅผ ํ•˜๋‚˜๋„ ๋นผ๋†“์ง€ ์•Š์ง€๋งŒ, ๊ทธ๋ƒฅ "ํ•œ ์ค„๋กœ ์จ"๋ผ๊ณ ๋งŒ ์‹œํ‚จ ํ”„๋กฌํ”„ํŠธ๋Š” ๊ทธ์ค‘ ํ•˜๋‚˜๋ฅผ ๋†“์นœ๋‹ค. (์˜ˆ์ „ ๋‹จ๋ฐœ์„ฑ ๋ฒค์น˜๋งˆํฌ๋Š” 80-94%๋ฅผ ๋‹จ์ผ ์ˆ˜์น˜๋กœ ๋‚ด์„ธ์› ๋Š”๋ฐ, ๊ณต์ •ํ•œ ์—์ด์ „ํŠธ ๊ธฐ์ค€์„ ์— ๊ฒฌ์ฃผ๋ฉด ๊ทธ๊ฑด ํ‰๊ท ์ด ์•„๋‹ˆ๋ผ ์ž‘์—…๋ณ„ ์ƒํ•œ์ด๋‹ค.) <a href="benchmarks/results/2026-06-18-agentic.md">์ „์ฒด ๋ณด๊ณ ์„œ</a> &middot; <a href="benchmarks/">์ง์ ‘ ์žฌํ˜„ํ•˜๊ธฐ</a>.</sub>
</p>
<p align="center">
<sub>์ปค๋ฎค๋‹ˆํ‹ฐ ๋ฒˆ์—ญ์ด๋‹ค. ๊ธฐ์ค€์ด ๋˜๋Š” ์ตœ์‹  ๋ฒ„์ „์€ <a href="README.md">์˜์–ด README</a>๋‹ค.</sub>
</p>
---
<p align="center">
<a href="https://ponytail.dev/soon"><img src="assets/waitlist-banner-ko.png" alt="์ƒˆ๋กœ์šด ๊ฒƒ์ด ๋‹ค๊ฐ€์˜ค๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค, ๋Œ€๊ธฐ์ž ๋ช…๋‹จ ์‹ ์ฒญ" width="760"></a>
</p>
์ด๋Ÿฐ ์‚ฌ๋žŒ, ๋‹ค๋“ค ์•Œ ๊ฑฐ๋‹ค. ๊ธด ํฌ๋‹ˆํ…Œ์ผ์— ํƒ€์›ํ˜• ์•ˆ๊ฒฝ. ๋ฒ„์ „ ๊ด€๋ฆฌ ์‹œ์Šคํ…œ๋ณด๋‹ค ํšŒ์‚ฌ์— ์˜ค๋ž˜ ์žˆ์—ˆ๋‹ค. ์ฝ”๋“œ ์‰ฐ ์ค„์„ ๋“ค์ด๋ฐ€๋ฉด ์ž ๊น ๋ณด๋”๋‹ˆ, ๋ง์—†์ด ํ•œ ์ค„๋กœ ๋ฐ”๊ฟ” ๋†“๋Š”๋‹ค.
Ponytail์€ ๊ทธ๋ฅผ ๋‹น์‹ ์˜ AI ์—์ด์ „ํŠธ ์•ˆ์— ์•‰ํ˜€ ๋‘”๋‹ค.
## Before / after
๋‚ ์งœ ์„ ํƒ๊ธฐ ํ•˜๋‚˜ ๋งŒ๋“ค์–ด ๋‹ฌ๋ผ๊ณ  ํ•œ๋‹ค. ์—์ด์ „ํŠธ๋Š” flatpickr๋ฅผ ๊น”๊ณ , ๋ž˜ํผ ์ปดํฌ๋„ŒํŠธ๋ฅผ ์งœ๊ณ , ์Šคํƒ€์ผ์‹œํŠธ๋ฅผ ๋ถ™์ด๋”๋‹ˆ, ํƒ€์ž„์กด ์–˜๊ธฐ๋ฅผ ๊บผ๋‚ด๊ธฐ ์‹œ์ž‘ํ•œ๋‹ค.
ponytail์ด๋ผ๋ฉด:
```html
<!-- ponytail: browser has one -->
<input type="date">
```
์‚ด์•„๋‚จ์€ ๊ฒƒ๋“ค์ด ๋” ๊ถ๊ธˆํ•˜๋‹ค๋ฉด [examples/](examples/)๋กœ.
## Numbers
๊ณต์ •ํ•˜๊ฒŒ ์žฌ๋ ค๋ฉด ์‹ค์ œ ์—์ด์ „ํŠธ์—๊ฒŒ ์‹ค์งˆ์ ์ธ ์ž‘์—…์„ ์‹œ์ผœ ๋ด์•ผ ํ•œ๋‹ค. ํ—ค๋“œ๋ฆฌ์Šค Claude Code ์„ธ์…˜์—๊ฒŒ [tiangolo์˜ full-stack-fastapi-template](https://github.com/fastapi/full-stack-fastapi-template)(์ง„์งœ FastAPI + React ์ €์žฅ์†Œ)์„ ๋งก๊ธฐ๊ณ , ๋‚จ๊ธด `git diff`๋กœ ์ ์ˆ˜๋ฅผ ๋งค๊ฒผ๋‹ค. ๊ธฐ๋Šฅ ํ‹ฐ์ผ“ 12๊ฑด, ๊ฐ™์€ ์—์ด์ „ํŠธ๋ฅผ ์Šคํ‚ฌ๋งŒ ์ผœ๊ณ  ๋„๋ฉฐ ๋น„๊ต, n=4, Haiku 4.5.
<p align="center">
<img src="assets/benchmark-agentic.svg" width="860" alt="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%.">
</p>
| ์Šคํ‚ฌ ์—†๋Š” ๊ธฐ์ค€์„  ๋Œ€๋น„ | 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](benchmarks/results/2026-06-18-agentic.md)์— ์žˆ๋‹ค.
<details>
<summary><strong>์˜ˆ์ „ ๋‹จ๋ฐœ์„ฑ ์ˆ˜์น˜ (๊ฒฉ๋ฆฌ๋œ ์ƒ์„ฑ)</strong></summary>
์ผ์ƒ์ ์ธ ์ž‘์—… ๋‹ค์„ฏ ๊ฐ€์ง€, ๋ชจ๋ธ ์…‹, ๋น„๊ต๊ตฐ ์…‹(์Šคํ‚ฌ ์—†์Œ, [caveman](https://github.com/JuliusBrussee/caveman), ponytail), 10ํšŒ ์‹คํ–‰, ์ค‘์•™๊ฐ’ ๊ธฐ์ค€. ํ”„๋กฌํ”„ํŠธ ํ•˜๋‚˜์— ์‘๋‹ต ํ•˜๋‚˜, ๋‹ต๋ณ€์˜ ์ค„ ์ˆ˜๋ฅผ ์…Œ๋‹ค:
<p align="center">
<img src="assets/benchmark-3model.svg" width="860" alt="Median lines of code per arm across Haiku, Sonnet and Opus">
</p>
์—ฌ๊ธฐ์„  **์ฝ”๋“œ 80-94% ๊ฐ์†Œ**๊ฐ€ ๋‚˜์™”๋‹ค. ๋‹ค๋งŒ [#126](https://github.com/DietrichGebert/ponytail/issues/126)์ด ๋งž๊ฒŒ ์งš์—ˆ๋“ฏ, ์Šคํ‚ฌ์„ ์ „ํ˜€ ์•ˆ ๋ถ™์ธ ๊ธฐ์ค€์„  ๋ชจ๋ธ์€ ๋‹ต๋ณ€์„ ์„ค๋ช…๊ณผ ์„ ํƒ์ง€๋กœ ๋ถ€ํ’€๋ฆฐ๋‹ค. ๊ทธ๋ž˜์„œ ๊ทธ ๊ฒฉ์ฐจ์˜ ์ผ๋ถ€๋Š” ๋Œ€ํ™”ํ˜• ๊ธฐ์ค€์„ ์ด ๋งŒ๋“ค์–ด ๋‚ธ ์ฐฉ์‹œ๋‹ค. ์œ„์˜ ์—์ด์ „ํŠธ ์ˆ˜์น˜๊ฐ€ ๊ทธ๊ฑธ ๋ฐ”๋กœ์žก์€, ๊ทผ๊ฑฐ ์žˆ๋Š” ๋ฒ„์ „์ด๋‹ค. ๋‹จ๋ฐœ์„ฑ ์‹คํ–‰์€ `npx promptfoo eval -c benchmarks/promptfooconfig.yaml`๋กœ ์žฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.
</details>
**๊ทœ์น™์€ ์• ์ดˆ์— "ํ† ํฐ ์ตœ์†Œํ™”"๊ฐ€ ์•„๋‹ˆ์—ˆ๋‹ค.** ์ž‘์—…์— ํ•„์š”ํ•œ ๋งŒํผ๋งŒ ์“ฐ๋˜, ๊ฒ€์ฆยท์—๋Ÿฌ ์ฒ˜๋ฆฌยท๋ณด์•ˆยท์ ‘๊ทผ์„ฑ์€ ์ ˆ๋Œ€ ๋œ์–ด๋‚ด์ง€ ์•Š๋Š”๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. ์ฝ”๋“œ๊ฐ€ ์ž‘์•„์ง€๋Š” ๊ฑด ์–ต์ง€๋กœ ์ค„์—ฌ์„œ๊ฐ€ ์•„๋‹ˆ๋ผ ๋”ฑ ๊ทธ๋งŒํผ๋งŒ ํ•„์š”ํ•ด์„œ๋‹ค. ๋น„์šฉ๊ณผ ์ง€์—ฐ์ด ๋‚ฎ์•„์ง€๋Š” ๊ฒƒ๋„ ๋‹จ๊ณ„๋ฅผ ์ถฉ์‹คํžˆ ๋ฐŸ๋Š” ๋ชจ๋ธ์—์„œ๋‚˜ ๋ถ€์ˆ˜์ ์œผ๋กœ ๋”ธ๋ ค ์˜ค๋Š” ํšจ๊ณผ์ผ ๋ฟ์ด๋‹ค. ๊ทธ ๋‹จ๊ณ„๋ฅผ ๊ณ ๋ฏผํ•˜๋А๋ผ ์‚ฌ๊ณ  ํ† ํฐ์„ ์Ÿ๋Š” ๊ฐ„๊ฒฐํ•œ ์ถ”๋ก  ๋ชจ๋ธ์€ ์˜คํžˆ๋ ค ๊ฑฐ๊พธ๋กœ ๊ฐˆ ์ˆ˜๋„ ์žˆ๋‹ค(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
```bash
codex plugin marketplace add DietrichGebert/ponytail
codex
```
`/plugins`๋ฅผ ์—ด์–ด Ponytail ๋งˆ์ผ“ํ”Œ๋ ˆ์ด์Šค๋ฅผ ๊ณ ๋ฅด๊ณ  Ponytail์„ ์„ค์น˜ํ•œ๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ
`/hooks`๋ฅผ ์—ด์–ด ๋ผ์ดํ”„์‚ฌ์ดํด ํ›… ๋‘ ๊ฐœ๋ฅผ ๊ฒ€ํ† ํ•˜๊ณ  ์‹ ๋ขฐํ•œ ๋’ค, ์ƒˆ ์Šค๋ ˆ๋“œ๋ฅผ ์‹œ์ž‘ํ•œ๋‹ค.
์ด ์„ค์น˜ ํ•œ ๋ฒˆ์ด๋ฉด Codex ๋ฐ์Šคํฌํ†ฑ ์•ฑ๋„ ๊ฐ™์ด ์žกํžŒ๋‹ค. ์„ค์น˜ ํ›„ ์•ฑ์„ ๋‹ค์‹œ ์ผœ๋ฉด ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ์•Œ์•„์ฑˆ๋‹ค.
### GitHub Copilot CLI
```bash
copilot plugin marketplace add DietrichGebert/ponytail
copilot plugin install ponytail@ponytail
```
๋Œ€ํ™”ํ˜• Copilot CLI ์„ธ์…˜์—์„œ๋Š” ์Šฌ๋ž˜์‹œ ๋ช…๋ น์œผ๋กœ ๋˜‘๊ฐ™์ด ํ•˜๋ฉด ๋œ๋‹ค:
```
/plugin marketplace add DietrichGebert/ponytail
/plugin install ponytail@ponytail
```
Copilot CLI๋Š” ํ”Œ๋Ÿฌ๊ทธ์ธ ๋ช…๋ น์— ๊ทธ ์ด๋ฆ„์„ ๋„ค์ž„์ŠคํŽ˜์ด์Šค๋กœ ๋ถ™์ธ๋‹ค. ์˜ˆ๋ฅผ ๋“ค๋ฉด:
```text
/ponytail:ponytail ultra
/ponytail:ponytail-review
```
### Pi agent harness
```
pi install git:github.com/DietrichGebert/ponytail
```
### OpenCode
`opencode.json`์— ๋‹ค์Œ์„ ๋”ํ•œ๋‹ค:
```json
{ "plugin": ["@dietrichgebert/ponytail"] }
```
์ฒดํฌ์•„์›ƒ์—์„œ ์ง์ ‘ ๋Œ๋ ค๋„ ๋œ๋‹ค(ํ”Œ๋Ÿฌ๊ทธ์ธ์ด `hooks/`์™€ `skills/`๋ฅผ ๊ทธ๋Œ€๋กœ ์“ด๋‹ค):
```json
{ "plugin": ["./.opencode/plugins/ponytail.mjs"] }
```
๋งค ํ„ด๋งˆ๋‹ค ์ง€๊ธˆ ๋ ˆ๋ฒจ์˜ ๋ฃฐ์…‹์„ ์ฃผ์ž…ํ•˜๊ณ , `/ponytail` ๋ช…๋ น๋“ค์„ ๋ถ™์—ฌ ์ค€๋‹ค([Commands](#commands) ์ฐธ๊ณ ). OpenCode๋Š” ์ด ์ €์žฅ์†Œ์˜ `AGENTS.md`๋„ ์•Œ์•„์„œ ๋ถˆ๋Ÿฌ์˜ค๋‹ˆ, ํ”Œ๋Ÿฌ๊ทธ์ธ์ด ์—†์–ด๋„ ๊ทœ์น™์€ ์‚ด์•„ ์žˆ๋‹ค. ํ”Œ๋Ÿฌ๊ทธ์ธ์€ `lite/full/ultra/off` ๋ ˆ๋ฒจ์„ ์–น์–ด ์ค€๋‹ค.
`./` ๊ฒฝ๋กœ๋Š” ํ”„๋กœ์ ํŠธ์˜ `opencode.json`์„ ๊ธฐ์ค€์œผ๋กœ ํ’€๋ฆฐ๋‹ค. ์ฒดํฌ์•„์›ƒ ํ•˜๋‚˜๋ฅผ ์—ฌ๋Ÿฌ ํ”„๋กœ์ ํŠธ์—์„œ ๊ฐ™์ด ์“ฐ๋ ค๋ฉด, ๋Œ€์‹  `.mjs`์˜ ์ ˆ๋Œ€ ๊ฒฝ๋กœ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋ฉด ๋œ๋‹ค(๊ทธ ํŒŒ์ผ์€ ์ œ ์œ„์น˜๋ฅผ ๊ธฐ์ค€์œผ๋กœ `hooks/`์™€ `skills/`๋ฅผ ์ฐพ๋Š”๋‹ค).
### Gemini CLI
```bash
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` ๋ฐ”์ด๋„ˆ๋ฆฌ)๋กœ ์ด๋ฆ„์„ ๋ฐ”๊พธ๋Š” ์ค‘์ธ๋ฐ, ๊ฐ™์€ ํ™•์žฅ์ด ๊ฑฐ๊ธฐ์—๋„ ์„ค์น˜๋œ๋‹ค:
```bash
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`](AGENTS.md)๋ฅผ ํ”„๋กœ์ ํŠธ์— ๋ณต์‚ฌํ•˜๊ฑฐ๋‚˜, ์ด ์ €์žฅ์†Œ๋ฅผ ์ฒดํฌ์•„์›ƒํ•œ ๊ณณ์—์„œ `codewhale`์„ ๋Œ๋ฆฌ๋ฉด ๋œ๋‹ค. ๊ทธ๊ฒŒ ๋์ด๋‹ค.
### Swival
๋จผ์ € ์ปฌ๋ ‰์…˜์„ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— ์Šคํ…Œ์ด์ง•ํ•œ ๋‹ค์Œ, ์›ํ•˜๋Š” ์Šคํ‚ฌ์„ ๋”ํ•œ๋‹ค:
```bash
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
```bash
devin plugins install DietrichGebert/ponytail
```
ponytail์„ Devin ํ”Œ๋Ÿฌ๊ทธ์ธ์œผ๋กœ ์„ค์น˜ํ•œ๋‹ค. ์Šคํ‚ฌ์€ `/ponytail:ponytail`, `/ponytail:ponytail-review` ๋“ฑ์œผ๋กœ ์“ธ ์ˆ˜ ์žˆ๋‹ค.
### OpenClaw
```bash
clawhub install ponytail
```
ClawHub์—์„œ ponytail์„ OpenClaw ์Šคํ‚ฌ๋กœ ์„ค์น˜ํ•œ๋‹ค. review, audit, debt, gain, help ์Šคํ‚ฌ๋„ ๊ฐ™์€ ์‹์œผ๋กœ ๊น๋‹ค(`clawhub install ponytail-review` ๋“ฑ). OpenClaw๋Š” ์ฝ”๋”ฉ ์ž‘์—…์— ์ด๋ฅผ ์ ์šฉํ•˜๊ณ  `/ponytail` ๋ช…๋ น์œผ๋กœ๋„ ์—ด์–ด ์ค€๋‹ค. ClawHub๊ฐ€ ์—†์œผ๋ฉด [`.openclaw/skills/ponytail`](.openclaw/skills/)์„ `~/.openclaw/skills/`์— ๋ณต์‚ฌํ•˜๋ฉด ๋œ๋‹ค.
### Grok Build
```bash
grok plugin install DietrichGebert/ponytail --trust
```
ํ”Œ๋Ÿฌ๊ทธ์ธ์€ ๊ธฐ๋ณธ์ด ๊บผ์ ธ ์žˆ๋‹ค. `/plugins` โ†’ Plugins์—์„œ `ponytail`์— Space, ๋˜๋Š” `~/.grok/config.toml`:
```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](#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/`](.cursor/rules/), [`.windsurf/rules/`](.windsurf/rules/), [`.clinerules/`](.clinerules/), [`.github/copilot-instructions.md`](.github/copilot-instructions.md), [`AGENTS.md`](AGENTS.md), [`.kiro/steering/`](.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](docs/agent-portability.md).
## 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
์••์ถ• ๊ทœ์น™ ํ…์ŠคํŠธ๋ฅผ ๋ฐ”๊ฟ€ ๋•Œ๋Š”, ์—์ด์ „ํŠธ ์‚ฌ๋ณธ๋“ค์„ ๊ฐ™์€ ์ƒํƒœ๋กœ ๋งž์ถฐ ๋‘”๋‹ค:
```bash
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
<p align="center">
<a href="https://greenpt.com/">
<picture>
<source media="(prefers-color-scheme: dark)" srcset="assets/logo-greenpt-dark.svg">
<img src="assets/logo-greenpt.svg" width="260" alt="GreenPT">
</picture>
</a>
</p>
## License
[MIT](LICENSE). ๋Œ์•„๊ฐ€๋Š” ๊ฐ€์žฅ ์งง์€ ๋ผ์ด์„ ์Šค.
## Star History
<a href="https://www.star-history.com/dietrichgebert/ponytail#history">
<picture>
<source media="(prefers-color-scheme: dark)" srcset="https://api.star-history.com/chart?repos=DietrichGebert/ponytail&type=Date&theme=dark" />
<source media="(prefers-color-scheme: light)" srcset="https://api.star-history.com/chart?repos=DietrichGebert/ponytail&type=Date" />
<img alt="Star History Chart" src="https://api.star-history.com/chart?repos=DietrichGebert/ponytail&type=Date" />
</picture>
</a>