Claude Code 2.1.247: Claude drafts your bug report, and you decide whether the transcript goes with it

One release, one real addition: the SendFeedback tool, which has Claude write the report you then send from /feedback. The changelog gives it a single line; the docs give a lot more, starting with the fact that the two ways to send a draft do not carry the same thing. Plus two config files the client used to clobber, and Sonnet 5 auto-compacting 33,000 tokens later.

claude-code changelog security

One release since the last digest: 2.1.247, shipped August 26. About thirty entries, one addition that genuinely matters, and it deserves more than the line it gets.

The rest follows the same slope as 2.1.246: fixes that give the client back the habit of saying what it is doing, and two cases where it overwrote a config file you never wrote for it. Here is the triage.

SendFeedback: Claude drafts, you decide what leaves

This is the release's addition, and the changelog sums it up in one sentence: when something goes wrong in a session, Claude can draft a feedback report for you to review and send from /feedback, switchable off with the feedbackDrafts setting.

Put that way, it sounds harmless. The tool's documentation is far more specific, and two points are worth knowing before you meet your first draft card.

Nothing leaves on its own. Every draft is written to your machine, under ~/.claude/feedback/drafts/, and the docs state it plainly: nothing reaches Anthropic until you send it. Claude drafts one when a tool or command keeps failing, when it can't help with what you asked, when you point out a mistake it made or it notices one itself, or when you explicitly ask it to file feedback.

The two send paths do not carry the same payload, and that is the real story. When the draft appears as a card above your prompt, 1 opens the review, 2 twice sends it as written, 0 dismisses it. Sending from the card never includes the transcript. Running /feedback with no argument opens the queue instead, and there the review screen carries a Send transcript field that starts at yes whenever the originating session's transcript is still available: that is the whole conversation going to Anthropic. Same button, same report, very different data perimeter. If you work on code your employer would rather keep in-house, that is the line to check before clicking.

The report also carries your title, area and details, environment info (version, operating system, model) and the IDs of recent API requests. Your working directory is kept in the local draft so Claude Code can find the transcript, but it is not sent.

Three more limits the changelog leaves out. The queue holds ten drafts across all your sessions, and an eleventh deletes the oldest. A draft left in the queue expires after 30 days. And you see at most three cards per session, a ceiling Anthropic can adjust server-side without shipping a release.

The tool is also not everywhere: the docs restrict it to interactive terminal sessions on your own machine using the Claude API. It is absent from -p runs, the Agent SDK, cloud sessions, and Bedrock, Vertex or Foundry. If you automate Claude Code, you will never meet it.

To turn it off, set Claude-drafted feedback to off in /config, which writes feedbackDrafts. The quiet value is the interesting middle ground: Claude keeps drafting, but you only see a count in the prompt footer instead of cards. An administrator can pin the setting in managed settings, which takes precedence over yours.

One dating detail while we are here: the changelog announces the tool in 2.1.247, while the docs say it requires 2.1.238 or later. If you saw it before today, you were not imagining things.

Two config files it will no longer clobber

Second digest running where the client destroyed something you had created yourself. After 2.1.246's deleted worktrees, two cases this time, and both involve configuration files.

The first hits a precise population: the Bash sandbox's after-command cleanup was deleting a ~/.claude/settings.json managed as a symlink by your dotfiles (nix, home-manager, stow) whenever the link pointed outside the sandbox's writable area. In other words the user settings file, the one that applies to every one of your projects, vanished out from under your dotfile manager. If you run that setup and your settings have been "resetting" for no reason, there is your cause.

The second is blunter still: /terminal-setup was overwriting your entire Zed keymap.json instead of merging its keybinding into it. That is not a Claude Code file, it is your editor configuration, and a convenience command was replacing it wholesale. It merges now.

Same family, a keybindings.json entry with an unknown action no longer deadens the key, though that one landed in the previous release. What is taking shape across two versions is a run of fixes on the places where Claude Code writes into files it does not own.

Sonnet 5 auto-compacts 33,000 tokens later

A quiet but perfectly measurable behaviour change: Sonnet 5's default auto-compact window moves to its full 1M context, so sessions now compact at about 967,000 tokens instead of about 934,000.

That is not cosmetic on long sessions. Compaction summarizes older history, and every compaction is a moment where context is lost. Thirty-three thousand tokens of reprieve is one more large file before the summary kicks in.

The Sonnet 5 context window docs add what the changelog does not, and that is where it gets useful. On the Claude API, Sonnet 5 always runs at 1M: no 200K variant, no [1m] suffix to pick, no usage credits required. But two configurations quietly put you back at 200K:

  • An LLM gateway, when ANTHROPIC_BASE_URL points at a third-party proxy: Claude Code can't verify 1M support and budgets 200K. To get the full window back, select Sonnet 5 (1M context) in the model picker, which maps to sonnet[1m].
  • CLAUDE_CODE_DISABLE_1M_CONTEXT=1, which holds every model with a native 1M window to 200K. Worth noting: setting the auto-compact window above 200K does not lift that hold, because Claude Code caps the window at the model's real context window.

If you want a different threshold, CLAUDE_CODE_AUTO_COMPACT_WINDOW takes precedence over the /autocompact command, the --autocompact flag and the setting.

The sessions that wedged without saying why

The thread running through the rest of the release, never stated as one: several fixes are about sessions that died or wedged without the cause surfacing.

The nastiest is the chatty hook. A hook or background agent that printed megabytes of error output could overflow the conversation and wedge the session on "Prompt is too long." The mechanism is cruel: your session becomes permanently unusable because of a script of yours that went wrong, and the error talks about prompt length, not about the hook. Its immediate cousin: memory grew without bound when a hook's or background task's output file could not be written; the file now notes where the output was lost.

Subagents no longer die on a first-call 404. They now use the session's fallback model chain, and the error returned to the parent includes the error type, status, request id and model. That is the right call: the fallback chain docs note that Claude Code caps a chain at three models after duplicate removal and that the switch lasts for the current turn only, so a subagent that lands on a fallback does not change your session's model.

Cloud sessions finally report lost work. They went silent when the container restarted between turns while a background agent, shell or monitor was still running. The resumed session now reports what disappeared. For anyone running routines with nobody watching, that is the difference between a wrong report and an incomplete but honest one.

And Claude knows again when an MCP server failed. On Bedrock, Vertex, Foundry and any session with telemetry disabled, when a configured MCP server failed to connect, Claude was not told and simply concluded its tools did not exist. It is told now.

The terminal stops trusting the text it renders

Two hardening entries, worth reading together because they address the same problem: text written by somebody else, rendered by your terminal.

On the plugin side, marketplace names containing control or invisible characters are rejected, and marketplace-supplied text in /plugin and claude plugin output is now escape-safe. On the markdown side, terminal hyperlinks change rules: a target pointing at a network or automounter path, containing a control character, or leading with an invisible character now renders as plain text rather than a clickable link.

The common thread is simple: a link whose label does not match its target is the oldest trick there is, and a terminal that prettily renders untrusted text hands it full power. Nothing to do on your side, but if you maintain a plugin marketplace whose name relied on exotic characters, it will not pass any more.

Everything else worth a line

  • New /claude-api cost-optimize command: it profiles an existing project's Claude API spend and works through the cost levers (caching, token hygiene, batch, effort, model choice) one measured change at a time. The /claude-api skill also gains Admin API coverage (members, invites, workspaces, API keys, rate limit reports, workload identity federation, CMEK).
  • Cross-session messages collapse by default: a message from another of your sessions now shows as a one-line Message from @<sender> preview, with Ctrl+O to expand. Useful reminder: crossSessionInbound can hold those messages instead of delivering them, which stops them starting a full turn on an idle session.
  • Fast arrow keys then Enter: the action landed on the row above the one you had navigated to, in history search, /config, /mcp, /skills, background tasks and /model. Fixed.
  • /compact under --agent summarized using the default system prompt instead of the conversation's own. Same for "Summarize from here".
  • /rename confirmed silently even when the session registry could not be updated; it now warns that other sessions may still show the old name.
  • spinnerTipsOverride accepts {id, text, cooldownSessions, priority} entries, a tipsFile and a label, so organizations can rotate their own tips alongside the built-in ones. And Bash permission prompts now show a tip pointing at auto mode, with a one-keystroke switch.
  • Background sessions: one could sit on "opening…" forever in claude agents after its terminal host process died; the row now fails within seconds with the reason, and Enter restarts it. Shell commands carried over from the foreground no longer log an internal error or a misleading [exited with code -1].
  • Terminals and keyboards: Ctrl shortcuts did not fire under non-Latin layouts (Cyrillic, for instance) in kitty-protocol terminals, and text like <35;150;7M got inserted into the prompt when a mouse report arrived split across reads.
  • /install-github-app over SSH: the copy shortcut always claimed success; it now says how the sign-in URL was copied, and the URL appears immediately when no browser can open.
  • Plugins: a version-less marketplace plugin's live cache directory was deleted and recreated on a second-scope install, which could disrupt a running session using it.
  • Sign-in and organizations: first-run setup exited with "Unable to connect to Anthropic services" when managed settings configure Claude apps gateway sign-in and Anthropic endpoints are unreachable. Analytics now stay off from startup rather than only after login in those same deployments. And organization sign-in enforcement exits at start when the administrator's managed settings cannot be read.
  • Odds and ends: Remote Control sessions were not reporting the working-tree diff to connected clients, self-hosted runners reported running before Claude Code had started, cloud sessions sometimes showed the previous permission mode when you switched right after sending a message, and the prompt-footer PR badge now skips its GitHub re-check on refocus when the last one is under a minute old.

What to actually do

One thing today, and it takes less than five minutes: decide now what you want from SendFeedback, before you meet your first card in the middle of a session that was already going badly. If your code is sensitive, remember the distinction: the card never sends the conversation, the queue offers it at yes by default. If you would rather not think about it, feedbackDrafts set to quiet keeps the mechanism without the interruptions, and off kills it.

Otherwise, 2.1.247 is an easy one to take. It hands 33,000 tokens of context back to Sonnet 5 sessions, it stops overwriting two config files it does not own, and it unblocks a category of sessions that died without saying why. Nothing that breaks a habit, no reason to wait.

Pierre Rondeau

Pierre Rondeau

Developer and indie builder. I build products and automations with AI. Creator of Claude Hub.

LinkedIn