La scelta dello stack è una leva di costo per gli agenti
- Leggere l'unico benchmark che ha messo numeri veri su «quale framework costa meno a un agente»
- Individuare le tre cose che il titolo sbaglia — compresa una tariffa per token che va al contrario
- Capire perché il conto dei token segue il LOOP dell'agente, non la dimensione del codice che scrive
- Sapere quale singolo numero si compone davvero nel corso della vita del progetto (non è il costo per build)
- Vedere il confondente non controllato che può spiegare diverse righe, e perché è una leva che possiedi
- Ripetere la stessa misura sul tuo stack, con un protocollo che regge alla varianza degli LLM
Per vent'anni scegliere un framework frontend ha significato barattare esperienza di sviluppo e dimensione del bundle. Gli agenti hanno aggiunto un terzo asse di cui nessuno aveva numeri: quanto costa a un modello lavorare in questa codebase?
Il 28 ottobre 2026 Nolan Lawson ha pubblicato il primo tentativo serio di misurarlo. Il risultato è finito in prima pagina su Hacker News e ha generato una settimana di post «Angular costa l'86% in più». Il titolo è vero. È anche la cosa meno interessante del dataset.
Questa pagina è la lettura attenta. Tre risultati nei dati contraddicono il modo in cui viene citato, e la leva più azionabile di tutto l'esperimento è una che il benchmark non intendeva nemmeno testare.
L'esperimento
Dodici stack, un'app, cinque esecuzioni ciascuno.
- Costruire un'app Pokémon su PokéAPI — ricerca, filtri, visualizzazione dei tipi e dati sulle mosse attraverso più versioni di gioco. L'autore la descrive come ricca di contenuto con interattività minima. Tienilo a mente: decide a cosa si generalizzano i risultati.
- Claude Opus 5.5 a effort alto, con la specifica del framework, il server MCP o la skill ufficiale dove esistevano, e una suite di test di conformità su cui programmare.
- Cinque esecuzioni indipendenti per framework — tre per Angular, che è fallito del tutto in 2 tentativi su 5. Riportati mediane e intervalli completi, il dettaglio che rende possibile una lettura onesta.
- Costo API in USD, minuti di wall-clock, token consumati, righe di codice non vuote, punteggi Lighthouse e kilobyte di JavaScript trasferiti al browser.
Ecco il risultato centrale — costo, token e dimensione del codice, ordinati per costo mediano:
| Stack | Costo (mediana) | Intervallo di costo | Token | Righe di codice | JS spedito |
|---|---|---|---|---|---|
| Hono+htmx | $2.67 | $2.23–$3.19 | 4.26 M | 1,370 | 18 KiB |
| Astro | $2.76 | $2.16–$3.63 | 4.13 M | 1,461 | 0 KiB |
| Nuxt | $2.82 | $2.39–$4.25 | 3.85 M | 1,415 | 84 KiB |
| Vanilla (Vite) | $2.98 | $2.24–$3.37 | 5.00 M | 1,492 | 7 KiB |
| Next.js | $3.14 | $2.58–$4.13 | 4.99 M | 1,539 | 142 KiB |
| Qwik | $3.27 | $2.35–$3.80 | 5.64 M | 1,744 | 40 KiB |
| TanStack Start | $3.54 | $3.11–$3.96 | 7.07 M | 1,697 | 118 KiB |
| SolidStart | $3.79 | $2.84–$4.81 | 7.13 M | 1,630 | 40 KiB |
| React Router | $3.81 | $2.82–$3.97 | 7.58 M | 1,564 | 115 KiB |
| SvelteKit | $4.28 | $3.59–$4.65 | 8.53 M | 1,611 | 36 KiB |
| Gracile+Lit | $4.65 | $3.92–$5.07 | 9.04 M | 1,717 | 8 KiB |
| Angular | $4.97 | $3.19–$6.82 | 9.76 M | 2,009 | 93 KiB |
Il wall-clock ha seguito da vicino il costo: Astro 8,2 min e Hono+htmx 8,6 min all'estremo veloce, Angular 17,2 min a quello lento.
Risultato 1: il conto dei token segue il loop, non l'artefatto
Confronta le forbici:
- Token: 3.85 M (Nuxt) → 9.76 M (Angular) = 2,54x
- Righe di codice: 1,370 (Hono+htmx) → 2,009 (Angular) = 1,47x
Se i token fossero per lo più l'agente che scrive codice, questi due rapporti sarebbero vicini. Non lo sono — la forbice dei token è più del 70% più larga di quella del codice. I 5,9 milioni di token in più consumati da Angular non sono finiti nelle 639 righe in più che ha prodotto.
Sono finiti nel loop: leggere file, rileggerli dopo ogni modifica, eseguire la suite di conformità, interpretare i fallimenti e riprovare. Il conto dei token di un agente è dominato da quante volte deve girare in tondo e da quanto contesto si trascina dietro ogni volta. L'artefatto finale è un errore di arrotondamento.
Questo ribalta l'intera domanda. «Quale framework produce meno codice» è un proxy debole. La vera domanda è quale framework permette a un agente di convergere in meno turni — una funzione di quanto è prevedibile la struttura dei file, quanto sono leggibili i messaggi d'errore, quanta cerimonia richiede una modifica e quanto bene gli idiomi correnti del framework sono rappresentati nei dati di training.
- I due fallimenti netti di Angular sono un fallimento di loop, non di qualità del codice. In entrambe le esecuzioni l'agente ha costruito un'app SSR che rifiutava connessioni non-localhost, nonostante le istruzioni specificassero un deploy dietro reverse proxy. È l'agente che interpreta male un vincolo di deploy — il tipo di cosa che un CLAUDE.md più preciso risolve, e un motivo per classificare i fallimenti invece di limitarsi a contarli.
Risultato 2: la tariffa effettiva per token va al contrario
È il risultato assente da ogni riassunto che ho letto, e salta fuori dividendo due colonne che nessuno ha diviso.
Prendi costo mediano ÷ token mediani per ogni riga:
| Stack | Token | Costo | $/Mtok effettivo |
|---|---|---|---|
| Nuxt | 3.85 M | $2.82 | $0.73 |
| Astro | 4.13 M | $2.76 | $0.67 |
| Hono+htmx | 4.26 M | $2.67 | $0.63 |
| Next.js | 4.99 M | $3.14 | $0.63 |
| Vanilla | 5.00 M | $2.98 | $0.60 |
| Qwik | 5.64 M | $3.27 | $0.58 |
| SolidStart | 7.13 M | $3.79 | $0.53 |
| Gracile+Lit | 9.04 M | $4.65 | $0.51 |
| Angular | 9.76 M | $4.97 | $0.51 |
La tariffa scende al salire del numero di token, quasi in modo monotono. I framework che bruciano più token pagano meno per token.
Perché? Opus 5.5 ha un listino di $4 per MTok di input fresco, $20 di output e $0,20 per le letture da cache — un moltiplicatore del 5% per le cache read dove lo standard di piattaforma è il 10%. Una tariffa mista tra $0,51 e $0,73 sta appena sopra il pavimento di $0,20 delle cache read e circa sei volte sotto la tariffa dell'input fresco. C'è un solo mix che produce quei numeri: la stragrande maggioranza dei token contati sono letture da cache. Abbina cache read pure a circa l'11% di traffico fresco e output e arrivi a $0,62; portalo all'8% e arrivi a $0,50 — il numero di Angular.
Il meccanismo è questo. Ogni passo in più in una lunga sessione agentica riproduce lo stesso contesto crescente. Quella riproduzione sono cache read a $0,20. Il token marginale in un framework pesante costa un ventesimo del primo token, ed è per questo che i 2,54x di token di Angular diventano solo un conto di 1,86x.
Due conseguenze che contano più della classifica:
- Il prompt caching fa il lavoro pesante in ogni riga. Questo benchmark è in buona parte una misura del volume di cache read. Qualunque setup di agente senza caching efficace vedrebbe le stesse forbici di token tradursi in un conto fino a 20x più caro — e il divario tra framework si allargherebbe invece di comprimersi. Se vuoi sapere la tua vera esposizione a uno stack verboso, controlla prima il tuo cache hit rate. Vedi prompt caching tra i provider e economia del prompt caching.
- Il costo per build sottostima sistematicamente la penalità di uno stack pesante, perché il caching assorbe esattamente ciò che gli stack pesanti generano. Il che porta al numero che davvero si compone.
- Questa aritmetica è mia, non dell'autore. Costo mediano ÷ token mediani non è la mediana dei rapporti per singola esecuzione, e le mediane di due colonne possono venire da esecuzioni diverse — quindi trattale come cifre approssimative e direzionali, non come verità per singola esecuzione. La direzione è coerente su tutte e dodici le righe, ed è ciò che la rende degna di essere riportata.
Risultato 3: gli intervalli si sovrappongono, quindi la maggior parte delle coppie adiacenti non prova nulla
L'esecuzione più economica di Angular è costata $3,19. L'esecuzione più cara di Hono+htmx è costata $3,19. Identiche.
Nuxt andava da $2,39 a $4,25; Astro da $2,16 a $3,63; SolidStart da $2,84 a $4,81. Su cinque esecuzioni stocastiche, la varianza dentro il framework è paragonabile — e spesso maggiore — alle differenze tra framework. Le affermazioni difendibili da questo dataset sono grossolane:
- Difendibile: il cluster MPA snello (Hono+htmx, Astro, Nuxt) costa meno del cluster pesante (SvelteKit, Gracile+Lit, Angular), di circa 1,5–1,9x.
- Non difendibile: «Astro batte Nuxt», «SolidStart batte React Router» o qualunque altra coppia vicina. Quei divari sono dentro il rumore.
L'autore lo dice lui stesso — l'obiettivo era «non scrivere il benchmark definitivo» ma mostrare che una selezione basata sulle evidenze è possibile. I post che hanno convertito le sue mediane in classifiche hanno lasciato cadere gli intervalli, e gli intervalli sono dove vive l'onestà. È la stessa disciplina che la nostra pagina leggere i benchmark AI applica alle classifiche dei modelli: una mediana senza dispersione è una sensazione travestita da numero.
Il confondente non controllato — e la leva che possiedi davvero
Sepolta nella metodologia c'è la cosa più azionabile dell'esperimento. A ogni agente è stato offerto il server MCP o la skill ufficiale del framework. Se li abbia usati è variato enormemente:
| Stack | Esecuzioni che hanno usato l'MCP / skill ufficiale |
|---|---|
| SvelteKit | 5 su 5 |
| Next.js | 1–2 su 5 (hanno letto file di guida) |
| TanStack Start | 2 su 5 (hanno scoperto le skill) |
| Nuxt | 0 su 5 (MCP mai usato) |
Fermati a pensarci. Su 60 esecuzioni, una frazione significativa della varianza potrebbe non essere «quanto costa questo framework» ma «l'agente ha notato la documentazione che stava lì a portata di mano?». SvelteKit ha usato il suo MCP ogni volta ed è comunque finito vicino all'estremo caro; Nuxt non ha mai toccato il suo MCP ed è arrivato terzo più economico. Questi due fatti da soli dovrebbero impedire a chiunque di leggere questa tabella come una classifica pulita dei framework.
L'inversione pratica: la scoperta della documentazione è una variabile che controlli completamente, mentre la scelta del framework è una che per lo più non puoi controllare. Prima di migrare una codebase per risparmiare $2 a build, rendi la documentazione impossibile da perdere:
- Metti le convenzioni del framework direttamente in
CLAUDE.mdinvece di sperare che una skill venga scoperta — vedi il nostro template CLAUDE.md e il generatore. - Dichiara esplicitamente i vincoli di deploy. I due fallimenti di Angular erano esattamente questa lacuna.
- Se pubblichi un server MCP o una skill per il tuo framework o la tua libreria interna, misura se gli agenti la invocano davvero. Uno strumento usato in 0 esecuzioni su 5 è, economicamente, uno strumento che non esiste.
Il numero che si compone: costo di modifica, non costo di build
Una build avviene una volta. Ogni task successivo paga una tassa proporzionale a quanto codice l'agente deve portare nel contesto per capire ciò che sta modificando.
Questo fa delle righe di codice la quantità duratura, e la forbice è più stretta di quella dei token ma permanente: 1,370 per Hono+htmx contro 2,009 per Angular — circa una tassa di contesto fissa più piccola del 32% su ogni task futuro, per sempre.
Combinalo col Risultato 2 e ottieni il modello mentale giusto. Al momento della build il caching comprime la differenza tra stack. Nell'arco della manutenzione paghi di nuovo la differenza di LOC a ogni task, e gran parte della lettura di base del repo è input fresco al primo turno di ogni nuova sessione, non un cache hit. Il divario una tantum di $2,30 è rumore; un terzo di codice in più da portarsi dietro per tre anni no.
- Non leggerlo come «scegli sempre lo stack più snello». Le righe di codice sono un termine della funzione di costo. Un framework che previene una classe di bug di sincronizzazione dello stato può far risparmiare molti più loop dell'agente di quanto costi in contesto — e un commento in cima a HN ha fatto esattamente questo ragionamento, sostenendo che htmx richiede test estesi per intercettare bug di stato sotto codegen AI mentre la forte presenza di React nei dati di training aiuta gli agenti su app davvero interattive. È un effetto reale che l'app di questo benchmark, ricca di contenuto, non può vedere.
Cosa questo non dimostra
I limiti sono portanti. L'autore ne elenca la maggior parte; ho aggiunto quelli che la copertura mediatica ha lasciato cadere.
| Limite | Perché conta |
|---|---|
| Un solo tipo di app | Ricca di contenuto, interattività minima. Dashboard, editor, giochi e app real-time ribaltano i compromessi che qui favoriscono le MPA. |
| Lighthouse favorisce le MPA | In particolare l'LCP punisce il routing lato client. Che gli stack snelli vincano sia sul costo sia su Lighthouse è in parte un artefatto di misura, non due vittorie indipendenti. |
| Cinque esecuzioni, alta varianza | Non bastano a separare righe adiacenti. Lo stesso Lighthouse è stato incoerente tra le esecuzioni, scegliendo elementi LCP diversi. |
| Un modello, un livello di effort | Opus 5.5 a effort alto. Un modello più economico o un effort più basso cambia sia il conto assoluto sia, plausibilmente, l'ordinamento. |
| Solo Chromium + throttling mobile | CPU 4x, Slow 4G, un browser, un laptop. |
| Nessun task di manutenzione misurato | Il costo composto sostenuto sopra è un'inferenza dalla colonna LOC, non un risultato misurato. Nessuno ha ancora eseguito il benchmark di manutenzione. |
| Tempo umano non prezzato | La mediana di 17,2 minuti di Angular contro gli 8,2 di Astro è un divario di ~9 minuti. Se un ingegnere supervisiona l'esecuzione, quei nove minuti di attenzione plausibilmente costano più dell'intero delta di $2,30 di token. Ottimizzare il conto API ignorando il wall-clock è la funzione obiettivo sbagliata. |
Ripetilo sul tuo stack
La cosa più forte di questo benchmark è che è riproducibile — sia l'harness sia i risultati grezzi sono pubblici. La tua codebase non è un'app Pokémon, quindi i numeri che dovrebbero guidare le tue decisioni sono i tuoi.
- Non una build da zero — è il caso che farai meno spesso. Scegli tre ticket chiusi di recente, di dimensione tipica, e usali come insieme di task. I benchmark greenfield misurano ciò che fai una volta sola.
- Stesso modello, stesso livello di effort, stesso harness, stesso prompt, stessi test di accettazione. Se confronti due stack, la suite di conformità deve essere a livello di comportamento, così da poter girare su entrambi.
- Cinque è il minimo, non l'obiettivo — gli intervalli pubblicati mostrano perché. Registra ogni esecuzione, non solo la mediana, e riporta la dispersione. Se gli intervalli si sovrappongono, il tuo risultato è «nessuna differenza rilevabile» ed è una risposta vera.
- Costo, token suddivisi per tipo (input fresco / output / cache read — la suddivisione è l'intera storia del Risultato 2), wall-clock e dimensione del diff risultante. Il solo costo nasconde il meccanismo.
- Fai grep nelle trascrizioni per le tue chiamate MCP e i caricamenti di skill. Se la scoperta è incoerente, sistema prima quella e riesegui — costa meno di una migrazione e può cancellare il divario che stavi cercando di chiudere.
- Pesa la dimensione del diff risultante e la tassa di contesto fissa più del costo di build una tantum. La prima la paghi a ogni task futuro.
Misura il costo per un agente di un task sul tuo stack
I want to measure how expensive a task is for you to complete in this codebase, so I can compare stacks and tooling with evidence instead of vibes. Task: <paste a real, closed ticket of typical size> Rules: 1. Work only inside this repo. Do not install new dependencies. 2. Stop when the existing test suite passes for the changed behaviour. 3. Do not optimise for token use — work the way you normally would. I am measuring the honest cost, not a best case. When you are done, report exactly: - Files read, and how many times each was re-read - Number of test/build invocations - Lines added and removed - Anything in the repo that made you go around an extra time: missing docs, surprising file layout, an unclear error message, a convention you had to infer. Be specific and name the file. That last list is what I am really after. Rank it by how many turns each item cost you.
L'ultima domanda è quella che rende. L'agente è l'unica entità che sa quale delle tue convenzioni gli è costata tre loop in più, e te lo dirà se glielo chiedi. Quelle risposte si convertono in righe di CLAUDE.md, e una buona riga di CLAUDE.md vale più di una migrazione di framework.
Check yourself
0/5- Il costo in token di un agente segue il numero di loop, non le righe prodotte: una forbice di token di 2,54x su una forbice di codice di 1,47x.
- La tariffa effettiva per token va al contrario ($0,73 → $0,51/Mtok) perché i passi extra dell'agente si fatturano come cache read da $0,20. Il caching assorbe la maggior parte della penalità — controlla il tuo hit rate prima di fidarti di qualunque cifra di costo per build.
- Riporta gli intervalli o non riportare nulla. La migliore esecuzione di Angular ha eguagliato la peggiore di Hono+htmx, quindi sopravvive solo l'affermazione grossolana snello-vs-pesante.
- La scoperta della documentazione non era controllata e può spiegare diverse righe. È anche gratis da sistemare e interamente tua da controllare — fallo prima di una migrazione.
- Ottimizza la quantità che si compone: la dimensione del codice risultante, pagata a ogni task futuro, non il conto di build una tantum.
- Un divario di ~9 minuti di wall-clock sotto supervisione umana plausibilmente costa più dell'intero delta di $2,30 di token. Non ottimizzare il conto API in isolamento.
Fonti e approfondimenti
- Nolan Lawson — The AI cost of JavaScript frameworks (28 ottobre 2026) — la fonte primaria: metodologia, tutte le tabelle dei risultati, i fallimenti di Angular, i conteggi di adozione di MCP/skill e le avvertenze dell'autore stesso
- nolanlawson/agent-framework-benchmark — l'harness del benchmark, per rieseguirlo sul tuo stack e sul tuo modello
- nolanlawson/agent-framework-benchmark-results — i risultati grezzi per singola esecuzione, leggermente redatti, dietro le mediane
- Discussione su Hacker News (item 50323088) — le controargomentazioni che valgono la lettura: l'obiezione «non è Figma» sulla complessità dell'app, il caso che htmx sia più difficile per gli agenti di quanto la sua snellezza suggerisca, e il costo di manutenzione nascosto dell'evitare i framework
- Anthropic — Prompt caching — prezzi delle cache read e comportamento del TTL, il meccanismo dietro il Risultato 2
- Correlato su AILmanac: Prompt caching tra i provider — le soglie di idoneità e la regola di pareggio che decide se il caching ti aiuta davvero
- Correlato su AILmanac: Economia del prompt caching — perché le cache read diventano la voce dominante in qualunque lunga sessione agentica
- Correlato su AILmanac: Come leggere un benchmark AI senza farsi ingannare — la stessa disciplina statistica applicata alle classifiche dei modelli
- Correlato su AILmanac: Perché gli agenti bruciano token — la meccanica a livello di loop dietro il Risultato 1
Avanti
- Perché gli agenti bruciano token — il meccanismo sotto il Risultato 1, al livello dei singoli turni
- Prompt caching tra i provider — la leva che sta pagando silenziosamente la maggior parte del conto in questo benchmark
- Coding e sviluppo software — il playbook più ampio in cui si inserisce questa decisione
- CI/CD per il codice scritto dagli agenti — una volta che gli agenti sono economici e veloci, la pipeline è la prossima cosa a rompersi