Claude Code 的 Auto Mode 讓你可以「放手」——不需要逐一確認每個檔案修改、每個指令執行。聽起來很爽,但也很危險。
這篇整理 Claude Code 的 6 種權限模式、安全機制、以及實務上怎麼在「效率」和「安全」之間找到平衡。
6 種權限模式
Claude Code 的權限從嚴到寬,分成 6 個等級:
| 模式 | 說明 | 適合場景 |
|---|---|---|
default | 每次工具呼叫都要你確認 | 剛開始用、不確定 AI 會做什麼 |
acceptEdits | 自動允許檔案編輯,其他要確認 | 信任 AI 的程式碼但不信任指令 |
plan | 只規劃不執行,所有修改要確認 | 大型重構前先看計畫 |
auto | 大部分操作自動執行 | 熟悉的任務、信任度高 |
bypassPermissions | 跳過所有確認(含危險操作) | 極度危險,不建議 |
dontAsk | 跳過所有確認但保留安全邊界 | 極度危險,不建議 |
切換方式
在 session 中隨時切換:
/auto # 切到 auto mode
/default # 切回預設
/plan # 切到 plan mode
或在設定檔中預設:
// .claude/settings.json
{
"autoMode": "acceptEdits"
}
Auto Mode 的安全機制
Auto Mode 不是「無腦全開」。它有三層安全機制:
第一層:沙箱隔離
在支援的環境中,Claude Code 的指令執行在沙箱內。即使是 Auto Mode,某些操作(例如寫入系統目錄、修改系統設定)仍然會被沙箱阻擋。
第二層:分類器過濾
Claude Code 內建分類器,會判斷操作的風險等級:
- 低風險:讀檔、搜尋、跑測試 → Auto Mode 自動允許
- 中風險:編輯檔案、安裝套件 → 依模式決定
- 高風險:刪除檔案、git push、執行未知腳本 → 即使 Auto Mode 也會提示
第三層:Auto-Fallback
如果 Claude Code 偵測到操作可能有問題(例如要刪除大量檔案),即使在 Auto Mode 下也會自動降級到 default 模式,要求你確認。
allowedTools:精細控制白名單
與其用大範圍的模式切換,更好的做法是用 allowedTools 白名單,精確指定哪些工具可以自動執行。
設定方式
// .claude/settings.json
{
"allowedTools": [
"Read",
"Glob",
"Grep",
"Edit",
"Write",
"Bash(npm run test)",
"Bash(npm run build)",
"Bash(npx astro check)",
"Bash(git status)",
"Bash(git diff *)"
]
}
Glob Pattern 支援
allowedTools 支援 glob pattern:
{
"allowedTools": [
"Bash(git *)", // 所有 git 指令
"Bash(npm run *)", // 所有 npm scripts
"Bash(npx astro *)" // 所有 astro 指令
]
}
分層設定
可以在不同層級設定,優先級由高到低:
- 專案級:
.claude/settings.json(commit 到 repo,團隊共用) - 使用者級:
~/.claude/settings.json(個人偏好)
專案級適合定義團隊的安全底線,使用者級可以在此基礎上放寬或收緊。
實務建議:各場景的最佳設定
場景一:日常開發
{
"allowedTools": [
"Read", "Glob", "Grep", "Edit", "Write",
"Bash(npm run test)",
"Bash(npm run build)",
"Bash(git status)",
"Bash(git diff *)",
"Bash(git log *)"
]
}
允許讀寫檔案和跑測試,但 git commit、git push、npm install 仍需確認。
場景二:重構作業
{
"autoMode": "acceptEdits",
"allowedTools": [
"Read", "Glob", "Grep", "Edit", "Write",
"Bash(npm run test)",
"Bash(npx tsc --noEmit)"
]
}
acceptEdits 讓 Claude Code 自動修改檔案,搭配測試和型別檢查確保不會改壞。
場景三:Code Review 模式
{
"autoMode": "plan"
}
plan 模式下 Claude Code 只分析和建議,不會真的動檔案。適合 review 時用。
場景四:CI/CD 環境
{
"autoMode": "auto",
"allowedTools": [
"Read", "Glob", "Grep",
"Bash(npm run *)",
"Bash(git *)"
]
}
CI 環境中可以更開放,因為環境本身是隔離的。
什麼該自動、什麼不該
適合全自動的任務
| 任務 | 原因 |
|---|---|
| 跑測試 | 只讀操作,不會改東西 |
| 型別檢查 | 同上 |
| 程式碼搜尋/閱讀 | 純讀取 |
| 檔案編輯(有測試覆蓋時) | 改壞了測試會抓到 |
| Lint/Format | 自動修復格式問題 |
需要確認的任務
| 任務 | 原因 |
|---|---|
git commit | 確認 commit message 和範圍 |
git push | 推到遠端影響他人 |
npm install | 改動相依可能有安全風險 |
| 刪除檔案 | 難以復原 |
| 資料庫操作 | 影響真實資料 |
絕對不能自動的任務
| 任務 | 原因 |
|---|---|
git push --force | 可能覆蓋他人的工作 |
rm -rf | 不可逆 |
| 修改 CI/CD 設定 | 影響整個團隊的部署流程 |
| 發布到 npm/PyPI | 公開發布不可撤回 |
| 操作正式環境 | 影響真實使用者 |
Hooks:自動化的安全網
Claude Code 的 Hooks 機制可以在工具執行前後自動跑自訂檢查,是 Auto Mode 的最佳搭配。
設定範例
// .claude/settings.json
{
"hooks": {
"preToolUse": [
{
"matcher": "Edit",
"command": "echo 'Editing file: $CLAUDE_FILE_PATH'"
}
],
"postToolUse": [
{
"matcher": "Bash",
"command": "node scripts/check-no-secrets.js"
}
]
}
}
搭配 Auto Mode 的實用 Hooks
防止意外修改 production 設定:
{
"hooks": {
"preToolUse": [
{
"matcher": "Edit",
"command": "bash -c 'if echo $CLAUDE_FILE_PATH | grep -q production; then echo \"BLOCKED: Cannot edit production files\" >&2; exit 1; fi'"
}
]
}
}
每次編輯後自動跑測試:
{
"hooks": {
"postToolUse": [
{
"matcher": "Edit",
"command": "npm run test -- --bail 2>/dev/null || echo 'WARNING: Tests failing after edit'"
}
]
}
}
Hook 被拒絕時,Claude Code 會看到拒絕訊息並調整行為——它不會硬闖。
漸進式放手策略
不要一開始就開 Auto Mode。建議的漸進路徑:
第一週:Default Mode
- 每次都確認,觀察 Claude Code 的行為模式
- 記錄哪些操作你總是按「確認」
- 記錄哪些操作你會仔細看
第二週:AcceptEdits
- 讓檔案編輯自動通過
- 搭配
npm run test的 allowedTools - 觀察是否有改壞的情況
第三週:AcceptEdits + 擴大白名單
{
"autoMode": "acceptEdits",
"allowedTools": [
"Read", "Glob", "Grep", "Edit", "Write",
"Bash(npm run *)",
"Bash(git status)",
"Bash(git diff *)",
"Bash(git log *)"
]
}
第四週以後:依任務切換
- 熟悉的小改動:Auto Mode
- 大型重構:Plan Mode 先看計畫
- 敏感操作:Default Mode
常見問題
Q:Auto Mode 會不會自己 push 程式碼?
不會。即使在 Auto Mode 下,git push 預設仍需確認。除非你明確把 Bash(git push *) 加到 allowedTools——強烈不建議。
Q:Auto Mode 會不會刪除重要檔案?
Auto Mode 的分類器會把檔案刪除標記為高風險操作,通常會要求確認。但不要依賴這個——用 Hooks 加一層保護更安全。
Q:團隊成員的設定不同怎麼辦?
用 .claude/settings.json(專案級)定義團隊的安全底線(例如禁止自動 push),個人可以用 ~/.claude/settings.json 在此基礎上調整。
Q:bypassPermissions 和 dontAsk 什麼時候用?
幾乎不需要。這兩個模式跳過所有安全檢查,只適合在完全隔離的測試環境中使用(例如 Docker container 內的 CI)。在日常開發中使用是自找麻煩。
結語
Auto Mode 的精髓不是「全自動」,而是**「選擇性自動」**。把重複的、低風險的操作交給 AI 自動處理,把有判斷價值的操作留給自己確認。
最好的設定是你幾乎感覺不到它的存在——不會一直跳確認框打斷你,但也不會在你沒注意的時候做危險的事。allowedTools 白名單加上 Hooks 安全網,就是這個平衡點。