Route
인수: $ARGUMENTS
<base>는 이 텍스트 위에 표시된 "이 스킬의 기본 디렉터리" 경로를 의미합니다. 스크립트는
<base>/scripts/inventory.py에 있습니다. 개인 카탈로그는 ~/.claude/route-catalog/ (또는
$ROUTE_CATALOG_DIR)에 있으며, 절대 플러그인 내부에 있지 않습니다.
0. 요청 찾기
사용자는 일반 프롬프트를 작성하고 거기에 /route를 추가합니다. 사용자의 단어에서 요청을 파악하세요:
/route가 프롬프트와 같은 메시지에 있는 경우(앞 또는 뒤): 요청은/route라는 단어가 제거된 전체 메시지입니다./route가 단독으로 전송된 경우: 요청은 대화와 함께 읽은 사용자의 이전 메시지(또는 동일한 작업에 속하는 여러 메시지)입니다. 절대/route라는 단어 자체를 요청으로 취급하지 마세요.- 위의 인수에 텍스트가 있는 경우: 이를 요청 또는 요청의 일부로 취급하되, 사용자의 메시지가 다를 경우 사용자의 메시지가 우선합니다.
/route가 도착하기 전에 이미 해당 요청에 대한 작업을 시작했다면, 완료된 작업을 확인하고 남은 작업만 라우팅하세요. 완료된 단계를 다시 수행하지 마세요.- 요청이
build인 경우<base>/BUILD.md를 읽고 따르세요.refresh인 경우 새로 고침으로 건너뛰세요.
사용자의 프롬프트를 작업으로 유지하세요. 하나의 스킬이 다루는 부분으로 축소하지 마세요. 프롬프트의 모든 부분은 로드된 스킬 또는 사용자 자신의 작업으로 처리되어야 합니다.
1. 요청 이해하기
자신을 위해 한 줄을 작성하세요: 목표, 결과물, 관련 기술 또는 파일, 단계(계획, 빌드, 디버그, 리뷰, 검증, 배포, 문서, 미디어, 운영). 대화를 활용하세요: "수정해 줘" 또는 "비디오 만들어 줘"와 같은 요청은 방금 논의된 내용을 참조합니다. 아직 코드베이스를 탐색하지 마세요.
조기 종료: 요청이 사소한 경우(이름 변경, 한 줄 수정, 단순 질문), "스킬 불필요: <이유>"를 출력하고 작업을 수행하세요. 카탈로그를 읽지 마세요.
프로젝트의 CLAUDE.md에서 작업 전 첫 번째 단계를 요구하는 경우(예: "진단 전에 런북에서 오류 텍스트 검색"), 지금 해당 단계를 수행하세요. 그 결과로 필요한 스킬이 변경될 수 있습니다.
2. 후보 찾기
- 현재 디렉터리에서
python3 <base>/scripts/inventory.py --check를 실행하세요.NO CATALOG: 사용자에게 라우터가 일회성/route build가 필요하다고 알리고, 지금 실행할 것을 제안하며, 그동안 자신의 스킬 목록에서 볼 수 있는 스킬로 요청을 처리하세요.- 그렇지 않으면
catalog in sync를 출력하거나, NEW 스킬(설치되었으나 카탈로그에 없는 스킬, 설명 포함)과 GONE 항목(더 이상 설치되지 않은 스킬)을 출력합니다. NEW 스킬은 유효한 후보입니다. GONE 스킬은 절대 선택하지 마세요.
--check에서 재정의(override)가 있다고 보고하면 해당 파일을 먼저 읽으세요. 이 파일에는 사용자의 자체 라우팅 규칙("UI polish -> better-ui, never impeccable")이 있습니다. 요청과 일치하는 재정의는 카탈로그, 기본 선택 및 사용자 자신의 판단보다 우선합니다. Why 열에서 재정의를 언급하세요.--check가 첫 번째 줄에 출력하는 카탈로그 폴더에서INDEX.md와, 존재하는 경우PROFILE.md(사용자의 스택 및 습관)를 읽으세요.- 요청과 일치하는 1~3개의 카테고리를 선택하고 해당 카테고리 파일만 읽으세요.
각 스킬 줄은 다음과 같습니다:
- `name` [load] USE: ... | NOT: ... | NEXT: ... | NEEDS: ...
3. 세트 선택하기
- 전체 요청을 처리하는 가장 작은 세트를 선택하세요: 보통 1~3개의 스킬, 최대 5개를 초과하지 마세요.
- 작업당 하나의 스킬입니다. 동일한 작업을 수행하는 두 스킬을 로드하지 말고, 카테고리의 "기본 선택(Default picks)"을 따르세요.
- 각 스킬의 NOT 필드를 준수하세요. NOT이 이 요청에 더 나은 스킬을 지정하면 해당 스킬을 선택하세요.
- 동일한 작업의 경우, 일반 스킬보다 프로젝트 스킬(
[project], 이 리포지토리의.claude/skills에 있음) 또는 사용자 자신의 커스텀 스킬을 선호하세요. - 스킬에 NEEDS가 있지만 여기에 없는 경우 이를 명시하고 다음으로 좋은 스킬을 선택하세요.
- 어떤 스킬도 실질적인 가치를 더하지 않으면 "스킬 불필요"라고 말하고 작업을 수행하세요.
- 요청에 대한 두 가지 매우 다른 해석이 다른 스킬로 이어지는 경우, 스킬을 로드하기 전에 옵션과 함께 한 가지 짧은 질문을 하세요.
4. 계획 표시 후 로드하기
첫 번째 스킬 호출 전에 다음 표를 가시적인 텍스트로 출력하세요. 이는 필수 출력이며 해설이 아닙니다: 간결하거나 "도구 호출 전 텍스트 없음" 스타일이 활성화된 경우에도 출력하세요.
| # | 스킬 | 선택 이유 | 로드 방식 |
|---|---|---|---|
| 1 | skill-name | 요청과 연결된 한 줄 | skill / read / builtin / project |
행은 조건부일 수 있습니다. Why 열에 "<조건>인 경우에만"을 작성하고 조건이 충족될 때만 로드하세요.
표 아래에 메시지 전송, 배포, 데이터 삭제, 유료 크레딧 사용, 프로덕션에 쓰기 등 모든 단계에 대한 "부작용" 메모를 추가하세요. 해당 단계 전에 물어보세요. 그렇지 않으면 기다리지 않고 계속 진행하세요.
표 순서대로 스킬을 로드하세요(먼저 계획, 그다음 빌드, 그다음 검증):
[skill],[builtin],[project]: Skill 도구를 정확한 이름으로 호출하고, 해당 스킬이 처리해야 할 요청 부분을args로 전달하세요.[read <path>]: Skill 도구는 이 스킬을 거부합니다(사용자 전용).<path>의 파일을 읽고 로드된 것처럼 따르세요.- Skill 호출이 실패하면 대신 스킬의 SKILL.md를 읽고(
inventory.py를 플래그 없이 실행하면 모든 경로를 출력) 그렇게 말하세요.
5. 작업 수행하기
로드된 스킬을 함께 따르세요. 두 스킬이 충돌할 경우, 더 구체적인 스킬이 해당 작업 부분에서 우선합니다. 사용자의 CLAUDE.md 파일과 명시적 지침은 모든 스킬보다 우선합니다.
도중에 새로운 필요가 나타나면(예: 수정에 마이그레이션이 필요한 경우), 스킬 하나를 더 로드하고 한 줄로 알리세요: "x도 로드 중: <이유>"
6. 확인, 로깅, 보고, 다음 실행할 스킬 제안하기
종료 확인: 두 개 이상의 스킬이 로드되었거나 요청에 여러 부분이 있는 경우, 최종 응답 전에 각 부분을 확인하세요. 로드된 각 스킬과 스킬이 처리하지 않은 요청의 각 부분에 대해 증거(파일:줄, 테스트 결과, 명령 출력)와 함께 완료/부분/차단을 결정하세요. 최종 응답에 짧은 표로 포함하세요:
| 부분 | 스킬 | 상태 | 증거 |
|---|
부분 또는 차단된 경우, 작업이 완료되었다고 말하는 대신 누락된 것을 명시하세요. 단일 스킬, 단일 부분 요청의 경우 표를 생략하세요.
로깅: python3 <base>/scripts/inventory.py --log '<json>'을 한 번 실행하세요. 하나의 JSON 객체를 포함합니다:
request (최대 160자 요청, 비밀 없음), loaded (로드된 스킬), used (실제로 작업을 형성한 로드된 스킬),
unused (로드되었지만 필요하지 않음), skipped (실행되지 않은 계획된 행), next (제안하는 다음 스킬), no_skill (스킬이 필요하지 않은 경우 true),
check ("done", "partial", "blocked", 또는 "n/a"). 로깅은 라우팅의 일부이며 선택 사항이 아닙니다. 명령이 실패하면 한 줄로 말하고 계속하세요.
inventory.py --report는 나중에 /route가 로드한 것, 작업이 사용한 것, 사용자가 따른 Next 스킬 수를 보여줍니다.
최종 응답을 실행된 스킬을 알리는 한 줄로 시작하세요: 사용된 스킬: a, b(계획된 행이 실행되지 않은 경우 c 건너뜀: <이유> ``를 추가하거나 사용된 스킬: 없음 (<이유>)).
최종 응답을 다음 섹션으로 끝내세요:
다음 스킬
skill-name: 시점(지금 / 커밋 전 / 푸시 전 / 배포 후 / 주 1회) 및 이유.
최대 3개를 제공하세요. 로드된 스킬의 NEXT 필드, 읽은 카테고리의 "기본 선택(Default picks)", 프로젝트의 CLAUDE.md에서 요구하는 단계(예: 푸시 전 전체 테스트 실행)에서 가져오세요. 실제로 발생한 상황에 맞는 것만 유지하고 실행하지 마세요. 이 섹션은 스킬이 로드되지 않은 경우에도 적용됩니다.
새로 고침
사용자가 스킬이나 플러그인을 설치, 제거 또는 업데이트할 때 실행하세요.
python3 <base>/scripts/inventory.py --check를 실행하세요.NO CATALOG를 출력하면 대신 빌드를 실행하세요.- 각 NEW 스킬에 대해: 해당 SKILL.md(프론트매터와 처음 ~80줄)를 읽고, 범위(Scope)가 일치하는 카테고리 파일을 선택하고(
inventory.py는 TAXONOMY에 고정 카테고리를 나열), 해당 파일의 다른 줄과 동일한 형식으로 한 줄을 추가하세요. 프론트매터에disable-model-invocation: true가 있으면[read <absolute path>]를 사용하고, 리포지토리의.claude/skills에 있으면[project]를 사용하세요. 카테고리 파일이 아직 없으면 동일한 헤더(# name,Scope:,Default picks:)로 생성하세요. - 각 GONE 항목에 대해: 해당 줄을 삭제하고, "Default picks" 텍스트에서 제거하세요.
inventory.py --index를 실행한 다음,catalog in sync를 출력할 때까지--check를 다시 실행하세요. 추가 및 제거된 내용을 보고하세요.