the short answer
Usually one of five reasons: a higher-priority managed source is non-empty and wins, the session runs somewhere that reads a different source (cloud sessions, Cowork, Claude Tag), a provider path skips server-managed policy, the rule matches text the agent did not write, or a version-specific bug. Check which source is active, test on every surface your developers use, and add enforcement at the hook level on every machine.
- First check
/statusshows which managed source is active- Tier rule
- By default the first source with a policy wins;
managedSourcesBehavior: "merge"(v2.1.242+) combines them - Provider path
- Server-managed settings are skipped with Bedrock, Vertex or a custom base URL, unless delivered through a Claude apps gateway
- Matching
- Bash rules match command text; compound commands are split, but other spellings get through
- Status
- GitHub issue states as of October 21, 2026
Five Reasons, from Most to Least Common
- The wrong source is active. Managed sources rank server-managed, then MDM (plist or HKLM), then the managed file, then HKCU. By default (
"first-wins") the first source with a policy wins for most keys and the others are ignored, so adding one console setting can silently replace a file-based policy. Since v2.1.242,managedSourcesBehavior: "merge"combines them; a few keys, such asenv, are read from every admin source either way. - The session reads a different source. The terminal, the VS Code and JetBrains extensions, the desktop app’s Code tab and Agent SDK sessions read the device’s managed settings. Anthropic-hosted cloud sessions do not read the device file and need server-managed settings; Claude Tag sessions do not receive server-managed settings; Cowork is configured separately.
- The provider path skips server-managed settings. Anthropic documents that setting
CLAUDE_CODE_USE_BEDROCK,CLAUDE_CODE_USE_VERTEXor a non-defaultANTHROPIC_BASE_URLskips the server-managed fetch, unless settings are delivered through a Claude apps gateway. - The rule never matched. A deny rule matches the command text Claude writes. Compound commands are split and deny rules apply to each part, but
bash -c, absolute paths (/bin/rm), scripts andMakefiletargets produce text the rule does not describe. - A version bug. Several reports describe
disableBypassPermissionsModenot blocking--dangerously-skip-permissionson specific versions.
Reported Gaps and Their Status
“Closed as not planned” often means a stale-issue bot closed it, not that it was fixed or that it still reproduces. Test on your own versions. One reporter summarized the frustration bluntly in #82704: managed settings are “trivially bypassable in most environments, especially in an Agent-powered world.”
| Report | What users saw | Status on Oct 21, 2026 |
|---|---|---|
| #44642, #86253 | disableBypassPermissionsMode in managed settings did not block --dangerously-skip-permissions | Closed as not planned |
| #67996 | VS Code extension ignored managed settings on macOS while the CLI enforced them | Closed as not planned |
| #40495 | Cowork sessions ignored user hooks and managed settings | Open |
| #30953 | Desktop did not honor managed-settings permissions | Closed as completed |
| #49932 | Org-level policies skipped when ANTHROPIC_BASE_URL is set | Closed as not planned by the stale bot; the reporter says it is still present |
| #75149, #70184 | Managed sources do not merge; no machine source that always wins | Closed as not planned (a "merge" option has since shipped in v2.1.242) |
| #21460 | PreToolUse hooks not applied to subagent tool calls | Closed as completed: maintainers could not reproduce it, and the docs say settings, managed and plugin hooks apply inside subagents |
| #30519 | Permission allow patterns not matching compound commands as users expected | Open |
Diagnose It on One Machine
- Run
/statusinside Claude Code and read theSetting sourcesline. - Check every managed source on the machine: the server-managed console, the MDM profile or registry key, and the managed file. Unless you set
"merge", only the first one with a policy applies for most keys. - Check for
ANTHROPIC_BASE_URL,CLAUDE_CODE_USE_BEDROCKandCLAUDE_CODE_USE_VERTEXin the developer’s environment. - Reproduce the blocked action in the terminal, then in each IDE extension and the desktop app your developers use.
- Try the action indirectly: through
bash -c, a script, and an absolute path. If any of those run, the rule is matching text, not effect.
Make Enforcement Independent of the Source
Managed settings remain the right way to lock Claude Code’s own configuration; keep them. For rules that must hold everywhere, add enforcement at the hook level on the machine. On a machine configured for its daemon, Failproof evaluates every gated tool call there, fails closed if the daemon is unreachable, and applies the same policy to Codex, Cursor and Copilot CLI sessions on the same laptop. On Codex, the hooks only run once trusted: installed through sudo into /etc/codex/config.toml, or approved in codex.
- Use one managed source per fleet, or set
managedSourcesBehavior: "merge", so the source rule never surprises you. - Do not set
allowManagedHooksOnlyunless your enforcement hook is itself delivered in managed settings: it blocks the user and project-scope hooks thatfailproofai configinstalls. Delivering the Failproof hook through managed settings is not a documented install path; talk to us about a managed deployment. - Set
"onFailure": "block"(v2.1.295+) on any managed policy hook, so a crash or timeout does not let the call through. - Write effect-level policies (Terraform destroy, DNS deletes,
.envreads) once in the policy layer, not as Bash patterns. - Re-test after every Claude Code upgrade, and watch Observe → policy for unguarded actions on each machine.
FAQ
Is `disableBypassPermissionsMode` safe to rely on?
Set it as permissions.disableBypassPermissionsMode: "disable", and verify it on your version by launching with --dangerously-skip-permissions. Several users reported it not taking effect on specific versions in 2026.
Why did adding a console setting break our file-based policy?
By default managed sources do not merge: once the server-managed source delivers a policy key, it becomes the active source for most keys and the file is ignored. Set managedSourcesBehavior: "merge" (v2.1.242+) or use one source.
Does Failproof replace managed settings?
No. Keep managed settings for harness configuration; use Failproof for the policy logic that must hold across surfaces and agents.
Sources
Checked against the sources below on October 21, 2026. Harness settings, hook capabilities and cloud features change between versions.
- Claude Code docs: Deploy managed settings
- Claude Code docs: Configure server-managed settings
- Claude Code docs: Configure permissions
- Claude Code docs: Hooks reference
- anthropics/claude-code #44642: disableBypassPermissionsMode in managed-settings.json has no effect
- anthropics/claude-code #86253: disableBypassPermissionsMode does not block --dangerously-skip-permissions
- anthropics/claude-code #67996: VS Code extension ignores managed settings on macOS
- anthropics/claude-code #40495: Cowork sessions ignore user hooks and managed settings
- anthropics/claude-code #30953: Claude Code Desktop should honor managed-settings.json
- anthropics/claude-code #49932: Organization-level policies bypassed when ANTHROPIC_BASE_URL is set
- anthropics/claude-code #75149: Merge managed settings sources (server, MDM, file)
- anthropics/claude-code #70184: Machine-level policy that cannot be overridden by server-managed settings
- anthropics/claude-code #82704: Managed / remote settings are trivially bypassable
- anthropics/claude-code #21460: PreToolUse hooks not enforced on subagent tool calls
- anthropics/claude-code #30519: Permissions matching is fundamentally broken
- Failproof AI docs: Agent harnesses and enforcement capability
- Failproof AI docs: Failure behavior
- Failproof AI docs: Policy decisions