YouMind
Accedi

Harness Engineering: Come creare agenti AI che funzionano davvero

@0xjmori
INGLESE27 set 2026
328K
196
24
17
638

TL;DR

Questo articolo introduce la 'Harness Engineering', sostenendo che l'affidabilità degli agenti AI dipende dal sistema circostante (contratti, strumenti, stato, verifica) piuttosto che solo dal modello o dal prompt. Fornisce una guida completa per costruire infrastrutture robuste per agenti.

La maggior parte delle persone cerca di sistemare gli agenti AI al livello sbagliato.

Quando un agente fallisce, riscrivono il prompt. Quando fallisce di nuovo, aggiungono altre istruzioni, cambiano modello, aumentano la finestra di contesto o collegano un altro strumento.

Poi gli stessi problemi si ripresentano.

L'agente dimentica una decisione importante. Usa lo strumento sbagliato. Perde il filo di ciò che è successo tre passaggi prima. Dichiara che il task è completato senza verificare il risultato. Riprova la stessa azione fallita finché non esaurisce il budget.

Il problema non è sempre il modello.

Il problema è l'ambiente che lo circonda.

Quell'ambiente è l'harness.

L'Harness Engineering è la pratica di costruire il sistema attorno a un modello, decidendo cosa può vedere, cosa può fare, cosa ricorda, cosa conta come successo e cosa succede quando qualcosa va storto.

Un prompt migliore può migliorare una singola risposta.

Un harness migliore migliora ogni esecuzione.

Segui il mio Substack per altre analisi pratiche su agenti AI, automazione e sistemi in produzione:

substack.com/@lunarresearcher

1. Il modello non è l'agente

Un modello può ragionare, generare, confrontare e scegliere.

Questo non lo rende un agente affidabile.

Un vero agente deve anche trovare il contesto giusto, usare gli strumenti, preservare lo stato, rispettare i permessi, verificare il proprio lavoro e riprendersi quando l'ambiente si comporta diversamente da quanto previsto.

Il modello è solo il motore di ragionamento.

L'harness è tutto ciò che trasforma quel ragionamento in esecuzione reale.

text
1RICHIESTA UTENTE
2 |
3 v
4+-----------------------------+
5| HARNESS |
6| |
7| contratto contesto |
8| strumenti stato |
9| policy verifica |
10| tracce ripristino |
11+-----------------------------+
12 |
13 v
14 MODELLO
15 |
16 v
17AMBIENTE REALE

Metti lo stesso modello dentro una chat e risponderà alle domande.

Mori - inline image

Mettilo dentro un repository con accesso al terminale, test, strumenti browser, memoria del progetto, permessi controllati e un ciclo di revisione, e potrà completare del lavoro reale.

Il modello non è cambiato.

È cambiato l'harness.

2. Trasforma ogni richiesta in un contratto

Il linguaggio naturale è flessibile.

L'esecuzione autonoma non dovrebbe esserlo.

Una richiesta come:

Migliora il flusso di onboarding.

va benissimo se c'è un essere umano seduto accanto al modello.

È pessima come istruzione per la produzione.

Prima che l'agente agisca, trasforma la richiesta in un contratto di task ben delimitato.

Mori - inline image
yaml
1obiettivo: ridurre l'abbandono durante l'onboarding
2
3input:
4 - brief di prodotto
5 - dati analitici
6 - repository
7
8vincoli:
9 - mantenere l'autenticazione
10 - non modificare lo schema del database
11 - preservare il comportamento mobile attuale
12
13deliverable:
14 - pull request revisionabile
15
16completato_quando:
17 - i test passano
18 - l'evento analytics viene tracciato correttamente
19 - il flusso desktop supera la revisione
20 - il flusso mobile supera la revisione
21
22approvazione_richiesta:
23 - deploy in produzione

La parte fondamentale è completato_quando.

Senza di essa, l'agente potrebbe risolvere una versione leggermente più semplice del problema e dichiarare comunque con sicurezza che il task è completo.

Con questa clausola, il completamento diventa misurabile.

L'agente non dovrebbe chiedere:

Cosa devo fare adesso?

Dovrebbe chiedersi:

Quale azione avvicina l'ambiente attuale al risultato pattuito nel contratto?

Questo è un loop molto più solido.

3. Dai all'agente una mappa, non una finestra di contesto gigante

Una reazione comune agli errori degli agenti è dare al modello più contesto.

Più documentazione.

Più cronologia della conversazione.

Più file.

Più output dagli strumenti.

Alla fine l'agente riceve tutto e capisce meno.

Il contesto non è archiviazione.

È un budget di attenzione.

Mori - inline image

Invece di riversare l'intero progetto in ogni esecuzione, dai all'agente una piccola mappa che indichi dove si trovano le informazioni utili.

text
1MAPPA DEL PROGETTO
2
3regole di prodotto -> docs/product/
4architettura -> docs/architecture.md
5frontend -> apps/web/
6backend -> services/api/
7test -> tests/
8comandi -> docs/commands.md
9sicurezza -> docs/security.md

Poi espandi solo quando serve.

text
1TASK
2 |
3 v
4MAPPA DEL PROGETTO
5 |
6 v
7SISTEMA RILEVANTE
8 |
9 v
10FILE ESATTI
11 |
12 v
13ISTRUZIONI LOCALI

Il materiale originale lo definisce "progressive disclosure" (divulgazione progressiva): l'harness dovrebbe caricare più informazioni perché il task ne ha bisogno, non semplicemente perché quelle informazioni esistono.

L'obiettivo non è il massimo del contesto.

L'obiettivo è il massimo del segnale utile.

4. Metti un gateway tra il modello e i suoi strumenti

Un modello con venti strumenti non è automaticamente venti volte più capace.

Potrebbe semplicemente avere venti modi in più per fallire.

Ogni strumento dovrebbe avere un contratto.

text
1STRUMENTO: edit_file
2
3INPUT
4percorso
5patch
6
7PRECONDIZIONI
8il percorso esiste
9il percorso è all'interno del workspace
10
11SUCCESSO
12patch applicata
13diff restituito
14
15FALLIMENTO
16errore strutturato
17nessuna sovrascrittura parziale
18
19RISCHIO
20reversibile

A quel punto il percorso di esecuzione diventa:

text
1IL MODELLO PROPONE
2 |
3 v
4IL GATEWAY VALIDA
5 |
6 v
7LA POLICY AUTORIZZA
8 |
9 v
10LO STRUMENTO ESEGUE
11 |
12 v
13L'HARNESS REGISTRA IL RISULTATO

Il modello decide quale azione vuole compiere.

L'harness decide se quell'azione è valida, consentita e sicura.

Mori - inline image

Questa distinzione diventa critica quando gli strumenti possono inviare messaggi, modificare la produzione, spendere denaro o eliminare dati.

Un buon gateway per gli strumenti può anche aggiungere timeout, validare gli argomenti, limitare i percorsi dei file, normalizzare gli errori e rendere sicuri i tentativi ripetuti.

Strumenti ben progettati riducono il numero di cose che il modello deve indovinare.

5. Sposta la memoria fuori dalla conversazione

La conversazione non dovrebbe essere il sistema di riferimento.

Gli agenti che girano a lungo prima o poi raggiungono i limiti di contesto, vanno in crash, si riavviano o passano il lavoro a un'altra sessione.

Se ogni decisione importante esiste solo all'interno del transcript, il workflow è fragile.

Archivia lo stato persistente separatamente.

Mori - inline image
json
1{
2 "task_id": "feature_042",
3 "stato": "in_verifica",
4 "passaggio_attuale": "controllo_mobile",
5
6 "completati": [
7 "implementazione",
8 "unit_test",
9 "controllo_desktop"
10 ],
11
12 "decisioni": [
13 "riutilizzare l'endpoint di esportazione esistente",
14 "mantenere il formato data attuale"
15 ],
16
17 "artefatti": [
18 "export.csv",
19 "desktop-after.png"
20 ],
21
22 "rischi_aperti": [
23 "la toolbar mobile potrebbe andare fuori dallo schermo"
24 ],
25
26 "prossima_azione": "renderizzare la viewport mobile"
27}

Un sistema efficace divide la memoria in quattro categorie:

text
1FATTI
2conoscenze stabili
3
4DECISIONI
5cosa è stato scelto e perché
6
7STATO
8a che punto è l'esecuzione corrente
9
10LEZIONI
11fallimenti che dovrebbero influenzare le esecuzioni future

La sessione successiva dell'agente dovrebbe ereditare lo stato del lavoro, non un riassunto compresso della conversazione precedente.

6. Rendi le prove il requisito per il completamento

Un agente che dice "fatto" non è la prova che il lavoro sia finito.

Mori - inline image

È solo un altro output del modello.

L'harness ha bisogno di prove osservabili.

text
1DICHIARAZIONE PROVA
2
3"il bug è risolto" il test che falliva ora passa
4
5"la pagina funziona" il flusso nel browser è completato
6
7"i dati sono corretti" i valori corrispondono alla fonte
8
9"la migrazione è sicura" dry run + rollback superati
10
11"il task è completo" tutti i controlli di accettazione superati

Usa prima i controlli deterministici.

text
1sintassi
2 |
3 v
4tipi
5 |
6 v
7test mirati
8 |
9 v
10test di integrazione
11 |
12 v
13revisione visiva / semantica
14 |
15 v
16approvazione umana

Non chiedere a un altro modello di rispondere a qualcosa che un compilatore, un test, uno schema o una query al database possono dimostrare.

Usa i modelli per le valutazioni.

Usa i sistemi deterministici per i fatti.

Il modello crea l'artefatto.

L'ambiente genera le prove sull'artefatto.

L'harness decide se le prove sono sufficienti.

7. Separa chi costruisce da chi verifica

C'è un altro problema con l'auto-revisione.

L'agente che ha commesso l'errore spesso porta le stesse assunzioni anche nella fase di revisione.

Mori - inline image

Un'architettura più solida separa l'esecutore dal verificatore.

text
1BUILDER
2 |
3 v
4crea il candidato
5 |
6 v
7VERIFICATORE
8 |
9 +-- controlla il contratto
10 +-- cerca i casi mancanti
11 +-- testa le affermazioni non supportate
12 +-- cerca di far fallire il risultato
13 |
14 +------ SUPERATO ------> ACCETTA
15 |
16 +------ FALLITO ------> RESTITUISCI LE PROVE

Il verificatore non dovrebbe chiedersi:

Sembra fatto bene?

Dovrebbe chiedersi:

Cosa renderebbe questo risultato inaccettabile?

Questo trasforma la revisione da una conferma a un tentativo di confutazione.

Il materiale originale raccomanda esplicitamente di dare alla verifica criteri di rifiuto propri e un'indipendenza sufficiente per mettere in discussione le assunzioni che hanno prodotto il primo risultato.

8. Sposta i permessi fuori dal modello

Alcune regole non dovrebbero mai dipendere dal fatto che il modello se le ricordi.

text
1non pubblicare mai senza approvazione
2non esporre mai i secret
3non superare mai il limite di spesa
4non scrivere mai fuori dal workspace
5non dichiarare mai che i test sono passati se non sono stati eseguiti

Questi non sono suggerimenti per il prompt.

Mori - inline image

Sono policy.

Una semplice scala dei permessi:

text
1BASSO RISCHIO
2
3lettura
4ricerca
5ispezione
6
7-> automatico
8
9REVERSIBILE
10
11modifica del workspace
12esecuzione dei test
13creazione di bozze
14
15-> automatico + tracciamento
16
17EFFETTO ESTERNO
18
19invio
20deploy
21acquisto
22
23-> approvazione richiesta
24
25IRREVERSIBILE / SENSIBILE
26
27eliminazione dati
28rotazione credenziali
29pubblicazione globale
30
31-> blocco rigido o vietato

Più gravi sono le conseguenze, più forte deve essere il controllo.

Il modello può raccomandare l'azione.

L'harness la autorizza.

Lo strumento la esegue.

L'autonomia non è assenza di controllo.

È libertà all'interno di un confine imposto.

9. Smetti di riprovare alla cieca

Una delle peggiori politiche di recupero è:

Qualcosa è andato storto. Riprova.

Se non cambia nulla, il sistema sta semplicemente pagando per riprodurre lo stesso errore.

I fallimenti andrebbero prima classificati.

Mori - inline image
text
1TIMEOUT DELLO STRUMENTO
2-> riprova con backoff
3
4ARGOMENTI NON VALIDI
5-> correggi la chiamata allo strumento
6
7CONTESTO MANCANTE
8-> recupera la fonte mancante
9
10TEST FALLITO
11-> analizza il comportamento anomalo
12
13PERMESSO NEGATO
14-> richiedi approvazione
15
16REQUISITI IN CONTRADDIZIONE
17-> escala
18
19FALLIMENTO RIPETUTO INVARIATO
20-> fermati

Un loop efficace per un agente funziona così:

text
1OSSERVA
2 |
3 v
4DECIDI
5 |
6 v
7AGISCI
8 |
9 v
10MISURA
11 |
12 +---- ACCETTA
13 |
14 +---- CORREGGI
15 |
16 +---- ESCALA
17 |
18 +---- FERMATI

Ogni loop dovrebbe avere limiti sui tentativi, sul tempo, sulla spesa e sull'impatto distruttivo.

Un agente affidabile deve sapere come proseguire.

Ma deve anche sapere quando un ulteriore tentativo non vale più la pena.

10. Trasforma le istruzioni ricorrenti in infrastruttura

Immagina che il prompt contenga:

Esegui sempre il formatter.

Quella regola è molto più solida se il formatter parte in automatico.

Oppure che le istruzioni dicano:

Il codice UI non può accedere direttamente al database.

Diventa molto più efficace come test architetturale che fallisce quando la regola viene violata.

L'evoluzione segue questo schema:

text
1SPIEGAZIONE
2 |
3 v
4CHECKLIST
5 |
6 v
7TEMPLATE
8 |
9 v
10CONTROLLO AUTOMATIZZATO
11 |
12 v
13POLICY IMPOSTA

Il prompt dovrebbe spiegare come valutare.

L'harness dovrebbe imporre gli invarianti.

Ogni errore ricorrente dovrebbe scendere di un gradino in questa scala.

Alla fine il modello non avrà più bisogno di ricordare la lezione.

Sarà l'ambiente a ricordarla al posto suo.

11. Registra l'esecuzione

Un artefatto finale perfetto può nascondere un percorso di esecuzione disastroso.

Forse l'agente ha consultato la fonte sbagliata.

Forse ha ignorato un comando fallito.

Forse ha eseguito due volte un'azione esterna.

Forse ha speso dieci volte il budget previsto.

Forse ha dato la risposta giusta per il motivo sbagliato.

Registra abbastanza informazioni per ricostruire cosa è successo.

text
109:14 creato il contratto del task
209:15 caricato architecture.md
309:17 modificato checkout.ts
409:18 test mirato fallito
509:21 implementazione corretta
609:22 test mirato superato
709:24 test di integrazione superato
809:25 deploy bloccato: approvazione richiesta

Tracce utili includono le fonti del contesto, le chiamate agli strumenti, i cambi di stato, i risultati delle verifiche, i motivi dei nuovi tentativi, le decisioni di approvazione, i costi e la latenza.

L'obiettivo non è raccogliere log per divertimento.

L'obiettivo è localizzare il fallimento.

Se il passaggio 18 si rompe, dovresti poter riparare il passaggio 18.

Non dovresti dover rieseguire l'intera sequenza.

12. Dai una ricevuta a ogni esecuzione

Non costringere un essere umano a rileggere un transcript di quaranta messaggi.

Compila il risultato in una breve ricevuta.

text
1OBIETTIVO
2
3Correggere l'applicazione duplicata dei coupon.
4
5MODIFICATO
6
7validazione checkout
8test di regressione
9
10VERIFICATO
11
12lint superato
13unit test superati
14test di integrazione superato
15
16NON VERIFICATO
17
18provider di pagamento in produzione
19
20RISCHI
21
22client mobile legacy non disponibile
23
24APPROVAZIONE RICHIESTA
25
26deploy in staging

Questa non è una sintesi di ciò che il modello sostiene sia successo.

È una sintesi di ciò che l'harness può dimostrare sia successo.

Questa distinzione rende la ricevuta utile per le revisioni, i passaggi di consegne e le sessioni future dell'agente.

13. Fai in modo che ogni fallimento migliori l'harness

La maggior parte dei team corregge l'output fallito.

L'approccio migliore è correggere il sistema che ha permesso il fallimento.

text
1CONTESTO MANCANTE
2-> migliora la mappa del progetto
3
4STRUMENTO SBAGLIATO
5-> migliora il routing o il contratto dello strumento
6
7OUTPUT SCADENTE
8-> aggiungi un validatore
9
10LOOP INFINITO
11-> aggiungi un limite ai tentativi
12
13AZIONE NON SICURA
14-> aggiungi un gate di permessi
15
16DECISIONE PERSA
17-> rendi lo stato persistente
18
19FALLIMENTO SCONOSCIUTO
20-> migliora il tracciamento

È qui che l'Harness Engineering inizia a generare effetti composti.

Un output corretto aiuta una singola esecuzione.

Un harness corretto migliora tutte le esecuzioni successive.

I migliori sistemi di agenti diventano più affidabili perché gli errori lasciano dietro di sé nuova infrastruttura.

14. Inizia con l'harness utile più piccolo

Non ti serve un'enorme piattaforma di orchestrazione per partire.

Costruisci a strati.

text
1LIVELLO 0
2
3prompt
4modello
5
6LIVELLO 1
7
8contratto del task
9mappa del progetto
10strumenti
11
12LIVELLO 2
13
14stato strutturato
15verifica
16loop delimitato
17
18LIVELLO 3
19
20permessi
21tracce
22ripristino
23gate umani

Un breve task di ricerca potrebbe aver bisogno solo di un prompt e di una revisione.

Un task di programmazione di sei ore con accesso ai file, alla rete e capacità di deploy richiede molto di più.

Aggiungi complessità solo quando la superficie di errore lo giustifica.

Non perché l'architettura degli agenti sembra figa.

La checklist dell'Harness Engineering

Prima di dare a un agente un'autonomia significativa, chiediti:

text
1[ ] Il successo è definito prima dell'esecuzione?
2
3[ ] L'agente riesce a trovare il contesto giusto
4 senza caricare tutto?
5
6[ ] Ogni strumento ha uno scopo chiaro,
7 uno schema e uno stato di fallimento?
8
9[ ] Le decisioni importanti vengono archiviate
10 fuori dalla conversazione?
11
12[ ] Il completamento richiede delle prove?
13
14[ ] Le azioni rischiose sono protette da policy?
15
16[ ] Ogni loop ha un limite di tentativi?
17
18[ ] L'esecuzione può riprendere dopo un'interruzione?
19
20[ ] Riesci a ricostruire ogni azione importante?
21
22[ ] Un fallimento migliora una regola, uno strumento,
23 un test, una mappa o un permesso?
24
25[ ] La modifica finale può essere annullata?

Se diverse risposte sono "no", un modello più potente non renderà automaticamente l'agente affidabile.

Potrebbe semplicemente rendere il fallimento più veloce e più costoso.

Il vero cambio di paradigma

Il prompt engineering chiede:

Cosa devo dire al modello?

Il context engineering chiede:

Cosa dovrebbe sapere il modello in questo momento?

L'Harness Engineering chiede:

Quale sistema permette al modello di agire, verificare il proprio lavoro, riprendersi dai fallimenti e operare in sicurezza?

text
1PROMPT
2-> istruzione
3
4CONTESTO
5-> vista operativa
6
7HARNESS
8-> ambiente operativo
9
10LOOP
11-> correzione locale
12
13GRAFO
14-> coordinamento

I modelli continueranno a cambiare.

Il vantaggio duraturo vive intorno a loro.

I tuoi contratti migliorano.

I tuoi strumenti migliorano.

I tuoi test migliorano.

Il tuo stato diventa più pulito.

I tuoi permessi diventano più sicuri.

La tua logica di recupero diventa più intelligente.

I tuoi fallimenti si trasformano in infrastruttura.

È così che modelli capaci diventano agenti affidabili.

Questo è l'Harness Engineering.

Se sei arrivato fin qui

Salva questa guida nei preferiti.

Seguimi su X: x.com/0xjmori

Iscriviti al mio Substack: substack.com/@lunarresearcher

Invia questo articolo a qualcuno che sta ancora cercando di risolvere ogni fallimento degli agenti con un prompt più lungo.

Salva con un clic

Leggi in profondità gli articoli virali con l’AI di YouMind

Salva la fonte, fai domande mirate, riassumi l’argomentazione e trasforma un articolo virale in note riutilizzabili in un unico spazio di lavoro AI.

Scopri YouMind
Per i creator

Trasforma il tuo Markdown in un articolo 𝕏 pulito

Quando pubblichi i tuoi testi lunghi, formattare immagini, tabelle e blocchi di codice per 𝕏 è una seccatura. YouMind trasforma un'intera bozza Markdown in un articolo 𝕏 pulito e pronto da pubblicare.

Prova Markdown verso 𝕏

Altri pattern da decodificare

Articoli virali recenti

Esplora altri articoli virali