Claude Code v2.1.78 — 2 New Environment Variables: Plugin Persistence and Security Hardening#
Published on March 17, 2026
Part of the Claude Code Version Tracker series. | Official Changelog
Claude Code v2.1.78 adds 2 new environment variables compared to v2.1.77. Where v2.1.77 was a stabilization release with 25+ bug fixes, this version pivots to plugin infrastructure and security hardening — introducing persistent plugin state, a new StopFailure hook event, and multiple sandbox fixes that close real bypass vectors.
What Changed#
| v2.1.77 | v2.1.78 | |
|---|---|---|
| Environment variables | 180 | 181 (+1)[1] |
| Model IDs | 16 | 16 (no change) |
| Feature gates | 41 | 41 (no change) |
| Dynamic configs | 29 | 29 (no change) |
| Slash commands | 22 | 22 (no change) |
New Environment Variables (2)#
| Variable | Likely Purpose |
|---|---|
CLAUDE_PLUGIN_DATA | Provides a filesystem path where plugins can store persistent state that survives plugin updates and reinstalls. Previously, plugin data lived alongside the plugin code itself, meaning every update wiped accumulated state — conversation caches, user preferences, learned patterns. This variable gives each plugin a stable, versioning-independent directory for durable storage. The changelog explicitly confirms: "uninstalling plugins now prompts before deletion," which together with persistent data makes the plugin lifecycle significantly more production-ready. |
ANTHROPIC_CUSTOM_MODEL_OPTION[1] | Adds custom entries to the model picker dropdown accessed via /model. This lets users surface fine-tuned, proxy-routed, or internal model endpoints directly in the Claude Code UI without modifying the binary. Particularly relevant for enterprise deployments that route through LLM gateways or want to expose organization-specific model variants (like custom Bedrock endpoints) alongside the standard Claude model lineup. |
What These Tell Us#
The plugin system is crossing the "toy to tool" threshold. CLAUDE_PLUGIN_DATA is a deceptively important addition. Persistent state is the difference between plugins that are stateless utilities and plugins that can learn, cache, and accumulate context across sessions. Combined with the new agent frontmatter options in this release — effort, maxTurns, and disallowedTools — plugin-shipped agents now have fine-grained control over their execution parameters. This matters because the plugin marketplace is growing rapidly: Claude Code now supports headless plugin installation via CLAUDE_CODE_PLUGIN_SEED_DIR, zip-based caching with CLAUDE_CODE_PLUGIN_USE_ZIP_CACHE, and now persistent storage. The plumbing for a robust third-party ecosystem is being laid quickly.
Security is getting proactive attention. This release includes three distinct sandbox-related fixes: silent sandbox disabling when dependencies are missing (now shows a startup warning), protected directories becoming writable without prompts in bypassPermissions mode, and sandbox.filesystem.allowWrite failing with absolute paths. The deny: ["mcp__servername"] fix is also notable — it closed a gap where blocked MCP server tools could still be invoked before the model processed the deny rule. These aren't theoretical vulnerabilities; they're the kind of issues that surface during real security audits of enterprise deployments. The new StopFailure hook event, triggered when turns end due to API rate limits or auth failures, rounds out the observability story — you can now programmatically respond to every failure mode, not just tool-level ones.
Streaming and performance continue to be refined. Line-by-line response streaming is a user-visible improvement that makes long outputs feel more responsive. Under the hood, the --resume path got another round of optimization after v2.1.77's 45% speedup: this release fixes cc log and --resume silently truncating conversations over 5MB with subagents, and resolves an infinite loop where API errors could trigger stop hooks that re-fed blocking errors. The Homebrew-on-macOS path resolution fix — where Bash couldn't find Homebrew when VS Code launched from Dock/Spotlight — addresses one of the more commonly reported friction points in the GitHub issues.
Sources#
[1] Claude Code CHANGELOG.md — ANTHROPIC_CUSTOM_MODEL_OPTION appears in the official changelog for v2.1.78. Our binary extractor captures 181 CLAUDE_-prefixed variables; this ANTHROPIC_-prefixed variable was identified through the changelog. The total count including changelog-only variables is 2 new environment variables.
This analysis is conducted for independent security research and interoperability purposes under fair use principles. All trademarks belong to their respective owners. The information presented here documents publicly observable behavior of installed software and is not intended to circumvent any technological protection measures, infringe on intellectual property rights, or encourage unauthorized use. Use these findings at your own discretion.
Related Versions#
- Claude Code v2.1.77 — 1 New Environment Variable — cowork memory guidelines, 25+ bug fixes
- Claude Code v2.1.76 — 3 New Environment Variables — MCP elicitation, workspace host paths
- Claude Code v2.1.75 — 2 New Environment Variables — auto-compact window, plugin options
- Claude Code v2.1.74 — 2 New Environment Variables — frame timing diagnostics, session-end hook timeouts
- Claude Code v2.1.73 — Slash Commands Inventory — first baseline of built-in slash commands
Related: Context Window Management Guide | Claude Code Productivity Tips | The Agentic Engineering Playbook