Claude Code 작업 완료 알림: 토스트와 알림음
긴 Claude 턴이 끝나면 "Done in 2m 14s" 토스트와 짧은 알림음을 내고, 데스크톱 알림도 선택적으로 보냅니다.
권한
- 명령어 실행컴퓨터에서 셸 프로그램을 실행할 수 있습니다($.process.run / spawn). 정확히 어떤 프로그램인지는 소스를 확인하세요.
- UI 변경Claude Code 화면에 밴드, 패널, 상태 텍스트, 토스트를 그립니다(ui.render / $.ui.*).
- 소리 재생오디오를 재생하거나 텍스트를 읽어 줄 수 있습니다($.audio.*).
- 테스트 버전
- v2.1.291
- 마지막 테스트
- 필요 버전
- Claude Code ≥ 2.1.287
- 표시 위치
- 토스트
Claude Code 안에서 설치:
/plugin install cm-done-toast --marketplace rotbit/claudemods-marketplace이 모드는 무엇을 하나요?
완료 토스트는 Claude Code 작업 완료 알림을 제공합니다. 시간이 걸린 턴이 끝나면 Done in 2m 14s라는 토스트가 뜨고 두 음으로 된 짧은 알림음이 울립니다. 오류로 끝난 턴이라면 대신 Stopped on an error after 2m 14s라고 표시됩니다. 짧은 턴, 중단된 턴, 서브에이전트 턴은 조용히 넘어가므로, 알림음이 들리면 "돌아오세요, 답변이 준비되었습니다"라는 뜻입니다.
긴 작업 중에 다른 창에서 일한다면 시스템 알림 옵션을 켜십시오. 같은 메시지가 macOS 알림 센터나 Linux의 notify-send 팝업으로도 표시됩니다. Claude Code 2.1.287 이상이 필요합니다.
데모
녹화 영상에서는 기준 시간보다 오래 걸리는 작업을 Claude에게 보냅니다. 턴이 끝나면 화면 아래쪽에 턴의 소요 시간이 담긴 토스트가 나타납니다.
설치
설치 블록의 방법 중 하나를 선택하십시오. macOS에서는 별도 설정 없이 소리가 나며, 시스템 알림은 직접 켜야 합니다.
$ install cm-done-toast
Claude Code 2.1.287 이상 필요
1.Claude Code 안에서 한 줄로
/plugin install cm-done-toast --marketplace rotbit/claudemods-marketplace실행 중인 세션(v2.1.275 이상)에 붙여 넣으세요. Claude Code가 먼저 마켓플레이스 추가 여부를 묻습니다.
2.셸에서 설치
claude plugin marketplace add rotbit/claudemods-marketplace claude plugin install cm-done-toast@claudemods그런 다음 이미 열려 있는 세션에서 /reload-plugins를 실행하세요.
3.설치하지 않고 사용해 보기
git clone https://github.com/rotbit/claudemods-marketplace claude --plugin-dir ./claudemods-marketplace/cm-done-toast한 세션에서만 모드를 불러옵니다. 설정에는 아무것도 추가되지 않습니다.
작동 방식
이 모드에는 훅이 하나뿐입니다. hooks/register.ts의 코드는 다음과 같습니다.
on('turn.complete', async ($, e, next) => {
const result = await next(e)
if (!shouldNotify(e, minSeconds)) return result
const text = toastText(e, includeAnswerPreview)
$.ui.toast(text)
if (sound) {
$.audio.play({ asset: 'sounds/done.wav' }).catch(() => undefined)
}
if (systemNotification) {
platform ??= $.process
.run(['uname', '-s'], { timeoutMs: 5000 })
.then(ran => (ran.exitCode === 0 ? parseUname(ran.stdout) : undefined))
.catch(() => undefined)
platform
.then(found =>
found === undefined ? undefined : $.process.run(notificationArgv(found, 'Claude Code', text), { timeoutMs: 10000 }),
)
.catch(() => undefined)
}
return result
})turn.complete는 Claude가 턴을 마칠 때 발생합니다. 훅은 먼저 next(e)를 기다리므로 턴의 결과를 지연시키지 않습니다. hooks/format.ts의 shouldNotify는 서브에이전트 턴(agentId가 있는 턴), 중단된 턴, minSeconds보다 짧은 턴에 대해 false를 반환합니다. toastText는 소요 시간을 45s, 2m 14s, 1h 3m 형식으로 표시합니다.
알림음은 모드에 포함된 sounds/done.wav이며 $.audio.play로 재생됩니다. 모드 API에는 플랫폼 필드도 알림 호출도 없기 때문에, 시스템 알림이 켜져 있으면 모드가 uname -s를 한 번 실행해 결과를 캐시합니다. 그런 다음 macOS에서는 osascript -e 'display notification …'를, Linux에서는 notify-send를 실행합니다. 인수는 셸을 거치지 않고 argv 배열로 전달되므로 Claude 답변에 따옴표가 있어도 명령 밖으로 빠져나갈 수 없습니다. 소리와 알림은 실행만 하고 결과를 기다리지 않으며, 오류는 무시됩니다.
사용자 지정
다음 옵션은 /config에서 변경할 수 있습니다. 원하는 소리를 쓰려면 모드 폴더의 sounds/done.wav를 교체하거나 훅의 asset 경로를 바꾸십시오. 토스트 문구는 hooks/format.ts의 toastText에서 만들어지고, 알림 제목 'Claude Code'는 notificationArgv의 두 번째 인수입니다.
| 설정 | 유형 | 기본값 | 설명 |
|---|---|---|---|
| minSeconds | number | 30 | Minimum turn length (seconds). Only turns at least this long raise the toast, sound and notification. |
| sound | boolean | true | Play a sound. Play a short chime when the turn finishes (macOS only: Claude Code plays clips with afplay). |
| systemNotification | boolean | false | System notification. Also raise a desktop notification via osascript (macOS) or notify-send (Linux). |
| includeAnswerPreview | boolean | false | Include answer preview. Add the first 80 characters of Claude's answer to the toast and notification. |
Claude Code에서 /config로 변경하세요. 모드가 즉시 다시 로드됩니다.
권한 및 안전
UI 변경은 토스트에 해당합니다. 소리 재생은 알림음에 해당합니다. 명령어 실행은 코드에 $.process.run이 있어서 표시되지만, systemNotification을 켰을 때만 사용됩니다. 그때는 uname -s를 한 번 실행한 뒤 고정된 인수로 osascript 또는 notify-send를 실행합니다. 기본 설정에서는 어떤 프로세스도 시작되지 않습니다.
이 모드는 도구 호출을 가로채지 않으며, 프롬프트를 읽거나 파일을 건드리거나 네트워크를 사용하지 않습니다. 끄려면 /plugin disable cm-done-toast를 실행하고, 모든 모드를 끈 채 세션을 시작하려면 claude --safe-mode를 사용하십시오.
- 명령어 실행
- 컴퓨터에서 셸 프로그램을 실행할 수 있습니다($.process.run / spawn). 정확히 어떤 프로그램인지는 소스를 확인하세요.
- UI 변경
- Claude Code 화면에 밴드, 패널, 상태 텍스트, 토스트를 그립니다(ui.render / $.ui.*).
- 소리 재생
- 오디오를 재생하거나 텍스트를 읽어 줄 수 있습니다($.audio.*).
호환성 및 문제 해결
macOS 터미널에서 Claude Code 2.1.291로 테스트했습니다. 턴이 끝나도 아무 일도 일어나지 않는다면 다음을 확인하십시오.
claude --version이 2.1.287 이상인지, 그리고/plugin에서 모드가 활성화되어 있는지 확인하십시오.- 셸에서 설치했다면
/reload-plugins를 실행하십시오. - 턴이
minSeconds보다 짧았을 수 있습니다. - macOS 이외의 환경에서 소리가 나지 않는 것은 정상입니다.
- macOS에서 시스템 알림이 전혀 표시되지 않는다면 시스템 설정에서 터미널 앱의 알림을 허용하십시오.
- Linux에서 시스템 알림을 쓰려면 libnotify(
notify-send)를 설치하십시오.
자주 묻는 질문
- 짧은 답변 뒤에는 왜 알림이 오지 않나요?
- minSeconds(기본값 30)보다 짧은 턴은 조용히 끝납니다. 모든 턴마다 알림을 받으려면 minSeconds를 0으로 설정하십시오.
- Linux나 Windows에서는 왜 소리가 나지 않나요?
- Claude Code는 오디오 클립을 afplay로 재생하는데, afplay는 macOS에만 있습니다. 토스트는 모든 플랫폼에서 표시됩니다.
- macOS 알림 센터 알림은 어떻게 받나요?
- /config에서 systemNotification을 켜십시오. 그러면 모드가 macOS에서는 osascript를, Linux에서는 notify-send를 실행합니다. macOS가 터미널의 알림 전송을 허용할지 한 번 물어볼 수 있습니다.
- 서브에이전트도 알림을 발생시키나요?
- 아닙니다. agentId가 있는 턴은 건너뛰고, 중단된 턴도 마찬가지이므로 답변 하나당 알림 하나만 받습니다.
- 알림에 Claude의 답변을 포함할 수 있나요?
- includeAnswerPreview를 켜면 답변의 처음 80자가 추가됩니다. 이 경우 텍스트가 시스템 알림 기록에 남기 때문에 기본값은 꺼져 있습니다.
# 관련 모드

컨텍스트 미터
컨텍스트 창 사용률, 5시간·7일 요금제 사용량, 세션 비용을 상태 표시줄에 보여 주고 한도에 가까워지면 경고합니다.
- 상태 표시줄
- 토스트
- UI 변경
v2.1.291에서 테스트됨

도구 호출 카운터
Claude의 도구 호출을 턴별·세션별로 세어 스피너 옆에 표시하고, 상세 내역을 보는 /tally 명령을 추가합니다.
- 스피너
- 대화 기록
- 상태 표시줄
- 도구 호출 가로채기
- UI 변경
- 명령어/도구 추가
v2.1.291에서 테스트됨

프롬프트 위 Git 브랜치
Claude Code 프롬프트 위 한 줄 띠에 git 브랜치, 변경된 파일 수, ahead/behind 상태를 표시합니다.
- 프롬프트 위
- 명령어 실행
- 도구 호출 가로채기
- UI 변경
v2.1.291에서 테스트됨
더 보기: 토스트 및 알림, 타이머, 할 일, 스탠드업.