Questa pagina è tradotta dalla documentazione inglese. Comandi, identificatori ed esempi restano invariati. Runtime 7.24.4 · SDK 2.6.7. Testo inglese
Modalità sandbox
Stato: Attivo Ambito: stato attuale Ultima revisione: 2026-08-23 Responsabile: runtime di ax-code
AX Code include una sandbox di esecuzione integrata che può limitare ciò che l’agente di IA fa sul sistema. Per impostazione predefinita, AX Code parte in accesso completo con la sandbox spenta, quindi le scritture sul filesystem e l’accesso alla rete non hanno restrizioni. Attiva workspace-write o read-only prima di lavorare con repository non attendibili o di eseguire compiti non presidiati.
Avviso di sicurezza:
full-accessnon è un confine di sicurezza. L’agente può modificare file fuori dal workspace, scrivere.git/e.ax-code/, eseguire comandi di shell senza restrizioni e accedere alla rete.
Avvio rapido
Attiva o disattiva la sandbox dalla TUI:
- Digita
/sandboxnel prompt, oppure - Premi
Ctrl+Pe cerca “sandbox”
La barra di stato mostra lo stato corrente:
- sandbox on (verde) — agente confinato al workspace
- sandbox off (rosso) — nessuna restrizione
L’impostazione persiste tra le sessioni in ax-code.json.
Che cosa cambia
| Capacità | Sandbox spenta | Sandbox accesa |
|---|---|---|
| Scritture di file dentro il workspace | Consentite | Consentite |
| Scritture di file fuori dal workspace | Consentite | Bloccate |
Scritture su .git/ |
Consentite | Bloccate |
Scritture su .ax-code/ |
Consentite | Bloccate |
| Comandi bash | Senza restrizioni | Solo workspace |
Bash verso .git/, .ax-code/ |
Consentito | Bloccato |
| Bash verso l’esterno del workspace | Consentito | Bloccato |
| Accesso alla rete (webfetch, websearch) | Consentito | Bloccato |
| Client di rete di bash (curl, wget, …) | Consentito | Bloccato |
| Operazioni di lettura (read, glob, grep) | Senza restrizioni | Senza restrizioni |
Configurazione
Fonte di verità
Questa pagina riassume il comportamento visibile all’utente. Quando il comportamento cambia, verifica la documentazione rispetto a:
packages/ax-code/src/isolation/index.tsper la risoluzione della modalità, i percorsi protetti, i controlli di rete, di scrittura e di bash, eIsolationDeniedError.packages/ax-code/src/config/schema.tsper la forma della configurazione, i predefiniti e le descrizioni.packages/ax-code/src/server/routes/isolation.tsper il comportamento dell’interruttore a runtime e la persistenza.packages/ax-code/test/isolation/isolation.test.tsepackages/ax-code/test/tool/bash.test.tsper il comportamento di applicazione atteso.
Tieni brevi le affermazioni duplicate nel README alla radice e rimanda qui per i dettagli.
Interruttore dalla TUI
Usa /sandbox o la palette dei comandi (Ctrl+P → “Turn sandbox on/off”). La modifica ha effetto subito e viene salvata nel ax-code.json del progetto.
Flag della CLI
ax-code --sandbox workspace-write # sandbox on
ax-code --sandbox full-access # sandbox off
ax-code --sandbox read-only # strictest: blocks all mutations
Variabile di ambiente
AX_CODE_ISOLATION_MODE=workspace-write ax-code
File di configurazione
In ax-code.json:
{
"isolation": {
"mode": "workspace-write",
"network": false
}
}
Precedenza
Flag della CLI > variabile di ambiente > file di configurazione > predefinito (full-access)
Quando è attiva una sostituzione da CLI o da ambiente, la TUI riporta quella modalità efficace. Un interruttore /sandbox può salvare la preferenza del progetto, ma la sostituzione a precedenza più alta resta attiva finché non viene rimossa (di norma al riavvio).
Modalità di isolamento
| Modalità | Descrizione |
|---|---|
workspace-write |
Scritture confinate al workspace. Rete disattivata. Percorsi protetti applicati. Mostrata come “sandbox on”. |
full-access |
Nessuna restrizione. Mostrata come “sandbox off”. |
read-only |
Tutte le mutazioni bloccate. Niente bash. Niente scritture. Niente rete. |
Percorsi protetti
In modalità workspace-write, questi percorsi sono sempre protetti in scrittura:
.git/— impedisce la corruzione accidentale dello stato git.ax-code/— impedisce la manomissione di configurazione e plugin
Aggiungi percorsi protetti personalizzati nella configurazione:
{
"isolation": {
"mode": "workspace-write",
"protected": ["secrets", "credentials"]
}
}
Accesso alla rete
La rete è disattivata per impostazione predefinita nelle modalità workspace-write e read-only. Strumenti interessati:
webfetch— bloccatowebsearch— bloccatocodesearch— bloccatobash— i client solo di rete (curl,wget,nc/ncat/netcat,telnet,ftp,tftp,scp,sftp,dig,nslookup,host) sono bloccati
Limite: il blocco della rete in
bashè a livello applicativo e copre i client di rete dedicati sopra elencati. Non intercetta gli strumenti a doppio uso che funzionano anche offline (git,npm/pnpm/yarn,pip,go, interpreti di linguaggio comepython/node), perché le loro invocazioni offline non si distinguono in modo statico e bloccarle romperebbe flussi comuni. Un isolamento di rete vero ed esaustivo richiede controlli a livello di sistema operativo, che questa sandbox non fornisce. Quando si colpisce un client negato, l’agente chiede un’escalation una tantum.
Per consentire la rete mantenendo le restrizioni di scrittura:
{
"isolation": {
"mode": "workspace-write",
"network": true
}
}
Backend di isolamento (app e sistema operativo)
| Backend | Configurazione / ambiente | Comportamento |
|---|---|---|
app |
"backend": "app" |
Solo controlli portabili a livello di strumenti |
os |
"backend": "os" / AX_CODE_ISOLATION_BACKEND=os |
Controlli dell’app più sandbox del kernel per bash; errore se mancano gli strumenti del sistema operativo |
auto (predefinito) |
"backend": "auto", non impostato, oppure AX_CODE_ISOLATION_BACKEND=auto |
Preferisci l’involucro bash del sistema operativo; ripiego solo sull’app |
macOS: profili Seatbelt tramite sandbox-exec (scrittura limitata a workspace e worktree, rete negata quando network: false).
Linux: bubblewrap (bwrap) se installato (--unshare-net quando la rete è disattivata, workspace montato in bind in lettura e scrittura).
Windows: solo livello applicativo, oggi.
{
"isolation": {
"mode": "workspace-write",
"network": false,
"backend": "auto"
}
}
Vedi SECURITY.md per il modello delle minacce.
Autorizzazioni e hook controllati dal repository
I file di progetto non sono attendibili per impostazione predefinita. Le regole di autorizzazione in ax-code.json, .ax-code/policy.json e le definizioni di agente o modalità del progetto possono restringere l’accesso con deny, ma le concessioni allow/ask controllate dal repository vengono ignorate. I comandi di progetto non possono attivare l’espansione della shell. .ax-code/hooks.json, .ax-code/plugin/ e i plugin configurati dal progetto non vengono eseguiti.
Anche una configurazione di progetto non attendibile non può selezionare una shell personalizzata, un LSP o un formattatore eseguibile, un pacchetto di provider o un endpoint API, variabili di ambiente delle credenziali del provider, una sorgente di skill esterna o un percorso di istruzioni fuori dal worktree. Restano disponibili i percorsi di istruzioni relativi sicuri e le sostituzioni integrate non eseguibili. I server MCP usano un flusso di approvazione separato, con impronta, descritto in Integrazioni MCP.
Dopo aver revisionato la configurazione controllata dal repository, gli utenti possono aderire fuori dal repository per il processo corrente:
AX_CODE_TRUST_PROJECT_CONFIG=1 ax-code
L’interruttore solo di ambiente impedisce a un checkout di dichiararsi attendibile.
Come funziona l'applicazione
L’applicazione della sandbox è sempre a livello applicativo, controllata a ogni invocazione di strumento. Quando backend è os o auto e la piattaforma lo supporta, bash viene inoltre avvolto in una sandbox del kernel.
| Strumento | Controllo |
|---|---|
bash |
La directory di lavoro e tutti i percorsi risolti devono essere dentro il workspace; i client solo di rete sono bloccati quando la rete è disattivata; involucro facoltativo del sistema operativo |
edit |
Il file di destinazione deve essere dentro il workspace e non protetto |
write |
Il file di destinazione deve essere dentro il workspace e non protetto |
apply_patch |
Tutti i file di destinazione devono essere dentro il workspace e non protetti |
webfetch |
L’accesso alla rete deve essere attivato |
websearch |
L’accesso alla rete deve essere attivato |
codesearch |
L’accesso alla rete deve essere attivato |
Quando uno strumento viola l’isolamento, lancia un IsolationDeniedError con un messaggio chiaro che spiega che cosa è stato bloccato e perché.