- Trước 2.1.118, viết một dòng custom vào autoMode.soft_deny âm thầm xoá sạch rules chặn force-push, curl|bash, xoá file, deploy prod.
- Bản mới thêm literal '$defaults' — giữ defaults, thêm custom rules cùng lúc.
TL;DR
Claude Code 2.1.118 (23/04/2026) thêm literal "$defaults" vào 3 mảng config autoMode.allow, autoMode.soft_deny, autoMode.environment. Giờ custom rules được cộng dồn với built-in list thay vì thay thế hoàn toàn. Trước đây, thêm 1 dòng soft_deny âm thầm xoá mọi rules chặn mặc định — force push, curl | bash, mass delete, prod deploy — cực nguy hiểm. Fix này nhỏ về code, rất to về tác động an toàn.
Có gì mới
Từ phiên bản 2.1.118, bạn có thể viết:
{
"permissions": {
"autoMode": {
"soft_deny": [
"$defaults",
"Không được sửa file trong infra/terraform/prod/"
]
}
}
}Literal "$defaults" được Claude Code thay thế tại chỗ bằng toàn bộ rules mặc định. Rules custom có thể đặt trước hoặc sau — vị trí "$defaults" quyết định thứ tự splice. Ba mảng environment, allow, soft_deny đều hỗ trợ như nhau, và mỗi mảng được xử lý độc lập.
Entry changelog chính thức ghi nguyên văn: "Auto mode: include "$defaults" in autoMode.allow, autoMode.soft_deny, or autoMode.environment to add custom rules alongside the built-in list instead of replacing it."
Tại sao quan trọng
Đây không phải quality-of-life update — đây là safety fix. Trước 2.1.118, config kiểu này:
{
"autoMode": {
"soft_deny": ["Không chạy migrations trên prod"]
}
}Có vẻ vô hại nhưng thực tế âm thầm xoá sạch mọi soft_deny mặc định của classifier: chặn force push, chặn curl | bash, chặn exfiltrate dữ liệu, chặn prod deploy, chặn mass delete cloud storage, chặn cấp IAM — tất cả biến mất, chỉ còn lại đúng 1 rule bạn vừa viết. Tài liệu chính thức gọi đây là Danger và cảnh báo: "every built-in block rule is discarded: force push, data exfiltration, curl | bash, production deploys, and all other default block rules become allowed."
Nhiều team đã rơi vào cái bẫy này trong lúc tưởng mình đang thắt chặt auto mode. Với "$defaults", lỗi này không thể xảy ra nếu bạn nhớ literal đó.
Technical facts
| Field | Trước 2.1.118 | Từ 2.1.118 |
|---|---|---|
autoMode.environment | Ghi đè toàn bộ defaults (chỉ trust working repo + remotes) | Dùng "$defaults" để giữ defaults + thêm org infra |
autoMode.allow | Ghi đè toàn bộ allow exceptions | Dùng "$defaults" để giữ built-in exceptions |
autoMode.soft_deny | Ghi đè toàn bộ block rules | Dùng "$defaults" để giữ nguyên default blocks |
Settings files đọc autoMode | ~/.claude/settings.json, .claude/settings.local.json, managed settings, --settings | Không thay đổi |
Shared .claude/settings.json | Classifier KHÔNG đọc (tránh repo checked-in inject allow rules) | Không thay đổi |
CLI helpers đã có sẵn từ trước và cực hữu ích lúc này:
claude auto-mode defaults— in built-in rules dạng JSONclaude auto-mode config— in effective rules sau merge, với"$defaults"đã expandclaude auto-mode critique— AI review rules custom của bạn
Use cases thực tế
Config ví dụ dùng cho team, tổng hợp cả 3 mảng:
{
"permissions": {
"autoMode": {
"environment": [
"$defaults",
"Source control: github.com/acme-corp và mọi repo bên dưới",
"Trusted domains: *.internal.acme.com"
],
"allow": [
"$defaults",
"Được ghi vào s3://acme-scratch/: bucket lifecycle 7 ngày"
],
"soft_deny": [
"$defaults",
"Không sửa file trong infra/terraform/prod/"
]
}
}
}- Mở rộng
environment: thêm GitHub org, internal domain, trusted buckets bên cạnh defaults. - Mở rộng
soft_deny: thêm rủi ro riêng của project mà không mất default blocks. - Mở rộng
allow: whitelist staging namespace hoặc ephemeral bucket mà classifier hay flag nhầm. - Rollout theo team: managed settings set
"$defaults"+ org rules; dev layer thêm.claude/settings.local.json— tất cả additive.
Daniel San (@dani_avila7) — người spot feature này đầu tiên — đặt config cá nhân vào .claude/settings.local.json vì file này mặc định gitignored và chỉ áp per-project.
Limitations & điều kiện
- Phiên bản: cần Claude Code ≥ 2.1.118. Auto mode nói chung cần ≥ 2.1.83.
- Plan: Auto mode không có trên Pro. Chỉ Max, Team, Enterprise, hoặc API. Admin Team/Enterprise phải bật trước.
- Model: chỉ Sonnet 4.6, Opus 4.6, Opus 4.7. Max plan chỉ hỗ trợ Opus 4.7. Haiku không hỗ trợ.
- Provider: chỉ Anthropic API. Không hoạt động trên Bedrock, Vertex, Foundry.
- Không phải hard policy boundary:
allow/soft_denylà gợi ý cho classifier, không phải firewall. Devallowcó thể override orgsoft_denybên trong classifier. Muốn block cứng bất kể ý định, dùngpermissions.denytrong managed settings — chạy trước classifier và không thể override.
What's next
Auto mode tiếp tục được hardening. Hook PermissionDenied đã ship để viết logic retry-on-deny programmatic. Phiên bản 2.1.119 phát hành cùng ngày thêm PowerShell auto-approve, prUrlTemplate, và duration_ms trong PostToolUse hook.
Nếu đang dùng auto mode với config custom, hãy chạy claude auto-mode config ngay và kiểm tra: nếu thấy chỉ có đúng những rules bạn viết, bạn đang chạy với rủi ro default blocks đã biến mất. Thêm "$defaults" vào đầu mỗi mảng và chạy lại để xác nhận list đã đầy đủ.
Nguồn: Claude Code changelog, Configure auto mode, Permission modes, @dani_avila7.