VPS

Hooks trong Claude Code: chặn lệnh nguy hiểm

Thanh Nguyễn Đăng 10 phút đọc 3 khối lệnh

Hooks trong Claude Code: chặn lệnh nguy hiểm
Mục lục bài viết
  1. Vì sao luật không đủ
  2. Ba nhóm hook đáng làm
  3. Viết một hook chặn lệnh nguy hiểm
  4. Hook tự chạy kiểm tra sau khi sửa file
  5. Hook và quyền, hai lớp bổ sung nhau
  6. Vì sao luật không đủ, và điểm móc bổ sung chỗ nào
  7. Ba nhóm điểm móc đáng làm
  8. Danh sách lệnh nên chặn
  9. Lớp bảo vệ quan trọng nhất: phân quyền
  10. Câu hỏi thường gặp
  11. Bài viết liên quan

Trả lời nhanh: Hook là script của bạn được gọi tự động quanh mỗi thao tác của agent: trước khi nó chạy một công cụ, sau khi chạy xong, hoặc khi phiên bắt đầu. Khác biệt cốt lõi so với việc ghi luật trong file quy ước: luật là lời khuyên, hook là hàng rào. Luật thì mô hình có thể quên trong một phiên dài, còn hook thì chạy bằng máy nên luôn đúng. Dùng cho ba việc: chặn lệnh nguy hiểm, tự động chạy kiểm tra sau khi sửa file, và ghi nhật ký thay đổi.

Có một loại lo lắng chung của người mới giao quyền cho agent: lỡ nó chạy một lệnh xóa nhầm thư mục thì sao. Đặt luật cấm trong file quy ước giúp giảm rủi ro nhưng không loại bỏ, vì luật vẫn là chữ và mô hình vẫn có thể lơ đãng. Hook giải quyết dứt điểm chuyện đó bằng cách đặt một cửa kiểm soát chạy bằng mã, không phụ thuộc vào việc mô hình nhớ hay quên.

Vì sao luật không đủ

File quy ước dự án, như mô tả ở bài CLAUDE.md, là nơi tốt để ghi nguyên tắc. Nhưng nó có hai điểm yếu cố hữu: nội dung phải cạnh tranh sự chú ý với mọi thứ khác trong ngữ cảnh, và mô hình vẫn là mô hình xác suất chứ không phải cỗ máy tuân lệnh tuyệt đối.

Với những việc mà sai một lần là hỏng thật, ví dụ xóa thư mục, đẩy code lên nhánh chính, hay chạy lệnh thay đổi database sản xuất, bạn cần thứ mạnh hơn lời nhắc. Hook là thứ đó: nó là mã của bạn, chạy trước khi thao tác diễn ra, và nếu bạn bảo dừng thì thao tác không xảy ra.

Cách nghĩ đúng về phân vai: luật hướng dẫn cách làm cho tốt, hook chặn những việc tuyệt đối không được xảy ra. Đừng đưa mọi thứ vào hook vì như vậy agent sẽ liên tục bị chặn và bạn mất luôn lợi ích của việc dùng agent.

Ba nhóm hook đáng làm

Chặn trước khi chạy. Hook nhận thông tin về thao tác agent sắp thực hiện, xem xét rồi quyết định cho qua hay chặn. Đây là nhóm giá trị nhất.

Chạy sau khi xong. Sau mỗi lần agent sửa file, tự chạy công cụ định dạng và kiểm tra kiểu. Nhờ vậy code luôn đúng quy ước mà bạn không phải nhắc, và agent nhận được lỗi ngay để tự sửa.

Khi phiên bắt đầu. Nạp thông tin bối cảnh mà agent nên biết, ví dụ nhánh hiện tại, trạng thái môi trường, hoặc danh sách việc đang dở.

Nhóm thứ hai thường mang lại cảm giác dễ chịu nhất trong ngày làm việc, vì nó cắt hẳn vòng lặp nhắc đi nhắc lại chuyện định dạng code.

Viết một hook chặn lệnh nguy hiểm

Ý tưởng: đọc lệnh mà agent định chạy, so với danh sách mẫu nguy hiểm, thấy trùng thì báo lỗi để chặn lại.

TerminalViết một hook chặn lệnh nguy hiểmbash
#!/usr/bin/env bash# Doc thao tac agent sap chay tu dau vao chuan roi quyet dinh cho qua hay chanlenh=$(cat) mau_nguy_hiem=(  'rm -rf /'  'rm -rf ~'  'git push --force'  'DROP TABLE'  'mkfs') for mau in "${mau_nguy_hiem[@]}"; do  if [[ "$lenh" == *"$mau"* ]]; then    echo "Hook chan: lenh chua mau nguy hiem '$mau'" >&2    exit 2   # ma thoat bao loi de dung thao tac lai  fidoneexit 0

Hai chi tiết quyết định hook có tác dụng hay không. Thứ nhất, thông báo phải viết ra luồng lỗi chuẩn để agent đọc được lý do bị chặn và tự tìm cách khác. Thứ hai, mã thoát phải là mã báo lỗi, thoát bằng 0 nghĩa là cho qua dù bạn có in ra cảnh báo gì đi nữa.

Danh sách mẫu nên ngắn và nhắm đúng thứ hủy hoại được. Nhồi vào đó mọi lệnh trông đáng ngờ sẽ khiến agent bị chặn liên tục ở những việc vô hại.

Hook tự chạy kiểm tra sau khi sửa file

TerminalHook tự chạy kiểm tra sau khi sửa filebash
#!/usr/bin/env bash# Sau moi lan agent sua file, chay dinh dang va kiem tra kieuset -ecd "$(git rev-parse --show-toplevel)" if [ -f package.json ]; then  npx prettier --write . >/dev/null 2>&1 || true  npx tsc --noEmit || {    echo "Kiem tra kieu that bai, hay sua truoc khi di tiep" >&2    exit 2  }fi

Cách này biến quy trình thành vòng khép kín: agent sửa, hook chạy kiểm tra, lỗi quay lại cho agent, agent sửa tiếp. Bạn không phải ngồi giữa để chuyển tin.

Cảnh báo về tốc độ: hook chạy ở mỗi lần sửa file, nên nếu lệnh kiểm tra mất mười giây thì cả phiên làm việc chậm hẳn. Với dự án lớn, hãy chỉ kiểm tra những file vừa đổi thay vì quét toàn bộ, hoặc dời phần kiểm tra nặng sang bước chạy tay cuối cùng. Trường hợp việc kiểm tra vốn đã chậm vì đọc ghi nhiều, xem thêm bài về tsc chậm do CPU hay ổ đĩa.

Hook và quyền, hai lớp bổ sung nhau

Nhiều người nhầm hook với phần cấp quyền cho agent. Chúng khác nhau:

  • Quyền quyết định agent được dùng loại thao tác nào, ví dụ có được chạy lệnh hệ thống hay không.
  • Hook quyết định từng thao tác cụ thể có được thực hiện hay không, dựa trên nội dung thật của thao tác đó.

Kết hợp cả hai mới chặt. Quyền cắt bớt bề mặt, hook lọc phần còn lại theo ngữ cảnh của chính dự án bạn. Ví dụ điển hình: cho phép chạy lệnh hệ thống vì agent cần cài gói và chạy kiểm thử, nhưng hook chặn mọi lệnh động tới thư mục ngoài dự án.

Với đội nhóm, hãy đặt cấu hình hook trong repo để ai làm việc trên dự án cũng được cùng một lớp bảo vệ. Ranh giới giữa phần chung của dự án và phần cá nhân giống hệt cách chia đã nói ở bài skill dùng chung cho đội.

Cuối cùng, đừng coi hook là bảo hiểm cho mọi rủi ro. Nó chặn được cái bạn nghĩ ra trước, không chặn được cái bạn chưa nghĩ tới. Sao lưu định kỳ vẫn là lớp phòng thủ cuối cùng, theo bài về chu kỳ sao lưu.

Vì sao luật không đủ, và điểm móc bổ sung chỗ nào

Cơ chếBản chấtHiệu lực
Tệp luậtHướng dẫn, trợ lý đọc và cố gắng tuân theoMềm, không bảo đảm
Điểm móc chặn lệnhMã của bạn chạy trước, chặn được thậtCứng, bảo đảm
Phân quyền hệ thốngNgười dùng chạy trợ lý không có quyền làm việc đóCứng nhất

Ba lớp này bổ sung nhau chứ không thay thế nhau. Luật giảm số lần trợ lý định làm sai; điểm móc chặn khi nó vẫn định làm; phân quyền hệ thống chặn ngay cả khi hai lớp trên hỏng.

Ba nhóm điểm móc đáng làm

  • Chặn lệnh nguy hiểm: lệnh xóa đệ quy, lệnh ghi đè cấu hình hệ thống, lệnh đẩy thẳng lên nhánh chính, lệnh chạy trên máy chủ thật.
  • Tự chạy kiểm tra sau khi sửa tệp: chạy công cụ kiểm định dạng và kiểm kiểu ngay sau mỗi lần sửa, để lỗi lộ ra sớm.
  • Ghi nhật ký: ghi lại mọi lệnh đã chạy, để truy được khi có sự cố.

Danh sách lệnh nên chặn

TerminalDanh sách lệnh nên chặnbash
# Nam nhom lenh dang chan tren may lam viec: # 1. Xoa de quy o duong dan goc hoac thu muc he thong# 2. Ghi de vao thiet bi o dia# 3. Day thang len nhanh chinh, hoac ep ghi de lich su# 4. Ket noi va chay lenh tren may chu that# 5. Lenh tai tep tu internet roi chay thang # Sau khi dat hook: THU no that mot lan# Hook chua tung duoc thu la hook chua chac hoat dong # Ghi nhat ky moi lenh da chay, giu it nhat 30 ngay

Lớp bảo vệ quan trọng nhất: phân quyền

Điểm móc chặn được lệnh mà bạn nghĩ ra trước. Phân quyền chặn cả những lệnh bạn chưa nghĩ tới. Ba việc đáng làm: chạy trợ lý bằng một tài khoản không có quyền quản trị; không để khóa đăng nhập máy chủ thật trên máy đang chạy trợ lý; và tách hẳn môi trường thử khỏi môi trường thật.

Câu hỏi thường gặp

Hook có làm chậm agent không?

Có, đúng bằng thời gian script của bạn chạy, và nó cộng vào mỗi thao tác khớp điều kiện. Hãy giữ hook dưới một giây. Việc kiểm tra nặng như chạy toàn bộ bộ kiểm thử nên để ở bước riêng chứ đừng nhét vào hook.

Làm sao biết hook đang hoạt động?

Thử cố ý một thao tác nằm trong danh sách chặn và xem nó có bị dừng kèm đúng thông báo của bạn không. Đây là bước phải làm sau khi viết, vì hook cấu hình sai thường im lặng cho qua chứ không báo lỗi.

Hook thay được việc xem lại code không?

Không. Hook chặn được những việc bạn liệt kê trước và tự động hóa các bước máy móc. Phần đánh giá logic có đúng nghiệp vụ hay không vẫn là việc của người, đặc biệt trước khi phát hành.

Nên đặt hook trong repo hay trong cấu hình cá nhân?

Hook bảo vệ dự án thì đặt trong repo để cả đội cùng có. Hook phục vụ thói quen riêng của bạn thì để trong cấu hình cá nhân, đừng ép người khác chịu chung.

Chia sẻ:Facebook

Thanh Nguyễn

TND

Tư vấn bản quyền, VPS và máy chủ kèm hóa đơn VAT, hợp đồng đầy đủ cho doanh nghiệp.