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