Portal by Spotify cut my Claude Code token usage by 90%
Post di ingegneria di Spotify pubblicato il 3 settembre 2026 su engineering.atspotify.com (~1.600 parole, nove sezioni, due manifest YAML, quattro esempi da riga di comando), a firma di Dimitri Mazmanov, Principal Product Manager.
Dimitri Mazmanov, Principal Product Manager presso Spotify, ha pubblicato il 3 settembre 2026 sul blog di ingegneria dell'azienda il resoconto di una configurazione che, secondo quanto riferito, taglia del 90% il consumo di token in Claude Code. L'osservazione di partenza: la maggior parte di ciò che un agente di coding fa per lui non è ragionamento ma I/O — leggere cinque file per rispondere a una domanda su un metodo, generare un file di test identico agli altri venti adiacenti. Questo lavoro viene inviato a un modello frontier sovradimensionato, quando un modello economico se la caverebbe altrettanto bene.
La soluzione si basa su AiKA Modes di Portal by Spotify: agenti dichiarativi eseguiti su un runtime effimero, definiti da istruzioni, un modello, parametri e strumenti MCP, senza infrastruttura né chiavi API da gestire. L'autore crea due modalità pubbliche eseguite su Gemini 2.5 Flash. La prima, bulk-reader, legge un lotto di file e risponde con punti elenco strutturati. La seconda, code-writer, genera codice a partire da una specifica e da un file di riferimento di cui deve riprodurre le convenzioni.
Most of what an AI coding agent does for me isn't thinking. It's I/O
— Dimitri Mazmanov , engineering.atspotify.com
Il routing è gestito da un plugin per Claude Code chiamato shunt, dopo il fallimento di una prima versione basata su regole scritte in CLAUDE.md, che il modello poteva ignorare e che andavano copiate in ogni progetto. Il plugin impila tre livelli. Gli hook PreToolUse bloccano le letture di file oltre una soglia di righe configurabile, così come i comandi cat, head o tail su file di grandi dimensioni; le letture mirate passano. Gli script bash incapsulano le chiamate alla Portal CLI, costruiscono la richiesta e riportano indietro l'utilizzo dei token. I file di skill dicono a Claude quando e come chiamare questi script. Il corpus si sposta verso il modello secondario senza mai entrare nel contesto di Claude, che inoltre non vede mai il codice generato, scritto direttamente su disco.
Le misurazioni sono presentate come un risparmio medio di circa il 90% su quattro scenari testati su un monorepo Java, con l'autore che riconosce come lo scenario di generazione sia difficile da misurare. Una sezione dettaglia ciò che non funziona: l'editing non è delegabile per mancanza di numeri di riga affidabili, né lo è il ragionamento — il modello secondario non ha colto un bug di thread-safety che Claude ha individuato immediatamente — e ogni delega costa da dieci a trenta secondi di latenza, il che la rende controproducente su file piccoli.
L'autore conclude che il risparmio di token è solo un punto di partenza: il vero valore delle modalità sta nel trasformare il routing dei modelli in un problema di configurazione piuttosto che di ingegneria dei sistemi.
Punti chiave
L'intuizione di partenza è la ripartizione del carico, non l'ottimizzazione del prompt. Leggere file e generare codice ripetitivo consuma token senza richiedere ragionamento; questi task vanno a un modello economico, mentre il modello primario mantiene i problemi che richiedono giudizio.
Ciò che si risparmia non è solo il costo, è l'occupazione del contesto. Il corpus letto viene inviato al modello secondario e non entra mai nella finestra di Claude; una query successiva sugli stessi file quindi non ricarica nulla sul lato primario. Stesso meccanismo della delega ai subagent in [[willison-fable-judgement-delegation-subagents-2026-07-03]].
Una mode = un agente dichiarativo. nome, descrizione, istruzioni, modello, visibility, resourceLimits, tags. Runtime effimero, nulla memorizzato lato server, nessuna chiave API da gestire. Risoluzione per nome, case-insensitive, con precedenza personale → team → pubblico: fare il fork di una mode pubblica basta per sovrascriverla senza configurazione.
Le regole in CLAUDE.md non hanno retto. Prima versione del routing: un blocco di istruzioni che Claude leggeva e talvolta seguiva. Due difetti nominati — advisory, not enforced, e il dover essere copiate in ogni progetto. È l'argomento che guida il passaggio agli hook, gate rigidi indipendenti dalla decisione del modello.
La soglia è il parametro di tuning centrale.check-file-size blocca le chiamate Read oltre le 350 righe di default; check-bash-read intercetta cat, head, tail, less, more. Le letture mirate (offset/limit) e i comandi con pipe passano. Sotto la soglia, la latenza della delega costa più di quanto faccia risparmiare.
Il degrado controllato è il punto architetturale centrale. Tre livelli: l'hook blocca, lo script esegue, la skill spiega. Se Claude ignora la skill, l'hook blocca comunque — il contratto non è affidato al modello.
Due istruzioni della mode fanno gran parte del lavoro.Output only the code evita i blocchi markdown e la prosa che il modello primario dovrebbe poi riparsare; un file di riferimento obbligatorio per code-writer evita codice fuori contesto. Stessa logica di inquadramento delle skill descritte in [[shihipar-claude-code-lessons-building-skills-2026-06-03]].
⚠️ La cifra di punta è autodichiarata e non riproducibile come presentata: una media su quattro scenari su un monorepo Java, senza protocollo, senza volumi assoluti, senza confronto con un modello primario usato con letture mirate. L'autore ammette che lo scenario code-write è più difficile da misurare, e il costo del modello secondario non viene sottratto.
I tre limiti dichiarati delimitano l'ambito. nessun editing delegato (numeri di riga nei riassunti inaffidabili), nessun ragionamento delegato (debugging, decisioni architetturali e codice critico esplicitamente esclusi dal routing), 10-30 s di latenza per andata e ritorno, con un tetto di 30 s di Portal che costringe a suddividere le generazioni ampie.
La conclusione operativa riguarda le modalità, non il plugin. riutilizzabili tra progetti, condivisibili (entrambe le modalità sono pubbliche), componibili (doc-writer, reviewer, translator citati come possibili estensioni), e disaccoppiate dal routing — cambiare il modello di lavoro non cambia il plugin. Questa separazione packaging/esecuzione è quella formalizzata da [[google-agent-plugins-packaging-skills-mcp-2026-08-06]].
Installazione.claude plugin marketplace add spotify/portal-ai-plugins, poi i plugin portal (la CLI) e shunt (routing), quindi /portal:setup per l'autenticazione contro un'istanza Portal. La configurazione presuppone quindi un'istanza Portal con il plugin AiKA abilitato — non è trasferibile così com'è al di fuori di un'organizzazione che la gestisce.
Le cifre di inquadramento provengono dall'esterno del post e non sono sourciate. costi dell'IA per il coding che superano lo stipendio medio di uno sviluppatore entro il 2028, un quarto dei responsabili di ingegneria tra 200 e 500 dollari per sviluppatore al mese, alcuni sopra i 2.000. Da trattare come ordine di grandezza, da confrontare con le misurazioni per team in [[patel-block-buzz-teams-tokens-benchmarks-2026-08-06]].
Dati chiave
latenza di 10-30 secondi per delega, limite Portal di 30 secondi