@dtlabs/ai-toolkit 0.1.7 → 0.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,274 @@
1
+ # Ottimizzazione dell'uso dei token — AI Toolkit
2
+
3
+ > Report di analisi. Data: 2026-07-23.
4
+ > Fonti: misurazioni sul repo + documentazione ufficiale Claude Code (`code.claude.com/docs/en/costs`).
5
+ > Stato: **solo raccomandazioni** — nessuna modifica applicata.
6
+
7
+ ## Come Claude Code fattura i token (il modello mentale corretto)
8
+
9
+ Il costo scala con la **dimensione del contesto processato a ogni turno**, non con
10
+ il numero di file nel toolkit. Tre meccanismi automatici mitigano già molto:
11
+
12
+ - **Prompt caching**: system prompt, CLAUDE.md e tool definitions ripetuti vengono
13
+ cachati (cache read costa ~1/10 di un input token). Vita cache: 1h su subscription,
14
+ 5 min su API/usage-credits.
15
+ - **Auto-compaction**: la history lunga viene riassunta vicino al limite di contesto.
16
+ - **Subagent isolati**: l'output verboso resta nel contesto del subagent, al main
17
+ loop torna solo un riassunto.
18
+
19
+ Conseguenza pratica: **le leve più grosse non sono "accorciare i prompt" ma
20
+ (a) non pagare due volte lo stesso contesto, (b) usare il modello giusto per ogni
21
+ agent, (c) tenere fuori dal contesto ciò che non serve al turno corrente.**
22
+
23
+ ---
24
+
25
+ ## Leva 1 — Deduplicare CLAUDE.md ⭐ impatto alto / sforzo minimo / rischio zero
26
+
27
+ ### Cosa ho misurato
28
+ - `CLAUDE.md` (progetto) e `~/.claude/CLAUDE.md` (globale) sono **byte-per-byte identici**
29
+ (verificato con `diff -q`).
30
+ - 169 righe / 1.257 parole ciascuno (~1.700 token).
31
+ - Entrambi vengono caricati in **ogni** sessione → ~3.400 token di contesto base,
32
+ di cui **metà è puro duplicato**.
33
+ - 55 delle 169 righe sono tabelle-catalogo (elenco skill/comandi/agent) — informazione
34
+ di *scoperta*, non *istruzione operativa*.
35
+
36
+ ### Raccomandazione
37
+ 1. **Il globale non deve duplicare il progetto.** `~/.claude/CLAUDE.md` dovrebbe
38
+ contenere solo preferenze cross-progetto (lingua, stile). Il catalogo del toolkit
39
+ vive già nel `CLAUDE.md` di progetto + `docs/reference.md`.
40
+ 2. **Spostare le tabelle-catalogo in `docs/reference.md`** (che già esiste ed è pensato
41
+ come cheatsheet). CLAUDE.md tiene solo: dipendenze, Gate Protocol, override
42
+ procedure. La doc ufficiale raccomanda **CLAUDE.md < 200 righe, solo essenziali**.
43
+ 3. Il Gate Protocol (regole MANDATORY sul PM) **resta** in CLAUDE.md: è un vincolo
44
+ operativo che deve essere sempre attivo.
45
+
46
+ ### Risparmio stimato
47
+ ~1.700 token di duplicato eliminati + ~600 token di catalogo spostato = **~2.300 token
48
+ risparmiati su ogni turno di ogni sessione**. Su sessioni lunghe (dove il contesto si
49
+ rimanda intero a ogni messaggio) è il risparmio con il miglior rapporto costo/beneficio.
50
+
51
+ ---
52
+
53
+ ## Leva 2 — Assegnare `model:` esplicito a ogni agent ⭐ impatto altissimo
54
+
55
+ ### Cosa ho misurato
56
+ Solo 7 agent su 22 hanno `model:` nel frontmatter (tutti `haiku`). Gli altri 15 —
57
+ **inclusi i due orchestratori `assessment-manager` e `project-manager`** — non lo
58
+ specificano e quindi ereditano il modello di sessione (spesso Opus).
59
+
60
+ ### Perché conta più di tutto il resto
61
+ Dal listino in `docs/pricing.md`:
62
+
63
+ | Modello | Blended $/1k token | Rapporto vs Haiku |
64
+ |---|---|---|
65
+ | Opus 4.8 | $0.009000 | **5×** |
66
+ | Sonnet 5 | $0.005400 | 3× |
67
+ | Haiku 4.5 | $0.001800 | 1× |
68
+
69
+ Un agent che gira su Opus invece che su Sonnet costa **~1,7× in più a parità di token**.
70
+ La doc ufficiale è esplicita: *"Reserve Opus for complex architectural decisions or
71
+ multi-step reasoning. For simple subagent tasks, specify `model: haiku`."*
72
+
73
+ ### Raccomandazione — mappatura per ruolo
74
+ | Ruolo | Modello suggerito | Motivo |
75
+ |---|---|---|
76
+ | Orchestratori (`assessment-manager`, `project-manager`) | **sonnet** | Coordinamento, non ragionamento profondo. La doc consiglia Sonnet per il coordinamento nei team. |
77
+ | Assessment read-only (già haiku) | haiku ✅ | Pattern-matching su codice |
78
+ | `generate-*`, `validate-*` (già haiku) | haiku ✅ | Trasformazione documentale |
79
+ | Developer (`developer-backend/frontend/testing`) | **sonnet** | Scrittura codice, buon compromesso |
80
+ | Refactoring (`god-class`, `domain-model`, `dependency-injection`) | **sonnet** | Modifiche strutturali con verifica build |
81
+ | `review-solution` | **opus** *(o sonnet)* | Unico punto dove il ragionamento profondo ripaga |
82
+ | `define-feature`, `init-agents-md` | sonnet | Interviste/analisi |
83
+
84
+ Regola: **default Sonnet, Haiku per il meccanico, Opus solo dove il giudizio architetturale ripaga.**
85
+
86
+ ### Risparmio stimato
87
+ Se gli orchestratori giravano su Opus, passarli a Sonnet è **~40% sul loro costo**.
88
+ Dato che `assessment-manager` è l'agent più pesante (~6.700 token di solo prompt +
89
+ ~3.000 di procedure lette a runtime), è il singolo intervento a maggior ritorno.
90
+
91
+ ---
92
+
93
+ ## Leva 3 — Estrarre la logica deterministica da `assessment-manager` ⭐ impatto alto / sforzo medio
94
+
95
+ ### Cosa ho misurato
96
+ `assessment-manager.md` = **5.052 parole (~6.700 token)**, il doppio del secondo agent.
97
+ Di queste, le sezioni righe **104–357** (calcolo Token/Effort Estimate) e **378–630**
98
+ (Data Contracts + Registry Write Algorithm) sono **~3.500 parole di pseudo-codice
99
+ deterministico**: somme, formule fisse, gestione errori I/O passo-passo, parsing tabelle.
100
+
101
+ ### Il problema
102
+ Far *eseguire a un LLM* aritmetica e I/O deterministici è:
103
+ - **costoso** — quelle 3.500 parole entrano nel contesto dell'agent a ogni run;
104
+ - **fragile** — il modello può sbagliare una somma o un formato;
105
+ - **ridondante** — è esattamente il lavoro che uno script fa a costo ~zero.
106
+
107
+ ### Raccomandazione
108
+ Spostare la logica meccanica fuori dal prompt in uno di questi modi (in ordine di preferenza):
109
+ 1. **Script esterno** (Python/Node) invocato via Bash: prende i `<usage>` block +
110
+ Interventions-Index e produce Token-Estimate.md / Effort-Estimate.md / registry.md.
111
+ Il prompt dell'agent si riduce a "esegui `scripts/estimate.py` con questi input".
112
+ 2. **Workflow script** (`Workflow` tool) se preferisci restare dentro Claude Code:
113
+ fan-out degli assessment + fasi di calcolo deterministico in JS.
114
+ 3. Se deve restare prosa, **comprimere** i Data Contract e la gestione errori in una
115
+ procedura referenziata (`docs/procedures/`) letta solo quando serve, non inline.
116
+
117
+ Il prompt di `assessment-manager` potrebbe scendere da ~6.700 a ~2.500 token.
118
+
119
+ ### Risparmio stimato
120
+ ~4.000 token di prompt in meno per ogni invocazione dell'assessment-manager, **più**
121
+ eliminazione del rischio di errori aritmetici (che oggi costano ri-esecuzioni).
122
+
123
+ ---
124
+
125
+ ## Leva 4 — Procedure lette on-demand invece che all'avvio ⭐ impatto medio
126
+
127
+ ### Cosa ho misurato
128
+ `assessment-manager` legge all'avvio 4 procedure + `pricing.md`:
129
+ `process-log` (144w) + `issues-register` (140w) + `assessment-findings-gate` (629w)
130
+ + `token-estimation` (1.283w) + `pricing` = **~2.900 parole (~3.900 token)** iniettate
131
+ nel contesto *prima* di iniziare. 7 agent hanno questo pattern "read these procedures".
132
+
133
+ ### Raccomandazione
134
+ - Leggere ogni procedura **nel momento in cui serve**, non tutte all'inizio.
135
+ Es. `token-estimation.md` serve solo in Phase 3/4, non in Phase 1.
136
+ - Se la Leva 3 estrae il calcolo token in uno script, `token-estimation.md` (1.283w,
137
+ la procedura più grossa) **non serve più nel contesto dell'LLM**.
138
+ - Valutare la compressione delle procedure più lunghe: `token-estimation.md` e
139
+ `approval-gates.md` contengono esempi ripetuti comprimibili.
140
+
141
+ ### Risparmio stimato
142
+ ~2.000 token per run dell'assessment-manager, cumulativo con la Leva 3.
143
+
144
+ ---
145
+
146
+ ## Leva 5 — Igiene di sessione (comportamentale, costo zero)
147
+
148
+ Dalla doc ufficiale, gli sprechi più comuni sono **sessioni mai pulite** e **modello
149
+ troppo grosso di default**:
150
+
151
+ - **`/clear` tra task non correlati.** Il contesto stantio si ri-invia a ogni messaggio.
152
+ Prima di pulire, `/rename` per ritrovare la sessione, poi `/resume`.
153
+ - **`/compact "focus su X"`** quando serve continuità ma il contesto è cresciuto.
154
+ - **`/context` e `/usage`** per vedere cosa occupa spazio; `/usage` segnala i
155
+ comportamenti che superano il 10% (long context, cache miss).
156
+ - **Cache miss**: la prima richiesta dopo >1h (subscription) ri-processa tutto il
157
+ contesto. Raggruppare il lavoro sul toolkit in finestre temporali serrate aiuta.
158
+ - **`/effort` più basso** per i task meccanici: i thinking token sono fatturati come
159
+ output. Per gli agent Haiku (assessment pattern-matching) l'effort alto raramente ripaga.
160
+
161
+ ---
162
+
163
+ ## Leva 6 — Hook di pre-processing per output verbosi ⭐ opzionale
164
+
165
+ Gli agent di assessment leggono molto codice. Un hook `PreToolUse` su Bash può
166
+ filtrare l'output dei comandi (es. solo righe `ERROR`/`FAIL`, o `grep` mirati) prima
167
+ che entri nel contesto — la doc mostra un esempio che riduce un log da decine di
168
+ migliaia a centinaia di token. Utile se in futuro gli assessment lanciano build/test.
169
+
170
+ ---
171
+
172
+ ## Riepilogo prioritizzato
173
+
174
+ | # | Leva | Impatto | Sforzo | Rischio | Risparmio stimato |
175
+ |---|---|---|---|---|---|
176
+ | 1 | Deduplicare CLAUDE.md globale/progetto | Alto | Minimo | Zero | ~2.300 tok / turno |
177
+ | 2 | `model:` esplicito su tutti gli agent | **Altissimo** | Basso | Basso | ~40% sugli orchestratori |
178
+ | 3 | Estrarre calcolo deterministico da assessment-manager | Alto | Medio | Medio | ~4.000 tok / run |
179
+ | 4 | Procedure on-demand | Medio | Medio | Basso | ~2.000 tok / run |
180
+ | 5 | Igiene di sessione (/clear, /compact, /effort) | Alto | Zero | Zero | variabile, cumulativo |
181
+ | 6 | Hook di filtro output | Medio | Basso | Basso | dipende dall'uso |
182
+
183
+ **Ordine consigliato di attacco:** 2 → 1 → 5 (tutti a basso sforzo e alto ritorno),
184
+ poi 3 → 4 (refactoring più impegnativo dell'assessment-manager), infine 6 se necessario.
185
+
186
+ ---
187
+
188
+ ## Riconciliazione con l'analisi ChatGPT del repo
189
+
190
+ ChatGPT ha analizzato il repo pubblico `dtlab-tech/ai-toolkit` e prodotto ~15
191
+ raccomandazioni. Ecco il giudizio critico su ciascuna, alla luce di **come funziona
192
+ realmente Claude Code** (non un framework generico) e di cosa ho verificato sul codice.
193
+
194
+ ### Convergenze — GPT ha ragione, e coincide con le mie leve
195
+
196
+ | Raccomandazione GPT | Mio giudizio | Nota |
197
+ |---|---|---|
198
+ | Modelli differenziati per ruolo (haiku/sonnet/opus) | ✅ **Valida, priorità #1** | = mia Leva 2. Allineata alla doc ufficiale. |
199
+ | Effort basso per task meccanici | ✅ Valida | Thinking token = output token. `/effort` o `MAX_THINKING_TOKENS`. |
200
+ | Summary + full split (orchestratore legge solo il summary) | ✅ **Valida, alto ROI** | La doc Anthropic lo raccomanda esplicitamente per i subagent. |
201
+ | Procedure caricate on-demand per fase | ✅ Valida | = mia Leva 4. |
202
+ | `/clear`, `/compact`, compact-instructions in CLAUDE.md | ✅ Valida | = mia Leva 5. Confermato dalla doc. |
203
+ | CLAUDE.md breve | ✅ **Valida** | = mia Leva 1 — ma GPT non poteva vedere il duplicato globale/progetto. |
204
+ | generic-assessment → triage (non duplicare gli specialisti) | ✅ Valida | Riduce sovrapposizione di scope. Buon punto. |
205
+ | Delegation policy (subagent solo se serve) | ✅ Valida | Allineata alla doc sui subagent. |
206
+ | Scope a livello di file, non solo di agente | 🟡 Utile | Vero che `--scope` seleziona agent, non file. Ma vedi caveat sotto. |
207
+
208
+ ### Caveat e correzioni — dove GPT ragiona da "framework tradizionale"
209
+
210
+ 1. **"Aggiungi `budget:` nel frontmatter dell'agent" — ❌ tecnicamente errato.**
211
+ Lo schema frontmatter degli agent Claude Code (`name`, `description`, `model`,
212
+ `tools`) **non ha un campo `budget:`**. Metterlo lì non fa nulla: non è *enforced*
213
+ dall'harness. Un `max_files: 25` in YAML è ignorato.
214
+ → *Correzione:* i limiti vanno espressi come **istruzioni testuali nel corpo del
215
+ prompt** ("Inspect at most ~25 files; stop when evidence is sufficient"). Sono
216
+ linee guida che il modello segue, non vincoli hard. Un budget di token *reale*
217
+ esiste solo dentro i **Workflow script** (`budget.total`), che è un altro meccanismo.
218
+
219
+ 2. **"Repository Scanner unico + `repository-index.json`" (P0 di GPT) — 🟡 valido come
220
+ principio, sopravvalutato nell'impatto.** GPT assume che ogni agent "riceva/riscansioni
221
+ l'intero repository". In realtà un subagent Claude Code parte con **contesto minimo**
222
+ e legge on-demand via Grep/Glob/Read: ricevere il *path* ≠ ricevere tutto il repo.
223
+ La duplicazione di lettura esiste (N agent che grep-ano gli stessi file), ma è meno
224
+ drammatica del quadro dipinto. Inoltre, su un toolkit *generico* che gira su codebase
225
+ arbitrarie, l'indice va **rigenerato a ogni run** (= una scansione comunque). Il
226
+ risparmio reale c'è **solo se molti agent condividono lo stesso indice** — va misurato,
227
+ non assunto. Buona idea per l'assessment parallelo; ROI da verificare.
228
+
229
+ 3. **"Output JSON compatti invece di Markdown" (P0 di GPT) — 🟡 il punto giusto è un
230
+ altro.** JSON non è intrinsecamente più economico del Markdown: virgolette, parentesi
231
+ e chiavi ripetute spesso lo rendono *più* verboso. Il guadagno vero non è "JSON vs MD"
232
+ ma **il summary/full split** (l'orchestratore legge il riassunto, non il documento
233
+ intero). Adottare lo split: sì. Farlo *perché* è JSON: irrilevante.
234
+
235
+ 4. **"Cache hash-based (commit_sha + agent_version + …)" (P1 di GPT) — 🟡 chiarire il
236
+ livello.** Questo è caching **applicativo** (evitare di *ri-eseguire* un agent se
237
+ l'input non è cambiato), NON il **prompt caching** di Claude (che riduce il costo
238
+ input a ogni turno ed è già automatico). Sono complementari. La cache hash-based è
239
+ utile ma va capito che agisce su un asse diverso dal costo per-turno.
240
+
241
+ 5. **"Skill progressive per Clean Code / Clean Architecture" (P1 di GPT) — 🟡 premessa
242
+ parz. sovrastimata.** GPT ipotizza "300 righe di regole Clean Code nei prompt".
243
+ Verificato: gli agent **non** contengono quel volume — `god-class-decomposition` e
244
+ `domain-model-refactoring` citano i concetti brevemente. L'idea di skill progressive
245
+ resta buona in generale, ma il risparmio su *questo* repo è minore di quanto stimato.
246
+
247
+ 6. **"agent-registry.json per evitare la discovery ripetuta" (P1) — 🟢 basso ROI.**
248
+ GPT stesso ammette che "il costo non è enorme". Micro-ottimizzazione: leggere i
249
+ frontmatter di ~22 file è economico. Farlo solo se si tocca comunque l'installer.
250
+
251
+ 7. **"Handbook di 120-150 pagine" — ⚠️ attenzione al paradosso token.** Un manuale
252
+ umano va benissimo *come documentazione*. Ma se lo si referenzia da CLAUDE.md o lo si
253
+ fa leggere agli agent, **aumenta** i token — l'opposto dell'obiettivo. Tenerlo come
254
+ riferimento per umani, mai in contesto automatico.
255
+
256
+ ### Suggerimenti "generici" (non da questa chat) che comunque NON valgono per Claude Code
257
+
258
+ - **"Abbassa `max_tokens` / `temperature`"** — non esposti nella CLI; la lunghezza
259
+ dell'output è guidata dal task.
260
+ - **"Manda meno messaggi"** — irrilevante: costa il *contesto per turno*, non il numero
261
+ di messaggi.
262
+ - **"Usa un modello piccolo per tutto"** — controproducente: un modello troppo debole
263
+ sbaglia e forza ri-esecuzioni. La regola è *modello adatto al task*.
264
+
265
+ ### Sintesi del giudizio
266
+
267
+ La base del toolkit è solida (GPT dà 6,5/10, ragionevole). Le raccomandazioni a **più
268
+ alto ritorno e più basso rischio**, su cui io e GPT convergiamo, sono:
269
+ **(1) modelli differenziati, (2) summary/full split, (3) procedure on-demand, (4) igiene
270
+ di sessione.** A queste aggiungo la **deduplicazione del CLAUDE.md globale/progetto**
271
+ (che GPT non poteva vedere). Le idee più "architetturali" di GPT (repository-scanner,
272
+ budget, cache hash-based) sono valide come *direzione* ma vanno (a) tradotte nei
273
+ meccanismi reali di Claude Code e (b) **misurate con `/usage` prima e dopo**, non
274
+ adottate sulla fiducia.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dtlabs/ai-toolkit",
3
- "version": "0.1.7",
3
+ "version": "0.2.1",
4
4
  "description": "AI Toolkit — reusable agents and procedures for developers to build AI-powered applications.",
5
5
  "files": [
6
6
  "docs/",