Terminal trong IDE như VS Code, Cursor và JetBrains mặc định không nhận thông báo desktop từ Claude Code, vì Claude Code chỉ gửi thông báo này tới iTerm2, Ghostty và Kitty. Để nhận alert, bạn có thể đặt "preferredNotifChannel": "terminal_bell" và để IDE xử lý bell, hoặc thêm một hook Notification vào ~/.claude/settings.json để hiển thị thông báo desktop hay gửi push. Hook chạy được cả trong terminal tích hợp lẫn trong chat panel của extension VS Code, vì cả hai đều đọc cùng một file settings.
01Vì sao IDE im lặng
Alert tích hợp sẵn của Claude Code phụ thuộc vào terminal mà nó chạy. Với thiết lập mặc định, nó chỉ hiện thông báo desktop trong iTerm2, Ghostty và Kitty, và tài liệu về terminal của Anthropic nêu rõ terminal tích hợp của VS Code là một trong những terminal không nhận được gì. Terminal của JetBrains cũng tương tự. Hướng dẫn terminal bell giải thích mọi giá trị của preferredNotifChannel.
Có hai cách chạy Claude Code trong VS Code và Cursor, và sự khác biệt này rất quan trọng:
claude trong terminal tích hợp~/.claude/settings.json~/.claude/settings.json (cùng một file)Các IDE của JetBrains (IntelliJ IDEA, PyCharm, WebStorm, GoLand, Android Studio và các IDE khác) hoạt động giống cột bên phải: plugin Claude Code chạy claude trong terminal tích hợp của IDE và kết nối với nó.
02Cách 1: terminal bell
Nếu claude chạy trong terminal tích hợp, hãy thêm đoạn này vào ~/.claude/settings.json:
{
"preferredNotifChannel": "terminal_bell"
}
Khi đó Claude Code sẽ phát ký tự bell mỗi khi cần bạn. Chuyện gì xảy ra tiếp theo là do IDE quyết định. VS Code và Cursor xử lý terminal bell qua cài đặt accessibility signal; hãy tìm "terminal bell" trong Settings để chọn âm thanh. Với IDE của JetBrains, hãy xem phần cài đặt terminal tương ứng với phiên bản IDE của bạn. Tiếng bell rất dễ bị bỏ lỡ khi bạn không đeo tai nghe hoặc IDE đang chạy nền, nên đa số mọi người chuyển sang cách 2.
03Cách 2: một Notification hook
Hook chạy một lệnh do bạn chọn và hoạt động trong mọi IDE, cả trong terminal lẫn panel chat của VS Code. Hook dưới đây hiển thị thông báo desktop trên macOS:
{
"hooks": {
"Notification": [
{
"matcher": "",
"hooks": [
{
"type": "command",
"command": "osascript -e 'display notification \"Claude Code needs your attention\" with title \"Claude Code\"'"
}
]
}
]
}
}
Trên Linux hãy dùng notify-send 'Claude Code' 'Claude Code needs your attention', còn trên Windows thì dùng một lệnh PowerShell; hướng dẫn cho Linux và hướng dẫn cho Windows có các phiên bản đã được kiểm thử. Nếu osascript không hiện gì trên macOS, hãy mở System Settings > Notifications và cho phép thông báo từ Script Editor, vì đó là app gửi thông báo của osascript.
Trong extension VS Code, bạn có thể xem lại các hook mà không cần mở file: mở mục Customize và chọn Hooks để xem các hook đã được nạp trong phiên, nhóm theo event (Claude Code v2.1.269 trở lên).
Nếu muốn được báo ngay khi Claude làm xong, chứ không phải khi nó đang chờ, hãy thêm cả hook Stop. Hướng dẫn nhận thông báo khi Claude làm xong có ví dụ kết hợp cả hai.
Thời điểm kích hoạt khác nhau trong extension VS Code
Trong terminal, thông báo permission_prompt sẽ chờ đến khi prompt không có phím nào được gõ trong khoảng sáu giây, và mỗi lần bạn gõ phím là nó bị lùi lại. Trong extension VS Code (và Claude Desktop), tài liệu của Anthropic cho biết thông báo kích hoạt khoảng sáu giây sau khi Claude hỏi, không bị lùi lại khi bạn gõ, và sẽ không kích hoạt nếu bạn trả lời sớm hơn. Nếu thấy phiền khi đang làm việc trong panel, hãy đặt biến môi trường CLAUDE_CODE_DISABLE_PERMISSION_PROMPT_NOTIFY_HOOKS=1 để tắt nó ở đó. Hướng dẫn về Notification hook liệt kê mọi loại thông báo và thời điểm chúng kích hoạt.
04Cửa sổ remote: SSH, WSL, dev container và JetBrains Remote Development
Đây là chỗ thông báo trong IDE hay gặp trục trặc nhất. Khi cửa sổ VS Code hoặc Cursor kết nối tới một SSH host, WSL hay dev container, Claude Code sẽ chạy trên hệ thống đó và đọc ~/.claude/settings.json ở đó, chứ không phải trên laptop của bạn. Hook của bạn cũng chạy ở đó. Khi ấy các lệnh desktop như osascript hay notify-send không có desktop nào để hiển thị và thất bại mà không báo lỗi.
JetBrains Remote Development cũng tương tự: plugin Claude Code phải được cài trên remote host, và Claude Code chạy ở đó.
Thay vào đó, có thể dùng:
- WSL trên Windows: hook có thể gọi
powershell.exequa cơ chế interop của Windows, miễn là nó nằm trongPATHbên trong WSL. - SSH host và container: gửi cảnh báo qua mạng tới một dịch vụ có thể báo cho bạn, chẳng hạn ntfy hoặc webhook Telegram, Slack hay Discord. Hướng dẫn SSH trình bày các lựa chọn.
05Dùng terminal bên ngoài với /ide
Nếu muốn có thông báo desktop tích hợp sẵn, hãy chạy Claude Code trong iTerm2, Ghostty hoặc Kitty rồi kết nối nó với IDE bằng lệnh /ide. Bạn vẫn xem diff và chia sẻ vùng chọn qua IDE được, còn cảnh báo sẽ đến từ terminal bên ngoài. Với iTerm2, bạn cần bật cài đặt alert của nó trước, như mô tả trong hướng dẫn terminal bell.
06Một vài điều khác nên biết
- Shift+Enter: trong VS Code và Cursor, hãy chạy
/terminal-setupmột lần để Shift+Enter chèn dòng mới. Terminal của JetBrains không hỗ trợ tổ hợp này; hãy dùng Ctrl+J, hoặc gõ\rồi Enter. - Remote Control: bạn có thể khởi động Remote Control của Anthropic từ extension VS Code bằng
/remote-controlđể theo dõi phiên trên app di động Claude. Tính năng này có yêu cầu riêng về gói dịch vụ và đăng nhập; xem bài so sánh. - Nhiều cửa sổ: nếu bạn chạy Claude Code trong nhiều cửa sổ IDE, hãy đưa tên thư mục dự án vào cảnh báo để biết cửa sổ nào đang cần bạn. Input của hook có chứa
cwd. Xem chạy nhiều phiên.
07Claude Code Notifier nằm ở đâu trong bức tranh này
Một hook Notification dùng công cụ thông báo của hệ điều hành là giải pháp tốt và miễn phí nếu bạn đang ngồi trước IDE. Nhưng nó không giúp gì khi bạn rời màn hình, và cũng không cho phép bạn trả lời.
ccn của Claude Code Notifier cũng là một hook, nên nó hoạt động trong terminal của IDE giống như mọi terminal khác, trên Mac, Windows và Linux. Khi cài riêng, nó hiển thị thông báo desktop lúc Claude làm xong, cần cấp quyền hoặc đặt câu hỏi. Khi đã ghép nối điện thoại, bạn có thể cho phép một lần, cho phép trong cả phiên hoặc từ chối yêu cầu cấp quyền, chọn câu trả lời cho câu hỏi của Claude, và gửi chỉ dẫn tiếp theo ngay từ điện thoại. Nếu bạn vừa gõ phím trong 30 giây gần nhất, terminal sẽ hỏi như bình thường và không có gì phải chờ trên điện thoại. Push đến điện thoại đi qua relay chứ không qua desktop cục bộ, nên nếu bạn cài ccn trên máy remote mà cửa sổ IDE đang kết nối, điện thoại vẫn nhận được thông báo. Claude Code Notifier là sản phẩm độc lập, không do Anthropic phát triển. Xem trang ccn và cách ghép nối điện thoại.
08Câu hỏi thường gặp
Vì sao Claude Code không gửi thông báo cho tôi trong VS Code?
Terminal tích hợp của VS Code không nhận được thông báo desktop tích hợp sẵn của Claude Code. Hãy đặt "preferredNotifChannel": "terminal_bell" hoặc thêm một hook Notification vào ~/.claude/settings.json, rồi bắt đầu một phiên mới.
Hook có hoạt động trong extension Claude Code cho VS Code không?
Có. Claude Code kích hoạt cùng các hook event trong extension IDE như trong terminal, và extension với CLI dùng chung ~/.claude/settings.json. Mục Customize của extension cho phép xem và chỉnh sửa các hook.
Cách này có dùng được trong Cursor không?
Có. Cursor cài được cùng extension Claude Code, và claude chạy trong terminal tích hợp của nó giống như trong VS Code. Mọi điều ở trên đều áp dụng.
Hook của tôi chạy được trên máy local nhưng không chạy trong cửa sổ Remote SSH. Tại sao?
Trong cửa sổ remote, Claude Code và các hook của nó chạy trên máy remote, vốn không có desktop. Hãy sửa ~/.claude/settings.json trên máy đó và dùng push qua mạng như ntfy thay cho lệnh thông báo desktop.