6 6
7> Controle cómo su agente utiliza herramientas con modos de permiso, hooks y reglas declarativas de permitir/denegar.7> Controle cómo su agente utiliza herramientas con modos de permiso, hooks y reglas declarativas de permitir/denegar.
8 8
9El SDK del Agente Claude proporciona controles de permisos para gestionar cómo Claude utiliza las herramientas. Utilice modos de permiso y reglas para definir qué está permitido automáticamente, y la devolución de llamada [`canUseTool`](/docs/es/agent-sdk/user-input) para manejar todo lo demás en tiempo de ejecución.9El SDK del Agente Claude proporciona controles de permisos para gestionar cómo Claude utiliza herramientas. Utilice modos de permiso y reglas para definir qué está permitido automáticamente, y la devolución de llamada [`canUseTool`](/docs/es/agent-sdk/user-input) para manejar todo lo demás en tiempo de ejecución.
10 10
11<h2 id="how-permissions-are-evaluated">11<h2 id="how-permissions-are-evaluated">
12 Cómo se evalúan los permisos12 Cómo se evalúan los permisos
13</h2>13</h2>
14 14
15Cuando Claude solicita una herramienta, el SDK verifica los permisos en este orden:15Cuando Claude solicita una herramienta, el SDK comprueba los permisos en este orden:
16 16
17<Steps>17<Steps>
18 <Step title="Hooks">18 <Step title="Hooks">
19 Ejecute [hooks](/docs/es/agent-sdk/hooks) primero. Un hook puede denegar la llamada directamente o pasarla. Un hook que devuelve `allow` no omite las reglas de denegar y preguntar a continuación; esas se evalúan independientemente del resultado del hook. Un hook `PreToolUse` allow tampoco puede aprobar una eliminación `rm` o `rmdir` dirigida a una [ruta crítica](/docs/es/permission-modes#critical-paths).19 Ejecutar [hooks](/docs/es/agent-sdk/hooks) primero. Un hook puede denegar la llamada directamente o dejarla pasar. Un hook que devuelve `allow` no omite las reglas de denegación y pregunta a continuación; esas se evalúan independientemente del resultado del hook. Un hook `PreToolUse` allow tampoco puede aprobar una eliminación `rm` o `rmdir` dirigida a una [ruta crítica](/docs/es/permission-modes#critical-paths).
20 </Step>20 </Step>
21 21
22 <Step title="Reglas de denegar">22 <Step title="Reglas de denegación">
23 Verifique las reglas `deny` (de `disallowed_tools` y [settings.json](/docs/es/settings-reference#permission-settings)). Si una regla de denegar coincide, la herramienta se bloquea, incluso en modo `bypassPermissions`. Las reglas de nombre simple como `Bash` eliminan la herramienta del contexto de Claude antes de que comience esta evaluación, por lo que solo se verifican las reglas con alcance como `Bash(rm *)` en este paso.23 Comprobar reglas `deny` (de `disallowed_tools` y [settings.json](/docs/es/settings-reference#permission-settings)). Si una regla de denegación coincide, la herramienta se bloquea, incluso en modo `bypassPermissions`. Las reglas de denegación de nombre simple como `Bash` eliminan la herramienta del contexto de Claude antes de que comience esta evaluación, por lo que solo se comprueban las reglas con alcance como `Bash(rm *)` en este paso.
24 </Step>24 </Step>
25 25
26 <Step title="Reglas de preguntar">26 <Step title="Reglas de pregunta">
27 Verifique las reglas `ask` de [settings.json](/docs/es/settings-reference#permission-settings). Si una regla de preguntar coincide, la llamada se pasa a su devolución de llamada [`canUseTool`](/docs/es/agent-sdk/user-input) para confirmación, incluso en modo `bypassPermissions`.27 Comprobar reglas `ask` de [settings.json](/docs/es/settings-reference#permission-settings). Si una regla de pregunta coincide, la llamada se pasa a su devolución de llamada [`canUseTool`](/docs/es/agent-sdk/user-input) para confirmación, incluso en modo `bypassPermissions`.
28 28
29 Las herramientas que requieren interacción del usuario se comportan de la misma manera: `AskUserQuestion` y las herramientas MCP cuyo servidor establece [`_meta["anthropic/requiresUserInteraction"]`](/docs/es/mcp#require-approval-for-a-specific-tool) siempre se pasan a la devolución de llamada, incluso cuando una regla de permitir coincide. En modo `dontAsk` ambos casos se deniegan en su lugar, porque ese modo nunca solicita confirmación. La anotación MCP requiere Claude Code v2.1.199 o posterior.29 Las herramientas que requieren interacción del usuario se comportan de la misma manera: `AskUserQuestion` y herramientas MCP cuyo servidor establece [`_meta["anthropic/requiresUserInteraction"]`](/docs/es/mcp#require-approval-for-a-specific-tool) siempre se pasan a la devolución de llamada, incluso cuando una regla de permiso coincide. En modo `dontAsk` ambos casos se deniegan en su lugar, porque ese modo nunca solicita. La anotación MCP requiere Claude Code v2.1.199 o posterior.
30 30
31 Las herramientas del conector [claude.ai](/docs/es/mcp#organization-controls-on-connector-tools) que su organización ha establecido en `ask` también salen del flujo en este paso. Cada llamada se pasa a la devolución de llamada, incluso en modo `bypassPermissions` y incluso cuando una regla de permitir coincide. La devolución de llamada recibe la razón `Your organization requires approval for this tool`. En modo `dontAsk` la llamada se deniega en su lugar, porque ese modo nunca solicita confirmación.31 Las herramientas del conector [claude.ai](/docs/es/mcp#organization-controls-on-connector-tools) que su organización ha establecido en `ask` también salen del flujo en este paso. Cada llamada se pasa a la devolución de llamada, incluso en modo `bypassPermissions` y incluso cuando una regla de permiso coincide. La devolución de llamada recibe la razón `Your organization requires approval for this tool`. En modo `dontAsk` la llamada se deniega en su lugar, porque ese modo nunca solicita.
32 </Step>32 </Step>
33 33
34 <Step title="Modo de permiso">34 <Step title="Modo de permiso">
35 Aplique el [modo de permiso](#permission-modes) activo:35 Aplicar el [modo de permiso](#permission-modes) activo:
36 36
37 * En modo `bypassPermissions`, Claude Code aprueba todo lo que llega a este paso excepto las eliminaciones `rm` y `rmdir` dirigidas a una [ruta crítica](/docs/es/permission-modes#critical-paths), que se pasan en su lugar.37 * En modo `bypassPermissions`, Claude Code aprueba todo lo que llega a este paso excepto eliminaciones `rm` y `rmdir` dirigidas a una [ruta crítica](/docs/es/permission-modes#critical-paths), que se pasan en su lugar.
38 * En modo `acceptEdits`, Claude Code aprueba las operaciones de archivo enumeradas en [Modo de aceptar ediciones](#accept-edits-mode-acceptedits).38 * En modo `acceptEdits`, Claude Code aprueba las operaciones de archivo enumeradas en [Modo de aceptación de ediciones](#accept-edits-mode-acceptedits).
39 * En modo `plan`, Claude Code envía herramientas de edición de archivo y escritura de shell a su devolución de llamada `canUseTool` independientemente de las reglas de permitir, por lo que las operaciones de escritura no pueden ser aprobadas automáticamente mientras se planifica.39 * En modo `plan`, Claude Code envía herramientas de edición de archivos y escritura de shell a su devolución de llamada `canUseTool` independientemente de las reglas de permiso, por lo que las operaciones de escritura no pueden aprobarse automáticamente mientras se planifica.
40 * En otros modos, la solicitud se pasa.40 * En otros modos, la solicitud se pasa.
41 </Step>41 </Step>
42 42
43 <Step title="Reglas de permitir">43 <Step title="Reglas de permiso">
44 Verifique las reglas `allow` (de `allowed_tools` y settings.json). Si una regla coincide, la herramienta se aprueba. Una llamada que la herramienta aprueba por sí sola se resuelve en este paso también, sin necesidad de regla: por ejemplo una lectura de archivo dentro de sus directorios de trabajo o un [comando Bash de solo lectura](/docs/es/permissions#read-only-commands). Las eliminaciones `rm` y `rmdir` dirigidas a una [ruta crítica](/docs/es/permission-modes#critical-paths) nunca se aprueban por una regla de permitir: llegan a su devolución de llamada en los modos que solicitan confirmación, van al [clasificador](/docs/es/permission-modes#eliminate-prompts-with-auto-mode) en modo `auto` en Claude Code v2.1.218 o posterior, y se deniegan en modo `dontAsk`.44 Comprobar reglas `allow` (de `allowed_tools` y settings.json). Si una regla coincide, la herramienta se aprueba. Una llamada que la herramienta aprueba por sí sola también se resuelve en este paso, sin necesidad de regla: por ejemplo una lectura de archivo dentro de sus directorios de trabajo o un [comando Bash de solo lectura](/docs/es/permissions#read-only-commands). Las eliminaciones `rm` y `rmdir` dirigidas a una [ruta crítica](/docs/es/permission-modes#critical-paths) nunca se aprueban por una regla de permiso: llegan a su devolución de llamada en los modos que solicitan, van al [clasificador](/docs/es/permission-modes#eliminate-prompts-with-auto-mode) en modo `auto` en Claude Code v2.1.218 o posterior, y se deniegan en modo `dontAsk`.
45 </Step>45 </Step>
46 46
47 <Step title="Devolución de llamada canUseTool">47 <Step title="Devolución de llamada canUseTool">
51 </Step>51 </Step>
52</Steps>52</Steps>
53 53
54<img src="https://mintcdn.com/claude-code/jYgs7qigNjO1Badj/images/agent-sdk/permissions-flow.svg?fit=max&auto=format&n=jYgs7qigNjO1Badj&q=85&s=c771ad9085b1277d3708027a49c744bc" className="dark:hidden" alt="Diagrama del flujo de evaluación de permisos de seis pasos que coincide con los pasos anteriores: una solicitud de herramienta pasa a través de hooks, reglas de denegar, reglas de preguntar, modo de permiso, reglas de permitir y canUseTool. Los hooks, reglas de denegar y canUseTool pueden enrutar hacia Bloqueado; el modo de permiso de omisión, reglas de permitir y canUseTool pueden enrutar hacia Ejecutar; las reglas de preguntar enrutan a canUseTool." width="1180" height="260" data-path="images/agent-sdk/permissions-flow.svg" />54<img src="https://mintcdn.com/claude-code/jYgs7qigNjO1Badj/images/agent-sdk/permissions-flow.svg?fit=max&auto=format&n=jYgs7qigNjO1Badj&q=85&s=c771ad9085b1277d3708027a49c744bc" className="dark:hidden" alt="Diagrama del flujo de evaluación de permisos de seis pasos que coincide con los pasos anteriores: una solicitud de herramienta pasa a través de hooks, reglas de denegación, reglas de pregunta, modo de permiso, reglas de permiso y canUseTool. Los hooks, reglas de denegación y canUseTool pueden enrutar hacia Bloqueado; el modo de permiso bypass, reglas de permiso y canUseTool pueden enrutar hacia Ejecutar; las reglas de pregunta se enrutan a canUseTool." width="1180" height="260" data-path="images/agent-sdk/permissions-flow.svg" />
55 55
56<img src="https://mintcdn.com/claude-code/_xqph1dUOslCOwsj/images/agent-sdk/permissions-flow-dark.svg?fit=max&auto=format&n=_xqph1dUOslCOwsj&q=85&s=e53a91e9059cbf51852b7cedb4dd4251" className="hidden dark:block" alt="Diagrama del flujo de evaluación de permisos de seis pasos que coincide con los pasos anteriores: una solicitud de herramienta pasa a través de hooks, reglas de denegar, reglas de preguntar, modo de permiso, reglas de permitir y canUseTool. Los hooks, reglas de denegar y canUseTool pueden enrutar hacia Bloqueado; el modo de permiso de omisión, reglas de permitir y canUseTool pueden enrutar hacia Ejecutar; las reglas de preguntar enrutan a canUseTool." width="1180" height="260" data-path="images/agent-sdk/permissions-flow-dark.svg" />56<img src="https://mintcdn.com/claude-code/_xqph1dUOslCOwsj/images/agent-sdk/permissions-flow-dark.svg?fit=max&auto=format&n=_xqph1dUOslCOwsj&q=85&s=e53a91e9059cbf51852b7cedb4dd4251" className="hidden dark:block" alt="Diagrama del flujo de evaluación de permisos de seis pasos que coincide con los pasos anteriores: una solicitud de herramienta pasa a través de hooks, reglas de denegación, reglas de pregunta, modo de permiso, reglas de permiso y canUseTool. Los hooks, reglas de denegación y canUseTool pueden enrutar hacia Bloqueado; el modo de permiso bypass, reglas de permiso y canUseTool pueden enrutar hacia Ejecutar; las reglas de pregunta se enrutan a canUseTool." width="1180" height="260" data-path="images/agent-sdk/permissions-flow-dark.svg" />
57 57
58Si pasa una devolución de llamada `canUseTool` en una configuración donde el SDK de TypeScript espera que el orden de evaluación apruebe automáticamente las llamadas antes de que se consulte la devolución de llamada, el SDK emite una advertencia de proceso de Node.js una vez cuando se construye la consulta. El código de la advertencia es `CLAUDE_SDK_CAN_USE_TOOL_SHADOWED`. Dos configuraciones lo desencadenan:58Si pasa una devolución de llamada `canUseTool` en una configuración donde el SDK de TypeScript espera que el orden de evaluación apruebe automáticamente las llamadas antes de que se consulte la devolución de llamada, el SDK emite una advertencia de proceso de Node.js una vez cuando se construye la consulta. El código de la advertencia es `CLAUDE_SDK_CAN_USE_TOOL_SHADOWED`. Dos configuraciones la activan:
59 59
60* `permissionMode: 'bypassPermissions'`, que aprueba automáticamente cada llamada que llega al paso del modo de permiso aparte de las [acciones que ningún modo aprueba automáticamente](/docs/es/permission-modes#actions-no-mode-auto-approves)60* `permissionMode: 'bypassPermissions'`, que aprueba automáticamente cada llamada que llega al paso del modo de permiso aparte de las [acciones que ningún modo aprueba automáticamente](/docs/es/permission-modes#actions-no-mode-auto-approves)
61* Cada entrada `allowedTools` simple como `"Read"`, que aprueba automáticamente esa herramienta completa antes de que se consulte la devolución de llamada, aparte de las [acciones que ningún modo aprueba automáticamente](/docs/es/permission-modes#actions-no-mode-auto-approves)61* Cada entrada `allowedTools` simple como `"Read"`, que aprueba automáticamente esa herramienta completa antes de que se consulte la devolución de llamada, aparte de las [acciones que ningún modo aprueba automáticamente](/docs/es/permission-modes#actions-no-mode-auto-approves)
62 62
63Las entradas con un especificador como `Bash(ls *)` y el modo `acceptEdits` no lo desencadenan, y las reglas de permitir provenientes de archivos de configuración no son visibles para la verificación.63Las entradas con un especificador como `Bash(ls *)` y el modo `acceptEdits` no la activan, y las reglas de permiso provenientes de archivos de configuración no son visibles para la comprobación.
64 64
65Escuche con `process.on('warning', ...)` y haga coincidir el código para registrarlo o suprimirlo. Para controlar cada llamada de herramienta independientemente del modo y las reglas, use un [hook `PreToolUse`](/docs/es/agent-sdk/hooks) en su lugar.65Escuche con `process.on('warning', ...)` y haga coincidir el código para registrarlo o suprimirlo. Para controlar cada llamada de herramienta independientemente del modo y las reglas, use un [hook `PreToolUse`](/docs/es/agent-sdk/hooks) en su lugar.
66 66
67Esta página se enfoca en **reglas de permitir y denegar** y **modos de permiso**. Para los otros pasos:67Esta página se enfoca en **reglas de permiso y denegación** y **modos de permiso**. Para los otros pasos:
68 68
69* **Hooks:** ejecute código personalizado para permitir, denegar o modificar solicitudes de herramientas. Consulte [Controlar la ejecución con hooks](/docs/es/agent-sdk/hooks).69* **Hooks:** ejecutar código personalizado para permitir, denegar o modificar solicitudes de herramientas. Consulte [Controlar la ejecución con hooks](/docs/es/agent-sdk/hooks).
70* **Devolución de llamada canUseTool:** solicite aprobación a los usuarios en tiempo de ejecución, cuando ningún paso anterior resuelve la llamada. Consulte [Manejar aprobaciones e entrada del usuario](/docs/es/agent-sdk/user-input).70* **Devolución de llamada canUseTool:** solicitar aprobación a los usuarios en tiempo de ejecución, cuando ningún paso anterior resuelve la llamada. Consulte [Manejar aprobaciones e entrada del usuario](/docs/es/agent-sdk/user-input).
71 71
72<h2 id="allow-and-deny-rules">72<h2 id="allow-and-deny-rules">
73 Reglas de permitir y denegar73 Reglas de permitir y denegar
74</h2>74</h2>
75 75
76`allowed_tools` y `disallowed_tools` (TypeScript: `allowedTools` / `disallowedTools`) agregan entradas a las listas de reglas de permitir y denegar en el flujo de evaluación anterior. Si nombra una de las [herramientas de seguimiento de tareas](/docs/es/agent-sdk/todo-tracking#model-availability) en `allowed_tools`, Claude Code también opta por la sesión. Cualquier otra herramienta no listada en `allowed_tools` sigue estando disponible para Claude, y una llamada a ella que necesita aprobación se descarta al modo de permiso. Las reglas de denegar se comportan de manera diferente dependiendo de si nombran una herramienta o delimitan un patrón dentro de una.76`allowed_tools` y `disallowed_tools` (TypeScript: `allowedTools` / `disallowedTools`) añaden entradas a las listas de reglas de permitir y denegar en el flujo de evaluación anterior. Si nombra una de las [herramientas de seguimiento de tareas](/docs/es/agent-sdk/todo-tracking#model-availability) en `allowed_tools`, Claude Code también opta por la sesión. Cualquier otra herramienta no listada en `allowed_tools` sigue estando disponible para Claude, y una llamada a ella que necesite aprobación cae en el modo de permisos. Las reglas de denegación se comportan de manera diferente dependiendo de si nombran una herramienta o delimitan un patrón dentro de una.
77 77
78| Opción | Efecto |78| Opción | Efecto |
79| :-------------------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |79| :-------------------------------- | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
80| `allowed_tools=["Read", "Grep"]` | `Read` y `Grep` se aprueban automáticamente. Otras herramientas no listadas aquí aún existen, y las llamadas a ellas que necesitan aprobación se descartan al modo de permiso y `canUseTool`. |80| `allowed_tools=["Read", "Grep"]` | `Read` y `Grep` se aprueban automáticamente. Otras herramientas no listadas aquí siguen existiendo, y las llamadas a ellas que necesiten aprobación caen en el modo de permisos y `canUseTool`. |
81| `disallowed_tools=["Bash"]` | La definición de la herramienta `Bash` se elimina de la solicitud. Claude no ve la herramienta y no puede intentarla. |81| `disallowed_tools=["Bash"]` | La definición de la herramienta `Bash` se elimina de la solicitud. Claude no ve la herramienta y no puede intentarla. |
82| `disallowed_tools=["Bash(rm *)"]` | `Bash` permanece disponible. Las llamadas que coinciden con `rm *` [tal como está escrito](/docs/es/permissions#bash-rule-limits) se deniegan en cada modo de permiso, incluido `bypassPermissions`. Otras llamadas de `Bash`, incluidas `/bin/rm`, se descartan al modo de permiso. |82| `disallowed_tools=["Bash(rm *)"]` | `Bash` sigue disponible. Las llamadas que coincidan con `rm *` [tal como está escrito](/docs/es/permissions#bash-rule-limits) se deniegan en todos los modos de permisos, incluido `bypassPermissions`. Otras llamadas a `Bash`, incluido `/bin/rm`, caen en el modo de permisos. |
83| `disallowed_tools=["*"]` | Cada definición de herramienta se elimina de la solicitud. Los patrones globales de nombres de herramientas se admiten en reglas de denegar: `"*"` coincide con cada herramienta y `"mcp__*"` coincide con cada herramienta MCP en todos los servidores. |83| `disallowed_tools=["*"]` | Cada definición de herramienta se elimina de la solicitud. Los patrones globales de nombres de herramientas se admiten en reglas de denegación: `"*"` coincide con cada herramienta y `"mcp__*"` coincide con cada herramienta MCP en todos los servidores. |
84 84
85Las reglas de permitir aceptan patrones globales de nombres de herramientas solo después de un prefijo literal `mcp__<server>__`. El segmento del servidor debe estar libre de patrones globales para que la regla nombre un servidor específico que haya configurado: `mcp__puppeteer__*` coincide con cada herramienta del servidor `puppeteer`, y `mcp__github__get_*` coincide con sus herramientas `get_`. Una entrada sin ancla como `allowed_tools=["*"]` o `allowed_tools=["mcp__*"]` se ignora con una advertencia de inicio y no pre-aprueba nada.85Las reglas de permitir aceptan patrones globales de nombres de herramientas solo después de un prefijo literal `mcp__<server>__`. El segmento del servidor debe estar libre de patrones globales para que la regla nombre un servidor específico que haya configurado: `mcp__puppeteer__*` coincide con cada herramienta del servidor `puppeteer`, y `mcp__github__get_*` coincide con sus herramientas `get_`. Una entrada sin ancla como `allowed_tools=["*"]` o `allowed_tools=["mcp__*"]` se ignora con una advertencia de inicio y no aprueba automáticamente nada.
86 86
87Las reglas delimitadas para `Read` y `Edit` toman un patrón de ruta. Las reglas `Edit(path)` rigen todas las herramientas integradas que escriben archivos, incluidas `Write` y `NotebookEdit`; una regla `Write(path)` nunca es coincidida por las comprobaciones de permiso de archivo.87Las reglas delimitadas para `Read` y `Edit` toman un patrón de ruta. Las reglas `Edit(path)` rigen todas las herramientas integradas que escriben archivos, incluidas `Write` y `NotebookEdit`; una regla `Write(path)` nunca es coincidida por las comprobaciones de permisos de archivo.
88 88
89Use `//path` para una ruta del sistema de archivos absoluta: una regla de denegar de `Edit(//secrets/**)` bloquea escrituras en cualquier lugar bajo `/secrets` en el disco. Con una sola barra diagonal inicial, `Edit(/secrets/**)` se ancla en la fuente de la regla en su lugar. Para reglas pasadas a través de `allowed_tools` o `disallowed_tools`, eso significa el directorio de trabajo de la sesión, por lo que la regla no bloquea `/secrets` en el disco. Consulte [Reglas de Read y Edit](/docs/es/permissions#read-and-edit) para las cuatro formas de anclaje y cómo se resuelven las reglas de archivos de configuración.89Use `//path` para una ruta del sistema de archivos absoluta: una regla de denegación de `Edit(//secrets/**)` bloquea escrituras en cualquier lugar bajo `/secrets` en el disco. Con una sola barra diagonal inicial, `Edit(/secrets/**)` se ancla en la fuente de la regla en su lugar. Para reglas pasadas a través de `allowed_tools` o `disallowed_tools`, eso significa el directorio de trabajo de la sesión, por lo que la regla no bloquea `/secrets` en el disco. Consulte [Reglas de Read y Edit](/docs/es/permissions#read-and-edit) para las cuatro formas de anclaje y cómo se resuelven las reglas de archivos de configuración.
90 90
91<Warning>91<Warning>
92 **Las herramientas pre-aprobadas nunca llegan a `canUseTool`.** Una llamada de herramienta aprobada en cualquier paso anterior, por `acceptEdits` o `bypassPermissions`, o por una regla de permitir, omite su devolución de llamada `canUseTool`, por lo que las comprobaciones de permiso que coloque allí se omiten silenciosamente para esa herramienta. `AskUserQuestion`, herramientas MCP marcadas [`_meta["anthropic/requiresUserInteraction"]`](/docs/es/mcp#require-approval-for-a-specific-tool), herramientas de conector [que su organización configuró para `ask`](/docs/es/mcp#organization-controls-on-connector-tools), y removals de `rm` y `rmdir` dirigidos a una [ruta crítica](/docs/es/permission-modes#critical-paths) aún llegan a la devolución de llamada, incluso cuando una regla de permitir coincide. En modo `auto`, los removals de ruta crítica van al [clasificador](/docs/es/permission-modes#eliminate-prompts-with-auto-mode) en lugar de la devolución de llamada, mientras que las otras llamadas listadas aquí aún llegan a ella; el enrutamiento del clasificador requiere Claude Code v2.1.218 o posterior. En modo `dontAsk` estas llamadas se deniegan en su lugar, sin invocar la devolución de llamada.92 **Las herramientas aprobadas automáticamente nunca llegan a `canUseTool`.** Una llamada de herramienta aprobada en cualquier paso anterior, por `acceptEdits` o `bypassPermissions`, o por una regla de permitir, omite su devolución de llamada `canUseTool`, por lo que las comprobaciones de permisos que coloque allí se omiten silenciosamente para esa herramienta. `AskUserQuestion`, herramientas MCP marcadas [`_meta["anthropic/requiresUserInteraction"]`](/docs/es/mcp#require-approval-for-a-specific-tool), herramientas de conector [que su organización configuró para `ask`](/docs/es/mcp#organization-controls-on-connector-tools), y removals de `rm` y `rmdir` dirigidos a una [ruta crítica](/docs/es/permission-modes#critical-paths) aún llegan a la devolución de llamada, incluso cuando una regla de permitir coincide. En modo `auto`, los removals de ruta crítica van al [clasificador](/docs/es/permission-modes#eliminate-prompts-with-auto-mode) en lugar de la devolución de llamada, mientras que las otras llamadas listadas aquí aún la alcanzan; el enrutamiento del clasificador requiere Claude Code v2.1.218 o posterior. En modo `dontAsk` estas llamadas se deniegan en su lugar, sin invocar la devolución de llamada.
93 93
94 La cobertura depende de la forma de la entrada: un nombre simple como `Read` o `mcp__github__get_issue` pre-aprueba cada llamada a esa herramienta aparte de las excepciones anteriores, mientras que una regla delimitada como `Bash(npm test *)` pre-aprueba solo las llamadas coincidentes, y otras llamadas de `Bash` que necesitan aprobación aún se descartan a la devolución de llamada. Para comprobaciones que deben ejecutarse en cada llamada de herramienta, use un hook [`PreToolUse`](/docs/es/agent-sdk/hooks): los hooks se ejecutan antes de cada otro paso, y una denegación de hook se aplica incluso en modo `bypassPermissions`.94 La cobertura depende de la forma de la entrada: un nombre simple como `Read` o `mcp__github__get_issue` aprueba automáticamente cada llamada a esa herramienta aparte de las excepciones anteriores, mientras que una regla delimitada como `Bash(npm test *)` aprueba automáticamente solo las llamadas coincidentes, y otras llamadas a `Bash` que necesiten aprobación aún caen en la devolución de llamada. Para comprobaciones que deben ejecutarse en cada llamada de herramienta, use un [hook `PreToolUse`](/docs/es/agent-sdk/hooks): los hooks se ejecutan antes de cada otro paso, y una denegación de hook se aplica incluso en modo `bypassPermissions`.
95</Warning>95</Warning>
96 96
97Para un agente bloqueado, empareje `allowedTools` con `permissionMode: "dontAsk"`:97Para un agente bloqueado, empareje `allowedTools` con `permissionMode: "dontAsk"`:
103};103};
104```104```
105 105
106Las herramientas listadas se aprueban, aparte de las [acciones que ningún modo pre-aprueba](/docs/es/permission-modes#actions-no-mode-auto-approves), y cada otra llamada que solicitaría se deniega en su lugar. Las llamadas que no necesitan aprobación en modo `default` se ejecutan independientemente de si las lista, como [comandos Bash de solo lectura](/docs/es/permissions#read-only-commands), herramientas como `Agent` que no solicitan antes de ejecutarse, y lecturas de archivos dentro de sus directorios de trabajo. Para poner una herramienta fuera del alcance de Claude completamente, agregue su nombre simple a `disallowedTools`.106Las herramientas listadas se aprueban, aparte de las [acciones que ningún modo aprueba automáticamente](/docs/es/permission-modes#actions-no-mode-auto-approves), y cada otra llamada que solicitaría se deniega en su lugar. Las llamadas que no necesitan aprobación en modo `default` se ejecutan independientemente de si las lista o no, como [comandos Bash de solo lectura](/docs/es/permissions#read-only-commands), herramientas como `Agent` que no preguntan antes de ejecutarse, y lecturas de archivos dentro de sus directorios de trabajo. Para poner una herramienta fuera del alcance de Claude por completo, añada su nombre simple a `disallowedTools`.
107 107
108<Warning>108<Warning>
109 **`allowed_tools` no restringe `bypassPermissions`.** `allowed_tools` pre-aprueba las herramientas que lista. Las herramientas no listadas no coinciden con ninguna regla de permitir y se descartan al modo de permiso, donde `bypassPermissions` las aprueba. Establecer `allowed_tools=["Read"]` junto con `permission_mode="bypassPermissions"` aún aprueba cada herramienta, incluidas `Bash`, `Write` y `Edit`. Si necesita `bypassPermissions` pero desea que herramientas específicas se bloqueen, use `disallowed_tools`.109 **`allowed_tools` no restringe `bypassPermissions`.** `allowed_tools` aprueba previamente las herramientas que lista. Otras herramientas no listadas no son coincididas por ninguna regla de permitir y caen en el modo de permisos, donde `bypassPermissions` las aprueba. Configurar `allowed_tools=["Read"]` junto con `permission_mode="bypassPermissions"` aún aprueba cada herramienta, incluidas `Bash`, `Write` y `Edit`. Si necesita `bypassPermissions` pero desea que herramientas específicas se bloqueen, use `disallowed_tools`.
110</Warning>110</Warning>
111 111
112También puede configurar reglas de permitir, denegar y preguntar de forma declarativa en `.claude/settings.json`. Estas reglas se leen cuando la fuente de configuración `project` está habilitada, que lo está para las opciones predeterminadas de `query()`. Si establece `setting_sources` (TypeScript: `settingSources`) explícitamente, incluya `"project"` para que se apliquen. Consulte [Configuración de permisos](/docs/es/settings-reference#permission-settings) para la sintaxis de reglas.112También puede configurar reglas de permitir, denegar y preguntar de manera declarativa en `.claude/settings.json`. Estas reglas se leen cuando la fuente de configuración `project` está habilitada, que lo está para las opciones predeterminadas de `query()`. Si establece `setting_sources` (TypeScript: `settingSources`) explícitamente, incluya `"project"` para que se apliquen. Consulte [Configuración de permisos](/docs/es/settings-reference#permission-settings) para la sintaxis de reglas.
113 113
114<h2 id="permission-modes">114<h2 id="permission-modes">
115 Modos de permisos115 Modos de permisos
124El SDK admite estos modos de permisos:124El SDK admite estos modos de permisos:
125 125
126| Modo | Descripción | Comportamiento de herramientas |126| Modo | Descripción | Comportamiento de herramientas |
127| :------------------ | :-------------------------------------------- | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |127| :------------------ | :-------------------------------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
128| `default` | Comportamiento de permisos estándar | Sin aprobaciones automáticas basadas en modo; las llamadas que necesitan aprobación y no coinciden con ninguna regla de permiso activan su devolución de llamada `canUseTool` |128| `default` | Comportamiento de permisos estándar | Sin aprobaciones automáticas basadas en modo; las llamadas que necesitan aprobación y no coinciden con ninguna regla de permiso activan su devolución de llamada `canUseTool` |
129| `dontAsk` | Denegar en lugar de preguntar | Cualquier llamada que de otro modo solicitaría confirmación se deniega. Las llamadas aprobadas por `allowed_tools` o reglas se ejecutan, al igual que las llamadas que no necesitan aprobación en modo `default`, como lecturas de archivos dentro de sus directorios de trabajo y llamadas a `Agent`. Las herramientas de conector [que su organización estableció en `ask`](/docs/es/mcp#organization-controls-on-connector-tools) y las herramientas que requieren interacción del usuario se deniegan incluso si las ha preaprobado, al igual que las eliminaciones `rm` y `rmdir` dirigidas a una [ruta crítica](/docs/es/permission-modes#critical-paths). `canUseTool` nunca se llama |129| `dontAsk` | Denegar en lugar de preguntar | Cualquier llamada que de otro modo solicitaría confirmación es denegada. Las llamadas aprobadas por `allowed_tools` o reglas se ejecutan, al igual que las llamadas que no necesitan aprobación en modo `default`, como lecturas de archivos dentro de sus directorios de trabajo y llamadas a `Agent`. Las herramientas de conector [que su organización configuró como `ask`](/docs/es/mcp#organization-controls-on-connector-tools) y las herramientas que requieren interacción del usuario son denegadas incluso si las ha preaprobado, al igual que las eliminaciones `rm` y `rmdir` dirigidas a una [ruta crítica](/docs/es/permission-modes#critical-paths). `canUseTool` nunca se llama |
130| `acceptEdits` | Aceptar automáticamente ediciones de archivos | Las ediciones de archivos y [operaciones del sistema de archivos](#accept-edits-mode-acceptedits) (`mkdir`, `rm`, `mv`, etc.) se aprueban automáticamente |130| `acceptEdits` | Aceptar automáticamente ediciones de archivos | Las ediciones de archivos y [operaciones del sistema de archivos](#accept-edits-mode-acceptedits) (`mkdir`, `rm`, `mv`, etc.) se aprueban automáticamente |
131| `bypassPermissions` | Omitir comprobaciones de permisos | Las herramientas se ejecutan sin solicitudes de permisos, excepto para las [acciones que ningún modo aprueba automáticamente](/docs/es/permission-modes#actions-no-mode-auto-approves). Úselo con precaución |131| `bypassPermissions` | Omitir verificaciones de permisos | Las herramientas se ejecutan sin solicitudes de permisos, excepto para las [acciones que ningún modo aprueba automáticamente](/docs/es/permission-modes#actions-no-mode-auto-approves). Úselo con precaución |
132| `plan` | Modo de planificación | Claude explora y planifica sin editar sus archivos fuente; las ediciones de archivos nunca se aprueban automáticamente y se solicitan a través de su devolución de llamada `canUseTool` |132| `plan` | Modo de planificación | Claude explora y planifica sin editar sus archivos fuente; las ediciones de archivos nunca se aprueban automáticamente y se solicitan a través de su devolución de llamada `canUseTool` |
133| `auto` | Aprobaciones clasificadas por modelo | Un clasificador de modelo aprueba o deniega solicitudes de permisos. Consulte [Modo Auto](/docs/es/permission-modes#eliminate-prompts-with-auto-mode) para disponibilidad |133| `auto` | Aprobaciones clasificadas por modelo | Un clasificador de modelo aprueba o deniega solicitudes de permisos. Consulte [Modo Auto](/docs/es/permission-modes#eliminate-prompts-with-auto-mode) para disponibilidad |
134 134
135<Warning>135<Warning>
136 **Herencia de subagentes:** Un subagente se ejecuta en el modo de permisos de la sesión principal a menos que establezca `permissionMode` en su [`AgentDefinition`](/docs/es/agent-sdk/typescript#agentdefinition) y la sesión principal esté en modo `default`, `dontAsk` o `plan`. Incluso entonces, Claude Code nunca aplica un valor `"bypassPermissions"`. Un subagente se ejecuta en modo `bypassPermissions` solo cuando la sesión principal lo hace. La excepción `bypassPermissions` requiere Claude Code v2.1.267 o posterior.136 **Herencia de subagentes:** Un subagente se ejecuta en el modo de permisos de la sesión principal a menos que establezca `permissionMode` en su [`AgentDefinition`](/docs/es/agent-sdk/typescript#agentdefinition) y la sesión principal esté en modo `default`, `dontAsk` o `plan`. Incluso entonces, Claude Code nunca aplica un valor `"bypassPermissions"`. Un subagente se ejecuta en modo `bypassPermissions` solo cuando la sesión principal lo hace. La excepción `bypassPermissions` requiere Claude Code v2.1.267 o posterior.
137 137
138 Los subagentes pueden tener diferentes indicaciones del sistema y comportamiento menos restringido que su agente principal, por lo que heredar `bypassPermissions` les otorga acceso completo y autónomo al sistema. Las [acciones que ningún modo aprueba automáticamente](/docs/es/permission-modes#actions-no-mode-auto-approves) aún se aplican.138 Los subagentes pueden tener indicaciones del sistema diferentes y un comportamiento menos restringido que su agente principal, por lo que heredar `bypassPermissions` les otorga acceso completo y autónomo al sistema. Las [acciones que ningún modo aprueba automáticamente](/docs/es/permission-modes#actions-no-mode-auto-approves) aún se aplican.
139</Warning>139</Warning>
140 140
141<h3 id="set-permission-mode">141<h3 id="set-permission-mode">
190 </Tab>190 </Tab>
191 191
192 <Tab title="Durante la transmisión">192 <Tab title="Durante la transmisión">
193 Llame a `set_permission_mode()` (Python) o `setPermissionMode()` (TypeScript) para cambiar el modo a mitad de sesión. El nuevo modo entra en vigor inmediatamente para todas las solicitudes de herramientas posteriores. Esto le permite comenzar de forma restrictiva y flexibilizar los permisos a medida que aumenta la confianza, por ejemplo, cambiar a `acceptEdits` después de revisar el enfoque inicial de Claude.193 Llame a `set_permission_mode()` (Python) o `setPermissionMode()` (TypeScript) para cambiar el modo durante la sesión. El nuevo modo entra en vigor inmediatamente para todas las solicitudes de herramientas posteriores. Esto le permite comenzar de forma restrictiva y flexibilizar los permisos a medida que aumenta la confianza, por ejemplo, cambiar a `acceptEdits` después de revisar el enfoque inicial de Claude.
194 194
195 <CodeGroup>195 <CodeGroup>
196 ```python Python theme={null}196 ```python Python theme={null}
251</h3>251</h3>
252 252
253<h4 id="accept-edits-mode-acceptedits">253<h4 id="accept-edits-mode-acceptedits">
254 Modo de aceptación de ediciones (`acceptEdits`)254 Modo aceptar ediciones (`acceptEdits`)
255</h4>255</h4>
256 256
257Aprueba automáticamente operaciones de archivo para que Claude pueda editar código sin solicitar confirmación. Otras herramientas (como comandos Bash que no son operaciones del sistema de archivos) aún requieren permisos normales.257Aprueba automáticamente operaciones de archivos para que Claude pueda editar código sin solicitar confirmación. Otras herramientas (como comandos Bash que no son operaciones del sistema de archivos) aún requieren permisos normales.
258 258
259**Operaciones aprobadas automáticamente:**259**Operaciones aprobadas automáticamente:**
260 260
273 Modo no preguntar (`dontAsk`)273 Modo no preguntar (`dontAsk`)
274</h4>274</h4>
275 275
276Convierte cualquier solicitud de permiso en una denegación, sin llamar a `canUseTool`. Las herramientas preaprobadas por `allowed_tools`, reglas de permiso en `settings.json` o un hook se ejecutan normalmente, al igual que las llamadas que no necesitan aprobación en modo `default`, como lecturas de archivos dentro de sus directorios de trabajo y llamadas a `Agent`. Las herramientas de conector [que su organización estableció en `ask`](/docs/es/mcp#organization-controls-on-connector-tools), las herramientas que requieren interacción del usuario y las eliminaciones `rm` y `rmdir` dirigidas a una [ruta crítica](/docs/es/permission-modes#critical-paths) se deniegan incluso cuando una regla de permiso coincide. Un permiso de hook `PreToolUse` tampoco borra una eliminación de ruta crítica.276Convierte cualquier solicitud de permisos en una denegación, sin llamar a `canUseTool`. Las herramientas preaprobadas por `allowed_tools`, reglas de permiso en `settings.json` o un hook se ejecutan normalmente, al igual que las llamadas que no necesitan aprobación en modo `default`, como lecturas de archivos dentro de sus directorios de trabajo y llamadas a `Agent`. Las herramientas de conector [que su organización configuró como `ask`](/docs/es/mcp#organization-controls-on-connector-tools), las herramientas que requieren interacción del usuario y las eliminaciones `rm` y `rmdir` dirigidas a una [ruta crítica](/docs/es/permission-modes#critical-paths) son denegadas incluso cuando una regla de permiso coincide. Un permiso de hook `PreToolUse` tampoco borra una eliminación de ruta crítica.
277 277
278**Úselo cuando:** desee una superficie de herramientas fija y explícita para un agente sin interfaz y prefiera una denegación definitiva sobre la dependencia silenciosa de que `canUseTool` esté ausente.278**Úselo cuando:** desee una superficie de herramientas fija y explícita para un agente sin interfaz y prefiera una denegación definitiva sobre la dependencia silenciosa de que `canUseTool` esté ausente.
279 279
280<h4 id="bypass-permissions-mode-bypasspermissions">280<h4 id="bypass-permissions-mode-bypasspermissions">
281 Modo de omisión de permisos (`bypassPermissions`)281 Modo omitir permisos (`bypassPermissions`)
282</h4>282</h4>
283 283
284Aprueba automáticamente los usos de herramientas sin solicitar confirmación, excepto los casos enumerados en la advertencia a continuación. Los hooks aún se ejecutan y pueden bloquear operaciones si es necesario.284Aprueba automáticamente usos de herramientas sin solicitar confirmación, excepto en los casos enumerados en la advertencia a continuación. Los hooks aún se ejecutan y pueden bloquear operaciones si es necesario.
285 285
286<Warning>286<Warning>
287 Úselo con extrema precaución. Claude tiene acceso completo al sistema en este modo. Solo úselo en entornos controlados donde confíe en todas las operaciones posibles.287 Úselo con extrema precaución. Claude tiene acceso completo al sistema en este modo. Úselo solo en entornos controlados donde confíe en todas las operaciones posibles.
288 288
289 `allowed_tools` no restringe este modo. Cada herramienta se aprueba, no solo las que enumeró. Estos controles aún se aplican:289 `allowed_tools` no restringe este modo. Cada herramienta se aprueba, no solo las que enumeró. Estos controles aún se aplican:
290 290
291 * Las reglas de denegación, las reglas explícitas de `ask` y los hooks se evalúan antes de la comprobación del modo y aún pueden bloquear una herramienta.291 * Las reglas de denegación, las reglas explícitas de `ask` y los hooks se evalúan antes de la verificación del modo y aún pueden bloquear una herramienta.
292 * Las herramientas de conector [que su organización estableció en `ask`](/docs/es/mcp#organization-controls-on-connector-tools), las herramientas que requieren interacción del usuario y las eliminaciones `rm` y `rmdir` dirigidas a una [ruta crítica](/docs/es/permission-modes#critical-paths) aún se transfieren a su devolución de llamada `canUseTool`.292 * Las herramientas de conector [que su organización configuró como `ask`](/docs/es/mcp#organization-controls-on-connector-tools), las herramientas que requieren interacción del usuario y las eliminaciones `rm` y `rmdir` dirigidas a una [ruta crítica](/docs/es/permission-modes#critical-paths) aún se transfieren a su devolución de llamada `canUseTool`.
293 * Las [salvaguardas de mensajería entre sesiones](/docs/es/permission-modes#skip-all-checks-with-bypasspermissions-mode) aún se aplican.293 * Las [medidas de seguridad de mensajería entre sesiones](/docs/es/permission-modes#skip-all-checks-with-bypasspermissions-mode) aún se aplican.
294</Warning>294</Warning>
295 295
296<h4 id="plan-mode-plan">296<h4 id="plan-mode-plan">
311 311
312Para los otros pasos en el flujo de evaluación de permisos:312Para los otros pasos en el flujo de evaluación de permisos:
313 313
314* [Manejar aprobaciones e entrada del usuario](/docs/es/agent-sdk/user-input): solicitudes de aprobación interactivas y preguntas aclaratorias314* [Manejar aprobaciones e entrada del usuario](/docs/es/agent-sdk/user-input): mensajes de aprobación interactivos y preguntas aclaratorias
315* [Guía de hooks](/docs/es/agent-sdk/hooks): ejecute código personalizado en puntos clave del ciclo de vida del agente315* [Guía de hooks](/docs/es/agent-sdk/hooks): ejecutar código personalizado en puntos clave del ciclo de vida del agente
316* [Reglas de permisos](/docs/es/settings-reference#permission-settings): reglas declarativas de permitir/denegar en `settings.json`316* [Reglas de permisos](/docs/es/settings-reference#permission-settings): reglas declarativas de permitir/denegar en `settings.json`