- Tenere fuori i mod propri degli utenti, con o senza mod vostri: Impedire il caricamento dei mod installati dagli utenti
- Vedere cosa ottengono i vostri utenti quando non cambiate nulla: Sapere cosa accade per impostazione predefinita
- Lasciare i mod attivi con altri limiti: Scegliere quanto consentire
Questi casi sono trattati in altre pagine:
- Non avete mai distribuito impostazioni gestite prima: iniziate con Distribuire impostazioni gestite
- Volete controllare quali plugin gli utenti possono installare: vedere Gestire i plugin per la vostra organizzazione
Impedire il caricamento dei mod installati dagli utenti
Per impedire il caricamento di ogni mod che i vostri utenti portano, impostate l’opzioneallowManagedModsOnly sulla guardia incorporata, un mod di politica che Claude Code carica prima di ogni mod che un utente installa. L’opzione va nelle impostazioni gestite sotto pluginConfigs, con chiave cc-plugin-sec-default@builtin:
managed-settings.json
- Nessun mod che un utente porta viene caricato: questo copre un mod in un plugin che l’utente ha installato, un mod caricato con
--plugin-dir, e un mod che Claude ha scritto durante una sessione - I mod della vostra organizzazione continuano a caricarsi: un mod che conta come della vostra organizzazione non viene controllato. Ogni altro mod conta come di un utente e non viene caricato. Questo include un mod in un plugin che abilitate da un marketplace GitHub o altro remoto, e uno che la vostra organizzazione attiva per i suoi membri su claude.ai. Se nessuno conta come vostro, nessun mod installato viene caricato.
- Gli utenti non possono annullarlo: la guardia legge l’opzione solo dalle impostazioni gestite, quindi la stessa voce in un file di impostazioni utente, progetto o locale, o in un file passato con
--settings, non cambia nulla - Un file o una politica MDM copre ogni provider: quando consegnate l’opzione come file o tramite MDM, funziona allo stesso modo su Amazon Bedrock, Agent Platform di Google Cloud e Microsoft Foundry. Per la consegna dalla console di amministrazione di claude.ai, vedere Disponibilità della piattaforma
- Le altre personalizzazioni degli utenti continuano a funzionare: i loro hook nei file di impostazioni, le righe di stato e
/goalnon sono interessati - I mod incorporati continuano a funzionare: i mod incorporati in Claude Code, come il supporto
AGENTS.md, hanno ciascuno il loro interruttore
--plugin-dir e il percorso di una directory che contiene un mod, come claude --plugin-dir ./first-mod. Gli hook del mod non vengono eseguiti, e la trascrizione e il log di debug hanno il messaggio della guardia, che nomina il mod e allowManagedModsOnly. Se il mod viene caricato, vedere Verificare che una politica sia in vigore e le regole che decidono se un’opzione ha effetto.
Se avete impostato CLAUDE_CODE_ENABLE_FUNCTION_HOOKS a 0 durante l’accesso anticipato, sostituirlo con questa opzione. Claude Code v2.1.287 e versioni successive ignora la variabile a qualsiasi valore, quindi uno 0 lì lascia i mod attivi.
Sapere cosa accade per impostazione predefinita
Senza impostazioni mod proprie, questo è quello che i vostri utenti ottengono:-
I mod sono attivi. Un utente può installare un plugin che contiene un mod da qualsiasi marketplace che le vostre impostazioni di plugin consentono, o caricarne uno da una directory con
--plugin-dir. -
Una guardia incorporata viene eseguita per prima. Claude Code carica un mod incorporato denominato
sec-default@builtinprima di ogni mod che un utente installa. Gli utenti non possono disattivarla./plugine il log di debug la elencano comecc-plugin-sec-default. La guardia viene caricata quando una di queste è vera:- La macchina ha impostazioni gestite
- L’utente è connesso a Claude Code con un piano Team o Enterprise
-
La guardia protegge quello che gestite. Un mod di un utente non può cambiare quello che i vostri hook gestiti ricevono o decidono, il prompt di sistema, il vostro
CLAUDE.mdgestito e altre istruzioni gestite, quello che qualsiasi mod legge come impostazioni, o gli strumenti e le descrizioni dei vostri server MCP gestiti. - Tutto il resto è consentito. La guardia non aggiunge altre restrizioni. Un mod di un utente può comunque leggere e scrivere file, avviare processi, fare richieste di rete, riscrivere chiamate di strumenti e prompt, negare una chiamata di strumento, approvare una che altrimenti richiederebbe un prompt, e disegnare nell’interfaccia, tutto con i permessi di quell’utente.
-
Le regole di negazione e i vostri hook gestiti hanno la precedenza. Dove la guardia viene caricata, un mod di un utente non può approvare una chiamata che una regola
denyrifiuta, indipendentemente da quale file di impostazioni contiene la regola. Un blocco da un hookPreToolUsenelle impostazioni gestite è definitivo anche. Entrambi si applicano alle chiamate di strumenti di Claude. Nessuno si applica alle chiamate proprie di un mod$.fse$.process: conRead(.env)negato, un mod può comunque leggere quel file con$.fs.reado avviare un programma che lo fa. Per limitare quelle chiamate, impedire al mod di caricarsi o agganciare la chiamata in un mod di politica. -
Altri controlli di permesso possono essere ignorati. Un mod di un utente che approva le chiamate di strumenti può approvare una chiamata che una regola
askrichiederebbe un prompt, o che un hookPreToolUseal di fuori delle impostazioni gestite ha bloccato. In modalità automatica, una chiamata che il mod approva viene eseguita senza un controllo del classificatore.
mods/sec-default del repository di Claude Code.
Sapere quali controlli si applicano ancora
I mod non sostituiscono i controlli che avete già:- Gli hook di impostazioni continuano a funzionare. Gli hook di comando, HTTP, prompt e agente nei file di impostazioni e nel
hooks/hooks.jsondei plugin vengono eseguiti come prima, insieme ai mod. Nulla di loro è deprecato. - Le regole di negazione hanno la precedenza dove la guardia viene caricata. Un mod di un utente non può approvare una chiamata che una regola
denyrifiuta, a meno che non impostiateallowModsToOverrideDenyRules. - Gli hook gestiti vengono eseguiti per primi. Un hook
PreToolUsenelle impostazioni gestite viene eseguito prima che qualsiasi mod veda la chiamata di strumento, e il suo blocco è definitivo. Se un mod poi riscrive la chiamata, i vostri hook gestiti vengono eseguiti di nuovo sulla chiamata riscritta, quindi un blocco si applica comunque. Gli hookPreToolUseda altri file di impostazioni e dai plugin vengono eseguiti dopo l’ultimo mod, quindi un mod che restituisce il suo proprio risultato al posto di eseguire lo strumento impedisce a quelli di funzionare. Vedere L’ordine in cui i mod vengono eseguiti. - La politica di rete copre
$.http.fetch. Se la vostra organizzazione disattiva il recupero web, o il traffico di rete non essenziale è disattivato per la sessione, Claude Code rifiuta una richiesta di rete che un mod fa con$.http.fetch. La politica non copre un programma che il mod avvia con$.process.run. Quel programma raggiunge la rete con l’accesso proprio dell’utente. - I controlli dei plugin coprono i mod. Un mod è un plugin, quindi le impostazioni che limitano quello che gli utenti possono installare, come
strictKnownMarketplaces, decidono se può essere installato affatto. - I mod non possono cambiare il prompt di permesso. Un mod può ridisegnare gran parte dell’interfaccia di Claude Code, ma non il prompt di permesso, quindi non può cambiare quello che un prompt mostra. Un mod può comunque approvare o negare una chiamata di strumento prima che il prompt appaia, come Sapere cosa accade per impostazione predefinita descrive.
- I prompt di fiducia vengono per primi. In una sessione interattiva in una directory che l’utente non ha ancora fiducia, nessun mod viene caricato finché non rispondono al prompt di fiducia.
--safe-modedisattiva i mod installati, inclusi i vostri. Avviate una sessione conclaude --safe-modeper verificare se un mod ha causato un problema.
Decidere se lasciare i mod attivi
Un mod può fare più di altre parti di un plugin perché viene eseguito all’interno di Claude Code. Vede ogni prompt e chiamata di strumento, può cambiarli, e può consentire o negare una chiamata di strumento prima che un prompt di permesso appaia. Quello che un utente può caricare come mod dipende dai controlli dei plugin che avete già:
Gestire i plugin per la vostra organizzazione elenca ogni modo in cui un plugin viene caricato e l’impostazione che controlla ciascuno.
Per controllare i mod in un marketplace prima che i vostri utenti li installino, vedere Esaminare cosa può fare un mod. Per tenere fuori i mod degli utenti finché non lo avete fatto, vedere Impedire il caricamento dei mod installati dagli utenti.
Esaminare cosa può fare un mod
Potete vedere cosa un mod è in grado di fare senza eseguirlo. Nel vostro shell, eseguiteclaude plugin validate sulla directory del plugin:
hooks: elenca gli eventi che il mod riceve. La riga calls: elenca i metodi dell’API dei mod che il suo codice chiama. L’API dei mod, scritta $ nel codice di un mod, è come un mod raggiunge file, processi e la rete. Claude Code rifiuta di caricare un mod che usa l’API dei mod in un modo che questo comando non può leggere.
Guardate la riga calls: per questi:
Nella riga
hooks:, tool.call e prompt.submit significano che il mod vede ogni chiamata di strumento e ogni prompt, e può cambiarli. session.append significa che il mod può riscrivere ogni riga della conversazione prima che sia archiviata. ui.render{component=AskUserQuestion} significa che il mod può ridisegnare il dialogo che Claude usa per chiedere all’utente una domanda. tool.check significa che il mod può approvare o negare una chiamata di strumento prima che un prompt di permesso appaia. Sapere cosa accade per impostazione predefinita elenca quale dei vostri regole e hook ha la precedenza sulla sua risposta.
Scegliere quanto consentire
Le politiche dei mod vanno da nessun mod installato affatto a qualsiasi mod che un utente sceglie, con il vostro mod che controlla gli altri, e ognuna è poche impostazioni gestite. Trovate la politica che volete nella prima colonna e impostate quello che la seconda colonna nomina. Distribuire impostazioni gestite copre dove vivono le impostazioni gestite.
Quello che ogni impostazione fa:
allowManagedModsOnly: un’opzione sulla guardia incorporata. I mod propri degli utenti non vengono caricati, e i loro hook di impostazioni, righe di stato e/goalcontinuano a funzionare. Impedire il caricamento dei mod installati dagli utenti elenca quello che copre.allowManagedHooksOnly: un’impostazione più ampia. Solo i mod della vostra organizzazione e i mod incorporati in Claude Code vengono caricati. Un mod che un utente ha installato da solo non lo fa. L’impostazione blocca anche gli hook nei file di impostazioni propri degli utenti. Leggete Quello che viene eseguito sottoallowManagedHooksOnlyprima di impostarla.disableAllHooks: l’impostazione più ampia. Nelle impostazioni gestite, ferma i mod in ogni plugin installato, incluso il vostro, e disattiva ogni hook nei file di impostazioni, quindi un hookPreToolUsenelle vostre impostazioni gestite non blocca più nulla. Le righe di stato personalizzate e/goalsmettono di funzionare anche. LeggetedisableAllHooksprima di impostarla.disableSideloadFlags: rifiuta--plugin-dire--plugin-urlall’avvio, quindi nessuno carica un mod da una directory, e impedisce ai mod che Claude scrive durante una sessione di caricarsi. L’impostazione rifiuta anche--agentse--mcp-config. LeggetedisableSideloadFlagsprima di impostarla.
AGENTS.md, non sono interessati da queste impostazioni. Ognuno ha il suo interruttore.
Un utente il cui mod non è stato caricato trova il motivo nel suo log di debug. Messaggi di rifiuto elenca le righe per allowManagedHooksOnly e disableAllHooks, e Messaggi dalla guardia incorporata ha la riga per allowManagedModsOnly.
Impostare le opzioni sulla guardia incorporata
La guardia incorporata accetta due opzioni. Impostatele nelle impostazioni gestite sottopluginConfigs, con chiave cc-plugin-sec-default@builtin, come l’esempio in Impedire il caricamento dei mod installati dagli utenti fa.
La tabella dà quello che i vostri utenti ottengono con ogni opzione non impostata e con essa impostata a true:
Queste regole decidono se un’opzione ha effetto:
- L’id ha una sola ortografia qui: Claude Code legge le opzioni solo sotto
cc-plugin-sec-default@builtin.prependPluginsaccetta anchesec-default@builtin, epluginConfigsno. - Solo le impostazioni gestite contano: la stessa voce in un file di impostazioni utente, progetto o locale, o in un file passato con
--settings, né imposta un’opzione né ne allenta una - La guardia deve caricarsi: se impostate
prependPlugins, nominate la guardia nella lista. Dove la guardia non viene caricata, nessuna opzione si applica. - La guardia fallisce chiusa: se la guardia non può leggere le impostazioni gestite, rifiuta ogni mod di un utente al caricamento. Se non può controllare le regole di negazione per una chiamata che un mod di un utente ha approvato, rifiuta la chiamata.
Eseguire i mod propri della vostra organizzazione
Potete distribuire mod vostri a ogni utente, scegliere dove vengono eseguiti rispetto ai mod degli utenti, e usarne uno per applicare una politica.Installare i mod della vostra organizzazione e impostare l’ordine
I mod della vostra organizzazione vengono caricati dove i mod degli utenti non lo fanno e possono essere eseguiti prima di loro, quindi Claude Code deve essere in grado di dire che un mod viene da voi. Lo tratta come della vostra organizzazione solo quando tutti questi sono veri:- Le impostazioni gestite
enabledPluginsimpostano il plugin del mod atrue - Le impostazioni gestite nominano il marketplace del plugin come una directory sulla macchina dell’utente, per percorso assoluto. Una voce
extraKnownMarketplacesfa questo e registra il marketplace per l’utente anche. - Il marketplace elenca il plugin per un percorso relativo, quindi Claude Code lo carica in place da quella directory
/opt/acme/claude-plugins/.claude-plugin/marketplace.json
enabledPlugins lo abilitano. Questo copre ogni plugin da una fonte GitHub, git, URL o npm. Il suo mod viene eseguito tra i mod degli utenti, prependPlugins e appendPlugins lo saltano, e non viene caricato sotto allowManagedModsOnly o allowManagedHooksOnly. Il log di debug dell’utente ha una riga che inizia con l’id del plugin e is enabled by managed settings, but.
Claude Code genera un evento ogni volta che sta per agire, come eseguire uno strumento, e lo passa a ogni mod a turno. Un mod che conta come vostro viene eseguito prima dei mod degli utenti anche quando non lo elencate da nessuna parte. Per impostare il suo posto, elencate il suo id in una di due impostazioni. L’id è il nome del plugin, @, e il nome del marketplace, come acme-guard@acme-tools.
prependPlugins: il vostro mod vede ogni evento prima di qualsiasi mod di un utente e ogni risultato dopo. Può cambiare l’evento, rifiutarlo, o saltare i mod degli utenti.appendPlugins: il vostro mod viene eseguito dopo ogni mod di un utente, quindi vede solo gli eventi che quei mod passano, nella forma che li passano
acme-tools a /opt/acme/claude-plugins, abilita acme-guard da esso, e esegue quel mod per primo, con la guardia incorporata dopo:
managed-settings.json
extraKnownMarketplaces: nomina la directory che contiene il marketplaceacme-tools.pathè il percorso assoluto della directory che contiene.claude-plugin/marketplace.json.enabledPlugins: attivaacme-guardper ogni utente che riceve queste impostazioni gestiteprependPlugins: metteacme-guardper primo e la guardia incorporata per secondo, entrambi prima di qualsiasi mod che un utente installa. Claude Code segue l’ordine che elencate.
claude --debug e cercate nel log di debug l’id del mod:
hooks module acme-guard@acme-tools loaded, contier prepend: il mod conta come della vostra organizzazione e viene eseguito per primo- La stessa riga con
tier user: Claude Code lo tratta come un mod di un utente. Una seconda riga,prependPlugins names acme-guard@acme-tools, which is not an enabled managed plugin with a hooks module; skipped, dice che la lista lo ha saltato.
- La lista sostituisce il valore predefinito: quando impostate
prependPluginsnelle impostazioni gestite, nominatesec-default@builtinin essa per mantenere la guardia incorporata. La guardia è incorporata e non ha bisogno di una voceenabledPlugins. - I vostri id devono contare come vostri: nelle impostazioni gestite, Claude Code salta un id il cui plugin non soddisfa le tre condizioni per un mod di un’organizzazione
- I repository non possono impostarli: Claude Code legge entrambe le impostazioni dalle impostazioni gestite e mai da un file di impostazioni di un repository. Un utente può impostarli in
~/.claude/settings.jsonper ordinare i loro mod propri solo su una macchina senza impostazioni gestite, e solo quando non sono connessi con un piano Team o Enterprise. Ovunque altro, Claude Code ignora entrambe le chiavi nelle impostazioni dell’utente. Una lista lì né aggiunge né rimuove la guardia incorporata.
Applicare una politica con un mod vostro
Per tenere fuori ogni mod di un utente, non avete bisogno di un mod vostro. ImpostateallowManagedModsOnly. Scrivete un mod di politica quando volete ammettere alcuni mod degli utenti e rifiutarne altri, o per registrare quello che i mod fanno.
Ogni volta che un altro mod sta per caricarsi, il vostro mod riceve la lista che claude plugin validate stampa, in un evento denominato plugin.register. Un mod in prependPlugins può leggere quella lista e rifiutare il mod. Può anche agganciare qualsiasi chiamata dell’API dei mod per nome per registrare o rifiutare quella chiamata per ogni altro mod. Il nome è il metodo senza il $., quindi un aggancio su fs.write vede ogni chiamata $.fs.write.
Questo mod di politica rifiuta qualsiasi mod di un utente il cui codice proprio chiama $.process.run o $.process.spawn. Mantiene anche un log di audit, scrivendo ogni chiamata di strumento e ogni file che un mod scrive nel log di debug. Poiché viene eseguito per primo, il log registra quello che è stato richiesto, prima che qualsiasi mod di un utente lo cambi. Salvate come acme-guard/hooks/register.js:
acme-guard/hooks/register.js
plugin.register: decide se un altro mod viene caricato. Rifiuta un mod di un utente che chiama un metodo bloccato e passa ogni altro mod.tool.call: scrive una riga comeaudit tool.call Bashnel log di debug per ogni chiamata di strumento, e non cambia nullafs.write: scrive una riga comeaudit fs.write by reader "/tmp/notes.md"per ogni chiamata$.fs.writeche un altro mod fa, e non cambia nulla. Il nome del mod viene per primo e il percorso è tra virgolette, quindi un percorso che un mod sceglie non può passare per un altro campo della riga.
plugin.register legge due campi dell’evento:
e.tier: dove il mod verrebbe eseguito, uno diprepend,user,append, obuiltin. Ogni mod che una persona installa èuser.e.uses.calls: i metodi dell’API dei mod che il mod chiama, ognuno scrittonamespace.methodcomeprocess.run, senza il$.checlaude plugin validatestampa
$.process.run, il mod non viene caricato, e il suo log di debug ha una riga che termina con refused by acme-guard: e il vostro motivo. Il rifiuto raggiunge anche la trascrizione in una sessione che ricarica a caldo una directory di plugin. Per bloccare una chiamata senza rifiutare l’intero mod, restituite { deny: 'your reason' } da un aggancio sul nome di quella chiamata.
Per inviare le righe di audit da qualche parte diversa dal log di debug, chiamate $.http.fetch dagli stessi hook.
Una sessione può funzionare senza il vostro mod. Se il thread di lavoro che esegue i mod installati si arresta tre volte, Claude Code scarica ogni mod che non è incorporato, incluso il vostro, finché l’utente non esegue /reload-plugins o non avvia una nuova sessione. E un utente che avvia Claude Code con --safe-mode viene eseguito senza mod installati, incluso il vostro.
Creare un mod copre i file che un mod ha bisogno. Testare un mod che giudica altri mod ha un file di test per questo mod di politica.
Rifiutare i mod quando il vostro controllo fallisce
Se il vostro hookplugin.register genera un’eccezione o supera il suo limite di tempo, Claude Code salta l’hook, quindi il controllo fallisce aperto e il mod che stava controllando viene caricato. Per fallire chiuso e rifiutare i mod degli utenti, spostate il controllo in una funzione denominata e aggiungete un gestore .catch che restituisce il rifiuto. Questa versione del file mostra solo l’hook plugin.register, quindi mantenete i due hook di audit dalla prima versione in register:
acme-guard/hooks/register.js
refused by acme-guard: Acme policy check failed, so this mod was not loaded. Il gestore passa ogni mod al di fuori del tier user a next(e), quindi un controllo fallito non ferma i mod che la vostra organizzazione elenca. Gestire un hook che fallisce copre .catch per altri eventi.
Prossimi passi
- Sicurezza dei plugin: quello che qualsiasi plugin può fare sulla macchina di un utente, e come esaminarne uno prima che sia installato
- Panoramica dei mod: cosa è un mod e come si confronta con hook, skills e server MCP
- L’ordine in cui i mod vengono eseguiti: come
prependPluginseappendPluginssi adattano ai mod degli utenti - Impostazioni e variabili di ambiente: ogni impostazione nominata su questa pagina in una tabella