Vai al contenuto principale
Claude Agent SDK fornisce controlli di permesso per gestire come Claude utilizza gli strumenti. Utilizza modalità di permesso e regole per definire cosa è consentito automaticamente, e il callback 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

Modalità di permesso

Applica la modalità di permesso attiva. bypassPermissions approva tutto ciò che raggiunge questo passaggio. acceptEdits approva le operazioni su file. Le altre modalità passano oltre.
4

Regole di consentimento

Controlla le regole allow (da allowed_tools e settings.json). Se una regola corrisponde, lo strumento viene approvato.
5

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.
Diagramma del flusso di valutazione dei permessi Questa pagina si concentra su regole di consentimento e negazione e modalità di permesso. Per gli altri passaggi:

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.
OpzioneEffetto
allowed_tools=["Read", "Grep"]Read e Grep vengono approvati automaticamente. Gli strumenti non elencati qui esistono ancora e passano alla modalità di permesso e canUseTool.
disallowed_tools=["Bash"]La definizione dello strumento Bash viene rimossa dalla richiesta. Claude non vede lo strumento e non può tentarlo.
disallowed_tools=["Bash(rm *)"]Bash rimane disponibile. Le chiamate corrispondenti a rm * vengono negate in ogni modalità di permesso, inclusa bypassPermissions. Altre chiamate Bash passano alla modalità di permesso.
Per un agente bloccato, abbina allowedTools con permissionMode: "dontAsk". Gli strumenti elencati vengono approvati; tutto il resto viene negato completamente invece di richiedere:
const options = {
  allowedTools: ["Read", "Glob", "Grep"],
  permissionMode: "dontAsk"
};
allowed_tools non vincola bypassPermissions. allowed_tools pre-approva solo gli strumenti che elenchi. Gli strumenti non elencati non vengono abbinati da alcuna regola di consentimento e passano alla modalità di permesso, dove bypassPermissions li approva. Impostare allowed_tools=["Read"] insieme a permission_mode="bypassPermissions" approva comunque ogni strumento, inclusi Bash, Write e Edit. Se hai bisogno di bypassPermissions ma vuoi bloccare strumenti specifici, usa disallowed_tools.
Puoi anche configurare regole di consentimento, negazione e richiesta in modo dichiarativo in .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 chiami query() o cambiarla dinamicamente durante le sessioni di streaming.

Modalità disponibili

L’SDK supporta queste modalità di permesso:
ModalitàDescrizioneComportamento dello strumento
defaultComportamento di permesso standardNessuna approvazione automatica; gli strumenti non abbinati attivano il tuo callback canUseTool
dontAskNega invece di richiedereQualsiasi cosa non pre-approvata da allowed_tools o regole viene negata; canUseTool non viene mai chiamato
acceptEditsAccetta automaticamente le modifiche ai fileLe modifiche ai file e le operazioni del filesystem (mkdir, rm, mv, ecc.) vengono approvate automaticamente
bypassPermissionsIgnora tutti i controlli di permessoTutti gli strumenti vengono eseguiti senza richieste di permesso (usare con cautela)
planModalità di pianificazioneGli strumenti di sola lettura vengono eseguiti; Claude analizza e pianifica senza modificare i tuoi file sorgente
auto (solo TypeScript)Approvazioni classificate dal modelloUn classificatore di modello approva o nega ogni chiamata di strumento. Vedi Modalità Auto per la disponibilità
Eredità del subagente: Quando il genitore utilizza bypassPermissions, acceptEdits o auto, tutti i subagenti ereditano quella modalità e non può essere sovrascritta per subagente. I subagenti possono avere prompt di sistema diversi e comportamento meno vincolato rispetto al tuo agente principale, quindi ereditare bypassPermissions concede loro accesso completo e autonomo al sistema senza alcuna richiesta di approvazione.

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.
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.
import asyncio
from claude_agent_sdk import query, ClaudeAgentOptions


async def main():
    async for message in query(
        prompt="Help me refactor this code",
        options=ClaudeAgentOptions(
            permission_mode="default",  # Set the mode here
        ),
    ):
        if hasattr(message, "result"):
            print(message.result)


asyncio.run(main())

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
Entrambi si applicano solo ai percorsi all’interno della directory di lavoro o 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. 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.
Usare con estrema cautela. Claude ha accesso completo al sistema in questa modalità. Usare solo in ambienti controllati in cui ti fidi di tutte le operazioni possibili.allowed_tools non vincola questa modalità. Ogni strumento viene approvato, non solo quelli che hai elencato. Le regole di negazione (disallowed_tools), le regole esplicite ask e gli hook vengono valutati prima del controllo della modalità e possono comunque bloccare uno strumento.

Modalità piano (plan)

Limita Claude agli strumenti di sola lettura. Claude può leggere file ed eseguire comandi shell di sola lettura per esplorare la base di codice ma non modifica i tuoi file sorgente. 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: