Claude Code enforceAvailableModels Closes the Default-Model Governance Gap in Managed Settings

Claude Code v2.1.175 adds enforceAvailableModels, a managed setting that constrains the Default model to your availableModels allowlist and prevents project or user settings from widening it — closing a silent governance gap for enterprise teams.

TheRouter Newsroomvia Anthropic
A clean architectural diagram showing a managed settings layer locking a model allowlist gate over Claude Code default model resolution paths

Claude Code v2.1.175, released this week, adds a single new managed setting — enforceAvailableModels — that resolves a real governance gap teams have been working around since the availableModels allowlist was introduced.

What happened

Until this release, the availableModels managed setting in Claude Code let operators define a list of approved model IDs. But the setting had two escape routes that most teams did not realize existed:

  1. The Default model alias was not bound by the allowlist. If an organization's Default model resolved to, say, Opus 4.8, and that model was not in the availableModels list, the session would still use Opus 4.8 — the allowlist only blocked explicit /model picker selections, not the Default resolution path.
  2. Project and user settings could widen the allowlist. A developer could add a model to their .claude/settings.json or ~/.claude/settings.json that the managed allowlist had intentionally excluded, and Claude Code would accept it.

With enforceAvailableModels: true in the managed settings layer, both escape routes are closed. The Default model now falls back to the first allowed model in the list if its resolved target is disallowed. And project or user settings can no longer extend the managed availableModels list — the managed layer is now a ceiling, not a floor.

Why it matters for AI engineering teams

Enterprise teams enforce availableModels for two main reasons: cost control (preventing access to higher-cost model tiers) and compliance (ensuring all LLM traffic flows through approved, audited models, often required by data-processing agreements or internal AI governance policies).

The pre-v2.1.175 gap meant that a managed allowlist of ["claude-sonnet-4-6", "claude-haiku-4-5"] would still let sessions land on Opus or Fable 5 via the Default path — typically the most expensive tier on Enterprise pay-as-you-go accounts. Audits would surface the spend but not always flag the root cause.

More critically: compliance teams relying on availableModels to restrict which models process sensitive data now have a stronger guarantee. The Default fallback path was always the highest-risk exemption because it was invisible to most developers — they never explicitly selected a model, so they never noticed they were outside the allowlist.

The router/operator angle

For teams routing Claude Code sessions through an AI gateway — whether via ANTHROPIC_BASE_URL pointing to a proxy or using a native Bedrock/Vertex/Foundry deployment — enforceAvailableModels has an important interaction with how the gateway receives model IDs.

When the setting is enabled and Default resolves to the first allowed model, the model ID sent upstream is deterministic: it will always be the first entry in availableModels. This means:

  • Routing tables become predictable. You no longer need to account for Default resolving to different model IDs depending on account type (Opus on Max/Team Premium Enterprise, Sonnet on Pro/Team). The gateway will always see the managed list's first entry.
  • Spend attribution is cleaner. Any token usage attributed to a disallowed model after enforceAvailableModels is enabled is a configuration error, not a policy bypass — easier to audit.
  • The allowlist interacts with fallbackModel. If your managed settings define both availableModels and fallbackModel, confirm that the fallbackModel is also in the allowlist. An out-of-list fallback model would now be blocked by enforceAvailableModels, which could cause sessions to fail rather than fall back. Test this configuration in a staging environment before deploying.

One nuance operators should know: enforceAvailableModels is a managed-layer-only setting. It cannot be set in project or user scope — by design. If it could be disabled at project level, it would undermine its own purpose.

What to check before enabling this setting

A few pre-flight steps for teams ready to enable enforceAvailableModels:

  1. Audit your current Default model resolution. Run claude /status or check claude --help model in a representative session to see what model Default currently resolves to. If it is not in your availableModels list, sessions will silently switch to the first allowed model after you enable the setting.
  2. Order your allowlist by intent. The first entry in availableModels becomes the effective Default when enforceAvailableModels is true and Default would otherwise be disallowed. Treat list order as a policy decision.
  3. Check your fallback chain. Any fallbackModel configured by users or projects must also be in the managed allowlist, or it will be blocked.
  4. Coordinate with your gateway routing tables. If your AI gateway routes based on model ID, ensure the expected model ID (your first allowed model) is mapped to the correct upstream provider/deployment.

What TheRouter users should watch or try

Teams routing Claude Code through TheRouter with managed settings for model governance should add enforceAvailableModels: true to their managed settings configuration alongside availableModels. This closes the Default-model bypass and makes model ID visible and deterministic at the gateway layer — a meaningful upgrade for teams using TheRouter's routing rules to separate Sonnet-tier from Opus-tier traffic by cost or provider.

The setting is available starting Claude Code v2.1.175. Run claude update to upgrade.

Customer Support