sync-skill-korean-names.sh
.claude/skills/ 디렉토리 변경 시 SKILL_KOREAN_NAMES 매핑이 최신 상태인지 확인하고 불일치를 알린다.
Trigger
PostToolUse (Write | Edit | Bash)
Source Code
1#!/bin/bash
2# PostToolUse hook: .claude/skills/ 변경 감지 → SKILL_KOREAN_NAMES 동기화 알림
3# 트리거: Write/Edit(SKILL.md 생성·수정), Bash(mv/rm으로 폴더명 변경·삭제)
4
5INPUT=$(cat)
6
7TOOL_NAME=$(echo "$INPUT" | jq -r '.tool_name // empty')
8
9CLIENT_FILE="$CLAUDE_PROJECT_DIR/prototypes/how-to-use-vault/src/components/skills-page-client.tsx"
10
11if [ ! -f "$CLIENT_FILE" ]; then
12 exit 0
13fi
14
15# --- Write/Edit: SKILL.md 생성·수정 감지 ---
16if [[ "$TOOL_NAME" == "Write" || "$TOOL_NAME" == "Edit" ]]; then
17 FILE_PATH=$(echo "$INPUT" | jq -r '.tool_input.file_path // empty')
18
19 if [[ "$FILE_PATH" != *"/.claude/skills/"* ]]; then
20 exit 0
21 fi
22 if [[ "$(basename "$FILE_PATH")" != "SKILL.md" ]]; then
23 exit 0
24 fi
25
26 SLUG=$(basename "$(dirname "$FILE_PATH")")
27
28 if ! grep -q "\"$SLUG\"" "$CLIENT_FILE"; then
29 echo "SKILL_KOREAN_NAMES에 \"$SLUG\" 항목이 없습니다. $CLIENT_FILE의 SKILL_KOREAN_NAMES에 한국어 이름을 추가하세요."
30 fi
31 exit 0
32fi
33
34# --- Bash: mv/rm으로 스킬 폴더 변경·삭제 감지 ---
35if [[ "$TOOL_NAME" == "Bash" ]]; then
36 COMMAND=$(echo "$INPUT" | jq -r '.tool_input.command // empty')
37
38 # .claude/skills/ 관련 mv 또는 rm 명령이 아니면 스킵
39 if [[ "$COMMAND" != *".claude/skills/"* ]]; then
40 exit 0
41 fi
42 if [[ "$COMMAND" != *"mv "* && "$COMMAND" != *"rm "* ]]; then
43 exit 0
44 fi
45
46 # 실제 .claude/skills/ 디렉토리와 SKILL_KOREAN_NAMES를 비교
47 SKILLS_DIR="$CLAUDE_PROJECT_DIR/.claude/skills"
48 MISMATCHES=""
49
50 # 1. 디렉토리에 있는데 SKILL_KOREAN_NAMES에 없는 slug
51 for dir in "$SKILLS_DIR"/*/; do
52 [ -f "$dir/SKILL.md" ] || continue
53 SLUG=$(basename "$dir")
54 if ! grep -q "\"$SLUG\"" "$CLIENT_FILE"; then
55 MISMATCHES="${MISMATCHES} 추가 필요: \"$SLUG\"\n"
56 fi
57 done
58
59 # 2. SKILL_KOREAN_NAMES에 있는데 디렉토리에 없는 slug
60 grep -oP '"[a-z].*?--[a-z].*?"' "$CLIENT_FILE" | tr -d '"' | while read -r SLUG; do
61 if [ ! -d "$SKILLS_DIR/$SLUG" ]; then
62 MISMATCHES="${MISMATCHES} 삭제 필요: \"$SLUG\"\n"
63 fi
64 done
65
66 if [ -n "$MISMATCHES" ]; then
67 printf "SKILL_KOREAN_NAMES 동기화 필요:\n%b$CLIENT_FILE을 업데이트하세요." "$MISMATCHES"
68 fi
69 exit 0
70fi
71
72exit 0
73