Claude Code Auto Mode:全自動開發的邊界在哪裡


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 指令
  ]
}

分層設定

可以在不同層級設定,優先級由高到低:

  1. 專案級.claude/settings.json(commit 到 repo,團隊共用)
  2. 使用者級~/.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 commitgit pushnpm 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 安全網,就是這個平衡點。