AI 程式設計教學中文版
官方教學中文版核心設定與能力

設定 Claude Code

Claude Code 設定不是隻改一個 settings.json。先分清 managed、user、project、local 四個作用域,再決定許可權、環境變數、Hooks、MCP、外掛和記憶放哪裡。

本篇術語速查表
  • Settings:設定。控制 Claude Code 行為的層級設定。
  • Scope:作用域。設定歸屬和生效範圍。
  • Managed:管理員設定。組織或機器級強制策略,不能被覆蓋。
  • User:使用者設定。目前使用者所有專案的預設設定。
  • Project:專案設定。儲存庫共享設定,應該提交給團隊。
  • Local:本地設定。目前儲存庫目前機器私有設定,不提交。
  • Precedence:優先順序。多個 scope(作用域)同時存在時誰覆蓋誰。
  • Array merge:陣列合並。陣列欄位跨 scope 拼接去重,不是替換。
  • ~/.claude.json:全域狀態檔案。儲存 OAuth、MCP user/local、project state 和快取。
  • CLAUDE.md:專案說明檔案。存放專案規則、偏好和長期上下文。
  • Managed policy:管理策略。企業級強制約束,如停用 bypass 或限制 marketplace。
  • JSON schema:JSON 模式。給編輯器補全和校驗 settings 的 schema。

不想讀完?把下面這段提示詞丟給 AI 幫你跑完——幫你理清 Claude Code 的設定層級和關鍵項,改到對的地方。

你是 Claude Code 設定顧問。

【角色】
Claude Code 設定顧問,按最小夠用、安全優先的原則給可落地方案,每條結論都落到能照做的具體步驟或示例,不停留在「建議」「考慮一下」這類空泛表述。

【輸入】
- 想改的設定:___
- 適用範圍(全域 / 專案 / 本地):___
- 現有設定:___
- 是否團隊共享:___
- 經驗水平:___

【工作流程】
1. 梳理設定層級
2. 把設定放到合適層
3. 說明優先順序
4. 標出常見衝突
5. 給驗證

【輸出規範】
▌一、設定層級
▌二、設定歸層
▌三、優先順序
▌四、衝突 + 驗證

【硬約束】
- 設定放對層級
- 敏感設定安全存放
- 改後驗證生效
- 不要替我臆測情況或編造不存在的功能,資訊不全先問清
- 不確定的設定或介面一律以官方文件為準,禁止照搬過時寫法
- 給的每條結論都要落到具體可照做的步驟或示例,不停留在「建議」「考慮一下」這類沒法直接執行的空泛表述

Claude Code 設定的第一原則不是“這個開關怎麼寫”,而是“這條規則屬於誰”。個人偏好、團隊約定、本機路徑、企業策略放錯位置,後面所有排障都會變成猜。——翔宇

這一章用 14 分鐘換什麼:入門章節已經完成安裝、登入和平臺選擇。現在進入核心能力第一章:settings(設定)。讀完你應該能判斷一條設定該放 user、project、local 還是 managed,並知道怎麼驗證它真的生效。

1. 不要把所有東西都塞進 settings.json

新手一看到“設定 Claude Code”,很容易想到一個檔案:

~/.claude/settings.json

然後把所有東西都寫進去:個人偏好、團隊規則、專案許可權、本機路徑、臨時實驗。

這會出問題。

假設你在個人 user settings 裡寫了:

{
  "permissions": {
    "allow": ["Bash(npm run *)"]
  }
}

這個規則會影響所有專案。個人練手專案沒問題,但生產儲存庫可能不應該自動放行所有 npm run。你以為只是給自己省一次確認,實際是把一個專案的信任邊界帶到了所有專案。

第一性原理:settings(設定)不是“設定寫在哪裡都行”,而是用 scope(作用域)把“個人、專案、機器、組織”的責任邊界分開。

官方 Claude Code settings 文件把設定拆成多個 scope(作用域)。先決定歸屬,再寫設定。

2. 四個作用域:先問“誰應該擁有這條規則”

Claude Code 主要有四層設定作用域:

  • Managed:server-managed、MDM / registry、系統級 managed-settings.json。影響組織或機器上的使用者,由 IT / 管理員下發。
  • User:~/.claude/。影響目前使用者所有專案,不共享。
  • Project:儲存庫裡的 .claude/。影響這個儲存庫所有協作者,應該提交到 git。
  • Local:.claude/settings.local.json。隻影響目前儲存庫、目前機器、目前使用者,通常 gitignored。

對應到中文開發者的判斷:

  • 個人主題、編輯器偏好、常用外掛:放 User。
  • 團隊共同許可權、Hooks、MCP 結構、專案標準:放 Project。
  • 本機路徑、臨時實驗、本地 credentials helper:放 Local。
  • 企業安全策略、停用 bypass、統一登入要求:放 Managed。

一句話判斷:別人 clone 這個儲存庫後也應該遵守,就放 project;只有你自己用,就放 user 或 local;任何人都不許繞過,就放 managed。

判斷問題放置位置
組織強制、任何人都不能覆蓋Managed
團隊協作者都要一致Project
本機路徑、臨時實驗、個人憑據 helperLocal
目前使用者所有專案都要用User
不確定、還在試驗Local

3. 優先順序:誰能覆蓋誰

同一個設定在多個 scope 出現時,官方優先順序從高到低是:

優先順序來源含義
1Managed最高,不能被使用者、專案或命令列覆蓋
2Command line arguments本次會話臨時覆蓋
3Local project settings目前機器目前儲存庫
4Shared project settings儲存庫共享設定
5User settings使用者全域預設

比如:

  • User 允許 Bash(npm run *)
  • Project 拒絕 Bash(npm publish *)

最終 npm publish 仍然會被拒絕,因為 project 比 user 更具體,而且 deny 本身也是更強邊界。

不要用 user scope 對抗 project / managed:如果專案或組織已經禁了某個行為,你改自己的 ~/.claude/settings.json 不會讓它重新生效。

4. 陣列不是替換,是合併

settings 裡很多欄位是陣列,比如:

  • permissions.allow
  • permissions.deny
  • sandbox.filesystem.allowWrite
  • availableModels
  • allowedHttpHookUrls
  • enabledPlugins

官方文件強調:陣列類設定跨 scope 是 concatenate and deduplicate,意思是拼接並去重,不是替換。

這很重要。

假設 managed 有:

{
  "sandbox": {
    "filesystem": {
      "allowWrite": ["/opt/company-tools"]
    }
  }
}

user 又加:

{
  "sandbox": {
    "filesystem": {
      "allowWrite": ["~/.kube"]
    }
  }
}

最終不是二選一,而是兩個路徑都在最終設定裡。

這解釋了一個常見誤判:

{
  "permissions": {
    "allow": []
  }
}

空陣列通常不能“清空下層 allow”。你想阻斷某個能力,應寫明確 deny,或者讓管理員用 managed policy 約束。

一句話記住:陣列設定會合並;想禁止,用 deny 或 managed policy,不要幻想空陣列能擦掉別的 scope。

5. 這些檔案分別管什麼

Claude Code 不是隻有一個設定檔。

常見物件的落點:

  • Settings:User 用 ~/.claude/settings.json,Project 用 .claude/settings.json,Local 用 .claude/settings.local.json
  • Subagents:User 用 ~/.claude/agents/,Project 用 .claude/agents/;通常沒有 Local 目錄。
  • MCP servers:User / local state 常見在 ~/.claude.json,Project server 用 .mcp.json
  • CLAUDE.md:User 可用 ~/.claude/CLAUDE.md,Project 用 CLAUDE.md.claude/CLAUDE.md,Local 用 CLAUDE.local.md
  • Plugins:User、Project、Local 都跟隨對應 scope 的 settings 檔案。

另一個關鍵檔案是:

~/.claude.json

官方 settings 文件說明,它會儲存 OAuth session、user / local scope MCP 設定、per-project state、allowed tools、trust settings 和各種快取。

不要把 ~/.claude.json 當普通專案設定:它含有會話、信任狀態和快取。團隊共享設定應該進儲存庫的 .claude/.mcp.json,不是複製你的全域狀態檔案。

6. 一個新手可用的 settings.json

建議給 settings.json 加 schema,方便編輯器補全和校驗。

{
  "$schema": "https://json.schemastore.org/claude-code-settings.json",
  "permissions": {
    "allow": [
      "Bash(npm run lint)",
      "Bash(npm run test *)",
      "Bash(git diff *)"
    ],
    "ask": [
      "Bash(git push *)",
      "Bash(npm publish *)"
    ],
    "deny": [
      "Read(./.env)",
      "Read(./.env.*)",
      "Read(./secrets/**)",
      "Bash(rm -rf *)"
    ]
  },
  "env": {
    "CLAUDE_CODE_ENABLE_TELEMETRY": "1"
  },
  "autoUpdatesChannel": "stable"
}

這個例子表達三層意思:

  • 常規開發驗證命令可以放行。
  • 推送和釋出要問。
  • 金鑰和高風險刪除直接拒絕。

schema 只幫你發現格式問題:官方 schema 可能滯後於最新 CLI 欄位。最近新增的欄位被編輯器標紅,不一定代表 Claude Code 不支援。

7. settings.json 適合管什麼

常見設定可以分成幾組。

適合放進 settings 的內容:

  • 許可權:permissions.allowpermissions.askpermissions.denydefaultMode
  • 環境變數:env
  • 沙盒:sandbox.filesystem、網路規則。
  • Hooks:hooksallowedHttpHookUrlshttpHookAllowedEnvVars
  • 外掛:enabledPluginsextraKnownMarketplacesstrictKnownMarketplaces
  • 模型:modelavailableModelseffortLevel
  • 更新:autoUpdatesChannelminimumVersion
  • 登入約束:forceLoginMethodforceLoginOrgUUID
  • 體驗:languageeditorModedefaultShellcleanupPeriodDays

但它不應該承載所有東西。

不適合塞進 settings 的內容:

  • 專案長期規則:寫 CLAUDE.md 更適合。
  • MCP project server:寫 .mcp.json 更清晰。
  • 大段工作流說明:做 Skill。
  • 金鑰正文:用系統憑據、CI secret、vault 或環境變數。
  • 臨時路徑:用 local,不提交。

邊界:settings 管 Claude Code 行為開關;CLAUDE.md 管專案說明;Skill 管可複用流程;MCP 管外部工具連線。不要把它們都塞進一個 JSON。

8. 敏感檔案怎麼處理

官方文件建議用 permissions.deny 阻止讀取敏感檔案。

常見寫法:

{
  "permissions": {
    "deny": [
      "Read(./.env)",
      "Read(./.env.*)",
      "Read(./secrets/**)",
      "Read(./credentials/**)"
    ]
  }
}

但這只是 Claude Code 工具層的限制。

如果你允許 Bash,子程序仍可能透過 shell 讀取檔案。比如一個指令碼、測試或第三方工具可能自己讀取 .env

敏感檔案治理至少有四層:

  • permissions.deny:阻止 Claude 的 Read / Edit 等工具直接訪問。
  • Bash 許可權規則:限制危險命令。
  • Sandbox:作業系統層限制 Bash 子程序讀寫。
  • 系統檔案許可權:從根上限制誰能讀。

不要把 deny 當沙盒Read(./.env) 能防 Claude 直接讀,不等於所有命令程序都讀不到。高敏感專案要同時考慮 sandbox 和系統許可權。

9. Managed settings:組織級強制策略

個人使用者可以先跳過這一節,但團隊和企業必須懂。

Managed settings 常見下發方式:

  • Server-managed settings:Claude.ai admin console 下發。
  • macOS MDM:com.anthropic.claudecode managed preferences domain。
  • Windows policy:HKLM\SOFTWARE\Policies\ClaudeCode
  • 檔案式 macOS:/Library/Application Support/ClaudeCode/
  • 檔案式 Linux / WSL:/etc/claude-code/
  • 檔案式 Windows:C:\Program Files\ClaudeCode\

Managed 適合強制:

  • 停用 bypass permissions。
  • 限制登入組織。
  • 限制可用模型。
  • 限制 MCP server。
  • 限制外掛 marketplace。
  • 只允許 managed permission rules。
  • 只允許 managed hooks。

例如組織級禁止讀 secrets:

{
  "permissions": {
    "deny": [
      "Read(./.env)",
      "Read(./.env.*)",
      "Read(./secrets/**)"
    ],
    "disableBypassPermissionsMode": "disable"
  }
}

Managed 是組織邊界,不是個人偏好:一旦放到 managed,普通使用者和專案都不能覆蓋。不要把會隨專案變化的規則寫成全組織策略。

10. 怎麼確認設定生效

不要靠猜。

先看:

/status

它會顯示目前載入的 settings source、認證方式和關鍵狀態。如果某個 settings 檔案 JSON 錯誤,也能在這裡暴露。

許可權問題看:

/permissions

記憶和規則問題看:

/memory

安裝和環境健康看:

claude doctor

設定排障順序:

/status 看 settings 檔案是否真的被載入

不要憑感覺。先確認 source 列表裡出現你改的那個檔案,再討論欄位是不是寫對。

檢查 JSON 結構

JSON 語法錯誤(多/少逗號、引號不閉合)會讓整個檔案被忽略;schema 紅線只是提醒,未必是真錯。

看 scope 和優先順序

你改的是 user,但 project 或 managed 已經寫了同名規則就會覆蓋。優先順序:managed > 命令列 > local > project > user。

檢查陣列合並

permissions.allow / sandbox.allowWrite / enabledPlugins 等陣列跨 scope 是拼接去重,不是替換。空陣列通常清不掉低優先順序。

按能力繼續定位

許可權相關 → /permissions;記憶相關 → /memory;安裝/環境相關 → claude doctor

重開 session 驗證

某些欄位(如 defaultModeautoUpdatesChannel)只在新會話生效。改完先 exit 再 claude 進。

排障口訣:先確認檔案被載入,再確認誰覆蓋誰,最後才看具體欄位是不是寫錯。

11. 常見坑

  • 團隊規則寫進 user:只有你生效,別人復現不了。應放 project。
  • 本機路徑寫進 project:別人 clone 後失效。應放 local。
  • 金鑰寫進 settings:可能洩露到儲存庫或記錄。應放憑據系統 / secret。
  • 用空陣列想清掉別的 scope(作用域):結果仍然合併。應使用 deny 或 managed。
  • 不看 /status:容易誤判設定沒生效。先看 source。
  • 忽略 managed:反覆改 user 也無效。找管理員或看 policy。
  • 把專案規則全寫 JSON:難讀、難維護。寫 CLAUDE.md
  • 共享 ~/.claude.json:會洩露會話和狀態。只共享專案檔案。

12. 本章自檢

試著用自己的話回答:

  1. 為什麼寫設定前要先判斷這條規則屬於誰?對應 §1-§2。
  2. managed、local、project、user 的優先順序是什麼?對應 §3。
  3. 為什麼空陣列通常不能清掉低優先順序 scope 的 allow?對應 §4。
  4. .claude/settings.json.mcp.jsonCLAUDE.md 分別適合放什麼?對應 §5-§7。
  5. 為什麼 permissions.deny 不能替代 sandbox?對應 §8。

過關標準:你能拿一條真實設定,判斷它應該放 user、project、local 還是 managed,並能用 /status 解釋它為什麼生效或沒生效。

官方來源

接下來去哪

如果只記一個判斷:設定不是把所有開關寫進一個 JSON,而是把個人、團隊、本機和組織邊界寫到正確的 scope(作用域)裡。

本頁目錄