An toàn & best practices
Bài 11 — An toàn & best practices
#Vấn đề: agent có quyền phá hủy dự án của bạn
Khi bạn chạy Claude Code trên dự án thật, nó có quyền truy cập filesystem và khả năng chạy terminal command. Nghĩa là nó có thể:
- Xóa file quan trọng
- Ghi đè file cấu hình
- Chạy lệnh xóa database
- Push code lỗi lên production
- Rò rỉ credentials trong git history
Đây không phải lý thuyết suông. Mỗi tuần đều có người chia sẻ trên Reddit, Twitter: "AI agent đã xóa sạch migration của tôi", "nó force push lên main lúc 3 giờ sáng". Nguyên nhân không phải AI "ngu" — mà là người dùng không có rào chắn an toàn.
Bài này là bài quan trọng nhất khóa học. Nếu chỉ nhớ một bài, hãy nhớ bài này.
#Rủi ro cụ thể khi dùng agent
#1. Agent có quyền filesystem
Claude Code đọc và ghi file trực tiếp trên disk. Không có thùng rác, không có undo system nào ngoài git.
> Refactor toàn bộ src/ sang module pattern mớiAgent bắt đầu sửa. Nếu bạn không review, nó có thể:
- Xóa file mà nó nghĩ là "không cần thiết"
- Ghi đè file config bạn đã tùy chỉnh
- Tạo file mới ở sai vị trí
#2. Agent chạy terminal command
Nếu bạn cho phép, agent có thể chạy bất kỳ lệnh nào:
rm -rf node_modules # Có thể xảy ra
git push --force origin main # Có thể xảy ra
DROP TABLE users; # Nếu có kết nối DB#3. Autonomous mode (tự động hoàn toàn)
Ở chế độ bình thường, agent hỏi trước mỗi lần sửa file hoặc chạy lệnh. Nhưng ở autonomous mode (--dangerously-skip-permissions), nó không hỏi gì cả — cứ thế làm.
Đây là lúc rủi ro cao nhất. Agent có thể chạy hàng chục lệnh liên tiếp mà bạn không kịp can thiệp.
⚠️ Cẩn thận: KHÔNG BAO GIỜ dùng
--dangerously-skip-permissionstrên productionFlag này bỏ qua toàn bộ cơ chế xác nhận. Agent có thể force push, xóa file, chạy lệnh nguy hiểm — tất cả trong một session. Chỉ dùng khi:
- Bạn đang ở nhánh riêng (không phải main/production)
- Dự án đã commit sạch sẽ (có thể revert)
- Bạn chấp nhận rủi ro mất dữ liệu
Nếu bạn cần autonomous mode cho CI/CD, hãy dùng sandbox/VM cách ly hoàn toàn.
#Best practices: lớp bảo vệ
#Lớp 1: Luôn làm việc trên nhánh riêng
Đây là quy tắc số một. Không có ngoại lệ.
# TRƯỚC KHI mở Claude Code
git checkout -b feat/add-user-api
git add -A && git commit -m "checkpoint: before agent session"Tại sao commit trước? Vì nếu agent phá code, bạn có thể:
git diff # Xem agent đã thay đổi gì
git checkout . # Hoàn tác toàn bộ
git reset --hard HEAD # Quay về checkpointNếu bạn đang ở nhánh main mà agent phá, bạn mất sạch. Nhánh riêng cho bạn một-click revert.
#Lớp 2: Review diff trước khi commit
Sau khi agent sửa xong, luôn luôn kiểm tra:
git diff # Xem từng dòng thay đổi
git diff --stat # Xem tổng quan: file nào, bao nhiêu dòng
git diff --name-only # Chỉ xem tên file thay đổiNếu agent sửa file bạn không mong đợi — hỏi tại sao. Nếu nó xóa file — hỏi tại sao. Đừng commit mù.
Quy trình chuẩn:
1. Agent sửa xong → bạn thấy "Done"
2. Chạy git diff → đọc kỹ
3. Nếu ổn → git add + commit
4. Nếu không ổn → git checkout . và yêu cầu agent làm lại#Lớp 3: Sandbox và VM cho task nguy hiểm
Khi task liên quan đến:
- Database migration
- Infrastructure change
- Chạy script trên production data
- Thử nghiệm cách refactor lớn
Hãy dùng môi trường cô lập:
| Môi trường | Cách dùng |
|---|---|
| Docker container | Mount code vào container, chạy agent bên trong |
| Git worktree | git worktree add ../hotfix-branch — copy code riêng biệt |
| VM | Codespaces, dev container, hoặc VM local |
| Branch + backup | Tối thiểu: nhánh riêng + push lên remote trước khi agent chạy |
#Lớp 4: Permission modes
Claude Code có 3 chế độ quyền:
| Chế độ | Agent được phép | Khi nào dùng |
|---|---|---|
| Ask (mặc định) | Hỏi trước mọi hành động | Mặc định an toàn, nên giữ |
| Auto-edit | Tự sửa file, hỏi trước khi chạy command | Khi bạn tin tưởng agent sửa code |
| Skip permissions | Tự làm mọi thứ | Chỉ trong sandbox/CI |
Khuyến nghị: giữ chế độ Ask cho日常工作. Nâng lên Auto-edit khi bạn đã quen và đang ở nhánh riêng.
#Permission rules chi tiết
Bạn có thể cấu hình chi tiết những gì agent được phép làm trong settings.json:
{
"permissions": {
"allow": [
"Read(*)",
"Edit(src/**)",
"Bash(npm test*)",
"Bash(npm run lint*)"
],
"deny": [
"Bash(rm -rf *)",
"Bash(git push --force*)",
"Bash(git checkout main*)",
"Edit(.env*)",
"Edit(config/production*)"
]
}
}Ví dụ trên cho phép agent đọc mọi file, sửa code trong src/, chạy test và lint. Nhưng chặn mọi lệnh xóa nguy hiểm, force push, và sửa file config production.
Đây là lớp bảo vệ mạnh nhất — bạn kiểm soát chính xác từng hành động.
#Những việc KHÔNG NÊN để agent làm
Dù ở chế độ nào, có những việc bạn không nên giao cho agent:
| Việc | Tại sao |
|---|---|
git push --force | Ghi đè lịch sử, khó hoàn tác |
Sửa file .env | Có thể lộ credentials |
| Chạy migration trên production DB | Sai một dòng = mất dữ liệu |
Xóa git history (git rebase -i trên main) | Mất commit của người khác |
Chạy script với sudo | Agent không hiểu hậu quả hệ thống |
| Tự ý merge vào main | Bypass code review |
Nếu agent đề xuất làm những việc này — từ chối và yêu cầu cách khác.
#Quy tắc 5 bước cho mỗi session
Đây là checklist bạn nên chạy trong đầu mỗi lần mở Claude Code:
1. MÌNH Ở NHÁNH NÀO? → git branch (phải là nhánh riêng)
2. ĐÃ COMMIT CHƯA? → git status (phải sạch)
3. TASK LÀ GÌ? → Mô tả rõ ràng, cụ thể
4. REVIEW XONG CHƯA? → git diff trước khi commit
5. ĐÃ PUSH LÊN REMOTE? → git push (có backup trên server)Bỏ qua bước nào cũng có thể gây hậu quả. Đặc biệt bước 1 và 2 — đây là nơi mọi thảm họa bắt đầu.
⚠️ Cẩn thận: Agent không hiểu "production"
Agent không biết server nào là production, database nào là thật. Nếu bạn đang ở nhánh
mainvà có kết nối database thật, agent sẽ chạy migration trên database thật — vì nó nghĩ đó là việc cần làm. Bạn là người phải ngăn chặn bằng cách:
- Làm việc trên nhánh riêng
- Không kết nối database production khi dùng agent
- Dùng
.env.developmentthay vì.env
#Anti-pattern: --dangerously-skip-permissions
Tên flag đã cảnh báo: dangerously. Đây là cách nó hoạt động:
# BÌNH THƯỜNG — an toàn
claude # Hỏi trước mọi hành động
# NGUY HIỂM — không hỏi gì
claude --dangerously-skip-permissions # Agent tự quyết định mọi thứKhi nào dùng flag này hợp lý?
- CI/CD pipeline trong container cách ly
- Automated test trên branch riêng, có thể revert
- Sandbox environment không ảnh hưởng production
Khi nào KHÔNG BAO GIỜ dùng?
- Trên máy local làm việc hàng ngày
- Trên nhánh main/production
- Khi dự án có credentials thật
- Khi bạn không thể revert
Một session autonomous có thể tạo ra 50 thay đổi trong 2 phút. Nếu 49 cái đúng và 1 cái phá file config — bạn mất hàng giờ debug. Không đáng.
#Tổng kết
An toàn khi dùng agent không phải là "nice to have" — nó là bắt buộc. Năm lớp bảo vệ:
- Nhánh riêng — luôn checkout trước khi mở agent
- Commit trước — tạo checkpoint để revert
- Review diff — đọc kỹ trước khi commit
- Sandbox/VM — cô lập cho task nguy hiểm
- Permission rules — kiểm soát chính xác từng hành động
Agent là công cụ mạnh. Nhưng giống mọi công cụ mạnh — nó có thể gây hại nếu dùng sai. Bạn là người chịu trách nhiệm cuối cùng, không phải AI.
Bài tiếp theo: Áp dụng tất cả kiến thức vào một workflow hoàn chỉnh — từ setup CLAUDE.md đến commit cuối cùng. Đây là bài tổng hợp, nơi mọi thứ ghép lại thành một quy trình chuyên nghiệp.