Piano Operativo Completo di Ottimizzazione Token¶
Scopo¶
Questo documento descrive tutto quello che implementerei per ridurre in modo aggressivo il consumo token del progetto, con un vincolo assoluto:
- nessuna riduzione reale della copertura
- nessuna riduzione del numero di finding trovati
- nessuna riduzione della qualità di reasoning, verification, chaining o reporting
Il principio guida è:
eliminare solo costo inutile, costo duplicato, costo statico non selettivo e costo speso in sessioni impossibili o già fallite.
Questo documento è pensato per essere revisionato da Opus High prima dell'implementazione.
Materiale di riferimento¶
- Diagnosi e misure raccolte: opus-high-token-optimization-review.md
- Handoff prompt: opus-high-review-prompt.txt
Vincoli non negoziabili¶
Qualsiasi cambiamento deve preservare:
- copertura della superficie di attacco
- hit rate sui crown jewels
- profondità di test su IDOR/Auth/SSRF/Injection/Logic/API
- qualità di exploit verification
- qualità e completezza delle evidenze
- qualità del chain discovery
- qualità del loop di apprendimento
Regola di approvazione¶
Una modifica entra solo se:
- findings parity >= baseline
- endpoint coverage parity >= baseline
- crown jewel coverage parity >= baseline
- verification parity >= baseline
- no aumento del FP rate
- token per finding confermato migliora in modo netto
Baseline da cui partiamo¶
Sintomi già misurati¶
bugbounty/PERPETUAL-HUNTING.logmostra 540 session start nell'ultima ora loggatabugbounty/perpetual-hunting-console.logcontiene 391 eventiout of extra usagebugbounty/.prompt-*: 7160 filebugbounty/.session-prompt-*: 2021 fileProxySession.auto_analyzeèTruedi defaultproxy_analyzer_loop()parte automaticamente all'avvio backend
Peso statico stimato dei prompt principali¶
Stima conservative chars / 4.
CLAUDE.md: ~6.6K tokenpentest/SKILL.md: ~41.6K tokentest-injection + support: ~107.4K tokentest-auth + support: ~82.4K tokentest-access + support: ~57.5K tokentest-client + support: ~30.0K tokentest-logic + support: ~25.7K tokentest-api + support: ~24.0K tokentest-ssrf + support: ~19.7K token
Conclusione operativa¶
Le root cause da attaccare sono:
- bug bounty loop non quota-aware e non single-flight
- static prompt tax eccessivo
- parallelismo che moltiplica quel costo fisso
- proxy analyzer sempre acceso
- rediscovery non differenziale sui programmi di ritorno
Strategia generale¶
Dividerò il lavoro in due lane:
Lane A: Conservative, immediatamente safe¶
Nessun downgrade di modello e nessun taglio di copertura. Si agisce su:
- orchestration
- scheduling
- dedupe
- lock
- cooldown
- prompt compaction strutturale
- context capsules
- background AI gating
Lane B: Shadow-gated, ulteriore risparmio¶
Valida in shadow mode prima del rollout. Qui rientrano:
- routing di task deterministici su modello più economico
- attivazione automatica di
tokens_optimizerequivalente - novelty thresholds più aggressivi
- optional default-off per certe analisi AI background
Workstream 0: Misurazione Prima di Cambiare¶
Obiettivo¶
Misurare in modo affidabile dove vanno i token prima di cambiare semantica.
File da toccare¶
- bugbounty/PERPETUAL-HUNTING-LOOP.sh
- bugbounty/loop-manager.sh
- dashboard/runner/runner.py
- dashboard/backend/app/services/proxy_analyzer.py
- nuovo file suggerito:
scripts/claude-metrics.pyo modulo riusabile equivalente
Cosa implementare¶
- Scrivere un record JSONL per ogni invocazione
claude -pcon: - timestamp
- caller
- command family (
bb-loop,bb-hunt,pentest,proxy-analyzer,runner) - engagement/program/session id
- prompt file path o prompt digest
- prompt char count
- estimated prompt tokens
- max-turns
- model
- start/stop
- exit status
- rate-limit flag
-
session classified outcome
-
Se il
stream-jsonfinale espone metriche token, salvarle; altrimenti usare stima locale. -
Classificare ogni run in:
usefulrate_limited_immediaterate_limited_midrundead_run_shorterror
Nuovi artifact runtime¶
Proposta:
bugbounty/.runtime/metrics/claude-invocations.jsonlengagements/<name>/runtime/claude-invocations.jsonldashboard/data/runtime/proxy-analysis-metrics.jsonl
Acceptance¶
Prima di qualunque ottimizzazione, dobbiamo poter calcolare:
- spawn/hour
- prompt tax per family
- dead-run ratio
- rate-limit ratio
- token per useful run
- token per confirmed finding
Workstream 1: Harden del Bug Bounty Loop¶
Obiettivo¶
Fermare subito il burn inutile da orchestration difettosa senza toccare la qualità dell'hunting.
File da toccare¶
- bugbounty/PERPETUAL-HUNTING-LOOP.sh
- bugbounty/loop-manager.sh
- .claude/skills/bb-loop/SKILL.md
- riuso logico da scripts/pentest-autoresume.py
- nuovo helper suggerito:
scripts/claude-rate-limit-state.pyoppure modulo Python condiviso
Modifiche richieste¶
1. Single-instance lock¶
Implementare lock atomico globale per loop bug bounty.
Semantica:
- una sola istanza attiva per workspace/account
- se esiste lock vivo: niente nuovo start
- se lock è stale: recovery controllato con takeover loggato
Possibile path:
bugbounty/.runtime/loop.lock
2. Control plane unico¶
Rendere bb-loop/SKILL.md il front door ufficiale e far convergere:
PERPETUAL-HUNTING-LOOP.shloop-manager.sh- skill
/bb-loop
su una sola semantica.
Regola:
- un solo launcher
- un solo pid/lock
- un solo log di stato
- un solo meccanismo di resume/backoff
3. Cooldown globale sul rate limit¶
Se un subprocess riporta out of extra usage o pattern equivalente:
- marcare stato globale
rate_limited - nessun nuovo
claude -pfinché il cooldown non scade - usare reset time se disponibile
- fallback su backoff progressivo
Proposta:
- 1° evento: attendi reset parseato o 15 min
- 2° evento ravvicinato: 30 min
- eventi continui: blocco fino a finestra reale
4. Classificazione sessioni "morte"¶
Una sessione viene classificata dead_run_short se:
- <= 3 turni
- oppure < 90s
- oppure terminazione immediata con rate limit
- oppure nessun comando reale eseguito
Queste sessioni:
- non avanzano il loop normalmente
- non incrementano ranking heuristics
- attivano backoff, non restart immediato
5. Quota-aware scheduler¶
Il loop non deve essere "perpetual a prescindere", ma "perpetual entro finestra utile".
Semantica:
- se quota disponibile: normal schedule
- se quota incerta: riduci concurrency
- se quota esaurita: pausa globale
6. Prompt dump/log hygiene¶
Spostare i dump fuori dal root operativo:
bugbounty/.runtime/prompts/bugbounty/.runtime/logs/
Rotazione:
- ultimi N giorni
- opzionalmente compressione
- cleanup sicuro al boot
Implementazione consigliata¶
Estrarre la logica di parse rate limit da pentest-autoresume.py e riusarla nel loop bug bounty, invece di avere due logiche separate.
Acceptance¶
- massimo 1 orchestratore attivo
- zero spawn durante cooldown globale
- zero restart ogni 10 secondi in quota esaurita
- run dead non contano come hunt reali
Saving atteso¶
Questo è il workstream con ROI maggiore.
Stima:
- 40-85% di riduzione del burn attuale del BB loop, se il problema principale è davvero lo spawn storm in rate limit
Workstream 2: Context Slimming e Prompt Capsules¶
Obiettivo¶
Ridurre il costo statico per subprocess senza perdere metodologia.
File da toccare¶
- CLAUDE.md
- .claude/skills/pentest/SKILL.md
- .claude/skills/test-injection/SKILL.md
- .claude/skills/test-auth/SKILL.md
- .claude/skills/test-access/SKILL.md
- .claude/skills/test-client/SKILL.md
- .claude/skills/test-logic/SKILL.md
- .claude/skills/test-api/SKILL.md
- .claude/skills/test-ssrf/SKILL.md
Modifiche richieste¶
1. Distillare CLAUDE.md¶
Tenere in CLAUDE.md solo:
- regole globali
- safety invariants
- orchestration invariants
- poche convenzioni davvero always-on
Spostare il resto in helper on-demand.
2. Router + micro-pack per le skill pesanti¶
Esempio per test-injection:
- router leggero
- pack
sqli - pack
xss - pack
ssti - pack
xxe - pack
cmdi
La route decide quali pack caricare in base a:
- scope dispatch
- signal dal fingerprint
- tipo endpoint
- tech stack
Stessa strategia per:
test-auth: session / jwt / oauth / password-reset / account-prehijacktest-access: idor / horizontal / vertical / multi-tenant / admin exposure
3. Supporting files lazy-load¶
I supporting files non devono essere tutti implicitamente attivi sempre.
Regola:
- caricare solo i micro-pack rilevanti per il subtype
- non caricare cheatsheet o knowledge di classi non attive
4. Prompt capsules compilate¶
Creare summary compatti, size-capped, deterministici per:
brief-compact.jsonpolicy-compact.jsonknowledge-compact.jsonattack-surface-compact.jsonfindings-compact.json
Path proposti:
engagements/<name>/runtime/bugbounty/programs/<platform>/<handle>/runtime/
5. Eliminare duplicazione testuale¶
Molte sezioni ripetono:
- safety
- output format
- evidence rules
- boilerplate
Queste vanno centralizzate una sola volta e referenziate con contratti compatti.
Semantica da preservare¶
Il comportamento della skill deve rimanere identico.
Deve cambiare solo:
- quanto testo statico viene caricato per raggiungere quel comportamento
Acceptance¶
- stessa lista di check reali eseguiti
- stessa coverage per vuln class
- stessa qualità di findings
- prompt size medio per subprocess significativamente più basso
Saving atteso¶
Stima prudente:
- 20-40% di riduzione per subprocess nei flow pesanti
Workstream 3: Skinny Context Prima del Fork¶
Obiettivo¶
Mantenere il parallelismo ma senza ereditare contesto grasso.
File da toccare¶
Modifiche richieste¶
Prima di ogni dispatch, il parent deve costruire un run-brief compatto con:
- target
- scope
- credentials availability
- crown jewels
- endpoint subset assegnato
- policy compact
- prior blockers
- prior successful techniques
- next steps rilevanti
I child non devono ereditare:
- log lunghi
- findings storici completi
- session history verbosa
- boilerplate non rilevante per il proprio scope
Output suggerito¶
runtime/dispatch-brief.json
Acceptance¶
- stesso numero di child utili
- stesso assignment coverage
- meno prompt duplication tra child
Workstream 4: Differential Rediscovery per Programmi di Ritorno¶
Obiettivo¶
Smettere di pagare ogni volta discovery completa quando la superficie non è cambiata.
File da toccare¶
- .claude/skills/bb-session/SKILL.md
- .claude/skills/bb-hunt/SKILL.md
- dashboard/backend/app/services/bb_program_knowledge.py
- nuovo helper suggerito:
dashboard/backend/app/services/bb_surface_freshness.py
Modifiche richieste¶
1. Freshness manifest¶
Salvare per ogni programma:
- homepage hash
- robots/sitemap hash
- JS manifest hash
- tech stack fingerprint
- auth surface fingerprint
- GraphQL presence/hash
- endpoint set hash
2. Freshness check leggero all'inizio¶
Ogni ritorno su programma già noto esegue un delta check economico.
3. Decisione differenziale¶
Se il delta supera soglia:
- full rediscovery
Se non supera soglia:
- reuse baseline
- delta crawl
- focus su:
- untested endpoints
- next steps storici
- nuovi artifact differenziali
Trigger per full rediscovery¶
- nuova route di login
- nuovi JS bundle
- nuovo subdomain
- cambio auth headers/cookies
- nuovi sitemap entries
- nuovo GraphQL/schema surface
- change monitor ad alto priority boost
Acceptance¶
- nessuna perdita di new asset detection
- meno discovery ridondante sui programmi stabili
Saving atteso¶
Sui programmi di ritorno:
- 30-70% nei cicli dove la superficie è stabile
Workstream 5: Proxy Analyzer Recall-Oriented ma Molto Più Economico¶
Obiettivo¶
Ridurre drasticamente il costo AI background sul traffico proxy mantenendo la capacità di segnalare le request davvero interessanti.
File da toccare¶
- dashboard/backend/app/services/proxy_analyzer.py
- dashboard/backend/app/services/proxy_history_service.py
- dashboard/backend/app/schemas.py
- dashboard/backend/app/main.py
Lane A: Conservative¶
Tenere analyzer attivo ma con novelty gate.
1. Semantic dedupe¶
Fingerprint per request cluster:
- method
- normalized route template
- param names
- auth present/absent
- status bucket
- response content-type
- response shape/hash
2. Batch solo su novelty o signal forte¶
Inviare a Claude solo:
- nuovi cluster
- cluster con delta significativo
- errori interessanti
- reflection
- token leakage
- redirect params
- callback/webhook/url params
- GraphQL
- upload
- admin/internal endpoints
3. Keep manual realtime¶
L'analisi single-request realtime resta disponibile sempre.
Lane B: Shadow-gated¶
Valutare dopo parity:
- default
auto_analyze=Falseper nuove sessioni - o default on solo per sessioni esplicitamente AI-assisted
Non lo farei prima della validazione.
Acceptance¶
- stessa o migliore precisione su request davvero interessanti
- riduzione forte di batch inutili
- nessuna perdita sulle request ad alto signal
Saving atteso¶
- 60-95% del costo del proxy background, se il traffico è molto ripetitivo
Workstream 6: Workspace e Search Hygiene¶
Obiettivo¶
Ridurre il rischio che file enormi e output locali rientrino nel contesto tool in modo inutile.
File da toccare¶
- .gitignore
- nuovo
.rgignoresuggerito
Modifiche richieste¶
Escludere di default da search e ispezione ampia:
.claude/worktrees/dashboard/frontend/node_modules/payloads/non rilevanti per il task- prompt dump runtime
- log runtime
Nota¶
Questo non è il driver principale del billing modello, ma aiuta molto a non sporcare il contesto operativo.
Workstream 7: Model Routing Solo Dove Non C'è Rischio¶
Obiettivo¶
Fare tutto il possibile, ma senza tagliare qualità.
Lane A¶
Nessun downgrade obbligatorio.
Lane B¶
Shadow-gated:
- fingerprinting
- policy parsing
- surface diff
- clustering
- route preparation
- batch normalization
possono passare a:
- codice deterministico
- oppure modello più economico
Opus resta mandatory per:
- exploit reasoning
- stuck resolution
- verification
- chain discovery
- final finding acceptance
File coinvolti¶
Ordine di esecuzione consigliato¶
Fase 1¶
- Workstream 0
- Workstream 1
Questi due vanno fatti subito.
Fase 2¶
- Workstream 2
- Workstream 3
Qui si attacca il prompt tax vero.
Fase 3¶
- Workstream 5
- Workstream 4
Prima il proxy analyzer, poi il rediscovery differenziale.
Fase 4¶
- Workstream 6
- Workstream 7 Lane B
Priorità dei file pesanti da decomporre¶
test-injectiontest-authtest-accesspentesttest-clienttest-logic
Piano di shadow validation¶
Dataset¶
Usare:
- lab/eval con ground truth
- 2-3 programmi BB storici con finding reali
- 1 flusso con proxy analyzer attivo
- 1 ritorno su programma già noto
Metriche mandatory¶
- total token
- token per subprocess family
- token per finding confermato
- prompt size medio
- dead-run ratio
- rate-limit ratio
- endpoint coverage
- crown jewel coverage
- findings confirmed
- findings accepted o ready-to-submit
- FP rate
Modalità¶
Per ogni workstream:
- baseline run
- optimized run in shadow
- diff strutturato
- rollback immediato se coverage/findings parity fallisce
Rollback Plan¶
Ogni workstream deve essere feature-flagged.
Flag suggerite¶
BB_LOOP_SINGLETON_LOCK=1BB_GLOBAL_RATE_LIMIT_GUARD=1BB_DIFFERENTIAL_REDISCOVERY=1PROXY_AI_NOVELTY_GATE=1PROMPT_CAPSULES=1SKINNY_FORK_CONTEXT=1SKILL_LAZY_LOAD=1
Regola¶
Se qualsiasi flag porta:
- finding drop
- coverage drop
- chain drop
- verify degradation
si rollbacka solo quel workstream, non tutto il programma di ottimizzazione.
Risparmio atteso per workstream¶
Queste sono stime, non promesse:
- loop hardening: 40-85%
- prompt compaction: 20-40% per subprocess pesante
- skinny fork context: 10-25%
- differential rediscovery: 30-70% sui programmi di ritorno
- proxy analyzer novelty gate: 60-95% del background proxy burn
- routing non-Opus per task deterministici: ulteriore 10-30% in lane shadow
Cosa NON farei subito¶
Per prudenza non farei immediatamente:
- spegnere del tutto l'analyzer proxy di default senza shadow parity
- spostare troppe fasi su modelli più economici senza benchmark
- comprimere il loop riducendo programmi o ore per hunt
- ridurre il numero di skill o di wave senza dimostrare equivalenza
Richiesta esplicita a Opus High¶
Voglio che Opus High valuti:
- se questa sequenza di rollout è la più sicura
- se i workstream proposti sono davvero trasparenti rispetto alla qualità
- quali micro-pack vanno creati prima
- se il novelty gating del proxy analyzer è abbastanza recall-oriented
- se il differential rediscovery proposto è abbastanza conservativo
- se ci sono altre ottimizzazioni strutturali possibili senza regression
Decisione finale proposta¶
Se dovessi partire domani, farei in questo ordine:
- misurazione completa
- singleton lock + cooldown globale sul bug bounty loop
- classificazione run morte + backoff reale
- prompt capsules + skinny fork context
- decomposizione
test-injection,test-auth,test-access - novelty gate sul proxy analyzer
- differential rediscovery per programmi già noti
- solo dopo: model routing più aggressivo in shadow
Questa è, a mio avviso, la massima ottimizzazione possibile senza intaccare il valore offensivo del progetto.