# Claude Code v2.1.237

> Claude Code v2.1.237, released 19 Aug 2026 (2026-08-19). 16 entries read out of the shipped bundle. Unofficial, and not affiliated with Anthropic.

Web version: https://changelogs.core-directive.com/v/2.1.237

This build carries six pieces of a system for letting a session receive events pushed in from outside, none of them switched on. A new Poll tool drains queued harness events and reports how many arrived and how many wake signals remain, but it exists only when `CLAUDE_CODE_POLL_EVENTS` is true and the session is in remote mode; behind that same gate, each event's recorded sender decides how it speaks back into the conversation, with human-principal text becoming a real user turn, peer-agent text wrapped as coming from another session, and world events dropped. The harness also now checks that any sender text an event claims really appears in the event body, stripping it and logging a warning if not. Separately, faster pickup of a summon the first time Claude sees an artifact comment thread runs only under `CLAUDE_CODE_ARTIFACT_COMMENT_FAST_ACK` or the remote gate `tengu_gorse_pylon`, which defaults to false, and a marker for Slack turns whose sender the server verified as human is emitted only when the entrypoint is Slack.

Output styles gain a fifth built-in, Concise, which tells the model to lead with the result, skip preamble and narration, and answer simple questions in one to three sentences without trading away correctness. Nothing gates it, so it appears in the style list for anyone on this build. Caching of the system prompt block now also requires a recognised endpoint: Bedrock, Vertex and Mantle qualify only with their respective base URL variables unset, and Foundry only when `ANTHROPIC_FOUNDRY_BASE_URL` is unset or points at `.services.ai.azure.com`, so a proxy or custom gateway loses that caching. Resuming a saved conversation, or loading one by agent ID, now strips authority markers from the replayed messages, resetting recorded origins to unclassified and downgrading a stored "human principal" sender to "other human".

## What probably matters to you

Anything you can use today, anything that visibly changes, and anything worth poking at. One line each, open for detail.

### Poll tool drains queued harness events and reports who sent them

Claude can pull in queued messages from other sessions, stamped with who sent them, but only behind an env var.

**What**

A new Poll tool lets the model pull in events that the surrounding harness has queued for the session, returning the rendered messages along with how many events arrived and how many wake signals are still outstanding. Each queued event can now carry provenance saying who it came from, so a notice relayed from another Claude session arrives stamped as coming from a peer agent with that session's ID and text. None of this is reachable in a normal local run: the tool and the fields appear only when the `CLAUDE_CODE_POLL_EVENTS` environment variable is true and the session is in remote mode, meaning `CLAUDE_CODE_REMOTE` set to true with `CLAUDE_CODE_ENVIRONMENT_KIND` unset. Without that combination the tool is absent entirely and the session behaves as in previous builds, where it did not exist at all.

**Details**

- Poll is registered both in the main tool list and in the reduced list used for simple mode, is read-only, is safe to run concurrently with other tools, and refuses to run inside a subagent with the message `Poll is available on the main thread only`.
- The `poll_event` request that feeds the queue accepts optional `authority`, `sender_id` and `sender_text` alongside its existing fields, validated as `poll_event: kind and event must be strings; wake, when present, a boolean; authority, when present, one of human-principal|human-other|peer-agent|world-event; sender_id and sender_text, when present, strings`.
- Sender text is capped at 49152 bytes and sender ID at 1024.
- Accepted provenance travels from the event queue through the turn options into the Poll tool's output schema as an optional `provenance` array, and onto the poll-event attachment, so the model sees the origin of each event it drains.
- A relayed cross-session notice is tagged `authority: "peer-agent"` carrying the originating session's identifier and text.

**Evidence**

`poll_event: kind and event must be strings; wake, when present, a boolean; authority, when present, one of human-principal|human-other|peer-agent|world-event; sender_id and sender_text, when present, strings`, `authority: "peer-agent"`, `Poll is available on the main thread only`

- Area: Sessions
- Names: `CLAUDE_CODE_POLL_EVENTS`, `CLAUDE_CODE_REMOTE`, `CLAUDE_CODE_ENVIRONMENT_KIND`
- Tier: Not switched on
- Useful: 2/5
- Signal: 5/5
- Present in the build but not switched on

### Provenance decides how a relayed event is spoken back into the conversation

Relayed messages are spoken back differently by source: verified humans as you, other agents as cross-session, world events dropped.

**What**

Once accepted, sender provenance is stored on the delivered event, up to the first 20 entries, and controls how each entry re-enters the conversation. Text marked human-principal is emitted as a genuine user turn; peer-agent and anything else is wrapped in cross-session framing that does not read as your own instruction; world-event, or a missing or blank sender text, drops the delivery entirely. Reachable only under the same poll-events gate.

**Details**

- The validation error message was widened to spell out the full set of accepted authority values.
- None of these four authority values existed in the previous build.

**Evidence**

`poll_event: sender_text dropped from provenance`

- Area: Sessions
- Tier: Not switched on
- Useful: 2/5
- Signal: 5/5
- Present in the build but not switched on

### Poll-events switch cannot be set from settings

You can set CLAUDE_CODE_POLL_EVENTS in your shell, but settings files can no longer supply it.

**What**

`CLAUDE_CODE_POLL_EVENTS` is added to the typed environment registry as a boolean and, more usefully, to the list of names filtered out of `env` blocks supplied by settings files. It can only be set by the process that launches Claude Code, not by a project or user setting.

**Evidence**

`"CLAUDE_CODE_POLL_EVENTS"`

- Area: Environment Variables
- Names: `CLAUDE_CODE_POLL_EVENTS`, `env`
- Tier: Use it now
- Useful: 3/5
- Signal: 4/5

### Resumed sessions can no longer inherit "verified human" status

Resuming a saved conversation no longer carries over "verified human" trust from the earlier live session.

**What**

Loading a saved conversation, both when resuming normally and when loading by agent ID, now strips authority markers from the replayed messages. Verified-Slack-human flags and classifier metadata lines are deleted, message origins recorded as human or auto-continuation are reset to unclassified, and any stored sender authority of "human principal" is downgraded to "other human". A replayed transcript can never re-assert authority that was established in an earlier live session.

**Details**

- Runs on every transcript load; there is no flag to disable it.

**Evidence**

`authority: "human-other"`

- Area: Sessions
- Tier: You'll notice
- Useful: 3/5
- Signal: 4/5

### Verified-human marker for Slack-relayed turns, plus a stubbed third relay surface

Slack turns from a server-verified human get a marker so Claude treats them as you without extra confirmation.

**What**

Turns relayed from a bound Slack thread whose sender the server verified as human are now prefixed with a fixed marker, and a new prompt paragraph tells the model that a turn opening with exactly that marker is its own user and does not need extra confirmation, while `bot`-attributed messages inside a Slack message block never establish user intent. Both are emitted only when `CLAUDE_CODE_ENTRYPOINT` is `claude_in_slack` or `claude-in-slack`; otherwise the paragraph is empty.

**Details**

- The paragraph replaces the previous cross-session messages rule in the prompt.
- The escaping helper for non-verified relayed text now also engages for Teams (`claude-in-teams`) and for a third surface whose check unconditionally returns false, a placeholder with no way to be enabled in this build.

**Evidence**

`[Verified human message relayed from the bound Slack thread]:`

- Area: Slack Integration
- Names: `CLAUDE_CODE_ENTRYPOINT`
- Tier: You'll notice
- Useful: 3/5
- Signal: 4/5

### Shared authority values for message provenance

Relayed messages are labelled from one shared list: you, another person, another agent, or an event.

**What**

A single four-value list of sender authorities (human principal, other human, peer agent, world event) now backs both the Poll tool's output shape and the prompt text that frames a relayed message, so the two cannot drift apart.

**Evidence**

`["human-principal", "human-other", "peer-agent", "world-event"]`

- Area: Message Provenance
- Tier: Under the hood
- Useful: 3/5
- Signal: 4/5

### System prompt caching now requires a recognised endpoint

If you point Claude at a proxy or custom gateway, the system prompt is no longer cached.

**What**

The check deciding whether the system prompt block may be marked cacheable used to only require that experimental betas were not disabled. It now also requires a known provider and endpoint: Bedrock, Vertex and Mantle qualify only when `ANTHROPIC_BEDROCK_BASE_URL`, `ANTHROPIC_VERTEX_BASE_URL` and `ANTHROPIC_BEDROCK_MANTLE_BASE_URL` are unset, and Foundry only when `ANTHROPIC_FOUNDRY_BASE_URL` is unset or its hostname ends in `.services.ai.azure.com`. Behind a proxy or custom gateway, the system block stops being cached.

**Details**

- First-party and Anthropic-on-AWS paths still have to pass the existing beta and base-URL checks.
- No feature flag; the outcome is decided entirely by the provider and those environment variables, and it is live for everyone on this build.

**Evidence**

`.services.ai.azure.com`

- Area: Prompt Caching
- Names: `ANTHROPIC_BEDROCK_BASE_URL`, `ANTHROPIC_VERTEX_BASE_URL`, `ANTHROPIC_BEDROCK_MANTLE_BASE_URL`, `ANTHROPIC_FOUNDRY_BASE_URL`
- Tier: You'll notice
- Useful: 4/5
- Signal: 3/5

### Auto-mode classifier reads poll events by sender

The turn-handling classifier now splits queued events into separate turns depending on whether a human or another agent sent them.

**What**

The context handed to the classifier that decides how to handle a turn now expands queued harness events into individual user turns according to who sent them. World events and entries with no sender text are dropped, human-principal text is rendered as a verified human turn, peer-agent text is wrapped as coming from another agent, and anything else is prefixed as a non-user source. Previously the whole attachment contributed no per-sender turns at all.

**Details**

- Part of the poll-events path, so it is inert unless that gate is on.
- The verified-human marker it can emit is itself only produced under the Slack entrypoint.

**Evidence**

`y.authority === "world-event"`

- Area: Sessions
- Tier: Not switched on
- Useful: 2/5
- Signal: 4/5
- Present in the build but not switched on

### First-sight summon pickup for artifact comments, off by default

Claude could answer an artifact summon the first time it sees a thread, but the switch is off.

**What**

When Claude auto-reacts to comments on an artifact, it can now pick up a recent summon the first time it sees a thread, not only on later sightings. The branch runs when `CLAUDE_CODE_ARTIFACT_COMMENT_FAST_ACK` is set, otherwise it consults the remote gate `tengu_gorse_pylon`, whose fallback is false. With no server value, the new branch never runs and only the previous pickup path applies.

**Details**

- Telemetry reports the outcome: an `artifact_comments_autoreact` event flags `first_sight_summon` when summons were found, or gives the rejection reason `first_sight_summon_stale` when candidates existed but all were too old.
- Covers both the branch that baselines a newly seen thread and the re-sighted branch.
- The gate helper itself already existed; only this use of it is new.

**Evidence**

`first_sight_summon_stale`

- Flag `tengu_gorse_pylon`: Not enough to say (read for one account on one subscription tier against v2.1.237; this account: no value returned, anonymous baseline: no value returned, compiled default: on)
- Area: Artifacts
- Names: `CLAUDE_CODE_ARTIFACT_COMMENT_FAST_ACK`
- Tier: Not switched on
- Useful: 2/5
- Signal: 4/5
- Present in the build but not switched on

### New built-in output style "Concise"

You can now pick a "Concise" output style so Claude leads with results and skips narration.

**What**

A fifth built-in style joins Proactive, Explanatory and Learning. Described as "Claude responds tersely, leading with results and skipping preamble and narration", it tells the model to lead with the result, cut narration, answer simple questions in 1-3 sentences and never trade correctness for brevity. Nothing gates its registration, so anyone on this build can pick it from the output-style list unless output styles are turned off entirely.

**Details**

- Registered as a built-in style with coding instructions retained, so normal engineering guidance still applies.
- Its system prompt is headed "# Concise Style Active" and states explicitly that it overrides more general communication guidance, backed by six rules plus a short reminder re-injected each turn.
- Reported in prompt telemetry under its own key rather than collapsing into the generic one.

**Evidence**

`Claude responds tersely, leading with results and skipping preamble and narration`, `The user chose brevity over narration. You should:`

- Area: Output Styles
- Names: `/output-style`
- Tier: Use it now
- Useful: 4/5
- Signal: 2/5

## In Development

### Claimed sender text must actually appear in the event

A pushed message can no longer claim words it never actually delivered; mismatched sender text gets stripped.

**What**

If a pushed event says who sent it and quotes their text, the harness checks that the escaped form of that text really appears inside the event body. If it does not, the sender text is stripped from the recorded provenance and a warning is logged, so provenance cannot claim a sender string the delivered event never contained.

**Details**

- Same poll-events gating as the rest of this path; the event itself is still delivered, only the unverifiable sender text is removed.

**Evidence**

`poll_event: sender_text dropped from provenance \u2014 its escaped form is not embedded in the event element (derivation contract violated)`

- Area: Sessions
- Tier: Under the hood
- Useful: 2/5
- Signal: 3/5

## Internal Changes

### Concise reported separately in prompt telemetry

Sessions using the Concise output style are now counted separately from other styles.

**What**

The list of prompt identities that may be reported gains a key for the new Concise style, alongside the custom, Proactive, Explanatory and Learning keys, so sessions using it are distinguishable instead of collapsing into the generic key.

**Evidence**

`"repl_main_thread:outputStyle:Concise": !0`

- Area: Telemetry
- Tier: Under the hood
- Useful: 2/5
- Signal: 3/5

### Build metadata bumped to 2.1.237

The reported version and build stamp move to 2.1.237 everywhere they appear.

**What**

The inlined build constants move to version 2.1.237, build time 2026-08-19T22:15:38Z and a new commit SHA, across roughly 60 places including version output, updater messages, user-agent strings, remote-control minimum-version errors and daemon logs.

**Evidence**

`45590910f0b746ddad3fe7d8135c5c29b33ccf88`

- Area: Build Metadata
- Tier: Under the hood
- Useful: 2/5
- Signal: 1/5

### Version stamp moved from 2.1.236 to 2.1.237

Version output and telemetry now say 2.1.237 instead of 2.1.236; nothing else changes.

**What**

The same build constants object drives the reported CLI version, telemetry version fields, update checks and `--version` output; the roughly 91 changes in this group are that one literal appearing at different call sites. Nothing changes but the reported version.

**Evidence**

`GIT_SHA: "45590910f0b746ddad3fe7d8135c5c29b33ccf88"`

- Area: Build Metadata
- Names: `--version`
- Tier: Under the hood
- Useful: 2/5
- Signal: 1/5

### Two apparent edits are renaming only

Two changes in hook spawning and MCP state are renames only, with identical behaviour.

**What**

In the code that spawns hook commands, including the Windows branch that errors when neither `pwsh` nor `powershell` is on PATH, only local variable and module alias names changed; the spawn options are identical. In the MCP client state update, a line that looks dropped is a rename artifact, and all four empty-list fallbacks for disabled or failed servers (tools, commands, resources, resource templates) are still computed.

**Evidence**

`replaceOnly: te,`

- Area: Elsewhere
- Tier: Under the hood
- Useful: 1/5
- Signal: 0/5

### Bulk version stamp and cosmetic re-minification

Bundled code was reformatted and restamped with the new version; nothing behaves differently.

**What**

Around 70 embedded metadata objects carry the new version, build time and commit, and the rest is formatting reflow and renamed identifiers in bundled code such as the schema validator, glob matcher, QR renderer and worktree helpers, with no behaviour difference.

**Evidence**

`BUILD_TIME: "2026-08-19T22:15:38Z"`

- Area: Build Metadata
- Tier: Under the hood
- Useful: 1/5
- Signal: 0/5
