Developer Tools & APIs

Claude Code v2.1.160: Faster auto mode, fewer CI headaches, and a raft of bug fixes

Claude Code v2.1.160 cuts auto mode classifier latency, fixes Bedrock/Vertex/Foundry CI failures, and resolves Bazel, OneDrive, CJK, and voice mode bugs.

developer tools apis category

Claude Code v2.1.160 is out, and while there is no single headliner feature, it is the kind of release that makes the tool noticeably more reliable for a wide range of users. Faster auto mode, cleaner CI behaviour on third-party providers, and a crop of fixes for Bazel, OneDrive, CJK input, and voice mode.

Here is what changed and what it means for your day-to-day work.

Auto mode is faster and blocks less

Auto mode uses a background classifier to evaluate each tool call before Claude executes it. The classifier acts as a lightweight safety reviewer, blocking actions that look risky while letting routine operations pass through without interrupting you.

Previously, the classifier ran the same reasoning process regardless of whether the action was trivially safe or genuinely ambiguous. In v2.1.160, reasoning is reduced for routine actions. The practical result: less latency per operation, and fewer occurrences of the frustrating “could not evaluate this action” block on things that were obviously safe. If you have been running long agentic sessions and hitting unexpected pauses, this should help.

Opening recently inactive sessions in claude agents is also faster. Background agent sessions that had gone dormant were slow to restore; that overhead has been cut.

If you use Bedrock, Vertex, or Foundry in CI, this one is for you

A particularly annoying bug affected anyone running claude -p (print mode) in a CI environment on Amazon Bedrock, Google Vertex, or Azure Foundry. With CI=true set, Claude Code was demanding ANTHROPIC_API_KEY even when you were authenticating entirely through the third-party provider. No Anthropic API key, no run.

That is now fixed. Claude Code correctly recognises the provider context and no longer blocks on a key that was never relevant.

Related to this: the error message shown when auto mode is unavailable on third-party providers was incorrectly blaming the model. It now correctly points to the CLAUDE_CODE_ENABLE_AUTO_MODE environment variable as the opt-in path. Small fix, much less confusing.

Bazel and Go EDR workflows: the $TMPDIR regression is resolved

Version 2.1.154 introduced a regression where $TMPDIR was overridden to /tmp/claude-{uid} for all Bash commands, not just sandboxed ones. This broke workflows under Bazel and EDR-protected Go environments, both of which have specific expectations about temp directory behaviour.

v2.1.160 corrects the scope so the override only applies where it was intended. If your Bazel builds or Go pipelines started failing a couple of releases back, updating should sort it out.

Windows and OneDrive path fixes

Two separate Windows issues are resolved. First, Bash commands were failing with EEXIST: file already exists when the session-env directory was read-only or living inside an OneDrive-synced folder. Second, keyboard input (Esc, arrow keys, typing) was becoming unresponsive under heavy CPU load when attached to a background session. Both are fixed.

CJK input and voice mode

For users typing in Chinese, Japanese, or Korean, IME composition was appearing in the bottom-left corner of the screen rather than at the cursor position in the claude agents view. That is corrected.

Voice mode was failing to connect when the project directory path or branch name contained non-ASCII or special characters. Fixed.

Ultracode effort messaging cleaned up

Ultracode, which pins reasoning to xhigh effort and enables automatic workflow orchestration across subagents, requires a model that supports xhigh reasoning. Currently that means Claude Opus 4.8. Older models like Sonnet 4.6 and Opus 4.6 do not support it.

Previously, running /effort ultracode on an incompatible model produced an error message that incorrectly blamed the Dynamic Workflows setting rather than explaining that the model simply does not support xhigh. Now, ultracode is not offered on models that cannot support it, and the messaging is accurate when it does appear.

Also in the ultracode area: the trigger keyword for launching Dynamic Workflows has been renamed from workflow to ultracode. The word “workflow” alone will no longer fire a dynamic workflow run. You can still trigger one by describing what you want in plain language; only the exact keyword has changed.

Background session reliability

A pair of bugs affecting background sessions are also resolved. Restoring a completed session from claude agents was dropping the chat history and re-running the original prompt, which was a problem if that prompt had side effects. Similarly, sessions reattached after an overnight idle period were losing their conversation context and replaying the original prompt. Both are fixed.

During session teardown (via claude rm or claude stop), SIGTERM is now sent to running shell subprocesses before SIGKILL, giving cleanup processes a chance to finish cleanly.

A security note for acceptEdits users

If you use acceptEdits mode (which lets Claude apply file edits without prompting for each one), Claude Code will now pause and confirm before writing to build-tool configuration files that grant code execution. The list includes .npmrc, .yarnrc, bunfig.toml, .bazelrc, .pre-commit-config.yaml, .devcontainer/ directories, shell startup files, and ~/.config/git/. The intent is to ensure that files capable of triggering arbitrary command execution are not silently modified, even in a permissive editing mode.

Updating

Run npm update -g @anthropic-ai/claude-code or the equivalent for your package manager to get v2.1.160. The Bazel $TMPDIR fix and the CI provider fixes are the highest-priority reasons to update promptly if either of those affected you.

Full release notes are on the Anthropic Claude Code release notes page and the GitHub releases page.