7 quy tắc Claude Code để giới hạn chi tiêu của tác nhân tự động năm 2026
Markdown7 quy tắc đặt giới hạn trong Claude Code để tác nhân tự động không khiến bạn trắng tay: giới hạn của nhà cung cấp, Task Budgets, hooks, danh sách cho phép, kill switch, khóa sandbox và giới hạn số vòng lặp.
Đọc toàn bộ bài viết
Điểm chính
Một tác nhân tự động có quyền truy cập đám mây không giới hạn có thể tạo ra hóa đơn lớn chỉ sau một đêm. Tôi phân tích 7 quy tắc cho Claude Code mà bạn có thể thiết lập trong một buổi tối để ngăn kiểu sự cố này.
Tìm hiểu cách sử dụng dịch vụ trong tài liệu Ailoot.
Tiền đi đâu: 3 nhóm chi tiêu của một tác nhân tự động
Điểm chính
Tác nhân tự động tiêu tiền của bạn vào đâu? Qua ba kênh riêng biệt: token tại Anthropic/OpenAI, tài nguyên đám mây (AWS/GCP/Yandex Cloud) và các hành động trả phí trong API bên thứ ba (khoản thu Stripe, cổng SMS, Twilio, bot Telegram có thuê bao). Mỗi kênh có cách tính phí và cách ngăn việc tiêu tiền riêng.
Đừng nhầm lẫn ba kênh này—chúng hoạt động độc lập và cần các thiết lập khác nhau:
- Token LLM. Claude, OpenAI hoặc Gemini tính phí cho ngữ cảnh đầu vào và đầu ra của mỗi yêu cầu. Anthropic Task Budgets (xem Quy tắc 2) và dùng thuê bao thay vì trả phí theo mức sử dụng API có thể giúp ích ở đây.
- Hạ tầng đám mây. Thông qua MCP hoặc công cụ Bash, tác nhân tạo tài nguyên EC2, RDS, S3 hoặc triển khai lambda. AWS Budgets, GCP hoặc Yandex Cloud cùng kill switch có thể giúp ích ở đây (Quy tắc 5).
- API bên thứ ba. Tác nhân gọi một khoản thu Stripe, gửi 100 tin nhắn SMS qua cổng hoặc thiết lập một nghìn thuê bao Telegram. Khóa Sandbox có phạm vi hẹp và mức trần cứng trên bảng điều khiển của nhà cung cấp có thể giúp ích ở đây (Quy tắc 6).
Tiếp theo là 7 quy tắc. Mỗi quy tắc bao quát một hoặc hai kênh.
Cách đặt mức trần cứng cho chi tiêu API (Quy tắc 1)
Điểm chính
Làm thế nào để đặt mức trần cứng cho chi tiêu API? Anthropic và OpenAI có giới hạn chi tiêu tổ chức tích hợp, tự động hạn chế tài khoản khi đạt đến số tiền đã chỉ định. Đừng nhầm nó với cảnh báo, vốn chỉ gửi email. Mức trần cứng là rào chắn; cảnh báo là bóng đèn. Hãy thiết lập cả hai, bắt đầu với rào chắn.
Bật ở đâu (dành ít nhất 2 phút cho mỗi nhà cung cấp):
Anthropic Console. console.anthropic.com → Settings → Limits → Monthly spend limit. Đặt số tiền bạn sẵn sàng chi trong tháng tệ nhất. Khi đạt mức đó, API trả về 429 và ghi lại sự kiện. Không có chuyện “một phút nữa tôi thử lại”—API bị chặn đến hết tháng.
OpenAI Platform. platform.openai.com → Billing → Usage limits. Tương tự, có giới hạn mềm (cảnh báo qua email) và giới hạn cứng (tắt API). Đặt cả hai; đặt giới hạn cứng ở mức 1.5x giới hạn mềm để có thời gian phản ứng.
AWS Bedrock / Google Vertex. Nếu bạn truy cập Claude/Anthropic qua một dịch vụ trung gian trên đám mây, cần đặt mức trần cứng ở phía đám mây, không phải phía Anthropic. Đó là Quy tắc 5.
Những gì không được tính là mức trần cứng: cảnh báo email (“bạn đã dùng 80% ngân sách”). Chúng đến trễ, và ban đêm chẳng ai đọc email. Chỉ có rào chắn đồng bộ ở phía nhà cung cấp mới thực sự có tác dụng.
Anthropic Task Budgets hoạt động thế nào và đặt ở đâu (Quy tắc 2)
Điểm chính
Anthropic Task Budgets là gì và chúng bảo vệ bạn khỏi điều gì? Đây là tính năng beta trong Opus 4.7/4.8 và dòng Fable/Mythos: bạn đặt ngân sách cho một quy trình tự động, Claude giảm độ sâu suy luận khi ngân sách sắp cạn, rồi kết thúc bằng một bản tóm tắt thay vì nói “thế thôi, tôi hết ngân sách rồi” giữa chừng. Tính năng này không giải quyết mọi vấn đề về chi tiêu đám mây, nhưng ngăn được 80% trường hợp tác nhân “mắc kẹt trong vòng lặp mà không nhận ra”.
Xem tài liệu chính thức của Anthropic để biết chi tiết. Điểm chính: đây là ranh giới mềm, không phải ranh giới cứng. Nếu tác nhân đã tạo một phiên bản EC2, Task Budget sẽ không hoàn tác việc đó.
Cách hoạt động trên thực tế: bạn truyền trường task_budget trong request payload (ví dụ: 100,000 token đầu vào cho toàn bộ tác vụ). Claude nhận được thông tin về ngân sách và tự cắt giảm kế hoạch, đơn giản hóa các bước hoặc bỏ qua tác vụ phụ. Khi ngân sách gần về không, Claude thu gọn công việc và trả về bản tóm tắt tạm thời thay vì “cảm ơn vì đã lắng nghe”.
Hạn chế:
- Chỉ dành cho Anthropic API. Không hoạt động trên Bedrock/Vertex, vốn có hệ thống tính phí riêng
- Chỉ dành cho các mô hình beta (Opus 4.7, 4.8, Fable 5, Mythos 5). Không hỗ trợ Sonnet 4.6 hoặc Haiku
- Không bao gồm chi tiêu đám mây hoặc API bên thứ ba. Nếu Claude khởi chạy một phiên bản EC2, Task Budget không phản ứng
Hãy dùng tính năng này cùng Quy tắc 1 (mức trần cứng), không dùng thay cho quy tắc đó.
Rào chắn chi phí là một phần của kỹ thuật ngữ cảnh: bạn quyết định tác nhân có thể và không thể làm gì, cũng như điểm dừng khẩn cấp của nó ở đâu.
Nên chặn những gì bằng PreToolUse hooks trong Claude Code (Quy tắc 3)
Điểm chính
PreToolUse hooks trong Claude Code là gì và tại sao bạn cần chúng? Đây là các script chạy trước khi Claude thực thi một lệnh gọi công cụ. Bạn có thể chặn một yêu cầu (exit 2), yêu cầu người dùng xác nhận hoặc cho phép lệnh chạy mà không hỏi. Điểm mấu chốt: hooks chạy trước --dangerously-skip-permissions. Điều đó có nghĩa là bạn có thể chặn các hành động nguy hiểm ngay cả trong chế độ bỏ qua quyền.
Quyền trong Claude Code (tính đến ngày 1 tháng 6 năm 2026) được đánh giá theo thứ tự deny → ask → allow. Điều đó có nghĩa là:
- kiểm chế độ quyền được chọn riêng; thử deny ở chế độ thường chưa chứng minh bảo vệ trong bypass
- nếu một hook trả về
exit 2, lệnh gọi công cụ sẽ bị chặn allowedToolschỉ có hiệu lực khi các quy tắc deny và hooks không đưa ra phản hồi
PreToolUse hook tối giản kiểm vài cách viết lệnh nguy hiểm. Đây là lọc văn bản, không phải parser shell đầy đủ hay ranh giới truy cập; lệnh tương đương, script, công cụ khác và tài nguyên cloud có sẵn cần kiểm soát riêng:
#!/usr/bin/env bash
# ~/.claude/hooks/block-dangerous-bash.sh
INPUT=$(cat)
if ! COMMAND=$(printf '%s\n' "$INPUT" | jq -er '.tool_input.command | select(type == "string")'); then
echo "Blocked: invalid Bash hook input" >&2
exit 2
fi
# Chỉ kiểm các mẫu văn bản liệt kê; không phủ mọi thao tác tương đương
if echo "$COMMAND" | grep -qiE '(rm -rf|aws s3 rb|terraform destroy|kubectl delete|drop database)'; then
echo "Blocked: destructive command" >&2
exit 2
fi
exit 0
Lưu script đúng đường, bảo đảm có jq, cấp thực thi bằng chmod +x ~/.claude/hooks/block-dangerous-bash.sh. Gắn trong ~/.claude/settings.json:
{
"hooks": {
"PreToolUse": [
{
"matcher": "Bash",
"hooks": [{ "type": "command", "command": "~/.claude/hooks/block-dangerous-bash.sh" }]
}
]
}
}
Xem tài liệu chính thức.
Xem /hooks xác nhận đăng ký, truyền JSON thử vô hại cho script mà không thực thi trường lệnh. Dạng nguy hiểm trong danh sách phải trả 2, lệnh lành trả 0; thử cả JSON sai. Regex chỉ kiểm lời gọi Bash khớp; ranh giới quyền thật cần credential hẹp và cách ly. Xem ví dụ đầu vào/đầu ra hook chính thức.
Vì sao nên dùng danh sách cho phép allowedTools và không nên chạy --dangerously-skip-permissions trên máy chủ (Quy tắc 4)
Điểm chính
Nên đặt danh sách công cụ được phép ở đâu, và tại sao máy chủ không phải nơi phù hợp để dùng chế độ bỏ qua quyền? allowedTools trong settings.json là danh sách các lệnh cụ thể mà tác nhân có thể chạy mà không cần xác nhận; mọi lệnh khác sẽ hỏi bạn. --dangerously-skip-permissions tắt hoàn toàn lời nhắc xác nhận, vì vậy đừng chạy trên máy chủ—chỉ dùng trong container hoặc VM.
Danh sách cho phép là nguyên tắc đặc quyền tối thiểu. Thay vì “cho phép mọi thứ” (--dangerously-skip-permissions), chỉ thêm những gì tác vụ cần:
{
"permissions": {
"allow": [
"Bash(npm install:*)",
"Bash(npm run build)",
"Bash(git add:*)",
"Bash(git commit:*)",
"Read(./src/**)",
"Write(./src/**)"
],
"deny": [
"Bash(rm -rf:*)",
"Bash(curl * | sh)",
"Write(/etc/**)",
"Write(~/.ssh/**)"
]
}
}
Những điều cần biết về chế độ bỏ qua quyền:
- Linux/macOS từ chối khởi chạy Claude Code ở chế độ bỏ qua quyền khi chạy với tư cách root hoặc dùng sudo—đây là biện pháp bảo vệ có sẵn
- Trên máy của bạn, chế độ bỏ qua quyền tắt mọi lời nhắc xác nhận, và tác nhân có thể chạy
rm -rfvới bất cứ thứ gì, mở khóa SSH và tải dữ liệu lên đám mây - Không bao giờ chạy
--dangerously-skip-permissionstrên máy chủ; chỉ chạy trong:- Docker container có giới hạn volume được mount (chỉ thư mục cần thiết)
- VM biệt lập (Multipass, Lima, Orbstack)
- GitHub Codespaces / Replit / sandbox khác
Lệnh docker run tối giản để dùng chế độ bỏ qua quyền:
docker run --rm -it \
-v "$PWD:/workspace" \
-w /workspace \
--network host \
ghcr.io/anthropics/claude-code:latest \
claude --dangerously-skip-permissions
Nếu tác nhân cần thông tin xác thực đám mây, hãy dùng các khóa riêng có phạm vi hẹp, không dùng khóa chính của bạn (Quy tắc 6).
Cách thiết lập cảnh báo ngân sách đám mây kèm kill switch trong AWS, GCP và Yandex Cloud (Quy tắc 5)
Điểm chính
Cảnh báo ngân sách báo chi phí đã quan sát hoặc dự báo và có thể tới trễ. Hàm phản ứng có thể chặn thao tác mới hoặc dừng tài nguyên cụ thể; đó là hai hành động khác. Vô hiệu khóa IAM không dừng phí tài nguyên đã chạy. Định nghĩa và thử shutdown tài nguyên riêng.
Cách thiết lập trên từng nền tảng đám mây:
AWS Budgets (tài liệu). Tạo ngân sách hằng tháng cùng các ngưỡng (50%, 80%, 100%). Ở ngưỡng 100%, SNS topic có thể gọi Lambda phản ứng. Ví dụ dưới chỉ vô hiệu khóa IAM của người dùng được nêu; không dừng tài nguyên và không tạo trần chi tiêu cứng:
import boto3
def lambda_handler(event, context):
iam = boto3.client('iam')
# Vô hiệu hóa tất cả các khóa của người dùng 'claude-agent'
keys = iam.list_access_keys(UserName='claude-agent')['AccessKeyMetadata']
for key in keys:
iam.update_access_key(
UserName='claude-agent',
AccessKeyId=key['AccessKeyId'],
Status='Inactive'
)
return {'statusCode': 200, 'body': 'IAM keys deactivated; existing resources unchanged'}
Quy trình dừng tài nguyên có giới hạn: Với sandbox riêng có EC2 EBS-backed được duyệt, ghi tài khoản, Regions và đúng instance ID trước lượt chạy. Trong EC2 console chỉ chọn instance đó → Instance state → Stop instance → xác nhận, rồi kiểm từng instance tới stopped. Giữ dữ liệu instance-store cần trước vì dừng sẽ xóa nó. Kiểm scheduler hoặc scaling được duyệt không tạo thay. Việc này dừng compute đó, không mọi phí tài khoản: xem storage giữ lại và dịch vụ khác riêng. Theo quy trình EC2 chính thức.
Tài liệu AWS Budgets cảnh báo thông báo chậm hơn mức dùng tài nguyên và phí có thể phát sinh trước lẫn sau cảnh báo. Kích hoạt ở 100% không thể cưỡng chế trần tiền chính xác.
Cảnh báo ngân sách GCP. Tạo Budget → Pub/Sub topic → Cloud Function để vô hiệu hóa Service Account. Một lưu ý quan trọng từ tài liệu: cảnh báo chỉ thông báo, chúng không tắt hệ thống, vì vậy Cloud Function là thiết yếu.
Yandex Cloud (tài liệu). Đặt ngân sách trong Billing → Budgets, đồng thời đặt hạn ngạch tài nguyên làm mức trần cứng. Bạn có thể kết nối thông báo với bot Telegram thông qua Cloud Functions.
OpenAI API. Các giới hạn chi tiêu mềm và cứng nằm ngay trong bảng điều khiển—giới hạn cứng tự động dừng API; không cần Lambda.
Dùng trần cứng phía nhà cung cấp đã xác minh khi có, cảnh báo ngân sách có độ trễ, credential hẹp và phản ứng đã thử cho tài nguyên tác nhân tạo được. Thu hồi credential chặn một số thao tác mới; cần xác minh shutdown cho mức dùng đang diễn ra. Cảnh báo hay Lambda thu hồi khóa báo thành công đều chưa chứng minh mọi phí đã dừng.
Vì sao tác nhân cần một khóa API sandbox riêng có phạm vi hẹp (Quy tắc 6)
Điểm chính
Tại sao tác nhân cần một khóa API riêng? Để giới hạn sự cố trong phạm vi nhỏ. Tạo một người dùng IAM hoặc Service Account chỉ dành cho một tác nhân, cấp cho nó quyền tối thiểu (EC2, không phải *), rồi gắn vào một dự án thanh toán riêng có mức trần cứng. Nếu tác nhân tiêu hết hạn mức, nó chỉ tiêu hết 50 USD của chính nó trong một giờ, chứ không phải toàn bộ ngân quỹ công ty.
Thiết lập AWS tối thiểu:
- Tạo người dùng IAM
claude-agent-scan - Chính sách: chỉ cho phép các hành động cần thiết (ví dụ:
ec2:RunInstancestrong một khu vực, với kích thướct3.micro, không có địa chỉ IP đàn hồi của VPC) - Gắn người dùng vào một tài khoản AWS riêng (thông qua Organizations) với ngân sách hằng tháng 100 USD
- Tạo access keys và chỉ cấp chúng cho tác nhân; đừng đặt chúng trong
~/.aws/credentialscủa bạn - Sau phiên làm việc, xoay vòng các khóa hoặc xóa người dùng
Tương tự với các nhà cung cấp khác:
- OpenAI / Anthropic: tạo một khóa API riêng cho mỗi tác nhân, đặt mức trần cứng cho từng khóa trong bảng điều khiển và gắn thẻ
agent_idtrong metadata của yêu cầu - Stripe / YooKassa: dùng khóa API bị giới hạn cho một hành động (ví dụ: chỉ
charges:read), và nếu có thể, dùng tài khoản người bán riêng - Telegram Bot API: dùng token bot riêng, không dùng token chính
Nguyên tắc bảo mật lâu đời cũng áp dụng ở đây: đặc quyền tối thiểu—tác nhân chỉ nhận đúng những gì tác vụ cần, không hơn một byte. Nếu nhiệm vụ là “quét mạng”, đừng cấp ec2:* và s3:*; chỉ cấp ec2:DescribeInstances là đủ.
Khi nào nên dùng dry run trước khi chạy và giới hạn số vòng lặp (Quy tắc 7)
Điểm chính
Vì sao nên yêu cầu tác nhân trình bày kế hoạch trước khi khởi chạy, và tối đa nên cho phép bao nhiêu vòng lặp? Plan Mode là tính năng có sẵn trong Claude Code: trước tiên tác nhân mô tả dự định làm gì, rồi bạn phê duyệt. Đây là bước kiểm tra trước khi chạy miễn phí. Còn --max-turns N giới hạn số bước trong một phiên để tác nhân không thể chạy vòng lặp mãi. Với chế độ tự động, chỉ đặt 10–30 lượt.
Plan Mode (/plan) được bật khi bắt đầu phiên. Tác nhân chuẩn bị kế hoạch, hiển thị trong chat, chờ phê duyệt và chỉ sau đó mới bắt đầu làm việc. Tính năng này miễn phí và ngăn được 70% trường hợp “ôi, tôi tưởng nó sẽ hỏi trước”.
--max-turns là cờ khởi chạy. Mỗi lượt là một chu kỳ “tác nhân suy nghĩ + gọi công cụ + nhận kết quả”. Với các tác vụ tự động:
- thay đổi nhỏ: 5–10 lượt
- tác vụ trung bình: 15–30 lượt
- tác vụ tự động lớn: 50–80 lượt
Các kỹ thuật bổ sung:
- Giới hạn theo đồng hồ thực bằng lệnh Linux
timeout:
timeout 1800 claude --dangerously-skip-permissions --max-turns 30 -p "scan task"
# 1800 giây = 30 phút. Dừng tiến trình một cách nhẹ nhàng.
- Ghi mọi lệnh gọi công cụ vào tệp bằng hook PostToolUse để sau đó bạn có thể xem lại chuyện đã xảy ra
- Giám sát bằng Cron—cứ mỗi 5 phút, kiểm tra xem có 10 tiến trình Claude chạy cùng lúc hay không (dấu hiệu thường gặp cho thấy có sự cố)
Danh sách kiểm tra 5 phút sẵn dùng trước khi khởi chạy Claude Code tự động
Điểm chính
Cần chuẩn bị những gì trước khi nhấn Enter để chạy một tác vụ tự động? Có bảy ô cần đánh dấu, mỗi ô mất khoảng một phút. Nếu còn trống dù chỉ một ô, đừng khởi chạy.
Danh sách kiểm tra trước khi chạy claude --dangerously-skip-permissions:
[ ] 1. Đặt giới hạn chi tiêu cứng tại nhà cung cấp API (Anthropic Console → Limits → Monthly spend limit)
[ ] 2. Đặt Task Budget trong request payload (nếu dùng Opus 4.7+/Fable/Mythos)
[ ] 3. Dùng PreToolUse hook để chặn rm -rf, aws s3 rb, terraform destroy
[ ] 4. Đặt danh sách cho phép allowedTools trong settings.json hoặc làm việc bên trong Docker container
[ ] 5. Cảnh báo cloud có độ trễ + thu hồi khóa đã thử và shutdown tài nguyên được duyệt
[ ] 6. Dùng Sandbox API keys (khóa riêng cho tác nhân, không phải khóa chính)
[ ] 7. Đặt --max-turns N + timeout NNN seconds + giám sát tiến trình bằng cron
Nếu đã hoàn tất cả bảy mục, hãy khởi chạy. Nếu còn thiếu dù chỉ một mục, dừng lại và thiết lập mục đó. Ba mươi phút bây giờ có thể giúp bạn tiết kiệm 6.000–500.000 USD sau này.
Một ví dụ để bạn hình dung: một lập trình viên vibe coding khởi chạy ứng dụng cửa hàng trực tuyến với mật khẩu cơ sở dữ liệu postgres mặc định. Chỉ trong vài ngày, có người tìm thấy ứng dụng, cài trình đào tiền mã hóa và triển khai backdoor của họ. Máy chủ phải bị tắt, và hóa đơn tháng đó tăng lên vì người khác dùng máy chủ để đào tiền mã hóa.
Câu chuyện này thuộc nhóm 3 từ Phần 1 (bên thứ ba chạy những thứ trên hạ tầng của bạn), nhưng nguyên tắc vẫn giống nhau: kiểm soát chi tiêu không nên phụ thuộc vào ai khởi tạo khoản chi—tác nhân của bạn, nhân viên của bạn hay một máy đào tiền mã hóa ở Nigeria.
Đọc thêm:
- Cách bảo vệ Claude Code khỏi sự cố—về
--dangerously-skip-permissionsvà quyền từ một góc nhìn khác - Bảo mật khi vibe coding—trụ cột bảo mật
- Cách không dùng hết giới hạn Claude Code trong một ngày—về token trong thuê bao (đừng nhầm với hướng dẫn này về hóa đơn đám mây)
Nguồn
Tìm hiểu về Ailoot.
Xem thêm chi tiết
Câu hỏi thường gặp
Thu hồi khóa IAM của tác nhân có dừng hóa đơn đám mây không?
Không. Khóa bị thu hồi ngăn yêu cầu xác thực mới bằng khóa đó; tài nguyên hiện có vẫn có thể phát sinh phí. Dùng danh sách tài nguyên sở hữu, dừng instance được duyệt, xác minh trạng thái rồi kiểm tra lưu trữ và dịch vụ khác riêng.
Regex lệnh mẫu có tạo ranh giới an toàn hoàn chỉnh không?
Không. Nó chỉ xem lời gọi Bash khớp và một số chuỗi lệnh. Kiểm tra đọc JSON và mã thoát; ranh giới truy cập thật cần quyền đám mây hẹp và cách ly môi trường. Công cụ khác hay thao tác tương đương có thể lọt bộ lọc chữ.