Source Intelligence

DisclaimerUnofficial, and not affiliated with Anthropic. Nearly all of this is read straight out of what ships: npm bundles, captured prompts, published docs. Anthropic's own notes go in verbatim, marked as theirs. The rest is my reading, and every entry carries the strings behind it. If one looks wrong, vote it down and say why.

All releases Home olderv2.0.27 v2.0.29newer

Claude Code v2.0.28

20 entries read diff v2.0.27 → v2.0.28 Markdown

Version 2.0.28 introduces marketplace branch/tag support for plugin repositories, enhanced cleanup when removing marketplaces, and several security and performance improvements including SSH pre-flight checks and agent transcript resumption capabilities.

Find
Pick an entry · j / k steps through
20 entries

Changesopen

Marketplace Branch/Tag Support#

What: Marketplaces can now be installed from specific branches, tags, or commit refs instead of only the default branch.

How to use:

# Install from a specific branch
claude marketplace add owner/repo#develop

# Install from a tag
claude marketplace add owner/repo#v1.2.3

# Install from a commit hash
claude marketplace add [email protected]:owner/repo.git#abc123

Details:

  • Use #ref syntax after the repository name or URL to specify a branch, tag, or commit
  • Updates to existing marketplaces now respect the specified ref
  • Git clone operations include the --branch flag when a ref is specified (Xd8() at line 264036, b5Q() at line 264043, Cd8() at line 264049)
  • Git update operations fetch and checkout the specified ref (Bd8() at line 263476)
  • Clone and update logging now shows which ref is being used
  • Evidence: New functions Xd8() at line 264036, Bd8() at line 263476, b5Q() at line 264043, Cd8() at line 264049; marketplace parsing extracts ref from URLs at line 263078-263135

SSH Authentication Pre-flight Check#

What: Claude now tests SSH authentication before attempting to clone GitHub repositories, avoiding unnecessary failed clone attempts for users without SSH keys configured.

How it works:

# When you add a marketplace, Claude now checks SSH first
claude marketplace add owner/repo

# If SSH is configured: "Cloning via SSH: [email protected]:owner/repo.git"
# If SSH is NOT configured: "SSH not configured, cloning via HTTPS: https://github.com/owner/repo"

Details:

  • Executes ssh -T [email protected] to verify authentication before cloning
  • Uses BatchMode=yes to prevent interactive prompts
  • 2-second connect timeout and 3-second overall timeout for fast checks
  • Automatically falls back to HTTPS without a failed clone attempt
  • Provides clearer logging about SSH status
  • Evidence: New function Qd8() at line 263519; usage in marketplace cloning logic at lines 263717-263750

Agent Transcript Resumption#

What: Agents can now resume from previous execution transcripts, allowing you to continue where a previous agent left off.

How to use:

# The Agent tool now accepts a 'resume' parameter
# When invoking an agent programmatically:
{
  "subagent_type": "investigator",
  "prompt": "Continue analyzing the codebase",
  "resume": "agent-abc123"  // ID of previous agent execution
}

Details:

  • New resume parameter in Agent tool input schema
  • Loads previous agent's message chain from transcript file
  • Filters messages by agent ID and reconstructs conversation history
  • Prepends previous messages to new prompt for continuity
  • Previous messages are not re-recorded to session storage
  • Evidence: New function b_2() at line 465741; resume parameter schema at line 449027-449032; resume logic at lines 449114-449130

Help Command Fast Path#

What: Commands ending with --help now bypass expensive API calls for prefix detection, significantly improving response time.

Details:

  • Validates help commands using pattern matching before API calls
  • Checks that command ends with --help and contains only valid flags
  • Ensures no quotes are present (which would complicate parsing)
  • Validates all tokens are alphanumeric or the --help flag
  • Immediately returns the full command as its own prefix
  • Evidence: New function Yq8() at line 204259; usage at line 204549

Enhanced Marketplace Removal Cleanup#

What: Removing a marketplace now automatically cleans up all references from settings files, preventing orphaned configuration entries.

How it works:

# When you remove a marketplace:
claude marketplace remove my-marketplace

# Now also removes:
# - extraKnownMarketplaces.my-marketplace from all settings files
# - All enabledPlugins entries like "plugin-name@my-marketplace"
# - Cleans userSettings, projectSettings, and localSettings

Details:

  • Iterates through all settings files (user, project, local)
  • Removes marketplace from extraKnownMarketplaces
  • Removes all plugins associated with the marketplace from enabledPlugins
  • Logs cleanup actions for each settings file
  • Handles errors gracefully if settings write fails
  • Evidence: Enhanced function ruA() at line 263832 (replaced suA() from v2.0.27); cleanup loop at lines 263842-263868

Improved Path Traversal Detection#

What: Enhanced security check now detects paths with 3+ consecutive dots (e.g., ..., ....) as suspicious Windows path patterns.

Why this matters: Attackers sometimes use unusual dot sequences to bypass basic .. filters. While ... isn't standard, blocking it prevents potential exploits in path normalization edge cases.

Details:

  • Adds regex check /\.{3,}/ to Windows path validation
  • Blocks paths like C:\Users\....\file.txt or path/to/.../folder
  • Triggers manual approval prompt: "contains a suspicious Windows path pattern"
  • Complements existing checks for reserved names, alternate data streams, and other Windows-specific attacks
  • Evidence: Modified function tf2() at line 465855 (renamed from mf2()); new check at line 465867

Related

Other releases about the same thing. Found by shared names or similar wording; neither means one caused the other.

Extended Git Operation Timeouts#

What: Git clone and update operations now use 30-second timeouts instead of 5 seconds, improving reliability for large repositories or slow connections.

Details:

  • Clone operations: timeout increased from 5000ms to 30000ms
  • Update operations: timeout increased from 5000ms to 30000ms
  • Reduces false failures on slow networks or large marketplaces
  • Evidence: Id8() at line 263544 uses timeout: 30000; Bd8() at line 263476 uses timeout: 30000

Terminal Output Height Detection#

What: Improved detection of when terminal output needs to be redrawn, accounting for output height relative to terminal rows.

Details:

  • Now considers whether output height exceeds terminal rows
  • Checks both previous and current state for overflow conditions
  • Prevents visual artifacts when output is taller than terminal
  • Evidence: Enhanced function OL0() at line 70043 (was wL0() in v2.0.27); checks B.outputHeight >= B.rows at line 70046

Session Initialization with Current Working Directory#

What: Session state now initializes with the actual current working directory instead of placeholder values.

Details:

  • Calls Uo2() (likely process.cwd()) to get actual working directory
  • Normalizes the path using zo2()
  • Sets both originalCwd and cwd to the correct value at session start
  • Evidence: Modified function wo2() at line 3444 (was Yo2() in v2.0.27); uses zo2(Uo2()) at line 3446

Tool Permission Request Tracking#

What: The permission stream class now tracks pending permission requests, enabling better state management and UI updates.

Details:

  • New method getPendingPermissionRequests() on the stream class
  • Returns array of pending can_use_tool requests
  • Filters request map to find active permission prompts
  • Stores request metadata alongside resolve/reject callbacks
  • Evidence: Enhanced class dzA at line 475314 (was hzA in v2.0.27); new method getPendingPermissionRequests() at line 475580; request storage at line 475650

Agent Result Tracking#

What: Agent execution results now include the agent ID for better tracking and correlation.

Details:

  • Agent tool results now return agentId field along with content and usage stats
  • Enables linking results back to specific agent invocations
  • Supports transcript resumption and execution tracking
  • Evidence: Modified function Bv6() at line 448963 (was dx6() in v2.0.27); returns agentId: B at line 449019

Model Override Support for Subagents#

What: Agent model selection now supports an additional override parameter for finer-grained control.

Details:

  • New third parameter Q in model resolution function
  • If override is provided, it takes precedence over agent-specified model
  • Falls back to agent model, then "inherit", then default
  • Environment variable CLAUDE_CODE_SUBAGENT_MODEL still has highest priority
  • Evidence: Modified function akA() at line 144682 (was lkA() in v2.0.27); uses override parameter at line 144693

Token Budget Capping#

What: API requests now respect a token budget cap, adjusting both max_tokens and thinking budget_tokens when needed.

Details:

  • New function ensures total tokens don't exceed specified budget
  • Reduces thinking budget proportionally when capping is needed
  • Prevents thinking budget from consuming all available tokens
  • Evidence: New function pb6() at line 460609

SessionStart Hook Context#

What: Plugin SessionStart hooks now receive session context information for better initialization.

Details:

  • Hooks receive session metadata when invoked
  • Enables plugins to customize behavior based on session state
  • Evidence: Modified function Lz() at line 317267 (was qz() in v2.0.27); passes session context parameter B at line 317350

Plugin Command Processing with Session ID#

What: Plugin commands and skills now have access to session ID during processing.

Details:

  • Session ID passed through to command/skill creation functions
  • Enables session-aware plugin behavior
  • Supports plugin state management across invocations
  • Evidence: Modified functions ZR2() at line 441792, YR2() at line 441892, yUA() at line 441803 now accept session ID parameter

File Permission Check Consolidation#

What: File write permission checks now use a centralized safety validation function for consistency.

Details:

  • New SL1() function provides unified safety checks for write operations
  • Checks for suspicious Windows paths, sensitive files, and permission rules
  • Returns structured result with safety status and message
  • Used by both direct file operations and tool permission handlers
  • Evidence: New function SL1() at line 465870; used in jL1() at line 466119 and xn() at line 466119

Ripgrep Binary Loading Flexibility#

What: Added support for custom ripgrep binary location via environment variable.

Details:

  • New RIPGREP_NODE_PATH environment variable supported
  • If set, loads ripgrep from specified path instead of bundled version
  • Useful for custom deployments or testing
  • Falls back to bundled ripgrep if not set
  • Evidence: Modified function To2() at line 3881 (was Eo2() in v2.0.27); checks process.env.RIPGREP_NODE_PATH at line 3882

Refactored Functions#

  • Session ID generation functions consolidated
  • Permission stream class methods reorganized
  • Skills loading function signatures updated for session context
  • Git clone/update error handling refactored into shared R5Q() function at line 263494

Related

Other releases about the same thing. Found by shared names or similar wording; neither means one caused the other.

Import Optimizations#

  • Removed unused stream import
  • Removed unused node:child_process import
  • Removed unused node:process import
  • Added targeted imports: execSync, spawn, readdir, readFile, PassThrough, homedir, openSync, existsSync, readFileSync, writeFileSync, dg6, cg6, pg6
  • Added process.cwd import: import { cwd as iL0 } from "node:process" at line 70611

Related

Other releases about the same thing. Found by shared names or similar wording; neither means one caused the other.

Code Organization#

  • Path validation logic consolidated into reusable SL1() function
  • Git error handling extracted to R5Q() helper
  • Agent ID generation moved to dedicated HrA() function at line 393160
  • Transcript path functions reorganized (bf2() at line 465227, PU() at line 465250)

Note: This changelog focuses on user-visible changes and significant internal improvements. Many variable and function names appear random due to the code being previously minified. Line numbers reference the prettified v2.0.28 source file.

Related

Other releases about the same thing. Found by shared names or similar wording; neither means one caused the other.

Verbatim
Official · Anthropic

Anthropic’s official release notes

Published verbatim by Anthropic for v2.0.28. Text is unmodified from the upstream changelog. Everything else on this page came out of the bundle instead, which is why the two lists don't match.

  • Plan mode: introduced new Plan subagent
  • Subagents: claude can now choose to resume subagents
  • Subagents: claude can dynamically choose the model used by its subagents
  • SDK: added --max-budget-usd flag
  • Discovery of custom slash commands, subagents, and output styles no longer respects .gitignore
  • Stop /terminal-setup from adding backslash to Shift + Enter in VS Code
  • Add branch and tag support for git-based plugins and marketplaces using fragment syntax (e.g., owner/repo#branch)
  • Fixed a bug where macOS permission prompts would show up upon initial launch when launching from home directory
  • Various other bug fixes
System prompt

The system prompt was not captured for this release, so this page cannot say whether it moved.