Cache_creation tokens per turn doubled (2.18x) after migrating from VS Code extension to desktop app — Opus 4.7 / Max plan

Resolved 💬 3 comments Opened May 1, 2026 by retreatvr-alt Closed May 5, 2026

Summary

After migrating from the Claude Code VS Code extension to the desktop app on April 27, 2026, my per-turn cache_creation token usage roughly doubled. Hard data plus ruled-out user-side variables suggest the desktop app constructs a materially larger system prompt than the extension for the same account configuration.

Filing here because Anthropic Support's Fin AI agent looped me without escalating to a human (3 manual escalation requests, 0 human replies, 3 auto-closes; final bot recommendation was to use /bug or GitHub Issues — hence this issue). Support conversation ID for cross-reference: 215474116709780.

Environment

  • Plan: Max (Opus 4.7, 1M context window)
  • OS: macOS
  • Migration date: 2026-04-27 (~12:00 PM PT)
  • Account identifiers: UUID and email available privately if Anthropic engineering wants to investigate this specific account — happy to share via the support thread (conversation ID 215474116709780) or directly.

Hard Data

Comparing my last full pre-migration work week to the days immediately after, computed by parsing local JSONL session files at ~/.claude/projects/*/*.jsonl:

| Metric | Pre-migration (Apr 13-19, 13,747 turns) | Post-migration (Apr 27-29, 7,261 turns) | Change |
|---|---|---|---|
| Avg cache_creation per turn | 8,322 tokens | 18,140 tokens | 2.18x |
| P90 cache_creation per turn | 9,221 tokens | 21,417 tokens | 2.32x |
| Avg output per turn | 893 tokens | 1,978 tokens | 2.21x |
| Cache hit ratio | 95.9% | 92.7% | -3 pp |
| Avg daily list-price-equivalent cost | $731 | $1,788 | 2.45x |

Cache hit ratio is healthy (>92% in both periods), so the cost isn't from cache invalidation — it's volume × per-turn context size. The cleanest signal is avg cache_creation per turn: each turn's system prompt being written to cache. It roughly doubled.

What I held constant across the migration

  • Same model (Opus 4.7, 1M context, Max plan)
  • Same effortLevel: "max" (set for months prior)
  • Same explanatory-output-style plugin (active for months prior)
  • Same 9 enabled plugins — no additions or removals
  • Same project structure and CLAUDE.md files (only minor content additions in the same week, well below 10K tokens/turn)
  • Same .mcp.json MCP servers (cal, excalidraw, prohostai, clickup)
  • Same browser-automation tooling (Playwright via browser-use, Claude in Chrome) — both active in VS Code as well
  • Same scheduled tasks (run in their own sessions; don't affect interactive token usage)

The Opus 4.7 tokenizer change is documented as ~1.0–1.35x more tokens than prior models — well below the 2.18x observed. Fin AI confirmed this disparity in its replies.

Hypothesis

The desktop app appears to auto-load Claude.ai connectors that the VS Code extension did not surface to the model.

From ~/.claude.json:

claudeAiMcpEverConnected:
  - claude.ai Gmail
  - claude.ai Google Calendar
  - claude.ai ClickUp
  - claude.ai Canva
  - claude.ai Google Drive

Plus desktop-app built-ins not present in VS Code:

  • Computer Use (mcp__computer-use__*)
  • Claude in Chrome (mcp__Claude_in_Chrome__*)
  • Claude Preview (mcp__Claude_Preview__*)
  • CCD session/directory/session_mgmt
  • MCP Registry
  • Scheduled Tasks

Each contributes its tool name list (and any associated instructions) to the system prompt. This is consistent with the doubling observation but can't be verified from the user side.

In the support thread, Fin AI listed the components that contribute to system prompt size: base prompt + output styles + tool definitions (incl. MCP servers) + CLAUDE.md files + skill descriptions + permission mode classifier calls. The bot also called the auto-loaded-connectors hypothesis "plausible" but lacked telemetry access to confirm.

Mitigation already attempted

  • Migrated clickup from app-level connector to project-scoped .mcp.json HTTP entry (removes one connector's tool footprint from the global system prompt). Too soon to measure impact.
  • Did not disable explanatory-output-style or effortLevel: max — these were unchanged across the migration so disabling them addresses output cost but not the cache_creation gap.

What I'm asking for

  1. Server-side confirmation of what changed in system-prompt construction between the VS Code extension and desktop app for Max-plan accounts post-Apr 27.
  2. Documentation of which Claude.ai connectors and desktop-app built-ins are auto-loaded by default in the desktop app, and how to opt out without disconnecting the integrations themselves.
  3. Investigation of whether this is a known regression and whether a mitigation is planned.
  4. Recommendation for restoring per-turn cache_creation toward pre-migration baseline (~8K tokens/turn).

Trust angle

A cloud product silently doubling its consumption of a paying customer's plan tokens after a UI migration — with no disclosure and nothing changed on the user side — is functionally indistinguishable from quietly extracting more usage from paying customers. Raising it here in good faith because I want to keep using the desktop app, but I need transparency on what changed and why.

Reproducibility

Happy to share the Python parser script, redacted JSONL session sample, or the 14-day token usage report if useful — just let me know.

View original on GitHub ↗

This issue has 3 comments on GitHub. Read the full discussion on GitHub ↗