心 智 七 篇 · Seven Mental Models
← Knowledge Atlas · 概念

设置作用域层次(Settings Scope Hierarchy)

设置作用域五级层次:托管 > CLI > 本地项目 > 共享项目 > 用户,deny 跨层封锁语义
概念 · SETTINGS SCOPE HIERARCHY · 五级优先级 · 安全边界架构

设置作用域层次

Settings Scope Hierarchy — 五级优先级决定哪个配置源生效

任意层级的 deny 不可被低优先级的 allow 覆盖。五级从高到低:托管设置(MDM/OS)→ 命令行参数 → 本地项目(.local.json)→ 共享项目(checked-in)→ 用户全局设置。普通设置高优先级覆盖低优先级,Deny 不服从这个规则。

1托管设置 ManagedMDM/OS 策略最高,不可覆盖
2命令行参数—allowedTools 等临时会话覆盖
3本地项目设置.claude/settings.local.jsongitignored,个人开发
4共享项目设置.claude/settings.jsonchecked-in,团队共享
5用户全局设置~/.claude/settings.json个人默认
特殊规则
auto 模式特殊
分类器不读取共享项目设置(防止被 compromise 的 repo 注入恶意 allow 规则)
托管专属设置
allowManagedPermissionRulesOnly 等——只在托管层生效,其他层设置无效
→ Permission Modes · Permission Rules Hierarchy · Permission SystemAnthropic Claude Code (2024)

设置作用域层次(Settings Scope Hierarchy)

定义

Claude Code 的设置作用域层次是一个五级优先级系统,决定当多个配置源对同一设置有不同值时,哪个生效。层级越高,优先级越高,且任意层级的 deny 不可被低优先级的 allow 覆盖

五级层次

优先级层级文件 / 来源适用场景
1(最高)托管设置(Managed)MDM/OS 策略、托管文件组织级强制约束
2命令行参数--allowedTools--disallowedTools临时会话覆盖
3本地项目设置.claude/settings.local.json(gitignored)开发者个人项目配置
4共享项目设置.claude/settings.json(checked in)团队共享的项目配置
5(最低)用户设置~/.claude/settings.json个人全局默认

关键语义:deny 的跨层封锁

普通设置遵循”高优先级覆盖低优先级”,但 deny 规则有特殊语义

任意层级的 deny 都封锁该工具,不论其他层级是否有 allow 规则。

例如:

  • 共享项目设置 deny 了 Bash(git push *),用户设置的 allow 无法覆盖
  • 托管设置 deny 了 Bash--allowedTools Bash 命令行参数也无法覆盖

这确保了组织安全策略无法被个别开发者绕过。

托管设置(Managed Settings)

托管设置是层次顶端,通过 MDM/OS 级策略或托管文件下发,无法被任何其他层级(包括命令行参数)覆盖。这是企业部署的安全基础。

托管专属设置(只在托管层生效,其他层设置无效):

设置功能
allowManagedPermissionRulesOnly阻止用户/项目定义权限规则,仅托管规则生效
allowManagedHooksOnly阻止加载用户/项目/插件钩子
allowManagedMcpServersOnly仅允许托管 MCP 服务器(deny 仍合并)
allowManagedReadPathsOnly(沙箱)仅允许托管 allowRead 路径
allowManagedDomainsOnly(沙箱网络)仅允许托管 allowedDomains
forceRemoteSettingsRefresh启动时必须成功获取最新托管设置才放行
strictKnownMarketplaces控制用户可添加的插件市场

auto 模式的特殊作用域

auto 模式autoMode 分类器配置有独立的作用域规则

  • 读取:用户设置 + .claude/settings.local.json + 托管设置
  • 读取:共享项目设置(.claude/settings.json

原因:共享项目设置是 checked-in 的,被 compromise 的 repo 可能注入恶意 allow 规则。分类器排除这个来源是预防供应链攻击。

配置灵活性与安全边界

层次设计允许组织在不同粒度实施策略:

组织级(托管): 禁止 bypassPermissions 模式,强制审计日志

项目级(共享): 允许 npm run * 和 git commit *,拒绝 git push *

个人级(本地/用户): 允许自己常用的工具,定制 autoMode.environment

开发者可以在组织约束内自定义,但无法突破组织设置的边界。

Working Directories 与作用域

--add-dir 添加额外工作目录扩展了文件访问,但不是配置根目录。例外:

  • .claude/skills/(技能,实时加载)
  • enabledPluginsextraKnownMarketplaces(插件设置子集)

其余配置(子 agent、hooks、output styles 等)仍只从当前工作目录和父目录发现。

相关概念

References

  • sources/anthropic_official/claude-code-permissions.md