Harness AI: come funzionano (e dove stanno andando)
- pubblicato
- lettura
- 5 min
Cosa sono gli harness AI, come funziona il loro loop, le differenze tra Claude Code, Cursor, Aider e gli agenti cloud, dove si integrano e come cambieranno nei prossimi anni.
Negli ultimi due anni si è consolidato un pezzo di infrastruttura che ha silenziosamente cambiato il modo in cui scrivo software: l'harness AI, il software che circonda un modello linguistico e lo trasforma da "chatbot che risponde" ad "agente che agisce". Vale la pena capire come funziona davvero, perché le soluzioni sul mercato non sono affatto intercambiabili, e dove sta andando questo pezzo di stack.
Cos'è, esattamente, un harness
Un modello linguistico, da solo, è una funzione che prende testo in ingresso e restituisce testo in uscita. Non legge file, non esegue comandi, non ha memoria tra una chiamata e l'altra. Tutto quello che sembra "azione" — modificare un file, lanciare i test, aprire una pull request — è in realtà orchestrato da un programma esterno che:
- costruisce il contesto da mandare al modello ad ogni turno;
- interpreta la risposta del modello come istruzioni per uno o più strumenti;
- esegue davvero quegli strumenti, con permessi e limiti propri;
- restituisce il risultato al modello come nuovo contesto.
Quel programma è l'harness. È lui a decidere quali file il modello può vedere, quali comandi può eseguire, se serve una conferma umana prima di agire e cosa succede quando qualcosa va storto. Due harness costruiti sullo stesso modello possono comportarsi in modo completamente diverso: la differenza non è nell'intelligenza del modello, ma nell'impalcatura che gli sta intorno.
Come funziona il loop
Alla base di (quasi) ogni harness c'è lo stesso ciclo, ripetuto finché il compito non è completo. Cambiano i dettagli implementativi, ma la struttura di fondo è questa:
1. Contesto
Cosa "vede" il modello
L'harness raccoglie tutto quello che serve a far ragionare il modello: il prompt, la cronologia della conversazione, i file rilevanti del progetto, l'output dell'ultimo comando, lo stato di git. Nessuna magia: è testo impacchettato in una finestra di contesto.
2. Pianificazione
Il modello decide il prossimo passo
Il modello non esegue nulla direttamente: restituisce una risposta che dice "chiama questo strumento con questi argomenti" (una tool call), oppure risponde in chiaro se il compito è finito o serve una conferma umana.
3. Azione
L'harness esegue lo strumento
È il codice dell'harness — non il modello — a leggere/scrivere file, lanciare comandi shell, chiamare una API o un browser, dentro un sandbox e con permessi controllati. Qui vivono i guardrail: conferme, allowlist, timeout.
4. Osservazione
Il risultato torna al modello
Output, diff, errori o screenshot vengono riportati al modello come nuovo contesto. Il ciclo riparte dal punto 1 finché il compito è completo, si esaurisce il budget di iterazioni, o interviene una persona.
Il punto centrale è che il modello non esegue mai nulla direttamente: propone. È l'harness a validare, eseguire e riportare indietro il risultato. Questo singolo dettaglio è anche il punto in cui si gioca gran parte della sicurezza e dell'affidabilità di uno strumento agentico: un harness permissivo che esegue qualsiasi comando proposto senza controlli è molto più rischioso di uno che richiede conferma per le operazioni distruttive o che lavora dentro un sandbox isolato.
Le differenze tra le soluzioni attuali
"Harness AI" è ormai un'etichetta che copre strumenti molto diversi tra loro: da terminale, integrati in un editor, o completamente in cloud. Le differenze principali riguardano dove gira l'harness, quanto è autonomo e quanto controllo lascia all'utente prima di agire.
| Harness | Superficie | Esecuzione | Autonomia |
|---|---|---|---|
| Claude Code | CLI, con estensioni per IDE e SDK per agenti custom | Locale, con permessi granulari per comandi e file | Alta, con conferme configurabili passo-passo |
| Pensato per lavorare dentro repository reali: legge il progetto, propone diff, esegue comandi shell e test. I permessi si stringono o allargano a seconda della fiducia riposta nel task. | |||
| OpenAI Codex CLI | CLI open source | Locale o in sandbox container | Configurabile tra suggerimento e auto-esecuzione |
| Alternativa CLI di OpenAI, con modalità che vanno dal semplice completamento assistito fino all’esecuzione autonoma di più comandi in sequenza. | |||
| Aider | CLI open source, agnostica rispetto al modello | Locale, integrata con git (commit automatici) | Media, pensata per un ciclo di revisione stretto |
| Uno dei primi harness da terminale diventati popolari: ogni modifica genera un commit git, così la cronologia resta sempre ispezionabile e reversibile. | |||
| GitHub Copilot (Agent mode) | Estensione per VS Code e altri editor JetBrains | Locale, dentro il processo dell’editor | Media, con revisione umana centrale nel flusso |
| Nato come autocompletamento, si è evoluto in un agente che può aprire più file, eseguire comandi nel terminale integrato e proporre patch multi-file senza uscire dall’editor. | |||
| Cursor | Editor standalone (fork di VS Code) | Locale, con indicizzazione semantica del progetto | Media-alta, con modalità "agent" dedicata |
| Un intero editor costruito attorno all’harness: l’indicizzazione del codebase e il chat panel sono cittadini di prima classe, non un’estensione aggiunta sopra. | |||
| Windsurf | Editor standalone (fork di VS Code) | Locale, con "flow" che incatenano più azioni | Alta, pensata per sequenze lunghe senza interruzioni |
| Simile a Cursor nell’impostazione, punta a ridurre il numero di conferme richieste incatenando più step in un’unica "flow" supervisionata a posteriori. | |||
| Devin / agenti cloud simili | Dashboard web, nessun editor locale richiesto | Sandbox remoto (VM o container) fornito dal servizio | Molto alta, task assegnati e seguiti in background |
| L’harness gira interamente da remoto: si assegna un task come a un collaboratore, e si ricontrolla il lavoro (PR, log, screenshot) quando è pronto. | |||
| Agenti in background (GitHub, GitLab, ecc.) | Integrati nella piattaforma di hosting del codice | Runner cloud della piattaforma, dietro trigger o issue | Alta su task delimitati, scarsa iniziativa autonoma |
| Si attivano su un’issue o un commento, lavorano su un branch dedicato e aprono una pull request: l’autonomia è alta nell’esecuzione ma il perimetro del task resta ristretto. | |||
Qualche pattern che emerge guardando la tabella:
- Gli strumenti da terminale tendono a offrire il controllo più fine sui permessi, perché sono pensati per lavorare su repository di produzione dove un errore ha un costo reale.
- Gli strumenti integrati nell'editor ottimizzano per la fluidità del ciclo scrivi-verifica-correggi, restando vicini a dove il codice viene comunque letto e rivisto.
- Gli agenti cloud spostano il baricentro dal "programmare insieme all'AI" al "delegare un task e rivederne il risultato", un cambio di postura più che di tecnologia.
Nessuno di questi approcci è strettamente superiore: sono ottimizzati per compiti diversi, e non è raro usarne più di uno nello stesso team, o addirittura nello stesso progetto.
I benefici, concretamente
Al di là dell'entusiasmo generico per "l'AI che scrive codice", i benefici misurabili di un buon harness sono piuttosto specifici:
- Contesto ampio, non solo il file aperto. L'harness può leggere l'intero repository, la cronologia git, i log dei test: il modello ragiona su un quadro molto più completo di quanto farebbe un autocompletamento tradizionale.
- Compiti multi-step senza supervisione continua. Un refactoring che tocca dieci file, o l'aggiornamento di una dipendenza con relativa correzione dei breaking change, sono task che prima richiedevano ore di lavoro meccanico e ora possono essere delegati quasi per intero.
- Tracciabilità. Ogni azione dell'harness passa da diff, comandi loggati o commit: a differenza di un suggerimento accettato al volo, resta una traccia ispezionabile di cosa è stato fatto e perché.
- Barriera d'ingresso più bassa. Chi non conosce a fondo un linguaggio o un framework può comunque descrivere un problema in linguaggio naturale e ottenere un primo tentativo di soluzione da rivedere, invece di partire da zero.
- Riuso dello stesso "operatore" su compiti diversi. Lo stesso harness, con lo stesso set di strumenti, può essere puntato su un bug fix, una migrazione o la stesura di documentazione: cambia il prompt, non l'infrastruttura.
Dove si integrano
Una domanda spesso sottovalutata è dove far girare un harness, perché la superficie scelta cambia sia i rischi sia il tipo di lavoro per cui lo strumento è adatto:
- Sulla macchina di sviluppo, come CLI o estensione dell'editor: il posto più naturale per il lavoro esplorativo, dove serve iterare velocemente e mantenere il controllo diretto.
- Nella pipeline CI/CD, innescato da un evento (una issue aperta, un commento su una PR, uno scheduler): utile per task delimitati e ripetibili — aggiornare dipendenze, generare changelog, applicare fix suggeriti da un linter — dove serve ripetibilità più che creatività.
- In un ambiente cloud dedicato, isolato dalla macchina di chi lo usa: la scelta giusta per task lunghi o paralleli, dove si vuole poter chiudere il laptop e ritrovare il lavoro fatto al ritorno.
- Dentro strumenti di comunicazione (chat interne, ticketing): permette a chi non scrive codice di innescare un intervento tecnico descrivendo il problema in linguaggio naturale, con la revisione umana spostata a valle, sulla pull request generata.
La tendenza è verso l'uso combinato di più superfici nello stesso flusso di lavoro: esplorazione in locale, esecuzione ripetibile in CI, task lunghi delegati al cloud.
Come si evolveranno
Guardando la traiettoria degli ultimi anni, è più facile capire dove sta andando la categoria che prevedere il prossimo singolo prodotto:
2021–2022
Autocompletamento
Il modello suggerisce la riga o la funzione successiva mentre scrivi. Nessun loop, nessuno strumento: solo previsione di testo dentro l’editor.
Es. le prime versioni di GitHub Copilot
2023
Chat accanto al codice
Compare una conversazione a fianco dell’editor: si può chiedere spiegazioni o generare snippet, ma copiare il risultato nel file resta un gesto manuale.
Es. chat panel integrati nell’IDE
2024
Agenti dentro l’editor
Nasce il loop vero e proprio: il modello può leggere più file, proporre diff multi-file ed eseguire comandi nel terminale integrato, con revisione umana ad ogni passo.
Es. Cursor, Windsurf, Copilot Agent mode
2025
Harness da terminale e cloud
L’agente si stacca dall’editor: lavora da riga di comando su repository reali, oppure gira interamente da remoto, assegnato come un task a un collaboratore.
Es. Claude Code, Codex CLI, Devin
2026 e oltre
Protocolli condivisi e specializzazione
Standard aperti (come MCP) permettono a un harness di collegarsi a strumenti esterni senza integrazioni ad hoc. Parallelamente emergono harness verticali, pensati per un dominio specifico invece che generalisti.
Previsione, non ancora consolidato
Due direzioni sembrano più solide di altre, perché già visibili oggi in forma embrionale:
La standardizzazione del modo in cui un harness parla con gli strumenti esterni. Prima di protocolli condivisi come MCP, ogni harness doveva integrare a mano ogni fonte dati o servizio. Un protocollo comune significa che uno strumento costruito una volta (una connessione a un database, un client per un servizio interno) può essere riusato da qualunque harness compatibile, invece di essere reimplementato per ciascuno.
La specializzazione verticale. Gli harness generalisti di oggi somigliano molto tra loro nelle capacità di base; è plausibile che emergano varianti pensate per domini specifici — sicurezza, infrastruttura, dati — con strumenti, guardrail e persino modelli ottimizzati per quel contesto, piuttosto che un unico harness "buono per tutto".
Quello che probabilmente non cambierà è la struttura di fondo del loop: contesto, decisione, azione, osservazione. È un pattern abbastanza semplice da essere già stabile; quello che continuerà a muoversi rapidamente è tutto ciò che sta intorno — permessi, memoria, protocolli, superfici di distribuzione.