콘텐츠로 이동

/slack

현재 진행중인 프로젝트의 Slack 알림을 설정·테스트·확인·해제할 때 사용한다. 활성화 시 작업 완료·사용자 승인 이벤트가 해당 프로젝트 채널로 전송된다. 설정은 workspace/projects/{PROJECT}/.slack.env 를 SSOT 로 관리한다.

현재 진행중인 프로젝트에 Slack 알림을 설정한다. .slack.env 가 SSOT (퍼미션 0600).

사용법: $ARGUMENTS

인자 동작
(없음) .slack.env 생성 + 채널·이벤트 대화식 설정
test 현재 설정으로 테스트 메시지 1건 발송
status .slack.env 존재·필드·gitignore 보호 여부 요약
disable 비활성화 방법 안내 (파일 직접 삭제 — Claude 가 rm 직접 실행 금지)

사전 확인

preamble.mdP1 수행. 실패 시 messages.mdno_active_project 출력 후 종료. {PROJECT_DIR} = workspace/projects/{PROJECT}.

공통 선행 (모든 서브커맨드) — 먼저 doctor 로 .gitignore 보호 상태를 점검한다 (secret 이 커밋되지 않도록 보장):

python3 ${CLAUDE_PLUGIN_ROOT}/tools/doctor.py workspace 2>&1 | grep -E "\.gitignore secrets|\[CRITICAL\]" || true

[CRITICAL] 출력 시 즉시 중단 + 원문 그대로 전달 (사용자의 git rm --cached + webhook 재발급 선행 필요 — 이후 서브커맨드 수행 금지). .gitignore secrets: 누락 패턴 자동 주입 출력 시 "리포 루트 .gitignore.slack.env 가 자동 추가됨, 커밋하세요" 안내.

수행 절차

(없음) — 활성화

.slack.env 이미 존재하면 messages.mdslack.already_active 출력 후 종료 (파일 편집·status·disable 안내). 없으면 채널명(필수)·이벤트(기본 complete,approval,pr, 쉼표 구분) 대화식 입력 후 아래 env 필드로 {PROJECT_DIR}/.slack.env Write + chmod 600:

SLACK_WEBHOOK_URL=
SLACK_CHANNEL={채널명}
SLACK_EVENTS={이벤트목록}

git check-ignore {PROJECT_DIR}/.slack.env exit code ≠ 0 이면 .gitignore 미보호 — 파일을 즉시 삭제하고 slack.tracked_critical 경고 출력 후 종료. 정상이면 slack.activated 출력({채널명}·{이벤트목록}·{파일경로} 치환) + "webhook 을 붙여넣었다면 /pilot:slack test 실행" 안내.

test

.slack.env 없으면 "활성화된 Slack 설정이 없습니다. /pilot:slack 으로 먼저 활성화하세요." 후 종료. 있으면:

python3 ${CLAUDE_PLUGIN_ROOT}/tools/slack-notify.py --event approval --workspace workspace --message "테스트 메시지입니다 (/pilot:slack test)"

stderr 가 비면 slack.test_ok 출력, 있으면 원문 + slack.test_fail 안내 덧붙이기.

status

.slack.env 존재 / SLACK_WEBHOOK_URL 설정됨·비어있음(URL 값 자체는 출력 금지) / SLACK_CHANNEL / SLACK_EVENTS(빈 값이면 기본값 표기) / .gitignore 패턴 여부 / git tracked 여부(git -C {PROJECT_DIR} ls-files --error-unmatch .slack.env) 를 표 1개로 출력. tracked 위험이면 slack.tracked_criticalgit rm --cached 명령을 실제 경로로 치환해 함께 출력.

disable

messages.mdslack.disable_hint{프로젝트경로} 치환해 출력. Claude 가 직접 rm 을 실행하지 않는다 (destructive 조치는 사용자 확인 필요).

드리프트 대응

없음 — 이 스킬은 .slack.env 를 직접 쓰는 유일 경로라 drift 발생 소스가 없다.