AgentSkillsCN

dd-setup

为ding-dong通知提供交互式设置向导。当用户说“设置通知”“初始设置”“配置ding-dong”“安装插件”“通知设置”“初始设置”“插件设置”“设置向导”,或首次想要配置通知插件时,应使用此技能。自动感知环境并完成初始设置。

SKILL.md
--- frontmatter
name: dd-setup
description: "Interactive setup wizard for dding-dong notifications. This skill should be used when the user says \"setup notifications\", \"initial setup\", \"configure dding-dong\", \"install plugin\", \"알림 설정\", \"초기 설정\", \"플러그인 설정\", \"설정 마법사\", or wants to configure the notification plugin for the first time. 환경 감지 및 초기 설정."
allowed-tools: [Bash, Read, Write, AskUserQuestion]
disable-model-invocation: true

dding-dong 설정 마법사

사용자의 환경을 확인하고 dding-dong 알림 플러그인을 설정합니다.

플래그 파싱

$ARGUMENTS에서 플래그를 확인합니다:

  • --help: 아래 사용법을 출력하고 종료합니다.

    code
    dding-dong 설정 마법사
    
    사용법: /dding-dong:dd-setup [옵션]
    
    옵션:
      --scope global|project|local  설치 범위 지정 (2단계 건너뜀)
      --force                       기존 설정 무시, 전체 재설정
      --help                        이 도움말 표시
    
  • --scope <값>: global, project, local 중 하나. 지정 시 2단계(스코프 선택)를 건너뛰고 해당 스코프로 진행합니다.

  • --force: Pre-Setup Check를 건너뛰고 바로 "전체 재설정" 모드로 진행합니다.

실행 순서

1단계: Pre-Setup Check + 환경 감지

아래 명령어를 실행하여 환경을 감지합니다:

bash
node "${CLAUDE_PLUGIN_ROOT}/scripts/setup-wizard.mjs" detect --cwd "$(pwd)"

결과 JSON을 파싱하여 사용자에게 한국어로 안내합니다:

  • "플랫폼: [macOS/Linux/WSL] 감지됨"
  • "사운드 플레이어: [이름] 사용 가능" 또는 "사운드 플레이어를 찾을 수 없습니다"
  • "알림 도구: [이름] 사용 가능" 또는 "알림 도구를 찾을 수 없습니다"

Graceful Degradation:

  • 사운드 플레이어가 없으면: "사운드 재생기를 찾을 수 없습니다." 안내 (정보 메시지만, 플래그 설정은 3단계에서 처리)
  • 알림 도구가 없으면: "OS 알림 도구를 찾을 수 없습니다." 안내 (정보 메시지만, 플래그 설정은 3단계에서 처리)
  • 둘 다 없으면: "터미널 벨을 사용합니다." 안내 후 sound.enabled: false, notification.enabled: false로 설정하고 3단계를 건너뜁니다
  • 감지 자체가 실패하면 기본값으로 조용히 계속 진행

WSL에서 wsl-notify-send가 없으면:

Pre-Setup Check (기존 설정 감지):

--force 플래그가 있으면 이 단계를 건너뛰고 "전체 재설정" 모드로 2단계에 진행합니다.

existingConfig 필드를 확인하여:

  • 기존 설정이 있으면 (global.exists, project.exists, projectLocal.exists 중 하나라도 true):

    code
    기존 dding-dong 설정이 발견되었습니다.
    - 전역 설정: ~/.config/dding-dong/config.json [존재/없음]
    - 프로젝트 설정: .dding-dong/config.json [존재/없음]
    - 내 설정: .dding-dong/config.local.json [존재/없음]
    

    구버전 업그레이드 감지:

    기존 설정이 발견된 경우, detect 결과의 setupVersionpluginVersion 필드를 비교합니다:

    • setupVersionnull → "이전 버전에서 업그레이드된 설정이 감지되었습니다. 설정을 업데이트하면 최신 기능을 활용할 수 있습니다."
    • setupVersionpluginVersion이 다름 → "dding-dong이 v{setupVersion}에서 v{pluginVersion}으로 업데이트되었습니다. 설정을 업데이트하여 새 기능을 반영할 수 있습니다."
    • 버전이 같음 → 별도 안내 없음

    이 안내는 정보 제공만 하며, 이후 AskUserQuestion 흐름을 변경하지 않습니다.

    AskUserQuestion으로 질문:

    • "기존 설정을 어떻게 하시겠습니까?"
      1. "설정 업데이트 (Recommended)" -- 기존 값 유지, 변경할 항목만 수정
      2. "전체 재설정" -- 기본값부터 다시 설정
      3. "취소" -- 설정 마법사 종료

    "취소"를 선택하면 마법사를 종료합니다. "설정 업데이트"를 선택하면 기존 설정을 로드한 후 2단계로 진행합니다. "전체 재설정"을 선택하면 기본값으로 2단계로 진행합니다.

  • 기존 설정이 없으면: 바로 2단계로 진행합니다.

2단계: 설치 스코프 선택

--scope 플래그가 지정되어 있으면 이 단계를 건너뛰고 해당 스코프로 3단계에 진행합니다.

AskUserQuestion으로 질문합니다:

"설치 범위를 선택해주세요."

선택지:

  1. 전역 설정 (Recommended) -- "모든 프로젝트에 적용됩니다. 설정 경로: ~/.config/dding-dong/config.json"
  2. 프로젝트 설정 -- "팀원과 공유되는 프로젝트 설정입니다. Git에 커밋됩니다. 경로: .dding-dong/config.json"
  3. 내 설정 (Local) -- "이 프로젝트에서 나만 사용하는 개인 설정입니다. Git에 포함되지 않습니다. 경로: .dding-dong/config.local.json"
  • 선택 결과를 기억하여 이후 단계에서 사용합니다

3단계: 알림 모드 선택

1단계에서 감지한 사운드 플레이어와 알림 도구의 가용 여부에 따라 분기합니다.

케이스 A: 사운드 플레이어 + 알림 도구 모두 감지됨

AskUserQuestion으로 질문합니다:

"어떤 알림 방식을 사용하시겠습니까?"

선택지:

  1. 사운드 + OS 알림 (Recommended) -- "소리와 데스크톱 알림을 모두 사용합니다."
  2. 사운드만 -- "소리만 재생합니다. OS 알림은 표시하지 않습니다."
  3. OS 알림만 -- "데스크톱 알림만 표시합니다. 소리는 재생하지 않습니다."

선택지와 config 필드 매핑:

  • 사운드 + OS 알림 → sound.enabled: true, notification.enabled: true
  • 사운드만 → sound.enabled: true, notification.enabled: false
  • OS 알림만 → sound.enabled: false, notification.enabled: true

"설정 업데이트" 모드인 경우: 기존 설정의 sound.enablednotification.enabled 조합을 읽어 현재 모드에 해당하는 선택지를 기본값(Recommended)으로 표시합니다. 예를 들어, 기존 설정이 sound.enabled: true, notification.enabled: false이면 "사운드만" 옵션에 "(현재 설정)"을 표시합니다.

케이스 B: 사운드 플레이어만 감지됨 (알림 도구 없음)

AskUserQuestion으로 질문합니다:

"OS 알림 도구를 찾을 수 없어 사운드만 사용할 수 있습니다. 이대로 진행하시겠습니까?"

선택지:

  1. 예, 사운드만 사용 (Recommended) -- "사운드 알림만 활성화합니다."
  2. 아니오, 알림을 사용하지 않겠습니다 -- "사운드와 OS 알림 모두 비활성화합니다. 터미널 벨만 사용합니다."
  • "예" → sound.enabled: true, notification.enabled: false
  • "아니오" → sound.enabled: false, notification.enabled: false

케이스 C: 알림 도구만 감지됨 (사운드 플레이어 없음)

AskUserQuestion으로 질문합니다:

"사운드 재생기를 찾을 수 없어 OS 알림만 사용할 수 있습니다. 이대로 진행하시겠습니까?"

선택지:

  1. 예, OS 알림만 사용 (Recommended) -- "OS 알림만 활성화합니다."
  2. 아니오, 알림을 사용하지 않겠습니다 -- "사운드와 OS 알림 모두 비활성화합니다. 터미널 벨만 사용합니다."
  • "예" → sound.enabled: false, notification.enabled: true
  • "아니오" → sound.enabled: false, notification.enabled: false

케이스 D: 둘 다 감지되지 않음

이 단계를 건너뜁니다. 1단계에서 이미 sound.enabled: false, notification.enabled: false로 설정되어 있습니다.

4단계: 사운드팩 선택

3단계에서 사운드가 활성화된 경우에만 이 단계를 실행합니다. 사운드가 비활성화된 경우 기본 팩(default)을 유지하고 5단계로 건너뜁니다.

AskUserQuestion으로 질문합니다:

"사운드 테마를 선택해주세요."

선택지:

  1. 기본 효과음 (Recommended) -- "깔끔한 사인파 비프음. 심플하고 방해가 적습니다."
  2. 레트로 게임 (8-bit) -- "칩튠 스타일의 게임기 효과음. NES/게임보이 감성."
  3. 뮤지컬 코드 (Musical) -- "피아노 코드 기반의 화성적 알림음. 풍성하고 따뜻한 느낌."

선택지와 sound.pack 값 매핑:

  • 기본 효과음 → "default"
  • 레트로 게임 → "retro"
  • 뮤지컬 코드 → "musical"

선택 후 미리듣기를 제안합니다:

AskUserQuestion으로 질문: "선택한 팩의 사운드를 미리 들어보시겠습니까?"

  • 예 (Recommended)
  • 아니오

미리듣기 선택 시, 선택한 팩의 task.complete 사운드를 재생합니다:

bash
DDING_DONG_PACK="${SELECTED_PACK}" node "${CLAUDE_PLUGIN_ROOT}/scripts/notify.mjs" test task.complete

미리듣기 후 변경을 원하면 다시 팩 선택으로 돌아갑니다. 만족하면 5단계로 진행합니다.

5단계: 사용자 선호도 확인

AskUserQuestion으로 순차적으로 질문합니다:

5-a. 이벤트 선택 (multiSelect): "어떤 이벤트에 알림을 받으시겠습니까?"

  • 작업 완료 (task.complete) - 기본 ON
  • 오류 발생 (task.error) - 기본 ON
  • 입력 필요 (input.required) - 기본 ON
  • 세션 시작 (session.start) - 기본 OFF
  • 세션 종료 (session.end) - 기본 OFF

5-b. 볼륨 (3단계에서 사운드가 활성화된 경우에만 질문): "사운드 볼륨을 선택해주세요."

  • 0.3 (작게)
  • 0.5 (보통)
  • 0.7 (기본, Recommended)
  • 1.0 (최대)

3단계에서 사운드가 비활성화된 경우 이 질문을 건너뜁니다.

5-c. 야간 모드: "야간 모드를 사용하시겠습니까?"

  • 사용 안 함 (기본, Recommended)
  • 사용 (22:00~08:00)

6단계: 설정 저장

사용자 응답을 바탕으로 설정 객체를 구성합니다. 3단계에서 결정한 sound.enablednotification.enabled 값을 설정 객체에 반영합니다. 사운드가 활성화된 경우, 4단계에서 선택한 사운드팩 이름을 sound.pack 필드에 포함합니다.

스코프에 따라 아래 명령어로 설정을 저장합니다:

bash
node "${CLAUDE_PLUGIN_ROOT}/scripts/config-save.mjs" '${CONFIG_JSON}' --scope '${SCOPE}' --cwd "$(pwd)"
  • ${SCOPE}는 2단계에서 선택한 스코프 (global, project, local)
  • ${CONFIG_JSON}은 사용자 응답을 바탕으로 구성한 설정 JSON 문자열

스코프별 동작:

  • Global (--scope global): ~/.config/dding-dong/config.json에 전체 설정을 저장합니다.
  • Project (--scope project): .dding-dong/config.json오버라이드 키만 (diff-only) 저장합니다. 기본값과 다른 항목만 설정 객체에 포함합니다. config.local.json.gitignore에 자동으로 추가합니다 (개인 설정 보호).
  • Local (--scope local): .dding-dong/config.local.json오버라이드 키만 (diff-only) 저장합니다. 기본값과 다른 항목만 설정 객체에 포함합니다. .gitignoreconfig.local.json 라인이 없으면 추가합니다.

결과 JSON의 success 필드로 저장 성공 여부를 확인합니다. error 필드가 있으면 사용자에게 안내합니다.

Project/Local 공통 — .gitignore 처리:

  • 프로젝트 루트의 .gitignoreconfig.local.json 패턴이 없으면 추가합니다.
  • AskUserQuestion으로 추가 질문 (Project 스코프에서만): ".dding-dong/ 디렉토리 전체를 .gitignore에 추가하시겠습니까?"
    1. "config.local.json만 제외 (Recommended)" -- 팀 공유 config.json은 커밋, 개인 설정만 제외
    2. "디렉토리 전체 제외" -- .dding-dong/ 전체를 Git 추적에서 제외

6-a단계: 설정 완료 메타데이터 기록

글로벌 설정 파일에 _meta 필드를 기록합니다 (doctor 스킬에서 셋업 완료 여부 판별에 사용):

bash
node "${CLAUDE_PLUGIN_ROOT}/skills/dd-setup/scripts/setup-meta.mjs"

결과 JSON의 success 필드로 기록 성공을 확인합니다. setupVersionplugin.json에서 자동으로 읽어옵니다.

이 단계는 자동으로 실행됩니다 (사용자 인터랙션 없음).

6-b단계: 플러그인 설치 검증

플러그인이 Claude Code에 등록되어 있는지 확인합니다:

bash
claude plugin list 2>/dev/null | grep -qi dding-dong && echo "REGISTERED" || echo "NOT_REGISTERED"
  • REGISTERED: "dding-dong 플러그인이 정상 등록되어 있습니다." 안내
  • NOT_REGISTERED 또는 명령 실행 실패:
    code
    dding-dong 플러그인이 Claude Code에 등록되지 않았습니다.
    아래 명령어로 등록해주세요:
      claude plugin add ${CLAUDE_PLUGIN_ROOT}
    

이 확인이 실패해도 셋업을 중단하지 않고 안내만 합니다.

7단계: 테스트 + 완료 요약

테스트 알림을 실행합니다:

bash
node "${CLAUDE_PLUGIN_ROOT}/scripts/notify.mjs" test task.complete

3단계에서 "OS 알림만"을 선택한 경우, 테스트 시 소리가 나지 않는 것이 정상입니다. "OS 알림만 모드입니다. 소리 없이 데스크톱 알림만 표시됩니다." 안내를 추가합니다.

결과를 확인하고 완료 요약 메시지를 출력합니다:

성공 시:

code
dding-dong 설정 완료!
- 설정 파일: [설정 파일 경로]
- 범위: [전역/프로젝트/내 설정(Local)]
- 알림 방식: [사운드 + OS 알림 / 사운드만 / OS 알림만]
- 사운드 팩: [선택된 팩 displayName] (사운드 활성화 시에만 표시)
- 활성 이벤트: [활성화된 이벤트 목록]
- 볼륨: [설정된 볼륨] (사운드 활성화 시에만 표시)
- 야간 모드: [활성/비활성]

테스트 실패 시:

code
설정이 저장되었지만 테스트 알림에 실패했습니다.
/dding-dong:dd-config show 로 설정을 확인해주세요.

8단계: GitHub 스타 요청

이 단계는 셋업 결과에 영향을 주지 않는 부가적 단계입니다.

먼저 gh CLI 인증 여부를 확인합니다:

bash
gh auth status 2>&1 && echo "GH_AUTHENTICATED" || echo "GH_NOT_AUTHENTICATED"

인증된 경우 (GH_AUTHENTICATED):

AskUserQuestion으로 질문합니다: "dding-dong이 마음에 드셨다면 GitHub에 스타를 남겨주세요!"

선택지:

  1. 스타 남기기 -- "CaesiumY/dding-dong 저장소에 스타를 남깁니다."
  2. 건너뛰기 -- "다음에 남기겠습니다."
  • "스타 남기기" 선택 시:

    bash
    gh repo star CaesiumY/dding-dong
    

    성공 시: "감사합니다! 스타가 등록되었습니다." 안내 실패 시: 오류를 무시하고 조용히 진행

  • "건너뛰기" 선택 시: 그냥 진행

미인증 또는 실패한 경우 (GH_NOT_AUTHENTICATED):

저장소 URL만 안내합니다:

code
dding-dong이 마음에 드셨다면 GitHub에 스타를 남겨주세요!
https://github.com/CaesiumY/dding-dong

관련 스킬

  • 설정 조회/변경 → /dding-dong:dd-config
  • 알림 문제 진단 → /dding-dong:dd-doctor
  • 전체 기능 안내 → /dding-dong:dd-help