Bạn có thể chấp thuận permission request của Claude Code từ điện thoại vì Claude Code chạy hook PermissionRequest ngay trước khi hiển thị permission prompt, và hook đó có thể tự trả về quyết định. Một công cụ gửi request đến điện thoại, chờ bạn bấm rồi trả lại allow hoặc deny sẽ cho phép bạn trả lời từ bất cứ đâu. Claude Code Notifier làm việc này bằng một công cụ dòng lệnh nhỏ, ccn, trên Mac, Windows và Linux, cùng với app iPhone hoặc Android.
01Vì sao permission prompt làm công việc bị đình trệ
Ở permission mode mặc định, Claude Code sẽ hỏi trước khi chạy hầu hết lệnh shell, sửa file hay tải một trang web. Prompt nằm chờ trong terminal cho đến khi có người trả lời. Nếu bạn vừa đi pha cà phê, cả task dừng lại ở câu hỏi đó, và bạn chỉ biết khi quay lại.
Bạn có ba cách xử lý:
- Ít phải chấp thuận hơn. Thêm rule allow cho các lệnh bạn tin tưởng, hoặc dùng mode dễ dãi hơn. Cách này hợp với công việc thường ngày, và được trình bày trong Giải thích các permission mode của Claude Code.
- Nhận thông báo rồi quay lại bàn phím. Hook thông báo cho bạn biết có một prompt đang chờ. Nhưng bạn vẫn phải quay lại bàn phím.
- Trả lời từ xa. Hook
PermissionRequestchuyển câu hỏi tới điện thoại của bạn và gửi câu trả lời về lại Claude Code.
Hướng dẫn này nói về cách thứ ba.
02Cách hook PermissionRequest trả lời thay bạn
Claude Code kích hoạt PermissionRequest khi một tool call cần quyết định cấp quyền. Hook nhận JSON qua standard input, gồm tool_name và tool_input (ví dụ lệnh Bash), cùng danh sách tùy chọn permission_suggestions chứa các rule mà Claude Code đề xuất lưu lại.
Hook trả lời bằng cách in ra JSON như sau:
{
"hookSpecificOutput": {
"hookEventName": "PermissionRequest",
"decision": {
"behavior": "allow"
}
}
}
behavior là allow hoặc deny. Khi từ chối, bạn có thể thêm message để cho Claude biết lý do, và interrupt: true để dừng hẳn Claude. Khi chấp thuận, updatedPermissions có thể áp dụng các rule cấp quyền để bạn không bị hỏi lại. Nếu hook không trả về gì, Claude Code sẽ hiện prompt như bình thường.
Vậy một hook duyệt từ xa có ba việc: gửi yêu cầu tới nơi bạn sẽ thấy, chờ câu trả lời, và in ra JSON đúng trước khi hook hết thời gian chờ. Danh sách đầy đủ các trường và một script chạy được có trong Trả lời yêu cầu cấp quyền từ hook.
Đăng ký hook
Hook nằm trong ~/.claude/settings.json (cho mọi project) hoặc .claude/settings.json (cho một project):
{
"hooks": {
"PermissionRequest": [
{
"matcher": "*",
"hooks": [
{ "type": "command", "command": "/path/to/your-approval-script" }
]
}
]
}
}
Matcher lọc theo tên tool, nên "Bash" sẽ chỉ gửi các lệnh shell tới điện thoại. Command hook có timeout mặc định là 600 giây, đây cũng là giới hạn thời gian hook có thể chờ bạn.
03Tự làm
Bạn hoàn toàn có thể tự làm. Cách thường gặp là gửi yêu cầu tới một dịch vụ push như ntfy, kèm hai nút hành động gọi ngược về một web endpoint nhỏ, rồi cho hook poll endpoint đó cho tới khi có câu trả lời hoặc hết giờ. Xem Push notification cho Claude Code bằng ntfy cho phần gửi.
Phần tốn thời gian là các trường hợp biên:
- Khi bạn đang ngồi ở bàn phím. Nếu hook luôn chờ điện thoại, bạn không thể trả lời trong terminal trong lúc nó chờ. Một hook tốt sẽ nhận ra bạn đang có mặt và nhường lại.
- Timeout. Hook phải bỏ cuộc trước timeout của Claude Code và fallback gọn gàng.
- Bảo mật. Bất kỳ ai truy cập được callback endpoint đều có thể duyệt lệnh trên máy bạn. Endpoint cần có xác thực.
- Nhiều session. Mỗi yêu cầu phải tới đúng session và trả về đúng session đó.
Nếu bạn thích tự xây, đây là một project cuối tuần thú vị. Còn nếu muốn dùng được ngay hôm nay, một công cụ có sẵn sẽ giúp bạn đỡ công.
04Dùng Claude Code Notifier
Claude Code Notifier là công cụ độc lập do TouchTap Ltd phát triển, không do Anthropic làm ra và cũng không liên kết với Anthropic. Công cụ gồm hai phần: ccn, một công cụ dòng lệnh miễn phí cho Mac, Windows và Linux, cùng ứng dụng điện thoại cho iPhone và Android.
1. Cài đặt ccn
Trên Mac và Linux:
curl -fsSL https://claudecodenotifier.com/install.sh | sh
Trên Windows, trong PowerShell (hỗ trợ Windows đang ở bản beta):
irm https://claudecodenotifier.com/install.ps1 | iex
Cách cài qua Homebrew, npm và plugin có trên trang ccn. Khi cài, công cụ thêm bảy hook vào ~/.claude/settings.json, mỗi hook chạy ccn hook, và giữ một bản sao lưu của file. Một trong số đó là hook PermissionRequest. ccn chỉ chạy vài mili giây khi Claude Code gọi rồi thoát. Không có gì chạy nền, và nó hoạt động trong mọi terminal, kể cả terminal của IDE.
2. Ghép nối điện thoại
Chạy ccn pair rồi quét mã QR, hoặc nhập mã 6 chữ số từ ứng dụng. Hướng dẫn từng bước cho từng hệ điều hành có trong Kết nối điện thoại với Claude Code.
3. Trả lời ngay từ thông báo
Khi Claude cần cấp quyền mà bạn không ở máy, điện thoại sẽ hiện việc nó muốn làm, chẳng hạn lệnh nó muốn chạy. Bạn có thể:
- Cho phép một lần, chỉ cho lần gọi này.
- Cho phép trong session, để các yêu cầu cùng loại trong session đó không hỏi lại.
- Từ chối, và Claude tiếp tục làm việc với thông tin là yêu cầu đã bị từ chối.
Hook trả về câu trả lời của bạn và Claude tiếp tục.
Khi bạn đang ngồi ở bàn làm việc
ccn kiểm tra xem bạn có đang ở máy không. Nếu bạn gõ phím trong 30 giây gần nhất, sẽ không có gì phải chờ: terminal hỏi như bình thường và điện thoại cùng lắm chỉ nhận một thông báo. Nếu bạn vắng mặt, terminal sẽ chờ câu trả lời từ điện thoại, tối đa trong khoảng thời gian bạn đặt, và ngừng chờ ngay khi bạn chạm vào bàn phím. Nhờ vậy bạn luôn có thể trả lời ở nơi nào gần hơn.
Giới hạn thời gian chờ là một setting:
ccn config set hold_ceiling_seconds 900
Giá trị từ 30 đến 3600 giây, mặc định 600. presence_threshold_seconds thay đổi khoảng 30 giây nói trên. Hầu hết setting cũng có thể chỉnh riêng cho từng máy từ ứng dụng điện thoại.
Kiểm tra hoạt động
ccn doctor # checks hooks, credentials, server connection and presence detection
ccn test # sends a test notification
Ứng dụng điện thoại tải về miễn phí, nhưng cần gói đăng ký hoặc mua trọn đời để sử dụng. Xem bảng giá. Không có điện thoại, ccn vẫn hiện thông báo desktop miễn phí trên máy tính khi Claude cần cấp quyền.
05Và bớt phải duyệt hơn
Phê duyệt từ xa hiệu quả nhất khi đi kèm các allow rule hợp lý. Nếu ngày nào bạn cũng phải phê duyệt npm test hai mươi lần, hãy thêm một rule như Bash(npm test *) vào permissions.allow và chỉ dùng điện thoại cho những yêu cầu thật sự cần xem xét. Trước khi phê duyệt trên màn hình nhỏ, hãy đọc kỹ lệnh. Bài Phê duyệt thao tác của Claude Code từ điện thoại có an toàn không? sẽ chỉ bạn cần kiểm tra những gì.
06Câu hỏi thường gặp
Claude Code có thể xin quyền trên điện thoại của tôi mà không cần công cụ nào khác không?
Tính năng Remote Control của Anthropic cho phép bạn tiếp tục một session cục bộ từ app Claude hoặc claude.ai/code với các gói được hỗ trợ, kể cả trả lời prompt. Công cụ dựa trên hook như Claude Code Notifier hoạt động khác: không cần bật Remote Control và chỉ gửi những lúc thật sự cần đến bạn. Bài Dùng Claude Code từ điện thoại so sánh hai cách này.
Chuyện gì xảy ra nếu tôi không trả lời trên điện thoại?
Với ccn, hook sẽ chờ tối đa theo thiết lập hold_ceiling_seconds của bạn. Nếu bạn quay lại và chạm bàn phím trước, hook sẽ ngừng chờ và bạn trả lời prompt ngay trong terminal.
"Allow for the session" có thay đổi settings.json của tôi không?
Không. Nó chỉ áp dụng cho session đó. Để cho phép vĩnh viễn, hãy thêm allow rule trong /permissions hoặc trong file settings.
Có dùng được trên Windows và Linux không?
Có. ccn chạy trên Mac, Windows và Linux, và app điện thoại hoạt động với cả ba. Hỗ trợ Windows đang ở bản beta.
Tôi có thể dùng với nhiều máy tính không?
Có. Một điện thoại có thể ghép nối với nhiều máy tính, và một máy tính có thể có nhiều điện thoại. ccn devices dùng để liệt kê hoặc thu hồi các điện thoại đã ghép nối.