|
Download ponytail/README.ko.md from smlflg/CodingAgent: direct link, hf CLI and curl.
- Browser
- Download file 19.7 kB
-
https://huggingface.co/smlflg/CodingAgent/resolve/main/ponytail/README.ko.md
- Command line
-
hf download hf://smlflg/CodingAgent/ponytail/README.ko.md
-
curl -L -o README.ko.md https://huggingface.co/smlflg/CodingAgent/resolve/main/ponytail/README.ko.md
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&utm_medium=badge&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&utm_medium=badge&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%) · ์ฝ 20% ์ ๋ ด · ์ฝ 27% ๋น ๋ฆ · 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> · <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> | |