Files
nuxt-claude/.claude/hooks/notification-hook.sh
NEW_GIL_HOME\hyeon 196a0478c7
Some checks failed
ci / ci (22, ubuntu-latest) (push) Failing after 25m7s
feat: Update Claude hooks to PowerShell scripts and add Notion DB expert agent
- Replaced shell scripts with PowerShell scripts for notification and stop hooks to improve compatibility on Windows.
- Introduced a new agent, `notion-db-expert`, for managing Notion API interactions, including detailed guidelines and examples for database operations.
- Updated settings to reflect the new PowerShell command paths in `.claude/settings.local.json`.
- Added documentation for the new agent in `docs/PRD_PROMPT.md` and `docs/PRD.md` to support project development.
2026-03-15 14:27:32 +09:00

68 lines
2.1 KiB
Bash
Executable File

#!/bin/bash
# Claude Code Notification 훅 - 권한 요청 및 사용자 입력 대기 알림
#
# 이 스크립트는 Claude Code가 Notification 이벤트를 발생시킬 때 실행됩니다.
# 주로 권한 요청이나 사용자 입력 대기 상황에서 Slack 알림을 보냅니다.
# .env 파일에서 Slack 웹훅 URL 로드 (CRLF 호환)
ENV_FILE="${CLAUDE_PROJECT_DIR}/.env"
# Windows 경로 백슬래시를 슬래시로 변환
ENV_FILE="${ENV_FILE//\\//}"
if [ -f "$ENV_FILE" ]; then
while IFS='=' read -r key value; do
[[ "$key" =~ ^[[:space:]]*# ]] && continue
[[ -z "${key// }" ]] && continue
key="${key//$'\r'/}"
value="${value//$'\r'/}"
export "$key=$value"
done < "$ENV_FILE"
else
echo "오류: .env 파일을 찾을 수 없습니다: $ENV_FILE" >&2
exit 1
fi
# Slack 웹훅 URL 확인
if [ -z "$SLACK_WEBHOOK_URL" ]; then
echo "오류: SLACK_WEBHOOK_URL이 설정되지 않았습니다." >&2
exit 1
fi
# stdin에서 JSON 입력 읽기
STDIN_DATA=$(cat)
# JSON 입력에서 메시지 추출
MESSAGE=$(echo "$STDIN_DATA" | jq -r '.message // empty')
# 프로젝트명 추출 (Windows 경로 백슬래시 변환)
NORMALIZED_DIR="${CLAUDE_PROJECT_DIR//\\//}"
PROJECT_NAME=$(basename "$NORMALIZED_DIR")
# 현재 시간
TIMESTAMP=$(date '+%Y-%m-%d %H:%M:%S')
# jq를 사용해 안전하게 JSON payload 생성 (특수문자 이스케이프 처리)
PAYLOAD=$(jq -n \
--arg project "$PROJECT_NAME" \
--arg message "$MESSAGE" \
--arg timestamp "$TIMESTAMP" \
'{
channel: "#claude-code",
username: "Claude Code",
icon_emoji: ":bell:",
text: ("🔔 권한 요청 알림\n\n프로젝트: " + $project + "\n상태: " + $message + "\n시간: " + $timestamp + "\n\nClaude Code에서 알림이 도착했습니다.")
}')
# Slack으로 알림 전송
curl -s -X POST \
-H "Content-Type: application/json" \
-d "$PAYLOAD" \
"$SLACK_WEBHOOK_URL" > /dev/null 2>&1
# 성공 여부 확인
if [ $? -eq 0 ]; then
echo "Slack 알림이 성공적으로 전송되었습니다." >&2
else
echo "Slack 알림 전송에 실패했습니다." >&2
exit 1
fi