Back to Research

Spotify Portal Cut Claude Tokens 90%

Spotify’s Portal post sparked a real debate about saving Claude Code tokens by delegating bulk work to helper models.

Editorial illustration for Spotify Portal Cut Claude Tokens 90%.
Rogier MullerSeptember 6, 20269 min read

Portal by Spotify cut my Claude Code token usage by 90% is a Spotify Engineering post about reducing token spend while using Claude Code, Anthropic’s coding agent. It deals with a question many Claude Code users now feel in real repos: should the best model do every read and edit, or should cheaper helper models handle bulky work? My answer is boring and useful: treat Portal as a testable workflow pattern, not a magic trick or a thing to dismiss on principle.

Portal is a multi-model coding workflow that keeps Claude Code in the planning seat while sending selected high-volume tasks, like bulk reading or code writing, to helper models. That makes it a Claude Code workflow debate as much as a token story. The interesting part is not the exact 90% number. It is the boundary: which work is safe to delegate, and what evidence comes back?

Understand what Portal actually changed

Spotify’s post describes a setup where Claude Code no longer consumes every large file directly. Instead, a helper path can read big chunks and return a compressed summary. Another helper path can draft code, with Claude still coordinating the larger task.

That explains why developers reacted so strongly. The reported savings were large because the expensive path stopped doing some expensive things. In the benchmark discussed around the post, bulk-read scenarios showed mean savings around 90% compared with Claude reading files directly.

The trap is to read the number as universal. Token savings depend on repo shape, task shape, model prices, context size, and how much verification Claude must do afterward. A Java monorepo with huge files is not the same as a small TypeScript package with tight modules.

A concrete example helps. If Claude needs to inspect ten generated API clients, a helper summary may be enough. If Claude needs to change an auth boundary, the original files probably matter.

Take the objection seriously

The strongest criticism was not silly. Some developers saw the pattern as “offshoring, but for models.” Claude plans, a smaller model reads or writes, and the user pays less because the helper model absorbs the messy work.

That concern is fair. A weak helper can omit the line that matters. It can flatten uncertainty into a confident summary. It can write plausible code that passes a shallow read but violates a repo convention.

The best version of the pro-Portal argument is also fair. Many coding-agent tasks are not deep reasoning. Grepping, summarizing generated files, finding repeated call sites, and drafting boring adapter code are often bandwidth problems. You do not always need the strongest model for every token.

The practical line is quality of handoff. A helper should not return “looks good.” It should return file paths, symbols, assumptions, omitted areas, and confidence. Claude can then decide whether to reopen the source.

This is close to a good human workflow. You can ask a teammate to inventory a module. You still review the risky part yourself.

Separate search, summary, and code

The thread also raised a sharper point: Claude and other strong coding agents are already good at precise search. If the helper is only replacing grep with a fuzzier grep, the workflow may be worse.

That is the right pressure test. Search wants exactness. Summary wants compression. Code generation wants local style and tests. Those are three different jobs.

For search, prefer deterministic tools when possible. Let Claude call ripgrep, inspect line numbers, and open exact files. A smaller model is a poor substitute for rg "authorize" src/ when you need proof.

For summary, a helper model can be useful. Ask it to summarize a large directory, but require citations to file paths and symbols. If it cannot point back to source, the summary is not reviewable.

For code, be more careful. Helper-written code is cheapest when the change is mechanical. It is risky when it touches concurrency, security, migrations, billing, or public APIs.

A healthy Claude Code convention is simple: delegate bulk reading first, mechanical writing second, and never delegate final judgment. That is also the cleanest way to discuss this on a Claude Code training or workshop agenda without turning it into tool worship.

Test the pattern on your own repo

Do not argue from vibes. Run one local experiment against a real change from your backlog. Pick a task with enough files to matter, but low enough risk that you can inspect the result calmly.

Use the same task twice. In pass A, let Claude Code read the needed files directly. In pass B, give Claude a helper-produced inventory first, then allow it to reopen only the files it wants. Compare tokens, elapsed time, missed files, and review fixes.

Keep the convention small. You can document the boundary in your repo’s Claude Code conventions page or in the same place you keep the related training topic notes. If your repo already uses concise memory files, add only the rule that changes behavior.

A good rule is not “use cheap models.” A good rule is “helper summaries must include file paths, uncertainty, and skipped areas.” That survives model changes.

If you want a parallel story about Claude doing large, unfamiliar code work without making token savings the headline, Claude Ported a 1993 Amiga Game is the useful contrast.

Try it safely with one comparison table

Copy this into an issue, PR description, or Claude Code scratch note. It is small on purpose. The goal is to settle the question locally.

Question Direct Claude read Helper summary first Pass condition
Task Same ticket or bug Same ticket or bug Inputs match
Files opened by Claude Count exact files Count exact files reopened after summary Helper does not hide key files
Token use Record session estimate Record session estimate Savings are visible after verification
Missed facts Reviewer notes Reviewer notes No missed security, API, or data-flow facts
Code changes Diff size and touched modules Diff size and touched modules No extra churn
Review fixes Count requested fixes Count requested fixes Helper path does not increase fix count

Suggested Claude Code prompt for the helper-summary pass:

Before editing, treat this as a Portal-style token experiment.

Use the provided inventory as a starting point, but do not trust it blindly.
Reopen any file that affects behavior, public APIs, auth, data writes, tests, or migrations.
When you rely on the inventory, name the file path and the assumption.
At the end, report which files you did not inspect directly and why.

One optional artifact is a custom slash command, if your repo uses them:

/token-inventory-check
Compare direct source inspection with helper-provided summaries.
Return: files reopened, assumptions trusted, skipped files, and review risks.
Never edit until the risk list is complete.

The trap is measuring only tokens. If the helper path saves 70% but adds two reviewer rounds, you did not save the part that matters.

Run the small test

Pick one real ticket and run the two-pass comparison before changing your defaults. If helper summaries save tokens without hiding facts, you have a convention worth keeping.

One methodology lens

One useful way to read this through our methodology is the Plan step: delegate first-pass decomposition and dependency mapping, review the sequencing and assumptions, and keep ownership of scope and priorities. If that split is still fuzzy, the workflow usually is too.

Practical starter checklist

- [ ] Name the Claude Code artifact first: a hook boundary, an MCP permission note, a slash-command workflow, a Claude skill outline, a review checklist, or a concise CLAUDE.md note when repository memory is the topic.
- [ ] Write the review checklist before generation starts: scope, owner, tests, rollback.
- [ ] Keep the first step small enough that a reviewer can inspect the receipt without replaying the whole chat.

Common questions

  • How should teams start with Claude Code?

    Start by writing down one visible team rule for Claude Code, not a loose preference. That usually means a short repository convention, a review checklist, and one owner who can reject agent output when the evidence is missing.

  • Which Claude Code artifact should teams standardize first?

    Standardize the smallest artifact that reviewers already touch: a hook checklist, MCP permission rule, slash-command workflow, skill outline, or concise CLAUDE.md note. The point is not documentation volume; it is a shared place where scope, allowed tools, expected tests, and rollback notes are visible before generated code reaches review.

  • How do teams know the convention is working?

    The convention is working when reviewers can approve or reject agent output from the artifact and evidence alone. Track whether pull requests name the rule used, include the promised checks, and avoid replaying long sessions just to understand what changed.

Best ways to use this research

  • Best for: Claude Code teams deciding which hook, skill, MCP boundary, slash-command workflow, review habit, or repository-memory convention to standardize next around “Spotify Portal Cut Claude Tokens 90%.”
  • Best first artifact: turn the named fix into a hook checklist, skill note, MCP permission note, review receipt, or concise CLAUDE.md convention when repository memory is the real topic before the next automated run.
  • Best comparison angle: compare the workflow against the current Claude Code handoff, hook behavior, and MCP scope; keep the path that leaves the shortest auditable trail.

Further reading

What to do next

Take this into the related training topic and test whether a new reviewer can defend the merge without replaying the chat.

Related training topics

Related research

Continue through the research archive

Ready to start?

Transform how your team builds software.

Book a 15-minute sync