Portal by Spotify cut my Claude Code token usage by 90%

Posted by cebert 4 days ago

Counter277Comment176OpenOriginal

Comments

Comment by schainks 3 days ago

It takes true corporate dedication to publish technical thought leadership on a page that actively fights your ability to read it.

Comment by larodi 3 days ago

"The seat license isn't what hurts, it's the tokens."

not X, but Y... so this is very likely Opus 5 text, given timing and how it reads. has all the marks of it, one being very weird wording which makes it so hard to read the text.

Comment by ssivark 3 days ago

...the remaining 10% of their Claude usage ;-)

> modes are the load-bearing piece:

Okay, this write-up is filled with Claudisms.

Comment by 3 days ago

Comment by larodi 2 days ago

also:

- listing modes - this gate, other gate - canonical stuff etc.

would've been nice if Claude produces such output now and then. with 4 agents doing my stuff on a daily basis, I feel like vomiting at some point, not mere nausea, but disgust. damn Codex seems to fare better at this imho.

curiously I've tried many times to instruct it to not produce this nonsense, but _deus ex machina_ always finds a way around it. wonder if these "instructions" are actually treated as restrictions, rather than... mere obstacles. like - you can try to plumb a river, it always finds its way around plumbing.

Comment by thirtygeo 3 days ago

AI;dr

Comment by HPsquared 3 days ago

Too LLMy; didn't read

Comment by andrew_mason1 3 days ago

I don't get why all your replies are on the AI language. Yeah the AI-isms suck and are obvious but is no one else bothered by how this page scrolls?

Comment by schainks 3 days ago

Custom scroll implementation just screams AI schlop on top of the schlop that's on the page.

Comment by larodi 2 days ago

well author could've tried to read it himself, and figuring it reads as slop to ... like rewrite it by hand? how hard is this, I mean - I understand reasoning took place inside a box (like it does so when you query DuckDB or Excel spreadsheets and we're okay with it), but I don't understand why anyone would think it is okay to toss glossed random shit at everyone else, and pretend it is a high-profile high-stakes writing. this whole text is barely comprehensible. not that I didn't try...

Comment by hotelsacher 3 days ago

Corporate dedication has been replaced by slop generators, as promised. They did say they'd make all the jobs obsolete.

Comment by schainks 3 days ago

"schloperators" for short, right?

Comment by solenoid0937 4 days ago

So this is just delegating certain work to dumber models? I certainly wouldn't use Gemini 2.5 Flash (!!?) for code writing as suggested.

I've never had an issue with Codex or Claude reading massive files, they're really good at precise greps.

Comment by jampa 3 days ago

> I've never had an issue with Codex or Claude reading massive files

Reading files isn't a problem they want to solve. The idea seems to be using a cheaper model to "scout" for the intended code, instead of an expensive one that reads all the things (and spends more tokens / thinks about them).

I think this might be useful because Opus 5 especially tends to over-read. So this looks like an "LLM Bloom filter", telling "hey this is the code you might want to read".

Comment by johnnythujone 3 days ago

I have a stage-gated workflow that prioritizes “premium” token efficiency (Fable.) and getting the most out of my subscription services. (Which boils down to Fable running carefully prompted deepseek-flash agent teams that defer back to the managing agent for any design decisions in most work.) As part of that workflow the manager uses cheap reconnaissance agents to burn their tokens in order to build relevant repo context, instead of the managing model’s. I’ve been doing this since they released Opus and it occurred to me that most of my pre-implementation phase token use was going right into the garbage bin with file reads that have to be done to find the relevant code, but are very wasteful.

There’s an added benefit that the manager’s focus on strategy and task decomposition before actually handling the user’s prompted task directly seems to be a very good way to interact with Claude’s Fable safeguards, and I haven’t had any refusals doing this.

And while I haven’t ran any numbers, I can get orders of magnitude more out of my claude subscription doing this, especially with deepseek-v4-flash being as good as it is for as cheap as it is.

Comment by vintermann 2 days ago

It sounds like you're halfway to gas town already... Not saying that is definitively bad, but I have avoided this myself since I don't want to get bogged down in trying to figure out the optimal multiagent setup.

Comment by johnnythujone 12 hours ago

I absolutely am, and it's completely a "building a better hammer" thing.

Comment by jwillmer 3 days ago

I also currently run multiple Claude sessions with Fabel as the brain coordinating the manager sessions which in turn spawn sub agents.

Comment by astrange 3 days ago

> I have a stage-gated workflow

This is a Claudism, right? I feel like I never saw "gated" used this way before it.

Comment by gopher_space 2 days ago

A normal person would say “my workflow has stages” and their normal coworkers would say “no kidding”.

Comment by johnnythujone 12 hours ago

I'm not normal, nor do i have coworkers. Sorry :(

Just a guy trying to make his subscription last longer than the single Fable prompt anthropic includes for 100 bucks a month, lol.

Comment by bloomfieldj 3 days ago

This sounds exactly like what Repoprompt was built for: https://repoprompt.com/

The community edition was open sourced when the creator got hired by OpenAI a few months ago.

Comment by jimmySixDOF 3 days ago

The creator (Eric Provencher) worked for Unity before that and he is exploring game development tooling etc (with an open token budget) its fun to see where things are heading in the on-demand future of handsfree blender output and animation

Comment by hankbond 3 days ago

> "LLM Bloom filter"

very good way to put it.

Comment by lxgr 3 days ago

It's not a great analogy, since Bloom filters are guaranteed to not have any false negatives, only false positives.

That property would be very useful here, but I don't see how it would be achievable using LLMs.

Comment by dominotw 3 days ago

still a great analogy even if not techincally equivalent

Comment by maxboone 3 days ago

"a filter" is an even better analogy because it is also technically correct

Comment by dominotw 3 days ago

thats not a analogy, its just a description

Comment by ramraj07 3 days ago

Pretty sure claude code already delegates reading a large codebase to haiku subagents.

Comment by Artimus 3 days ago

As of July, the explore agent inherits the parent model, capped at opus.

So fable and opus use opus to explore. Sonnet uses sonnet.

I replaced my built in explore agent with one hardcoded to sonnet low effort.

https://github.com/anthropics/claude-code/issues/72940

Comment by re-thc 3 days ago

It did used to use Haiku but that model is now too too far behind…

Comment by 3 days ago

Comment by ramraj07 3 days ago

Im now fascinated by how exactly Bcherny generated that message using claude. Like is the entire issue resolution automated, or still guided in someway?

Comment by phoghed 3 days ago

GH copilot as well, explore subagent is configurable.

Comment by shubhamjain 3 days ago

> So this is just delegating certain work to dumber models? I certainly wouldn't use Gemini 2.5 Flash (!!?) for code writing as suggested.

Why not, though? I started using OpenCode + GitHub Copilot, but I burned through my Claude Sonnet quota in just three days. I switched to GPT-5.4-mini, which uses far fewer tokens, and it’s often just as good as Sonnet. I think optimizing token usage is a good exercise. We often assume a model will be terrible, when it really isn’t.

Comment by solenoid0937 3 days ago

My code being correct 99% of the and costing 5x more tokens is vastly preferable to my code only being correct 90% of the time and using fewer tokens.

Comment by CuriouslyC 3 days ago

This is true, but with the newer generation of models you don't want to do this yourself, they're really good at orchestrating and triage. Run Fable or Astra on low/medium, and tell them to come up with a plan then direct subagents using a weaker model (I like GPT 5.6 terra medium) to implement and verify, and review their work.

Comment by jurgenburgen 3 days ago

> and it’s often just as good as Sonnet. I think optimizing token usage is a good exercise. We often assume a model will be terrible, when it really isn’t.

“Often” doesn’t sound great. If the smaller model fails then I just wasted a lot of time and tokens.

Comment by bensyverson 4 days ago

Yes, this makes little sense. It looks like it's a way to avoid having Claude read or write your code.

And why stop at 90%? I have this one weird trick to reduce Claude Code token use by 100%: use a different harness and model!

Comment by lxgr 3 days ago

I wish I could say this explains a lot about the state of Spotify's apps, but they have been that way since long before AI.

Comment by jrm4 3 days ago

Am I missing something? Unless you have infinity money, would it not be very stupid to pay for "precise greps?"

Comment by solenoid0937 3 days ago

It's a few hundred tokens. If you are worried about a few hundred tokens you are in trouble, forget about "infinite money."

Comment by jrm4 2 days ago

Oh, so "programmers" really ARE losing the plot.

You kids don't get it, it's not about the tokens, it's about the principle of the thing. No self-respecting real programmer would accept the loss of even a few tokens over programmatic efficiency and cleverness.

Comment by 4 days ago

Comment by fy20 3 days ago

This is basically exaclty what Cursor started doing when Composer was first released.

The app would start using it for exploration tasks, and then as it improved it became the default for writing code and tests too. You can change it of course, but I find it does a pretty decent job if you have a large model directing it.

The parent model of course checks the work, but most of the time the handoff is good enough that no edits are needed.

It's also pretty fast and cheap, firing off a bunch of sub-agents to explore different parts of the codebase is a regular occurrence for the way I work.

Comment by zxspectrum1982 3 days ago

IME Composer 2.5 is too dumb for any serious coding. Grok 4.6 is twice as expensive (but still much cheaper than Claude Opus) and it does a much much better job.

Comment by lamine-yaml 2 days ago

Composer has improved in last few months. I relied heavily on it last month as ran out tokens and composer free credits were available for use.

Comment by 14u2c 4 days ago

This does seem to just be a subagents implementation.

Comment by phreack 3 days ago

Thank you, the article was so verbose I couldn't get the point just by skimming it. And it was this simple...

Comment by vintermann 2 days ago

As I understand this is something similar to "anchors", tools to let agents avoid reading whole files.

Comment by ricardobeat 3 days ago

No mention of correctness or task success rate. This only works if the subagent model is much cheaper than the one running your session, which means it will probably be mistaken a lot more often [1] about what the code does. Routing purely on size tells you nothing about code complexity.

On top of that, saving 90% of input tokens != saving 90% "of tokens", output is wildly more expensive.

[1] especially if it's a really old model like Gemini 2.5!

Comment by Syntaf 2 days ago

Yeah this article is quite shallow after having read it; delegating to a remote sub-agent sounds novel but how does it _actually_ perform?

I'm personally skeptical of optimizing for minimal token consumption, the closer to a vanilla setup I am the more confident I feel I'm always getting the best performance out of my models.

Just look at how JetBrains measured rtk and found that while an individual call saves tokens, agents on average perform *more* turns and use *more* tokens to accomplish one task[1]

[1] https://blog.jetbrains.com/ai/2026/07/rtk-claude-code-token-...

Comment by steveBK123 3 days ago

What great productivity gains are Spotify achieving in making their product worse?

Comment by Jtarii 3 days ago

The spotify desktop app is one of the worst pieces of software by a major company I have ever used.

Comment by steveBK123 3 days ago

I timed how long it took to open Spotify and play a song on a $2500 Mac on low latency gigabit fiber internet.

15 seconds.

Incredible stuff.

Comment by bspammer 2 days ago

The app has gotten consistently slower, buggier, with worse UX for over a decade. In all that time, I can’t recall a single new feature I’ve actually found useful.

The app was done in 2011. They could make a massive improvement across the board with a single git reset --hard command.

Comment by SebaSeba 3 days ago

I had to test because I didn't recollect ever experiencing such issues with Spotify.

And no, the problems you described are not there.

On my Windows 11 laptop it takes about 2sec to start and basically any song starts in less than a second.

Maybe it's Apple making Spotify crappy on Mac to promote iTunes?

Comment by bigyabai 3 days ago

It opens and plays music in less than 3 seconds, on my x86 NixOS box.

I wonder if the macOS build has a bunch of static libraries it has to load first.

Comment by hotelsacher 3 days ago

Static libraries don't need to be "loaded first". They're part of the executable. That's why they are called static.

Comment by shimman 3 days ago

I've gone back to the high seas and bandcamp myself. Spotify stopped having humans curate their playlists back in like 2016 or 2018 and the subsequent ML algorithms always recommend the same sounding stuff, nothing ever new or interesting. I'm back to getting recommendations in real life and literally talking to bands after their sets on who they listen too.

Never been happier listening to music ATM.

Comment by subscribed 3 days ago

Remember their new algorithm also prefers and promotes Spotify's own tracks they don't have to pay any royalties for and the slop.

Related: https://bedrocknews.com/article/technology/2026/apr/11/ai-im... and https://www.headphonesty.com/2025/01/spotify-ghost-artists-c...

Just skip Spotify at all.

Comment by steveBK123 3 days ago

Bleak stuff

I’ve noticed sometimes my wife puts on a playlist and it’s almost like weird covers or remixes I can’t quite put my finger on. Like it has a melody of a real song but the style / tempo / vocals are changed.

Comment by Tistron 3 days ago

Try it on a flaky connection. Every menu (maybe any action of any kind?) makes a roundtrip to the server before displaying, with a very slow timeout. It's crazy how bad it is.

Comment by LiamPowell 3 days ago

Not just that, some actions spawn an entire Chromium instance. For example, any time you click on a music video (not a new thread, an actual full Chromium instance).

Comment by steveBK123 3 days ago

I’m sure more agentic coding loops will improve these inefficiencies

Comment by hotelsacher 3 days ago

Are you joking? Inefficiencies like that are a typical tell for LLM-generated slop.

And I'm sure their prompt whisperers are proud of their work.

Comment by steveBK123 3 days ago

Yes I was joking

Comment by wging 3 days ago

I think they've gotten worse about this as an organization over the last few years(?). Earlier this year an update to their mobile app introduced loading time, and resulting slowness, for opening menus that used to be ~instant. To me that smacks of once having known not to do that, but that knowledge having been lost (or priorities having shifted).

More specifically, I'm talking about tapping the '...' on a track for the options menu. That should be latency-free, and used to be.

Comment by Tistron 3 days ago

That specific thing hasn't been latency free for me for years.

Though I agree it should be.

Comment by hasteg 3 days ago

My favorite part about the desktop app is the 1 second delay between when I click a playlist and when it actually loads.

Comment by 2 days ago

Comment by SaltyBackendGuy 3 days ago

You just need to have a M5, 128gi setup to get sub 1 sec playlist loads /s

Comment by hasteg 2 days ago

Right… unfortunately my 9800x3d and 5090 setup can’t process a 15 year old desktop app transition in under a second even though they have a coding god making all their decisions hahah

Comment by stavros 3 days ago

Comment by chickensong 3 days ago

Thank you!

Comment by stavros 3 days ago

You're welcome, it's great!

Comment by autotune 3 days ago

Their web app functions perfectly as a replacement, however.

Comment by remus 3 days ago

Maybe it is different for you, but for me the web app is flakey at best. A bug which has been a pet peeve of mine for the last 6 months: if you leave the page open for half an hour with nothing playing, sometimes all the play buttons just stop working and you have to reload the whole page before you can play anything again.

Comment by samtheprogram 3 days ago

I desperately miss their old XULRunner app. No longer worked through the API as of ~3 years ago and was a sad day for me.

Comment by bitwizeshift 3 days ago

It sounds like you have never used an Atlassian product, lol

Comment by ssalka 3 days ago

Do you pay for Spotify? If so, I hope you never have to experience the dumpster fire that is their free version. Half the time you select a song to play it'll just start playing related tracks.

Comment by stavros 3 days ago

Yeah but that's by design for the free version, it's not a bug.

Comment by asimovDev 2 days ago

their free version wasn't particularly horrendous the last time I tried. I clicked play on a playlist and got an ad every maybe 3-5 songs and the ads were usually around 30 seconds. although my main issue is that they only had the same 2-3 ads to play for me throughout the weeks I used the free version so that got annoying.

as someone on the internet once said, it's good that no-one at Spotify realised that people would buy the subscription much faster if it was a crying baby soundbite playing every time instead of an advertisement

Comment by fuckinpuppers 3 days ago

iTunes. Still in 2026

Comment by bigtex 3 days ago

They released some AI related product for the desktop that was probably vibe coded and will not be installing

Comment by steveBK123 3 days ago

They are in my top-3~5 list of "actively & aggressively getting worse" software products.

Comment by hotelsacher 3 days ago

Enshittification optimization. Fully automated now.

Comment by surcap526 3 days ago

[dead]

Comment by pmdr 3 days ago

I wish websites would stop messing with the scrolling behavior.

Comment by landr0id 3 days ago

I used to date a girl who was a designer and had to plead with her that breaking behaviors I'm used to is not a positive UX.

"But it adds motion" was the classic reply.

Comment by bluGill 3 days ago

The question is, are we doing this page for the sake of art or are we doing this for the sake of spreading and sharing information? These are two different domains with different requirements as to how the page works.

There is nothing wrong with art. It is a great thing, I hope to see more art in the world. However, if the goal is sharing information, which is supposedly the goal of a fairly large number of websites, art needs to be secondary to sharing that information. And then those things that add motion, whatever: you're adding art and harming the real purpose.

Comment by PinkSheep 3 days ago

Allow me to put it more bluntly: if you are feeling like an artist, don't meddle with UX.

The comment above shows this type of people don't understand it. Yet they are the ones getting hired due to formal qualification. Those who do are at the intersection of design, engineering and computer science. The latter give you enough experience to understand the culture to recreate familiar _look and feel_.

Comment by ssl-3 3 days ago

That's exactly what I want from a website that's full of static information: Motion.

Comment by dotancohen 3 days ago

After seeing a few comments about scrolling on that page, curiosity got the better of me and I dared open TFA.

I found no problem scrolling. Either Firefox on Android doesn't support whatever trickery they are doing, or they reverted it.

Comment by retsibsi 3 days ago

On desktop, it's basically forced heavy smoothscrolling, with an attempt to replicate real motion by gradually slowing to a stop. Horribly laggy for those of us sensitive to such things.

Comment by PinkSheep 3 days ago

It's still there when Javascript is enabled. Firefox/154.0 on desktop.

Comment by amsterdorn 3 days ago

+1, this bothers me more than it should.

Comment by nosioptar 3 days ago

If I said what I really think should happen to designers and "devs" who fuck with scrolling, dang would have to delete it and ban me.

Ublock on Firefox mobile seems to keep scrolling unfucked on this page for me. (Designer/"dev" of this page still sucks wet hobo socks.)

Comment by _rwo 2 days ago

thank_you_the_office.gif

Comment by jnwatson 4 days ago

It cuts token usage because they are using a different service with a different token budget for the reader/code writer tasks.

You can also just delegate this to subagents with Claude Code (though you have a more limited choice of models unless you swap the cheaper models via OpenRouter).

I'm OK using a dumb model as a smart grep, but the whole point of using the frontier models is using their intelligence for the hard stuff like coding.

Comment by CaveTech 3 days ago

You can also use hooks to force the use of subagents for this. The stack here is entirely unnecessary

Comment by spockz 3 days ago

I’m currently on codex can it also this? I find it hard to make accurate benchmarks in token use for these kind of changes because I don’t keep repeating the same tasks.

Basically I run in luna high or extra high continuously with a terra subworker dedicated to planning and difficult research questions. Then I end with a final review in Terra or Sol depending how big the feature is.

Comment by donavanm 3 days ago

yes, and you can do it entirely in developer instructions (AGENTS.md/SKILLS.md). No hooks or other executables needed. Check out `codex-subagent-router` for an example. Its overly complicated, and has a few things wrong, but it mostly works. In short:

  - Write ~1 paragraph of developer instructions (AGENTS.md): Use subagents for tasks that can be decomposed, worked on in parallel, or delegated. Describe common examples. I put a reference to a "how to use subagents" skill for more details. The "skill" isnt' always read (as subagents arent always useful) which saves some tokens. But you pay the once-per-session read-skill cost when its relevant.
  - Describe how to use subagents in ~1 page or less (SKILLS.md): use them for sub tasks. select model size/quality based on task ambiguity, scope, unbounded work, or conflicting requirements. Use reasoning effort for complexity, interdependence, or ambiguous success criteria. How to evaluate complexity & common subtask examples across the spectrum. give tasks a relevant name like "model-family_version_reasoning-effort_task-description" so you can actually understand what theyre doing by name.
  - in dev instructions (SKILLS.md) provide a table of agent names (low complexity summarizer, bounded implementation, complex implementation), model+effort (gpt-5.6-luna medium, gpt-5.6-luna high, gpt-5.6-sol medium), and short description of 2-3 task "types" for each.
  - Explain they can use "default" or specify their own custom model settings if needed.
  - Define your list of subagent profiles in ~/.codex/agents/ which matches names (low_complexity_summarizer.toml) from previous. In each you'll need to set model, reasoning, and `developer_instructions` that describe *how* to do a task, *not what* to do.
Details to know:

  - IMO subgent profiles are "task centric" because `developer_instructions` are required. You can't just specify model & reasoning, you also have to give valid developer_instructions that will be merged in to every session/prompt. I address this by defining a few different agents for tasks that are commonly encounted like summarization, synthesis, planning, implementation, etc. The different agent profiles (~2-5 per category) will "scale" the model + reasoning based on the complexity and ambiguity. This work pretty well in practice. And you don't need to over due it, the harness/agent can still launch a "custom" profile that uses the parent sessions developer instructions.
  - You need to use agent profiles with codex because "v2" models (terra & sol) can't launch "v1" models (luna). There are a couple of code paths to avoid this, the agent profile is the simplest. 
Anyways, write you skill & subagent profiles and it basically "just works".

Comment by alastairr 3 days ago

Does anyone even review these blog posts before they get published? If nobody in the company can be bothered to review it, I don't know why they expect anyone to persevere with the AIphorisms

Comment by shikck200 3 days ago

Side note: PLEASE DONT hijack scroll. Its just a bad bad thing to do. Please dont.

Comment by faangguyindia 3 days ago

It doesn't work well in practice.

Try it yourself, use a big model like Opus or Sol to implement everything by first making a plan using plan mode.

Then try distributing the task to a cheaper models like Luna Max or Gemini Flash 3.8.

During planning, the big model already reads the relevant files in context, while giving a smaller model a slice of work itself requires the big model to reason about the task distribution, review, etc.

So do you really save on tokens?

Comment by majormajor 3 days ago

When I've tried it using API-rate billing I've saved on $$ on the tasks where I split planning+execution into Sol+Terra or Terra+Luna even. I wasn't paying attention to the token count, I was paying attention to the spend.

Comment by klodolph 3 days ago

> Try it yourself, use a big model like Opus or Sol to implement everything by first making a plan using plan mode.

When I do this, I can have it use cheap subagents with models like Luna to read the relevant files.

Comment by MPSimmons 3 days ago

Do you have the cheap models summarize the files? How do they get the relevant information to the bigger models?

Comment by mceachen 3 days ago

"Use subagents as applicable. Use sonnet/luna for finding relevant code references"

This should have been the entirety of TFA.

Comment by donk8r 3 days ago

[flagged]

Comment by skybrian 3 days ago

Maybe not, but I like to review the plan anyway so that I'm less surprised by what it actually did.

Comment by sognetic 3 days ago

There are a bunch of approaches that do this kind of thing to reduce token usage ("semble" came to mind, technically different but functionally similar) but their performance is usually mixed because the models haven't been RL tuned to use them as they have the default tool suite. Combine that with the incentive by Anthropic et al. to make you actually burn through as many tokens as possible and I don't see these kind of things becoming mainstream yet. Maybe once we reach a point where consumers actually care about cost (because LLMs have become commoditized) these cost-reduction approaches become relevant enough to actually finetune the model with them.

Comment by Banditoz 3 days ago

Oh dear, why does this website override scrolling behavior?

Comment by orliesaurus 3 days ago

glad im not the only one that enabled screen reader mode to scan the article for some goodies

Comment by tobinfekkes 3 days ago

My first thought too! I couldn't put up with it. Left quickly.

Comment by jokethrowaway 3 days ago

If you want an expensive model to reason on your files, you need to give them your files.

If you think a cheap model is smart enough to filter information to give to your expensive model, you can save some money. If you think your cheap model is smart enough to format your expensive output, you can save some money.

In practice, this didn't work well until Qwen 3.8.

Qwen 3.6 and (abliterated) Gemma 4 were almost there but still making mistakes.

Comment by khaki54 3 days ago

The downside of reading posts about the practical application of AI is that the practioner often uses AI to write it. I don't know why AI prose is so hard to read in the browser. I don't have any problem when reading off my TUI

Comment by gruez 4 days ago

>The benchmarks

>Tested against a Java monorepo across four scenarios, measuring tokens Claude would consume reading files directly vs. consuming the bulk-reader's summary or writing code via the code-writer. Mean bulk-read savings were around a whopping 90%.

>The code-write scenario is harder to measure in tokens because without shunt, Claude both reads the reference files and generates the output as expensive output tokens. With shunt, the code goes straight to disk, Claude never sees it.

So nothing about accuracy or actual performance? At least run against DeepSWE bench or something.

Comment by gilmtz 3 days ago

> The worker model found surface-level patterns but missed a subtle thread-safety bug in my testing. Claude spotted it in seconds once given the right context.

So the actual performance was bad.

It might be an acceptable trade off tho. If token costs become prohibitive, then using a meat engineer to actually debug could be cheaper.

Comment by nerdyadventurer 1 day ago

There is also Caveman[1] skill which rewrite prompts.

1. https://github.com/JuliusBrussee/caveman/

Comment by tolugenius 4 days ago

Isn't this a somewhat standard multi-model setup? there's nothing ground breaking here, just delegate claude to plan -> smaller model for implementation.

Comment by CharlesW 3 days ago

Very standard in all coding harnesses/models I've worked with, with the bonus that everything listed in the "What doesn't work in Portal by Spotify" section still works. I've been watching Opus spin off work to Fable and Sonnet as appropriate all day.

Comment by spockz 3 days ago

Do you have specific instructions that cause this or did it come out of the box? Is it also when using normal prompting or only when you set a goal?

In codex I don’t see this behaviour despite having added the instructions to do so to my agents file. I also let that agents file be reviewed by Sol to come up with the right phrasing but no luck so far.

Comment by florians 3 days ago

Can you name some harnesses?

Comment by CharlesW 3 days ago

As I type this, my main is Claude Code and my secondary is omp. Both of these seem to do a pretty good job of choosing an appropriate model for subagent tasks, especially if I ask and/or save it as a guideline in project memory.

Comment by Dmitry-kov 2 days ago

I use claude code and cursor. Interesting that I use opus 5 in cirsor and claude code, but in cursor i wasted less tokens while i do some tasks. During auto-tests runs, Claude code re-watch tasks and context before start my auto-test. In cursor this problem not reproduce. I use cursor most of the time.

Comment by ellessarr 3 days ago

Read tokens are the cheap place to optimize — input is ~¼ the price of output. The money's in write-side re-reads/retries, and nobody put a dollar number on that.

Comment by dominicl 3 days ago

I definitely had the situation before that a large file read would suddenly make the context size of my session explode. But I didn't get the need for a cloud component here. So here is a cursor edition of this with no external dependencies: https://github.com/dominicletz/cursor-shunt/

(fully vibe coded)

Comment by andai 3 days ago

So it's giving summaries to the main agent instead of source code? Is that it?

> If Claude needs to make edits based on the analysis, it still has to read the specific section directly.

Yeah iirc the sysprompt tells it that it must always (re-)read a file before editing it. I noticed this because I customized Claude Code to just read all source at startup (if the project was only a few thousand lines of code). And it would still read the stuff it had already read! Because the system prompt explicitly told it to...

Comment by amelius 3 days ago

I want a local model that I talk to, and that delegates work to whatever model it deems adequate, simplifying and perhaps even anonymizing the prompts/data as it goes.

Comment by ryuuseijin 3 days ago

Here is another technique to save tokens: allow the model to read a skeleton of the source code before reading the code, to give it an index into the code so it can read targeted chunks.

There is a tool that uses ripgrep and treesitter that does this [1], adapted from the maki coding agent.

[1]: https://github.com/ninjaxtools/treesitter-index

Comment by chr15m 3 days ago

Aider pioneered this with the "repo map" which works tremendously well.

Comment by ZeWaka 3 days ago

Yep, there's also prewalk.

Comment by avazhi 3 days ago

Dang, not even Spotify care enough to not write AI slop articles.

We’re fucked.

Comment by kristianp 3 days ago

They should use their portal to de-claude the writing.

Comment by stephbook 3 days ago

I could only read one sentence, then skipped to another paragraph. Sure enough the scroll bar revealed a suspiciously long article. No human would ever write this much bland bullshit.

Next sentence was also an AI juxtaposition. Done.

Comment by lowbloodsugar 3 days ago

Spotify? The company pushing AI “music” into people’s feeds to save money on royalties? That Spotify?

Comment by pmontra 3 days ago

I noticed

> The modes are the load-bearing piece:

Why do people write like LLMs? Maybe they delegate all the work to a LLM and don't have the time or the will to edit the copy. How about telling another LLMs to replace at least the most common LLM patterns with something human looking?

Comment by eterm 3 days ago

I don't feel like this was a piece by someone who has used LLMs too much.

I'm fairly confident this is just LLM writing the majority, possibly tweaked by a human.

Opening line is a form of, "It's not X, it's Y": ".. isn't thinking. It's I/O".

Then the start of the second paragraph is that weird breathless kind of writing:

> Reading five files to answer a question about one method. Generating a test file that follows the exact same pattern as the twenty test files next to it.

More "It's not X, it's Y": The seat license isn't what hurts, it's the tokens.

The softly pressed insistence that AI is worth it, really: "The tooling pays for itself but only if..."

Comment by blehn 3 days ago

To be fair, Spotify was a slop factory long before LLMs started doing it

Comment by vagabund 3 days ago

Yeah, stopped reading after the first paragraph. It's really so disrespectful to your audience.

Comment by florians 3 days ago

It‘s someone from R&D probably not so official

Comment by prmoustache 3 days ago

They are in the business of selling audio slop streams, why are you surprised?

Comment by florians 3 days ago

True

Comment by fbn79 3 days ago

Is not something already addressed by mcps like codegraph? https://github.com/CodeGraphContext/CodeGraphContext (without the need of extra third party api/costs)

Comment by wejick 3 days ago

There are many ways simpler to achieve this, easier if the coding agent support sub-agent (which mostly do out of the box).

Eg. On opencode there's explorer subgagent that we can set to use lower level model. Many people even use haiku level model for this.

Comment by shevy-java 3 days ago

> By 2028, AI coding costs are expected to blow past the average developer's salary. A quarter of engineering leaders already burn $200–$500 per developer per month on tokens.

Wasn't the AI promise to save costs? So it was a lie.

Comment by bluGill 3 days ago

We can't know if it's a lie or not until we know what the productivity difference is.

Measuring productivity is, of course, a hard problem and I'm going to leave this completely out of this comment.

Comment by FelineStateMach 3 days ago

I sometimes get jumpscaped at the thought of older or less proven models used in enterprise settings. I understand the devex ergonomics argument; I'm not a fan of profiles concepts typically if trodding into delegation.

Comment by bakugo 3 days ago

I cut my Claude Code token usage by 100% by writing the code myself.

Comment by dotancohen 3 days ago

That saves on the monetary budget. How do you see it affecting your time budget?

Comment by Zambyte 3 days ago

I cut my Claude Code token usage by 100% by writing the code with Qwen 27B on my own GPU.

Comment by hexo 3 days ago

What a "smart" website that steals mouse wheel.

Comment by cute_boi 3 days ago

STOP hijacking my scroll. I don't know why chrome even allow such behavior?

And, I can't believe this is from official spotify.... What a joke.

Comment by throooooo 3 days ago

Smooth as butter with Firefox on Android. As for why scrolljacking is "allowed", web devs will always find new ways to do annoying things and work around browser constraints.

Comment by pmontra 3 days ago

I confirm that. Then I opened the page in Chrome on Android and it scrolls nicely there too. So maybe they broke only desktop browsers.

Comment by 1saadcodes 3 days ago

I swear. Put me off so bad I didn't even bother reading the rest of the article. It's even more infuriating that this is by a company this big

Comment by simianwords 3 days ago

Not only does this study not control for quality of output, it doesn't even show a cost reduction. Its a very low signal article.

Comment by sandos 3 days ago

Isn't this already done in harnesses? I mean I see Terra or Sol uing Luna all the time for tasks when using copilot.

Comment by doubleorseven 3 days ago

i remember in 2015 when vaadin change some architecture things and introduced changes to the ui grid and other components like they didn't just reinvented dotnet framework 4 but for java.

fable already calls subagents (hoping not opus), so i don't really see the gain here

Comment by thewhitetulip 3 days ago

Are such things really helping reduce tokens? I see graphify being suggested as a graph db for avoiding greps

Comment by guluarte 3 days ago

in my experience doing something like this is either the results are trash or the main agent is like: "this does not sound right let me look into the file myself" and then spending more tokens working on bypassing the limitation

Comment by tetrisgm 4 days ago

This is just offshoring but for models

Comment by kotaKat 3 days ago

So they're using this to finally implement AirPlay 2 support, right?

Right?

Rules for thee...

Comment by m3kw9 3 days ago

An openai/claude engineer would come in and douse this crap

Comment by claiir 3 days ago

AI-written page, and it gets worse as it goes on:

> The modes are the load-bearing piece:

lol

Comment by m3kw9 3 days ago

input tokens are cheap, is most of your task reading? And can flash 2.5 compress that read and give you a reliable output?

Comment by ig0r0 3 days ago

Kind of bullshit, instead of cutting Claude Code token usage by 90% it is cutting Claude Code file read token usage by delegating reads to Gemini flash (with its own usage) and trusting the summary of files it provides is not crap.

Comment by blopusai 3 days ago

Well... time to run it locally =]

Comment by andrethegiant 3 days ago

Spotify has a Java monorepo!? Why

Comment by krzys 3 days ago

So it's like the built-in Explore subagent - that runs on Haiku, is restricted to read-only tools, exists specifically for codebase search, and the docs list cost control via cheap-model routing as an explicit reason it exist - but with 30s latency over some externally hosted tool?

And it's just the execution, I'm not even going to comment on the idea itself, as it's even worse.

How this slop-post landed on the front page...?

Comment by nektro 2 days ago

this page hacks the scroll behavior so i exited immediately

Comment by 3 days ago

Comment by nyxtom 2 days ago

Maybe it's just me but you stand to gain a lot more from reading comprehension than outsourcing the same set of files repeatedly to a machine.

Comment by addedlovely 3 days ago

Honestly would expect claude do be doing this automatically, seems like a low handing optimisation just sat there.

Comment by 3371 3 days ago

codegraph + context mode are all I need.

Comment by dominotw 3 days ago

xirp , chirp, portal blah blah just use what everyone is using opencode, pi , claude code whatever.

imagine working at these shitty companies with their shitty wrapper tooling.

Comment by acceptallmag 1 day ago

[flagged]

Comment by omid-io 2 days ago

[flagged]

Comment by scraplabs 2 days ago

[flagged]

Comment by 3 days ago

Comment by fif7y 4 days ago

[flagged]

Comment by bizcalclab 3 days ago

[flagged]

Comment by Buoylog 4 days ago

[flagged]

Comment by manganate06 3 days ago

[flagged]

Comment by BottieZimmie 4 days ago

[flagged]

Comment by shledery 3 days ago

[flagged]

Comment by nirmeet011011 3 days ago

[flagged]

Comment by jing09928 3 days ago

[flagged]

Comment by malinono 3 days ago

[flagged]

Comment by jens_tlb 3 days ago

[dead]

Comment by ahmedelsama 3 days ago

The Bloom filter framing is right. What made it work for me: the cheap model is only allowed to point, never to decide. Once it stopped judging anything and just returned file paths and line ranges, the quality complaints disappeared. The expensive model still does all the reading that matters, just on 10% of the bytes.

Comment by lxgr 3 days ago

Unlike an actual Bloom filter (which does not return false negatives), the cheaper model is still trusted to correctly recognize synonyms, equivalent functional constructions etc.

One is strictly a performance optimization, the other is a speed/quality tradeoff. It might well be a very good one, but it’s a tradeoff nevertheless. The framing is misleading.

Comment by astrange 3 days ago

That's a Claude.

Comment by lxgr 2 days ago

What is?

Comment by astrange 1 day ago

The cyborg you replied to.