Harness engineering: l'ambiente che rende affidabili gli agenti

Il modello decide cosa scrivere; l'harness governa quando, dove e come. La harness engineering è la disciplina di costruire l'ambiente attorno al modello (istruzioni, stato, verifica, ambito, ciclo di vita) perché produca risultati affidabili. Cosa insegnano l'esperimento di OpenAI con Codex (un milione di righe, zero scritte a mano), quello di Anthropic (9 dollari contro 200) e il corso open source sul tema.

AICybersecurityR&DHarness EngineeringAI AgentsCodexCoding AgentsContext EngineeringVerificationAI GovernanceOpenAIAnthropic
Sommario
  1. Cos’è la harness engineering
  2. Le cinque parti di un harness
  3. Il caso OpenAI: un prodotto senza una riga scritta a mano
  4. L’harness cambia con il modello
  5. Cosa ne pensiamo
  6. Fonti
Diagramma dell'harness: al centro il modello decide cosa scrivere, attorno l'harness governa quando, dove e come attraverso cinque sottosistemi (istruzioni, stato, verifica, ambito, ciclo di vita); l'agente si ferma solo quando la verifica passa
L’harness: il modello decide cosa, l’ambiente attorno governa quando, dove e come. Cinque sottosistemi, una sola regola d’uscita: la verifica deve passare.

Cos’è la harness engineering

C’è una verità che quasi tutti imparano nel modo più duro: il modello più forte del mondo fallisce sui compiti reali se non gli si costruisce attorno un ambiente adeguato. Lo hai probabilmente visto: dai un compito a Claude o a GPT nel tuo repository, parte bene, poi salta un passaggio, rompe un test, dichiara “fatto” quando non funziona nulla, e passi più tempo a rimediare che se l’avessi fatto a mano. Non è un problema del modello. È un problema di harness.

La harness engineering è la disciplina che affronta esattamente questo: costruire l’ambiente completo attorno al modello perché produca risultati affidabili. Non scrivere prompt migliori, ma progettare il sistema in cui il modello opera. In una riga: il modello decide cosa scrivere, l’harness governa quando, dove e come, e l’agente si ferma solo quando la verifica passa. Negli ultimi mesi il termine si è consolidato con contributi di OpenAI, di Anthropic e con un corso open source (licenza MIT) interamente dedicato al tema.

La prova più netta l’ha portata Anthropic con un esperimento controllato: stesso modello (Claude Opus 4.5), stesso prompt (“crea un editor di giochi retro 2D”). Da solo, senza harness, l’agente ha speso circa 9 dollari in 20 minuti e prodotto qualcosa che non funzionava. Con un harness completo (un’architettura a tre agenti: planner, generator, evaluator), ha speso circa 200 dollari in 6 ore e costruito un gioco davvero giocabile, con sedici funzionalità distribuite su dieci sprint. Il modello non è cambiato. L’harness sì.

Screenshot dell'editor di sprite del gioco costruito dall'harness completo di Anthropic: una griglia 16x16 con uno sprite pixel-art, la palette dei colori, l'anteprima a 1x, 2x e 4x e un pulsante AI Generate
L’app prodotta dall’harness completo nell’esperimento (sedici funzionalità su dieci sprint): qui l’editor di sprite. La versione senza harness, stesso modello e stesso prompt, non funzionava. Figura: Anthropic, “Harness design for long-running application development”.

Le cinque parti di un harness

Un harness ben fatto è composto da cinque sottosistemi, ciascuno con un compito preciso (vedi il diagramma qui sopra):

  • Istruzioni: dicono all’agente cosa fare, in che ordine, cosa leggere prima di iniziare. Non un unico file enorme, ma una struttura a disclosure progressiva che l’agente naviga su richiesta.
  • Stato: traccia cosa è stato fatto, cosa è in corso, cosa manca. Persistito su disco (un file di progresso, la storia di git) così che la sessione successiva riprenda esattamente dove la precedente si è fermata.
  • Verifica: solo una suite di test che passa conta come prova. L’agente non può dichiarare vittoria senza evidenza eseguibile.
  • Ambito: vincola l’agente a una funzionalità alla volta. Niente overreach, niente tre cose lasciate a metà, niente riscrivere la lista delle feature per nascondere il lavoro incompleto.
  • Ciclo di vita: inizializza all’avvio (init.sh), pulisce alla fine, lascia un percorso di ripartenza pulito per la sessione successiva.

Il bello è che non serve un framework: per iniziare bastano quattro file nel repository (AGENTS.md, init.sh, feature_list.json, un file di progresso). Poche righe, e le sessioni dell’agente sono già molto più stabili che a colpi di prompt.

Il caso OpenAI: un prodotto senza una riga scritta a mano

L’esperimento più radicale lo racconta OpenAI. Per cinque mesi un piccolo team ha costruito e messo in produzione un prodotto software interno con zero righe di codice scritte a mano: ogni riga (logica applicativa, test, configurazione CI, documentazione, osservabilità, tooling) è stata scritta da Codex. Risultato: circa un milione di righe di codice, 1.500 pull request con tre ingegneri (poi sette), una media di 3,5 PR per ingegnere al giorno, e un prodotto usato da centinaia di utenti interni. Stimano di averlo costruito in circa un decimo del tempo che sarebbe servito a mano.

Il punto interessante non è la quantità, ma il cambio di mestiere. Quando qualcosa falliva, la soluzione non era mai “insisti col prompt”, ma: quale capacità manca all’agente, e come la rendo leggibile e verificabile per lui? Il lavoro dell’ingegnere si sposta dallo scrivere codice al progettare ambienti, specificare l’intento e costruire feedback loop. Alcune lezioni concrete:

  • Il contesto è una mappa, non un manuale da mille pagine. Il singolo, gigantesco AGENTS.md fallisce: soffoca il compito, invecchia in fretta, diventa un cimitero di regole stantie. Meglio un AGENTS.md breve (un centinaio di righe) come indice, che punta a una cartella docs/ trattata come sistema di record, con progressive disclosure. E linter, CI e un “agente giardiniere” che apre PR per rimuovere la documentazione obsoleta.
  • Ciò che l’agente non vede in contesto, per lui non esiste. La conoscenza che vive in Google Docs, nei thread di chat o nelle teste delle persone è invisibile all’agente esattamente come lo sarebbe per un nuovo assunto. Va spinta nel repository, versionata e leggibile.
  • Rendere il mondo ispezionabile dall’agente. Hanno reso l’app avviabile per singolo git worktree, cablato il Chrome DevTools Protocol nel runtime (screenshot, navigazione del DOM), esposto log e metriche interrogabili (LogQL, PromQL). Così prompt come “lo startup del servizio deve stare sotto gli 800 ms” diventano trattabili, e la review passa da umana ad agente-su-agente. Singole run arrivano a lavorare sei ore di fila.
  • Imporre invarianti, non implementazioni. Un’architettura rigida a layer (con direzioni di dipendenza validate meccanicamente da linter custom, generati da Codex stesso) è ciò che permette velocità senza deriva. È il tipo di disciplina che di solito rimandi a quando hai centinaia di ingegneri: con gli agenti diventa un prerequisito iniziale.
Diagramma OpenAI di un'architettura a layer di dominio: le dipendenze possono andare solo in avanti attraverso Types, Config, Repo, Service, Runtime e UI; le funzionalità trasversali entrano da un'unica interfaccia esplicita, Providers; tutto il resto è vietato e imposto meccanicamente
L’architettura a layer imposta meccanicamente (Types, Config, Repo, Service, Runtime, UI, con Providers come unico ingresso trasversale): i vincoli sono ciò che permette velocità senza deriva. Figura: OpenAI, “Harness engineering”.

L’harness cambia con il modello

Un’ultima lezione, la più sottile, arriva ancora da Anthropic. Ogni componente di un harness codifica un’assunzione su ciò che il modello non sa fare da solo, e quelle assunzioni invecchiano man mano che i modelli migliorano. Con Sonnet 4.5 servivano i reset di contesto per gestire la “context anxiety”; Opus 4.5 li ha resi superflui; con Opus 4.6 l’harness si è semplificato ancora (via gli sprint, l’evaluator ridotto a un solo passaggio finale). L’evaluator non è un interruttore fisso: il suo valore dipende da dove sta il compito rispetto a ciò che il modello fa già bene da solo.

La morale operativa: a ogni nuovo modello, riesamina l’harness, togli i pezzi che non reggono più il peso e aggiungi quelli che ora sono possibili. E, in generale, “trova la soluzione più semplice possibile, aumenta la complessità solo quando serve”. La verifica, però, resta il cuore: l’evaluator di Anthropic naviga l’app con Playwright come farebbe un utente, e prima di ogni sprint concorda con il generator un “contratto” su cosa significhi done. Solo un test che passa vale come “fatto”.

Cosa ne pensiamo

Se avete letto la nostra serie sull’agentic loop, questo suona familiare: è la stessa tesi, resa disciplina. Il modello decide, ma affidabilità, sicurezza e governance vivono nel codice attorno, cioè nell’harness. La harness engineering ne è la formalizzazione, e ribalta il ruolo dell’ingegnere: meno atto di scrivere codice, più progettazione di ambienti, invarianti e feedback loop.

Quattro punti ci parlano direttamente, dal nostro lavoro su AI, cybersecurity e software:

  • Verifica prima di “fatto”. Solo prove eseguibili (test, end-to-end) contano. È il cuore del software affidabile, con o senza AI, ed è la stessa logica dell’osservabilità di cui abbiamo scritto per gli agenti in contesto, pattern e multi-agente.
  • Il contesto come sistema di record versionato. Ciò che non è ispezionabile, per l’agente non esiste. Lo stesso vale per governance e audit: quello che conta va reso leggibile e verificabile a runtime, il senso di Admina e, sul versante interpretabilità, di strumenti come il J-lens di Anthropic.
  • Invarianti applicati meccanicamente. Linter, CI, policy: la qualità e la sicurezza non si chiedono al modello, si impongono nell’ambiente. È il principio “la sicurezza vive nell’harness, non nel prompt”.
  • Sovranità. Un harness è codice tuo: versionato, ispezionabile, tuo. È la parte dello stack che puoi possedere anche quando il modello è di terzi, e si sposa con l’idea di possedere il pavimento operativo con modelli a pesi aperti on-premise (GLM 5.2, DwarfStar 4) e con il paradigma Open Intelligence, Secure Governance.

Una nota di realismo: è ancora artigianato costoso (nell’esperimento retro-game l’harness costava oltre venti volte tanto), il confine di ciò che vale la pena mettere nell’ambiente si sposta a ogni release, e “tecnologia noiosa” più architetture rigide non sono gratis. Ma la direzione è netta: il valore ingegneristico si sposta dallo scrivere codice al progettare l’ambiente in cui l’AI lo scrive, in modo affidabile e verificabile. Chi costruisce software con l’AI, prima o poi, costruisce harness.

Fonti

Vuoi supporto?Sei sotto attacco?Stato dei servizi
Vuoi supporto?Sei sotto attacco?Stato dei servizi