Ricercatori di Microsoft Research e dell’università UC Berkeley hanno pubblicato TokenEconomizer, un plugin open source progettato per controllare i costi degli agenti di programmazione. Impara dalle sessioni passate su uno stesso repository di codice per ridurre lo spreco delle sessioni successive. Secondo i risultati pubblicati, riduce il costo medio dei task SWE-Bench dal 18,4% al 30,9% su 5 configurazioni agente-modello.
Gli agenti di programmazione eseguono task di sviluppo in modo autonomo, inviando al modello linguistico un flusso continuo di testo, suddiviso in token (le unità di testo fatturate). Ogni turno dell’agente ribilancia il prompt di sistema, gli schemi di ogni strumento caricato e la cronologia completa. TokenEconomizer si posiziona all’esterno dell’agente, che tratta come una scatola nera: non modifica né i pesi dei modelli né il codice degli agenti. Funziona con Claude Code, Codex, GitHub Copilot CLI e Pi, su una macchina dotata di Python 3.10 o più recente, senza GPU né chiave API propria.
Dove va il denaro
Per comprendere le perdite, i ricercatori hanno analizzato 60 task SWE-Bench, distribuiti su 6 repository, eseguiti con Claude Code e Opus 4.8. Hanno rilevato tre fonti ricorrenti di spreco. La prima è la scoperta ripetuta: una volta completati 5 task precedenti, il 30% delle chiamate agli strumenti ripete un’azione già effettuata. La seconda riguarda gli strumenti inutilizzati: 23 schemi di strumenti vengono caricati a ogni turno, di cui 16 non sono mai chiamati, e 3 coprono il 98% delle chiamate. La terza riguarda le loop di fallimento: 10 esecuzioni fallite rappresentavano il 17% dei task, ma il 32% della spesa totale.
I ricercatori hanno anche testato tre strategie open source esistenti, RTK, Serena e il RepoMap di Aider. Nessuna è risultata meno costosa in tutti i casi: tutte e tre hanno ridotto i costi su Django, ma li hanno aumentati su SymPy.
Tre meccanismi
TokenEconomizer conserva, per ogni repository, uno stato costruito dalle tracce dei task completati, e fissa tre politiche prima di ogni task. La prima, le micro-competenze, consiste nel riassumere osservazioni in fatti di una riga, come il comando di test da utilizzare. Un fatto entra nel prompt solo dopo 3 conferme su task che non modificano gli stessi file, e una contraddizione ne conta 5, il che permette di rimuovere rapidamente i fatti errati.
La seconda politica, il potatura degli strumenti, mantiene sempre gli strumenti di shell, lettura, scrittura e modifica. Gli altri vengono nascosti dopo 3 task consecutivi senza utilizzo, o quando un giudice LLM li considera non pertinenti. Il catalogo completo ritorna ogni 5 task per essere rivalutato. Su Django con Claude Code, la prima chiamata del task 2 è passata da 43.351 a 16.295 token di prompt.
La terza è l’intervento sulle loop di fallimento. Il controllore definisce un budget di turni pari a 1,25 volte il 90° percentile delle lunghezze delle esecuzioni riuscite. Regole semplici segnalano i fallimenti ripetuti, poi un giudice LLM decide se l’agente è bloccato, con una confidenza di almeno 0,7. Un agente bloccato riceve un solo reindirizzamento, poi viene fermato se la loop si ripete.
Risultati variabili
Su SWE-Bench, il plugin ha ridotto il costo nelle 30 celle repository-configurazione testate, mentre RTK e RepoMap lo hanno aumentato rispettivamente in 12 e 15 casi. Il miglior risultato è un calo del 30,9% con Claude Code e Opus 4.8, che sale al 33,2% quando combinato con RTK. Il tasso Pass@1, che misura il successo al primo tentativo, è migliorato in 4 configurazioni su 5, ma è diminuito di 1,0 punto con Opus 4.8. I risparmi si osservano soprattutto nel tempo: la maggior parte dei repository costava di più inizialmente, ma tutti erano meno costosi già dal sesto task.
Il plugin è pubblicato sotto licenza Apache 2.0. I dati appresi rimangono in locale, nella cartella ~/.tokeneconomizer, e si installa su Claude Code a partire dal repository GitHub del progetto. La potatura degli strumenti e la protezione contro le loop sono attivate di default, mentre le micro-competenze sono disattivate, poiché il loro proponente aggiunge chiamate al modello.





