From project-init
현재 프로젝트에 맞는 엔지니어링 sub-룰(versioning 등)을 `rules/engineering/<sub>.md`로 생성하거나 갱신할 때 활성화됩니다. project-init 초기화 흐름 중 호출되거나, 사용자가 엔지니어링 sub-룰 지침을 새로 만들고 싶어 할 때.
How this skill is triggered — by the user, by Claude, or both
Slash command
/project-init:engineering-rule-creatorThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
같은 디렉토리의 `templates/` 아래에 있는 sub-룰 템플릿 중 하나를 사용자에게 선택받아 `rules/engineering/<sub>.md`로 생성합니다. 여기서 `<sub>`는 선택된 템플릿의 파일 이름(확장자 제외)입니다 — 예: `templates/versioning.md` → `rules/engineering/versioning.md`.
같은 디렉토리의 templates/ 아래에 있는 sub-룰 템플릿 중 하나를 사용자에게 선택받아 rules/engineering/<sub>.md로 생성합니다. 여기서 <sub>는 선택된 템플릿의 파일 이름(확장자 제외)입니다 — 예: templates/versioning.md → rules/engineering/versioning.md.
본 스킬은 엔지니어링 카테고리의 sub-룰 디스패처입니다. 형제 스킬(context-rule-creator)이 평면 파일(rules/<name>.md) 한 개를 만드는 것과 달리, 본 스킬은 같은 카테고리 아래 여러 sub-룰(versioning·testing·linting 등 — 후속 task에서 확장)을 디렉터리 구조로 누적합니다.
선택지·라벨·사후 작업은 모두 템플릿 파일에서 도출합니다. 새 sub-룰을 추가하려면 templates/ 아래에 새 마크다운 파일을 두면 되고, 이 SKILL.md는 변경하지 않습니다.
템플릿 열거. 이 SKILL.md가 위치한 디렉토리의 templates/ 아래 *.md 파일 목록을 가져옵니다. 다른 디렉토리를 추측·탐색하지 않습니다. 각 파일의 이름(확장자 제외)이 sub-룰 식별자가 됩니다.
메타데이터 파싱. 각 템플릿의 YAML frontmatter를 읽어 다음 필드를 사용합니다.
label (필수): AskUserQuestion 옵션 라벨로 사용.description (선택): 옵션 설명.recommended (선택, boolean): true이면 라벨 끝에 (Recommended)를 붙이고 옵션 목록의 가장 앞에 둡니다. 한 템플릿에만 둡니다.inputs (선택, 리스트): 본문에 채워 넣을 입력값들의 선언적 스펙. 4단계 입력 수집에서 사용. 각 항목은 name (placeholder 키), header (AskUserQuestion header, ≤12자), question (질문 텍스트), options ({label, description, value?} 2~4개) 필드를 가집니다. value가 없으면 label을 값으로 사용합니다.dynamic_inputs (선택, 리스트): 후보를 정적으로 적을 수 없고 target 프로젝트 디스크에서 동적으로 산출해야 하는 입력. 4-bis 단계에서 사용. 각 항목 필드는 name (placeholder 키), header, question, multi_select (boolean), candidate_source (후보 산출 규칙 식별자), free_input (boolean, Other 자유 입력 허용 여부), render (placeholder에 합쳐 넣을 방식 식별자). 지원하는 candidate_source·render 값은 4-bis 단계에 열거합니다.on_create (선택, 자유 문자열): 5단계의 파일 기록 후 수행할 사후 작업 지시. 허용 범위는 파일 시스템을 건드리지 않는 사후 작업(안내 메시지 출력 등)으로 제한됩니다 — 자세한 적용 규칙은 5단계 참조.필수 필드가 없는 템플릿은 후보에서 제외하고 사용자에게 알립니다.
선택.
AskUserQuestion(single-select) 호출해 사용자가 sub-룰을 직접 고르게 합니다.입력 수집 (정적). 선택된 템플릿의 frontmatter에 inputs가 있으면 각 항목을 순서대로 AskUserQuestion(single-select)로 묻습니다.
value(없으면 label)가 placeholder 값이 됩니다.{{name}} placeholder를 일괄 치환합니다.{{name}}을 그대로 남깁니다 — 질문 건너뛰기, "Other"에 빈 문자열 입력, AskUserQuestion이 해당 항목에 응답을 반환하지 않음. 빈 값으로 silent 치환하지 않습니다 — 미응답은 사용자가 본문에서 시각적으로 인지하고 직접 채울 수 있어야 합니다.4-bis. 입력 수집 (동적). 선택된 템플릿의 frontmatter에 dynamic_inputs가 있으면 각 항목을 순서대로 처리합니다. 동적 입력은 후보를 정적 옵션으로 적을 수 없고 target 프로젝트 디스크에서 그때그때 산출해야 하는 경우(예: 워치 디렉토리)에 사용합니다.
candidate_source 값에 따라 후보 목록을 만듭니다. 지원하는 값:
depth1_dirs_filtered: target 프로젝트 루트(.)의 최상위(depth=1) 디렉토리만 열거하되, 다음 패턴을 제외합니다 — .* (숨김 디렉토리), node_modules, dist, build, target. 권장 명령은 POSIX find . -maxdepth 1 -mindepth 1 -type d 또는 동등한 ls -d */이며, 결과에서 위 제외 패턴을 정확 일치(exact match)로 걸러냅니다. gitignore 존중 여부는 무시합니다.free_input 값의 조합에 따라 분기합니다. AskUserQuestion은 옵션 최소 2개 요건이 있고 CLAUDE.md 규칙상 모든 사용자 입력 수집은 AskUserQuestion을 거쳐야 하므로, 호출이 불가능한 분기는 자유 텍스트 수집도 불가능하다 — 후보 없음을 알리고 placeholder를 보존하는 것이 유일한 동작이다.
free_input: true("Other" 옵션 자동 추가) — AskUserQuestion을 호출합니다. multi_select: true면 다중 선택을 허용합니다. free_input: true면 "Other"로 자유 텍스트(개행 또는 콤마로 구분된 추가 경로·글로브 패턴)를 받아 선택 목록에 합칩니다.free_input: false: 묻지 않고 그 단일 후보를 자동 선택합니다 (옵션 1개뿐이라 호출 불가 — step 3의 "후보가 1개뿐이면 묻지 않고 자동 선택" 패턴과 동일).free_input 무관): AskUserQuestion을 부르지 못하므로 사용자에게 후보가 비어 있음을 알리고 {{name}}을 그대로 남깁니다. free_input: true여도 옵션이 "Other" 하나뿐이라 호출 자체가 불가능 — 자유 텍스트 수집 경로 미정의.render 값에 따라 최종 값을 만들어 본문의 {{name}}을 치환합니다. 지원하는 값:
bullet_list: 각 항목을 - \`마크다운 bullet 한 줄씩으로 변환해 결합. 항목 0개면(워치 대상 없음 — 검토 필요)` 한 줄로 대체합니다 (silent 빈 치환 금지).{{name}} 그대로 남깁니다.rules/engineering/<sub>.md로 기록합니다 (<sub>는 선택된 템플릿의 파일 이름에서 확장자를 제외한 값). 상위 디렉토리(rules/·rules/engineering/)가 부재하면 함께 생성합니다.rules/engineering/<sub>.md가 있으면 그대로 덮어쓰지 않습니다. 새 본문과 기존 파일의 diff를 사용자에게 보여준 뒤 AskUserQuestion(single-select)으로 덮어쓴다 (교체) / 보존한다 (취소) 두 옵션을 묻고, 사용자가 덮어쓴다 (교체)를 명시적으로 선택했을 때에만 덮어씁니다. 자유 텍스트 응답("yes"·"OK" 등)이나 침묵은 동의로 해석하지 않으며, 의심스러우면 보존합니다.on_create가 있으면 그 지시를 수행하되, rules/engineering/<sub>.md를 포함한 모든 파일·디렉토리를 생성·수정하라는 지시는 무시하고 사용자에게 위반 사실을 알립니다 (<sub>.md 자체의 기록은 위 첫 bullet에서 이미 끝났고 on_create는 그 이후 사후 작업 단계입니다). 허용되는 동작은 안내 메시지 출력처럼 파일 시스템을 건드리지 않는 사후 작업뿐입니다 — 상위 디렉토리(rules/·rules/engineering/)는 위 첫 bullet에서 이미 처리되므로 on_create로 중복 지시할 필요가 없습니다. 본 제한은 아래 「규칙」 섹션의 단일 파일 보장과 동일한 의도입니다.rules/engineering/<sub>.md 단일 파일만 생성·갱신합니다. 같은 실행에서 rules/engineering/ 아래 다른 sub-룰을 추가로 만들지 않으며, 카테고리 외 다른 파일을 만지지 않습니다.rules/engineering/<sub>.md가 있을 때, 사용자 명시 동의 없이는 절대 덮어쓰지 않습니다. 의심스러우면 보존합니다.npx claudepluginhub ch-courtesy/claude-plugins --plugin project-initCreates, edits, and optimizes skills for Claude Code, including drafting, evaluating with test prompts, iterating on performance, and improving skill descriptions for better triggering accuracy.