Spotifyn Dimitri Mazmanov kuvasi 4. syyskuuta yhtiön insinööriblogissa, miten hän leikkasi Claude Coden tokenikulutusta noin 90 prosenttia. Ratkaisu ei vaatinut alustatiimiä eikä uutta tilausta, vaan kaksi määriteltyä työtilaa Spotifyn Portal-kehittäjäportaalissa.
Idea on yksinkertainen. Suuri osa koodausagentin tokeneista kuluu siihen, että malli lukee tiedostoja ymmärtääkseen kontekstin. Se työ ei vaadi kalleinta mallia, vaan riittävän tarkan lukijan.
Tila voi olla julkinen koko yritykselle tai yksityinen tekijälleen, ja sitä kutsutaan joko Portalin komentoriviltä tai rajapinnasta. Määrittelyyn kuuluvat ohjeet, malli, lämpötilan kaltaiset parametrit ja mahdolliset MCP-työkalut.
Kaksi tilaa hoitavat luvun ja kirjoituksen
Portalin AiKA-tila on määrittelynä kuvattu agentti, joka ajetaan lyhytikäisessä ajoympäristössä. Mazmanov vertaa sitä AWS Lambdaan, mutta agenteille: ohjeet, malli ja parametrit määritellään, ja Portal hoitaa loput ilman palvelimia tai API-avaimia.
Ensimmäinen tila on bulk-reader. Se lukee joukon tiedostoja ja vastaa yhteen kysymykseen tiiviisti jäsennellyillä ranskalaisilla viivoilla ilman johdantoja. Tiedostot menevät työmallille eivätkä koskaan päädy Claude Coden kontekstiin.
Toinen tila on code-writer. Sille annetaan määrittely ja pakollinen esimerkkitiedosto, jonka tyyliä koodin tulee vastata. Ilman viitetiedostoa työmalli tuottaisi kontekstitonta koodia, joka ei istu projektiin. Tulos kirjoitetaan suoraan levylle, eikä Claude näe generoitua koodia lainkaan.
Esimerkeissä työmallina on Gemini 2.5 Flash, mutta malli on vaihdettavissa mihin tahansa Portal-instanssiin määriteltyyn malliin. Molemmat tilat on julkaistu julkisina, joten niitä voi käyttää sellaisenaan tai haarauttaa omaan käyttöön.

Koukut pakottavat reitityksen
Ensimmäinen versio ohjeisti reitityksen CLAUDE.md-tiedostossa. Se toimi osittain, mutta säännöt olivat neuvoja, eivät pakotteita. Malli saattoi ohittaa ne, ja jokainen projekti tarvitsi oman kopionsa ohjeista.
Nykyinen versio on Claude Code -liitännäinen nimeltä shunt. Se rekisteröi kaksi PreToolUse-koukkua, jotka laukeavat ennen jokaista työkalukutsua. Delegointi kulkee Portalin komentorivin toimintorekisterin kautta, joten liitännäinen toimii mitä tahansa Portal-instanssia vastaan.
check-file-size seuraa jokaista Read-kutsua. Jos tiedosto ylittää asetetun rivirajan, oletuksena 350 riviä, koukku estää luvun ja ohjaa mallin käyttämään bulk-reader-taitoa. Kohdennetut luvut rivivälillä menevät läpi, koska niissä malli tietää jo mitä etsii.
check-bash-read kattaa saman komentorivin puolella: cat, head, tail, less ja more suurille tiedostoille. Putkitetut komennot, kuten cat yhdistettynä grep-hakuun, päästetään läpi kohdennettuina lukuina. Kaksi taitotiedostoa kertoo mallille, milloin ja miten skriptejä kutsutaan.
Mazmanov rakensi molempien tilojen ympärille kaksi komentotulkkiskriptiä, jotka Claude kutsuu nimetyillä argumenteilla. Skriptit kokoavat pyynnön, kutsuvat toiminnot, purkavat virheet ja raportoivat tokenien kulutuksen virhevirtaan.

Säästö mitattiin Java-monorepossa
Mittaus tehtiin Java-monorepoa vastaan neljässä skenaariossa. Vertailtavana oli tokenimäärä, jonka Claude olisi kuluttanut lukemalla tiedostot suoraan, verrattuna siihen että se lukee bulk-readerin tuottaman yhteenvedon.
Keskimääräinen säästö massaluvuissa oli noin 90 prosenttia. Koodin kirjoittamisen skenaariota on vaikeampi mitata tokeneina, koska ilman delegointia Claude sekä lukee esimerkkitiedostot että tuottaa lopputuloksen kalliina ulostulotokeneina.
Delegointi on kertaluonteinen. Kutsu on lyhytikäinen, mitään ei tallenneta palvelimelle, ja tiedostojen lähettäminen uudelleen jatkokysymyksessä ei maksa siellä missä sillä on väliä. Aineisto menee työmallille eikä Clauden kontekstiin.
Tilat ratkaistaan nimellä ja kirjainkoosta riippumatta. Portal etsii ensin käyttäjän oman tilan, sitten tiimin ja lopuksi julkiset. Julkisen tilan haarauttaminen omaksi versioksi riittää, ja oma versio menee automaattisesti edelle ilman erillistä konfigurointia.

Mitä ei kannata delegoida
Muokkausta ei voi delegoida. Työmallin yhteenvedoista puuttuvat luotettavat rivinumerot, joten jos Clauden pitää tehdä muutoksia analyysin perusteella, sen on luettava kyseinen kohta itse. Koukut sallivat kohdennetut luvut juuri tästä syystä.
Päättelyä ei kannata delegoida. Mazmanovin testissä työmalli löysi pintatason kuviot mutta ohitti hienovaraisen säieturvallisuusvirheen. Claude huomasi sen sekunneissa, kun se sai oikean kontekstin.
Reititys sulkee siksi ulkopuolelle virheenjäljityksen, arkkitehtuuripäätökset ja turvallisuuskriittisen koodin. Nämä ovat juuri niitä tehtäviä, joista kalliista mallista maksetaan. Säästö haetaan ymmärtämisestä, ei arvostelukyvystä.
Viive kertyy myös. Jokainen delegointi on verkkokierros Claude Codesta Portalin taustapalveluun ja työmallille, ja vastaus kestää tyypillisesti 10-30 sekuntia. Portal katkaisee yksittäisen kutsun 30 sekuntiin, joten suuret generoinnit on pilkottava pienemmiksi.
Juuri tämän vuoksi riviraja on olemassa. Sen alapuolella delegoinnin yleiskustannus ylittää saavutetun säästön, ja suora luku on nopeampi ja halvempi.

Yhteenveto
Liitännäinen on Claude Code -kohtainen, mutta idea sen alla on mallireititys. Tilat ovat uudelleenkäytettäviä projektien välillä, jaettavia tiimin kesken ja vaihdettavissa ilman että liitännäistä muutetaan. Samalla tavalla voisi rakentaa tilan dokumentaatiolle, katselmoinnille tai käännöksille.
Spotifyn insinööriblogin mukaan tämä muuttaa mallireitityksen järjestelmäsuunnittelun ongelmasta konfiguraatio-ongelmaksi. Kun kalleimman mallin lasku muodostuu luetuista tokeneista, kysymys ei enää ole vain siitä mikä malli valitaan, vaan siitä mitä sille annetaan luettavaksi.
