Mặc định Claude Code không hiện thông báo desktop trong Windows Terminal, PowerShell hay terminal của VS Code, nên trên Windows bạn phải tự thêm. Đặt một hook Notification (và một hook Stop cho trường hợp "đã xong") vào %USERPROFILE%\.claude\settings.json để chạy PowerShell: hộp thoại message box dùng được mà không cần cài gì, còn module BurntToast cho toast đúng nghĩa. Nếu Claude Code chạy trong WSL, hook sẽ chạy trong Linux, nên nó phải gọi powershell.exe qua interop của Windows để tới được desktop Windows.
01Windows native hay WSL: hook của bạn chạy ở đâu
Claude Code chạy native trên Windows hoặc bên trong WSL, và điều này quyết định cách hook thông báo hoạt động.
- Windows native. Cấu hình nằm ở
%USERPROFILE%\.claude\settings.json. Theo tài liệu tham khảo hooks của Anthropic, command hook mặc định chạy trong Git Bash, hoặc trong PowerShell nếu chưa cài Git Bash. Bạn có thể ép một hook chạy bằng PowerShell với"shell": "powershell"; khi đó Claude Code dùngpwsh.exe(PowerShell 7) nếu tìm thấy, nếu không thì dùngpowershell.exe(Windows PowerShell 5.1). - WSL. Bạn cài và chạy
claudetrong terminal WSL, nên file cấu hình là file của Linux,~/.claude/settings.jsontrong distro của bạn, và hook chạy trong shell Linux.notify-sendở đó thường không tới được desktop Windows. Thay vào đó hãy gọi chương trình Windows.
02Thử nhanh: terminal bell
Cách báo hiệu đơn giản nhất là bell. Thêm đoạn này vào file cấu hình:
{
"preferredNotifChannel": "terminal_bell"
}
Khi đó Claude Code sẽ gửi ký tự bell khi xong việc hoặc đang chờ bạn. Trong Windows Terminal, bell làm gì được đặt theo từng profile bằng bellStyle trong settings.json của nó. "bellStyle": ["window", "taskbar"] sẽ nháy cửa sổ và nút trên taskbar thay vì phát âm thanh. Hướng dẫn terminal bell có thêm chi tiết. Cách này chỉ hữu ích khi terminal đang trong tầm mắt.
03Notification hook với PowerShell
Đây là ví dụ cho Windows từ hướng dẫn hooks của Anthropic. Không cần cài gì thêm:
{
"hooks": {
"Notification": [
{
"matcher": "",
"hooks": [
{
"type": "command",
"command": "powershell.exe -Command \"[System.Reflection.Assembly]::LoadWithPartialName('System.Windows.Forms'); [System.Windows.Forms.MessageBox]::Show('Claude Code needs your attention', 'Claude Code')\""
}
]
}
]
}
}
Nó mở một hộp thoại chứ không phải toast ở góc màn hình, và hộp thoại có thể bị khuất sau terminal. Hãy thử lệnh trong PowerShell trước. Gõ /hooks trong Claude Code để kiểm tra hook đã được nạp.
Matcher rỗng sẽ kích hoạt với mọi loại thông báo, kể cả permission_prompt (một yêu cầu duyệt đã chờ khoảng sáu giây) và idle_prompt (Claude đã xong khoảng 60 giây trước). Hướng dẫn Notification hook giải thích về thời điểm kích hoạt.
04Toast thật sự với BurntToast
BurntToast là module PowerShell phổ biến do cộng đồng duy trì, dùng để tạo toast notification trên Windows. Cài một lần cho user của bạn:
Install-Module -Name BurntToast -Scope CurrentUser
Rồi kiểm tra xem nó chạy được không:
New-BurntToastNotification -Text 'Claude Code', 'Claude needs your attention'
Dùng nó trong hook. Phiên bản này khởi động PowerShell không kèm profile và bỏ qua execution policy cho riêng lần gọi này, nên chạy giống nhau dù từ Git Bash hay PowerShell:
{
"hooks": {
"Notification": [
{
"matcher": "",
"hooks": [
{
"type": "command",
"command": "powershell.exe -NoProfile -ExecutionPolicy Bypass -Command \"New-BurntToastNotification -Text 'Claude Code', 'Claude needs your attention'\""
}
]
}
],
"Stop": [
{
"hooks": [
{
"type": "command",
"command": "powershell.exe -NoProfile -ExecutionPolicy Bypass -Command \"New-BurntToastNotification -Text 'Claude Code', 'Claude has finished'\"",
"async": true
}
]
}
]
}
}
Hook Stop chạy ở cuối mỗi lượt, nên bạn biết ngay khi task xong thay vì một phút sau; xem hướng dẫn Stop hook. "async": true chạy hook ở background để PowerShell khởi động chậm không làm Claude Code phải chờ.
Nếu toast không bao giờ xuất hiện, hãy kiểm tra Settings > System > Notifications: thông báo phải được bật và Do Not Disturb phải tắt. Toast của BurntToast thường hiện ở đó dưới tên Windows PowerShell, mục này cũng cần được cho phép thông báo.
05Từ WSL: gọi Windows qua interop
Trong WSL, hook chạy trong Linux, nhưng WSL có thể khởi động chương trình Windows bằng tên .exe của chúng. Hướng dẫn của Anthropic lưu ý rằng powershell.exe phải có trong PATH thông qua interop của Windows. Đây là mặc định, được điều khiển bởi appendWindowsPath trong mục [interop] của /etc/wsl.conf. Kiểm tra từ shell WSL:
command -v powershell.exe
Khi đã cài BurntToast phía Windows, hook trong ~/.claude/settings.json của WSL vẫn là lệnh đó:
{
"hooks": {
"Stop": [
{
"hooks": [
{
"type": "command",
"command": "powershell.exe -NoProfile -ExecutionPolicy Bypass -Command \"New-BurntToastNotification -Text 'Claude Code', 'Claude has finished'\"",
"async": true
}
]
}
]
}
}
Khởi động Windows PowerShell từ WSL có thể mất một giây hoặc hơn, thêm một lý do để dùng "async": true.
06Claude Code Notifier nằm ở đâu trong bức tranh này
Các hook trên ổn nếu bạn ngồi tại bàn. Khi bạn rời đi thì chúng vô dụng, và toast không thể duyệt lệnh cho Claude.
Claude Code Notifier là công cụ độc lập (do TouchTap làm, không phải Anthropic) xây dựng trên hooks của Claude Code. Công cụ dòng lệnh miễn phí của nó, ccn, chạy trên Mac, Windows và Linux; bản Windows đang ở giai đoạn beta. Trên Windows native, cài từ PowerShell:
irm https://claudecodenotifier.com/install.ps1 | iex
Nó thêm các mục hook vào cấu hình Claude Code của bạn, giữ nguyên phần còn lại của file và tạo bản sao lưu. Ngay lập tức nó hiện toast Windows khi Claude xong việc, cần quyền hoặc đặt câu hỏi, không cần điện thoại hay mạng. Vì nó hook vào Claude Code chứ không phải vào terminal, nó chạy giống nhau trong Windows Terminal, PowerShell và terminal của IDE.
Nếu Claude Code chạy trong WSL, hãy cài ccn bên trong WSL bằng lệnh cho Linux, vì đó là nơi Claude Code và cấu hình của nó nằm:
curl -fsSL https://claudecodenotifier.com/install.sh | sh
Sau đó chạy ccn test. Thông báo desktop từ trong WSL có tới được desktop Windows hay không tùy vào thiết lập WSL của bạn, nên với WSL thì điện thoại là cách đáng tin cậy. Khi đã ghép nối điện thoại, sự kiện sẽ đến dưới dạng push notification, và bạn có thể cho phép một lần, cho phép cả phiên hoặc từ chối quyền, trả lời câu hỏi của Claude và gửi chỉ dẫn tiếp theo ngay từ điện thoại. Xem ghép nối điện thoại, trang ccn và bảng giá của ứng dụng điện thoại.
Nếu cài ccn, hãy gỡ các hook toast bạn tự thêm để tránh bị thông báo trùng.
07Câu hỏi thường gặp
Vì sao hook PowerShell của tôi không hoạt động trên Windows?
Trước tiên, hãy chạy đúng lệnh đó trong PowerShell. Nếu chạy được, hãy kiểm tra xem /hooks có liệt kê hook đó không và JSON đã escape đúng chưa (mỗi dấu " bên trong đều cần dấu gạch chéo ngược). Với BurntToast, hãy chắc chắn module được cài cho đúng user đang chạy Claude Code, và chế độ Do Not Disturb đang tắt.
Claude Code trên Windows có cần Git Bash để chạy hook không?
Không. Hook chạy trong Git Bash nếu đã cài Git for Windows, còn không thì chạy trong PowerShell. Bạn cũng có thể đặt "shell": "powershell" cho từng hook riêng.
notify-send có hoạt động trong WSL không?
Thường là không hiện lên desktop Windows. Cách chắc chắn nhất là gọi powershell.exe từ hook thông qua interop của WSL, như ví dụ ở trên.
Windows Terminal có tự hiển thị thông báo của Claude Code không?
Mặc định thì không. Hãy đặt preferredNotifChannel thành terminal_bell và chọn một bellStyle làm nháy cửa sổ hoặc taskbar, hoặc dùng hook để hiện toast.
Có cách miễn phí để nhận thông báo trên Windows không?
Có. Cả các hook PowerShell ở trên lẫn thông báo desktop của ccn đều miễn phí. Chỉ có app điện thoại là cần đăng ký hoặc mua trọn đời.