Guida
Cos’è un sandbox IA? Come gli agenti eseguono codice entro confini definiti
Un sandbox IA offre un ambiente controllato al codice generato dagli agenti. Scopri come funziona l’isolamento, cosa persiste e come l’esecuzione si collega a un progetto reale.
Un sandbox IA è un ambiente di esecuzione che limita ciò a cui il codice generato o selezionato da un agente IA può accedere e le risorse che può consumare. Delimita l’esecuzione: file, processi, accesso alla rete, credenziali e risorse. La parola sandbox, da sola, non spiega come vengono applicati questi limiti.
Perché gli agenti IA hanno bisogno di un confine di esecuzione
Un agente di programmazione può suggerire una modifica senza eseguire nulla. Il rischio cambia quando installa un pacchetto, esegue un test, apre un file caricato o avvia un server. Queste azioni eseguono programmi con i permessi dell’ambiente. Un comando di test può eseguire script delle dipendenze; un’analisi può aprire file che l’utente non intendeva condividere.
Considera un agente incaricato di correggere un’applicazione difettosa. Legge il progetto, modifica un modulo, installa dipendenze ed esegue i test. Assegnargli il tuo normale ambiente di sviluppo gli dà anche accesso a ciò che quell’ambiente può raggiungere: directory montate, credenziali, servizi di rete e forse sistemi di produzione. Un confine di esecuzione permette di concedere meno capacità all’attività.
L’obiettivo è rendere esplicite le azioni consentite. Un sandbox può eseguire codice errato, contattare un endpoint autorizzato o usare impropriamente credenziali fornite intenzionalmente. Tratta il codice generato e le dipendenze come input da verificare e progetta l’ambiente in base alle conseguenze della loro esecuzione.
Come si inserisce un sandbox nell’esecuzione di un agente
Un’esecuzione tipica parte da un progetto o da alcuni input. L’agente propone codice o un comando, uno strumento lo esegue nell’ambiente configurato e restituisce elementi verificabili, come output, codice di uscita o un file generato. L’agente può usare questi risultati per apportare un’altra modifica.
Per un’applicazione, il risultato può includere un server di anteprima. Per un’attività sui dati, un grafico. Per una revisione del codice, un test fallito con i relativi log. Un contratto utile specifica gli input, cosa è stato eseguito, gli output e cosa deve restare dopo l’arresto.
01Prepara
Seleziona sorgenti, file di input, dipendenze e permessi.
02Esegui
Esegui l’attività entro i limiti configurati.
03Esamina
Esamina output, stato di uscita, modifiche ai file e comportamento dell’anteprima.
04Conserva o ripulisci
Salva gli artefatti utili e arresta le risorse che non servono più.
Revisione e deployment sono decisioni separate dopo il ciclo di esecuzione. Un comando riuscito non rende l’applicazione pronta per la produzione.
Container, gVisor e microVM applicano confini diversi
Sandbox descrive uno scopo, non una singola implementazione. I normali container Linux usano namespace e altri controlli per separare i processi condividendo il kernel host. La guida di sicurezza Docker tratta namespace, cgroup, capability e rischi di accesso al daemon Docker. Mount, privilegi e interfacce esposti restano parte del confine.
gVisor aggiunge un kernel applicativo nello spazio utente che implementa un’interfaccia simile a Linux. Media le interazioni con l’host per ridurre l’esposizione alle vulnerabilità del kernel host. Questo livello aggiuntivo richiede anche di valutare compatibilità e prestazioni delle applicazioni.
Una microVM esegue un kernel guest entro il confine di una macchina virtuale. Firecracker è una possibile implementazione: il suo progetto descrive guest Linux, KVM, un modello ridotto di dispositivi e un jailer per la produzione. La piattaforma deve comunque configurare storage, rete, identità e ciclo di vita di ogni ambiente.
| Approccio | Confine | Domande da porre |
|---|---|---|
| Container Linux | Processi separati tramite controlli del kernel host; il kernel è condiviso. | Quali mount, capability, limiti delle risorse e interfacce del daemon sono disponibili? |
| gVisor | Un kernel applicativo media l’interfaccia di sistema dell’applicazione. | Il carico funziona correttamente? Come si comportano il filesystem e la rete? |
| MicroVM | Un kernel guest viene eseguito entro un confine di virtualizzazione. | Come vengono gestiti immagini, rete, hardening dell’host e pulizia degli ambienti? |
Isolamento e persistenza sono scelte separate
Un sandbox non deve essere necessariamente usa e getta. L’isolamento descrive il confine dell’esecuzione; la persistenza descrive ciò che rimane dopo. Puoi eseguire un’attività breve su sorgenti duraturi, mantenere un ambiente tra le interazioni o eliminarne i file dopo aver raccolto il risultato.
Definisci con precisione cosa persiste. Un repository salvato è diverso da una cache delle dipendenze, da un volume dati montato o dalla memoria di un processo in esecuzione. Arrestare un ambiente può conservarne alcuni e perderne altri. Una sessione lunga non sostituisce backup o controllo di versione.
Per gli agenti di programmazione è utile un workspace duraturo con un proprio ciclo di esecuzione. Il team può continuare a esaminare i sorgenti dopo l’arresto di un’anteprima e ricostruire dagli input registrati. Per calcoli occasionali, può bastare conservare il riferimento agli input e l’artefatto di output.
Cosa un sandbox non risolve da solo
L’isolamento del runtime non decide se l’azione richiesta da un agente sia appropriata. Se l’ambiente può raggiungere un servizio esterno e dispone di credenziali accettate da quel servizio, il codice può usare quell’accesso. Proteggere l’host e limitare i permessi dell’applicazione sono attività collegate ma distinte.
Il modello di sicurezza di gVisor distingue esplicitamente le risorse esterne al sandbox da quelle rese disponibili al suo interno. Applica questa distinzione a file, destinazioni di rete e credenziali da esporre. Inserire dati sensibili in un ambiente isolato resta una decisione di renderli disponibili all’attività.
Lo stesso vale per la produzione. Un agente può produrre una build valida introducendo comunque un controllo dei permessi errato o una query costosa. Mantieni revisione applicativa e autorizzazione alla release nel flusso: l’isolamento non dimostra che una funzionalità sia corretta.
Adatta l’ambiente all’attività
Un assistente di programmazione ha bisogno dei file del progetto, degli strumenti di build e di un modo per esaminare le modifiche. Un agente che crea applicazioni necessita anche di un processo di anteprima e di una route raggiungibile. Un agente di analisi dei dati deve accedere agli input pertinenti e poter restituire un artefatto. Queste attività possono condividere l’infrastruttura senza richiedere gli stessi permessi o criteri di conservazione.
L’esecuzione di script dei clienti è un caso diverso. Il codice può essere intenzionalmente ostile e un’attività non deve consumare le quote di un altro cliente o accedere ai suoi dati. Valuta esplicitamente questo modello di fiducia prima di trattare un comodo workspace come un servizio per eseguire codice arbitrario.
Misura il percorso completo dell’attività quando confronti le opzioni. Il tempo di avvio del runtime non include il caricamento dei sorgenti, l’installazione delle dipendenze, le code, l’avvio dell’applicazione e i controlli di stato. Il tempo prima che l’agente possa usare un risultato è spesso più utile.
| Attività | Output utile | Decisione progettuale |
|---|---|---|
| Programmazione e correzione | Un diff del codice e i risultati dei test | A quali repository e credenziali può accedere l’agente? |
| Prototipazione di applicazioni | Un’anteprima in esecuzione e il suo codice sorgente | Chi può aprire l’anteprima e quali dati usa? |
| Analisi dei dati | Un report, un grafico o un file trasformato | Quali input sono disponibili e come vengono conservati gli output? |
| Esecuzione di script dei clienti | Output limitato e stato di uscita | Come vengono gestiti codice ostile, separazione tra clienti ed esaurimento delle risorse? |
Domande da affrontare prima di collegare un agente
Definisci il contratto di esecuzione prima di scegliere un fornitore o creare l’integrazione. Provalo con carichi rappresentativi, compresi i guasti. Un comando bloccato, una dipendenza mancante o un’anteprima arrestata devono produrre uno stato che l’applicazione sappia comprendere e gestire per riprendersi.
- —Accesso: quali file sorgente, directory montate e credenziali sono disponibili per questa attività?
- —Rete: quali destinazioni può raggiungere il codice, compresi i servizi interni?
- —Risorse: quali limiti regolano CPU, memoria, disco, numero di processi, durata e attività concorrenti?
- —Ciclo di vita: come annulli un’attività, arresti un ambiente e distingui i file temporanei dagli artefatti duraturi?
- —Elementi verificabili: puoi recuperare codici di uscita, log, modifiche ai file e la revisione dei sorgenti che ha prodotto un risultato?
- —Pubblicazione: quali azioni richiedono revisione e come viene concesso il permesso di deployment?
Come si applica ad Adios
Adios collega il flusso di programmazione tramite un workspace basato sui sorgenti. La documentazione descrive file, operazioni Git, attività dell’agente, build, log, controlli dell’anteprima e deployment. Il team conserva così un progetto a cui tornare dopo la conclusione di un comando o di un’anteprima.
Un client MCP compatibile può usare gli strumenti ospitati di Adios per creare un workspace, scrivere file, preparare un’anteprima e consultare i log. L’autenticazione limita il client alle risorse autorizzate del team. Il flusso MCP documentato richiede un’approvazione esplicita prima del deployment.
La panoramica sulla sicurezza di Adios descrive namespace Linux, cgroup e limiti delle risorse quando supportati dal runtime scelto. Questi controlli documentati devono guidare la valutazione: la parola sandbox non promette una microVM o un kernel guest dedicato per ogni workspace. Verifica le proprietà richieste per il codice che intendi eseguire.
Per provare il flusso, collega un client MCP o apri un workspace, apporta una piccola modifica ed esamina build e anteprima. Conserva il risultato in Git. Avrai una base concreta per decidere cosa serve alla prossima attività dell’agente.