Cos'è un agente harness?

Un agente harness è l'insieme di codice, file e regole che trasforma un modello di linguaggio in un agente. Costruisce il contesto che il modello legge, decide quali strumenti può chiamare, conserva la memoria di una sessione all'altra e controlla ciò che accade nel ciclo di lavoro. Il README di Harness2 lo definisce come il sistema intorno al modello e chiama "harnessing" la sua ottimizzazione a pesi fissi.

Esempi di harness includono Claude Code, Codex CLI di OpenAI, OpenCode e Gemini CLI, tutti agenti di programmazione utilizzati dal terminale. Nella nostra analisi del runtime di Claude Code, la parte del modello è piccola e il paper dell'università MBZUAI la quantifica in modo brutale (98,4% di infrastruttura, 1,6% di IA). Chiunque abbia letto "Decoupling Brain from Hands" riconoscerà l'idea di fondo, poiché il harness è ciò che rimane quando si cambia modello.

Perché lavorare sul harness piuttosto che sul modello?

Il modello, in generale, non lo controlliamo, mentre il harness sì. A parità di modello, i risultati possono variare notevolmente. NVIDIA ha migliorato le prestazioni di Claude Opus 5 dal 30% al 100% su ARC-AGI-3 con AVO, modificando solo ciò che lo circonda. Il DeepSeek Harness è nato come alternativa open source proprio a un harness (quello di Claude Code).

I preprint del 2026 mostrano risultati più modesti, ma misurati su benchmark pubblici. Nel paper di Harness2, un modello meno potente, GLM-5 di Zhipu, raggiunge 75,7 su WorkBuddy-Bench con il harness migliorato, superando i 72,4 che Gemini 3.5 Flash ottiene con quello di serie. Il lavoro su Recursive Harness Self-Improvement (arXiv 2607.15524) riporta che agenti con basso sforzo di ragionamento, dopo alcune iterazioni, superano la configurazione a sforzo massimo spendendo fino al 60% in meno di inferenza.

C'è anche una ragione pratica. Un harness è fatto di file di testo e piccoli script; lo si legge, lo si versiona, lo si confronta con un diff e lo si traspone su un altro modello. Un fine-tuning, no.

Quali sono i componenti di un harness?

Il paper di Harness2 decomponi il harness in otto componenti, ciascuno montato come un file nell'ambiente di esecuzione e li raggruppa in base al momento in cui entrano in gioco. Quattro sono sempre nel contesto del modello, tre vengono caricati solo in caso di necessità e uno agisce all'interno del ciclo degli strumenti.

    • Prompt sistema: Sempre attivo. Contiene la personalità e la procedura generale valida per tutte le attività. Esempio: "Prima pianifica, poi esegui, poi verifica".
    • Garde-fous: Sempre attivo. Contiene vincoli stretti, validi indipendentemente dalla attività o dallo strumento. Esempio: "Inventaria i file in ingresso, non consegnare senza controllo".
    • Memoria: Sempre attivo. Contiene fatti duraturi sul dominio, conservati da una attività all'altra. Esempio: "Convenzioni di un cliente, formati di file ricorrenti".
    • Guida degli strumenti: Sempre attivo. Contiene quando e come utilizzare ogni strumento già presente. Esempio: "Rimuovi simboli e virgole dai numeri registrati come testo prima di calcolare".
    • Skills: A richiesta. Contiene procedure complete caricate solo se necessario, senza costo sulle altre attività. Esempio: "Come riconciliare programma, luogo, manodopera e budget".
    • Scripts: A richiesta. Contiene codice eseguito dal shell invece di lunghi ragionamenti in token. Esempio: "Un controllo che riapre i fogli di calcolo".
    • Sotto-agenti: A richiesta. Contiene agenti con la propria finestra di contesto che restituiscono solo il risultato. Esempio: "Un revisore che rivede il lavoro senza vederne la cronologia".
    • Plugin (middleware): Nel ciclo. Contiene punti di attacco intorno alle chiamate di strumento e ai turni. Esempio: "Bloccare un comando prima della sua partenza".

La distinzione più pesante è quella tra istruire e imporre. Un prompt o un garde-fou chiedono al modello di comportarsi in un certo modo e il modello può ignorarli. Il plugin, invece, si aggancia a ogni chiamata di strumento e fa rispettare la regola senza dipendere dalla buona volontà del modello. In Claude Code, questo ruolo è svolto dagli hooks, mentre le skills corrispondono alla colonna "a richiesta" e le istruzioni del file CLAUDE.md fanno da prompt e memoria, garde-fous inclusi.

Sulla memoria, si può andare molto oltre e alcuni lo fanno con un database locale (TencentDB Agent Memory); i sotto-agenti, d'altra parte, sono il leva dei sistemi che orchestrano decine di agenti in parallelo, come i Dynamic Workflows di Claude Code o i sotto-agenti di Gemini CLI.

Quali approcci esistono per migliorare un agente senza toccare i pesi?

Le metodologie pubblicate nel 2026 si suddividono in cinque famiglie, in base al momento in cui intervengono, ciò che modificano e il modo in cui giudicano se la modifica ha funzionato. Tutte lasciano il modello intatto.

Ricerca offline sul harness, come Meta-Harness

Meta-Harness (arXiv 2603.28052, 30 marzo 2026, Yoonho Lee, Omar Khattab, Chelsea Finn e altri) cerca il miglior codice di harness prima della messa in produzione. Un agente proposto legge il codice sorgente, i punteggi e le tracce di esecuzione di tutti i candidati precedenti, ordinati in una cartella e ne propone di nuovi; il migliore viene poi utilizzato tale e quale. Gli autori riportano 7,7 punti in più su una classificazione di testi online rispetto a un sistema di gestione del contesto all'avanguardia, con quattro volte meno token di contesto e 4,7 punti in più in media su 200 problemi di matematica a livello olimpico, su cinque modelli mai visti durante la ricerca. È necessario avere attività di addestramento con un punteggio, quindi è il metodo giusto quando questo punteggio esiste.

Memoria di strategie, come ReasoningBank

ReasoningBank (arXiv 2509.25140, ICLR 2026) non tocca il harness e lavora esclusivamente sulla memoria. L'agente distilla strategie di ragionamento generalizzabili dalle proprie esperienze, sia riuscite che fallite (è l'agente stesso a giudicarle), le recupera e le riutilizza. Questo approccio è utile per migliorare la capacità dell'agente di risolvere problemi complessi e di apprendere dalle proprie esperienze.