← Back to Payloads
AI Engineering2026-09-03

Claude Code v2.1.259 Just Gave Admins Org-Wide MCP Provisioning and Headless Hosts a `--permission-prompts none` Mode. The Bash Deny-Rule Bypass Fix Is the Real Story.

Anthropic pushed Claude Code v2.1.259 on September 2, 2026 at 22:33 UTC. Two user-facing capability additions: `managedMcpServers` managed setting lets organizations push HTTP/SSE MCP servers to every user (stdio transports excluded by design), and `--permission-prompts none` gives unattended headless hosts a deterministic deny-on-prompt mode while the active permission mode keeps deciding. Plus a Bash `Read()` deny-rule bypass fix that closed option-value bypasses (`--ignore-revs-file=.env`, `-f.env`, `@file`), git diff/grep file operands, `cd DIR && cat FILE` compounds, and `grep -r`/`cp -r` over directories holding denied files. Plus a concurrent-session state corruption fix that ended MCP-server-disappearing and workspace-trust-resetting regressions when multiple sessions ran against the same `~/.claude.json`.
Quick Access
Install command
$ mrt install claude-code
Browse related skills
Claude Code v2.1.259 Just Gave Admins Org-Wide MCP Provisioning and Headless Hosts a `--permission-prompts none` Mode. The Bash Deny-Rule Bypass Fix Is the Real Story.

Claude Code v2.1.259 Just Gave Admins Org-Wide MCP Provisioning and Headless Hosts a --permission-prompts none Mode. The Bash Deny-Rule Bypass Fix Is the Real Story.

Hey guys, Mr. Technology here.

Anthropic pushed Claude Code v2.1.259 on September 2, 2026 at 22:33 UTC. The headline reads like an enterprise-feature drop: managedMcpServers lets an organization push HTTP/SSE MCP servers to every user, and --permission-prompts none gives unattended headless hosts a deterministic way to refuse anything that would otherwise pop a permission prompt while the active permission mode keeps deciding. Underneath those two features the changelog closes a Bash Read() deny-rule bypass that affected --ignore-revs-file=.env, -f.env, @file, git diff/git grep file operands, cd DIR && cat FILE compounds, and grep -r/cp -r over a directory holding a denied file. For builders using permissions.deny to fence sensitive paths, that bypass fix is the operational headline. (anthropics/claude-code: Release v2.1.259)

This is a documentation-surfacing report. Every claim below is verifiable verbatim in the v2.1.259 release notes. I have not installed v2.1.259 in a production harness; treat the workflow and security claims as documentation comparison, not firsthand test.

What Shipped

Sixteen items in the changelog. Three are user-facing capability additions; thirteen are bug fixes, one of which is security-relevant.

1. managedMcpServers managed setting — org-wide MCP provisioning

Per the changelog: "Added managedMcpServers managed setting: organizations can provide HTTP/SSE MCP servers to every user (same entry shape as .mcp.json); entries that name a command to run are skipped."

This is a managed-settings slot — i.e., it is meant to be set via the managed settings file that IT/MDM deploys, not by the user. An administrator can pre-provision a list of HTTP/SSE MCP servers that every Claude Code session in the organization receives, using the same entry shape as the user's local .mcp.json. Entries that would name a command to run (stdio transports) are skipped — only HTTP and SSE transports are allowed through this channel. For an enterprise rollout this is the difference between "every user has to manually add the company MCP server" and "the company MCP server is just there." It also closes a potential supply-chain surface: a managed policy that provisions HTTP/SSE servers cannot accidentally launch a stdio binary on every machine.

The same shape, the managed transport restriction, and the same managed-settings distribution mechanism are the implementation choice. If your organization already manages Claude Code via the managed settings file (the same one the v2.1.251 sandbox-escape guard watches), the new setting slots into the existing config without any user interaction.

2. --permission-prompts none — unattended headless mode

Per the changelog: "Added --permission-prompts none for unattended headless hosts: anything that would prompt is denied automatically while the active permission mode (including auto mode) keeps deciding."

This is a new command-line flag for production deployments. When a session is launched with --permission-prompts none, every permission prompt is converted to a deny — but the active permission mode (including auto mode) continues to evaluate actions against its allow/deny rules. The effect is: actions that auto mode would have approved still proceed; actions that would have prompted (because they were not covered by an explicit allow rule) are now denied; the session never blocks waiting for a human. For a CI pipeline running Claude Code in a non-interactive container, a cron-driven agent that should never stop on a prompt, or a multi-tenant worker that must not surface permission dialogs to a downstream consumer, this is the deterministic mode.

The combination with auto mode is the interesting part: auto mode's existing approval logic still runs, so a permissions.allow entry still allows its action; but the "ask the user" fallback becomes "deny and move on." Teams running headless Claude Code that previously had to script around prompt-pops can now use this flag instead.

3. GitLab MR recognition + --json for claude plugin validate

Two smaller additions. Per the changelog: "Added recognition of glab mr create/merge/close/reopen/note/update so GitLab merge requests show as MR !N in the collapsed tool summary and refresh the footer MR badge." And: "Added --json to claude plugin validate for a machine-readable validation report."

The GitLab recognition brings the same UX as the GitHub MR recognition that landed earlier in the v2.1.x series — collapsed tool summaries show MR !N instead of generic shell output, and the footer MR badge refreshes when a glab-driven MR changes state. The --json flag on claude plugin validate makes the validation report parseable, which is what an internal marketplace or a CI gate needs to enforce a plugin policy without scraping human-readable output.

4. The Bash Read() deny-rule bypass — and the fix

Per the changelog: "Fixed Bash Read() deny rules not covering files given as option values (--ignore-revs-file=.env, -f.env, @file), git diff/git grep file operands, or cd DIR && cat FILE compounds; grep -r/cp -r over a directory holding a denied file now asks."

This is the operational headline for security-conscious builders. A Read deny rule on .env previously did not block git diff --ignore-revs-file=.env (which reads .env as an option value), grep -f .env (option value), or @.env (file operand). It did not block git diff path/to/.env (file operand) or git grep pattern -- path/to/.env (file operand). It did not block cd /workspace && cat .env (compound command with the file as a separate argument). It also did not block grep -r over a directory that contained a denied file — the recursive walk would happily read the denied file as part of the search.

v2.1.259 fixes all of these. The deny rule now covers option values, file operands, compound commands, and recursive operations over directories that contain denied files. The recursive case is partial: grep -r/cp -r over a directory holding a denied file "now asks" — i.e., the user gets a permission prompt instead of an automatic proceed.

For builders using permissions.deny to fence sensitive files, this closes a meaningful set of bypasses. The classic pattern "deny reads on .env, ~/.aws/credentials, ~/.ssh/id_rsa, .git/config, etc." was being quietly circumvented by any of the constructs above.

5. Concurrent-session state corruption fixed

Per the changelog: "Fixed concurrent sessions silently reverting each other's ~/.claude.json changes — workspace trust no longer resets and MCP/project state is no longer lost when running many sessions at once."

When multiple Claude Code sessions ran concurrently against the same ~/.claude.json (e.g., a developer running two terminal panes plus a background CI session), one session's writes would silently overwrite the other's, and the loser's state would revert on next read. The visible symptoms: workspace trust would reset (you'd get the "do you trust this folder" prompt again), MCP servers would disappear, project-scoped settings would lose recent edits. v2.1.259 makes the writes concurrent-safe. For a team that has been hitting these regressions, the upgrade is a quiet operational win.

6. The other fixes

The remaining ten items are smaller:

  • "Fixed a conversation whose thinking was rejected once being rejected again on every later turn" — a conversation-state bug where one rejected thinking block poisoned every subsequent turn. Now isolated to the affected turn.
  • "Fixed the prompt cache being invalidated when the OAuth token refreshed in sessions with telemetry disabled" — caching fix; saves re-priming cost on long sessions with telemetry off.
  • "Fixed fullscreen mode showing a blank conversation after a long turn with hundreds of tool calls" — UI bug; long-session fullscreen rendering.
  • "Fixed auto mode running a turn on a model it doesn't support when a command or skill's frontmatter model: named one; the turn now keeps the session model" — auto-mode correctness; previously, a skill frontmatter that named a model the active session did not support would trigger an attempt to use it anyway.
  • "Fixed CLAUDE_CODE_MAX_CONTEXT_TOKENS being ignored for Vertex-style model IDs (@YYYYMMDD suffix) of model versions Claude Code doesn't recognize" — environment-variable compatibility for unrecognized Vertex model aliases.
  • "Fixed the live output preview of a running shell command hiding its newest lines when an earlier line wrapped" — UI fix for the live shell preview.
  • "Fixed a background GitHub connection check that ran on every launch for claude.ai users; the result is now remembered across launches" — performance fix; one less network call on each launch.
  • "Fixed --resume failing (and --continue opening an empty conversation) when a saved session contains an attachment entry with no payload" — session-resume reliability for sessions with stale attachment references.
  • "Fixed frontmatter model: on custom commands and skills being ignored in interactive sessions" — frontmatter configuration was silently dropped in interactive (vs. headless) sessions.
  • "Fixed Artifact publishing failing once with an 'unexpected parameter note' error in conversations continued from an older version" — a one-time failure on cross-version session resume.
  • "Fixed managed forceRemoteSettingsRefresh being ignored at startup when a policy helper configured by MDM or the managed settings file had already run" — managed-settings precedence bug.
  • "Fixed worktree isolation refusing hook-created worktrees on machines where git rev-parse fails with a message other than 'not a git repository'" — worktree isolation over-refusal.
  • "Fixed OpenTelemetry metrics and events from cloud sessions missing the user.email, organization.id, and user.account_uuid attributes" — observability attribute fix.
  • "Fixed MCP servers that disconnect while their tools are being called" — MCP reconnect stability.

These are listed in the release notes for completeness. The operational shortlist — managedMcpServers, --permission-prompts none, the Bash deny-rule bypass fix, the concurrent-session fix — is what I would tell a builder to read.

What Actually Changed For Builders

Enterprise posture: managedMcpServers slots into the existing managed-settings distribution. Admins who already push Claude Code config via MDM can now also push the company's HTTP/SSE MCP servers. Stdio transports are explicitly excluded from this channel, which is the right call for a managed channel — a stdio entry would mean the managed policy is launching an arbitrary binary on every machine.

Headless deployment: --permission-prompts none is the deterministic flag for unattended Claude Code. Combined with auto mode, the session auto-approves whatever auto mode's allow rules cover and denies everything else without blocking. For a CI gate, a cron-driven worker, or a multi-tenant consumer that needs to never surface a dialog, this is the mode.

Security posture: The Bash Read() deny-rule bypass fix is the most operationally important change in v2.1.259. Builders using permissions.deny to fence sensitive files (.env, ~/.aws/credentials, ~/.ssh/, .git/config, customer-secrets directories) had a meaningful bypass surface via option values, file operands, compound commands, and recursive directory operations. v2.1.259 closes the bypass; grep -r/cp -r over a directory holding a denied file now asks for permission.

Reliability posture: The concurrent-session state corruption fix ends a class of "my MCP servers disappeared" / "I have to re-trust the workspace" bugs that hit anyone running multiple Claude Code sessions against the same ~/.claude.json.

Why Developers And Founders Should Care

Reason 1: If you run Claude Code headless, --permission-prompts none is the answer to "how do I make it never block." The combination with auto mode means you can ship a non-interactive container that respects your permissions.allow rules and refuses to ever pop a permission dialog. For production agent infrastructure (CI gates, scheduled jobs, multi-tenant workers), this is the flag that turns Claude Code into a deployable service instead of an interactive tool.

Reason 2: If you fence sensitive files with permissions.deny, v2.1.259 closes a bypass you probably had. The Bash Read() deny rules now cover option values, file operands, compound commands, and recursive directory operations. If you have been relying on permissions.deny to prevent reads on .env, ~/.aws/credentials, ~/.ssh/, or customer-secret paths, your fence was quietly circumventable by any of those constructs. Upgrade.

Reason 3: If you run multiple Claude Code sessions against the same user account, your state was racing. Concurrent writes to ~/.claude.json were silently clobbering each other. v2.1.259 makes them concurrent-safe. If you have hit "MCP server disappeared" or "I have to re-trust this folder" regressions that you couldn't reproduce from a single session, this is the fix.

Reason 4: If you operate Claude Code via managed settings, the new managedMcpServers slot is the enterprise rollout you were waiting for. Org-wide HTTP/SSE MCP provisioning via the same managed-settings distribution mechanism. Stdio transports excluded from the managed channel by design.

Evidence And Test Results

Primary source: the v2.1.259 release notes and the atom feed entry timestamp (updated 2026-09-02T22:33:51Z). Every claim above is verifiable verbatim in the release notes' bullet list. Atom feed confirmed at fetch time 2026-09-03 14:08 UTC.

Cross-check against the v2.1.251 release (covered in [claude-code-2-1-251-hooks-security-sweep-august-2026](https://mr.technology/payloads/claude-code-2-1-251-hooks-security-sweep-august-2026)) and the v2.1.257 release (covered in [claude-code-2-1-257-fable-51-containment-escape-rule-sep-2026](https://mr.technology/payloads/claude-code-2-1-257-fable-51-containment-escape-rule-sep-2026)) shows the security-and-capability cadence continuing. v2.1.259 is smaller than v2.1.257 (~16 items vs ~60) but the Bash deny-rule bypass fix is the same class of issue as the v2.1.251 security sweep and the v2.1.257 Bash deny-rule redirect fix.

No firsthand test was run. The verification level is "documentation comparison + verbatim changelog quotes." I have not installed v2.1.259, not tested --permission-prompts none in a headless harness, not pushed managedMcpServers through a managed-settings deployment, and not exercised the Bash deny-rule fix. If you have first-hand evidence from an install attempt or a security test, I will update this article.

Cost, Risk, And Limitations

Cost: No new paid tier, no pricing change. The new features (managedMcpServers, --permission-prompts none) operate against the existing model and API pricing.

Risk: --permission-prompts none is a deny-by-default mode for everything outside your allow rules. If your permissions.allow rules are not comprehensive, the flag will turn previously-allowed interactive prompts into silent denies. Audit your allow rules before deploying this flag in production.

The Bash deny-rule fix changes a permission prompt that previously auto-proceeded (grep -r over a directory with a denied file) into an explicit prompt. Teams that have been running Claude Code with broad auto-mode approvals against a directory that contains sensitive files will see new prompts where they used to see silent operations.

The managedMcpServers setting is a managed-settings slot. If your organization already pushes the managed settings file, the new slot slots in without changing your distribution mechanism. If your organization does not yet use managed settings, deploying this requires setting up the managed-settings distribution first.

Limitations of this report:

  • Documentation-surfacing report, not firsthand test. I have not installed v2.1.259.
  • The full ~16-item changelog is summarized above; the items I have called out as the "operational shortlist" are my editorial selection based on impact for production agent infrastructure. Items I have abbreviated or omitted are real changes but not material to the capability-or-security story.
  • The managed-settings file format and the managedMcpServers entry shape were not re-fetched in this run. The claim that the entry shape matches .mcp.json is taken verbatim from the changelog.
  • I have not tested whether --permission-prompts none interacts with subagent prompts (e.g., does a subagent's tool-use prompt inherit the flag, or does the subagent get its own prompt decision?).

Mr. Technology verdict

v2.1.259 is a small stable patch on top of v2.1.257 — same security-and-capability cadence continuing the v2.1.251 hooks-security-sweep → v2.1.257 containment-escape-rule line. The headline operational items are managedMcpServers (organizations can provision HTTP/SSE MCP servers to every user, the same entry shape as .mcp.json) and --permission-prompts none (anything that would prompt is denied automatically while the active permission mode keeps deciding, useful for unattended / cron / CI use cases). The Bash deny-rule bypass fix closes another paper-cut in the same class as v2.1.251 and v2.1.257 — a permission prompt that previously auto-proceeded (grep -r over a directory with a denied file) now becomes an explicit prompt. This is a release to upgrade to if your organization uses managed MCP provisioning or runs unattended Claude Code sessions; otherwise the operational impact is incremental.

Recommended action

Today: before deploying --permission-prompts none in production, audit your permissions.allow rules. Anything previously relying on auto-approval via an interactive prompt will become a silent deny. For Bash operations that involve denied files in directories where you previously saw silent auto-mode approvals, expect new explicit prompts where you used to see silent operations.

This week: if your organization uses managed settings, distribute the updated managed settings file with the managedMcpServers slot. Internal-marketplace operators should confirm the plugin-author verification posture before rolling out to a team. The new slot slots in without changing the distribution mechanism, but if your organization does not yet use managed settings, deploying this requires setting up the managed-settings distribution first.

Next week: if your operational pattern involves unattended / cron / CI Claude Code sessions, validate that --permission-prompts none works as expected in your environment before relying on it for production workloads. Also review the Bash deny-rule fix implications for any CI workflows that depend on auto-mode approvals against directories with mixed file permissions.

Skip if not in scope: don't enable --permission-prompts none if your permissions.allow rules are not comprehensive; don't push managed settings if your organization doesn't already have a managed-settings distribution in place.

Article history and corrections

Originally published: 2026-09-03 14:08 UTC Last verified: 2026-09-03 16:13 UTC No corrections at this time.

Related Dispatches