Saltar al contenido principal
El 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 para manejar todo lo demás en tiempo de ejecución.
Esta página cubre modos de permiso y reglas. Para crear flujos de aprobación interactivos donde los usuarios aprueban o deniegan solicitudes de herramientas en tiempo de ejecución, consulte Manejar aprobaciones e entrada del usuario.

Cómo se evalúan los permisos

Cuando Claude solicita una herramienta, el SDK verifica los permisos en este orden:
1

Hooks

Ejecute 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.
2

Reglas de denegar

Verifique las reglas deny (de disallowed_tools y settings.json). 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.
3

Reglas de preguntar

Verifique las reglas ask de settings.json. Si una regla de preguntar coincide, la llamada se pasa a su devolución de llamada canUseTool para confirmación, incluso en modo bypassPermissions. En modo dontAsk una regla de preguntar coincidente se deniega en su lugar, porque ese modo nunca solicita confirmación.
4

Modo de permiso

Aplique el modo de permiso activo. bypassPermissions aprueba todo lo que llega a este paso. acceptEdits aprueba operaciones de archivo. plan enruta 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. Otros modos se descartan.
5

Reglas de permitir

Verifique las reglas allow (de allowed_tools y settings.json). Si una regla coincide, la herramienta se aprueba.
6

Devolución de llamada canUseTool

Si no se resuelve por ninguno de los anteriores, llame a su devolución de llamada canUseTool para una decisión. En modo dontAsk, este paso se omite y la herramienta se deniega.
Diagrama del flujo de evaluación de permisos de cinco pasos que coincide con los pasos anteriores: una solicitud de herramienta pasa a través de hooks, reglas de denegar, 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. Esta página se enfoca en reglas de permitir y denegar y modos de permiso. Para los otros pasos:

Reglas de permitir y denegar

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. Las reglas de permitir solo afectan la aprobación: una herramienta no listada en allowed_tools sigue estando disponible para Claude y 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.
OpciónEfecto
allowed_tools=["Read", "Grep"]Read y Grep se aprueban automáticamente. Las herramientas no listadas aquí aún existen y se descartan al modo de permiso y canUseTool.
disallowed_tools=["Bash"]La definición de la herramienta Bash se elimina de la solicitud. Claude no ve la herramienta y no puede intentarla.
disallowed_tools=["Bash(rm *)"]Bash permanece disponible. Las llamadas que coinciden con rm * se deniegan en cada modo de permiso, incluido bypassPermissions. Otras llamadas de Bash se descartan al modo de permiso.
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.
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 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. Para un agente bloqueado, empareje allowedTools con permissionMode: "dontAsk". Las herramientas listadas se aprueban; cualquier otra cosa se deniega directamente en lugar de solicitar:
const options = {
  allowedTools: ["Read", "Glob", "Grep"],
  permissionMode: "dontAsk"
};
allowed_tools no restringe bypassPermissions. allowed_tools solo 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.
Tambié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 para la sintaxis de reglas.

Modos de permiso

Los modos de permiso proporcionan control global sobre cómo Claude utiliza las herramientas. Puede establecer el modo de permiso al llamar a query() o cambiarlo dinámicamente durante sesiones de transmisión.

Modos disponibles

El SDK admite estos modos de permiso:
ModoDescripciónComportamiento de herramientas
defaultComportamiento de permiso estándarSin aprobaciones automáticas; las herramientas no coincidentes activan su devolución de llamada canUseTool
dontAskDenegar en lugar de solicitarCualquier cosa no pre-aprobada por allowed_tools o reglas se deniega; canUseTool nunca se llama
acceptEditsAuto-aceptar ediciones de archivoLas ediciones de archivo y operaciones del sistema de archivos (mkdir, rm, mv, etc.) se aprueban automáticamente
bypassPermissionsOmitir todas las verificaciones de permisoLas herramientas se ejecutan sin solicitudes de permiso, a menos que una regla ask explícita coincida (usar con cuidado)
planModo de planificaciónClaude explora y planifica sin editar sus archivos fuente; las ediciones de archivo nunca se aprueban automáticamente y se solicitan a través de su devolución de llamada canUseTool
auto (solo TypeScript)Aprobaciones clasificadas por modeloUn clasificador de modelo aprueba o deniega cada llamada de herramienta. Consulte Modo Auto para disponibilidad
Herencia de subagentos: Cuando el padre usa bypassPermissions, acceptEdits o auto, todos los subagentos heredan ese modo y no se puede anular por subagentos. Los subagentos 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. Una regla ask explícita aún fuerza una solicitud.

Establecer modo de permiso

Puede establecer el modo de permiso una vez al iniciar una consulta, o cambiarlo dinámicamente mientras la sesión está activa.
Pase permission_mode (Python) o permissionMode (TypeScript) al crear una consulta. Este modo se aplica para toda la sesión a menos que se cambie dinámicamente.
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())

Detalles del modo

Modo de aceptar ediciones (acceptEdits)

Auto-aprueba operaciones de archivo para que Claude pueda editar código sin solicitar. Otras herramientas (como comandos Bash que no son operaciones del sistema de archivos) aún requieren permisos normales. Operaciones auto-aprobadas:
  • Ediciones de archivo (herramientas Edit, Write)
  • Comandos del sistema de archivos: mkdir, touch, rm, rmdir, mv, cp, sed
Ambos se aplican solo a rutas dentro del directorio de trabajo o additionalDirectories. Las rutas fuera de ese alcance y las escrituras en rutas protegidas aún solicitan. Usar cuando: confía en las ediciones de Claude y desea 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. Las herramientas pre-aprobadas por allowed_tools, reglas de permitir de settings.json o un hook se ejecutan normalmente. Todo lo demás se deniega sin llamar a canUseTool. Usar cuando: desea una superficie de herramienta fija y explícita para un agente sin interfaz y prefiere una denegación dura sobre la dependencia silenciosa de que canUseTool esté ausente.

Modo de omitir permisos (bypassPermissions)

Auto-aprueba todos los usos de herramientas sin solicitudes. Los hooks aún se ejecutan y pueden bloquear operaciones si es necesario.
Usar con extrema precaución. Claude tiene acceso completo al sistema en este modo. Solo use en entornos controlados donde confía en todas las operaciones posibles.allowed_tools no restringe este modo. Cada herramienta se aprueba, no solo las que listó. Las reglas de denegar (disallowed_tools), reglas explícitas de ask y hooks se evalúan antes de la verificación del modo y aún pueden bloquear una herramienta.

Modo de planificación (plan)

Claude explora la base de código y produce un plan sin editar sus archivos fuente. Las herramientas de solo lectura se ejecutan como en modo predeterminado. Las ediciones de archivo nunca se aprueban automáticamente en modo de planificación, incluso cuando una regla de permitir coincide. Se solicitan a través de su devolución de llamada canUseTool en su lugar. Claude puede usar AskUserQuestion para aclarar requisitos antes de finalizar el plan. Consulte Manejar aprobaciones e entrada del usuario para manejar estas solicitudes. Usar cuando: desea que Claude proponga cambios sin ejecutarlos, como durante la revisión de código o cuando necesita aprobar cambios antes de que se realicen. Para los otros pasos en el flujo de evaluación de permisos: