Fall in IT.

Claude Code 작업 완료 알림에 작업 내용 포함하기 본문

Artificial Intelligence

Claude Code 작업 완료 알림에 작업 내용 포함하기

D.Y 2026. 5. 15. 13:58
반응형

Claude Code를 여러 세션으로 병렬 운영하다 보면 한 가지 불편함이 생긴다. 작업이 완료될때까지 모니터링해야한다는 점이다. 

그래서 필자는 hook과 terminal-notifier 스크립트를 사용해서 작업이 끝나면 알림이 오도록 구성해서 사용하고 있었다.

 

그런데.... 사용하다보니....

작업이 완료됐다는 알림은 오는데, "작업 완료"라는 메시지만으로는 어떤 세션에서 무엇이 끝났는지 알 방법이 없다.

문제

기본 Stop 훅 설정은 다음과 같다.

{
  "hooks": {
    "Stop": [
      {
        "hooks": [
          {
            "type": "command",
            "command": "terminal-notifier -message '작업 완료' -title 'Claude Code' -sound default"
          }
        ]
      }
    ]
  }
}

알림에는 항상 동일한 "작업 완료" 문자열만 표시된다. 세션이 많아질수록 알림을 받아도 어떤 작업이 끝난 건지 알 수 없다.

원인

Claude Code의 Stop 훅은 실행 시 이벤트 데이터를 stdin으로 전달한다. 기본 설정에서는 이 데이터를 전혀 사용하지 않는다.

이벤트 JSON 구조는 다음과 같다.

{
  "session_id": "...",
  "hook_event_name": "Stop",
  "last_assistant_message": "V94 마이그레이션 파일을 생성하고 서버를 재시작했습니다...",
  "transcript_path": "...",
  ...
}

last_assistant_message 필드에 Claude의 마지막 응답 전문이 담겨 있다.

해결책

훅 스크립트에서 last_assistant_message의 첫 번째 줄을 추출해 알림 메시지로 사용한다.

1. 스크립트 작성

~/.claude/hooks/terminal-notify.sh:

#!/bin/bash
EVENT=$(cat)
SUMMARY=$(echo "$EVENT" | jq -r '
  .last_assistant_message // "" |
  split("\\n")[0] |
  .[0:100]
' 2>/dev/null)
if [ -z "$SUMMARY" ] || [ "$SUMMARY" = "null" ]; then
    SUMMARY="작업 완료"
fi
terminal-notifier -message "$SUMMARY" -title "Claude Code" -sound default

실행 권한을 부여한다.

chmod +x ~/.claude/hooks/terminal-notify.sh

2. settings.json 등록

~/.claude/settings.json의 Stop 훅에 위 스크립트를 등록한다.

{
  "hooks": {
    "Stop": [
      {
        "matcher": "",
        "hooks": [
          {
            "type": "command",
            "command": "~/.claude/hooks/terminal-notify.sh"
          }
        ]
      }
    ]
  }
}

기존 인라인 terminal-notifier 명령이 있다면 위 스크립트 경로로 교체한다.

결과

알림 메시지 예시

Before 작업 완료
After V94 마이그레이션 파일을 생성하고 서버를 재시작했습니다.

응답의 첫 번째 줄은 대부분 작업 결과 요약 문장이다. 알림만으로 어떤 작업이 끝났는지 즉시 파악할 수 있다. 메시지를 추출할 수 없는 경우에는 "작업 완료"로 폴백된다.


jq가 사전 설치되어 있어야 한다(brew install jq). macOS 외 환경에서는 terminal-notifier 대신 해당 플랫폼의 알림 도구로 교체하면 동일하게 적용된다.

반응형
Comments