Khi AI “nhiệt tình quá mức” gây họa cho dự án
Mình vừa dành một tuần “cày” Claude Code – công cụ CLI mới từ Anthropic. Phải công nhận nó hiểu ngữ cảnh rất nhanh. Tuy nhiên, nếu bạn thả cửa cho nó tự quyết hoàn toàn, những tình huống dở khóc dở cười sẽ xuất hiện ngay lập tức.
Kịch bản thường thấy là: Bạn nhờ Claude sửa một lỗi logic trong auth_service.py. Nó xử lý xong trong 5 giây. Nhưng ngay sau đó, bạn phát hiện toàn bộ file bị biến dạng vì AI không tuân thủ cấu hình Ruff hay Black của team. Có lần, Claude còn tự ý thêm thư viện vào requirements.txt nhưng lại quên pip install. Kết quả là project lỗi vặt khắp nơi khi chạy thử. Thậm chí, nhiều lúc AI sửa code xong rồi tự tin báo Pass test, trong khi nó chưa hề cập nhật lại các file mock dữ liệu.
Dùng AI để tiết kiệm thời gian mà vẫn phải đi dọn dẹp đống lộn xộn về format hay lỗi môi trường thì thật sự rất vô lý.
Tại sao Claude Code lại hay “quên” quy chuẩn của bạn?
Lỗi không phải do AI kém thông minh. Vấn đề nằm ở cơ chế Tool Calls. Mỗi hành động như đọc file, ghi file hay chạy lệnh shell đều được Claude coi là một tác vụ độc lập. Nó không mặc định biết rằng trong dự án của bạn, hễ sửa file .js là phải chạy ESLint.
Khi thực hiện lệnh write_to_file, Claude chỉ đơn giản là ghi đè nội dung mới. Nó không có khả năng tự kết nối các thao tác đơn lẻ vào quy trình tổng thể của từng đội ngũ. Sự thiếu hụt này chính là nguyên nhân khiến codebase của bạn dần trở nên thiếu nhất quán.
Dùng Hooks để đưa AI vào kỷ luật
Để khắc phục, cách đơn giản nhất là yêu cầu Claude format lại code sau mỗi lần sửa. Nhưng cách này cực kỳ tốn token và mất thời gian chờ đợi.
Một phương án khác là ghi hướng dẫn vào CLAUDE.md. Cách này khá ổn nhưng đôi khi AI vẫn “ngó lơ” nếu danh sách yêu cầu quá dài. Giải pháp triệt để nhất chính là sử dụng Hooks. Cơ chế này cho phép bạn cài đặt các script tự động chạy vào hai thời điểm then chốt:
- Pre-tool-call: Kiểm tra nghiêm ngặt ngay trước khi AI kịp thay đổi codebase.
- Post-tool-call: Dọn dẹp, định dạng và kiểm tra lại ngay sau khi AI vừa thực hiện xong một thao tác.
Cài đặt những chốt chặn đầu tiên
Bạn không cần tìm menu cài đặt phức tạp. Hãy bắt đầu bằng việc xác định các sự kiện cần giám sát chặt chẽ. Ví dụ, mỗi khi file Python thay đổi, hệ thống phải tự động gọi Ruff.
Bạn có thể tổ chức các script này trong thư mục .claudecode/hooks/. Việc tách biệt giúp bạn dễ quản lý và cập nhật quy trình mà không làm loãng file cấu hình chính.
# Cấu trúc quản lý automation gọn gàng
.claudecode/
└── hooks/
├── pre-save-check.sh
└── post-save-format.sh
3 kịch bản thực tế giúp bạn tiết kiệm 15 phút mỗi giờ coding
Tại itfromzero, mình đã áp dụng bộ hooks dưới đây và giảm được 80% các lỗi ngớ ngẩn do AI gây ra:
1. Tự động ép format chuẩn
Đây là bước không thể thiếu. Hook này đảm bảo AI luôn tuân thủ quy tắc dùng dấu nháy đơn hay nháy kép, thụt lề bao nhiêu khoảng trắng.
# .claudecode/hooks/post-save-format.sh
#!/bin/bash
file_path=$1
if [[ $file_path == *.py ]]; then
ruff format $file_path && ruff check --fix $file_path
elif [[ $file_path == *.ts ]]; then
npx stylelint --fix $file_path
fi
2. Chốt chặn bảo mật (Security Hook)
AI đôi khi mải mê fix bug mà vô tình để lộ API key trong file log hoặc sửa .env sai cách. Một script Pre-tool-call sẽ ngăn chặn rò rỉ dữ liệu nhạy cảm ngay lập tức.
# Kiểm tra secret trước khi ghi file
grep -E "password|api_key|token" $TEMP_FILE && echo "Nguy hiểm!" && exit 1 || exit 0
3. Đồng bộ môi trường tự động
Nếu Claude sửa package.json, script sẽ tự chạy npm install. Bạn không còn phải lo cảnh code đúng nhưng chạy lỗi vì thiếu thư viện trên máy local.
# Xử lý tự động bằng Python
def post_tool_hook(tool_name, args):
if "package.json" in args.get("path", ""):
print("Phát hiện dependency mới. Đang cài đặt...")
os.system("npm install")
Triển khai qua CLAUDE.md và Shell Script
Vì Claude Code đang phát triển nhanh, cách bền vững nhất là tạo ra các Standard Operating Procedures (SOP). Bạn hãy ép AI phải sử dụng các script wrapper thay vì gọi tool trực tiếp.
Hãy thêm dòng này vào phần chỉ dẫn hệ thống của bạn:
Luôn dùng lệnh `scripts/safe_write.sh` thay cho tool `write_to_file`.
Script này sẽ:
1. Backup file cũ.
2. Ghi nội dung mới.
3. Chạy linter/test.
Nếu bước nào thất bại, hệ thống sẽ tự động revert.
Cách làm này giúp mọi thay đổi của AI đều mang tính “nguyên tử” (atomic). Nếu không hoàn hảo 100%, nó sẽ không được phép ghi vào codebase.
Lời kết: Hãy để Automation làm người gác cổng
Sử dụng Claude Code mà không có Hooks giống như thuê thợ xây giỏi nhưng không có thước đo. Họ xây rất nhanh, nhưng tường thỉnh thoảng sẽ bị lệch vài phân khiến toàn bộ công trình mất thẩm mỹ.
Bằng cách thiết lập các chốt chặn tự động, bạn đang tạo ra một khung kỷ luật thép cho AI. Việc này giúp bạn giải phóng đầu óc khỏi những tiểu tiết vụn vặt để tập trung hoàn toàn vào kiến trúc hệ thống.
Hãy dành ra 20 phút ngay hôm nay để thiết lập bộ Hooks cơ bản. Tin mình đi, nó sẽ giúp bạn tránh được những pha “cứu net” thâu đêm chỉ vì AI format sai code!

