Files
nuxt-claude/.claude/hooks/stop-hook.sh
hyeonggil 4f8e225727 🧑‍💻 dx: Claude Code 개발 환경 초기 설정
- 커스텀 에이전트 추가 (code-reviewer, development-planner, nextjs-app-developer, starter-cleaner, ui-markup-specialist, prd-generator, prd-validator)
- 커스텀 명령어 추가 (git: commit/branch/merge/pr, docs: update-roadmap)
- Slack 알림 훅 추가 (notification-hook.sh, stop-hook.sh)
- Claude Code 권한 및 MCP 서버 설정 업데이트
- CLAUDE.md 프로젝트 가이드 문서 추가
- Husky pre-commit 훅 설정 (lint-staged 연동)
2026-03-08 18:17:30 +09:00

52 lines
1.6 KiB
Bash

#!/bin/bash
# Claude Code Stop 훅 - 작업 완료 알림
#
# 이 스크립트는 Claude Code가 Stop 이벤트를 발생시킬 때 실행됩니다.
# Claude가 응답을 완료했을 때 Slack 알림을 보냅니다.
# .env 파일에서 Slack 웹훅 URL 로드
if [ -f "$CLAUDE_PROJECT_DIR/.env" ]; then
source "$CLAUDE_PROJECT_DIR/.env"
else
echo "오류: .env 파일을 찾을 수 없습니다: $CLAUDE_PROJECT_DIR/.env" >&2
exit 1
fi
# Slack 웹훅 URL 확인
if [ -z "$SLACK_WEBHOOK_URL" ]; then
echo "오류: SLACK_WEBHOOK_URL이 설정되지 않았습니다." >&2
exit 1
fi
# 프로젝트명 추출
PROJECT_NAME=$(basename "$CLAUDE_PROJECT_DIR")
# 현재 시간
TIMESTAMP=$(date '+%Y-%m-%d %H:%M:%S')
# JSON 입력에서 정보 추출 (있는 경우)
REASON=$(jq -r '.hook_event_name')
# 디버깅을 위한 변수 출력 (stderr로 출력)
echo "DEBUG: REASON = '$REASON'" >&2
echo "DEBUG: PROJECT_NAME = '$PROJECT_NAME'" >&2
echo "DEBUG: TIMESTAMP = '$TIMESTAMP'" >&2
# JSON payload 생성
PAYLOAD=$(printf '{"channel": "#claude-code", "username": "Claude Code", "text": "✅ 작업 완료 알림\n\n프로젝트: %s\n상태: %s\n시간: %s\n\nClaude Code 작업이 완료되었습니다.", "icon_emoji": ":white_check_mark:"}' "$PROJECT_NAME" "$REASON" "$TIMESTAMP")
echo "DEBUG: PAYLOAD = '$PAYLOAD'" >&2
# Slack으로 알림 전송
curl -X POST \
--data-urlencode "payload=$PAYLOAD" \
"$SLACK_WEBHOOK_URL" > /dev/null 2>&1
# 성공 여부 확인
if [ $? -eq 0 ]; then
echo "Slack 알림이 성공적으로 전송되었습니다." >&2
else
echo "Slack 알림 전송에 실패했습니다." >&2
exit 1
fi