Dietrich Gebert가 만든 오픈소스 플러그인(
DietrichGebert/ponytail).
왜 필요한가?
날짜 선택기를 하나 만들어 달라고 하면, 에이전트는 flatpickr를 설치하고 래퍼 컴포넌트를 짜고 스타일시트를 붙인 뒤 타임존 이야기를 꺼냅니다. 브라우저에 이미 들어 있는 기능인데도 그렇습니다.
<!-- ponytail: browser has one -->
<input type="date">
Ponytail은 이런 상황을 막는 규칙 세트입니다. 에이전트가 코드를 쓰기 전에 정해진 순서로 “더 적게 만들 방법”을 먼저 확인하게 합니다. 저장소 설명은 이를 “the laziest senior dev in the room”으로 표현합니다. 쉰 줄을 보여주면 말없이 한 줄로 바꿔 놓는 시니어 개발자를 에이전트 안에 앉혀 둔다는 비유입니다.
핵심은 토큰을 아끼는 것이 아닙니다. README는 규칙을 이렇게 정리합니다. 작업에 필요한 것만 쓰되, 검증과 오류 처리, 보안, 접근성은 절대 빼지 않는다. 코드가 작아지는 것은 억지로 줄여서가 아니라 필요한 것만 남겨서라는 설명입니다.
무엇을 할 수 있나
examples/ 디렉터리에 벤치마크 실행 결과가 그대로 들어 있습니다. 같은 모델(Claude Haiku 4.5)에게 같은 작업을 시키고, 플러그인이 없을 때와 있을 때의 출력을 나란히 둔 것입니다.
| 작업 | 플러그인 없음 | Ponytail 적용 |
|---|---|---|
| 이메일 검증 | 75줄 | 3줄 |
| Debounce | 116줄 | 10줄 |
| CSV 합계 | 20줄 | 3줄 |
| 카운트다운 타이머(React) | 267줄 | 9줄 |
| 속도 제한(rate limit) | 128줄 | 10줄 |
객체 깊은 복사를 예로 들면, 적용 전에는 lodash를 설치해 cloneDeep을 쓰거나 JSON.parse(JSON.stringify(...)) 방식을 제안합니다. 적용 후에는 브라우저와 Node.js에 내장된 함수를 씁니다.
// ponytail: structuredClone does this
const copy = structuredClone(original);
이 예시들은 손으로 쓴 것이 아니라 npx promptfoo@latest eval -c benchmarks/promptfooconfig.yaml로 재현할 수 있습니다.
근거: DietrichGebert/ponytail README, examples/README.md.
핵심 기능
-
7단계 사다리
코드를 쓰기 전에 위에서부터 확인해, 처음 걸리는 단계에서 멈춥니다.
- 이게 꼭 있어야 하나 (아니면 만들지 않는다)
- 이 코드베이스에 이미 있나 (있으면 재사용한다)
- 표준 라이브러리로 되나
- 플랫폼 기본 기능으로 되나
- 이미 설치된 의존성으로 되나
- 한 줄로 되나
- 여기까지 아니면, 동작하는 최소 구현
사다리는 문제를 이해한 다음에 돌아갑니다. 변경이 닿는 코드를 읽고 실제 흐름을 따라간 뒤에 단계를 고릅니다. README 표현으로는 해법에 게으를 뿐 읽는 데는 게으르지 않습니다.
-
게으르되 부주의하지 않음
신뢰 경계 검증, 데이터 손실 처리, 보안, 접근성은 줄이는 대상이 아닙니다. 벤치마크의 별도 안전성 측정에서 Ponytail은 기준선과 같은 100%를 유지했고, 같은 목적으로 만든 단순 프롬프트(“YAGNI + one-liners”)는 95%로 떨어졌습니다.
-
강도 4단계
/ponytail lite,full,ultra,off로 세기를 조절하거나 끕니다. 인자 없이/ponytail만 입력하면 현재 단계를 알려줍니다. 설정 파일은 필수가 아니고,~/.config/ponytail/config.json이나PONYTAIL_DEFAULT_MODE환경변수로 기본값만 바꿀 수 있습니다. -
명령 6가지
명령 하는 일 /ponytail [lite | full | ultra | off]강도 조절, 끄기, 현재 단계 확인 /ponytail-review현재 변경 내역(diff)에서 과설계를 찾아 삭제 목록으로 돌려줌 /ponytail-audit변경분이 아니라 저장소 전체를 점검 /ponytail-debtponytail:주석으로 미뤄 둔 지름길을 모아 장부로 정리/ponytail-gain벤치마크로 측정한 효과 기록 보기 /ponytail-help위 명령의 빠른 참조 -
재현 가능한 벤치마크
benchmarks/디렉터리에 실행 코드와 결과 문서가 함께 들어 있습니다. 실제 오픈소스 저장소를 고치는 헤드리스 Claude Code 세션에서 12개 작업의git diff를 채점하는 방식입니다. -
약 20개 에이전트 지원
Claude Code, Codex, GitHub Copilot CLI, Gemini CLI, OpenCode, Hermes, Devin CLI, Qoder, pi 등에 어댑터가 있습니다. Cursor, Windsurf, Cline, Kiro는 규칙 파일만 읽는 방식이라 상시 규칙은 적용되지만 슬래시 명령은 쓸 수 없습니다.
사용 방법
Claude Code에서 마켓플레이스를 추가하고 플러그인을 설치합니다. 두 명령을 한 번에 붙여 보내면 설치되지 않습니다. 각각 따로 전송해야 합니다.
/plugin marketplace add DietrichGebert/ponytail
/plugin install ponytail@ponytail
데스크톱 앱의 Code 탭에서도 같은 명령을 입력하거나, 입력창 옆 + 버튼에서 Plugins → Add plugin으로 설치할 수 있습니다.
설치 후 강도를 조절하거나 현재 변경분을 점검합니다.
/ponytail ultra
/ponytail-review
Codex는 별도 명령을 쓰고, 설치 후 /hooks에서 라이프사이클 훅 두 개를 확인하고 신뢰 처리한 다음 새 스레드를 시작해야 합니다.
codex plugin marketplace add DietrichGebert/ponytail
codex plugin add ponytail@ponytail
OpenCode는 opencode.json에 플러그인을 추가합니다.
{ "plugin": ["@dietrichgebert/ponytail"] }
알아두면 좋은 점
node가 PATH에 있어야 합니다 — Claude Code와 Codex 플러그인이 Node.js 라이프사이클 훅 두 개를 실행합니다. 없으면 상시 활성화 기능만 조용히 꺼지고 스킬 자체는 동작합니다. Nix나 nvm 사용자는 비대화형 셸의 PATH에도 있어야 합니다- 설치 명령은 나눠서 보냅니다 — README가 “You have to send two separate prompts for the install to work”라고 명시합니다
- 수치는 조건과 함께 봐야 합니다 — 평균 54% 감소는 Haiku 4.5로 12개 작업을 n=4로 측정한 값입니다. 최대 94%는 과설계 여지가 큰 작업(날짜 선택기 404줄에서 23줄, 색 선택기 287줄에서 23줄)에서 나온 상한이고, 이미 최소한인 코드에서는 거의 0입니다
- 모델에 따라 비용이 늘 수도 있습니다 — 비용과 지연 감소는 사다리를 그대로 따르는 모델에서 나오는 부수 효과입니다. 사고 과정에서 각 단계를 길게 따지는 모델에서는 반대로 갈 수 있고, README는 GPT-5.5가 그런 경우라고 밝힙니다
- 저자가 이전 수치를 철회했습니다 — 초기에는 코드 80-94% 감소를 단일 수치로 내세웠지만, 기준선이 산문과 선택지로 답을 부풀린다는 이슈 #126 지적을 받아 공정한 에이전트 기준선으로 재측정했습니다. 현재 대표값인 54%가 그 결과입니다
- Caveman과 병행 가능 — README FAQ가 함께 쓰기를 권합니다. Caveman은 에이전트가 말하는 분량을, Ponytail은 만드는 코드를 줄여 서로 겹치지 않습니다. 다만 Ponytail 벤치마크에 나오는 Caveman 대조군 수치는 Ponytail 저자가 자기 도구와 비교하려고 측정한 값입니다
- 설정 파일은 필요 없습니다 — 설치만 하면 동작하고, 기본 강도를 바꾸고 싶을 때만 설정을 씁니다
- 라이선스 — MIT