claudekit / tools / ponytail
[ Plugin · Development ]

Ponytail

에이전트가 코드를 쓰기 전에 7단계 사다리를 거치게 만드는 플러그인. 이게 꼭 있어야 하나, 코드베이스에 이미 있나, 표준 라이브러리로 되나를 차례로 확인해 먼저 걸리는 단계에서 멈춥니다. 검증, 오류 처리, 보안, 접근성은 줄이지 않습니다.

DietrichGebert/ponytail ·updated
$ /plugin marketplace add DietrichGebert/ponytail copy

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줄
Debounce116줄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단계 사다리

    코드를 쓰기 전에 위에서부터 확인해, 처음 걸리는 단계에서 멈춥니다.

    1. 이게 꼭 있어야 하나 (아니면 만들지 않는다)
    2. 이 코드베이스에 이미 있나 (있으면 재사용한다)
    3. 표준 라이브러리로 되나
    4. 플랫폼 기본 기능으로 되나
    5. 이미 설치된 의존성으로 되나
    6. 한 줄로 되나
    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
§ 6

See also

same category · curated
[01]
[Tool] Paseo · 내 컴퓨터에 데몬을 띄우고 데스크톱, 폰, 웹, 터미널 어디서든 접속해 코딩 에이전트를 굴리는 자체 호스팅 오케스트레이터. Claude Code를 비롯한 여러 CLI 에이전트를 손대지 않고 그대로 실행하며, 모바일 앱은 데스크톱과 같은 기능을 제공한다.
tool · claudekit.io / tools / paseo
[02]
[Tool] Orca · 여러 코딩 에이전트를 병렬로 굴리는 ADE(Agent Development Environment) 데스크톱 앱. 각 에이전트를 격리된 git worktree에서 동시에 실행하고, 결과를 나란히 비교해 원하는 것을 골라 머지한다. Claude Code, Codex, Grok 등 30여 개 CLI 에이전트를 자신의 구독으로 그대로 사용한다.
tool · claudekit.io / tools / orca
[03]
[Skill] Matt Pocock's Skills · Matt Pocock이 자기 .claude 디렉토리에서 실제로 쓰는 Claude Code 스킬 모음. 정렬(grilling), 스펙, TDD, 코드 리뷰, 버그 진단, 아키텍처 개선 등 실전 엔지니어링 워크플로를 20여 개 스킬로 묶었다. skills.sh로 편집 가능하게 설치하거나 플러그인으로 읽기 전용 설치한다.
tool · claudekit.io / tools / mattpocock-skills
§ 7

자주 묻는 질문

자주 묻는 질문
§ 7.1
Ponytail은 무엇인가요?
에이전트가 코드를 쓰기 전에 7단계 사다리를 거치게 만드는 Claude Code 플러그인입니다. 저장소 소개 문구는 "Makes your AI agent think like the laziest senior dev in the room"이고, 이미 있는 것을 다시 만들지 않게 하는 것이 목표입니다.
§ 7.2
어떻게 설치하나요?
Claude Code에서 `/plugin marketplace add DietrichGebert/ponytail`과 `/plugin install ponytail@ponytail`을 실행합니다. README는 두 명령을 한 번에 붙여 보내지 말고 **각각 따로 전송해야 설치가 된다**고 안내합니다.
§ 7.3
코드를 짧게 만들면 검증이나 보안이 빠지지 않나요?
README는 "Lazy, not negligent"라고 못박습니다. 신뢰 경계 검증, 데이터 손실 처리, 보안, 접근성은 줄이는 대상이 아닙니다. 벤치마크의 안전성 항목에서도 기준선과 같은 100%를 유지했습니다.
§ 7.4
코드가 얼마나 줄어드나요?
실제 오픈소스 저장소(FastAPI + React)를 고치는 Claude Code 세션 12개 작업 기준으로 평균 54% 줄었습니다(Haiku 4.5, n=4). 에이전트가 과하게 만들 여지가 큰 작업에서는 94%까지 올라가고, 이미 최소한인 코드에서는 거의 0입니다.
§ 7.5
Claude Code 말고 어디서 쓸 수 있나요?
Codex, GitHub Copilot CLI, Gemini CLI, OpenCode, Hermes, Devin CLI 등 약 20개 에이전트용 어댑터가 들어 있습니다. 다만 Cursor, Windsurf, Cline처럼 규칙 파일만 읽는 환경에서는 상시 규칙만 적용되고 슬래시 명령은 쓸 수 없습니다.
§ 7.6
Caveman과 같이 써도 되나요?
README의 FAQ가 함께 쓰기를 권합니다. "Caveman shrinks what the agent says; ponytail shrinks what it builds" — Caveman은 에이전트가 말하는 분량을, Ponytail은 만드는 코드를 줄이므로 겹치지 않습니다.