canUseTool per gestire tutto il resto in fase di esecuzione.
Questa pagina copre le modalità di permesso e le regole. Per creare flussi di approvazione interattivi in cui gli utenti approvano o negano le richieste di strumenti in fase di esecuzione, vedi Gestire approvazioni e input dell’utente.
Come vengono valutati i permessi
Quando Claude richiede uno strumento, l’SDK controlla i permessi in questo ordine:1
Hooks
Esegui hooks per primo. Un hook può negare la chiamata completamente o trasmetterla. Un hook che restituisce
allow non salta le regole di negazione e richiesta di seguito; quelle vengono valutate indipendentemente dal risultato dell’hook.2
Regole di negazione
Controlla le regole
deny (da disallowed_tools e settings.json). Se una regola di negazione corrisponde, lo strumento viene bloccato, anche in modalità bypassPermissions. Le regole di negazione con nome semplice come Bash rimuovono lo strumento dal contesto di Claude prima che questa valutazione inizi, quindi solo le regole con ambito come Bash(rm *) vengono controllate in questo passaggio.3
Regole di richiesta
Controlla le regole
ask da settings.json. Se una regola di richiesta corrisponde, la chiamata passa al tuo callback canUseTool per la conferma, anche in modalità bypassPermissions.Gli strumenti che richiedono l’interazione dell’utente si comportano allo stesso modo: AskUserQuestion e gli strumenti MCP il cui server imposta _meta["anthropic/requiresUserInteraction"] passano sempre al callback, anche quando una regola di consentimento corrisponde. In modalità dontAsk entrambi i casi vengono negati invece, perché quella modalità non richiede mai conferma. L’annotazione MCP richiede Claude Code v2.1.199 o successivo.Gli strumenti del connettore claude.ai che la tua organizzazione ha impostato su ask lasciano anche il flusso in questo passaggio. Ogni chiamata passa al callback, anche in modalità bypassPermissions e anche quando una regola di consentimento corrisponde. Il callback riceve il motivo La tua organizzazione richiede l'approvazione per questo strumento. In modalità dontAsk la chiamata viene negata invece, perché quella modalità non richiede mai conferma.4
Modalità di permesso
Applica la modalità di permesso attiva.
bypassPermissions approva tutto ciò che raggiunge questo passaggio. acceptEdits approva le operazioni su file. plan instrada gli strumenti di modifica file e scrittura shell al tuo callback canUseTool indipendentemente dalle regole di consentimento, quindi le operazioni di scrittura non possono essere approvate automaticamente durante la pianificazione. Le altre modalità passano oltre.5
Regole di consentimento
Controlla le regole
allow (da allowed_tools e settings.json). Se una regola corrisponde, lo strumento viene approvato.6
Callback canUseTool
Se non risolto da nessuno dei precedenti, chiama il tuo callback
canUseTool per una decisione. In modalità dontAsk, questo passaggio viene saltato e lo strumento viene negato.canUseTool che questo ordine di valutazione non può mai raggiungere, l’SDK TypeScript emette un avviso del processo Node.js una volta quando la query viene costruita. Il codice dell’avviso è CLAUDE_SDK_CAN_USE_TOOL_SHADOWED. Due configurazioni lo attivano:
permissionMode: 'bypassPermissions', che approva automaticamente ogni chiamata che raggiunge il passaggio della modalità di permesso- Ogni voce
allowedToolssemplice come"Read", che approva automaticamente quello strumento intero prima che il callback sia consultato
Bash(ls *) e la modalità acceptEdits non lo attivano, e le regole di consentimento provenienti da file di impostazioni non sono visibili al controllo.
Ascolta con process.on('warning', ...) e abbina il codice per registrarlo o sopprimerlo. Per controllare ogni chiamata di strumento indipendentemente dalla modalità e dalle regole, utilizza invece un hook PreToolUse.
Questa pagina si concentra su regole di consentimento e negazione e modalità di permesso. Per gli altri passaggi:
- Hooks: esegui codice personalizzato per consentire, negare o modificare le richieste di strumenti. Vedi Controllare l’esecuzione con gli hook.
- Callback canUseTool: richiedi agli utenti l’approvazione in fase di esecuzione, quando nessun passaggio precedente risolve la chiamata. Vedi Gestire approvazioni e input dell’utente.
Regole di consentimento e negazione
allowed_tools e disallowed_tools (TypeScript: allowedTools / disallowedTools) aggiungono voci agli elenchi di regole di consentimento e negazione nel flusso di valutazione sopra. Le regole di consentimento influiscono solo sull’approvazione: uno strumento non elencato in allowed_tools è ancora disponibile per Claude e passa alla modalità di permesso. Le regole di negazione si comportano diversamente a seconda che denominino uno strumento o limitino un modello all’interno di uno.
Le regole di consentimento accettano glob dei nomi degli strumenti solo dopo un prefisso letterale
mcp__<server>__. Il segmento del server deve essere privo di glob in modo che la regola nomini un server specifico che hai configurato: mcp__puppeteer__* corrisponde a ogni strumento dal server puppeteer e mcp__github__get_* corrisponde ai suoi strumenti get_. Una voce non ancorata come allowed_tools=["*"] o allowed_tools=["mcp__*"] viene ignorata con un avviso di avvio e non approva automaticamente nulla.
Le regole limitate per Read e Edit accettano un modello di percorso. Le regole Edit(path) governano tutti gli strumenti integrati che scrivono file, inclusi Write e NotebookEdit; una regola Write(path) non viene mai abbinata dai controlli di permesso dei file.
Utilizza //path per un percorso del file system assoluto: una regola di negazione di Edit(//secrets/**) blocca le scritture ovunque sotto /secrets su disco. Con una singola barra iniziale, Edit(/secrets/**) si ancora alla fonte della regola. Per le regole passate tramite allowed_tools o disallowed_tools, ciò significa la directory di lavoro della sessione, quindi la regola non blocca /secrets su disco. Vedi Regole Read e Edit per i quattro moduli di ancoraggio e come le regole dai file di impostazioni si risolvono.
Per un agente bloccato, abbina allowedTools con permissionMode: "dontAsk". Gli strumenti elencati vengono approvati, a parte gli strumenti sempre-prompt nella Avvertenza sopra; tutto il resto viene negato completamente invece di richiedere:
.claude/settings.json. Queste regole vengono lette quando la fonte di impostazione project è abilitata, il che è il caso per le opzioni predefinite di query(). Se imposti setting_sources (TypeScript: settingSources) esplicitamente, includi "project" affinché si applichino. Vedi Impostazioni di permesso per la sintassi delle regole.
Modalità di permesso
Le modalità di permesso forniscono un controllo globale su come Claude utilizza gli strumenti. Puoi impostare la modalità di permesso quando chiamiquery() o cambiarla dinamicamente durante le sessioni di streaming.
Modalità disponibili
L’SDK supporta queste modalità di permesso:Impostare la modalità di permesso
Puoi impostare la modalità di permesso una volta all’inizio di una query, o cambiarla dinamicamente mentre la sessione è attiva.- Al momento della query
- Durante lo streaming
Passa
permission_mode (Python) o permissionMode (TypeScript) quando crei una query. Questa modalità si applica per l’intera sessione a meno che non venga modificata dinamicamente.Dettagli della modalità
Modalità accetta modifiche (acceptEdits)
Approva automaticamente le operazioni su file in modo che Claude possa modificare il codice senza richiedere. Altri strumenti (come i comandi Bash che non sono operazioni del filesystem) richiedono comunque i permessi normali.
Operazioni approvate automaticamente:
- Modifiche ai file (strumenti Edit, Write)
- Comandi del filesystem:
mkdir,touch,rm,rmdir,mv,cp,sed
additionalDirectories. I percorsi al di fuori di tale ambito e le scritture su percorsi protetti richiedono comunque una richiesta.
Usare quando: ti fidi delle modifiche di Claude e desideri un’iterazione più veloce, ad esempio durante la prototipazione o quando lavori in una directory isolata.
Modalità non chiedere (dontAsk)
Converte qualsiasi richiesta di permesso in una negazione. Gli strumenti pre-approvati da allowed_tools, regole di consentimento di settings.json o un hook vengono eseguiti normalmente. Gli strumenti del connettore che la tua organizzazione ha impostato su ask e gli strumenti che richiedono l’interazione dell’utente vengono negati anche quando una regola di consentimento corrisponde. Tutto il resto viene negato senza chiamare canUseTool.
Usare quando: desideri una superficie di strumenti fissa ed esplicita per un agente headless e preferisci una negazione definitiva rispetto a un affidamento silenzioso su canUseTool assente.
Modalità ignora permessi (bypassPermissions)
Approva automaticamente tutti gli usi degli strumenti senza richieste. Gli hook vengono comunque eseguiti e possono bloccare le operazioni se necessario.
Modalità piano (plan)
Claude esplora la base di codice e produce un piano senza modificare i tuoi file sorgente. Gli strumenti di sola lettura vengono eseguiti come in modalità predefinita. Le modifiche ai file non vengono mai approvate automaticamente in modalità piano, anche quando una regola di consentimento corrisponde. Richiedono il tuo callback canUseTool invece. Claude può utilizzare AskUserQuestion per chiarire i requisiti prima di finalizzare il piano. Vedi Gestire approvazioni e input dell’utente per gestire queste richieste.
Usare quando: desideri che Claude proponga modifiche senza eseguirle, ad esempio durante la revisione del codice o quando hai bisogno di approvare le modifiche prima che vengano apportate.
Risorse correlate
Per gli altri passaggi nel flusso di valutazione dei permessi:- Gestire approvazioni e input dell’utente: richieste di approvazione interattive e domande di chiarimento
- Guida agli hook: esegui codice personalizzato nei punti chiave del ciclo di vita dell’agente
- Regole di permesso: regole dichiarative di consentimento/negazione in
settings.json