[일주일프/03] attention-hook: Claude가 사용자 입력을 기다릴 때 슬랙으로 알려주는 hook

알림 설정의 부작용은 '피로감'입니다. 내 일을 대신해줄 유능한 에이전트가 상시 대기하면서 일 끝났다며 보채니, 바로바로 다음 일을 줘야만 유능한 주인이 되는 것 같은 압박이 생겨요. 매번 일을 줘야 한다는 스트레스에서 벗어나려면 에이전트가 무한히 할 만한 작업 목록을 준비해놔야겠더군요.
💡
'일주일프'나와 내 주변 사람을 위한 유용한 프로그램을 매주 1개씩 만들어서 소셜 미디어에 공유하는 프로젝트입니다. 2026년에 잡은 가장 중요한 목표이기도 합니다.

1/20 업데이트: iOS SSH 클라이언트를 Termius에서 BlinkShell로 교체했습니다. tmux + CJK + iOS 조합이 잘 작동하게 하기 쉽지 않아서 고통받고 있었는데 BlinkShell로 넘어가니까 아주 쾌적하고 인터페이스도 훨씬 편하네요. 유료(연구독 $20)지만 추천합니다.

attention-hook 은 Claude Code가 사용자의 입력을 기다릴 때 Slack으로 푸시 알림을 보내는 hook입니다.

알림에 이미지를 제외한 작업 컨텍스트(사용자 요청, Claude 응답, AskUserQuestion을 통한 질문 내용, Todo 상태)가 포함되어 어떤 작업인지 즉시 파악할 수 있습니다. 원격 서버에 세팅해뒀을 때 유용합니다.

claude-plugins/plugins/attention-hook/hooks/hooks.json at main · corca-ai/claude-plugins
Contribute to corca-ai/claude-plugins development by creating an account on GitHub.

설치 방법:

claude plugin marketplace add corca-plugins
claude plugin install attention-hook@corca-plugins

알림 트리거 조건:

  • idle_prompt: 에이전트가 사용자 입력을 60초 이상 기다리고 있을 때 (60초는 Claude Code 내부 구현이라 변경 불가)
  • AskUserQuestion: 에이전트가 질문하고 30초 이상 기다리고 있음 (CLAUDE_ATTENTION_DELAY 환경변수로 조정 가능)

필수 조건:

  • jq 설치 필요 (JSON 파싱용)
  • Slack 봇 설정 후 알림 받을 채널에 대한 Webhook URL 준비

설정 방법:

  1. ~/.claude/.env 파일 생성 후 웹훅 URL 설정:
# ~/.claude/.env
SLACK_WEBHOOK_URL=""
CLAUDE_ATTENTION_DELAY=30 # AskUserQuestion 알림 지연 시간 (초, 기본값: 30)
  1. 플러그인 설치 후 hooks/hooks.json이 자동으로 적용됩니다.
{
  "hooks": {
    "Notification": [
      {
        "matcher": "idle_prompt",
        "hooks": [
          {
            "type": "command",
            "command": "${CLAUDE_PLUGIN_ROOT}/hooks/scripts/attention.sh"
          }
        ]
      }
    ],
    "PreToolUse": [
      {
        "matcher": "AskUserQuestion",
        "hooks": [
          {
            "type": "command",
            "command": "${CLAUDE_PLUGIN_ROOT}/hooks/scripts/start-timer.sh"
          }
        ]
      }
    ],
    "PostToolUse": [
      {
        "matcher": "AskUserQuestion",
        "hooks": [
          {
            "type": "command",
            "command": "${CLAUDE_PLUGIN_ROOT}/hooks/scripts/cancel-timer.sh"
          }
        ]
      }
    ]
  }
}

알림 내용: (길면 처음/끝 5줄씩만 남김)

  • 📝 사용자 요청 내용
  • 🤖 요청에 대한 에이전트 응답
  • ❓ 질문 대기 중: AskUserQuestion의 질문과 선택지
  • ✅ Todo: 완료/진행중/대기 항목 수 및 내용

알림 예시:


작업 배경

attention-hook은 토큰을 더 적극적으로, 더 많이 사용하기 위해 노력하는 과정에서 만들어졌습니다.

회사에서 원격 서버 계정 하나를 받아 mosh를 설치하고, 스마트폰에도 mosh가 호환되는 termius를 설치했어요. tmux + mosh 로 영원히(?) 꺼지지 않고 모바일에서도 언제든지 클로드 코드를 돌릴 수 있는 환경이 마련됐죠. 하지만 원격 서버에서 클코를 돌리니 작업 종료 여부를 알기 어려웠어요.

1/20 업데이트: iOS SSH 클라이언트를 Termius에서 BlinkShell로 교체했습니다. tmux + CJK + iOS 조합이 잘 작동하게 하기 쉽지 않아서 고통받고 있었는데 BlinkShell로 넘어가니까 아주 쾌적하고 인터페이스도 훨씬 편하네요. 유료(연구독 $20)지만 추천합니다.

모바일에도 PC에도 슬랙은 깔려있으니, 에이전트의 작업이 끝나면 슬랙 웹훅으로 DM을 보내주는 쉘 스크립트를 만들었습니다. 그런데 적용하고 보니 2가지 문제가 있더군요.

  1. 필요없는 알림(False Positive): 내가 정말로 기다리고 있는 게 아니라 한창 작업 중일 때도 계속 알림이 쌓인다.
  2. 알림에 필요한 정보 부재(False Negative): 내가 뭘 시켜서 뭘 했는지 알림만으로 알 수 없다.

결국 클로드 코드의 hook 공식문서와 깃헙 이슈를 에이전트와 함께 파헤치고, 수차례 디버깅을 거쳐 만족스러운 알림이 완성됐습니다. 물론 클코 업데이트에 따라 근시일 내에 쓸모없어질 가능성도 있지만요.

  • 알림 조건 1 - Notification > idle_prompt: 에이전트 응답이 끝나고 60초간 반응이 없으면 발동합니다.
  • 알림 조건 2 - PreToolUse > AskUserQuestion: idle_prompt 는 현재 클코 버전에서 AskUserQuestion에 대해서는 발동하지 않습니다. 그래서 에이전트가 질문하고 30초간 응답이 없으면 알림을 보내는 조건을 추가했죠. 30초 안에 응답하면 PostToolUse를 통해 타이머가 취소되어 알림이 안 가고요.
  • 알림에 풍부한 내용 표시: 모든 질의와 응답이 로컬 json 파일로 저장된다는 건 알고 있었지만 다양한 케이스에서 파싱하는 게 상당히 까다로웠어요. 시행착오 끝에 유처 요청(이미지 포함 여부에 따라 달라짐), 툴 호출을 제외한 에이전트 응답, ToDoWrite, AskUserQuestion 내용 등을 jq로 파싱한 뒤, 너무 길면 앞뒤만 보여주게 하는 데 성공했습니다. 테스트 전용 fixture와 스크립트를 준비해두니 동작 검증이 수월했어요.

맺으며

원래 원격 서버에만 설치해두려고 했던 hook인데 테스트를 위해 로컬에 설치해보니 편하더군요. 그래서 오래 전 로컬에 설치해두었던 음성 알림(say -v)은 은퇴했습니다.

"hooks": {
  "Notification": [
    {
      "matcher": "",
      "hooks": [
        {
          "type": "command",
          "command": "say -v Samantha 'help me master'"
        }
      ]
    }
  ]
},

알림 설정의 부작용은 (예상했던 대로) '피로감'입니다. 내 일을 대신해줄 유능한 에이전트가 상시 대기하면서 일 끝났다며 보채니, 바로바로 다음 일을 줘야만 유능한 주인이 되는 것 같은 압박이 생겨요. Claude Code Max 플랜이 5시간마다 한도가 리셋되는 정액제라서 더욱 그렇습니다. 오래 전 던전앤파이터 하던 시절 피로도를 녹이려고 집착하던 시절도 떠오릅니다.

이런 이야기를 했더니 한 동료분은 "매번 일을 줘야 한다는 스트레스에서 벗어나려면 에이전트가 무한히 할 만한 작업 목록을 준비해놔야겠다"는 말을 하시더군요. 번역, 분석, 마이그레이션, 리팩토링처럼 말이죠. 이제는 개발과 AI 리터러시가 어느정도 갖춰진 분들에게는 정말 아이디어(풀어야 할 문제)와 데이터, 인간의 의사결정만이 병목인 것 같습니다.