Phê duyệt hành động của Claude Code từ điện thoại khá an toàn nếu thiết lập đủ chặt: chỉ điện thoại bạn đã ghép nối mới trả lời được, điện thoại chỉ trả lời được những prompt mà Claude Code vốn sẽ hiện cho bạn, và deny rule của bạn vẫn có hiệu lực bất kể điện thoại trả lời gì. Rủi ro thực sự đến từ con người và thực tế: phê duyệt một lệnh chưa đọc kỹ trên màn hình nhỏ, người khác cầm điện thoại đã mở khóa của bạn, và thông tin dự án đi qua dịch vụ relay rồi hiện trên màn hình khóa. Một công cụ phê duyệt từ xa được làm tốt sẽ hạn chế nhóm rủi ro đầu; nhóm thứ hai bạn tự kiểm soát bằng vài thiết lập.
01Phê duyệt từ xa hoạt động thế nào
Claude Code có một hook event tên PermissionRequest. Nó chạy khi Claude Code sắp xin bạn quyền dùng một tool. Hook có thể trả về quyết định, allow hoặc deny, và Claude Code sẽ dùng quyết định đó thay vì chờ bạn trả lời trong terminal. Các công cụ phê duyệt từ xa dùng hook này: hook gửi yêu cầu tới điện thoại, chờ, rồi trả về câu trả lời của bạn. Hướng dẫn PermissionRequest có ví dụ JSON.
Ba đặc điểm của thiết kế này quan trọng cho bảo mật. Tất cả đều lấy từ tài liệu hook của Anthropic:
- Chỉ kích hoạt khi lẽ ra sẽ có prompt. Nếu permission mode hoặc allow rule đã cho phép một hành động, sẽ không có yêu cầu nào. Phê duyệt từ xa không thể cho Claude nhiều quyền hơn so với khi bạn ngồi tại bàn phím.
- Deny rule vẫn được ưu tiên. Hook trả về
allowkhông vượt qua được deny rule trong thiết lập của bạn. Nếu bạn denyRead(./.env), một cú chạm trên điện thoại không thể cho Claude đọc file đó. - Hook chạy dưới quyền của bạn. Command hook chạy với toàn bộ quyền người dùng của bạn. Chương trình nào bạn cài làm hook cũng có thể đọc và thay đổi mọi thứ tài khoản của bạn truy cập được. Vì vậy việc chọn công cụ cũng là một phần của bảo mật, không chỉ riêng điện thoại.
02Các rủi ro và cách hạn chế từng loại
Người khác trả lời thay bạn
Trường hợp tệ nhất là một người hoặc thiết bị ngoài ý muốn phê duyệt một hành động. Những gì hạn chế điều này:
- Ghép nối. Điện thoại chỉ trả lời được cho máy tính đã ghép nối với nó. Với Claude Code Notifier, việc ghép nối dùng mã QR hoặc mã 6 chữ số có hiệu lực 24 giờ, và mỗi máy tính có tối đa ba điện thoại.
- Thu hồi.
ccn devicesliệt kê các điện thoại đã ghép nối với một máy tính, vàccn devices revoke <name>gỡ một điện thoại.ccn forgetxóa máy tính cùng các ghép nối của nó khỏi server. - Khóa điện thoại. Bất kỳ ai cầm điện thoại đã mở khóa của bạn đều có thể trả lời. Hãy coi điện thoại như chìa khóa vào các session Claude Code trên máy tính, và dùng mật mã hoặc khóa sinh trắc học.
Bạn phê duyệt thứ mình chưa đọc
Trên điện thoại, một lệnh shell dài rất dễ bị đọc lướt. Vài thói quen giúp ích:
- Đọc hết lệnh trước khi bấm allow. Nếu nó không rõ ràng là ổn, hãy deny và xem lại trong terminal sau.
- Với mọi thao tác làm thay đổi trạng thái bên ngoài project, như
git push, deploy hay cài package, hãy ưu tiên cho phép một lần thay vì cho phép trong cả phiên. - Đặt các lệnh rủi ro sau rule
askvà các secret sau ruledenytrong settings, để những trường hợp nguy hiểm được quyết định bởi rule bạn viết lúc bình tĩnh, chứ không phải bởi một cú chạm vội trong hàng đợi. Hướng dẫn về các chế độ permission có trình bày cú pháp.
Bạn thực sự đang ngồi trước bàn phím
Nếu một yêu cầu được gửi tới điện thoại trong khi bạn đang ngồi trước máy tính, sẽ có hai nơi (bạn và điện thoại) cùng trả lời một prompt. Claude Code Notifier kiểm tra xem bạn có đang dùng máy tính không: nếu bạn gõ phím trong 30 giây gần nhất, sẽ không có gì chờ điện thoại và terminal hỏi như bình thường. 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 chọn, và ngừng chờ ngay khi bạn chạm vào bàn phím. Việc kiểm tra trạng thái rảnh diễn ra trên máy tính và kết quả không bao giờ được gửi đi.
Thông tin project rời khỏi máy tính của bạn
Để hiển thị yêu cầu cho bạn, phải có thứ gì đó gửi thông tin chi tiết tới điện thoại. Đó là sự đánh đổi về quyền riêng tư của mọi kiểu thông báo điện thoại cho Claude Code, dù bạn tự làm hay không. Với Claude Code Notifier, theo Chính sách quyền riêng tư:
- Không có tài khoản. Mỗi máy tính và điện thoại được nhận diện bằng một ID ngẫu nhiên.
- Nội dung một thông báo có thể chứa: tên và đường dẫn thư mục của project, tin nhắn của Claude hoặc câu hỏi nó đang đặt ra, phần đầu prompt của bạn, và với permission prompt thì có thêm tên tool cùng bản tóm tắt input, như lệnh shell hoặc đường dẫn file (tối đa 200 ký tự).
- Dữ liệu đi đâu: qua relay server của TouchTap chạy trên Cloudflare, và một phiên bản rút gọn tới Apple hoặc Google để gửi push. Đường dẫn thư mục project không được gửi tới Apple hay Google.
- Lưu trong bao lâu: server xoá thông báo, cùng các câu trả lời của bạn, trong vòng 48 giờ. Relay server không lưu địa chỉ IP của bạn.
- Khi truyền tải: mọi giao tiếp với server đều dùng TLS (HTTPS và WSS). Relay giữ nội dung thông báo để chuyển phát, nên đây là mã hoá khi truyền tải, không phải mã hoá đầu cuối.
- Không bán dữ liệu: dữ liệu không bị bán hay dùng cho quảng cáo.
Trên máy tính, credential của ccn là một token ngẫu nhiên. Mặc định nó được lưu trong macOS Keychain hoặc Windows Credential Manager, còn trên Linux thì trong một file chỉ tài khoản người dùng của bạn đọc được; ccn config set credential_store giúp chuyển đổi giữa keychain hệ thống và file.
Nếu bạn làm việc với code bảo mật, chính sách khuyên bạn nên cân nhắc liệu thông báo điện thoại có phù hợp không, và nên bật loại nào cho từng máy tính. Bạn có thể tắt riêng notify_on_done, notify_on_permission hoặc notify_on_question cho từng máy tính, từ command line hoặc từ app điện thoại.
Màn hình khoá hiển thị quá nhiều
Một banner chứa lệnh hoặc tên project của khách hàng có thể bị bất kỳ ai liếc qua điện thoại nhìn thấy. Cả iPhone và Android đều cho phép ẩn bản xem trước thông báo cho tới khi mở khoá, cho tất cả app hoặc từng app. Trên iPhone, tuỳ chọn này nằm trong Cài đặt, rồi Thông báo. Trên Android, nó nằm trong phần cài đặt thông báo trên màn hình khoá, thường là tuỳ chọn ẩn nội dung nhạy cảm.
03Tự làm tính năng phê duyệt từ xa
Bạn có thể tự xây dựng phê duyệt từ xa bằng một hook PermissionRequest kết hợp chat bot hoặc dịch vụ push. Khi đó bạn đang xây một hệ thống xác thực: chỉ mình bạn được trả lời, câu trả lời cũ không được áp dụng cho yêu cầu mới, và một yêu cầu bị treo không được làm kẹt phiên làm việc. Trên một push server công cộng dùng chung, tên topic là thứ duy nhất ngăn người lạ, nên hãy coi nó như mật khẩu. Các hướng dẫn về ntfy và Telegram, Slack hoặc Discord trình bày các cách thiết lập chỉ gửi thông báo, ít rủi ro hơn nhiều vì chúng không thể phê duyệt gì cả.
04Hook từ những repository không do bạn viết
Còn một rủi ro nữa áp dụng cho mọi hook, không chỉ hook phê duyệt. Hook có thể được commit trong file .claude/settings.json của project. Trong phiên tương tác, Claude Code tạm giữ các hook cho tới khi bạn chấp nhận hộp thoại workspace trust cho thư mục đó, vì vậy hãy đọc các file .claude/ của repository trước khi tin tưởng nó. Với claude -p và khi chạy qua SDK, không có hộp thoại nào và thư mục được coi là đáng tin, nên các hook đã commit sẽ chạy. Khi chạy script trên code không do bạn viết, hãy truyền --settings '{"disableAllHooks": true}'.
05Claude Code Notifier nằm ở đâu trong bức tranh này
Claude Code Notifier là công cụ độc lập do TouchTap Ltd phát triển, không do Anthropic tạo ra, xác nhận hay tài trợ. Công cụ command line của nó, ccn, chạy dưới dạng hook của Claude Code trên Mac, Windows và Linux, còn app iPhone và Android cho phép bạn cho phép một lần, cho phép trong cả phiên, hoặc từ chối. ccn công khai mã nguồn trên GitHub, nên bạn có thể đọc chính xác những gì sẽ chạy làm hook trước khi cài đặt. Hướng dẫn phê duyệt từ điện thoại trình bày cách thiết lập.
06Câu hỏi thường gặp
Phê duyệt từ điện thoại có ghi đè được rule deny của tôi không?
Không. Claude Code luôn áp dụng rule deny bất kể hook trả về gì. Phê duyệt từ xa chỉ có thể trả lời một prompt mà Claude Code vốn đã định hiển thị.
Claude Code Notifier có mã hoá đầu cuối không?
Không. Lưu lượng tới và từ relay server dùng TLS, và server xoá thông báo cùng câu trả lời trong vòng 48 giờ. Relay giữ nội dung trong lúc chuyển phát, và một phiên bản rút gọn được gửi tới Apple hoặc Google để push.
Nếu tôi làm mất điện thoại thì sao?
Trên mỗi máy tính, chạy ccn devices để xem danh sách điện thoại đã ghép nối và ccn devices revoke <name> để gỡ chiếc bị mất. Trước khi làm vậy, chỉ có khoá màn hình của điện thoại ngăn người khác trả lời.
Code của tôi có rời khỏi máy tính không?
ccn không upload file của bạn. Thông báo chỉ mang những thông tin cần để hiển thị yêu cầu: tên và thư mục project, tin nhắn hoặc câu hỏi của Claude, phần đầu prompt của bạn, và bản tóm tắt ngắn về lệnh hoặc file liên quan. Tin nhắn của Claude có thể trích dẫn code, nên với các project nhạy cảm, hãy tắt những loại thông báo bạn không cần.