Configurar permisos
Controle cómo su agente utiliza herramientas con modos de permiso, hooks y reglas declarativas de permitir/denegar.
El 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 para manejar todo lo demás en tiempo de ejecución.
Cómo se evalúan los permisos
[!NOTE]
Si cargas un plugin que contiene un mod, consulta dónde encajan las decisiones de un mod entre las reglas y los hooks.
Cuando Claude solicita una herramienta, Claude Code comprueba la llamada en estos pasos. Cada paso puede decidir la llamada, enviarla a tu devolución de llamada canUseTool o dejarla pasar:
1. Hooks
Ejecutar hooks. Un hook puede denegar la llamada directamente o dejarla pasar. Un hook que devuelve allow no omite los pasos de reglas de denegación y de reglas de pregunta, que se evalúan independientemente del resultado del hook.
Un hook PreToolUse que devuelve allow tampoco puede aprobar un comando rm o rmdir cuyo destino Claude Code reconoce como una ruta crítica, como rm -rf ~. Para saber qué hace ese allow en modo plan, consulta Aprobaciones de hooks en modo plan.
2. Reglas de denegación
Si una regla de denegación de disallowed_tools o de un archivo de configuración que carga el SDK coincide, la llamada se deniega y no se llama a canUseTool. La llamada se deniega de esta forma incluso en modo bypassPermissions y cuando un hook devolvió allow.
En el SDK de TypeScript, si estableces el permission_policy de una herramienta personalizada en always_deny, una llamada a esa herramienta se deniega en este paso.
3. Reglas de pregunta
Comprobar reglas ask de settings.json. Si una regla de pregunta coincide, la llamada se pasa a tu devolución de llamada canUseTool para confirmación, incluso en modo bypassPermissions.
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"] 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 convierte cada solicitud de permiso en una denegación. La anotación MCP requiere Claude Code v2.1.199 o posterior.
Las herramientas del conector de claude.ai que tu 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.
En el SDK de TypeScript, si estableces el permission_policy de una herramienta personalizada en always_ask, ninguna regla de permiso aprueba sus llamadas, ni siquiera una entrada de allowedTools. En modo dontAsk Claude Code deniega esas llamadas, y en modo auto, plan o bypassPermissions puede aprobarlas antes de que se ejecute tu devolución de llamada.
4. Modo de permisos
Aplicar el modo de permisos activo:
- En modo
bypassPermissions, Claude Code aprueba cada llamada que llega a este paso, a menos que sea una de las acciones que ningún modo aprueba automáticamente. Para saber cuáles de esas acciones van a tu devolución de llamadacanUseTool, consulta Modo de omisión de permisos. - En modo
acceptEdits, Claude Code aprueba las operaciones de archivo enumeradas en Modo de aceptación de ediciones. - En modo
plan, algunas llamadas llegan a tu devolución de llamada y, cuando el modo automático está disponible, otras van a su clasificador en su lugar. Para más información, consulta Modo plan. - En los modos
defaultydontAsk, la llamada continúa hacia las reglas de permiso. - Para el modo
auto, consulta Modo automático.
5. Reglas de permiso
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 tus directorios de trabajo o un comando Bash de solo lectura.
Las eliminaciones de rutas críticas reconocidas no se aprueban por una regla de permiso, y los comandos marcados con Dangerous rm operation not ruled out no se aprueban por una regla Bash o Bash(*). Si luego llegan a tu devolución de llamada depende del modo de permisos: en una sesión del Agent SDK en modo auto, por ejemplo, Claude Code las deniega por defecto sin llamarla. La tabla de modos de Rutas críticas enumera lo que cada modo hace con ellas.
Una regla de permiso no aprueba una lectura desde una ruta de red.
6. Devolución de llamada canUseTool
Si ningún paso anterior resuelve la solicitud, llama a tu devolución de llamada canUseTool para una decisión. En modo dontAsk, este paso se omite y la herramienta se deniega, aunque un mod que instalaste aún puede aprobar algunas de esas llamadas.
En el SDK de TypeScript, si establece permissionPrompts: 'none', su devolución de llamada no se llama en este paso. Un hook PermissionRequest aún tiene la oportunidad de decidir, y si no lo hace, Claude Code deniega la llamada. La opción requiere Claude Code v2.1.259 o posterior.
Si 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:
permissionMode: 'bypassPermissions': el texto de la advertencia empieza concanUseTool will not be invoked: permissionMode 'bypassPermissions'. Las llamadas a herramientas se aprueban antes de que se consultecanUseTool, por lo que tu devolución de llamada se ejecuta solo para unas pocas llamadas, como las enumeradas en Modo de omisión de permisos. Para comprobar también las llamadas aprobadas, coloca las comprobaciones de tu devolución de llamada en un hookPreToolUse- Una entrada de
allowedToolsque es solo un nombre de herramienta, como"Read": la advertencia enumera cada una de esas entradas después decanUseTool will not be invoked for:. Las llamadas a una herramienta enumerada se aprueban antes de que se consultecanUseTool, aparte de las llamadas que una regla de permiso nunca aprueba. Para que tu devolución de llamada se ejecute en las llamadas de una herramienta enumerada que necesitan aprobación, elimina la entrada de esa herramienta deallowedTools
Las 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.
La advertencia no bloquea ninguna llamada ni cambia ninguna opción. Si tu devolución de llamada ya recibe todas las llamadas que quieres comprobar, deja tu configuración como está. Para registrar la advertencia, escucha con process.on('warning', ...) y haz coincidir el código CLAUDE_SDK_CAN_USE_TOOL_SHADOWED.
Esta página se enfoca en reglas de permiso y denegación y modos de permiso. Para los otros pasos:
- Hooks: ejecutar código personalizado para permitir, denegar o modificar solicitudes de herramientas. Consulte Controlar la ejecución con hooks.
- 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.
Reglas de permitir y denegar
Cuando configuras allowedTools y disallowedTools (TypeScript) o allowed_tools y disallowed_tools (Python), Claude Code añade sus entradas a las listas de reglas de permitir y denegar en el flujo de evaluación de permisos. 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.
| Opción | Efecto |
|---|---|
allowed_tools=["Read", "Grep"] |
Read y Grep se aprueban automáticamente, aparte de las lecturas desde rutas de red. Otras herramientas no listadas aquí siguen existiendo, y las llamadas a ellas que necesiten aprobación caen en el modo de permisos y canUseTool. |
disallowed_tools=["Bash"] |
La definición de la herramienta Bash se elimina de la solicitud. |
disallowed_tools=["Bash(rm *)"] |
Bash sigue disponible. Las llamadas que coincidan con rm * tal como está escrito se deniegan en todos los modos de permisos, incluido bypassPermissions. Otras llamadas a Bash, incluido /bin/rm, caen en el modo de permisos. |
disallowed_tools=["*"] |
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. |
Las 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 hayas 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 y no aprueba automáticamente nada.
[!WARNING]
Las herramientas aprobadas automáticamente nunca llegan a
canUseTool. Una llamada de herramienta aprobada en cualquier paso anterior, poracceptEditsobypassPermissions, o por una regla de permitir, omite su devolución de llamadacanUseTool, por lo que las comprobaciones de permisos que coloque allí se omiten silenciosamente para esa herramienta.Si las llamadas a una herramienta en
allowed_toolsaún llegan a tu devolución de llamadacanUseTool, o se deniegan en mododontAsk, comprueba si son lecturas desde rutas de red o se encuentran entre las siguientes llamadas. Ninguna regla de permitir aprueba estas llamadas. En mododontAsk, que nunca pide confirmación, Claude Code las deniega sin invocarcanUseTool, y en los demás modos de permisos las gestionas como indica cada elemento:
AskUserQuestion, herramientas MCP marcadas_meta["anthropic/requiresUserInteraction"]y herramientas de conector que tu organización configuró comoask: respóndelas en la devolución de llamada. Gestionar preguntas aclaratorias muestra cómo responder aAskUserQuestion, y una llamada de conector llega con el motivoYour organization requires approval for this toolHerramientas personalizadas que tu aplicación marca como
always_ask: decide la llamada en la devolución de llamada. Para que estas llamadas dejen de llegar, cambia la política a mitad de la sesión. En los modosauto,planybypassPermissions, la llamada puede aprobarse antes de la devolución de llamada, en los casos enumerados en Modos de permisos que pueden aprobar una llamadaalways_askEliminaciones de rutas críticas reconocidas con
rmyrmdir: en los modosdefault,acceptEditsybypassPermissions, permite o deniega la eliminación en la devolución de llamada, dondedecisionReasonempieza porDangerous rm. Para los modosautoyplan, consulta Eliminaciones de rutas críticas en cada modo de permisosNombre simple: una entrada como
Readomcp__github__get_issueaprueba automáticamente cada llamada a esa herramienta, aparte de las acciones que ningún modo aprueba automáticamente y de las lecturas desde rutas de red.Regla delimitada: una entrada como
Bash(npm test *)aprueba automáticamente las llamadas que coinciden con ella, y otras llamadas aBashque necesiten aprobación caen en el modo de permisos.Para comprobar las llamadas que aprueban una regla de permitir,
acceptEditsobypassPermissions, usa un hookPreToolUse, que también se ejecuta para esas llamadas. Una denegación de hook se aplica incluso en modobypassPermissions.
Para un agente bloqueado, empareje allowedTools con permissionMode: "dontAsk":
const options = {
allowedTools: ["Read", "Glob", "Grep"],
permissionMode: "dontAsk"
};
Las llamadas a Read, Glob y Grep listadas se aprueban, aparte de las acciones que ningún modo aprueba automáticamente y de las lecturas desde rutas de red. Cualquier otra llamada que pediría confirmación se deniega en su lugar, aunque un mod que hayas instalado aún puede aprobar algunas de esas llamadas.
Las llamadas que no necesitan aprobación en modo default se ejecutan independientemente de si las listas o no. Incluyen comandos Bash de solo lectura, herramientas como Agent que no preguntan antes de ejecutarse y lecturas de archivos dentro de tus directorios de trabajo. Para ocultar por completo una herramienta integrada a Claude en lugar de denegar sus llamadas, añade su nombre simple a disallowedTools.
[!WARNING]
allowed_toolsno restringebypassPermissions.allowed_toolsaprueba previamente las herramientas que listas. En modobypassPermissions, Claude Code aprueba una llamada a una herramienta no listada, a menos que sea una de las acciones que ningún modo aprueba automáticamente.Si configuras
allowed_tools=["Read"]conpermission_mode="bypassPermissions", Claude Code sigue aprobando llamadas a herramientas comoBash,WriteyEdit. Si necesitasbypassPermissionspero quieres que herramientas específicas se bloqueen, usadisallowed_tools. Para las llamadas que aún llegan a tu devolución de llamadacanUseToolen este modo, consulta Modo de omisión de permisos.
Tambié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 para la sintaxis de reglas.
Para saber cuándo se aplican las reglas de permitir del .claude/settings.json de un proyecto, consulta Reglas de permitir del proyecto y confianza del espacio de trabajo.
Patrones de ruta en reglas
Las 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, así que escribe una regla de ruta para cualquiera de ellas como Edit(path). Si escribes una regla de ruta como Write(path) o NotebookEdit(path), no coincide con ninguna llamada y no tiene efecto.
En allowed_tools y disallowed_tools, empieza un patrón de ruta con // para una ruta absoluta, o con una sola / para una ruta dentro del directorio de trabajo de la sesión:
//path: con una regla de denegación deEdit(//secrets/**), Claude Code bloquea las escrituras bajo/secretsen el disco desde las herramientas de archivos de Claude y desde comandos Bash comoteey la redirección> file. Un script que Claude ejecuta y que abre archivos por sí mismo aún puede escribir bajo/secrets. Para una aplicación a nivel del sistema operativo, consulta Configurar la herramienta Bash en sandbox./path:Edit(/secrets/**)coincide con el directoriosecretsdentro del directorio de trabajo.
Para otras formas de empezar un patrón de ruta, consulta Reglas de Read y Edit.
Modos de permisos
Los modos de permisos proporcionan control global sobre cómo Claude utiliza las herramientas. Puede establecer el modo de permisos al llamar a query() o cambiarlo dinámicamente durante sesiones de transmisión.
Con Claude Code v2.1.302 o posterior, tu aplicación comienza en modo default a menos que establezcas un modo de permisos o la aplicación obtenga uno de permissions.defaultMode en sus archivos de configuración. En modo default, Claude Code deniega cualquier llamada a herramienta que necesite aprobación, a menos que la apruebes mediante una regla de permiso, un hook, una devolución de llamada canUseTool o una herramienta de solicitud de permisos. Si se deniegan llamadas a herramientas, consulta Llamadas a herramientas denegadas en ejecuciones de claude -p y del Agent SDK.
Modos disponibles
El SDK admite estos modos de permisos:
| Modo | Descripción | Comportamiento de herramientas |
|---|---|---|
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 |
dontAsk |
Denegar en lugar de preguntar | Cualquier llamada que de otro modo solicitaría confirmación es denegada sin llamar a canUseTool, aunque un mod que instalaste aún puede aprobar algunas de esas llamadas. Las llamadas aprobadas por allowed_tools o por reglas de permiso de settings.json se ejecutan, al igual que las llamadas que no necesitan aprobación en modo default. Algunas llamadas, como las lecturas desde rutas de red, son denegadas incluso cuando allowed_tools o una regla de permiso coinciden con ellas. Para ver la lista, consulta Modo no preguntar |
acceptEdits |
Aceptar automáticamente ediciones de archivos | Las ediciones de archivos y operaciones del sistema de archivos (mkdir, rm, mv, etc.) dentro de tus directorios de trabajo se aprueban automáticamente |
bypassPermissions |
Omitir verificaciones de permisos | Las herramientas se ejecutan sin solicitudes de permisos, excepto para las acciones que ningún modo aprueba automáticamente y, fuera de una sesión en la nube, las herramientas personalizadas que tu aplicación marca como always_ask. Úsalo con precaución |
plan |
Modo de planificación | Claude explora y planifica. Las ediciones hechas con las herramientas de archivos de Claude van a tu devolución de llamada canUseTool incluso cuando una regla de permiso coincide con ellas |
auto |
Aprobaciones clasificadas por modelo | Un clasificador de modelo revisa acciones como comandos de shell y solicitudes de red, permitiendo o bloqueando cada una que revisa. Consulte Modo Auto para disponibilidad y el orden de decisión |
[!WARNING]
Herencia de subagentes: Si tu sesión principal está en modo plan, un subagente cuyo
AgentDefinitionestablecepermissionMode: "acceptEdits"se sigue ejecutando en modo plan. Las llamadasEdityWritede ese subagente sobre tus archivos fuente siguen llegando a tu devolución de llamadacanUseTool. El modo plan también se mantiene para los subagentes que defines, de modo que delegarle trabajo a uno no evite revisar primero el plan.El subagente hereda
plan,acceptEdits,autoobypassPermissionsde la sesión principal, y bajo una sesión principal en mododefaultodontAskse ejecuta en el modo que establezcas. Incluso entonces, Claude Code nunca aplica un valor"bypassPermissions", y aplica un valor"auto"solo cuando el modo automático está disponible para ese subagente. La excepciónbypassPermissionsrequiere Claude Code v2.1.267 o posterior.Los subagentes pueden tener indicaciones del sistema diferentes y un comportamiento menos restringido que su agente principal, por lo que heredar
bypassPermissionsles otorga acceso completo y autónomo al sistema. Las acciones que ningún modo aprueba automáticamente aún se aplican.
Establecer modo de permisos
Puede establecer el modo de permisos una vez al iniciar una consulta, o cambiarlo dinámicamente mientras la sesión está activa.
[tab] En el momento de la consulta
Pasa
permission_mode(Python) opermissionMode(TypeScript) al crear una consulta.import asyncio from claude_agent_sdk import query, ClaudeAgentOptions async def main(): async for message in query( prompt="Help me refactor this code", options=ClaudeAgentOptions( permission_mode="default", # Set the mode here ), ): if hasattr(message, "result"): print(message.result) asyncio.run(main())import { query } from "@anthropic-ai/claude-agent-sdk"; async function main() { for await (const message of query({ prompt: "Help me refactor this code", options: { permissionMode: "default" // Set the mode here } })) { if ("result" in message) { console.log(message.result); } } } main();
[tab] Durante la transmisión
Llame a
set_permission_mode()(Python) osetPermissionMode()(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 aacceptEditsdespués de revisar el enfoque inicial de Claude.import asyncio from claude_agent_sdk import ClaudeSDKClient, ClaudeAgentOptions async def main(): async with ClaudeSDKClient( options=ClaudeAgentOptions( permission_mode="default", # Start in default mode ) ) as client: await client.query("Help me refactor this code") # Change mode dynamically mid-session await client.set_permission_mode("acceptEdits") # Process messages with the new permission mode async for message in client.receive_response(): if hasattr(message, "result"): print(message.result) asyncio.run(main())import { query } from "@anthropic-ai/claude-agent-sdk"; async function main() { const q = query({ prompt: "Help me refactor this code", options: { permissionMode: "default" // Start in default mode } }); // Change mode dynamically mid-session await q.setPermissionMode("acceptEdits"); // Process messages with the new permission mode for await (const message of q) { if ("result" in message) { console.log(message.result); } } } main();
Detalles del modo
Modo aceptar ediciones (acceptEdits)
Aprueba 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.
Operaciones aprobadas automáticamente:
- Ediciones de archivos con las herramientas Edit, Write y NotebookEdit
- Comandos del sistema de archivos:
mkdir,touch,rm,rmdir,mv,cp,sed
Ambos se aplican a rutas dentro del directorio de trabajo o de un directorio que agregues. En Python, agrega uno con add_dirs, y en TypeScript con additionalDirectories. En modo acceptEdits, Claude Code no aprueba automáticamente la solicitud cuando Claude:
- Trabaja en una ruta fuera de ese alcance
- Escribe en una ruta protegida
- Elimina con
rmormdiruna ruta que Claude Code reconoce como ruta crítica - Ejecuta
touchcon, por ejemplo, una opción, un glob o un prefijotimeout 5oLANG=C
Úselo cuando: confíe en las ediciones de Claude y desee una iteración más rápida, como durante la creación de prototipos o cuando trabaja en un directorio aislado.
Modo no preguntar (dontAsk)
Convierte cualquier solicitud de permiso en una denegación, sin llamar a canUseTool, aunque un mod que instalaste aún puede aprobar algunas de esas llamadas. Las herramientas preaprobadas por allowed_tools, reglas de permiso en settings.json o un hook se ejecutan normalmente. Las llamadas que no necesitan aprobación en modo default también se ejecutan normalmente, como lecturas de archivos dentro de tus directorios de trabajo y llamadas a Agent.
Estas llamadas son denegadas incluso cuando una regla de permiso coincide:
- Herramientas de conector que tu organización configuró como
ask - Herramientas que requieren interacción del usuario, como
AskUserQuestiony las herramientas MCP cuyo servidor establece_meta["anthropic/requiresUserInteraction"] - Herramientas personalizadas cuyo
permission_policytu aplicación establece enalways_ask - Lecturas desde rutas de red
- Eliminaciones de rutas críticas reconocidas
Si tu hook PreToolUse devuelve allow para una eliminación de ruta crítica reconocida, una lectura desde una ruta de red o una llamada a una herramienta marcada como always_ask, la llamada sigue siendo denegada. La verificación que reconoce estas eliminaciones puede pasar por alto algunos comandos.
Úsalo cuando: ejecutas un agente sin interfaz y quieres una denegación definitiva para cada llamada que de otro modo solicitaría confirmación.
Modo omitir permisos (bypassPermissions)
Aprueba automáticamente usos de herramientas sin solicitar confirmación, excepto las acciones que ningún modo aprueba automáticamente. Los hooks aún se ejecutan y pueden bloquear operaciones si es necesario. En Linux y macOS, Claude Code se niega a iniciarse en este modo como root o bajo sudo fuera de un sandbox reconocido, y la consulta falla antes del primer turno.
[!WARNING]
Ú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.
allowed_toolsno restringe este modo, y las llamadas a herramientas que no enumeraste también se aprueban. Estos controles aún se aplican:
- Las reglas de denegación, las reglas explícitas de
asky los hooks se evalúan antes de la verificación del modo y aún pueden bloquear una herramienta.- Las herramientas de conector que tu organización configuró como
ask, las herramientas que requieren interacción del usuario, las eliminaciones de rutas críticas reconocidas y los comandos Bash marcados conDangerous rm operation not ruled outaún se transfieren a tu devolución de llamadacanUseTool. La verificación que reconoce las eliminaciones de rutas críticas puede pasar por alto algunos comandos, y puedes desactivar la solicitud de eliminación de rutas críticas. Fuera de una sesión en la nube, las llamadas a herramientas personalizadas que tu aplicación marca comoalways_asktambién se transfieren a la devolución de llamada.- Las medidas de seguridad de mensajería entre sesiones aún se aplican.
Modo de planificación (plan)
Claude explora la base de código y produce un plan. Durante la planificación, las ediciones hechas con las herramientas de archivos de Claude fuera de las rutas protegidas llegan a tu devolución de llamada canUseTool, incluso cuando una regla de permiso coincide o un hook PreToolUse devuelve allow. Las llamadas a AskUserQuestion también llegan a tu devolución de llamada, incluso cuando una regla de permiso nombra la herramienta.
Cuando el modo automático está disponible, Claude Code envía estas llamadas durante la planificación al clasificador del modo automático para que las revise en lugar de enviarlas a tu devolución de llamada, cuando ninguna regla de permiso las aprueba:
- Comandos de shell
- Obtenciones web
- Búsquedas web
- Llamadas a herramientas MCP que su servidor marca como de solo lectura
Esta revisión está activada de forma predeterminada. Para desactivarla, establece useAutoModeDuringPlan en false en la opción settings que pasas a query(), o en tu configuración de usuario. Mientras la revisión está desactivada, las búsquedas web y las llamadas a herramientas MCP marcadas como de solo lectura llegan a tu devolución de llamada.
Para los comandos de shell y las obtenciones web, la tabla muestra si cada llamada llega a tu devolución de llamada:
| Llamada durante la planificación | Revisión activada | Revisión desactivada, o modo automático no disponible |
|---|---|---|
Un comando de shell de solo lectura, como ls |
Se ejecuta sin llegar a tu devolución de llamada | Se ejecuta sin llegar a tu devolución de llamada |
| Cualquier otro comando de shell que ninguna regla de permiso apruebe, excepto una eliminación de ruta crítica | Va al clasificador, que lo aprueba o rechaza sin tu devolución de llamada | Llega a tu devolución de llamada |
Una llamada a WebFetch a un dominio de documentación preaprobado |
Se ejecuta sin llegar a tu devolución de llamada | Se ejecuta sin llegar a tu devolución de llamada |
Cualquier otra llamada a WebFetch que ninguna regla de permiso apruebe |
Va al clasificador, que la aprueba o rechaza sin tu devolución de llamada | Llega a tu devolución de llamada |
Para saber qué sucede después de que el clasificador rechaza varias llamadas seguidas, consulta Umbrales de bloqueos repetidos.
[!NOTE]
En el SDK de TypeScript, si estableces
allowDangerouslySkipPermissions: truejunto conpermissionMode: 'plan', las ediciones de archivos aún llegan a tu devolución de llamadacanUseTool. Para cambiar más tarde una sesión que comienza en modo plan abypassPermissionsconsetPermissionMode(), necesitas tenerallowDangerouslySkipPermissionsestablecido desde el inicio.
Úsalo cuando: quieres que Claude produzca primero un plan, como durante la revisión de código o antes de un cambio grande.
Modo automático (auto)
Un modelo clasificador revisa acciones como comandos de shell y solicitudes de red antes de que se ejecuten, y permite o bloquea cada una que revisa. Para conocer los modelos y proveedores que requiere el modo automático y el orden en que evalúa las acciones, consulta Eliminar las solicitudes de permiso con el modo automático.
Si cambias una sesión que está en modo automático a un modelo que el modo automático no admite, usando set_model(), setModel() o applyFlagSettings(), la sesión cambia al modo default:
- Lo que ves: un mensaje
systemcon subtipostatusypermissionModeestablecido en"default", que el SDK de TypeScript tipa comoSDKStatusMessage. A partir de ese momento, las llamadas que necesitan aprobación y no coinciden con ninguna regla de permiso llegan a tu devolución de llamadacanUseTool. - Para volver al modo automático: cambia a un modelo compatible y luego llama a
set_permission_mode("auto")osetPermissionMode("auto"). Si vuelves a cambiar el modelo sin hacer esa llamada, la sesión permanece en mododefault. Mientras el modelo no compatible esté activo, la llamada falla conCannot set permission mode to auto: auto mode unavailable for this model.
El cambio al modo default después de una llamada a set_model(), setModel() o applyFlagSettings() requiere Claude Code v2.1.299 o posterior.
Recursos relacionados
Para los otros pasos en el flujo de evaluación de permisos:
- Manejar aprobaciones e entrada del usuario: mensajes de aprobación interactivos y preguntas aclaratorias
- Guía de hooks: ejecutar código personalizado en puntos clave del ciclo de vida del agente
- Reglas de permisos: reglas declarativas de permitir/denegar en
settings.json