This build carries 25 gated additions that stay switched off. A new 'bashEditDiff' system snapshots the repo around Bash commands to track their file changes, controlled by an env var or config, while a separate 'bash edit diff' mechanism produces its own diff of Bash-command changes. Streaming hook dispatch is now built end to end but only enabled for the 'turn.step' event, and refusing-to-answer fallback model switches can now ask you first with a persisted preference. Other dormant work includes a hidden /output-style command, a tengu_bridge_child_tool_diff setting for showing child-session edits to a parent session, off-by-default version-checked artifact writes, and two flags for skipping resent system prompts on continued server-side threads.
Of the 156 shipped entries, plugin hooks gain real teeth this release: a new turn.step hook lets plugins override or veto which model handles a request, and a new $.tool.check op lets a plugin test whether a tool call would be allowed without running it. The hooks engine also picks up tool.check, config.set, config.describe, session.attach, session.detach, and plugin.register event types, plus streaming (async-generator) hook support and MessageDisplay hooks that can rewrite text already streamed to the screen. A new 'Remote Control' system lets a cloud session dispatch tool execution to your local computer, the Bash tool now shows a diff of files a shell command edited by default, claude plugin eval gains --trust-plugin and --allow-real-servers flags, and a new CLAUDE_CODE_COORDINATOR_EXTRA_TOOLS env var extends the coordinator-mode tool allowlist.
Among the 70 fixes, MCP OAuth sign-in now validates a pasted redirect URL against the expected value before accepting it, and a denial from a tool.check hook now runs back through the normal deny/ask approval flow instead of hard-stopping. Plugin settings migration is more careful too: installed_plugins.json syncing now checks policy before treating a plugin as already installed, and it can heal stale managed-plugin records left over from that migration. Workflow agent() spawns now wait for MCP tool syncing to finish before resolving their tool set, and update checks can now tell a suspended process apart from a genuine network timeout. Claude Code also now blocks direct writes to the settings-review staging store, and plugins calling next.to() with a hooks module name that can't be statically found are rejected.