Ieri sera ho letto un post di Simon Willison che amplifica un altro post, di Thariq Shihipar del team Claude Code di Anthropic. Tema: "the unreasonable effectiveness of HTML", cioe' Markdown e' troppo poco, dovremmo chiedere agli agenti di produrre HTML. Ho aperto Twitter, mi sono accorto che lunedi' (5 maggio) e' uscito mdream che fa esattamente l'opposto: converte HTML in Markdown con il 50% di token in meno, perche' "ogni token conta". Cloudflare a marzo aveva lanciato un servizio simile. Sono andato a leggere meglio: stanno tutti dicendo cose molto sensate e molto in conflitto fra loro.
Mi sono reso conto che il dibattito e' una falsa polemica. Tre persone serie litigano su tre problemi diversi, scambiati per uno solo. Il pezzo prova a separarli, e a guardare la casella che resta vuota una volta separati. Quella casella mi ha fatto scrivere mille righe di Rust in un giorno per provare a riempirla. Spoiler: il prototipo funziona, ma non risolve la falsa polemica. Risolve un problema diverso, che probabilmente non e' ancora vostro. Forse lo diventera' quest'anno.
// Il Post Di Ieri
Sezione 1. Anthropic spinge HTML, e ha ragione su quello che diceL'8 maggio 2026 Simon Willison pubblica Using Claude Code: The Unreasonable Effectiveness of HTML. Riprende un post di Thariq Shihipar, che lavora sul team Claude Code dentro Anthropic. La tesi di Shihipar in due righe e' chiara: per gli artifact che gli agenti producono per gli umani, HTML e' meglio di Markdown.
I motivi che porta sono concreti, non opinabili:
- Information density. HTML ha tabelle vere, SVG, CSS, script, layout assoluti, immagini. Markdown ha header, liste, fence di codice. Per uno spec con diagrammi e mockup, MD ti costringe a ripiegare su ASCII art o, nel caso peggiore, a stimare i colori con caratteri Unicode.
- Visual clarity. Un MD da 100+ righe nessuno lo legge. Un HTML rendered con tabs, illustrazioni, link interni, sezioni, e' molto piu' digeribile. Soprattutto se vuoi che lo legga qualcun altro nel team.
- Sharing. Il browser apre l'HTML nativamente. Un MD lo apri in editor, in viewer, o lo converti. La probabilita' che il tuo PR writeup venga davvero letto e' molto piu' alta in HTML.
- Two-way interaction. Sliders, knobs, copy buttons che riportano JSON al prompt. Un Markdown e' un testo, un HTML e' una piccola UI usa-e-getta.
Onesto sui downside: HTML costa 2-4× il tempo di generazione, i diff in PR sono noisy, "in token usa di piu' ma con il context da 1M di Opus 4.7 non si nota". Spende esplicitamente piu' token in cambio di artifact che effettivamente leggi.
Se quello che ti serve e' un piano leggibile dal team con diagrammi e mockup veri, ha ragione lui — HTML e' meglio.
// La Controspinta
Sezione 2. mdream, Cloudflare, e perche' Markdown non e' affatto mortoIl giorno prima, lunedi' 5 maggio 2026, esce mdream di Harlan Zw, JavaScript library da 6 KB gzipped che converte HTML in Markdown. Filosofia esplicita nella documentazione: every token counts. Output con il 50% di token in meno rispetto a Turndown, 3× piu' veloce, 1.8 MB di HTML processato in 60 ms. La promessa: pipeline RAG piu' efficienti, retrieval piu' denso, context window meno congestionato.
Il 5 marzo Cloudflare aveva lanciato Markdown for Agents. Funzionamento: i crawler AI mandano un header Accept: text/markdown, gli edge server di Cloudflare convertono al volo, restituiscono Markdown con un header aggiuntivo x-markdown-tokens. Esempio citato nell'annuncio: un blog post da 16.180 token in HTML diventa 3.150 token in Markdown. Risparmio dell'80%.
John Mueller di Google ha definito Markdown for Agents "a stupid idea", perche' rimuove contesto e struttura. Cloudflare l'ha lasciato passare. Questa e' la posizione mainstream del mercato adesso: per fare ingestion di contenuti web verso un LLM, il Markdown e' una vittoria di defaults a tre cifre percentuali in costo.
Microsoft il 17 aprile ha rilasciato MarkItDown, converter universale per file Office, PDF, immagini, audio → Markdown. Stessa filosofia: per dare contesto agli LLM, Markdown vince.
L'argomento profondo della controspinta non e' solo il conteggio token. E' che gli LLM sono pretrained su miliardi di token di prosa e codice, contro una frazione di HTML soup. Quando produci HTML come input per il modello paghi due volte: piu' token e meno allineamento con la distribuzione di training. La densita' semantica del Markdown si paga in espressivita', si guadagna in comprensione.
// Il Trucco
Sezione 3. Stanno parlando di cose diverseShihipar parla di output: cosa l'agente produce per te.
Cloudflare e mdream parlano di input: cosa tu fai vedere all'agente.
Sono fasi diverse del workflow, con vincoli opposti. Shihipar ha 1M token di context window, gli costa quasi nulla aggiungere CSS e SVG, in cambio gli torna un PDF leggibile. Cloudflare deve farti pagare 16.180 token invece di 3.150 per ogni pagina che dai in pasto a un crawler che fa retrieval batch su milioni di URL. La vittoria del primo non e' la sconfitta del secondo, e viceversa.
Il dibattito di questa settimana sembra "Markdown contro HTML, chi vince per gli LLM". E' una semplificazione che salta in aria appena guardi quale fase del workflow stanno ottimizzando. Tre fasi, tre vincitori diversi.
Il punto del pezzo e' la terza casella. La fase 1 e' coperta dal mainstream Markdown. La fase 2 e' coperta dalla nicchia HTML che cresce questa settimana. La fase 3 nessuno la sta misurando, ed e' quella che fra dodici mesi vi mordera'.
// Timeline Della Settimana
Sezione 4. Cinque pezzi in due mesi, come incastrarliAccept: text/markdown, conversione edge-side, esempio 16.180 → 3.150 token. John Mueller di Google la chiama "stupid idea". Polo INPUT.Quattro voci sul polo input, una sul polo output, zero sul polo editing. Il debate ha un punto cieco. Se non ti accorgi che le tre fasi sono distinte, leggi il post di Shihipar e pensi "ma allora Cloudflare ha sbagliato?". Non ha sbagliato. Stanno parlando di cose diverse.
// La Domanda Mancante
Sezione 5. Cosa succede quando il documento dura mesiTutta la letteratura della polemica corrente assume un workflow single-shot. L'utente scrive un prompt, l'LLM legge contesto e produce output, fine. Per quel mestiere Markdown vince in input, HTML inizia a vincere in output ricco, e la decisione e' chiara abbastanza.
Esiste un secondo mestiere che non e' nei benchmark, e non e' ancora un commodity production pattern, ma sta arrivando: piu' agenti diversi modificano lo stesso documento nel tempo. Knowledge base interne aggiornate da agenti per mesi, runbook operativi mantenuti da SRE bot, spec di RFC redatte da swarm di agenti, checklist d'incidente con audit trail. Non e' fantascienza, e' lo scenario operativo di chi sta deployando agenti in produzione adesso.
Cambia tutto. Se piu' agenti devono editare lo stesso documento, ti serve:
| Proprieta' | Markdown | HTML | JSON |
|---|---|---|---|
| ID stabile per blocco editabile | No (heading anchors non sono universali) | Si' (id="...") |
Si' (chiave dell'oggetto) |
| Forma canonica (stesso AST → stessi byte) | No (CommonMark vs GFM vs MDX) | No (whitespace, ordering, attribute quoting) | Sostanzialmente si' (con sort) |
| Parser deterministico (stesso input → stesso AST) | No (ambiguita' su nesting) | Si' (DOM standard) | Si' |
| Edit operations come dati (replay, merge, audit) | Diff testuali fragili | DOM diff (verboso, difficile) | JSON Patch (RFC 6902) |
Leggibile in cat |
Si' | No (chiusure, attributi, soup) | Mediocre |
| Diff in PR utile per code review | Mediocre | No (Shihipar lo ammette esplicitamente) | No |
Markdown e' un disastro su quasi tutte le righe tranne due. HTML e JSON vanno bene strutturalmente ma costano caro in token e leggibilita'. Il quadrante mancante e' "abbastanza compatto da non bruciare context window, abbastanza strutturato da permettere edit chirurgici, abbastanza umano da leggerlo in cat". Nessuno dei tre formati popolari sta in quel quadrante.
La domanda diventa: qual e' il formato giusto per un documento di lunga vita editato da piu' agenti?
Onestamente, prima di andare oltre. Tutto quello che hai letto fin qui e' la polemica reale. Quello che segue e' un esperimento per la casella vuota. Se ti serve la risposta a "quale formato uso oggi nel 95% dei casi", la risposta e' Markdown per input, HTML se vuoi un artifact ricco da condividere, e basta. Se sei in produzione e devi scegliere adesso, smetti di leggere e scegli uno dei due. La sezione 6 in poi parla di un caso che probabilmente non hai ancora.
// Tre Regole, Un Sigillo
Sezione 6. AGD, un prototipo per la casella vuotaPer la mia testa, la risposta alla casella vuota e' un formato che eredita il line-oriented di Markdown e ci aggiunge tre cose: ID di blocco stabili, sintassi LL(1) deterministica, operazioni di edit come dati JSON. Il prototipo si chiama AGD (Agent Document) ed e' su github.com/Pinperepette/agd. Rust, MIT, v0.1.0.
Ogni blocco AGD inizia con @<tag> a colonna 0. E' l'intera storia sintattica.
Tre regole, niente di piu':
@ apre sempre un blocco. Markdown ha #, *, >, -, spazi indentati, ognuno con regole diverse. AGD ne ha uno solo. Il lexer e' una macchina a 7 stati line-oriented in 150 righe di Rust.[#nome] alla fine di qualunque blocco lo rende indirizzabile. Chiunque puo' editarlo per ID, non per offset di byte. E' la feature load-bearing del formato. Il resto sono accessori.@ chiudono il blocco precedente. L'equivalente di <h1>...</h1> e' solo @h1 .... Niente nesting profondo, niente DOM tree, niente XML soup.La grammatica completa e' frozen in grammar/agd.ebnf — 50 righe di EBNF. Nessun backtracking, nessun lookahead oltre la riga corrente. Il parser e' single-pass, LL(1). Il senso di tutto questo e' che lo stesso file dato a due implementazioni diverse di AGD deve produrre lo stesso AST. E' la proprieta' che HTML ha (DOM standard) e Markdown non ha (CommonMark vs GFM vs MDX disagree su edge cases).
// Quello Che Promettevo, Quello Che E' Uscito
Sezione 7. La onesta' fa male e va fattaQuando ho buttato giu' il design, prima di scrivere una riga di Rust, avevo fatto stime token a vista. Erano sbagliate. Lo dico subito perche' il pezzo non funziona se mento.
| Promessa iniziale | Misurato (corpora 100 → 100k blocchi) | Verdetto |
|---|---|---|
| −5 a −10% vs Markdown | +18 a +22% (AGD costa di piu') | Sbagliato di segno |
| −30 a −40% vs HTML | −16 a −19% | Direzione giusta, ridotto a meta' |
| −50% vs JSON | −56 a −59% | Onesto, leggermente meglio del previsto |
| "Parser ~200 righe" | ~1000 righe Rust | Equivalente a 300 righe Python (overhead di linguaggio) |
L'errore peggiore sta sulla riga uno. Avevo in testa che @h1 e # fossero entrambi 2 token. Falso: @h1 tokenizza come 3 token con BPE cl100k_base, mentre # e' 1 token. Su 1000 blocchi sono gia' 2000 token di prefisso. Misurato su corpora di 100k blocchi, AGD costa il 20% in piu' di Markdown a tutte le scale, con una banda 18-22% molto stretta.
Vince invece contro HTML del 16-19%, contro JSON del 56-59%. Niente di sensazionale rispetto a XML. Il +20% rispetto a Markdown e' il prezzo onesto degli ID espliciti e dei prefissi @<tag>: lo paghi sempre, non c'e' un trucchetto per recuperarlo a livello sintattico.
// La Scoperta Vera
Sezione 8. L'index batte il find lineare di 2625xIl valore di AGD e' indicizzare i blocchi per ID. Il primo design ingenuo era Document::find(&id) con linear scan: O(n). Per 100 blocchi va bene. Per 100k inizia a fare male. Quanto male? Misurato:
| Blocchi | Linear find | Indexed find | Speedup |
|---|---|---|---|
| 100 | 80 ns | 25 ns | 3× |
| 1.000 | 1.6 µs | 26 ns | 62× |
| 10.000 | 21 µs | 36 ns | 583× |
| 100.000 | 283 µs | 108 ns | 2625× |
Senza l'index, ogni edit operation costa 283 µs solo per trovare il blocco target su un documento da 100k entries. Con l'index, 108 ns. Differenza di tre ordini di grandezza.
La conseguenza architetturale e' importante e l'avevo sottovalutata: chiunque usi AGD seriamente deve costruirsi un indice. Non e' un'ottimizzazione, e' la differenza fra "usabile" e "inutilizzabile". Il codice client ideale e' questo:
Il pattern "parse-once, edit-many" gira a 500k op/sec via library API. Lo stesso flow via CLI subprocess (un agd edit per operazione) gira a 76 op/sec. Differenza: 6500×. Implicazione: AGD ha senso solo se mantieni il documento parseato in memoria in un servizio, non se invochi la CLI in loop.
Conseguenza per l'architettura. Qualunque adozione seria di AGD deve avere la forma di un demone che mantiene i documenti in memoria, espone le edit operations via socket o RPC, ricostruisce l'index dopo ogni write batch. Senza questo strato, AGD non vale il +20% di token che paga rispetto a Markdown. Con questo strato, vale per il 5% dei casi dove l'editing multi-agente conta davvero.
// Tre Agenti, Stesso Documento, Tre Formati
Sezione 9. Lab multi-agente con Redis StreamsLa teoria della casella vuota dice "AGD vince per editing multi-agente". Da soli quei numeri non valgono niente. Ho costruito il lab che dimostra il punto.
Stesso scenario operativo — un piano di risposta a un incidente di security — reso in tre formati: Markdown, HTML, AGD. Tre processi agent indipendenti (analyst, responder, auditor) emettono 12 edit operation a Redis Streams in parallelo. Tre demoni, uno per formato, consumano FIFO con XREADGROUP, applicano l'op alla loro versione del documento (chiave Redis Hash), fanno XACK. Lo stream e' l'audit trail nativo; il replay da XRANGE 0 + ricostruisce lo stato.
Il workload contiene una operazione cattiva alla riga 4: l'analyst rinomina la sezione "Findings" in "Initial findings". Cinque secondi dopo, l'auditor aggiunge un finding tardivo targettando il logical id findings. Il punto: il rename ha cambiato il nome ma non l'id. Markdown non ha un meccanismo di stable id, HTML e AGD si'.
Risultato di una run reale (12 ops emesse in ~600 ms wallclock, demoni concorrenti):
| metric (mediana di 5 run) | markdown | html | agd |
|---|---|---|---|
| ops applied | 11/12 | 12/12 | 12/12 |
| ops not_found | 1 | 0 | 0 |
| stream length (audit trail) | 12 | 12 | 12 |
| replay reconstructs live state | yes | yes | yes |
| final size (bytes) | 527 | 895 | 697 |
| avg apply latency (per op) | 118 µs | 1.21 ms | 2.3 µs |
| throughput (op/sec) | ~8.500 | ~830 | ~430.000 |
Tre osservazioni che vale la pena fare prima di andare oltre.
Markdown perde una op. Il regex per ## Findings non trova piu' la sezione dopo il rename. L'op dell'auditor finisce nello stream ma il demone la registra come target_not_found. Lo stream e' onesto, lo stato finale e' incompleto. HTML e AGD applicano tutte e 12 — gli id resistono alla rinominazione del titolo.
Replay funziona ovunque. Lo stream e' authoritative: rieseguendo le ops dall'offset 0 su uno stato iniziale fresco ottengo byte-per-byte lo stesso stato live. Vale per tutti e tre i formati. Vuol dire che l'audit log Redis e' l'unica cosa che devi conservare: lo stato live e' una funzione del log, non un database separato. Per uno scenario di compliance — "fammi vedere come era il documento alle 14:31:07 di tre settimane fa" — basta XREAD fino a quel timestamp.
Sulla latenza vale la pena soffermarsi. AGD applica un'op in 2,3 microsecondi mediana — 500× piu' veloce di HTML (BeautifulSoup), 50× piu' veloce di Markdown (regex puro). Non e' magia: il demone agdd e' scritto in Rust, parsea il documento una sola volta all'avvio, costruisce un DocumentIndex in memoria, applica ogni op come mutazione strutturale tipata via la library API. Niente subprocess, niente fork+exec, niente reparse tra ops. Il prezzo e' aver scritto il demone in Rust invece che Python: ~150 righe di codice in src/bin/agdd.rs nel repo agd.
HTML e MD nel lab girano in Python con BeautifulSoup e regex. Una versione Rust di entrambi (lxml-rs, regex crate) probabilmente farebbe un po' meglio, ma la differenza strutturale resta: HTML deve riserializzare l'intero DOM ad ogni mutazione, AGD muta in-place strutture tipate.
Onestamente: il lab confronta tre demoni con livelli di engineering diversi. AGD demone Rust nativo, HTML demone Python con BS4, MD demone Python con regex. Una versione Rust dei demoni HTML e MD ridurrebbe il gap — non lo annullerebbe (HTML deve comunque riserializzare il DOM, MD deve comunque cercare per nome senza ID stabili) ma il rapporto di 500× e' artefatto del bridge Python tanto quanto del formato. La cifra che resta solida e' che AGD ha un demone Rust di 150 righe, ben definito, che fa quello che deve in microsecondi. Per il caso d'uso multi-agente e' una proprieta' rilevante: scrivere il demone e' lavoro fatto una volta, le ops sono di 2 µs per sempre.
Numeri di base sul motore AGD, dal repo agd (riproducibili con cargo run --release --bin agd-bench): parse 60 MB/s, serialize 830 MB/s, find by ID a 100k blocchi via DocumentIndex in 108 ns. Vedi benches/BENCHMARKS.md.
Onestamente, cosa NON dimostra questo lab. Non dimostra il lost-update problem: gli agenti emettono ops semantiche (kind/target/payload), non blob, e il demone serializza via stream FIFO — quindi ogni op atterra in modo coerente. Il lab dimostra che se gli agenti seguono questa disciplina, AGD non perde dati. Se invece gli agenti emettono blob (es. "scrivi tutto il file con questo contenuto"), il problema dei conflitti torna in vita per qualunque formato. AGD non lo previene a livello sintattico, lo rende solo piu' facile da disciplinare a livello di Operation API.
Il codice del lab gira in cinque secondi su qualunque macchina con docker + python3 + cargo installati: scripts/ogni-blocco-ha-un-nome/v2_redis/run_lab.sh. Output completo: output/report.md, output/daemon-{md,html,agd}.log con audit trail tab-separated, output/final.{md,html,agd} con i tre documenti finali. Tutto riproducibile, tutto sul repo del blog.
Bug trovato dal lab. Prima versione del workload aveva set_attr su #root (un blocco @h1). Il parser AGD v0.1 ignora gli attributi sui blocchi inline-bearing (h1-h4, p): legge tutto come testo. Quindi set_attr severity=high su #root produceva @h1 severity=high SSH brute force [#root] dove "severity=high" finisce dentro il titolo, non come attributo. La canonical form era idempotente (riparsa identico) ma il dato semantico era sbagliato. Aggirato spostando set_attr su #meta nel workload. La fix vera del parser e' tracked per AGD v0.2 — il lab ha trovato un problema reale che lo unit test del repo agd non aveva coperto.
// Riprodurre I Benchmark
Sezione 10. Il codice e' su GitHub, i numeri sono replicabiliTutto quello che hai letto e' verificabile con cinque comandi. Niente nascosto, niente hand-waved. Repository: github.com/Pinperepette/agd.
Il punto 4 e' quello che ti convince o ti smonta. Genera corpora sintetici deterministici (stesso seed, stesso byte output su qualunque macchina), parsea, serializza, edita, conta token, confronta con pulldown-cmark. Output finale: benches/BENCHMARKS.md, lo stesso file da cui ho preso tutti i numeri di questo post.
Tre scoperte uniche del lab che vale la pena fissare:
// Vale La Pena Spendere Piu' Token?
Sezione 11. La risposta secca, in due numeriIl "+20% di token" l'abbiamo gia' detto sei volte. Misurato di nuovo, su corpora controllati di 100, 1.000 e 10.000 blocchi, e' confermato: AGD costa il +18-22% in piu' di Markdown quando carichi l'intero documento. Banda stretta, scala ortogonale, niente sorprese.
Quello che il post ha taciuto fino a qui e' che il +20% e' solo meta' della storia. L'altra meta' e' che AGD abilita una forma di richiesta che Markdown non puo' fare: caricare il Table of Contents (lista degli ID), scegliere il blocco, caricare solo quello. Un agente in stile Claude Code che cerca informazioni in un documento di 10.000 blocchi non deve leggerlo tutto. Pesca l'ID giusto e ne legge uno.
Misurato:
| blocchi | AGD selective (TOC + 1 blocco) | Markdown whole-doc | speedup |
|---|---|---|---|
| 100 | 231 token | 2.074 token | 9,0× |
| 1.000 | 1.720 token | 20.502 token | 11,9× |
| 10.000 | 14.902 token | 217.170 token | 14,6× |
Lo speedup cresce con la scala. A 10.000 blocchi, una richiesta mirata su AGD costa 1/15 di un caricamento completo Markdown. A 100.000 blocchi diventa ~1/20. Il crossover — il punto in cui AGD ti ripaga il +20% del primo caricamento — e' dopo la seconda lookup mirata sullo stesso documento. In quasi tutti i workflow agentici reali quel breakeven arriva nei primi minuti.
I numeri sono nel benchmark benches/RETRIEVAL.md del repo agd, riproducibili con cargo run --release --bench retrieval.
Le due cifre stanno insieme. Il +20% e' il costo che paghi quando carichi tutto, il fattore 14× e' lo sconto che ottieni quando leggi solo quello che ti serve. Quale dei due conta di piu' dipende dal pattern di accesso del tuo agente, non dal formato in se'.
Conta i casi uno per uno con questa lente.
#auth-flow) in un documento di 10k+ blocchi. AGD: TOC + 1 blocco = 14k token. Markdown: 217k token interi. 14× meno token, scala con la dimensione.Conta i casi: 3 dove altri formati vincono, 1 pareggio, 4 dove AGD vince. La proporzione e' cambiata rispetto a quello che pensavo all'inizio — il selective retrieval e' una vittoria che il post non aveva contato. Pragmatica: se il tuo agente carica sempre tutto, usa Markdown. Se fa lookup mirati, AGD si ripaga dopo due query. Il salto di costo non e' lineare, e' di natura: passi dal regime "leggi tutto, paga proporzionale" al regime "leggi solo l'indice, paga la lista".
Nota di realta': se vuoi il 90% del valore di AGD senza buttarti su un formato nuovo, prova Markdown + kramdown anchors:
Hai gli ID, resti dentro l'ecosistema Markdown, GitHub li renderizza, Pandoc li capisce. Perdi la forma canonica rigorosa e il parser LL(1) puro, ma probabilmente non li userai mai. AGD ha senso quando perdere quei due e' un costo reale, non teorico — e oggi quei costi pochi li sentono.
// Quello Che Mi Resta In Mano
Sezione 12. Cosa e' uscito dopo una settimana di numeriLa polemica MD vs HTML di questa settimana e' viva e fondata, ma confonde tre fasi diverse del workflow degli agenti. C'e' la fase di ingestion (Markdown vince, e Cloudflare la serve nativa), la fase di output ricco per umani (HTML vince, e Anthropic la spinge), e una terza fase — l'editing collaborativo di documenti che durano nel tempo — per cui adesso non c'e' un formato dedicato. AGD e' un esperimento che prova a riempire quel buco.
Funziona, nei limiti che si pone. 89 test su 10 suite, proptest robusto, un lab Redis multi-agente che gira in cinque secondi, benchmark riproducibili sul repo. Costa il 20% di token in piu' di Markdown se carichi tutto il documento e ne risparmia un fattore 14 se cerchi un blocco specifico. Pulldown-cmark resta 2-3 volte piu' veloce nel parsing su file grandi, ma quel campionato AGD non lo sta giocando: scrivendo il demone in Rust e tenendo il documento in memoria la latenza per op va a 2,3 microsecondi, e a quel punto la velocita' assoluta del parser conta poco perche' parsi una volta sola.
Quello che mi porto a casa pero' non sono i numeri. E' una mappa del design space che a inizio settimana non avevo. Il +20% di token cambia segno appena l'agente smette di leggere tutto e inizia a chiedere blocchi specifici, e questo non lo si capisce finche' non si misura. Il determinismo del parser e' una proprieta' che non sapevo di volere finche' non ho visto un regex Markdown rompersi su un rename in produzione. Capire dove conviene combattere e dove no, prima di adottare qualcosa, e' tutto il valore di questa settimana.
Se ti capita davvero il problema dell'editing multi-agente, AGD e' un punto di partenza riproducibile da cui rubare idee, fare fork, oppure semplicemente buttare via tutto e tornare a Markdown con kramdown anchors sapendo cosa stai perdendo. Il valore del prototipo per me e' stato quello: rendere visibile un trade-off che senza misurarlo restava una sensazione.
Codice del lab: tutto sta in scripts/ogni-blocco-ha-un-nome. Due versioni accanto: lab.py sequenziale single-process (richiede solo Python 3.9+, BeautifulSoup, lxml, agd CLI) e v2_redis/run_lab.sh con tre processi concorrenti, Redis Streams, demone agdd nativo (richiede in piu' Docker per il container Redis 8). I numeri citati nell'articolo vengono dalla v2.
Codice del prototipo AGD: il formato e il toolchain sono su github.com/Pinperepette/agd (Rust, MIT). Benchmark in benches/BENCHMARKS.md e benches/RETRIEVAL.md, riproducibili con cargo run --release --bin agd-bench e cargo run --release --bench retrieval. La spec e' dogfooded in spec/AGD-SPEC.agd — scritta in AGD, non in Markdown.
Riferimenti.
⊕ simonwillison.net/2026/May/8/unreasonable-effectiveness-of-html: Simon Willison riprende e amplifica il post di Thariq Shihipar (Claude Code team, Anthropic) — 8 maggio 2026. Polo OUTPUT.
⊕ blog.brightcoding.dev/2026/05/05/mdream: Harlan Zw, mdream — converter HTML→MD ottimizzato per LLM, 50% fewer tokens, 3× faster di Turndown. 5 maggio 2026. Polo INPUT.
⊕ infoq.com/news/2026/03/cloudflare-crawler: Cloudflare lancia Markdown for Agents (header Accept: text/markdown) — 5 marzo 2026. Polo INPUT.
⊕ blog.brightcoding.dev/2026/04/17/markitdown: Microsoft MarkItDown, converter universale → MD — 17 aprile 2026. Polo INPUT.
⊕ codersera.com/blog/llms-txt-complete-guide-2026: stato di llms.txt nel 2026 — 10.13% di adoption, nessun effetto SEO misurabile, ma "every serious devtool ships one anyway".
⊕ github.com/Pinperepette/agd: il prototipo AGD, Rust, MIT.