Claude Code 2.1.69 is a massive release with 60+ changes: new InstructionsLoaded hook, git-subdir plugin source, /claude-api skill, /reload-plugins command, and Voice STT support for 10 new languages
System prompt flags (--append-system-prompt-file, --system-prompt-file) now work in both interactive and print modes — previously print-mode only
Extended thinking docs removed the "Thinking redaction" section (redacted_thinking blocks no longer documented as a feature)
Pricing docs expanded with a comprehensive prompt caching section detailing how cache multipliers work
Context compaction now available in the Ruby SDK (previously Python and TypeScript only)
Added the /claude-api skill for building applications with the Claude API and Anthropic SDK. Also activates automatically when code imports anthropic, @anthropic-ai/sdk, or claude_agent_sdk
Added optional name argument to /remote-control and claude remote-control (e.g. /remote-control My Project or --name "My Project") to set a custom session title visible in claude.ai/code
Added InstructionsLoaded hook event that fires when CLAUDE.md or .claude/rules/*.md files are loaded into context, at session start and lazily during a session
Added agent_id (for subagents) and agent_type (for subagents and --agent) fields to all hook events
Added worktree field to status line hook commands with name, path, branch, and original repo directory when in a --worktree session
Added includeGitInstructions setting (and CLAUDE_CODE_DISABLE_GIT_INSTRUCTIONS env var) to remove built-in commit and PR workflow instructions from the system prompt
Added /reload-plugins command to activate pending plugin changes without restarting
Added plugin source type git-subdir to point to a subdirectory within a git repo (sparse clone for monorepos)
Added pathPattern to strictKnownMarketplaces for regex-matching file/directory marketplace sources
Added pluginTrustMessage in managed settings to append organization-specific context to plugin trust warnings
Added sandbox.enableWeakerNetworkIsolation setting (macOS only) to allow Go tools like gh, gcloud, and terraform to verify TLS certificates when using a custom MITM proxy
Added ${CLAUDE_SKILL_DIR} variable for skills to reference their own directory in SKILL.md content
Added oauth.authServerMetadataUrl config option for MCP servers to specify a custom OAuth metadata discovery URL
Added Voice STT support for 10 new languages (20 total): Russian, Polish, Turkish, Dutch, Ukrainian, Greek, Czech, Danish, Swedish, Norwegian
Added effort level display (e.g., "with low effort") to the logo and spinner
Added agent name display in terminal title when using claude --agent
Added Ctrl+U on an empty bash prompt (!) to exit bash mode
Added numeric keypad support for selecting options in Claude's interview questions
Added ${CLAUDE_SKILL_DIR} variable for skills
Existing feature improvements
Improved MCP binary content handling: tools returning PDFs, Office documents, or audio now save decoded bytes to disk with the correct file extension instead of dumping raw base64 into the conversation
--append-system-prompt-file and --system-prompt-file now work in interactive mode (docs previously stated print mode only)
Changed Sonnet 4.5 users on Pro/Max/Team Premium to be automatically migrated to Sonnet 4.6
Changed the /resume picker to show the most recent prompt instead of the first one
TeammateIdle and TaskCompleted hooks now support {"continue": false, "stopReason": "..."} JSON response to stop a teammate entirely (not just re-run it with feedback)
ultrathink keyword now sets effort to high for that turn on Opus 4.6 and Sonnet 4.6 (rather than being treated as a plain prompt instruction)
[VSCode] Added compaction display as a collapsible "Compacted chat" card with summary inside
[VSCode] Permission mode picker now respects permissions.disableBypassPermissionsMode from managed settings
Major bug fixes
Fixed security issue where nested skill discovery could load skills from gitignored directories like node_modules
Fixed trust dialog silently enabling all .mcp.json servers on first run
Fixed symlink bypass where writing new files through a symlinked parent directory could escape the working directory in acceptEdits mode
Fixed sandbox prompting users to approve non-allowed domains when allowManagedDomainsOnly is enabled — non-allowed domains are now blocked automatically
Fixed interactive tools (e.g., AskUserQuestion) being silently auto-allowed when listed in a skill's allowed-tools
Fixed --model claude-opus-4-0 and --model claude-opus-4-1 resolving to deprecated Opus versions
Fixed macOS keychain corruption when using multiple OAuth MCP servers
Fixed memory leak in long-running SDK/CCR sessions where conversation messages were retained unnecessarily
Fixed API 400 errors in forked agents when resuming sessions interrupted mid-tool-batch
Fixed multi-GB memory spike when committing with large untracked binary files
--append-system-prompt-file and --system-prompt-file flags now work in both interactive and print modes. The "Modes" column removed from the system prompt flags comparison table — all four flags now work in all modes. [line 30] [Source]
Removed reference to the /commit-push-pr skill from the pull request workflow section
ultrathink keyword documented as setting effort to high for that turn on Opus 4.6 and Sonnet 4.6 (previously listed as a non-functional phrase alongside "think hard")
Added InstructionsLoaded hook event with full input schema documentation (file_path, memory_type, load_reason, globs, trigger_file_path, parent_file_path). [line 795] [Source]
Added agent_id and agent_type to the common input fields table for hooks running inside subagents or --agent sessions [line 478] [Source]
TeammateIdle and TaskCompleted hooks now support {"continue": false, "stopReason": "..."} JSON to stop a teammate entirely, in addition to exit code 2 to re-run with feedback [line 1453] [Source]
Clarified that SessionStart only supports type: "command" hooks
Added git-subdir plugin source type for pointing to a subdirectory within a git repo, with full documentation including url, path, ref, and sha fields [line 267] [Source]
Added pathPattern to strictKnownMarketplaces for regex-matching filesystem-based marketplace paths [line 762] [Source]
Added /claude-api bundled skill description: loads Claude API reference material and Agent SDK reference, covers tool use, streaming, batches, structured outputs, and common pitfalls
Added ${CLAUDE_SKILL_DIR} variable for referencing the skill's own directory regardless of current working directory
Added worktree fields to the status line JSON input documentation: worktree.name, worktree.path, worktree.branch, worktree.original_cwd, worktree.original_branch [line 189] [Source]
Added Windows configuration section with examples for invoking PowerShell or Bash scripts from Git Bash [line 562] [Source]
Added debugging tips: use claude --debug to log exit code and stderr from the first status line invocation
Best practices updated: recommendation changed from "Start with high" to "Set effort explicitly" since the right starting point depends on model and workload
Removed the "Thinking redaction" section and the "Example: Working with redacted thinking blocks" section entirely. The model handling note updated to remove redaction references
Added a comprehensive "Prompt caching" subsection under "Feature-specific pricing" explaining how caching works, pricing multipliers (1.25x for 5-min writes, 2x for 1-hour writes, 0.1x for reads), and when caching pays off [line 53] [Source]
The model pricing table's footnote now links to the new expanded section instead of repeating multipliers inline