限制模型选择
用 availableModels 限制可选模型、各界面的覆盖范围、enforceAvailableModels、deniedModels 与 availableModelsMatch、合并规则,以及 Enterprise 的组织模型限制、组织默认模型和努力上限。
版本要求以官方为准。
availableModels 白名单
管理员在托管或策略设置里用 availableModels 限制用户能选哪些模型。条目可以匹配模型家族(如 sonnet)、版本前缀(如 claude-sonnet-4-5)或完整模型 ID(如 claude-sonnet-4-5-20250929)。版本前缀也匹配用另一段延伸它的后续模型 ID,所以 claude-fable-5 同时允许 Fable 5 和 Fable 5.1,而 claude-fable-5-1 只允许 Fable 5.1。示例:{"availableModels": ["sonnet", "haiku"]}。设置后,白名单适用于用户能指定模型的所有地方:
- 主会话模型:
/model、--model、ANTHROPIC_MODEL、model设置、ANTHROPIC_DEFAULT_MODEL,以及恢复会话时恢复的模型。 - 别名解析:
ANTHROPIC_DEFAULT_OPUS_MODEL、..._SONNET_...、..._HAIKU_...、..._FABLE_...不能把允许的别名重定向到列表之外的模型。 - Fast 模式:
/fast在会不得不隐式切到列表之外的 Opus 模型时拒绝切换,提示 "is not in your organization's allowed models"。 - 子智能体和队友模型:子智能体前置信息的
model、Agent 工具的model参数、智能体团队队友模型、CLAUDE_CODE_SUBAGENT_MODEL,以及 v2.1.197 及更早的/agents向导里的模型选择器。 - Skill 和命令模型:Skill 与命令的
model前置信息。 - Advisor 模型:配置的
advisorModel设置和--advisor标志。 - 后台智能体模型:派发选择器里选的模型。
在 Anthropic API 和 Claude Platform on AWS 上,opus、sonnet、haiku、fable 家族别名在白名单允许该模型时解析为它的常规模型;白名单阻止该模型时,Claude Code 替换为白名单所允许的该家族最新版本,并显示点名所请求与替换模型的通知。例如 ["sonnet", "claude-opus-4-6"] 时,/model opus 和 --model opus 都选 Claude Opus 4.6(v2.1.205 之前最新版本在列表之外的别名会像其他被阻止的选择那样被拒绝或替换,即使列表允许更老的版本)。白名单没有允许该别名家族的任何版本时,别名按下面其他被阻止的选择处理。
其他被阻止的选择按模型是在哪里设的处理:
/model:拒绝切换并报错。--model、ANTHROPIC_MODEL或model设置:启动时替换并显示点名所请求与替换模型的警告,会话以默认模型启动。ANTHROPIC_DEFAULT_MODEL:忽略该变量。- 子智能体或队友的覆盖:在后备模型上运行而不是让请求失败;交互会话里替换子智能体模型时会警告你(队友的后备不报告);上面的最新允许版本替换适用时,被阻止的家族别名走那条路径(v2.1.222 之前别名在每个提供商上都像其他被阻止的值那样回退)。
- Skill 或命令的覆盖:忽略该覆盖(包括被阻止的家族别名),Skill 或命令在会话模型上运行;在子智能体里运行的 Skill 或命令则按子智能体的行为。
advisorModel设置:本会话禁用 advisor。--advisor标志:启动时报错退出;在后台会话里则不带 advisor 启动会话而不是退出。
被排除的模型从 /model 选择器隐藏;列表里没有内置选择器行的完整模型 ID(如列表固定的较旧版本)以自己带标签的行出现在选择器里,除非 Claude Code 用 modelPicker 阵容替换了内置选项(v2.1.199 之前只能键入 /model <id> 选择)。Claude Code 代你做的模型更改也同样检查:后备模型链里白名单之外的条目被丢弃;计划模式升级(如 opusplan 升到被排除的模型)在 Anthropic API 和 Claude Platform on AWS 上用升级家族的最新允许版本,在使用提供商特定模型 ID 的提供商上以及没有允许版本时跳过升级、在会话模型上继续规划;自动模型降级的目标被排除时不运行降级,被标记的请求以拒绝结束;自动模式分类器的 Claude Sonnet 5 默认只在白名单允许 Sonnet 5 时适用,被排除时分类器在会话模型上运行(会话在 Fable 模型上时改用 Opus 模型;在 Anthropic API 之外的提供商上,该 Opus 后备在提供商默认的 Opus 模型上运行且不查白名单;需要 v2.1.210+);启用 Fast 模式在之后会运行的模型处于白名单之外时被拒绝。
各界面的覆盖范围
每个界面都强制执行它收到的白名单,区别在于哪种交付机制能到达哪个界面:
| 交付机制 | CLI 和 IDE | 桌面本地会话 | Web、移动和云会话 | Agent SDK 与非交互 | Cowork |
|---|---|---|---|---|---|
| 管理控制台的服务端托管设置 | 强制 | 强制 | 强制(Claude Tag 会话除外) | 强制 | 远程 Cowork 会话:服务端检查模型;用户机器上:不交付 |
| MDM 或托管设置文件 | 强制 | 强制 | Anthropic 托管环境里不交付;自托管环境里按托管来源合并规则从运行器镜像强制 | 强制 | 部署处强制 |
- 云会话(含从桌面应用启动的)默认运行在 Anthropic 托管的 VM 上,部署到你设备的设置到不了它们,所以通过服务端托管设置交付白名单;路由到自托管环境的会话运行在你自己的算力上,也读取运行器镜像里的托管设置文件。云会话中途切换模型时,请求的模型被白名单排除就会被拒绝;服务端托管设置里的
availableModels非空时,服务端拒绝在 claude.ai/code 或桌面应用上以列表排除的模型启动云会话。 - Claude Tag 会话运行在云环境但不接收服务端托管设置(自托管环境里仍读运行器镜像里的托管设置文件);给那些会话设置模型见 Claude Tag 管理员指南。
- Cowork(Claude 桌面应用里的智能体工作标签页)按设计不接收来自管理控制台的服务端托管设置;
availableModels非空且用户选了列表外的模型时,服务端拒绝该远程 Cowork 会话的模型;托管设置文件在会话运行处存在时对 Cowork 适用(远程 Cowork 会话运行在 Anthropic 托管的 VM 上,设备部署的文件不在那里)。 - Amazon Bedrock、Google Cloud 的 Agent Platform、Microsoft Foundry、Claude Platform on AWS 这类第三方提供商上的会话不接收服务端托管设置,所以在那里通过 MDM 或托管设置文件交付白名单。服务端托管交付还要求会话用符合条件的登录或密钥认证;只通过
apiKeyHelper脚本生成密钥的机群应通过 MDM 或托管设置文件交付白名单。桌面代码标签页还承载读取远程主机上托管设置文件的 SSH 会话。claude.ai 和桌面应用里的模型选择器会隐藏或灰显被组织白名单排除的模型,选择器状态只是对用户的便利,不强制白名单。
Default 选项与 enforceAvailableModels
按默认的前缀匹配,单独设 availableModels 会让 Default 选项仍停在账号的运行时默认值,直到你同时设置 enforceAvailableModels。如果该默认值是你打算限制的模型,就同时设 enforceAvailableModels,或者阻止该模型。availableModels: [] 时,具名模型选择被阻止,enforceAvailableModels 无效。
在托管设置里把 enforceAvailableModels: true 与非空 availableModels 一起设置,就把白名单扩展到 Default 选项(需要 v2.1.175+)。对账号上没有记录模型的成员,Default 选项解析为账号类型默认值,管理员设了组织默认模型时则为它;该模型不在白名单里时,Default 改为解析为 availableModels 里第一个命名了允许且可用模型的条目,/model 选择器的 Default 行显示该模型。这适用于到达默认值的每个地方:会话启动、在 /model 里选 Default、后备模型链里的 "default" 关键字,以及被排除的选择被丢弃时使用的后备。账号上记录的模型也要对照 availableModels 检查。仅当 availableModels 非空时 enforceAvailableModels 才重映射 Default;非空但没有条目解析为允许且可用的模型时,跳过强制并只在 --debug 下显示警告,所以在列表里保留至少一个保证可用的条目。两个键要一起部署在你交付的最高级托管来源里:默认 Claude Code 只读该来源,所以把这一对放在托管设置文件里,而管理控制台交付了任何设置时,它们会被忽略;在选择加入的合并模式下,Claude Code 仍忽略来自排名低于设置 availableModels 那个来源的 modelOverrides 映射。
完整控制用户运行的模型
model 设置只是初始选择,不是强制:它决定会话开始时的活动模型,但用户仍可打开 /model 选 Default,它解析为系统运行时默认值,与 model 无关(除非 enforceAvailableModels 或阻止特定版本的键适用)。想完整控制,组合这些设置:availableModels 限制可切换的具名模型;enforceAvailableModels 让 Default 不能解析到列表之外;deniedModels 和 availableModelsMatch 阻止 availableModels 条目本来会允许的特定版本;model 设定初始选择;ANTHROPIC_DEFAULT_*_MODEL 控制各别名解析到什么以及账号类型默认值用哪个版本。下面的例子让用户从 Sonnet 4.5 开始,选择器限于 Sonnet 和 Haiku,并确保 Default 解析到白名单里的模型而不是套餐默认:
{
"model": "claude-sonnet-4-5",
"availableModels": ["claude-sonnet-4-5", "haiku"],
"enforceAvailableModels": true,
"env": {
"ANTHROPIC_DEFAULT_SONNET_MODEL": "claude-sonnet-4-5"
}
}没有 enforceAvailableModels 或 env 块时,在选择器里选 Default 的用户得到运行时默认值,而不是 model 里固定的版本。两者覆盖不同范围:enforceAvailableModels 让 Default 服从白名单,env 块固定被允许的别名(如 sonnet)解析到哪个版本。只需限制模型家族时单用 enforceAvailableModels,还需固定具体版本时再加 env 块。
合并规则与 Mantle 模型 ID
托管设置定义了 availableModels 时,只有该列表生效(有自己列表的宿主平台除外):用户、项目、本地设置里的条目不能扩展它,Claude Code 也从不跨托管来源合并 availableModels;否则用户、项目、本地设置里的列表像其他数组设置那样拼接并去重(v2.1.175 之前低优先级范围的条目会合并进托管列表而不是被它替换)。在有效列表内,点名某个家族里具体模型的条目(版本前缀或完整模型 ID)会禁用该家族的通配条目:["sonnet", "claude-sonnet-4-5"] 只允许 Sonnet 4.5 的各版本,而不是每个 Sonnet 模型。启用 Amazon Bedrock Mantle 端点时,availableModels 里以 anthropic. 开头的条目作为自定义选项加入 /model 选择器并路由到 Mantle 端点;Mantle ID 内嵌家族名,算作具体条目并禁用该家族的通配,所以与任何 Mantle ID 并列时,要把想保持可选的版本前缀或完整 ID 也列出来。
阻止特定模型或版本
claude-opus-5 这样的 availableModels 条目,在 Claude Code 支持后也会允许延伸它的后续发布(如 Opus 5.5)。两个托管设置键让你把某个发布挡住,都需要 v2.1.283+:
deniedModels:列出要阻止的模型。列出的模型即使availableModels允许也被阻止,没有白名单时该键也生效;没有条目阻止的发布仍被允许。availableModelsMatch:设为"exact",则availableModels里每个模型 ID 只允许它点名的那个版本;某个已列模型 ID 的更新版本在你把它加入列表之前一直被阻止。
更早的版本忽略这两个键,所以同时设 requiredMinimumVersion 阻止那些版本启动。例如允许 Opus 与 Sonnet 并阻止各种写法的 Opus 5.5(含带日期和提供商特定 ID):{"availableModels": ["opus","sonnet"], "deniedModels": ["claude-opus-5-5"]}。被阻止的模型(deniedModels 点名的,或 "exact" 列表没列的),在白名单适用的每个地方都当作被阻止的选择:从 /model 选择器隐藏,/model <名称> 拒绝它;用 --model、ANTHROPIC_MODEL 或 model 设置点名被阻止的模型 ID 时,Claude Code 在启动时丢弃它并解析 Default 选项;Hook 或后台请求(如智能体 Hook 的 model 字段)点名被 deniedModels 阻止的模型时,该请求改在会话模型上运行。
Default 选项也遵循这两个键,无论是否设了 enforceAvailableModels:与非空 availableModels 一起设时,被阻止的默认值算作白名单之外的模型;否则会解析为被阻止模型的 Default 选项按顺序降级:同家族的最新允许版本;再依次试较低成本家族(Sonnet,然后 Haiku)的最新允许模型;availableModels 里第一个命名了允许模型的条目。都不允许时,以 Default 选项启动的会话拒绝启动并报出点名要修复的键的错误。"exact" 列表只在托管 availableModels 列表至少点名一个模型或家族时影响 Default 选项。这两个键只从托管设置读取:在用户、项目、本地设置或 --settings 里设置会被忽略并警告。
组织模型限制(Enterprise)
Claude Enterprise 套餐的组织管理员可以在 claude.ai 管理控制台里禁用单个模型来限制成员能运行什么。这个限制随账号的权益在 Claude Code 认证时交付,独立于设置里的任何 availableModels 列表,创建会话时服务端也独立强制同样的限制(需要 v2.1.187+)。它在成员登录或使用自己的 API 密钥时适用;组织范围的凭据(如组织服务密钥)不绑定用户,所以不适用。Claude Console 没有模型限制控制;没有 Claude Enterprise 的组织(包括成员通过 Anthropic API 认证的)改用托管设置里的 availableModels,并加 enforceAvailableModels 覆盖 Default 选项。
被限制的模型从 /model 选择器隐藏。用 --model、ANTHROPIC_MODEL 或 model 设置按名选它时,显示通知 Model "<name>" is restricted by your organization's settings. Using <model> instead.,会话以允许的模型启动;键入 /model <名称> 选被限制的模型被拒绝,会话保持当前模型。家族别名(如 opus)在组织允许该模型时解析为它的常规模型,组织限制了该模型时 Claude Code 替换为组织所允许的该家族最新版本;只有该家族每个版本都被限制时 /model <别名> 才被拒绝,而用 --model 等设定的别名在那种情况下仍在启动时被替换(v2.1.205 之前别名只按其最新发布版本被替换或拒绝)。限制可以按组织或按角色:在组织级禁用模型就对每个成员移除它;角色级访问给不同的自定义角色授予不同模型,持有多个角色的成员可以使用其中任何一个角色授予的模型;Haiku 模型始终可用、不能被禁用,所以每个成员至少保留一个可用模型;访问变更对新请求约一分钟内生效,/model 选择器在下次启动会话时反映。两种限制同时适用:模型必须既被 availableModels 允许又没被组织限制才可选。组织限制只到达 Anthropic API 上的会话和 LLM 网关部署;其他提供商用 availableModels。
组织默认模型(Enterprise)
Claude Enterprise 的组织管理员可以在管理控制台为整个组织或按自定义角色给 Claude Code 成员设置默认模型;设置后 Default 选项解析为该模型(需要 v2.1.196+)。/model 选择器的 Default 行显示组织默认的名称和「Org default」标签(无论是按组织还是按你的角色设的);角色默认覆盖该角色成员并优先于组织范围默认,你有多个角色设了不同默认时,适用能力最强的那个模型。组织默认是起点而不是限制,这些选择优先于它:--model 标志和 ANTHROPIC_MODEL;托管设置或 --settings 里的 model 值;你用户、项目、本地设置里的 model 值(包括用 /model 保存的)。
管理员也可以把组织默认配置为覆盖用户选择:开启覆盖后,它优先于用户、项目、本地设置里的 model,所以你用 /model 保存的模型只对当前会话生效,组织默认在下次启动回来;你的选择不同时,/model 显示 Your organization's default (<model>) applies on restart;--model、ANTHROPIC_MODEL、托管设置和 --settings 即使在覆盖开启时仍优先。覆盖只对有限的一组组织开放,可询问 Anthropic 客户团队。想限制成员能选什么,用组织模型限制或 availableModels。Claude Code 在启动时读取一次组织默认,所以管理员在会话中途更改的默认在下次启动生效;组织默认不覆盖用户选择时,管理员更改后的第一次交互式启动会从你的用户设置里清除一次 model 键以应用新默认(文件里其他内容不动,之后你用 /model 保存的模型被保留)。
组织默认在被采用前要经过这些限制检查:按默认的前缀匹配,availableModels 单独存在时不适用于组织默认,所以白名单之外的组织默认仍然适用;同时设了 enforceAvailableModels 时,白名单之外的组织默认也被重映射为第一个白名单条目;被组织模型限制对你的账号拒绝的组织默认,替换为其家族里最新的允许模型,或在该家族每个版本都被限制时替换为较低成本家族;被 deniedModels 或 "exact" 列表阻止的组织默认见上节;对你的账号根本不可用的组织默认被跳过,Default 选项按没有组织默认来解析。自 v2.1.199 起,组织默认与你的账号类型通常的默认属于不同模型家族时,/model 选择器为那个通常的家族保留单独一行,让你仍可为一个会话切回(v2.1.196 到 v2.1.198 缺这一行)。组织默认只到达用 Anthropic API 认证的会话;其他地方(包括 LLM 网关部署)改用托管设置里的 model 键。
组织努力上限
组织可以用两种方式限制努力等级:Claude Enterprise 套餐上,组织管理员设置按角色的努力上限;任何套餐、任何提供商(包括 Bedrock、Google Cloud 的 Agent Platform、Foundry)上,托管设置 maxEffortLevel 在客户端设上限;两者同时适用于某个模型时,较低的上限生效。Enterprise 管理员可以按自定义角色为每个模型设置最高努力等级,与角色级组织模型限制并列:高于上限的等级不在 /effort 选择器里提供,用 --effort 或 /effort 点名更高等级时按上限运行;交互会话和纯文本 --print 运行里有点名所请求与应用等级的警告,json 或 stream-json 输出或后台智能体里则静默截断。上限是按模型的,所以切换模型会改变可用等级;多个角色授予同一个模型时,最宽松的上限适用(需要 v2.1.195+)。努力上限与组织模型限制一起交付、到达同样的会话。