Claude Code Version Pinning via Managed Settings: What requiredMinimumVersion Means for Enterprise Operator Governance

Claude Code now refuses to launch when its version falls outside an operator-defined range. requiredMinimumVersion and requiredMaximumVersion managed settings let teams lock their entire dev fleet to approved Claude Code builds — no voluntary upgrades, no accidental drift.

Published via GitHub

Archive item produced with AI assistance from the cited source and published without individual review. Editor of record: Joe Werner.

Diagram showing a version range gate rejecting a Claude Code build that falls outside the operator-defined minimum and maximum bounds

When a critical coding-agent update ships at 2 a.m. and a junior engineer pulls it the next morning, the blast radius is not just their local environment — it can break prompt-parsing assumptions, permission-rule behavior, and hook contracts across your entire fleet. Claude Code's June 4 release addresses this class of operational risk head-on by introducing requiredMinimumVersion and requiredMaximumVersion managed settings: an administrator-controlled version range that the agent binary checks before it will start.

What happened

The June 4 Claude Code release (GitHub release notes) introduced several features aimed at enterprise operators:

  • requiredMinimumVersion and requiredMaximumVersion managed settings. If a user's installed Claude Code version falls outside the configured range, the agent refuses to start and displays the approved version range, directing the user to upgrade or downgrade to a compliant build.

  • /plugin list command. Operators and users can now enumerate installed plugins with --enabled/--disabled filters, providing visibility into what extensions are active in a given session.

  • Hook additionalContext support. Stop and SubagentStop hooks can now return hookSpecificOutput.additionalContext to inject feedback into Claude mid-turn without the response being classified as a hook error — giving operators programmatic control over agent reasoning loops.

  • stdio MCP session-ID parity. stdio MCP servers now receive the same CLAUDE_CODE_SESSION_ID as hooks and Bash commands during --resume, fixing a trace-correlation gap that broke observability pipelines relying on session-scoped spans.

  • Multiple bug fixes affecting claude -p hanging on backgrounded processes, Bedrock/Vertex/Foundry authentication under CI=true, Bazel/EDR $TMPDIR override, Windows EEXIST errors on OneDrive paths, and org-managed permission rules not loading on fresh config directories.

Why it matters for AI engineering teams

Coding agents are not static CLI tools. They ship fast — Claude Code has averaged roughly one release per business day in 2026 — and each release can alter hook behavior, permission-rule precedence, MCP timeout semantics, or subagent dispatching logic. For a team of five engineers, tracking those changes manually is annoying but manageable. For a 200-person org with CI pipelines, shared MCP servers, and compliance hooks, uncontrolled version drift is an incident waiting to happen.

The core problem requiredMinimumVersion solves: before this release, the only way to enforce a Claude Code version across an organization was through external endpoint-management tooling — device-level package pinning, npm install -g @anthropic-ai/claude-code@2.1.157 in provisioning scripts, or contractual SLAs on "don't update until I say so." None of these are enforceable at the agent level. A developer who runs claude update on their own bypasses every external control silently.

Now the agent itself enforces the range. If the managed settings file (distributed via MDM, enterprise config, or org-level policy) declares requiredMinimumVersion: "2.1.157" and requiredMaximumVersion: "2.1.160", any Claude Code binary outside that range simply will not start.

The operator angle

Version pinning as a routing-governance primitive

For teams routing Claude Code traffic through an AI gateway — for budget tracking, provider failover, or compliance logging — the agent version matters more than most operators realize. Claude Code release notes regularly document changes to:

  • Permission-rule matching logic. The June 3 release fixed WebFetch domain rules and Windows path backslash matching. If your gateway enforces request-scoped access policies via Claude Code's managed settings, a version mismatch means the policy may not apply.

  • Hook contract behavior. The additionalContext change in this release fundamentally alters the Stop-hook return-value contract. A hook written for 2.1.155 that returns output text will behave differently on 2.1.160 — the same return value now gets injected as context rather than being logged as an error.

  • MCP timeout semantics. The June 3 and 4 releases both adjusted MCP per-server timeout handling. If your gateway relies on MCP server connections to proxy tool calls, a version mismatch between your CI runner and a developer's local install means different timeout behavior for the same task.

Version pinning lets operators declare: "Our hooks, MCP servers, and managed settings are validated against Claude Code 2.1.157–2.1.160. Anything outside that range is unsupported."

additionalContext closes the hook-feedback loop

The second operator-relevant change in this release is hookSpecificOutput.additionalContext. Before this release, a Stop hook that wanted to give Claude corrective instructions ("retry with a different tool" or "the test failed because X — try Y") had to emit output that Claude would interpret as a hook error, potentially triggering error-recovery flows.

Now, Stop and SubagentStop hooks can return structured additionalContext that Claude receives as mid-turn feedback — not as an error. This is significant for operators building approval workflows, tool-allowlist enforcement, or post-action audit hooks: the hook can now influence Claude's next step without the response being classified as an exception.

/plugin list for fleet visibility

The /plugin list command sounds minor, but for operators managing shared Claude Code configurations across a team, it solves a real inventory problem. Before this release, the only way to know which plugins were active in a user's session was to ask them — or to parse their config files remotely. The --enabled/--disabled filters let an operator script a simple check: claude /plugin list --enabled --json as part of a compliance audit or onboarding verification.

Decision framework: when to use version pinning

Use requiredMinimumVersion / requiredMaximumVersion when:

  • Your team relies on specific hook behavior or managed-settings features that changed between releases.
  • You have MCP servers, approval workflows, or gateway integrations validated against a specific Claude Code version range.
  • Compliance requires reproducible agent behavior across a development fleet.
  • You are testing a new Claude Code release in staging before rolling it to production.

Avoid overly narrow ranges (e.g., pinning to a single patch version) unless you have a fast validation pipeline — the release cadence is aggressive enough that a two- or three-version window is usually sufficient.

What to watch

  • Managed settings distribution. Anthropic has not yet published a dedicated managed-settings guide covering the new version-range fields. Until that ships, operators should check code.claude.com/docs/en/managed-settings and the GitHub release notes for configuration syntax.
  • Hook contract stability. The additionalContext field is additive today, but operators should pin their Claude Code version to validate that hook return-value parsing does not change again in a subsequent release.
  • CI integration. Teams running claude -p in CI pipelines (especially on Bedrock/Vertex/Foundry with CI=true) should test the auth fix included in this release — the previous behavior silently failed when no ANTHROPIC_API_KEY was set, even when a Bedrock or Vertex credential was available.

Teams routing Claude Code traffic through an AI gateway for budget tracking, provider failover, or compliance logging now have a native enforcement mechanism to ensure every developer on the fleet is running a gateway-validated version — no external endpoint-management tooling required.

Help & contact