ultra-prompt: 레포지토리의 실제 컨텍스트를 사용해 프롬프트를 재작성하고 실행 전 멈추는 슬래시 커맨드
ultra-prompt, a slash command that rewrites your prompt using the repo's actual context and then stops
핵심 요약
AI가 잘못된 작업을 수행하지 않도록 레포지토리 컨텍스트를 분석해 프롬프트를 정교하게 다듬어주는 도구입니다.
- 프롬프트 최적화 — 레포지토리의 실제 상태를 읽어 모호한 명령을 구체적인 작업 지시로 변환함
- 실행 방지 — 재작성된 프롬프트를 사용자에게 먼저 보여주고 확인을 거친 뒤 실행함
- 오류 방지 — 검증되지 않은 정보는 팝업으로 질문하여 사용자의 의도를 명확히 반영함
- 워크플로우 개선 — 세션 기록에서 마지막 프롬프트를 읽어와 별도의 재입력 없이 즉시 사용 가능함
"푸터 고쳐줘" 같은 프롬프트를 Claude Code에 계속 날렸는데, 엉뚱한 걸 고치겠다고 자신만만하게 굴더라고. 알고 보니 사이트에 푸터 템플릿이 두 개나 있는데 내가 하나를 까먹은 거였음. 프롬프트를 못 쓴 게 아니라, 레포지토리에 뻔히 있는 맥락을 빼먹은 거였지.
그래서 /ultra-prompt를 만들었어. 네가 보내려던 프롬프트(혹은 세션 기록에서 읽어온 마지막 입력)를 가져와서, 프로젝트를 싹 훑은 다음에 훨씬 날카로운 버전으로 다듬어주는 놈이야. 직접 실행하진 않아. 만약 명령어가 프롬프트를 고치고 바로 실행까지 해버리면, 내가 뭘 바꿨는지 확인할 길이 없잖아.
다듬기 전에 수집하는 정보는 이래: 현재 작업 디렉토리(cwd), git status랑 최근 커밋 몇 개, 프롬프트에 언급된 모든 파일이나 폴더(존재 여부랑 내용 확인), CLAUDE.md, AGENTS.md, 그리고 프로젝트에 적힌 메모들. 그다음엔 네가 가진 모델 중 가장 성능 좋은 놈을 서브 에이전트로 써서(싼 모델로 대충 처리 못 하게 명시적으로 지정함) 딱 한 가지 규칙을 가지고 다시 써. 그 규칙은 '없는 말 지어내지 마라'야. 검증 안 되는 건 죄다 팝업으로 객관식 질문을 던지고, 네 답변을 최종 프롬프트에 합쳐버려.
오늘 내 플러그인 레포지토리에 돌려본 예시야. 이렇게 입력했거든:
add a new skill called dedupe-notes to the marketplace
돌아온 결과(일부 생략):
Add a dedupe-notes plugin to the marketplace clone at ./claude-plugins. Its behavior is unspecified: resolve the OPEN QUESTIONS with me before writing a file.
Template: commit ac58207 (rename-session). Touch:
- dedupe-notes/.claude-plugin/plugin.json, version 1.0.0
- dedupe-notes/commands/dedupe-notes.md (or skills/dedupe-notes/SKILL.md)
- dedupe-notes/tests/test_bundle_sync.py, adapted from ultra-prompt/tests/
- .claude-plugin/marketplace.json: new entry, version equal to plugin.json; bundle 1.5.1 to 1.6.0, "fifteen" to "sixteen"
- voidharbor/.claude-plugin/plugin.json: same bump, name added to its list
- voidharbor/commands/: byte-identical copies; the tests fail on drift
- README.md: three "fifteen" mentions, one table row
Done when pytest passes inside dedupe-notes and the four existing test dirs, both JSON files parse, and one local commit exists. Do not push.
OPEN QUESTIONS:
- What does dedupe-notes do, on what input, propose-only or apply?
- Command or skill (synth-mode is the skills/ example)?
- Any script, and what goes in the README Needs column?
내가 번들 파일들이 바이트 단위까지 똑같아야 한다거나, 버전 필드 두 개가 일치해야 한다는 말은 안 했거든. 근데 이놈이 테스트 코드 뒤져서 그걸 다 찾아내더라고. 그냥 원래 프롬프트대로 했으면 설치는 잘 됐어도 나중에 설정 꼬여서 골치 아팠을 거야.
만들면서 배운 게 두 가지 있어. 처음엔 /ultra-prompt라고 치면 프롬프트 자체가 아니라 "/ultra-prompt"라는 문자열 자체를 개선하려고 들더라고. 기록 읽는 놈이 자기 호출 구문을 건너뛰게 수정해야 했어. 그리고 서브 에이전트는 모델을 따로 지정 안 하면 세션 모델을 그대로 상속받아서, 재작성 작업이 세션 설정에 따라 엉뚱한 모델로 돌아가고 있었던 거지.


