2> Fetch the complete documentation index at: https://code.claude.com/docs/llms.txt2> Fetch the complete documentation index at: https://code.claude.com/docs/llms.txt
3> Use this file to discover all available pages before exploring further.3> Use this file to discover all available pages before exploring further.
4 4
5# Administrar mods para su organización5# Administra los mods de tu organización
6 6
7> Controle los mods de Claude Code con configuración administrada: detenga los mods instalados por usuarios, permita solo los suyos, revise qué puede hacer un mod e implemente políticas con su propio mod.7> Controla los mods de Claude Code con la configuración administrada: detén los mods instalados por los usuarios, permite solo los tuyos, revisa lo que puede hacer un mod y aplica políticas con tu propio mod.
8 8
9Un [mod](/docs/es/plugins/mods/overview) es un plugin que ejecuta código dentro de Claude Code con los permisos del usuario que lo instaló. Los mods no están sandboxed. A través de [configuración administrada](/docs/es/managed-settings), usted decide si los mods se ejecutan en las máquinas de sus usuarios, cuáles y en qué orden. También puede instalar un mod propio que supervise o rechace lo que hacen otros mods.9Un [mod](/docs/es/plugins/mods/overview) es un plugin que ejecuta código dentro de Claude Code con los permisos del usuario que lo instaló. Los mods no están en un sandbox. A través de la [configuración administrada](/docs/es/managed-settings), decides si los mods se ejecutan en las máquinas de tus usuarios, cuáles y en qué orden. También puedes instalar un mod propio que observe o rechace lo que hacen otros mods.
10 10
11Esta página es para la persona que implementa la configuración administrada para Claude Code, ya sea como archivo, a través de MDM o desde la consola de administrador de claude.ai. Los mods están activados de forma predeterminada en Claude Code v2.1.287 y posteriores. Comience con la sección que coincida con lo que vino a hacer:11Esta página es para la persona que implementa la configuración administrada de Claude Code, ya sea como archivo, mediante MDM o desde la consola de administración de claude.ai. Los mods están activados de forma predeterminada en Claude Code v2.1.287 y versiones posteriores. Empieza por la sección que corresponda a lo que viniste a hacer:
12 12
13* **Mantenga los mods propios de los usuarios fuera, con o sin mods propios**: [Detenga la carga de mods instalados por usuarios](#stop-user-installed-mods-from-loading)13* **Mantener fuera los mods propios de los usuarios, con o sin mods tuyos**: [Evita que se carguen los mods instalados por los usuarios](#stop-user-installed-mods-from-loading)
14* **Vea qué obtienen sus usuarios cuando no cambia nada**: [Sepa qué sucede de forma predeterminada](#know-what-happens-by-default)14* **Ver lo que obtienen tus usuarios si no cambias nada**: [Conoce lo que sucede de forma predeterminada](#know-what-happens-by-default)
15* **Deje los mods activados con otras limitaciones**: [Elija cuánto permitir](#choose-how-much-to-allow)15* **Dejar los mods activados con otros límites**: [Elige cuánto permitir](#choose-how-much-to-allow)
16 16
17<Note>17<Note>
18 Estos casos se tratan en otras páginas:18 Estos casos se tratan en otras páginas:
19 19
20 * **No ha implementado la configuración administrada antes**: comience con [Implementar configuración administrada](/docs/es/managed-settings)20 * **Nunca has implementado la configuración administrada**: empieza con [Implementa la configuración administrada](/docs/es/managed-settings)
21 * **Desea controlar qué plugins pueden instalar los usuarios**: consulte [Administrar plugins para su organización](/docs/es/plugins/org)21 * **Quieres controlar qué plugins pueden instalar los usuarios**: consulta [Administra los plugins de tu organización](/docs/es/plugins/org)
22</Note>22</Note>
23 23
24<h2 id="stop-user-installed-mods-from-loading">24<h2 id="stop-user-installed-mods-from-loading">
25 Detenga la carga de mods instalados por usuarios25 Impedir que se carguen los mods instalados por los usuarios
26</h2>26</h2>
27 27
28Para evitar que se cargue cada mod que traen sus usuarios, establezca la opción `allowManagedModsOnly` en el [guard integrado](#know-what-happens-by-default), un mod de política que Claude Code carga antes de cada mod que instala un usuario. La opción va en la configuración administrada bajo `pluginConfigs`, con clave `cc-plugin-sec-default@builtin`:28Para evitar que se cargue cualquier mod que traigan tus usuarios, establece la opción `allowManagedModsOnly` en la [protección integrada](#know-what-happens-by-default), un mod de políticas que Claude Code carga antes que cualquier mod que instale un usuario. La opción va en la configuración administrada dentro de `pluginConfigs`, con la clave `cc-plugin-sec-default@builtin`:
29 29
30```json managed-settings.json theme={null}30```json managed-settings.json theme={null}
31{31{
41 41
42Con la opción establecida en la configuración administrada:42Con la opción establecida en la configuración administrada:
43 43
44* **Ningún mod que traiga un usuario se carga**: eso cubre un mod en un plugin que el usuario instaló, un mod cargado con `--plugin-dir`, y un mod [que Claude escribió durante una sesión](/docs/es/plugins/mods/create#ask-claude-for-a-mod)44* **No se carga ningún mod que traiga un usuario**: eso abarca un mod en un plugin que el usuario instaló, un mod cargado con `--plugin-dir` y un mod que [Claude escribió durante una sesión](/docs/es/plugins/mods/create#ask-claude-for-a-mod)
45* **Los mods de su organización aún se cargan**: un mod que [cuenta como de su organización](#install-your-organizations-mods) no se verifica. Todos los demás mods cuentan como de un usuario y no se cargan. Eso incluye un mod en un plugin que habilita desde un marketplace remoto de GitHub u otro, y uno que su organización activa para sus miembros en claude.ai. Si ninguno cuenta como suyo, no se carga ningún mod instalado.45* **Los mods de tu organización se siguen cargando**: un mod que [cuenta como de tu organización](#install-your-organizations-mods) no se revisa. Cualquier otro mod cuenta como de un usuario y no se carga. Eso incluye un mod en un plugin que habilitas desde GitHub u otro marketplace remoto, y uno que tu organización activa para sus miembros en claude.ai. Si ninguno cuenta como tuyo, no se carga ningún mod instalado.
46* **Los usuarios no pueden deshacerlo**: el guard lee la opción solo de la configuración administrada, por lo que la misma entrada en un archivo de configuración de usuario, proyecto o local, o en un archivo pasado con `--settings`, no cambia nada46* **Los usuarios no pueden revertirlo**: la protección lee la opción solo desde la configuración administrada, así que la misma entrada en un archivo de configuración de usuario, de proyecto o local, o en un archivo pasado con `--settings`, no cambia nada
47* **Un archivo o política MDM cubre cada proveedor**: cuando entrega la opción como archivo o a través de MDM, funciona de la misma manera en Amazon Bedrock, Agent Platform de Google Cloud y Microsoft Foundry. Para la entrega desde la consola de administrador de claude.ai, consulte [Disponibilidad de plataforma](/docs/es/server-managed-settings#platform-availability)47* **Un archivo o una política de MDM cubre a todos los proveedores**: cuando entregas la opción como archivo o mediante MDM, funciona igual en Amazon Bedrock, Agent Platform de Google Cloud y Microsoft Foundry. Para la entrega desde la consola de administración de claude.ai, consulta [Disponibilidad por plataforma](/docs/es/server-managed-settings#platform-availability)
48* **Las personalizaciones de otros usuarios siguen funcionando**: sus [hooks en archivos de configuración](/docs/es/hooks), líneas de estado y `/goal` no se ven afectados48* **Las demás personalizaciones de los usuarios siguen funcionando**: sus [hooks en archivos de configuración](/docs/es/hooks), sus líneas de estado y `/goal` no se ven afectados
49* **Los mods integrados siguen ejecutándose**: los mods integrados en Claude Code, como el soporte de `AGENTS.md`, cada uno tiene [su propio interruptor](/docs/es/plugins/mods/overview#mods-built-into-claude-code)49* **Los mods integrados siguen ejecutándose**: los mods integrados en Claude Code, como el soporte de `AGENTS.md`, tienen cada uno [su propio interruptor](/docs/es/plugins/mods/overview#mods-built-into-claude-code)
50 50
51Para confirmar la opción en la máquina de un usuario, inicie Claude Code allí con `--plugin-dir` y la ruta de un directorio que contenga un mod, como `claude --plugin-dir ./first-mod`. Los hooks del mod no se ejecutan, y la transcripción y el registro de depuración tienen el [mensaje del guard](/docs/es/plugins/mods/troubleshoot#messages-from-the-built-in-guard), que nombra el mod y `allowManagedModsOnly`. Si el mod se carga, consulte [Verifique que una política esté en vigor](/docs/es/managed-settings#check-that-a-policy-is-in-force) y las [reglas que deciden si una opción tiene efecto](#set-options-on-the-built-in-guard).51Para confirmar la opción en la máquina de un usuario, inicia Claude Code allí con `--plugin-dir` y la ruta de un directorio que contenga un mod, como `claude --plugin-dir ./first-mod`. Los hooks del mod no se ejecutan, y la transcripción y el registro de depuración muestran el [mensaje de la protección](/docs/es/plugins/mods/troubleshoot#messages-from-the-built-in-guard), que nombra el mod y `allowManagedModsOnly`. Si el mod se carga, consulta [Comprobar que una política está en vigor](/docs/es/managed-settings#check-that-a-policy-is-in-force) y las [reglas que deciden si una opción surte efecto](#set-options-on-the-built-in-guard).
52 52
53Si estableció `CLAUDE_CODE_ENABLE_FUNCTION_HOOKS` en `0` durante el acceso temprano, reemplácelo con esta opción. Claude Code v2.1.287 y posteriores ignora la variable en cualquier valor, por lo que un `0` allí deja los mods activados.53Si estableciste `CLAUDE_CODE_ENABLE_FUNCTION_HOOKS` en `0` durante el acceso anticipado, reemplázala con esta opción. Claude Code v2.1.287 y posteriores ignoran la variable con cualquier valor, así que un `0` en ella deja los mods activados.
54 54
55<h2 id="know-what-happens-by-default">55<h2 id="know-what-happens-by-default">
56 Sepa qué sucede de forma predeterminada56 Conoce lo que ocurre de forma predeterminada
57</h2>57</h2>
58 58
59Sin configuración de mods propia, esto es lo que obtienen sus usuarios:59Sin ninguna configuración de mods propia, esto es lo que obtienen tus usuarios:
60 60
61* **Los mods están activados.** Un usuario puede instalar un plugin que contenga un mod desde cualquier marketplace que su configuración de plugins permita, o cargar uno desde un directorio con `--plugin-dir`.61* **Los mods están activados.** Un usuario puede instalar un plugin que contenga un mod desde cualquier marketplace que permita tu configuración de plugins, o cargar uno desde un directorio con `--plugin-dir`.
62* **Un guard integrado se ejecuta primero.** Claude Code carga un mod integrado llamado `sec-default@builtin` antes de cada mod que instala un usuario. Los usuarios no pueden desactivarlo. `/plugin` y el registro de depuración lo enumeran como `cc-plugin-sec-default`. El guard se carga cuando cualquiera de estos es verdadero:62* **Una protección integrada se ejecuta primero.** Claude Code carga un mod integrado llamado `sec-default@builtin` antes de cada mod que instala un usuario. Los usuarios no pueden desactivarlo. `/plugin` y el registro de depuración lo muestran como `cc-plugin-sec-default`. La protección se carga cuando se cumple cualquiera de estas condiciones:
63 63
64 * La máquina tiene configuración administrada64 * La máquina tiene configuración administrada
65 * El usuario ha iniciado sesión en Claude Code con un plan de Team o Enterprise65 * El usuario ha iniciado sesión en Claude Code con un plan Team o Enterprise
66 66
67 Un usuario que se autentica con una clave API, o a través de Amazon Bedrock, Agent Platform de Google Cloud o Microsoft Foundry, obtiene el guard solo en una máquina que tiene configuración administrada.67 Un usuario que se autentica con una clave de API, o mediante Amazon Bedrock, Agent Platform de Google Cloud o Microsoft Foundry, obtiene la protección solo en una máquina que tenga configuración administrada.
68* **El guard protege lo que usted administra.** El mod de un usuario no puede cambiar lo que sus hooks administrados reciben o deciden, el prompt del sistema, su `CLAUDE.md` administrado y otras instrucciones administradas, lo que cualquier mod lee como configuración, o las herramientas y descripciones de sus servidores MCP administrados.68* **La protección resguarda lo que administras.** El mod de un usuario no puede cambiar lo que reciben o deciden tus hooks administrados, el prompt del sistema, tu `CLAUDE.md` administrado y otras instrucciones administradas, lo que cualquier mod lee como configuración, ni las herramientas y descripciones de tus servidores MCP administrados.
69* **Todo lo demás está permitido.** El guard no agrega otras restricciones. El mod de un usuario aún puede leer y escribir archivos, iniciar procesos, hacer solicitudes de red, reescribir llamadas de herramientas y prompts, negar una llamada de herramienta, aprobar una que de otro modo solicitaría, y dibujar en la interfaz, todo con los permisos de ese usuario.69* **Todo lo demás está permitido.** La protección no añade ninguna otra restricción. El mod de un usuario aún puede leer y escribir archivos, iniciar procesos, hacer solicitudes de red, reescribir llamadas a herramientas y prompts, denegar una llamada a herramienta, aprobar una que de otro modo pediría confirmación y dibujar en la interfaz, todo con los permisos de ese usuario.
70* **Las reglas de negación y sus hooks administrados tienen prioridad.** Donde se carga el guard, el mod de un usuario no puede aprobar una llamada que una regla `deny` rechaza, cualquiera que sea el archivo de configuración que contenga la regla. Un bloqueo de un hook `PreToolUse` en la configuración administrada también es final. Ambos se aplican a las llamadas de herramientas de Claude. Ninguno se aplica a las llamadas propias de [`$.fs` y `$.process` de un mod](/docs/es/plugins/mods/api#reach-files-processes-and-the-network): con `Read(.env)` denegado, un mod aún puede leer ese archivo con `$.fs.read` o iniciar un programa que lo haga. Para limitar esas llamadas, evite que el mod se cargue o enganche la llamada en un [mod de política](#enforce-a-policy-with-a-mod-of-your-own).70* **Las reglas de denegación y tus hooks administrados tienen precedencia.** Donde se carga la protección, el mod de un usuario no puede aprobar una llamada que rechaza una regla `deny`, sin importar qué archivo de configuración contenga la regla. Un bloqueo de un hook `PreToolUse` en la configuración administrada también es definitivo. Ambos se aplican a las llamadas a herramientas de Claude. Ninguno se aplica a las propias [llamadas `$.fs` y `$.process`](/docs/es/plugins/mods/api#reach-files-processes-and-the-network) de un mod: con `Read(.env)` denegado, un mod aún puede leer ese archivo con `$.fs.read` o iniciar un programa que lo haga. Para limitar esas llamadas, impide que el mod se cargue o gestiona la llamada en un [mod de políticas](#enforce-a-policy-with-a-mod-of-your-own).
71* **Otras comprobaciones de permisos pueden ser anuladas.** El mod de un usuario que aprueba llamadas de herramientas puede aprobar una llamada que una regla `ask` solicitaría, o que un hook `PreToolUse` fuera de la configuración administrada bloqueó. En modo automático, una llamada que el mod aprueba se ejecuta sin una comprobación de clasificador.71* **Otras comprobaciones de permisos pueden anularse.** El mod de un usuario que aprueba llamadas a herramientas puede aprobar una llamada para la que una regla `ask` pediría confirmación, o que un hook `PreToolUse` fuera de la configuración administrada bloqueó. En modo automático, una llamada que el mod aprueba se ejecuta sin una comprobación del clasificador.
72 72
73El código fuente del guard es público en el [directorio `mods/sec-default` del repositorio de Claude Code](https://github.com/anthropics/claude-code/tree/main/mods/sec-default).73El código fuente de la protección es público en el [directorio `mods/sec-default` del repositorio de Claude Code](https://github.com/anthropics/claude-code/tree/main/mods/sec-default).
74 74
75<h3 id="know-which-controls-still-apply">75<h3 id="know-which-controls-still-apply">
76 Sepa qué controles aún se aplican76 Conoce qué controles siguen aplicándose
77</h3>77</h3>
78 78
79Los mods no reemplazan los controles que ya tiene:79Los mods no reemplazan los controles que ya tienes:
80 80
81* **Los hooks de configuración siguen funcionando.** Los hooks de comando, HTTP, prompt y agente en archivos de configuración y en `hooks/hooks.json` de plugins se ejecutan como antes, junto con mods. Nada sobre ellos está deprecado.81* **Los hooks de configuración siguen funcionando.** Los hooks de comando, HTTP, prompt y agente en los archivos de configuración y en el `hooks/hooks.json` de los plugins se ejecutan como antes, junto con los mods. Nada de ellos está obsoleto.
82* **Las reglas de negación tienen prioridad donde se carga el guard.** El mod de un usuario no puede aprobar una llamada que una regla `deny` rechaza, a menos que establezca [`allowModsToOverrideDenyRules`](#set-options-on-the-built-in-guard).82* **Las reglas de denegación tienen precedencia donde se carga la protección.** El mod de un usuario no puede aprobar una llamada que rechaza una regla `deny`, a menos que configures [`allowModsToOverrideDenyRules`](#set-options-on-the-built-in-guard).
83* **Los hooks administrados se ejecutan primero.** Un hook `PreToolUse` en la configuración administrada se ejecuta antes de que cualquier mod vea la llamada de herramienta, y su bloqueo es final. Si un mod luego reescribe la llamada, sus hooks administrados se ejecutan nuevamente en la llamada reescrita, por lo que un bloqueo aún se aplica. Los hooks `PreToolUse` de otros archivos de configuración y de plugins se ejecutan después del último mod, por lo que un mod que devuelve su propio resultado en lugar de ejecutar la herramienta evita que se ejecuten. Consulte [El orden en que se ejecutan los mods](/docs/es/plugins/mods/events#the-order-mods-run-in).83* **Los hooks administrados se ejecutan primero.** Un hook `PreToolUse` en la configuración administrada se ejecuta antes de que cualquier mod vea la llamada a herramienta, y su bloqueo es definitivo. Si luego un mod reescribe la llamada, tus hooks administrados se ejecutan de nuevo sobre la llamada reescrita, por lo que un bloqueo sigue aplicándose. Los hooks `PreToolUse` de otros archivos de configuración y de plugins se ejecutan después del último mod, así que un mod que devuelve su propio resultado en lugar de ejecutar la herramienta impide que esos se ejecuten. Consulta [El orden en que se ejecutan los mods](/docs/es/plugins/mods/events#the-order-mods-run-in).
84* **La política de red cubre `$.http.fetch`.** Si su organización desactiva la obtención web, o el tráfico de red no esencial se desactiva para la sesión, Claude Code rechaza una solicitud de red que un mod hace con `$.http.fetch`. La política no cubre un programa que el mod inicia con `$.process.run`. Ese programa alcanza la red con el acceso propio del usuario.84* **La política de red cubre `$.http.fetch`.** Si tu organización desactiva la obtención web, o el tráfico de red no esencial está desactivado para la sesión, Claude Code rechaza una solicitud de red que un mod hace con `$.http.fetch`. La política no cubre un programa que el mod inicia con `$.process.run`. Ese programa accede a la red con el propio acceso del usuario.
85* **Los controles de plugins cubren mods.** Un mod es un plugin, por lo que la [configuración que restringe lo que los usuarios pueden instalar](/docs/es/plugins/org#restrict-what-users-can-install), como `strictKnownMarketplaces`, decide si puede instalarse en absoluto.85* **Los controles de plugins cubren los mods.** Un mod es un plugin, así que la [configuración que restringe lo que los usuarios pueden instalar](/docs/es/plugins/org#restrict-what-users-can-install), como `strictKnownMarketplaces`, decide si puede instalarse en absoluto.
86* **Los mods no pueden cambiar el prompt de permiso.** Un mod puede cambiar el estilo de gran parte de la interfaz de Claude Code, pero no el prompt de permiso, por lo que no puede cambiar lo que muestra un prompt. Un mod aún puede aprobar o negar una llamada de herramienta antes de que aparezca el prompt, como describe [Sepa qué sucede de forma predeterminada](#know-what-happens-by-default).86* **Los mods no pueden cambiar la solicitud de permiso.** Un mod puede cambiar el estilo de gran parte de la interfaz de Claude Code, pero no de la solicitud de permiso, así que no puede cambiar lo que muestra una solicitud. Un mod aún puede aprobar o denegar una llamada a herramienta antes de que aparezca la solicitud, como se describe en [Conoce lo que ocurre de forma predeterminada](#know-what-happens-by-default).
87* **Los prompts de confianza vienen primero.** En una sesión interactiva en un directorio que el usuario aún no ha confiado, ningún mod se carga hasta que responda el prompt de confianza.87* **Las solicitudes de confianza van primero.** En una sesión interactiva en un directorio en el que el usuario aún no ha confiado, ningún mod se carga hasta que responde a la solicitud de confianza.
88* **`--safe-mode` desactiva los mods instalados, incluidos los suyos.** Inicie una sesión con `claude --safe-mode` para verificar si un mod causó un problema.88* **`--safe-mode` desactiva los mods instalados, incluidos los tuyos.** Inicia una sesión con `claude --safe-mode` para comprobar si un mod causó un problema.
89 89
90Ninguno de estos controles sandboxea un mod. Un mod que permite se ejecuta como el usuario, con el acceso del usuario a archivos, procesos y la red.90Ninguno de estos controles ejecuta un mod en un sandbox. Un mod que permites se ejecuta como el usuario, con el acceso del usuario a archivos, procesos y la red.
91 91
92<h2 id="decide-whether-to-leave-mods-on">92<h2 id="decide-whether-to-leave-mods-on">
93 Decida si dejar los mods activados93 Decide si dejar los mods activados
94</h2>94</h2>
95 95
96Un mod puede hacer más que las otras partes de un plugin porque se ejecuta dentro de Claude Code. Ve cada prompt y llamada de herramienta, puede cambiarlos, y puede permitir o negar una llamada de herramienta antes de que aparezca un prompt de permiso.96Un mod puede hacer más que las otras partes de un plugin porque se ejecuta dentro de Claude Code. Ve cada prompt y cada llamada a herramienta, puede modificarlos y puede permitir o denegar una llamada a herramienta antes de que aparezca una solicitud de permiso.
97 97
98Lo que un usuario puede cargar como mod depende de los controles de plugins que ya tiene:98Lo que un usuario puede cargar como mod depende de los controles de plugins que ya tienes:
99 99
100| Sus controles de plugins hoy | Lo que un usuario puede cargar como mod |100| Tus controles de plugins actuales | Lo que un usuario puede cargar como mod |
101| :- | :- |101| :- | :- |
102| Ninguno | Un mod de cualquier marketplace, de cualquier directorio con `--plugin-dir`, o que Claude escriba durante una sesión |102| Ninguno | Un mod de cualquier marketplace, de cualquier directorio con `--plugin-dir`, o que Claude escribe durante una sesión |
103| Una lista de permitidos de marketplace | Un mod de los marketplaces que permite, o de cualquier directorio con `--plugin-dir`. Un mod que Claude escribe durante una sesión se carga solo cuando la lista de permitidos [incluye `skills-dir`](/docs/es/plugins/org#keep-skills-directory-plugins-loading). |103| Una lista de marketplaces permitidos | Un mod de los marketplaces que permites, o de cualquier directorio con `--plugin-dir`. Un mod que Claude escribe durante una sesión solo se carga cuando la lista de permitidos [incluye `skills-dir`](/docs/es/plugins/org#keep-skills-directory-plugins-loading). |
104| Una lista de permitidos de marketplace y `disableSideloadFlags` | Un mod de los marketplaces que permite |104| Una lista de marketplaces permitidos y `disableSideloadFlags` | Un mod de los marketplaces que permites |
105 105
106[Administrar plugins para su organización](/docs/es/plugins/org) enumera cada forma en que se carga un plugin y la configuración que controla cada una.106[Administra plugins para tu organización](/docs/es/plugins/org) enumera las formas en que se carga un plugin y el ajuste que controla cada una.
107 107
108Para verificar los mods en un marketplace antes de que sus usuarios los instalen, consulte [Revise qué puede hacer un mod](#review-what-a-mod-can-do). Para mantener los mods de los usuarios fuera hasta que lo haya hecho, consulte [Detenga la carga de mods instalados por usuarios](#stop-user-installed-mods-from-loading).108Para revisar los mods de un marketplace antes de que tus usuarios los instalen, consulta [Revisa lo que puede hacer un mod](#review-what-a-mod-can-do). Para impedir que se carguen los mods de los usuarios hasta que lo hayas hecho, consulta [Impide que se carguen los mods instalados por los usuarios](#stop-user-installed-mods-from-loading).
109 109
110<h3 id="review-what-a-mod-can-do">110<h3 id="review-what-a-mod-can-do">
111 Revise qué puede hacer un mod111 Revisa lo que puede hacer un mod
112</h3>112</h3>
113 113
114Puede ver qué puede hacer un mod sin ejecutarlo. En su shell, ejecute `claude plugin validate` en el directorio del plugin:114Puedes ver lo que un mod es capaz de hacer sin ejecutarlo. En tu shell, ejecuta `claude plugin validate` en el directorio del plugin:
115 115
116```bash theme={null}116```bash theme={null}
117claude plugin validate ./some-mod117claude plugin validate ./some-mod
118```118```
119 119
120Dos líneas en la salida describen el código del mod:120Dos líneas de la salida describen el código del mod:
121 121
122```text theme={null}122```text theme={null}
123 ❯ ./register.js hooks: session.start, tool.call, ui.render{component=Pane}123 ❯ ./register.js hooks: session.start, tool.call, ui.render{component=Pane}
124 ❯ ./register.js calls: $.fs.read, $.http.fetch, $.store.set, $.ui.open124 ❯ ./register.js calls: $.fs.read, $.http.fetch, $.store.set, $.ui.open
125```125```
126 126
127La línea `hooks:` enumera los eventos que recibe el mod. La línea `calls:` enumera los métodos de la API de mods que llama su código. La [API de mods](/docs/es/plugins/mods/api), escrita como `$` en el código de un mod, es cómo un mod alcanza archivos, procesos y la red. Claude Code se niega a cargar un mod que usa la API de mods de una manera que este comando no puede leer.127La línea `hooks:` enumera los eventos que recibe el mod. La línea `calls:` enumera los métodos de la API de mods que llama su código. La [API de mods](/docs/es/plugins/mods/api), escrita como `$` en el código de un mod, es la forma en que un mod accede a archivos, procesos y la red. Claude Code se niega a cargar un mod que usa la API de mods de una forma que este comando no puede leer.
128 128
129Mire la línea `calls:` para estos:129Busca estos en la línea `calls:`:
130 130
131| Llamada | Lo que significa |131| Llamada | Qué significa |
132| :- | :- |132| :- | :- |
133| `$.fs.read`, `$.fs.write` | Lee o escribe archivos en cualquier lugar donde el usuario pueda |133| `$.fs.read`, `$.fs.write` | Lee o escribe archivos en cualquier lugar donde el usuario pueda hacerlo |
134| `$.process.run`, `$.process.spawn` | Inicia programas como el usuario |134| `$.process.run`, `$.process.spawn` | Inicia programas como el usuario |
135| `$.http.fetch` | Realiza solicitudes de red |135| `$.http.fetch` | Realiza solicitudes de red |
136| `$.env.get`, `$.settings.read` | Lee variables de entorno y configuración, que pueden contener claves API. Una línea `env reads:` en la salida nombra cada variable. |136| `$.env.get`, `$.settings.read` | Lee variables de entorno y la configuración, que pueden contener claves de API. Una línea `env reads:` en la salida nombra cada variable. |
137| `$.env.set` | Establece una variable de entorno para Claude Code y para cada comando y servidor MCP que inicia después, lo que puede cambiar lo que esos programas ejecutan. Una línea `env writes:` nombra cada variable. |137| `$.env.set` | Establece una variable de entorno para Claude Code y para cada comando y servidor MCP que inicie después, lo que puede cambiar lo que ejecutan esos programas. Una línea `env writes:` nombra cada variable. |
138| `$.mcp.call` | Llama a una herramienta en un servidor MCP conectado, bajo las reglas de permiso de la sesión |138| `$.mcp.call` | Llama a una herramienta en un servidor MCP conectado, según las reglas de permisos de la sesión |
139| `$.model.complete` | Usa el plan o clave API del usuario para llamadas de modelo |139| `$.model.complete` | Usa el plan o la clave de API del usuario para llamadas al modelo |
140| `$.prompt.submit` | Envía un prompt, y puede enviarlo como las propias palabras del usuario |140| `$.prompt.submit` | Envía un prompt y puede enviarlo como si fueran las propias palabras del usuario |
141| `$.session.send` | Envía un mensaje que otro Claude de sesión o subagente lee |141| `$.session.send` | Envía un mensaje que lee el Claude de otra sesión o de un subagente |
142 142
143En la línea `hooks:`, [`tool.call`](/docs/es/plugins/mods/reference#tools) y [`prompt.submit`](/docs/es/plugins/mods/reference#prompts-and-what-claude-reads) significan que el mod ve cada llamada de herramienta y cada prompt, y puede cambiarlos. [`session.append`](/docs/es/plugins/mods/reference#session) significa que el mod puede reescribir cada fila de la conversación antes de que se almacene. [`ui.render{component=AskUserQuestion}`](/docs/es/plugins/mods/interface#change-what-claude-code-already-draws) significa que el mod puede redibujar el diálogo que Claude usa para hacer una pregunta al usuario. `tool.check` significa que el mod puede aprobar o negar una llamada de herramienta antes de que aparezca un prompt de permiso. [Sepa qué sucede de forma predeterminada](#know-what-happens-by-default) enumera cuál de sus reglas y hooks tiene prioridad sobre su respuesta.143En la línea `hooks:`, [`tool.call`](/docs/es/plugins/mods/reference#tools) y [`prompt.submit`](/docs/es/plugins/mods/reference#prompts-and-what-claude-reads) significan que el mod ve cada llamada a herramienta y cada prompt, y puede modificarlos. [`session.append`](/docs/es/plugins/mods/reference#session) significa que el mod puede reescribir cada fila de la conversación antes de que se almacene. [`ui.render{component=AskUserQuestion}`](/docs/es/plugins/mods/interface#change-what-claude-code-already-draws) significa que el mod puede volver a dibujar el diálogo que Claude usa para hacerle una pregunta al usuario. `tool.check` significa que el mod puede aprobar o denegar una llamada a herramienta antes de que aparezca una solicitud de permiso. [Conoce lo que sucede de forma predeterminada](#know-what-happens-by-default) enumera cuáles de tus reglas y hooks tienen precedencia sobre su respuesta.
144 144
145<h2 id="choose-how-much-to-allow">145<h2 id="choose-how-much-to-allow">
146 Elija cuánto permitir146 Elige cuánto permitir
147</h2>147</h2>
148 148
149Las políticas de mods van desde ningún mod instalado en absoluto hasta cualquier mod que un usuario elija, con su propio mod verificando los otros, y cada una es una pocas configuraciones administradas. Encuentre la política que desea en la primera columna y establezca lo que la segunda columna nombra. [Implementar configuración administrada](/docs/es/managed-settings) cubre dónde vive la configuración administrada.149Las políticas de mods van desde no tener ningún mod instalado hasta permitir cualquier mod que elija un usuario, con tu propio mod revisando los demás, y cada una consiste en unos pocos ajustes administrados. Busca la política que quieres en la primera columna y configura lo que indica la segunda columna. [Implementar la configuración administrada](/docs/es/managed-settings) explica dónde se encuentra la configuración administrada.
150 150
151| Lo que desea | Configuración |151| Lo que quieres | Configuración |
152| :- | :- |152| :- | :- |
153| Sin mods instalados, con hooks sin tocar | Establezca [`allowManagedModsOnly`](#set-options-on-the-built-in-guard) y no implemente mods propios |153| Ningún mod instalado, sin afectar los hooks | Configura [`allowManagedModsOnly`](#set-options-on-the-built-in-guard) y no implementes ningún mod propio |
154| Sin mods instalados y sin hooks en absoluto, incluidos sus hooks administrados | Establezca `disableAllHooks` en `true` |154| Ningún mod instalado y ningún hook en absoluto, incluidos tus hooks administrados | Establece `disableAllHooks` en `true` |
155| Solo los mods de su organización | Establezca la opción [`allowManagedModsOnly`](#stop-user-installed-mods-from-loading) del guard, e [instale sus mods](#install-your-organizations-mods) para que cuenten como suyos |155| Solo los mods de tu organización | Configura la [opción `allowManagedModsOnly`](#stop-user-installed-mods-from-loading) de la protección e [instala tus mods](#install-your-organizations-mods) para que cuenten como tuyos |
156| Cualquier mod de marketplaces que apruebe | Mantenga sus [restricciones de marketplace](/docs/es/plugins/org#restrict-what-users-can-install), y establezca `disableSideloadFlags` en `true` |156| Cualquier mod de los marketplaces que apruebes | Mantén tus [restricciones de marketplaces](/docs/es/plugins/org#restrict-what-users-can-install) y establece `disableSideloadFlags` en `true` |
157| Cualquier mod, con su propio mod verificando los otros | [Instale su mod](#install-your-organizations-mods), y enumérelo con `sec-default@builtin` en `prependPlugins` |157| Cualquier mod, con tu propio mod revisando los demás | [Instala tu mod](#install-your-organizations-mods) y agrégalo junto con `sec-default@builtin` en `prependPlugins` |
158 158
159Lo que hace cada configuración:159Lo que hace cada ajuste:
160 160
161* **`allowManagedModsOnly`**: una opción en el guard integrado. Los mods propios de los usuarios no se cargan, y sus hooks de configuración, líneas de estado y `/goal` siguen funcionando. [Detenga la carga de mods instalados por usuarios](#stop-user-installed-mods-from-loading) enumera lo que cubre.161* **`allowManagedModsOnly`**: una opción de la protección integrada. Los mods propios de los usuarios no se cargan, y sus hooks de configuración, líneas de estado y `/goal` siguen funcionando. [Impedir que se carguen los mods instalados por los usuarios](#stop-user-installed-mods-from-loading) enumera lo que abarca.
162* **`allowManagedHooksOnly`**: una configuración más amplia. Solo [los mods de su organización](#install-your-organizations-mods) y los mods integrados en Claude Code se cargan. Un mod que un usuario instaló por sí mismo no. La configuración también bloquea los hooks en los archivos de configuración propios de los usuarios. Lea [Lo que se ejecuta bajo `allowManagedHooksOnly`](/docs/es/settings-reference#what-runs-under-allowmanagedhooksonly) antes de establecerlo.162* **`allowManagedHooksOnly`**: un ajuste más amplio. Solo se cargan [los mods de tu organización](#install-your-organizations-mods) y los mods integrados en Claude Code. Un mod que un usuario instaló por su cuenta no se carga. El ajuste también bloquea los hooks de los archivos de configuración propios de los usuarios. Lee [Qué se ejecuta con `allowManagedHooksOnly`](/docs/es/settings-reference#what-runs-under-allowmanagedhooksonly) antes de configurarlo.
163* **`disableAllHooks`**: la configuración más amplia. En la configuración administrada, detiene los mods en cada plugin instalado, incluidos los suyos, y desactiva cada hook en archivos de configuración, por lo que un hook `PreToolUse` en su configuración administrada ya no bloquea nada. Las líneas de estado personalizadas y `/goal` también dejan de funcionar. Lea [`disableAllHooks`](/docs/es/settings-reference#disableallhooks) antes de establecerlo.163* **`disableAllHooks`**: el ajuste más amplio. En la configuración administrada, detiene los mods de todos los plugins instalados, incluidos los tuyos, y desactiva todos los hooks de los archivos de configuración, por lo que un hook `PreToolUse` en tu configuración administrada ya no bloquea nada. Las líneas de estado personalizadas y `/goal` también dejan de funcionar. Lee [`disableAllHooks`](/docs/es/settings-reference#disableallhooks) antes de configurarlo.
164* **`disableSideloadFlags`**: rechaza `--plugin-dir` y `--plugin-url` al inicio, por lo que nadie carga un mod desde un directorio, y evita que se carguen los mods que Claude escribe durante una sesión. La configuración también rechaza `--agents` y `--mcp-config`. Lea [`disableSideloadFlags`](/docs/es/settings-reference#disablesideloadflags) antes de establecerlo.164* **`disableSideloadFlags`**: rechaza `--plugin-dir` y `--plugin-url` al iniciar, e impide que se carguen los mods que Claude escribe durante una sesión. El ajuste también rechaza `--agents` y `--mcp-config`. Lee [`disableSideloadFlags`](/docs/es/settings-reference#disablesideloadflags) antes de configurarlo.
165 165
166Los mods integrados en Claude Code, como el soporte de `AGENTS.md`, no se ven afectados por estas configuraciones. Cada uno tiene [su propio interruptor](/docs/es/plugins/mods/overview#mods-built-into-claude-code).166Los mods integrados en Claude Code, como la compatibilidad con `AGENTS.md`, no se ven afectados por estos ajustes. Cada uno tiene [su propio interruptor](/docs/es/plugins/mods/overview#mods-built-into-claude-code).
167 167
168Un usuario cuyo mod no se cargó encuentra la razón en su registro de depuración. [Mensajes de rechazo](/docs/es/plugins/mods/troubleshoot#refusal-messages) enumera las líneas para `allowManagedHooksOnly` y `disableAllHooks`, y [Mensajes del guard integrado](/docs/es/plugins/mods/troubleshoot#messages-from-the-built-in-guard) tiene la línea para `allowManagedModsOnly`.168Un usuario cuyo mod no se cargó encuentra el motivo en su registro de depuración. [Mensajes de rechazo](/docs/es/plugins/mods/troubleshoot#refusal-messages) enumera las líneas para `allowManagedHooksOnly` y `disableAllHooks`, y [Mensajes de la protección integrada](/docs/es/plugins/mods/troubleshoot#messages-from-the-built-in-guard) tiene la línea para `allowManagedModsOnly`.
169
170<h3 id="allow-only-your-organization’s-mods">
171 Permitir solo los mods de tu organización
172</h3>
173
174Para ejecutar los mods de tu organización y bloquear los que traen los usuarios, implementa la configuración de la fila **Solo los mods de tu organización** de la [tabla de políticas](#choose-how-much-to-allow), además de `disableSideloadFlags`. Con este `managed-settings.json` completo, Claude Code rechaza los mods propios de los usuarios, por lo que no se ejecuta ninguno de sus hooks, y tu mod de políticas se ejecuta antes que los demás mods:
175
176```json managed-settings.json theme={null}
177{
178 "extraKnownMarketplaces": {
179 "acme-tools": {
180 "source": { "source": "directory", "path": "/opt/acme/claude-plugins" }
181 }
182 },
183 "enabledPlugins": { "acme-guard@acme-tools": true },
184 "prependPlugins": ["acme-guard@acme-tools", "sec-default@builtin"],
185 "pluginConfigs": {
186 "cc-plugin-sec-default@builtin": {
187 "options": { "allowManagedModsOnly": true }
188 }
189 },
190 "disableSideloadFlags": true
191}
192```
193
194Cada grupo de claves cumple una función:
195
196* **`extraKnownMarketplaces`, `enabledPlugins` y `prependPlugins`**: instalan tu mod para que cuente como tuyo y lo ejecutan primero, con la protección después. [Instalar los mods de tu organización y definir el orden](#install-your-organizations-mods) explica el directorio al que apuntan estas claves.
197* **`pluginConfigs`**: configura la opción `allowManagedModsOnly` de la protección, para que Claude Code rechace los mods propios de los usuarios. Sus hooks de configuración, líneas de estado y `/goal` siguen funcionando.
198* **`disableSideloadFlags`**: consulta [`disableSideloadFlags`](/docs/es/settings-reference#disablesideloadflags) para ver los flags que rechaza al iniciar
199
200Para confirmar la política en una máquina de prueba, inicia una sesión en tu shell con `claude --debug` y lee el registro de depuración:
201
202* **Tu mod**: su línea `hooks module` tiene `tier prepend`
203* **Un mod que instaló el usuario**: una línea dice `refused by cc-plugin-sec-default: mods are limited to your organization's by policy (allowManagedModsOnly)`. Una línea anterior indica que el módulo de hooks de ese mod está `loaded`, así que busca el rechazo.
204* **Un directorio de plugins**: `claude --plugin-dir ./any-mod` termina con un mensaje que comienza con `--plugin-dir is disabled by your organization's managed settings (disableSideloadFlags)`
205
206Para limitar también qué marketplaces pueden agregar los usuarios, combina este archivo con tus [restricciones de marketplaces](/docs/es/plugins/org#restrict-what-users-can-install).
207
208<h3 id="apply-your-plugin-controls-to-mods">
209 Aplicar tus controles de plugins a los mods
210</h3>
211
212Un mod es un plugin, así que las formas en que [administras los plugins para tu organización](/docs/es/plugins/org) también se aplican a un plugin que contiene un mod:
213
214* **Ver qué plugins se cargan en todos tus equipos**: [Auditar y revisar](/docs/es/plugins/org#audit-and-review)
215* **Decidir cuándo puede actualizarse un plugin que revisaste**: [Definir la política de actualizaciones](/docs/es/plugins/org#set-update-policy)
216* **Dar a un grupo una política distinta, como un piloto**: [Planificar lo que la configuración administrada no puede imponer](/docs/es/plugins/org#plan-for-what-managed-settings-can’t-enforce)
217* **Comprobar qué aplicaciones y tipos de sesión aplican las claves de plugins**: [Cuándo aplica cada superficie las claves de plugins](/docs/es/plugins/org#when-each-surface-applies-the-plugin-keys)
218* **Configurar CI y contenedores**: [Preparar contenedores y CI](/docs/es/plugins/org#seed-containers-and-ci)
219* **Ofrecer mods que tus usuarios pueden instalar**: [Alojar un marketplace](/docs/es/plugins/host-marketplace). Un mod que Claude Code copia desde una fuente de GitHub, git, URL o npm cuenta como de un usuario, no como [de tu organización](#install-your-organizations-mods).
169 220
170<h3 id="set-options-on-the-built-in-guard">221<h3 id="set-options-on-the-built-in-guard">
171 Establezca opciones en el guard integrado222 Definir opciones en la protección integrada
172</h3>223</h3>
173 224
174El guard integrado toma dos opciones. Establézcalas en la configuración administrada bajo `pluginConfigs`, con clave `cc-plugin-sec-default@builtin`, como hace el ejemplo en [Detenga la carga de mods instalados por usuarios](#stop-user-installed-mods-from-loading).225La protección integrada admite opciones. Configúralas en la configuración administrada bajo `pluginConfigs`, con la clave `cc-plugin-sec-default@builtin`, como hace el ejemplo de [Impedir que se carguen los mods instalados por los usuarios](#stop-user-installed-mods-from-loading).
175 226
176La tabla da lo que obtienen sus usuarios con cada opción sin establecer y con ella establecida en `true`:227La tabla muestra lo que obtienen tus usuarios con cada opción sin configurar y con ella establecida en `true`:
177 228
178| Opción | Sin establecer | `true` |229| Opción | Sin configurar | `true` |
179| :- | :- | :- |230| :- | :- | :- |
180| `allowManagedModsOnly` | Los mods propios de los usuarios se cargan | Solo [los mods de su organización](#install-your-organizations-mods), y los mods integrados en Claude Code, se cargan. Claude Code rechaza todos los demás mods, incluido uno que un usuario instaló o nombró con `--plugin-dir`. |231| `allowManagedModsOnly` | Se cargan los mods propios de los usuarios | Solo se cargan [los mods de tu organización](#install-your-organizations-mods) y los mods integrados en Claude Code. Claude Code rechaza cualquier otro mod, incluido uno que un usuario instaló o indicó con `--plugin-dir`. |
181| `allowModsToOverrideDenyRules` | Las reglas de negación tienen prioridad sobre los mods de los usuarios | El mod de un usuario que aprueba llamadas de herramientas puede aprobar una llamada que una regla `deny` rechaza |232| `allowModsToOverrideDenyRules` | Las reglas de denegación tienen precedencia sobre los mods de los usuarios | Un mod de un usuario que aprueba llamadas a herramientas puede aprobar una llamada que una regla `deny` rechaza |
182 233
183Estas reglas deciden si una opción tiene efecto:234Estas reglas deciden si una opción surte efecto:
184 235
185* **El id tiene una ortografía aquí**: Claude Code lee las opciones solo bajo `cc-plugin-sec-default@builtin`. `prependPlugins` acepta `sec-default@builtin` también, y `pluginConfigs` no.236* **El id tiene una sola forma aquí**: Claude Code lee las opciones solo bajo `cc-plugin-sec-default@builtin`. `prependPlugins` también acepta `sec-default@builtin`, y `pluginConfigs` no.
186* **Solo la configuración administrada cuenta**: la misma entrada en un archivo de configuración de usuario, proyecto o local, o en un archivo pasado con `--settings`, ni establece una opción ni afloja una237* **Solo cuenta la configuración administrada**: la misma entrada en un archivo de configuración de usuario, de proyecto o local, o en un archivo pasado con `--settings`, no configura una opción ni la flexibiliza
187* **El guard tiene que cargarse**: si establece `prependPlugins`, [nombre el guard en la lista](#install-your-organizations-mods). Donde el guard no se carga, ninguna opción se aplica.238* **La protección tiene que cargarse**: si configuras `prependPlugins`, [incluye la protección en la lista](#install-your-organizations-mods). Donde la protección no se carga, no se aplica ninguna de las dos opciones.
188* **El guard falla cerrado**: si el guard no puede leer la configuración administrada, rechaza cada mod de usuario al cargar. Si no puede verificar las reglas de negación para una llamada que un mod de usuario aprobó, rechaza la llamada.239* **La protección falla de forma cerrada**: si la protección no puede leer la configuración administrada, rechaza todos los mods de los usuarios al cargarlos. Si no puede comprobar las reglas de denegación para una llamada que aprobó el mod de un usuario, rechaza la llamada.
189 240
190Los [mensajes del guard integrado](/docs/es/plugins/mods/troubleshoot#messages-from-the-built-in-guard) son lo que ven sus usuarios cuando cualquiera de las opciones se aplica.241Los [mensajes de la protección integrada](/docs/es/plugins/mods/troubleshoot#messages-from-the-built-in-guard) son lo que ven tus usuarios cuando se aplica cualquiera de las dos opciones.
191 242
192<h2 id="run-your-organization’s-own-mods">243<h2 id="run-your-organization’s-own-mods">
193 Ejecute los mods propios de su organización244 Ejecuta los mods propios de tu organización
194</h2>245</h2>
195 246
196Puede implementar mods propios para cada usuario, elegir dónde se ejecutan en relación con los mods de los usuarios, y usar uno para hacer cumplir una política.247Puedes implementar mods propios para todos los usuarios, elegir dónde se ejecutan en relación con los mods de los usuarios y usar uno para aplicar una política.
197 248
198<h3 id="install-your-organizations-mods">249<h3 id="install-your-organizations-mods">
199 Instale los mods de su organización y establezca el orden250 Instala los mods de tu organización y establece el orden
200</h3>251</h3>
201 252
202Los mods de su organización se cargan donde los mods de los usuarios no y pueden ejecutarse antes que ellos, por lo que Claude Code tiene que poder decir que un mod vino de usted. Lo trata como de su organización solo cuando todos estos son verdaderos:253Los mods de tu organización se cargan donde los mods de los usuarios no lo hacen y pueden ejecutarse antes que ellos, por lo que Claude Code tiene que poder saber que un mod proviene de ti. Trata un mod como de tu organización solo cuando se cumplen todas estas condiciones:
203 254
204* `enabledPlugins` administrado establece el plugin del mod en `true`255* `enabledPlugins` en la configuración administrada establece el plugin del mod en `true`
205* La configuración administrada nombra el [marketplace](/docs/es/plugins/create-marketplace) del plugin como un directorio en la máquina del usuario, por ruta absoluta. Una entrada `extraKnownMarketplaces` hace eso y también registra el marketplace para el usuario.256* La configuración administrada nombra el [marketplace](/docs/es/plugins/create-marketplace) del plugin como un directorio en la máquina del usuario, mediante una ruta absoluta. Una entrada de `extraKnownMarketplaces` hace eso y además registra el marketplace para el usuario.
206* El marketplace enumera el plugin por una ruta relativa, por lo que Claude Code [lo carga en su lugar](/docs/es/plugins/loading#in-place-and-copied-plugins) desde ese directorio257* El marketplace enumera el plugin mediante una ruta relativa, de modo que Claude Code [lo carga en su lugar](/docs/es/plugins/loading#in-place-and-copied-plugins) desde ese directorio
207 258
208Para cumplirlos, haga que su administración de dispositivos copie el directorio del marketplace a la misma ruta en cada máquina. Haga que el directorio y cada directorio por encima de él sean escribibles solo por un administrador, como lo es el archivo de configuración administrada. Cualquiera que pueda escribir allí puede reescribir su mod. La configuración administrada que entrega desde la consola de administrador de claude.ai puede llevar las claves, pero no puede poner el directorio en una máquina.259Para cumplirlas, haz que tu sistema de administración de dispositivos copie el directorio del marketplace a la misma ruta en cada máquina. Haz que el directorio y todos los directorios por encima de él sean modificables solo por un administrador, igual que el archivo de configuración administrada. Cualquiera que pueda escribir allí puede reescribir tu mod. La configuración administrada que entregas desde la consola de administración de claude.ai puede incluir las claves, pero no puede colocar el directorio en una máquina.
209 260
210El directorio contiene el manifiesto del marketplace y el plugin:261El directorio contiene el manifiesto del marketplace y el plugin:
211 262
234}285}
235```286```
236 287
237Un plugin que Claude Code copia en su caché cuenta como de un usuario, incluso cuando `enabledPlugins` administrado lo habilita. Eso cubre cada plugin de una fuente de GitHub, git, URL o npm. Su mod se ejecuta entre los mods de los usuarios, `prependPlugins` y `appendPlugins` lo omiten, y no se carga bajo `allowManagedModsOnly` o `allowManagedHooksOnly`. El registro de depuración del usuario tiene una línea que comienza con el id del plugin y `is enabled by managed settings, but`.288Un plugin que Claude Code copia en su caché cuenta como de un usuario, incluso cuando `enabledPlugins` en la configuración administrada lo habilita. Eso abarca todos los plugins de una fuente de GitHub, git, URL o npm. Su mod se ejecuta entre los mods de los usuarios, `prependPlugins` y `appendPlugins` lo omiten, y no se carga con `allowManagedModsOnly` ni con `allowManagedHooksOnly`. El registro de depuración del usuario tiene una línea que comienza con el id del plugin y `is enabled by managed settings, but`.
238 289
239Claude Code genera un evento cada vez que está a punto de actuar, como ejecutar una herramienta, y lo pasa a cada mod a su vez. Un mod que cuenta como suyo [se ejecuta antes que los mods de los usuarios](/docs/es/plugins/mods/events#the-order-mods-run-in) incluso cuando no lo enumera en ningún lugar. Para establecer su lugar, enumere su id en una de dos configuraciones. El id es el nombre del plugin, `@`, y el nombre del marketplace, como `acme-guard@acme-tools`.290Claude Code dispara un evento cada vez que está a punto de actuar, por ejemplo, ejecutar una herramienta, y lo pasa a cada mod por turnos. Un mod que cuenta como tuyo [se ejecuta antes que los mods de los usuarios](/docs/es/plugins/mods/events#the-order-mods-run-in) incluso cuando no lo enumeras en ningún lugar. Para establecer su posición, enumera su id en uno de dos ajustes. El id es el nombre del plugin, `@` y el nombre del marketplace, como `acme-guard@acme-tools`.
240 291
241* **`prependPlugins`**: su mod ve cada evento antes que cualquier mod de usuario y cada resultado después. Puede cambiar el evento, rechazarlo u omitir los mods de los usuarios.292* **`prependPlugins`**: tu mod ve cada evento antes que cualquier mod de usuario y cada resultado después. Puede cambiar el evento, rechazarlo u omitir los mods de los usuarios.
242* **`appendPlugins`**: su mod se ejecuta después de cada mod de usuario, por lo que solo ve los eventos que esos mods pasan, en la forma en que los pasan293* **`appendPlugins`**: tu mod se ejecuta después de todos los mods de los usuarios, por lo que solo ve los eventos que esos mods transmiten, en la forma en que los transmiten
243 294
244Este ejemplo declara el marketplace `acme-tools` en `/opt/acme/claude-plugins`, habilita `acme-guard` desde él, y ejecuta ese mod primero, con el guard integrado después:295Este ejemplo declara el marketplace `acme-tools` en `/opt/acme/claude-plugins`, habilita `acme-guard` desde él y ejecuta ese mod primero, con la protección integrada después:
245 296
246```json managed-settings.json theme={null}297```json managed-settings.json theme={null}
247{298{
255}306}
256```307```
257 308
258Cada clave hace un trabajo:309Cada clave cumple una función:
259 310
260* **`extraKnownMarketplaces`**: nombra el directorio que contiene el marketplace `acme-tools`. `path` es la ruta absoluta del directorio que contiene `.claude-plugin/marketplace.json`.311* **`extraKnownMarketplaces`**: nombra el directorio que contiene el marketplace `acme-tools`. `path` es la ruta absoluta del directorio que contiene `.claude-plugin/marketplace.json`.
261* **`enabledPlugins`**: activa `acme-guard` para cada usuario que recibe esta configuración administrada312* **`enabledPlugins`**: activa `acme-guard` para cada usuario que recibe esta configuración administrada
262* **`prependPlugins`**: pone `acme-guard` primero y el guard integrado segundo, ambos antes de cualquier mod que instale un usuario. Claude Code sigue el orden que enumera.313* **`prependPlugins`**: coloca `acme-guard` en primer lugar y la protección integrada en segundo, ambos antes de cualquier mod que instale un usuario. Claude Code sigue el orden que enumeras.
263 314
264Para confirmar que la máquina de un usuario recibió la configuración, consulte [Verifique que una política esté en vigor](/docs/es/managed-settings#check-that-a-policy-is-in-force).315Para confirmar que la máquina de un usuario recibió la configuración, consulta [Comprobar que una política está en vigor](/docs/es/managed-settings#check-that-a-policy-is-in-force).
265 316
266Para confirmar dónde se ejecuta el mod, inicie una sesión en esa máquina con `claude --debug` y busque en el [registro de depuración](/docs/es/plugins/mods/troubleshoot#read-the-debug-log) el id del mod:317Para confirmar dónde se ejecuta el mod, inicia una sesión en esa máquina con `claude --debug` y busca el id del mod en el [registro de depuración](/docs/es/plugins/mods/troubleshoot#read-the-debug-log):
267 318
268* **`hooks module acme-guard@acme-tools loaded`, con `tier prepend`**: el mod cuenta como de su organización y se ejecuta primero319* **`hooks module acme-guard@acme-tools loaded`, con `tier prepend`**: el mod cuenta como de tu organización y se ejecuta primero
269* **La misma línea con `tier user`**: Claude Code lo trata como un mod de usuario. Una segunda línea, `prependPlugins names acme-guard@acme-tools, which is not an enabled managed plugin with a hooks module; skipped`, dice que la lista lo omitió.320* **La misma línea con `tier user`**: Claude Code lo trata como un mod de usuario. Una segunda línea, `prependPlugins names acme-guard@acme-tools, which is not an enabled managed plugin with a hooks module; skipped`, indica que la lista lo omitió.
270 321
271Estas reglas deciden qué ids en las dos listas tienen efecto:322Estas reglas deciden qué ids de las dos listas surten efecto:
272 323
273* **La lista reemplaza el predeterminado**: cuando establece `prependPlugins` en la configuración administrada, nombre `sec-default@builtin` en ella para mantener el guard integrado. El guard está integrado y no necesita una entrada `enabledPlugins`.324* **La lista reemplaza el valor predeterminado**: cuando estableces `prependPlugins` en la configuración administrada, nombra `sec-default@builtin` en ella para conservar la protección integrada. La protección está integrada y no necesita una entrada en `enabledPlugins`.
274* **Sus propios ids deben contar como suyos**: en la configuración administrada, Claude Code omite un id cuyo plugin no cumple las tres condiciones para un mod de una organización325* **Tus propios ids deben contar como tuyos**: en la configuración administrada, Claude Code omite un id cuyo plugin no cumple las condiciones de un mod de organización
275* **Los repositorios no pueden establecerlos**: Claude Code lee ambas configuraciones de la configuración administrada y nunca de un archivo de configuración de un repositorio. Un usuario puede establecerlos en `~/.claude/settings.json` para ordenar solo sus propios mods en una máquina sin configuración administrada, y solo cuando no han iniciado sesión con un plan de Team o Enterprise. En cualquier otro lugar, Claude Code ignora ambas claves en la configuración del usuario. Una lista allí ni agrega ni elimina el guard integrado.326* **Los repositorios no pueden establecerlos**: Claude Code lee ambos ajustes de la configuración administrada y nunca del archivo de configuración de un repositorio. Un usuario puede establecerlos en `~/.claude/settings.json` para ordenar sus propios mods solo en una máquina sin configuración administrada, y solo cuando no ha iniciado sesión con un plan Team o Enterprise. En cualquier otro caso, Claude Code ignora ambas claves en la configuración de usuario. Una lista allí ni agrega ni quita la protección integrada.
276 327
277<h3 id="enforce-a-policy-with-a-mod-of-your-own">328<h3 id="enforce-a-policy-with-a-mod-of-your-own">
278 Haga cumplir una política con un mod propio329 Aplica una política con un mod propio
279</h3>330</h3>
280 331
281Para mantener cada mod de usuario fuera, no necesita un mod propio. Establezca [`allowManagedModsOnly`](#stop-user-installed-mods-from-loading). Escriba un mod de política cuando desee admitir algunos mods de usuarios y rechazar otros, o para registrar lo que hacen los mods.332Para impedir que se cargue cualquier mod de usuario, no necesitas un mod propio. Establece [`allowManagedModsOnly`](#stop-user-installed-mods-from-loading). Escribe un mod de políticas cuando quieras permitir algunos mods de usuarios y rechazar otros, o para registrar lo que hacen los mods.
282 333
283Cada vez que otro mod está a punto de cargarse, su mod recibe la lista que `claude plugin validate` imprime, en un evento llamado [`plugin.register`](/docs/es/plugins/mods/reference#other-mods). Un mod en `prependPlugins` puede leer esa lista y rechazar el mod. También puede [enganchar cualquier llamada de API de mods por nombre](/docs/es/plugins/mods/api#reach-files-processes-and-the-network) para registrar o rechazar esa llamada para cada otro mod. El nombre es el método sin el `$.`, por lo que un gancho en `fs.write` ve cada llamada `$.fs.write`.334Cada vez que otro mod está a punto de cargarse, tu mod recibe la lista que imprime `claude plugin validate`, en un evento llamado [`plugin.register`](/docs/es/plugins/mods/reference#other-mods). Un mod en `prependPlugins` puede leer esa lista y rechazar el mod. También puede [manejar cualquier llamada de la API de mods por nombre](/docs/es/plugins/mods/api#reach-files-processes-and-the-network) para registrar o rechazar esa llamada para todos los demás mods. El nombre es el método sin el `$.`, por lo que un hook en `fs.write` ve cada llamada a `$.fs.write`.
284 335
285Este mod de política rechaza cualquier mod de usuario cuyo propio código llama a `$.process.run` o `$.process.spawn`. También mantiene un registro de auditoría, escribiendo cada llamada de herramienta y cada archivo que un mod escribe en el registro de depuración. Porque se ejecuta primero, el registro registra lo que se solicitó, antes de que cualquier mod de usuario lo cambie. Guárdelo como `acme-guard/hooks/register.js`:336Este mod de políticas rechaza cualquier mod de usuario cuyo propio código llame a `$.process.run` o `$.process.spawn`. También mantiene un registro de auditoría, escribiendo en el registro de depuración cada llamada a herramienta y cada archivo que escribe un mod. Como se ejecuta primero, el registro guarda lo que se solicitó, antes de que cualquier mod de usuario lo cambie. Guárdalo como `acme-guard/hooks/register.js`:
286 337
287```javascript acme-guard/hooks/register.js theme={null}338```javascript acme-guard/hooks/register.js theme={null}
288// Los métodos que ningún mod de usuario puede llamar, cada uno deletreado namespace.method339// The methods no user's mod may call, each spelled namespace.method
289const BLOCKED_CALLS = ['process.run', 'process.spawn']340const BLOCKED_CALLS = ['process.run', 'process.spawn']
290 341
291export function register(on) {342export function register(on) {
292 // Se ejecuta cada vez que otro mod está a punto de cargarse343 // Runs each time another mod is about to load
293 on('plugin.register', async ($, e, next) => {344 on('plugin.register', async ($, e, next) => {
294 // Mantenga las llamadas en el código de ese mod que están en la lista bloqueada345 // Keep the calls in that mod's code that are on the blocked list
295 const blocked = e.uses.calls.filter((call) => BLOCKED_CALLS.includes(call))346 const blocked = e.uses.calls.filter((call) => BLOCKED_CALLS.includes(call))
296 if (e.tier === 'user' && blocked.length > 0) {347 if (e.tier === 'user' && blocked.length > 0) {
297 // Devolver refuse evita que el mod se cargue, y el texto es la razón348 // Returning refuse keeps the mod from loading, and the text is the reason
298 return { refuse: 'Acme policy: mods may not call ' + blocked.join(', ') }349 return { refuse: 'Acme policy: mods may not call ' + blocked.join(', ') }
299 }350 }
300 // Deje que cada otro mod se cargue351 // Let every other mod load
301 return next(e)352 return next(e)
302 })353 })
303 354
304 // Registre cada llamada de herramienta, luego déjela avanzar sin cambios355 // Record each tool call, then let it go ahead unchanged
305 on('tool.call', async ($, e, next) => {356 on('tool.call', async ($, e, next) => {
306 $.ui.log('audit tool.call ' + e.tool, { to: 'debug' })357 $.ui.log('audit tool.call ' + e.tool, { to: 'debug' })
307 return next(e)358 return next(e)
308 })359 })
309 360
310 // Registre qué mod escribió un archivo, luego la ruta, entrecomillada porque el mod la eligió361 // Record which mod wrote a file, then the path, quoted because the mod chose it
311 on('fs.write', async ($, e, next) => {362 on('fs.write', async ($, e, next) => {
312 $.ui.log('audit fs.write by ' + next.origin.plugin + ' ' + JSON.stringify(e.path), { to: 'debug' })363 $.ui.log('audit fs.write by ' + next.origin.plugin + ' ' + JSON.stringify(e.path), { to: 'debug' })
313 return next(e)364 return next(e)
317 368
318El archivo registra tres hooks:369El archivo registra tres hooks:
319 370
320* **`plugin.register`**: decide si otro mod se carga. Rechaza un mod de usuario que llama a un método bloqueado y pasa cada otro mod.371* **`plugin.register`**: decide si otro mod se carga. Rechaza un mod de usuario que llama a un método bloqueado y deja pasar todos los demás mods.
321* **`tool.call`**: escribe una línea como `audit tool.call Bash` en el registro de depuración para cada llamada de herramienta, y no cambia nada372* **`tool.call`**: escribe una línea como `audit tool.call Bash` en el registro de depuración para cada llamada a herramienta, y no cambia nada
322* **`fs.write`**: escribe una línea como `audit fs.write by reader "/tmp/notes.md"` para cada llamada `$.fs.write` que hace otro mod, y no cambia nada. El nombre del mod viene primero y la ruta está entrecomillada, por lo que una ruta que un mod elige no puede pasar por otro campo de la línea.373* **`fs.write`**: escribe una línea como `audit fs.write by reader "/tmp/notes.md"` para cada llamada a `$.fs.write` que hace otro mod, y no cambia nada. El nombre del mod va primero y la ruta va entre comillas, de modo que una ruta que elige un mod no puede hacerse pasar por otro campo de la línea.
323 374
324El hook `plugin.register` lee dos campos del evento:375El hook `plugin.register` lee dos campos del evento:
325 376
326* **`e.tier`**: dónde se ejecutaría el mod, uno de `prepend`, `user`, `append`, o `builtin`. Cada mod que una persona instala es `user`.377* **`e.tier`**: dónde se ejecutaría el mod, uno de `prepend`, `user`, `append` o `builtin`. Todo mod que instala una persona es `user`.
327* **`e.uses.calls`**: los métodos de la API de mods que llama el mod, cada uno deletreado `namespace.method` como `process.run`, sin el `$.` que `claude plugin validate` imprime378* **`e.uses.calls`**: los métodos de la API de mods que llama el mod, cada uno escrito como `namespace.method`, por ejemplo `process.run`, sin el `$.` que imprime `claude plugin validate`
328 379
329Cuando un usuario instala un mod que llama a `$.process.run`, el mod no se carga, y su registro de depuración tiene una línea que termina con `refused by acme-guard:` y su razón. El rechazo también llega a la transcripción en una [sesión que recarga en caliente un directorio de plugins](/docs/es/plugins/mods/troubleshoot#find-out-why-a-mod-does-nothing). Para bloquear una llamada sin rechazar el mod completo, devuelva `{ deny: 'your reason' }` de un gancho en el nombre de esa llamada.380Cuando un usuario instala un mod que llama a `$.process.run`, el mod no se carga, y su registro de depuración tiene una línea que termina con `refused by acme-guard:` y tu motivo. El rechazo también llega a la transcripción en una [sesión que recarga en caliente un directorio de plugin](/docs/es/plugins/mods/troubleshoot#find-out-why-a-mod-does-nothing). Para bloquear una llamada sin rechazar el mod completo, devuelve `{ deny: 'your reason' }` desde un hook en el nombre de esa llamada.
330 381
331Para enviar las líneas de auditoría a algún lugar que no sea el registro de depuración, llame a `$.http.fetch` desde los mismos hooks.382Para enviar las líneas de auditoría a otro lugar que no sea el registro de depuración, llama a `$.http.fetch` desde los mismos hooks.
332 383
333Una sesión puede ejecutarse sin su mod. Si el hilo de trabajo que ejecuta mods instalados [falla tres veces](/docs/es/plugins/mods/troubleshoot#mods-that-run-in-the-hooks-worker-are-off-for-this-session), Claude Code descarga cada mod que no está integrado, incluido el suyo, hasta que el usuario ejecute `/reload-plugins` o inicie una nueva sesión. Y un usuario que inicia Claude Code con `--safe-mode` se ejecuta sin mods instalados, incluidos los suyos.384Una sesión puede ejecutarse sin tu mod. Si el hilo de trabajo que ejecuta los mods instalados [falla tres veces](/docs/es/plugins/mods/troubleshoot#mods-that-run-in-the-hooks-worker-are-off-for-this-session), Claude Code descarga todos los mods que no están integrados, incluido el tuyo, hasta que el usuario ejecute `/reload-plugins` o inicie una nueva sesión. Y un usuario que inicia Claude Code con `--safe-mode` se ejecuta sin mods instalados, incluido el tuyo.
334 385
335[Crear un mod](/docs/es/plugins/mods/create) cubre los archivos que necesita un mod. [Pruebe un mod que juzga otros mods](/docs/es/plugins/mods/test#test-a-mod-that-judges-other-mods) tiene un archivo de prueba para este mod de política.386[Crear un mod](/docs/es/plugins/mods/create) cubre los archivos que necesita un mod. [Probar un mod de políticas](/docs/es/plugins/mods/test#test-a-mod-that-judges-other-mods) tiene un archivo de prueba para este mod de políticas.
336 387
337<h4 id="refuse-mods-when-your-check-fails">388<h4 id="refuse-mods-when-your-check-fails">
338 Rechace mods cuando su verificación falla389 Rechaza mods cuando tu comprobación falla
339</h4>390</h4>
340 391
341Si su hook `plugin.register` lanza o se ejecuta más allá de su límite de tiempo, Claude Code omite el gancho, por lo que la verificación falla abierta y el mod que estaba verificando se carga. Para fallar cerrado y rechazar los mods de los usuarios, mueva la verificación a una función nombrada y agregue un controlador `.catch` que devuelva el rechazo. Esta versión del archivo muestra solo el hook `plugin.register`, así que mantenga los dos hooks de auditoría de la primera versión en `register`:392Si tu hook `plugin.register` lanza una excepción o excede su límite de tiempo, Claude Code omite el hook, por lo que la comprobación falla en modo abierto y el mod que estaba comprobando se carga. Para fallar en modo cerrado y rechazar los mods de los usuarios, mueve la comprobación a una función con nombre y agrega un manejador `.catch` que devuelva el rechazo. Esta versión del archivo muestra solo el hook `plugin.register`, así que conserva en `register` los dos hooks de auditoría de la primera versión:
342 393
343```javascript acme-guard/hooks/register.js theme={null}394```javascript acme-guard/hooks/register.js theme={null}
344const BLOCKED_CALLS = ['process.run', 'process.spawn']395const BLOCKED_CALLS = ['process.run', 'process.spawn']
345 396
346// La misma verificación que antes, movida a una función propia397// The same check as before, moved into a function of its own
347async function checkMod($, e, next) {398async function checkMod($, e, next) {
348 const blocked = e.uses.calls.filter((call) => BLOCKED_CALLS.includes(call))399 const blocked = e.uses.calls.filter((call) => BLOCKED_CALLS.includes(call))
349 if (e.tier === 'user' && blocked.length > 0) {400 if (e.tier === 'user' && blocked.length > 0) {
353}404}
354 405
355export function register(on) {406export function register(on) {
356 // El controlador se ejecuta solo cuando checkMod lanza o se ejecuta más allá de su límite de tiempo407 // The handler runs only when checkMod throws or exceeds its time limit
357 on('plugin.register', checkMod).catch(async ($, e, next) => {408 on('plugin.register', checkMod).catch(async ($, e, next) => {
358 // Deje que los mods de su organización y los mods integrados se carguen409 // Let your organization's mods and built-in mods load
359 if (e.tier !== 'user') return next(e)410 if (e.tier !== 'user') return next(e)
360 // Rechace el mod de usuario que no pudo ser verificado411 // Refuse the user's mod that couldn't be checked
361 return { refuse: 'Acme policy check failed, so this mod was not loaded' }412 return { refuse: 'Acme policy check failed, so this mod was not loaded' }
362 })413 })
363}414}
364```415```
365 416
366Con el controlador en su lugar, un mod que estaba siendo verificado cuando la verificación lanzó o se agotó el tiempo no se carga, y la línea de rechazo lleva la segunda razón, como en `refused by acme-guard: Acme policy check failed, so this mod was not loaded`. El controlador pasa cada mod fuera del tier `user` a `next(e)`, por lo que una verificación fallida no detiene los mods que su organización enumera. [Maneje un gancho que falla](/docs/es/plugins/mods/events#handle-a-hook-that-fails) cubre `.catch` para otros eventos.417Con el manejador en su lugar, un mod que se estaba comprobando cuando la comprobación lanzó una excepción o agotó el tiempo no se carga, y la línea de rechazo lleva el segundo motivo, como en `refused by acme-guard: Acme policy check failed, so this mod was not loaded`. El manejador pasa a `next(e)` todos los mods fuera del nivel `user`, de modo que una comprobación fallida no detiene los mods que enumera tu organización. [Manejar un hook que falla](/docs/es/plugins/mods/events#handle-a-hook-that-fails) cubre `.catch` para otros eventos.
367 418
368<h2 id="next-steps">419<h2 id="next-steps">
369 Próximos pasos420 Próximos pasos
370</h2>421</h2>
371 422
372* [Seguridad de plugins](/docs/es/plugins/security): qué puede hacer cualquier plugin en la máquina de un usuario, y cómo revisar uno antes de que se instale423* [Seguridad de plugins](/docs/es/plugins/security): lo que cualquier plugin puede hacer en la máquina de un usuario y cómo revisar uno antes de instalarlo
373* [Descripción general de mods](/docs/es/plugins/mods/overview): qué es un mod y cómo se compara con hooks, skills y servidores MCP424* [Descripción general de los mods](/docs/es/plugins/mods/overview): qué es un mod y cómo se compara con los hooks, los skills y los servidores MCP
374* [El orden en que se ejecutan los mods](/docs/es/plugins/mods/events#the-order-mods-run-in): cómo `prependPlugins` y `appendPlugins` se ajustan con los mods de los usuarios425* [El orden en que se ejecutan los mods](/docs/es/plugins/mods/events#the-order-mods-run-in): cómo encajan `prependPlugins` y `appendPlugins` con los mods de los usuarios
375* [Configuración y variables de entorno](/docs/es/plugins/mods/reference#settings-and-environment-variables): cada configuración nombrada en esta página en una tabla426* [Configuración y variables de entorno](/docs/es/plugins/mods/reference#settings-and-environment-variables): todos los ajustes mencionados en esta página en una sola tabla