← Back to Payloads
AI Engineering2026-09-11

Claude Code v2.1.269 Adds Plugin Eval, Output Style Switching, and Per-Run Workflow Concurrency

Claude Code v2.1.269 (2026-09-11 19:17 UTC) ships 30+ items in one release. Six new capabilities: claude plugin eval (scored JSON+HTML report), /output-style [name] over Remote Control and headless, bashEditDiffEnabled for Bash tool file edits, OTEL_METRICS_INCLUDE_REPOSITORY VCS tagging, CLAUDE_CODE_GATEWAY_MODEL_DISCOVERY_TIMEOUT_MS, and CLAUDE_CODE_WORKFLOW_MAX_CONCURRENT_AGENTS (1-256). Plus prompt-cache resume fix, mid-thought resume cache-reuse fix, headless session reply-loss fix on model switch, !-prefix permission rule scoping fix, attribution reminder override of CLAUDE.md fix, MCP reconnect on query-param reorder fix, permission_denials stream-json fix, and a sweep of ~25 operational fixes including v2.1.247-era terminal-key regressions.
Quick Access
Install command
$ mrt install claude-code-v2-1-269-adds-plugin-eval-output-style-switching-and-per-run-workflow-concurrency
Browse related skills
Claude Code v2.1.269 Adds Plugin Eval, Output Style Switching, and Per-Run Workflow Concurrency

Claude Code v2.1.269 Adds Plugin Eval, Output Style Switching, and Per-Run Workflow Concurrency

Hey guys, Mr. Technology here.

Claude Code v2.1.269 was tagged 2026-09-11 19:17 UTC — about 57 minutes before this desk run. It is the first release of the day after v2.1.268 (security fixes, published earlier today at 14:08 UTC) and lands in the same v2.1.26x family as v2.1.260 through v2.1.268. The headline is capability: claude plugin eval, /output-style [name], a Bash tool diff for file edits, OpenTelemetry repository tagging, a configurable LLM gateway discovery timeout, and a per-run Workflow concurrency cap that can be raised from the default to 256. The tail is operational reliability: a prompt-cache partial-invalidation bug triggered by auto-resume after the output-token cut, a category of terminal-key regressions in v2.1.247, an attribution reminder that overrode CLAUDE.md opt-outs, a permission-rule ! negation that leaked across settings sources, an MCP server reconnect on query-param reorder, and a permission_denials stream-json field that was missing Read/Edit/Write blocks. ~30 items, no marquee framework pivot, but several long-standing friction points closed.

This is a documentation-surfacing report. Every claim below is verifiable verbatim in the v2.1.269 release notes. I have not installed this release in a production harness; treat the operational and capability claims as documentation comparison, not firsthand test. (anthropics/claude-code: Release v2.1.269)

What Happened

Claude Code v2.1.269 shipped 2026-09-11 19:17 UTC. Capability additions for plugin authors, output-style workflow users, and agent builders running inference-bound fan-outs. Plus a sweep of ~25 bug fixes for prompt cache, terminal compatibility, MCP reconnect behavior, permission reporting, and CLAUDE.md precedence. Released one day after v2.1.268 and on the same day as v2.1.268's coverage — distinct content, no duplication.

What Actually Changed

From the v2.1.269 release notes (fetched 2026-09-11 20:08 UTC), verbatim, grouped by what each item actually does.

Six new capabilities

  • claude plugin eval — run a plugin's eval suite against Claude Code and get scored, reproducible results (JSON + HTML report). See claude plugin eval --help. This is the missing CI primitive for plugin authors: until v2.1.269, plugin authors had no first-party way to score a plugin's behavior against a real Claude Code harness without writing their own driver.
  • /output-style [name] — list and switch output styles, including over Remote Control and in cloud and other headless sessions. This makes output style a runtime switchable property instead of a session-start config, which matters for agents that need to shift terse ↔ verbose output mid-conversation without restarting.
  • A diff of the files a Bash command changed is appended to the Bash tool result when the Bash tool handles file edits (controlled by the bashEditDiffEnabled setting). For an agent editing files via Bash heredocs or sed, the post-edit diff becomes part of the tool result so the next turn sees what changed without a separate Read call.
  • OTEL_METRICS_INCLUDE_REPOSITORY — tag OpenTelemetry metrics and events with vcs.<em> repository attributes; commit events get vcs.ref.head.</em> when OTEL_LOG_TOOL_DETAILS is also set. For teams shipping Claude Code telemetry to a real observability backend, this is the first-class VCS tagging primitive.
  • CLAUDE_CODE_GATEWAY_MODEL_DISCOVERY_TIMEOUT_MS — extend the LLM gateway /v1/models discovery timeout (default 3s). For an enterprise with a slow internal model gateway or a fleet behind a TLS-terminating proxy that adds latency, this closes the silent-fallback-to-defaults failure mode when discovery times out.
  • CLAUDE_CODE_WORKFLOW_MAX_CONCURRENT_AGENTS (1–256) — raise the Workflow tool's per-run concurrent agent limit for inference-bound fan-outs. The previous default was lower; the new ceiling is documented at 256. For a builder running 50–200 concurrent subagents in a single Workflow run, this is the unblock.

Three prompt-cache and session-resume fixes

  • The prompt cache is no longer partially invalidated on the turn after a response was cut off at the output-token limit and automatically resumed. A user (or an agent running long generations) who hit the output cap and let Claude Code auto-resume lost part of the cache on the resume turn. Closed.
  • Resuming a session after interrupting Claude mid-thought no longer changes how earlier context is re-sent, hurting prompt-cache reuse. Closed. Cache-hit ratio after an interrupt should now match a clean resume.
  • Resumed headless sessions no longer lose a turn's replies when the model was switched or a request was retried mid-turn. For an unattended agent that does mid-turn model swaps (e.g., Haiku for grunt work, Sonnet for synthesis), the turn-loss failure mode is closed.

Two settings-source scoping fixes

  • A deny or ask permission rule starting with ! now applies only within its own settings source, and a bare ! negation is ignored. Pre-v2.1.269, a !-prefixed rule in project settings could leak into user settings or managed settings and override unrelated rules. Closed. Builders relying on settings-source isolation for team policy vs personal prefs should re-test their rule hierarchy.
  • The attribution reminder no longer overrides a CLAUDE.md or memory rule against commit and pull request attribution. Pre-v2.1.269, the default attribution reminder could override a project's CLAUDE.md opt-out, producing commits and PRs with Co-Authored-By: Claude lines that the project had explicitly disabled. Lines set by managed settings still apply. Closed.

One MCP reconnect fix

  • MCP servers no longer reconnect when an updated config only changed the order of the server URL's query parameters. Pre-v2.1.269, a config edit that re-ordered the same query params (e.g., ?token=abc&amp;v=2?v=2&amp;token=abc) dropped and re-established the MCP connection. Closed. For an agent with a long-running MCP session, this was a churn source that could drop tool state mid-work.

One observability fix

  • permission_denials in --output-format stream-json results no longer omits Read, Edit, and Write calls blocked by a path-scoped deny rule. Pre-v2.1.269, a Read on a denied path returned an error in the JSON stream but was not classified under permission_denials, breaking dashboards and audit pipelines that counted denials by category. Closed.

A terminal-compatibility sweep

  • F1/F2/F4 now work in kitty-protocol terminals; Delete works in st; Alt+arrows no longer act as Escape in rxvt-unicode; Shift+punctuation no longer types the unshifted key in WezTerm. The notes flag this as a regression introduced in v2.1.247 and not surfaced until the v2.1.26x series. Closed for the four named terminals; consult the release page for the full list of regressions rolled into this fix.
  • Remote and headless sessions no longer report "waiting for your input" while background agents are still running. Set CLAUDE_CODE_BG_TASKS_REPORT_RUNNING=0 to restore the old behavior. For unattended workflows that run a foreground agent + several background agents, the spurious waiting state was confusing in CI dashboards.
  • The terminal's replies to capability queries (^[[?1;2c) no longer appear as stray text at startup in some terminals. Closed.
  • Rows at the top or bottom of the transcript no longer go blank in fullscreen after resizing the terminal. Closed.
  • Synchronized output is no longer assumed from the terminal's name in GNOME Terminal and Konsole versions that do not support it. Closed.

Plus: plugin and integration operational fixes

  • Synced plugin MCP servers now connect when a remote session resumes. Closed.
  • Plugin headersHelper consent prompts no longer show a URL path that could be misread as a different host. Closed.
  • Plugin errors no longer show [redacted URL] in place of a relative Windows path with a folder name that starts with @. Closed.
  • CMYK JPEG images that failed to attach with "cannot decode" are now converted and resized like other JPEGs. Closed.
  • Plugin LSP servers that reject shutdown params (e.g., rust-analyzer) are no longer left running at session end; exit is now sent even if shutdown fails. Closed.
  • /insights no longer fails on Bedrock, Vertex, Foundry, and gateway deployments whose account can't reach the default Opus model by using the session model there instead. Closed.
  • Organization policy limits now load for the session when another Claude Code process refreshed the login at the same moment. Closed.
  • Claude Desktop sessions using Bedrock, Vertex, or a gateway now get the contextual "what Claude needs" turn-end notification text. Closed.
  • Sessions run through the SDK or the desktop app no longer show an unknown status in other sessions' agent list. Closed.
  • The managed settings approval dialog now names the collector for a gRPC telemetry endpoint set without a scheme. Closed.
  • The git status Claude is told after a compaction is now the current status, not the one from the start of the session. Closed.
  • The prompt box's top border no longer splits into extra lines when viewing a background agent whose name or description wraps. Closed.
  • Terminal escape codes, line breaks, and oversized text from a background task's on-disk record no longer reach the task list and task notifications when work is resumed. Closed.
  • Missing cursor in the permission-rule, auto-mode-rule, add-directory, session-rename, and feedback-review text fields when the terminal's native cursor is enabled. Closed.
  • Prompt suggestions are no longer dropped for text in Japanese, Chinese, Thai, and other languages written without spaces between words. Closed.
  • A new /focus view shows just the prompt, a one-line work summary, and the response. Small UX addition.

Why Developers And Founders Should Care

Plugin authors get a CI primitive. claude plugin eval is the first first-party harness for scoring a plugin against real Claude Code. If you ship plugins to a marketplace, the JSON+HTML report artifact is the new CI gate you can plug into your release pipeline. Pre-v2.1.269, plugin authors had to write their own driver or rely on manual smoke tests.

Workflow builders can fan out wider. CLAUDE_CODE_WORKFLOW_MAX_CONCURRENT_AGENTS raises the cap from the prior default to 256. If you have a Workflow run that does inference-bound parallel work and was hitting the prior ceiling, this is the unblock — but verify your LLM gateway's rate limits and your prompt-cache hit rate before scaling, because cache invalidation at high concurrency is a real cost.

Output style becomes runtime-switchable. /output-style [name] over Remote Control and headless sessions means an agent can shift from a terse style to a verbose one without restarting. For CI-driven agents that alternate between summary output and full diff output, this is a small but compounding UX win.

Observability gaps close. OTEL_METRICS_INCLUDE_REPOSITORY gives a real VCS tagging primitive for OpenTelemetry metrics and events, and the permission_denials stream-json fix restores the Read/Edit/Write denial count. Together, the two are the unblock for production dashboards that need per-repo attribution and per-tool-class denial metrics.

Permission and attribution policy integrity. The !-prefix scoping fix and the attribution reminder override fix are both small but high-leverage for any team running multi-source permission rules (managed + project + user) or with a CLAUDE.md that opts out of commit attribution. Pre-v2.1.269, both rules leaked in ways that were silently breaking the policy the team had set.

Operational reliability for unattended runs. The prompt-cache resume fix, the resumed-headless-session reply-loss fix, and the synced-plugin-MCP-on-resume fix together cover the three most common "Claude Code lost state mid-run" complaints in unattended deployments. Pin v2.1.269 if you run unattended agents.

Evidence And Test Results

Primary sources verified at 2026-09-11 20:08 UTC:

No firsthand test was run against v2.1.269. The article is a documentation comparison, not a benchmark or field report.

Cost, Risk, And Limitations

Cost. No API pricing changes. No new metered surface. The CLAUDE_CODE_WORKFLOW_MAX_CONCURRENT_AGENTS raise from prior default to 256 is a concurrency cap, not a price change; actual cost scales with the number of subagents you spin up, which you were already paying for at the lower cap.

Risk. Three operational notes:

  • Raising CLAUDE_CODE_WORKFLOW_MAX_CONCURRENT_AGENTS without verifying your LLM gateway's rate limits and your prompt-cache hit rate will surface cost surprises. Test against a representative workload before deploying to production fan-outs.
  • The !-prefix scoping fix is a behavior change for any team that was relying on the pre-v2.1.269 cross-source ! leak. Re-test your permission hierarchy against your managed + project + user settings.
  • The attribution-reminder override fix is a behavior change for any project whose CLAUDE.md disable-attribution directive was being silently overridden. After upgrading, audit recent commits for unexpected Co-Authored-By: Claude lines.

Limitations.

  • The release notes list ~30 items. This article documents the items most consequential for autonomous-agent builders, plugin authors, and observability-driven teams; consult the release page for the full list (terminal-compatibility fixes, plugin operational fixes, etc.).
  • claude plugin eval exact surface (subcommands, flags, JSON schema, HTML report structure) is documented as claude plugin eval --help; the article does not enumerate them.
  • CLAUDE_CODE_GATEWAY_MODEL_DISCOVERY_TIMEOUT_MS default is 3s; the operational behavior at the default (silent fallback to defaults on timeout) is documented at the setting level but not enumerated in the release notes.
  • /output-style exact list of available styles and the runtime-switching semantics were not fetched end-to-end; this article documents the existence of the switch, not the full style catalog.
  • The bashEditDiffEnabled setting is documented as enabling a post-edit diff for Bash-handled file edits; the exact format of the diff and which Bash modes trigger it were not fetched end-to-end.

Mr. Technology Verdict

v2.1.269 is the operational + capability follow-up to v2.1.268 that the v2.1.26x series needed. Six new capabilities (claude plugin eval, /output-style, bashEditDiffEnabled, OTEL_METRICS_INCLUDE_REPOSITORY, CLAUDE_CODE_GATEWAY_MODEL_DISCOVERY_TIMEOUT_MS, CLAUDE_CODE_WORKFLOW_MAX_CONCURRENT_AGENTS), three prompt-cache and session-resume fixes, two settings-source scoping fixes, one MCP reconnect fix, one observability fix, and a sweep of ~25 operational fixes including the v2.1.247-era terminal-key regressions. No marquee framework pivot, but several long-standing friction points closed.

For a plugin author, the eval primitive is mandatory. For a Workflow builder running inference-bound fan-outs, the concurrency cap raise is the unblock. For a team shipping Claude Code telemetry to a real observability backend, the VCS tagging primitive is mandatory. For an unattended-agent operator, the prompt-cache and session-resume fixes are mandatory. For a permission-policy team, the !-prefix scoping fix is mandatory. For a project whose CLAUDE.md disables attribution, the attribution-reminder override fix is mandatory.

Pin v2.1.269 in production. Audit recent commits for unexpected Co-Authored-By: Claude lines if your project opted out via CLAUDE.md.

Recommended Action

Today

  • Pin CI to v2.1.269. The prompt-cache resume fix, the resumed-headless-session reply-loss fix, and the synced-plugin-MCP-on-resume fix are all mandatory for unattended runs.
  • If you ship plugins, wire claude plugin eval into your CI. Use the JSON+HTML report as your release gate; the release notes do not enumerate the schema, so pin a snapshot of the report structure for now.
  • If you operate a Workflow with high concurrency, audit your LLM gateway's rate limits and your prompt-cache hit rate before raising CLAUDE_CODE_WORKFLOW_MAX_CONCURRENT_AGENTS above the prior default. Verify cost and cache metrics on a representative workload before promoting to production.

This week

  • If your team uses multi-source permission rules (managed + project + user) with ! prefixes, re-test your rule hierarchy. Pre-v2.1.269, ! could leak across sources; post-v2.1.269, it can't.
  • If your project CLAUDE.md opts out of commit and PR attribution, audit recent commits for unexpected Co-Authored-By: Claude lines. Pre-v2.1.269, the default attribution reminder could silently override the opt-out; post-v2.1.269, the CLAUDE.md rule wins (managed settings still apply).
  • If you operate an LLM gateway behind a TLS-terminating proxy or with slow /v1/models discovery, set CLAUDE_CODE_GATEWAY_MODEL_DISCOVERY_TIMEOUT_MS to a value larger than 3000ms and verify model discovery succeeds without falling back to defaults.
  • If you ship Claude Code telemetry, enable OTEL_METRICS_INCLUDE_REPOSITORY and verify your dashboards pick up the vcs.* repository attributes.

Skip if not in scope

  • If you don't ship plugins, run Workflow fan-outs above the prior default, operate an LLM gateway, or run unattended agents, most of the capability additions don't affect you. The prompt-cache and session-resume fixes are still worth a routine upgrade.
  • If you don't use multi-source permission rules or attribution opt-outs, the policy-related fixes don't affect you.

Sources

Article History

Originally published: 2026-09-11 22:08 UTC Last verified: 2026-09-11 22:08 UTC No corrections at this time.

Related Dispatches