SpyBara
Go Premium

Documentation 2026-07-20 23:01 UTC to 2026-07-21 23:00 UTC

7 files changed +306 −283. View all changes and history on the product overview
2026
Fri 24 00:57 Thu 23 23:57 Wed 22 23:59 Tue 21 23:00 Mon 20 23:01 Sat 18 16:02 Fri 17 22:57 Thu 16 22:59 Wed 15 22:00 Tue 14 23:01 Mon 13 23:57 Sat 11 19:03 Fri 10 17:00 Thu 9 23:58 Wed 8 16:02 Tue 7 16:02 Mon 6 23:57 Sat 4 03:01 Fri 3 23:00 Thu 2 23:59 Wed 1 21:01
Details

6 6 

7> Registre la puerta de enlace con su IdP, construya el contenedor, implemente en Kubernetes o Cloud Run, y opérelo: verificaciones de salud, rotación de secretos, actualizaciones y seguridad.7> Registre la puerta de enlace con su IdP, construya el contenedor, implemente en Kubernetes o Cloud Run, y opérelo: verificaciones de salud, rotación de secretos, actualizaciones y seguridad.

8 8 

9Esta página cubre el lado operativo de ejecutar la [puerta de enlace de aplicaciones Claude](/es/claude-apps-gateway): registrar un cliente OAuth en su proveedor de identidad (IdP), implementar la puerta de enlace como un contenedor y ejecutarla día a día. Para cada opción en el archivo `gateway.yaml` que la puerta de enlace lee al iniciar, consulte la [referencia de configuración](/es/claude-apps-gateway-config).9Esta página cubre el lado operativo de ejecutar la [puerta de enlace de aplicaciones Claude](/docs/es/claude-apps-gateway): registrar un cliente OAuth en su proveedor de identidad (IdP), implementar la puerta de enlace como un contenedor y ejecutarla día a día. Para cada opción en el archivo `gateway.yaml` que la puerta de enlace lee al iniciar, consulte la [referencia de configuración](/docs/es/claude-apps-gateway-config).

10 10 

11Una implementación de producción sigue cuatro pasos en orden, y las secciones a continuación coinciden con ellos. Los dos primeros son donde usted toma decisiones; los dos segundos son material de referencia para consultar una vez que esté en funcionamiento.11Una implementación de producción sigue cuatro pasos en orden, y las secciones a continuación coinciden con ellos. Los dos primeros son donde usted toma decisiones; los dos segundos son material de referencia para consultar una vez que esté en funcionamiento.

12 12 


31 31 

32Cualquier IdP compatible con OIDC funciona: Okta, Microsoft Entra ID, Google Workspace, Keycloak, Dex, PingFederate y otros. El IdP debe cumplir tres requisitos:32Cualquier IdP compatible con OIDC funciona: Okta, Microsoft Entra ID, Google Workspace, Keycloak, Dex, PingFederate y otros. El IdP debe cumplir tres requisitos:

33 33 

34* Sirve `/.well-known/openid-configuration`, sobre HTTPS en producción; la puerta de enlace acepta un [emisor `http://`](/es/claude-apps-gateway-config#oidc), y un emisor de loopback además requiere `CLAUDE_GATEWAY_ALLOW_LOOPBACK=1`34* Sirve `/.well-known/openid-configuration`, sobre HTTPS en producción; la puerta de enlace acepta un [emisor `http://`](/docs/es/claude-apps-gateway-config#oidc), y un emisor de loopback además requiere `CLAUDE_GATEWAY_ALLOW_LOOPBACK=1`

35* Admite el flujo de código de autorización. PKCE (Proof Key for Code Exchange) está activado de forma predeterminada; desactívelo con `oidc.use_pkce: false` para IdPs que no lo admitan35* Admite el flujo de código de autorización. PKCE (Proof Key for Code Exchange) está activado de forma predeterminada; desactívelo con `oidc.use_pkce: false` para IdPs que no lo admitan

36* Devuelve `email` y opcionalmente `groups` en el id\_token, o los sirve desde el punto final de userinfo con `oidc.userinfo_fallback: true`36* Devuelve `email` y opcionalmente `groups` en el id\_token, o los sirve desde el punto final de userinfo con `oidc.userinfo_fallback: true`

37 37 


41 41 

42* **Okta**: el servidor de autorización de la organización en `https://example.okta.com` devuelve un id\_token delgado que omite `email` y `groups`, así que establezca `oidc.userinfo_fallback: true` siempre que lo use como `issuer`. Un servidor de autorización personalizado como `https://example.okta.com/oauth2/default` que incluye `email` y opcionalmente `groups` en el id\_token los emite directamente y no necesita fallback. Okta emite `groups` solo cuando se solicita el alcance `groups` en `oidc.scopes` y el filtro de reclamación de grupos de la aplicación lo permite; `userinfo_fallback` no puede llenar una reclamación que el IdP no fue solicitado.42* **Okta**: el servidor de autorización de la organización en `https://example.okta.com` devuelve un id\_token delgado que omite `email` y `groups`, así que establezca `oidc.userinfo_fallback: true` siempre que lo use como `issuer`. Un servidor de autorización personalizado como `https://example.okta.com/oauth2/default` que incluye `email` y opcionalmente `groups` en el id\_token los emite directamente y no necesita fallback. Okta emite `groups` solo cuando se solicita el alcance `groups` en `oidc.scopes` y el filtro de reclamación de grupos de la aplicación lo permite; `userinfo_fallback` no puede llenar una reclamación que el IdP no fue solicitado.

43* **Microsoft Entra ID**: `issuer` = `https://login.microsoftonline.com/<tenant-id>/v2.0`. Entra emite IDs de objeto de grupo en lugar de nombres, así que use los GUIDs en `managed.policies.match.groups`, o use App Roles para nombres legibles por humanos. Si su inquilino emite roles bajo `roles` en lugar de `groups`, establezca `oidc.groups_claim: roles`.43* **Microsoft Entra ID**: `issuer` = `https://login.microsoftonline.com/<tenant-id>/v2.0`. Entra emite IDs de objeto de grupo en lugar de nombres, así que use los GUIDs en `managed.policies.match.groups`, o use App Roles para nombres legibles por humanos. Si su inquilino emite roles bajo `roles` en lugar de `groups`, establezca `oidc.groups_claim: roles`.

44* **Google Workspace**: `issuer` = `https://accounts.google.com`. El id\_token de Google no lleva grupos. Para usar `allowed_groups` basado en grupos o `managed.policies` con Google como IdP, configure [`oidc.google_groups`](/es/claude-apps-gateway-config#oidc), que busca los grupos de cada usuario a través de la API de directorio del SDK de administración usando una cuenta de servicio con delegación en todo el dominio. Sin él, use `oidc.allowed_email_domains` para control de membresía y `managed.policies.match.email_domain` para asignación de políticas. Google también ignora el alcance estándar `offline_access`. Para tokens de actualización, establezca `oidc.scopes: [openid, profile, email]` y `oidc.extra_auth_params: { access_type: offline, prompt: consent }`.44* **Google Workspace**: `issuer` = `https://accounts.google.com`. El id\_token de Google no lleva grupos. Para usar `allowed_groups` basado en grupos o `managed.policies` con Google como IdP, configure [`oidc.google_groups`](/docs/es/claude-apps-gateway-config#oidc), que busca los grupos de cada usuario a través de la API de directorio del SDK de administración usando una cuenta de servicio con delegación en todo el dominio. Sin él, use `oidc.allowed_email_domains` para control de membresía y `managed.policies.match.email_domain` para asignación de políticas. Google también ignora el alcance estándar `offline_access`. Para tokens de actualización, establezca `oidc.scopes: [openid, profile, email]` y `oidc.extra_auth_params: { access_type: offline, prompt: consent }`.

45 45 

46Para obtener soporte con un proveedor de identidad no cubierto anteriormente, consulte [Solución de problemas](#troubleshooting).46Para obtener soporte con un proveedor de identidad no cubierto anteriormente, consulte [Solución de problemas](#troubleshooting).

47 47 

48<Warning>48<Warning>

49 Los tokens de actualización permiten que la puerta de enlace renueve la sesión de un desarrollador silenciosamente, sin enviar al desarrollador de vuelta al navegador. También impulsan el desaprovisionamiento, porque cuando el IdP deshabilita un usuario, la siguiente actualización falla y la sesión termina dentro de `ttl_hours`. La puerta de enlace solicita `offline_access` de forma predeterminada para obtener un token de actualización. Si su IdP requiere consentimiento explícito para acceso sin conexión, configure el cliente OAuth para permitirlo.49 Los tokens de actualización permiten que la puerta de enlace renueve la sesión de un desarrollador silenciosamente, sin enviar al desarrollador de vuelta al navegador. También impulsan el desaprovisionamiento, porque cuando el IdP deshabilita un usuario, la siguiente actualización falla y la sesión termina dentro de `ttl_hours`. La puerta de enlace solicita `offline_access` de forma predeterminada para obtener un token de actualización. Si su IdP requiere consentimiento explícito para acceso sin conexión, configure el cliente OAuth para permitirlo.

50 50 

51 Si su IdP no puede emitir tokens de actualización en absoluto, la puerta de enlace aún funciona, pero no hay renovación silenciosa, así que los desarrolladores vuelven a ejecutar el inicio de sesión del navegador cuando su sesión expira. Para evitar que eso suceda cada hora, aumente [`session.ttl_hours`](/es/claude-apps-gateway-config#session) a `8` o `12`. El compromiso es la latencia de desaprovisionamiento, porque sin tokens de actualización un usuario deshabilitado mantiene acceso hasta que transcurra el TTL más largo.51 Si su IdP no puede emitir tokens de actualización en absoluto, la puerta de enlace aún funciona, pero no hay renovación silenciosa, así que los desarrolladores vuelven a ejecutar el inicio de sesión del navegador cuando su sesión expira. Para evitar que eso suceda cada hora, aumente [`session.ttl_hours`](/docs/es/claude-apps-gateway-config#session) a `8` o `12`. El compromiso es la latencia de desaprovisionamiento, porque sin tokens de actualización un usuario deshabilitado mantiene acceso hasta que transcurra el TTL más largo.

52</Warning>52</Warning>

53 53 

54<h2 id="deployment">54<h2 id="deployment">


62Algunas decisiones dan forma a la implementación más allá de dónde se ejecuta:62Algunas decisiones dan forma a la implementación más allá de dónde se ejecuta:

63 63 

64* **Costo**: no hay licencia separada ni tarifa por asiento para la puerta de enlace; es parte del binario `claude`. Paga por inferencia a través de su compromiso existente en la nube o con Anthropic, más el cálculo para el contenedor y su recopilador de telemetría.64* **Costo**: no hay licencia separada ni tarifa por asiento para la puerta de enlace; es parte del binario `claude`. Paga por inferencia a través de su compromiso existente en la nube o con Anthropic, más el cálculo para el contenedor y su recopilador de telemetría.

65* **Derivación**: la puerta de enlace no impone que la única ruta a un modelo pase por ella. Un desarrollador con su propia credencial aún puede llamar al proveedor directamente, así que cerrar ese camino es una decisión de política de red, por ejemplo bloqueando la salida a `api.anthropic.com` excepto desde la puerta de enlace. Bloquear esa salida también rompe la [verificación de seguridad de dominio de WebFetch](/es/data-usage#webfetch-domain-safety-check), que llama a `api.anthropic.com` desde la máquina de cada desarrollador; establezca `skipWebFetchPreflight: true` en la política administrada para deshabilitarlo.65* **Derivación**: la puerta de enlace no impone que la única ruta a un modelo pase por ella. Un desarrollador con su propia credencial aún puede llamar al proveedor directamente, así que cerrar ese camino es una decisión de política de red, por ejemplo bloqueando la salida a `api.anthropic.com` excepto desde la puerta de enlace. Bloquear esa salida también rompe la [verificación de seguridad de dominio de WebFetch](/docs/es/data-usage#webfetch-domain-safety-check), que llama a `api.anthropic.com` desde la máquina de cada desarrollador; establezca `skipWebFetchPreflight: true` en la política administrada para deshabilitarlo.

66* **Múltiples puertas de enlace**: cada puerta de enlace es una implementación separada con su propia configuración. El CLI almacena su huella digital de confianza y credenciales por nombre de host de puerta de enlace, así que diferentes equipos pueden conectarse a diferentes puertas de enlace sin conflicto. Para servir múltiples emisores OIDC, ejecute instancias separadas.66* **Múltiples puertas de enlace**: cada puerta de enlace es una implementación separada con su propia configuración. El CLI almacena su huella digital de confianza y credenciales por nombre de host de puerta de enlace, así que diferentes equipos pueden conectarse a diferentes puertas de enlace sin conflicto. Para servir múltiples emisores OIDC, ejecute instancias separadas.

67* **Sin servidor**: Cloud Run funciona; establezca `min-instances: 1` para evitar descubrimiento OIDC frío. Lambda y Cloud Functions no, porque la puerta de enlace es un servidor HTTP de larga duración.67* **Sin servidor**: Cloud Run funciona; establezca `min-instances: 1` para evitar descubrimiento OIDC frío. Lambda y Cloud Functions no, porque la puerta de enlace es un servidor HTTP de larga duración.

68 68 

69Cada topología de producción aquí coloca un proxy L7, como un Ingress, el front-end de Cloud Run o un ALB, frente a réplicas HTTP simples. Establezca [`listen.trusted_proxies`](/es/claude-apps-gateway-config#listen) en los rangos de origen del proxy para que la puerta de enlace lea las IPs del cliente desde `X-Forwarded-For`. La puerta de enlace honra el encabezado solo cuando el par TCP es confiable; el [ejemplo trabajado de Google Cloud](/es/claude-apps-gateway-on-gcp) tiene valores concretos por topología. Sin proxies confiables, cada solicitud parece provenir de la IP del proxy, lo que colapsa los límites de velocidad por IP en un cubo compartido y registra la IP del proxy en eventos de auditoría.69Cada topología de producción aquí coloca un proxy L7, como un Ingress, el front-end de Cloud Run o un ALB, frente a réplicas HTTP simples. Establezca [`listen.trusted_proxies`](/docs/es/claude-apps-gateway-config#listen) en los rangos de origen del proxy para que la puerta de enlace lea las IPs del cliente desde `X-Forwarded-For`. La puerta de enlace honra el encabezado solo cuando el par TCP es confiable; el [ejemplo trabajado de Google Cloud](/docs/es/claude-apps-gateway-on-gcp) tiene valores concretos por topología. Sin proxies confiables, cada solicitud parece provenir de la IP del proxy, lo que colapsa los límites de velocidad por IP en un cubo compartido y registra la IP del proxy en eventos de auditoría.

70 70 

71<h3 id="container-image">71<h3 id="container-image">

72 Imagen de contenedor72 Imagen de contenedor


74 74 

75Construya su propia imagen alrededor del binario nativo `claude` de la versión estándar de Claude Code:75Construya su propia imagen alrededor del binario nativo `claude` de la versión estándar de Claude Code:

76 76 

771. Descargue la compilación de Linux para la arquitectura de su imagen desde una versión fija; consulte [Instalar una versión específica](/es/setup#install-a-specific-version) para la URL de descarga.771. Descargue la compilación de Linux para la arquitectura de su imagen desde una versión fija; consulte [Instalar una versión específica](/docs/es/setup#install-a-specific-version) para la URL de descarga.

782. Verifíquelo contra el `manifest.json` firmado con GPG de la versión como se describe en [Integridad binaria y firma de código](/es/setup#binary-integrity-and-code-signing).782. Verifíquelo contra el `manifest.json` firmado con GPG de la versión como se describe en [Integridad binaria y firma de código](/docs/es/setup#binary-integrity-and-code-signing).

793. Cópielo en el contexto de compilación.793. Cópielo en el contexto de compilación.

80 80 

81Refleje la versión en su registro interno si sus compilaciones no pueden alcanzar el host de versión, y fije la versión que ejecuta su flota.81Refleje la versión en su registro interno si sus compilaciones no pueden alcanzar el host de versión, y fije la versión que ejecuta su flota.

82 82 

83Más allá del binario, la imagen necesita:83Más allá del binario, la imagen necesita:

84 84 

85* **Una imagen basada en glibc**: las únicas dependencias dinámicas de la compilación de glibc son las bibliotecas de glibc. Las imágenes basadas en Musl necesitan la compilación `linux-x64-musl` o `linux-arm64-musl` más paquetes adicionales; consulte [Configuración de Alpine Linux](/es/setup#alpine-linux-and-musl-based-distributions).85* **Una imagen basada en glibc**: las únicas dependencias dinámicas de la compilación de glibc son las bibliotecas de glibc. Las imágenes basadas en Musl necesitan la compilación `linux-x64-musl` o `linux-arm64-musl` más paquetes adicionales; consulte [Configuración de Alpine Linux](/docs/es/setup#alpine-linux-and-musl-based-distributions).

86* **Un directorio de estado escribible**: la puerta de enlace se ejecuta como cualquier usuario, pero las imágenes mínimas no tienen inicio escribible. Establezca `CLAUDE_CONFIG_DIR` en una ruta escribible como `/tmp/.claude`.86* **Un directorio de estado escribible**: la puerta de enlace se ejecuta como cualquier usuario, pero las imágenes mínimas no tienen inicio escribible. Establezca `CLAUDE_CONFIG_DIR` en una ruta escribible como `/tmp/.claude`.

87* **El comando del contenedor**: `claude gateway --config /etc/claude/gateway.yaml`, con el archivo de configuración montado de solo lectura y secretos suministrados como variables de entorno; la puerta de enlace escucha en `listen.port`, predeterminado `8080`.87* **El comando del contenedor**: `claude gateway --config /etc/claude/gateway.yaml`, con el archivo de configuración montado de solo lectura y secretos suministrados como variables de entorno; la puerta de enlace escucha en `listen.port`, predeterminado `8080`.

88 88 


99<Note>99<Note>

100 **Identidad de carga de trabajo**100 **Identidad de carga de trabajo**

101 101 

102 Prefiera la identidad de carga de trabajo de la plataforma sobre claves estáticas: IRSA en EKS para Bedrock y para Claude Platform en AWS, Workload Identity en GKE para Agent Platform, e identidad de carga de trabajo en AKS para Foundry. Establezca `auth: {}` en el bloque ascendente, o `use_azure_ad: true` para Foundry, y la puerta de enlace recoge la identidad del pod a través de la cadena de credenciales predeterminada de ese proveedor. Para un emparejamiento entre nubes, como un ascendente de Bedrock en GKE, establezca credenciales explícitas en el bloque `auth` del ascendente en su lugar. La [referencia de `upstreams`](/es/claude-apps-gateway-config#upstreams) tiene detalles de configuración por plataforma.102 Prefiera la identidad de carga de trabajo de la plataforma sobre claves estáticas: IRSA en EKS para Bedrock y para Claude Platform en AWS, Workload Identity en GKE para Agent Platform, e identidad de carga de trabajo en AKS para Foundry. Establezca `auth: {}` en el bloque ascendente, o `use_azure_ad: true` para Foundry, y la puerta de enlace recoge la identidad del pod a través de la cadena de credenciales predeterminada de ese proveedor. Para un emparejamiento entre nubes, como un ascendente de Bedrock en GKE, establezca credenciales explícitas en el bloque `auth` del ascendente en su lugar. La [referencia de `upstreams`](/docs/es/claude-apps-gateway-config#upstreams) tiene detalles de configuración por plataforma.

103</Note>103</Note>

104 104 

105<h3 id="cloud-run">105<h3 id="cloud-run">


109Configure el servicio de la siguiente manera:109Configure el servicio de la siguiente manera:

110 110 

111* Deje `listen.port` en su predeterminado de `8080`, que coincide con el `PORT` predeterminado de Cloud Run, o establezca `port: ${PORT}`111* Deje `listen.port` en su predeterminado de `8080`, que coincide con el `PORT` predeterminado de Cloud Run, o establezca `port: ${PORT}`

112* Establezca `public_url` en el origen externamente alcanzable. Para producción esto es normalmente el nombre de host de un equilibrador de carga interno, porque `/login` [rechaza direcciones públicas](/es/claude-apps-gateway#prerequisites) y la URL `*.run.app` se resuelve a una, así que la URL de Cloud Run sola funciona solo para una prueba de humo `curl` o navegador. La excepción es una red donde `*.run.app` se resuelve privadamente a través de Private Service Connect y una zona privada de Cloud DNS; en esa topología la URL de Cloud Run es un `public_url` válido. El [ejemplo trabajado de Google Cloud](/es/claude-apps-gateway-on-gcp#deploy-the-gateway) cubre ambos.112* Establezca `public_url` en el origen externamente alcanzable. Para producción esto es normalmente el nombre de host de un equilibrador de carga interno, porque `/login` [rechaza direcciones públicas](/docs/es/claude-apps-gateway#prerequisites) y la URL `*.run.app` se resuelve a una, así que la URL de Cloud Run sola funciona solo para una prueba de humo `curl` o navegador. La excepción es una red donde `*.run.app` se resuelve privadamente a través de Private Service Connect y una zona privada de Cloud DNS; en esa topología la URL de Cloud Run es un `public_url` válido. El [ejemplo trabajado de Google Cloud](/docs/es/claude-apps-gateway-on-gcp#deploy-the-gateway) cubre ambos.

113* Monte la configuración como un volumen secreto113* Monte la configuración como un volumen secreto

114* Establezca `min-instances: 1` para evitar un descubrimiento OIDC frío en la primera solicitud114* Establezca `min-instances: 1` para evitar un descubrimiento OIDC frío en la primera solicitud

115 115 

116<Note>116<Note>

117 Para un ejemplo completo trabajado en Google Cloud, cubriendo Cloud Run o GKE, Cloud SQL y Secret Manager, consulte [Implementar en Google Cloud](/es/claude-apps-gateway-on-gcp).117 Para un ejemplo completo trabajado en Google Cloud, cubriendo Cloud Run o GKE, Cloud SQL y Secret Manager, consulte [Implementar en Google Cloud](/docs/es/claude-apps-gateway-on-gcp).

118</Note>118</Note>

119 119 

120<h3 id="push-the-gateway-url-to-developer-machines">120<h3 id="push-the-gateway-url-to-developer-machines">

121 Enviar la URL de la puerta de enlace a máquinas de desarrolladores121 Enviar la URL de la puerta de enlace a máquinas de desarrolladores

122</h3>122</h3>

123 123 

124Una vez que la puerta de enlace está sirviendo, envíe `forceLoginMethod` y `forceLoginGatewayUrl` a la máquina de cada desarrollador a través de configuraciones administradas, a través de MDM o escribiendo directamente el `managed-settings.json` específico del sistema operativo. Sin esto, `/login` muestra el selector de cuenta estándar sin opción de puerta de enlace. Consulte [Configuraciones administradas del lado del cliente](/es/claude-apps-gateway-config#client-side-managed-settings) para las rutas de archivo.124Una vez que la puerta de enlace está sirviendo, envíe `forceLoginMethod` y `forceLoginGatewayUrl` a la máquina de cada desarrollador a través de configuraciones administradas, a través de MDM o escribiendo directamente el `managed-settings.json` específico del sistema operativo. Sin esto, `/login` muestra el selector de cuenta estándar sin opción de puerta de enlace. Consulte [Configuraciones administradas del lado del cliente](/docs/es/claude-apps-gateway-config#client-side-managed-settings) para las rutas de archivo.

125 125 

126<h2 id="operations">126<h2 id="operations">

127 Operaciones127 Operaciones


160 160 

161* **Sesiones existentes**: los tokens portadores se validan localmente con el secreto JWT, las actualizaciones de sesión no tocan el almacén, y el proceso de puerta de enlace aún puede servir inferencia161* **Sesiones existentes**: los tokens portadores se validan localmente con el secreto JWT, las actualizaciones de sesión no tocan el almacén, y el proceso de puerta de enlace aún puede servir inferencia

162* **Nuevos inicios de sesión**: fallan hasta que Postgres se recupere, porque el flujo de dispositivo y sus contadores de límite de velocidad viven en Postgres162* **Nuevos inicios de sesión**: fallan hasta que Postgres se recupere, porque el flujo de dispositivo y sus contadores de límite de velocidad viven en Postgres

163* **[Cumplimiento de límite de gasto](/es/claude-apps-gateway-spend-limits#postgres-availability)**: falla abierto de forma predeterminada durante la interrupción, así que la inferencia aún fluye; cámbielo a falla cerrada si preferiría bloquear que ejecutar sin medidor163* **[Cumplimiento de límite de gasto](/docs/es/claude-apps-gateway-spend-limits#postgres-availability)**: falla abierto de forma predeterminada durante la interrupción, así que la inferencia aún fluye; cámbielo a falla cerrada si preferiría bloquear que ejecutar sin medidor

164* **Preparación**: `/readyz` reporta no listo durante la interrupción, así que los orquestadores que cierren tráfico en preparación eliminan cada réplica de rotación a la vez. En esa topología todo el tráfico, incluida la inferencia que la puerta de enlace podría servir, falla en el equilibrador de carga hasta que Postgres se recupere. La sonda de vivacidad en `/healthz` sigue pasando, así que las réplicas no se reinician. Apunte la sonda de preparación a `/healthz` en su lugar si preferiría que los desarrolladores con sesión iniciada sigan trabajando a través de una interrupción de almacén; el costo es que los nuevos inicios de sesión fallan contra una réplica que aún reporta lista.164* **Preparación**: `/readyz` reporta no listo durante la interrupción, así que los orquestadores que cierren tráfico en preparación eliminan cada réplica de rotación a la vez. En esa topología todo el tráfico, incluida la inferencia que la puerta de enlace podría servir, falla en el equilibrador de carga hasta que Postgres se recupere. La sonda de vivacidad en `/healthz` sigue pasando, así que las réplicas no se reinician. Apunte la sonda de preparación a `/healthz` en su lugar si preferiría que los desarrolladores con sesión iniciada sigan trabajando a través de una interrupción de almacén; el costo es que los nuevos inicios de sesión fallan contra una réplica que aún reporta lista.

165 165 

166Si su IdP se cae, las sesiones existentes funcionan hasta `ttl_hours`, y los nuevos inicios de sesión y actualizaciones fallan. Establezca un `ttl_hours` más largo si su IdP tiene ventanas de mantenimiento frecuentes.166Si su IdP se cae, las sesiones existentes funcionan hasta `ttl_hours`, y los nuevos inicios de sesión y actualizaciones fallan. Establezca un `ttl_hours` más largo si su IdP tiene ventanas de mantenimiento frecuentes.


191| `admin_audit` | Rastro de mutación de API de administrador | `admin.audit_retention_days`, predeterminado 365 |191| `admin_audit` | Rastro de mutación de API de administrador | `admin.audit_retention_days`, predeterminado 365 |

192| `principal_emails` | Correo electrónico de último visto de cada principal, nombre para mostrar y grupos de IdP. Contiene PII. | `admin.identity_retention_days` desde última actividad, predeterminado 90 |192| `principal_emails` | Correo electrónico de último visto de cada principal, nombre para mostrar y grupos de IdP. Contiene PII. | `admin.identity_retention_days` desde última actividad, predeterminado 90 |

193 193 

194Un bucle de 30 segundos expira filas `kv` pasadas su TTL, y un barrido cada hora impone las ventanas de retención en las tablas de gasto, así que nada crece sin límite. Sin [límites de gasto](/es/claude-apps-gateway-spend-limits) configurados, solo se escribe `kv`. Si su política de seguridad prohíbe DDL del rol de aplicación, pre-cree estas tablas y `_migrations` con un rol de administrador y otorgue al rol de aplicación `SELECT, INSERT, UPDATE, DELETE` en cada una.194Un bucle de 30 segundos expira filas `kv` pasadas su TTL, y un barrido cada hora impone las ventanas de retención en las tablas de gasto, así que nada crece sin límite. Sin [límites de gasto](/docs/es/claude-apps-gateway-spend-limits) configurados, solo se escribe `kv`. Si su política de seguridad prohíbe DDL del rol de aplicación, pre-cree estas tablas y `_migrations` con un rol de administrador y otorgue al rol de aplicación `SELECT, INSERT, UPDATE, DELETE` en cada una.

195 195 

196Con límites de gasto en uso, una base de datos perdida significa pérdida de seguimiento de gasto y límites, no solo re-inicios de sesión de desarrolladores, así que ejecute copias de seguridad regulares. Para borrar un desarrollador que se fue inmediatamente en lugar de esperar en retención, ejecute `DELETE FROM principal_emails WHERE principal = '<sub>'` directamente; eso elimina la única tabla que contiene su correo electrónico, nombre y grupos. Las filas `spend` y `admin_audit` hacen referencia solo al `sub` OIDC seudónimo.196Con límites de gasto en uso, una base de datos perdida significa pérdida de seguimiento de gasto y límites, no solo re-inicios de sesión de desarrolladores, así que ejecute copias de seguridad regulares. Para borrar un desarrollador que se fue inmediatamente en lugar de esperar en retención, ejecute `DELETE FROM principal_emails WHERE principal = '<sub>'` directamente; eso elimina la única tabla que contiene su correo electrónico, nombre y grupos. Las filas `spend` y `admin_audit` hacen referencia solo al `sub` OIDC seudónimo.

197 197 


218| Datos | Ruta | Enviado a Anthropic por la puerta de enlace |218| Datos | Ruta | Enviado a Anthropic por la puerta de enlace |

219| --------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------- | -------------------------------------------------------- |219| --------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------- | -------------------------------------------------------- |

220| Inferencia (indicaciones, finalizaciones) | CLI → puerta de enlace → su ascendente | Solo si la API de Anthropic es un ascendente configurado |220| Inferencia (indicaciones, finalizaciones) | CLI → puerta de enlace → su ascendente | Solo si la API de Anthropic es un ascendente configurado |

221| Telemetría (métricas OTLP, más [registros y trazas opcionales](/es/claude-apps-gateway-config#telemetry)) | CLI → puerta de enlace → su recopilador | Nunca |221| Telemetría (métricas OTLP, más [registros y trazas opcionales](/docs/es/claude-apps-gateway-config#telemetry)) | CLI → puerta de enlace → su recopilador | Nunca |

222| Identidad (correo electrónico, grupos, sub) | IdP → puerta de enlace → JWT → CLI; el CLI lo marca en exportaciones OTLP | Nunca |222| Identidad (correo electrónico, grupos, sub) | IdP → puerta de enlace → JWT → CLI; el CLI lo marca en exportaciones OTLP | Nunca |

223| Configuraciones administradas | Su YAML de puerta de enlace → CLI | Nunca |223| Configuraciones administradas | Su YAML de puerta de enlace → CLI | Nunca |

224| Registro de auditoría | Stderr de puerta de enlace → su agregador | Nunca |224| Registro de auditoría | Stderr de puerta de enlace → su agregador | Nunca |


237 237 

238Dos amenazas están fuera del alcance porque son su infraestructura para asegurar:238Dos amenazas están fuera del alcance porque son su infraestructura para asegurar:

239 239 

240* **Un host de puerta de enlace comprometido**: el host tanto contiene la credencial ascendente como distribuye [configuraciones administradas](/es/claude-apps-gateway-config#managed) a cada desarrollador conectado, así que el control sobre la configuración de la puerta de enlace es comparable al control sobre su MDM. El diálogo de aprobación única del CLI para configuraciones capaces de shell limita cambios silenciosos pero no reemplaza la seguridad del host.240* **Un host de puerta de enlace comprometido**: el host tanto contiene la credencial ascendente como distribuye [configuraciones administradas](/docs/es/claude-apps-gateway-config#managed) a cada desarrollador conectado, así que el control sobre la configuración de la puerta de enlace es comparable al control sobre su MDM. El diálogo de aprobación única del CLI para configuraciones capaces de shell limita cambios silenciosos pero no reemplaza la seguridad del host.

241* **Un proveedor OIDC malicioso**: el proveedor firma los id\_tokens que la puerta de enlace confía, así que puede afirmar cualquier identidad. Verificar y asegurar su IdP es su responsabilidad.241* **Un proveedor OIDC malicioso**: el proveedor firma los id\_tokens que la puerta de enlace confía, así que puede afirmar cualquier identidad. Verificar y asegurar su IdP es su responsabilidad.

242 242 

243<h3 id="user-code-brute-force-resistance">243<h3 id="user-code-brute-force-resistance">


246 246 

247El `user_code` que un desarrollador escribe en la página de verificación `/device` son 8 caracteres extraídos de un alfabeto de 20 caracteres, que produce 20⁸ o aproximadamente 2.56×10¹⁰ combinaciones, y expira después de 10 minutos.247El `user_code` que un desarrollador escribe en la página de verificación `/device` son 8 caracteres extraídos de un alfabeto de 20 caracteres, que produce 20⁸ o aproximadamente 2.56×10¹⁰ combinaciones, y expira después de 10 minutos.

248 248 

249La puerta de enlace aplica límites de velocidad por IP en los puntos finales de concesión de dispositivo, configurables a través de [`rate_limits`](/es/claude-apps-gateway-config#http-tuning). Aumente los límites si muchos desarrolladores inician sesión desde una única dirección NAT corporativa compartida. Los límites se aplican solo al flujo de inicio de sesión, no a la inferencia.249La puerta de enlace aplica límites de velocidad por IP en los puntos finales de concesión de dispositivo, configurables a través de [`rate_limits`](/docs/es/claude-apps-gateway-config#http-tuning). Aumente los límites si muchos desarrolladores inician sesión desde una única dirección NAT corporativa compartida. Los límites se aplican solo al flujo de inicio de sesión, no a la inferencia.

250 250 

251<h3 id="compliance-posture">251<h3 id="compliance-posture">

252 Postura de cumplimiento252 Postura de cumplimiento


255* **Residencia de datos**: el plano de datos propio de la puerta de enlace no envía nada a Anthropic a menos que la API de Anthropic sea un ascendente configurado; cuando lo es, su acuerdo de manejo de datos existente se aplica a la ruta de inferencia. Telemetría, auditoría, identidad y configuraciones van solo a los destinos que configura.255* **Residencia de datos**: el plano de datos propio de la puerta de enlace no envía nada a Anthropic a menos que la API de Anthropic sea un ascendente configurado; cuando lo es, su acuerdo de manejo de datos existente se aplica a la ruta de inferencia. Telemetría, auditoría, identidad y configuraciones van solo a los destinos que configura.

256* **Tráfico de proceso de host**: el proceso de host es el CLI de Claude Code, que puede enviar análisis de inicio y verificaciones de actualización a Anthropic. Para implementaciones de salida estricta, establezca `CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC=1` en el entorno del contenedor de la puerta de enlace.256* **Tráfico de proceso de host**: el proceso de host es el CLI de Claude Code, que puede enviar análisis de inicio y verificaciones de actualización a Anthropic. Para implementaciones de salida estricta, establezca `CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC=1` en el entorno del contenedor de la puerta de enlace.

257* **Análisis del cliente**: el CLI deshabilita su propio análisis de uso mientras está conectado a una puerta de enlace, y el informe de errores está desactivado de forma predeterminada en superficies de API de terceros.257* **Análisis del cliente**: el CLI deshabilita su propio análisis de uso mientras está conectado a una puerta de enlace, y el informe de errores está desactivado de forma predeterminada en superficies de API de terceros.

258* **Máquinas cliente**: los CLIs de desarrolladores aún envían verificaciones de nombre de host de WebFetch y verificaciones de versión a Anthropic a menos que `CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC=1` y `skipWebFetchPreflight: true` estén establecidos. Consulte [uso de datos](/es/data-usage).258* **Máquinas cliente**: los CLIs de desarrolladores aún envían verificaciones de nombre de host de WebFetch y verificaciones de versión a Anthropic a menos que `CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC=1` y `skipWebFetchPreflight: true` estén establecidos. Consulte [uso de datos](/docs/es/data-usage).

259* **Calificaciones de encuesta**: la credencial de puerta de enlace deshabilita el sumidero de calificación vinculado a Anthropic, así que las calificaciones no se envían a Anthropic.259* **Calificaciones de encuesta**: la credencial de puerta de enlace deshabilita el sumidero de calificación vinculado a Anthropic, así que las calificaciones no se envían a Anthropic.

260* **Compartir transcripción**: elegir Sí en el indicador de compartir transcripción de una encuesta escribe un archivo local bajo `~/.claude/feedback-bundles/` en lugar de cargar a Anthropic.260* **Compartir transcripción**: elegir Sí en el indicador de compartir transcripción de una encuesta escribe un archivo local bajo `~/.claude/feedback-bundles/` en lugar de cargar a Anthropic.

261* **Actualizaciones del cliente**: las verificaciones de actualización son separadas del tráfico de puerta de enlace. Fije versiones a través de su propia distribución y establezca `DISABLE_UPDATES` si las máquinas portátiles no deben obtener versiones. `DISABLE_AUTOUPDATER` detiene solo actualizaciones de fondo mientras `claude update` aún funciona.261* **Actualizaciones del cliente**: las verificaciones de actualización son separadas del tráfico de puerta de enlace. Fije versiones a través de su propia distribución y establezca `DISABLE_UPDATES` si las máquinas portátiles no deben obtener versiones. `DISABLE_AUTOUPDATER` detiene solo actualizaciones de fondo mientras `claude update` aún funciona.

262* **TLS**: sirva `public_url` sobre HTTPS en producción, ya sea desde el oyente propio de la puerta de enlace a través de `listen.tls` o desde un ingress que termina TLS frente a réplicas HTTP simples con `listen.public_url` establecido. La puerta de enlace no rechaza HTTP simple. El IdP debe servir HTTPS en producción, y Postgres admite `?sslmode=require`. Establezca `Strict-Transport-Security` en su ingress.262* **TLS**: sirva `public_url` sobre HTTPS en producción, ya sea desde el oyente propio de la puerta de enlace a través de `listen.tls` o desde un ingress que termina TLS frente a réplicas HTTP simples con `listen.public_url` establecido. La puerta de enlace no rechaza HTTP simple. El IdP debe servir HTTPS en producción, y Postgres admite `?sslmode=require`. Establezca `Strict-Transport-Security` en su ingress.

263* **Divulgación de vulnerabilidad**: siga [Reportar problemas de seguridad](/es/security#reporting-security-issues)263* **Divulgación de vulnerabilidad**: siga [Reportar problemas de seguridad](/docs/es/security#reporting-security-issues)

264 264 

265<h2 id="troubleshooting">265<h2 id="troubleshooting">

266 Solución de problemas266 Solución de problemas


272* **Problema de inicio de sesión**: el desarrollador ejecuta `claude --debug-file ./claude-debug.txt`, reproduce, y envía ese archivo más el registro de auditoría de la puerta de enlace para la misma ventana272* **Problema de inicio de sesión**: el desarrollador ejecuta `claude --debug-file ./claude-debug.txt`, reproduce, y envía ese archivo más el registro de auditoría de la puerta de enlace para la misma ventana

273* **Problema de inferencia**: el modelo solicitado, los ascendentes configurados, y el registro de auditoría de la puerta de enlace para la solicitud, que registra qué ascendente la sirvió y el estado de respuesta273* **Problema de inferencia**: el modelo solicitado, los ascendentes configurados, y el registro de auditoría de la puerta de enlace para la solicitud, que registra qué ascendente la sirvió y el estado de respuesta

274 274 

275El stderr de la puerta de enlace incluye el flujo de eventos de auditoría, el registro de auditoría registra identidades de desarrolladores, y el archivo de depuración registra la salida de hooks y servidores MCP de la máquina del desarrollador. Revise y redacte estos antes de publicar en un problema público.

276 

275| Síntoma | Causa | Solución |277| Síntoma | Causa | Solución |

276| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |278| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |

277| El `/login` de un desarrollador muestra el selector de cuenta estándar en lugar de la pantalla **Cloud gateway** | `forceLoginMethod` o `forceLoginGatewayUrl` no está establecido en configuraciones administradas en esa máquina | Implemente el [archivo de configuraciones administradas](/es/claude-apps-gateway#set-the-gateway-url) en el dispositivo; `/login` lee la URL de la puerta de enlace desde allí |279| El `/login` de un desarrollador muestra el selector de cuenta estándar en lugar de la pantalla **Cloud gateway** | `forceLoginMethod` o `forceLoginGatewayUrl` no está establecido en configuraciones administradas en esa máquina | Implemente el [archivo de configuraciones administradas](/docs/es/claude-apps-gateway#set-the-gateway-url) en el dispositivo; `/login` lee la URL de la puerta de enlace desde allí |

278| El inicio muestra `Gateway login is configured in managed settings, but this Claude Code build does not include Cloud gateway support.` | La compilación de Claude Code instalada es anterior al soporte de puerta de enlace | Haga que el desarrollador actualice Claude Code a una versión que incluya soporte de puerta de enlace en la nube |280| El inicio muestra `Gateway login is configured in managed settings, but this Claude Code build does not include Cloud gateway support.` | La compilación de Claude Code instalada es anterior al soporte de puerta de enlace | Haga que el desarrollador actualice Claude Code a una versión que incluya soporte de puerta de enlace en la nube |

279| CLI `/login`: `Gateway hosts must be on your organization's private network; <host> resolves to the public (or unrecognized) address <ip>` | El nombre de host de la puerta de enlace se resuelve a al menos una dirección IP pública. Claude Code verifica cada dirección resuelta y requiere que cada una sea privada. Una causa común es un nombre de pila dual donde una familia se resuelve a una dirección pública, incluidos los equilibradores de carga de pila dual internos de AWS, que devuelven direcciones AAAA de rango público. Los puntos finales de puerta de enlace pública operados por Anthropic están exentos de la verificación, y `/login` los acepta sobre `https://`. Antes de v2.1.206, `/login` los rechazaba como cualquier otra dirección pública | Haga que el nombre de la puerta de enlace se resuelva solo a direcciones privadas en máquinas de desarrolladores. Para un nombre de pila dual, suelte el registro de rango público o sirva un nombre DNS solo interno separado. Consulte el [requisito previo de red privada](/es/claude-apps-gateway#prerequisites). |281| CLI `/login`: `Gateway hosts must be on your organization's private network; <host> resolves to the public (or unrecognized) address <ip>` | El nombre de host de la puerta de enlace se resuelve a al menos una dirección IP pública. Claude Code verifica cada dirección resuelta y requiere que cada una sea privada. Una causa común es un nombre de pila dual donde una familia se resuelve a una dirección pública, incluidos los equilibradores de carga de pila dual internos de AWS, que devuelven direcciones AAAA de rango público. Los puntos finales de puerta de enlace pública operados por Anthropic están exentos de la verificación, y `/login` los acepta sobre `https://`. Antes de v2.1.206, `/login` los rechazaba como cualquier otra dirección pública | Haga que el nombre de la puerta de enlace se resuelva solo a direcciones privadas en máquinas de desarrolladores. Para un nombre de pila dual, suelte el registro de rango público o sirva un nombre DNS solo interno separado. Consulte el [requisito previo de red privada](/docs/es/claude-apps-gateway#prerequisites). |

280| CLI `/login`: `Gateway login requires a direct connection and does not support connecting through an HTTP proxy` | Un `HTTPS_PROXY` o `HTTP_PROXY` se aplica al host de la puerta de enlace y el nombre de host del proxy se resuelve a una dirección pública. Un proxy cuyo host se resuelve solo a direcciones privadas está permitido y no desencadena este error | Agregue el host de la puerta de enlace a `NO_PROXY` en la máquina del desarrollador para que la conexión sea directa, o use un proxy cuyo nombre de host se resuelva a direcciones privadas |282| CLI `/login`: `Gateway login requires a direct connection and does not support connecting through an HTTP proxy` | Un `HTTPS_PROXY` o `HTTP_PROXY` se aplica al host de la puerta de enlace y el nombre de host del proxy se resuelve a una dirección pública. Un proxy cuyo host se resuelve solo a direcciones privadas está permitido y no desencadena este error | Agregue el host de la puerta de enlace a `NO_PROXY` en la máquina del desarrollador para que la conexión sea directa, o use un proxy cuyo nombre de host se resuelva a direcciones privadas |

281| CLI `/login`: `Could not resolve gateway host <host>` | La máquina no puede resolver el nombre DNS interno de la puerta de enlace, típicamente porque no está en la red corporativa | Haga que el desarrollador se conecte a su red o VPN, luego reintente `/login` |283| CLI `/login`: `Could not resolve gateway host <host>` | La máquina no puede resolver el nombre DNS interno de la puerta de enlace, típicamente porque no está en la red corporativa | Haga que el desarrollador se conecte a su red o VPN, luego reintente `/login` |

282| El arranque sale con un error de validación de configuración nombrando `store.postgres_url` | No hay Postgres configurado; la puerta de enlace requiere Postgres | Establezca `store.postgres_url`. Para desarrollo local, use un contenedor desechable: `docker run --rm -p 5432:5432 -e POSTGRES_HOST_AUTH_METHOD=trust postgres`. |284| El arranque sale con un error de validación de configuración nombrando `store.postgres_url` | No hay Postgres configurado; la puerta de enlace requiere Postgres | Establezca `store.postgres_url`. Para desarrollo local, use un contenedor desechable: `docker run --rm -p 5432:5432 -e POSTGRES_HOST_AUTH_METHOD=trust postgres`. |

283| El arranque sale: `requires the native binary` | Ejecutando bajo Node en lugar del binario nativo | Instale Claude Code con uno de los [métodos de instalación independiente](/es/setup) |285| El arranque sale: `requires the native binary` | Ejecutando bajo Node en lugar del binario nativo | Instale Claude Code con uno de los [métodos de instalación independiente](/docs/es/setup) |

284| El arranque sale con un error de descubrimiento OIDC después de `config.load` | `oidc.issuer` no alcanzable, o cadena TLS no confiable | Verifique que el emisor sea alcanzable desde el pod y sirva `/.well-known/openid-configuration`. Establezca `ca_cert_pem` para PKI privada. |286| El arranque sale con un error de descubrimiento OIDC después de `config.load` | `oidc.issuer` no alcanzable, o cadena TLS no confiable | Verifique que el emisor sea alcanzable desde el pod y sirva `/.well-known/openid-configuration`. Establezca `ca_cert_pem` para PKI privada. |

285| El arranque sale con un error de permiso de Postgres | El rol de aplicación carece de `CREATE TABLE` | Pre-cree el esquema con un rol de administrador y otorgue DML al rol de aplicación, o otorgue DDL temporalmente para arranques que apliquen nuevas migraciones |287| El arranque sale con un error de permiso de Postgres | El rol de aplicación carece de `CREATE TABLE` | Pre-cree el esquema con un rol de administrador y otorgue DML al rol de aplicación, o otorgue DDL temporalmente para arranques que apliquen nuevas migraciones |

286| `/oauth/callback` muestra "Sign-in could not be completed" | Dominio de correo electrónico rechazado, validación de id\_token falló, o `email_verified` es explícitamente `false`, que la puerta de enlace siempre rechaza sin anulación | Verifique `allowed_email_domains` y que el IdP devuelva una reclamación `email` verificada. Para `email_verified: false`, corrija la verificación del lado del IdP. Si su IdP emite correo electrónico bajo un nombre de reclamación diferente, establezca `oidc.email_claim`. |288| `/oauth/callback` muestra "Sign-in could not be completed" | Dominio de correo electrónico rechazado, validación de id\_token falló, o `email_verified` es explícitamente `false`, que la puerta de enlace siempre rechaza sin anulación | Verifique `allowed_email_domains` y que el IdP devuelva una reclamación `email` verificada. Para `email_verified: false`, corrija la verificación del lado del IdP. Si su IdP emite correo electrónico bajo un nombre de reclamación diferente, establezca `oidc.email_claim`. |


293| El inicio de sesión se completa en el IdP pero la devolución de llamada falla, con un error de CSP en Chrome o "this sign-in link has expired" en Safari | El IdP devolvió el código a través de `response_mode=form_post`, que lo auto-envía entre orígenes a través de POST a `/oauth/callback`. Chrome bloquea eso bajo una CSP estricta; Safari permite el envío pero la devolución de llamada lee solo la cadena de consulta. | Asegúrese de que su IdP honre `response_mode=query`, que la puerta de enlace solicita explícitamente para que la devolución de llamada sea una redirección simple |295| El inicio de sesión se completa en el IdP pero la devolución de llamada falla, con un error de CSP en Chrome o "this sign-in link has expired" en Safari | El IdP devolvió el código a través de `response_mode=form_post`, que lo auto-envía entre orígenes a través de POST a `/oauth/callback`. Chrome bloquea eso bajo una CSP estricta; Safari permite el envío pero la devolución de llamada lee solo la cadena de consulta. | Asegúrese de que su IdP honre `response_mode=query`, que la puerta de enlace solicita explícitamente para que la devolución de llamada sea una redirección simple |

294| El inicio de sesión funciona localmente pero falla detrás de un ALB | `public_url` no establecido, así que el IdP obtiene el origen interno `http://` como `redirect_uri` | Establezca `listen.public_url` al origen externo `https://` |296| El inicio de sesión funciona localmente pero falla detrás de un ALB | `public_url` no establecido, así que el IdP obtiene el origen interno `http://` como `redirect_uri` | Establezca `listen.public_url` al origen externo `https://` |

295| El desarrollador ve el indicador de confianza repetidamente | El certificado TLS está rotando por réplica o por solicitud | Use un certificado estable en el ingress, o termine TLS una vez y ejecute réplicas sobre HTTP simple internamente |297| El desarrollador ve el indicador de confianza repetidamente | El certificado TLS está rotando por réplica o por solicitud | Use un certificado estable en el ingress, o termine TLS una vez y ejecute réplicas sobre HTTP simple internamente |

296| CLI `/login`: "Could not verify the gateway's TLS certificate" o `SELF_SIGNED_CERT_IN_CHAIN` | La cadena TLS de la puerta de enlace está firmada por una CA privada no en el almacén de confianza del host CLI | Claude Code lee el almacén de confianza del SO de forma predeterminada en el binario nativo y en Node 22.15 o posterior; [`CLAUDE_CODE_CERT_STORE`](/es/network-config#ca-certificate-store) controla este comportamiento. Si la CA está instalada en el almacén de confianza del SO, asegúrese de que los desarrolladores estén en un tiempo de ejecución actual. De lo contrario, establezca `NODE_EXTRA_CA_CERTS` al PEM del certificado de CA antes de lanzar. El indicador de huella digital de primera conexión aún se aplica. |298| CLI `/login`: "Could not verify the gateway's TLS certificate" o `SELF_SIGNED_CERT_IN_CHAIN` | La cadena TLS de la puerta de enlace está firmada por una CA privada no en el almacén de confianza del host CLI | Claude Code lee el almacén de confianza del SO de forma predeterminada en el binario nativo y en Node 22.15 o posterior; [`CLAUDE_CODE_CERT_STORE`](/docs/es/network-config#ca-certificate-store) controla este comportamiento. Si la CA está instalada en el almacén de confianza del SO, asegúrese de que los desarrolladores estén en un tiempo de ejecución actual. De lo contrario, establezca `NODE_EXTRA_CA_CERTS` al PEM del certificado de CA antes de lanzar. El indicador de huella digital de primera conexión aún se aplica. |

297 299 

298<h2 id="related">300<h2 id="related">

299 Relacionado301 Relacionado

300</h2>302</h2>

301 303 

302* [Descripción general de la puerta de enlace de aplicaciones Claude](/es/claude-apps-gateway): inicio rápido y conexión de desarrolladores304* [Descripción general de la puerta de enlace de aplicaciones Claude](/docs/es/claude-apps-gateway): inicio rápido y conexión de desarrolladores

303* [Referencia de configuración](/es/claude-apps-gateway-config): cada opción de `gateway.yaml`305* [Referencia de configuración](/docs/es/claude-apps-gateway-config): cada opción de `gateway.yaml`

commands.md +78 −78

Details

10 10 

11Escriba `/` para ver todos los comandos disponibles para usted, o escriba `/` seguido de letras para filtrar.11Escriba `/` para ver todos los comandos disponibles para usted, o escriba `/` seguido de letras para filtrar.

12 12 

13Un comando solo se reconoce al inicio de su mensaje. El texto que sigue al nombre del comando se le pasa como argumentos. {/* min-version: 2.1.199 */}A partir de v2.1.199, los [skills](/es/skills#pass-arguments-to-skills) son la excepción: una invocación de skill seguida de más skills, como `/skill-a /skill-b do XYZ`, carga cada skill nombrado al inicio y pasa el texto final a cada uno como argumentos. Se pueden encadenar hasta seis skills.13Un comando solo se reconoce al inicio de su mensaje. El texto que sigue al nombre del comando se le pasa como argumentos. {/* min-version: 2.1.199 */}A partir de v2.1.199, los [skills](/docs/es/skills#pass-arguments-to-skills) son la excepción: una invocación de skill seguida de más skills, como `/skill-a /skill-b do XYZ`, carga cada skill nombrado al inicio y pasa el texto final a cada uno como argumentos. Se pueden encadenar hasta seis skills.

14 14 

15Si envía un comando mientras Claude está respondiendo, se pone en cola y se ejecuta después de que termine el turno actual. Algunos comandos, como `/status`, `/tasks` y `/usage`, se ejecutan inmediatamente sin interrumpir la respuesta.15Si envía un comando mientras Claude está respondiendo, se pone en cola y se ejecuta después de que termine el turno actual. Algunos comandos, como `/status`, `/tasks` y `/usage`, se ejecutan inmediatamente sin interrumpir la respuesta.

16 16 


20 20 

21La mayoría de los comandos son útiles en un punto específico de una sesión, desde la configuración de un proyecto hasta el envío de un cambio.21La mayoría de los comandos son útiles en un punto específico de una sesión, desde la configuración de un proyecto hasta el envío de un cambio.

22 22 

23**Primera sesión en un repositorio.** Ejecute `/init` para generar un `CLAUDE.md` inicial, luego `/memory` para refinarlo. Use `/mcp` para configurar cualquier servidor que el proyecto necesite, pida a Claude que cree cualquier [subagente](/es/sub-agents) que desee, y ejecute `/permissions` para establecer sus reglas de aprobación.23**Primera sesión en un repositorio.** Ejecute `/init` para generar un `CLAUDE.md` inicial, luego `/memory` para refinarlo. Use `/mcp` para configurar cualquier servidor que el proyecto necesite, pida a Claude que cree cualquier [subagente](/docs/es/sub-agents) que desee, y ejecute `/permissions` para establecer sus reglas de aprobación.

24 24 

25**Durante una tarea.** `/plan` cambia a Plan Mode antes de un cambio grande. `/model` y `/effort` ajustan qué modelo está utilizando y cuánto razonamiento aplica. Cuando la conversación se alarga, `/context` muestra qué está llenando la ventana y `/compact` la resume para liberar espacio. Use `/btw` para una pregunta rápida que no debería agregarse al historial de conversación.25**Durante una tarea.** `/plan` cambia a Plan Mode antes de un cambio grande. `/model` y `/effort` ajustan qué modelo está utilizando y cuánto razonamiento aplica. Cuando la conversación se alarga, `/context` muestra qué está llenando la ventana y `/compact` la resume para liberar espacio. Use `/btw` para una pregunta rápida que no debería agregarse al historial de conversación.

26 26 

27**Ejecutando trabajo en paralelo.** Claude delega tareas secundarias a [subagentes](/es/sub-agents), y `/tasks` enumera lo que se está ejecutando en segundo plano de la sesión actual. `/background` desvincula toda la sesión para que siga ejecutándose como un [agente de fondo](/es/agent-view) y libera su terminal. Para un cambio grande que abarca la base de código, `/batch` lo descompone en unidades independientes y ejecuta cada una en su propio [worktree](/es/worktrees). Consulte [Ejecutar agentes en paralelo](/es/agents) para ver cómo se relacionan estos enfoques.27**Ejecutando trabajo en paralelo.** Claude delega tareas secundarias a [subagentes](/docs/es/sub-agents), y `/tasks` enumera lo que se está ejecutando en segundo plano de la sesión actual. `/background` desvincula toda la sesión para que siga ejecutándose como un [agente de fondo](/docs/es/agent-view) y libera su terminal. Para un cambio grande que abarca la base de código, `/batch` lo descompone en unidades independientes y ejecuta cada una en su propio [worktree](/docs/es/worktrees). Consulte [Ejecutar agentes en paralelo](/docs/es/agents) para ver cómo se relacionan estos enfoques.

28 28 

29**Antes de enviar.** `/diff` muestra qué cambió, `/code-review` verifica el diff para detectar errores de corrección y limpiezas y puede aplicar los hallazgos con `--fix`, `/review` proporciona una revisión rápida de una sola pasada y de solo lectura de una solicitud de extracción de GitHub, `/code-review <level> <pr#>` ejecuta una revisión multiagente de una, y `/security-review` verifica el diff para detectar vulnerabilidades de seguridad. `/code-review ultra` ejecuta una revisión multiagente en la nube.29**Antes de enviar.** `/diff` muestra qué cambió, `/code-review` verifica el diff para detectar errores de corrección y limpiezas y puede aplicar los hallazgos con `--fix`, `/review` proporciona una revisión rápida de una sola pasada y de solo lectura de una solicitud de extracción de GitHub, `/code-review <level> <pr#>` ejecuta una revisión multiagente de una, y `/security-review` verifica el diff para detectar vulnerabilidades de seguridad. `/code-review ultra` ejecuta una revisión multiagente en la nube.

30 30 


38 38 

39La tabla siguiente enumera todos los comandos incluidos en Claude Code. La mayoría son comandos integrados cuyo comportamiento está codificado en la CLI. Se marcan dos tipos de entradas:39La tabla siguiente enumera todos los comandos incluidos en Claude Code. La mayoría son comandos integrados cuyo comportamiento está codificado en la CLI. Se marcan dos tipos de entradas:

40 40 

41* **[Skill](/es/skills#bundled-skills)**: un skill agrupado. Funciona como los skills que escribe usted mismo: un prompt entregado a Claude, que Claude también puede invocar automáticamente cuando sea relevante.41* **[Skill](/docs/es/skills#bundled-skills)**: un skill agrupado. Funciona como los skills que escribe usted mismo: un prompt entregado a Claude, que Claude también puede invocar automáticamente cuando sea relevante.

42* **[Workflow](/es/workflows#bundled-workflows)**: un [workflow dinámico](/es/workflows) agrupado que expande el trabajo entre muchos subagentes y se ejecuta en segundo plano.42* **[Workflow](/docs/es/workflows#bundled-workflows)**: un [workflow dinámico](/docs/es/workflows) agrupado que expande el trabajo entre muchos subagentes y se ejecuta en segundo plano.

43 43 

44Para agregar sus propios comandos, consulte [skills](/es/skills).44Para agregar sus propios comandos, consulte [skills](/docs/es/skills).

45 45 

46En la tabla siguiente, `<arg>` indica un argumento requerido y `[arg]` indica uno opcional.46En la tabla siguiente, `<arg>` indica un argumento requerido y `[arg]` indica uno opcional.

47 47 


51 51 

52| Comando | Propósito |52| Comando | Propósito |

53| :--------------------------------------------------------------------------------- | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |53| :--------------------------------------------------------------------------------- | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

54| `/add-dir <path>` | Agregar un directorio de trabajo para acceso a archivos durante la sesión actual. Escribir una ruta parcial muestra sugerencias de directorio coincidentes; presione `Tab` para aceptar una. La mayoría de la configuración de `.claude/` [no se descubre](/es/permissions#additional-directories-grant-file-access-not-configuration) desde el directorio agregado. Puede reanudar la sesión más tarde desde el directorio agregado con `--continue` o `--resume` |54| `/add-dir <path>` | Agregar un directorio de trabajo para acceso a archivos durante la sesión actual. Escribir una ruta parcial muestra sugerencias de directorio coincidentes; presione `Tab` para aceptar una. La mayoría de la configuración de `.claude/` [no se descubre](/docs/es/permissions#additional-directories-grant-file-access-not-configuration) desde el directorio agregado. Puede reanudar la sesión más tarde desde el directorio agregado con `--continue` o `--resume` |

55| `/advisor [model\|off]` | Habilitar o deshabilitar la [herramienta advisor](/es/advisor), que consulta un segundo modelo para obtener orientación en momentos clave durante una tarea. Acepta `opus`, `sonnet`, `fable` ({/* min-version: 2.1.170 */}v2.1.170+), o un ID de modelo completo. Sin un argumento, abre un selector |55| `/advisor [model\|off]` | Habilitar o deshabilitar la [herramienta advisor](/docs/es/advisor), que consulta un segundo modelo para obtener orientación en momentos clave durante una tarea. Acepta `opus`, `sonnet`, `fable` ({/* min-version: 2.1.170 */}v2.1.170+), o un ID de modelo completo. Sin un argumento, abre un selector |

56| `/agents` | {/* min-version: 2.1.198 */}A partir de v2.1.198, ejecutar `/agents` imprime un recordatorio para pedirle a Claude que cree o administre [subagentes](/es/sub-agents), o para editar `.claude/agents/` o `~/.claude/agents/` directamente. {/* max-version: 2.1.197 */}En v2.1.197 y anteriores, abre una interfaz interactiva para crear y administrar configuraciones de subagentes |56| `/agents` | {/* min-version: 2.1.198 */}A partir de v2.1.198, ejecutar `/agents` imprime un recordatorio para pedirle a Claude que cree o administre [subagentes](/docs/es/sub-agents), o para editar `.claude/agents/` o `~/.claude/agents/` directamente. {/* max-version: 2.1.197 */}En v2.1.197 y anteriores, abre una interfaz interactiva para crear y administrar configuraciones de subagentes |

57| `/autofix-pr [prompt]` | Generar una sesión de [Claude Code en la web](/es/claude-code-on-the-web#auto-fix-pull-requests) que observe la PR de la rama actual e impulse correcciones cuando CI falla o los revisores dejan comentarios. Detecta la PR abierta de su rama extraída con `gh pr view`; para observar una PR diferente, primero extraiga su rama. De forma predeterminada, se le indica a la sesión remota que corrija todos los errores de CI y comentarios de revisión; pase un prompt para darle instrucciones diferentes, por ejemplo `/autofix-pr only fix lint and type errors`. Requiere la CLI `gh` y acceso a [Claude Code en la web](/es/claude-code-on-the-web) |57| `/autofix-pr [prompt]` | Generar una sesión de [Claude Code en la web](/docs/es/claude-code-on-the-web#auto-fix-pull-requests) que observe la PR de la rama actual e impulse correcciones cuando CI falla o los revisores dejan comentarios. Detecta la PR abierta de su rama extraída con `gh pr view`; para observar una PR diferente, primero extraiga su rama. De forma predeterminada, se le indica a la sesión remota que corrija todos los errores de CI y comentarios de revisión; pase un prompt para darle instrucciones diferentes, por ejemplo `/autofix-pr only fix lint and type errors`. Requiere la CLI `gh` y acceso a [Claude Code en la web](/docs/es/claude-code-on-the-web) |

58| `/background [prompt]` | Desconectar la sesión actual para ejecutarse como un [agente de fondo](/es/agent-view) y liberar esta terminal. Pase un prompt para enviar una instrucción más antes de desconectar. Monitoree la sesión con `claude agents`. Alias: `/bg` |58| `/background [prompt]` | Desconectar la sesión actual para ejecutarse como un [agente de fondo](/docs/es/agent-view) y liberar esta terminal. Pase un prompt para enviar una instrucción más antes de desconectar. Monitoree la sesión con `claude agents`. Alias: `/bg` |

59| `/batch <instruction>` | **[Skill](/es/skills#bundled-skills).** Orquestar cambios a gran escala en una base de código en paralelo. Investiga la base de código, descompone el trabajo en 5 a 30 unidades independientes y presenta un plan. Una vez aprobado, genera un [subagente de fondo](/es/sub-agents#run-subagents-in-foreground-or-background) por unidad en un [git worktree](/es/worktrees) aislado. Cada subagente implementa su unidad, ejecuta pruebas y abre una solicitud de extracción. Requiere un repositorio de git. Ejemplo: `/batch migrate src/ from Solid to React` |59| `/batch <instruction>` | **[Skill](/docs/es/skills#bundled-skills).** Orquestar cambios a gran escala en una base de código en paralelo. Investiga la base de código, descompone el trabajo en 5 a 30 unidades independientes y presenta un plan. Una vez aprobado, genera un [subagente de fondo](/docs/es/sub-agents#run-subagents-in-foreground-or-background) por unidad en un [git worktree](/docs/es/worktrees) aislado. Cada subagente implementa su unidad, ejecuta pruebas y abre una solicitud de extracción. Requiere un repositorio de git. Ejemplo: `/batch migrate src/ from Solid to React` |

60| `/branch [name]` | Crear una rama de la conversación actual en este punto, para que pueda probar una dirección diferente sin perder la conversación tal como está. Lo cambia a la rama y preserva la original, a la que puede volver con `/resume`. Para entregar una tarea secundaria a un subagente de fondo en lugar de cambiar a una copia usted mismo, use `/fork` |60| `/branch [name]` | Crear una rama de la conversación actual en este punto, para que pueda probar una dirección diferente sin perder la conversación tal como está. Lo cambia a la rama y preserva la original, a la que puede volver con `/resume`. Para entregar una tarea secundaria a un subagente de fondo en lugar de cambiar a una copia usted mismo, use `/fork` |

61| `/btw <question>` | Hacer una [pregunta rápida](/es/interactive-mode#side-questions-with-%2Fbtw) sin agregar a la conversación |61| `/btw <question>` | Hacer una [pregunta rápida](/docs/es/interactive-mode#side-questions-with-%2Fbtw) sin agregar a la conversación |

62| `/cd <path>` | {/* min-version: 2.1.169 */}Mover esta sesión a un nuevo directorio de trabajo. La caché de prompts de la conversación se preserva: el [`CLAUDE.md`](/es/memory) del nuevo directorio se agrega como un mensaje en lugar de reconstruir el prompt del sistema. La sesión se reubica al almacenamiento de proyecto del nuevo directorio, por lo que `--resume` y `--continue` lo encuentran desde allí. Le solicita que confíe en el directorio si no ha trabajado en él antes. {/* min-version: 2.1.206 */}Escribir una ruta parcial muestra sugerencias de directorio coincidentes; presione `Tab` para aceptar una. Las sugerencias requieren Claude Code v2.1.206 o posterior. Para otorgar acceso a un directorio adicional sin mover la sesión, use `/add-dir`. Restrinja o deshabilite los destinos de `/cd` con [reglas de permiso `Cd`](/es/permissions#cd). Requiere Claude Code v2.1.169 o posterior; las versiones anteriores reportan `Unknown command: /cd` |62| `/cd <path>` | {/* min-version: 2.1.169 */}Mover esta sesión a un nuevo directorio de trabajo. La caché de prompts de la conversación se preserva: el [`CLAUDE.md`](/docs/es/memory) del nuevo directorio se agrega como un mensaje en lugar de reconstruir el prompt del sistema. La sesión se reubica al almacenamiento de proyecto del nuevo directorio, por lo que `--resume` y `--continue` lo encuentran desde allí. Le solicita que confíe en el directorio si no ha trabajado en él antes. {/* min-version: 2.1.206 */}Escribir una ruta parcial muestra sugerencias de directorio coincidentes; presione `Tab` para aceptar una. Las sugerencias requieren Claude Code v2.1.206 o posterior. Para otorgar acceso a un directorio adicional sin mover la sesión, use `/add-dir`. Restrinja o deshabilite los destinos de `/cd` con [reglas de permiso `Cd`](/docs/es/permissions#cd). Requiere Claude Code v2.1.169 o posterior; las versiones anteriores reportan `Unknown command: /cd` |

63| `/chrome` | Configurar ajustes de [Claude in Chrome](/es/chrome) |63| `/chrome` | Configurar ajustes de [Claude in Chrome](/docs/es/chrome) |

64| `/claude-api [migrate\|managed-agents-onboard]` | **[Skill](/es/skills#bundled-skills).** Cargar material de referencia de la API de Claude para el idioma de su proyecto (Python, TypeScript, Java, Go, Ruby, C#, PHP o cURL) y referencia de Managed Agents. Cubre uso de herramientas, streaming, lotes, salidas estructuradas y trampas comunes. También se activa automáticamente cuando su código importa `anthropic` o `@anthropic-ai/sdk`. Ejecute `/claude-api migrate` para actualizar el código existente de la API de Claude a un modelo más nuevo: Claude pregunta qué archivos escanear y qué modelo dirigirse, luego actualiza los ID de modelo, configuración de pensamiento y otros parámetros que cambiaron entre versiones. Ejecute `/claude-api managed-agents-onboard` para un tutorial interactivo que crea un nuevo Managed Agent desde cero |64| `/claude-api [migrate\|managed-agents-onboard]` | **[Skill](/docs/es/skills#bundled-skills).** Cargar material de referencia de la API de Claude para el idioma de su proyecto (Python, TypeScript, Java, Go, Ruby, C#, PHP o cURL) y referencia de Managed Agents. Cubre uso de herramientas, streaming, lotes, salidas estructuradas y trampas comunes. También se activa automáticamente cuando su código importa `anthropic` o `@anthropic-ai/sdk`. Ejecute `/claude-api migrate` para actualizar el código existente de la API de Claude a un modelo más nuevo: Claude pregunta qué archivos escanear y qué modelo dirigirse, luego actualiza los ID de modelo, configuración de pensamiento y otros parámetros que cambiaron entre versiones. Ejecute `/claude-api managed-agents-onboard` para un tutorial interactivo que crea un nuevo Managed Agent desde cero |

65| `/clear [name]` | Iniciar una nueva conversación con contexto vacío. Pase un nombre para etiquetar la conversación anterior en el selector `/resume`. Para liberar contexto mientras continúa la misma conversación, use `/compact` en su lugar. Reanude la conversación anterior con `/resume`, o, en el mismo proceso de Claude Code, {/* min-version: 2.1.191 */}restáurela desde [la entrada de sesión anterior del menú de rebobinado](/es/checkpointing#rewind-past-a-cleared-conversation). Alias: `/reset`, `/new` |65| `/clear [name]` | Iniciar una nueva conversación con contexto vacío. Pase un nombre para etiquetar la conversación anterior en el selector `/resume`. Para liberar contexto mientras continúa la misma conversación, use `/compact` en su lugar. Reanude la conversación anterior con `/resume`, o, en el mismo proceso de Claude Code, {/* min-version: 2.1.191 */}restáurela desde [la entrada de sesión anterior del menú de rebobinado](/docs/es/checkpointing#rewind-past-a-cleared-conversation). Alias: `/reset`, `/new` |

66| `/code-review [low\|medium\|high\|xhigh\|max\|ultra] [--fix] [--comment] [target]` | **[Skill](/es/skills#bundled-skills).** Revisar el diff actual para detectar errores de corrección y para reutilización, simplificación y limpiezas de eficiencia. Pase `--fix` para aplicar hallazgos a su árbol de trabajo, `--comment` para publicarlos como comentarios en línea en la PR de GitHub, o `ultra` para ejecutar una [revisión en la nube](/es/ultrareview) profunda. {/* min-version: 2.1.154 */}A partir de v2.1.154, `/simplify` ejecuta una revisión separada solo de limpieza que aplica correcciones sin buscar errores de corrección. Consulte [Revisar un diff localmente](/es/code-review#review-a-diff-locally) para niveles de esfuerzo y orientación |66| `/code-review [low\|medium\|high\|xhigh\|max\|ultra] [--fix] [--comment] [target]` | **[Skill](/docs/es/skills#bundled-skills).** Revisar el diff actual para detectar errores de corrección y para reutilización, simplificación y limpiezas de eficiencia. Pase `--fix` para aplicar hallazgos a su árbol de trabajo, `--comment` para publicarlos como comentarios en línea en la PR de GitHub, o `ultra` para ejecutar una [revisión en la nube](/docs/es/ultrareview) profunda. {/* min-version: 2.1.154 */}A partir de v2.1.154, `/simplify` ejecuta una revisión separada solo de limpieza que aplica correcciones sin buscar errores de corrección. Consulte [Revisar un diff localmente](/docs/es/code-review#review-a-diff-locally) para niveles de esfuerzo y orientación |

67| `/color [color\|default]` | Establecer el color de la barra de solicitud para la sesión actual. Colores disponibles: `red`, `blue`, `green`, `yellow`, `purple`, `orange`, `pink`, `cyan`. Use `default` para restablecer, o ejecute sin argumento para elegir un color aleatorio. Cuando [Remote Control](/es/remote-control) está conectado, el color se sincroniza con claude.ai/code. {/* min-version: 2.1.205 */}También disponible en modo no interactivo (`-p`); requiere Claude Code v2.1.205 o posterior |67| `/color [color\|default]` | Establecer el color de la barra de solicitud para la sesión actual. Colores disponibles: `red`, `blue`, `green`, `yellow`, `purple`, `orange`, `pink`, `cyan`. Use `default` para restablecer, o ejecute sin argumento para elegir un color aleatorio. Cuando [Remote Control](/docs/es/remote-control) está conectado, el color se sincroniza con claude.ai/code. {/* min-version: 2.1.205 */}También disponible en modo no interactivo (`-p`); requiere Claude Code v2.1.205 o posterior |

68| `/compact [instructions]` | Liberar contexto resumiendo la conversación hasta ahora. Opcionalmente pase instrucciones de enfoque para el resumen. Consulte [cómo la compactación maneja reglas, skills y archivos de memoria](/es/context-window#what-survives-compaction) |68| `/compact [instructions]` | Liberar contexto resumiendo la conversación hasta ahora. Opcionalmente pase instrucciones de enfoque para el resumen. Consulte [cómo la compactación maneja reglas, skills y archivos de memoria](/docs/es/context-window#what-survives-compaction) |

69| `/config [key=value ...]` | Abrir la interfaz de [Settings](/es/settings) para ajustar tema, modelo, [estilo de salida](/es/output-styles) y otras preferencias. {/* min-version: 2.1.181 */}A partir de v2.1.181, pase uno o más pares `key=value` para establecer una configuración directamente sin abrir la interfaz, por ejemplo `/config thinking=false`. {/* min-version: 2.1.182 */}A partir de v2.1.182, también se aceptan claves de abreviatura nombradas, como `/config theme=dark` o `/config model=sonnet`. El formulario `key=value` también funciona en modo no interactivo (`-p`) y desde la aplicación móvil Claude a través de [Remote Control](/es/remote-control). Ejecute `/config --help` para listar todas las claves configurables con sus opciones. Alias: `/settings` |69| `/config [key=value ...]` | Abrir la interfaz de [Settings](/docs/es/settings) para ajustar tema, modelo, [estilo de salida](/docs/es/output-styles) y otras preferencias. {/* min-version: 2.1.181 */}A partir de v2.1.181, pase uno o más pares `key=value` para establecer una configuración directamente sin abrir la interfaz, por ejemplo `/config thinking=false`. {/* min-version: 2.1.182 */}A partir de v2.1.182, también se aceptan claves de abreviatura nombradas, como `/config theme=dark` o `/config model=sonnet`. El formulario `key=value` también funciona en modo no interactivo (`-p`) y desde la aplicación móvil Claude a través de [Remote Control](/docs/es/remote-control). Ejecute `/config --help` para listar todas las claves configurables con sus opciones. Alias: `/settings` |

70| `/context [all]` | Visualizar el uso actual del contexto como una cuadrícula de colores. Muestra sugerencias de optimización para herramientas con mucho contexto, inflación de memoria y advertencias de capacidad. En [modo de pantalla completa](/es/fullscreen) el desglose por elemento se colapsa para mantener la cuadrícula visible. Pase `all` para expandirlo |70| `/context [all]` | Visualizar el uso actual del contexto como una cuadrícula de colores. Muestra sugerencias de optimización para herramientas con mucho contexto, inflación de memoria y advertencias de capacidad. En [modo de pantalla completa](/docs/es/fullscreen) el desglose por elemento se colapsa para mantener la cuadrícula visible. Pase `all` para expandirlo |

71| `/copy [N]` | Copiar la última respuesta del asistente al portapapeles. Pase un número `N` para copiar la respuesta N-ésima más reciente: `/copy 2` copia la segunda más reciente. Cuando hay bloques de código presentes, muestra un selector interactivo para seleccionar bloques individuales o la respuesta completa. Presione `w` en el selector para escribir la selección en un archivo en lugar del portapapeles, lo cual es útil a través de SSH |71| `/copy [N]` | Copiar la última respuesta del asistente al portapapeles. Pase un número `N` para copiar la respuesta N-ésima más reciente: `/copy 2` copia la segunda más reciente. Cuando hay bloques de código presentes, muestra un selector interactivo para seleccionar bloques individuales o la respuesta completa. Presione `w` en el selector para escribir la selección en un archivo en lugar del portapapeles, lo cual es útil a través de SSH |

72| `/cost` | Alias para `/usage` |72| `/cost` | Alias para `/usage` |

73| `/dataviz [request]` | **[Skill](/es/skills#bundled-skills).** Orientación de diseño para gráficos, diagramas y paneles de control. Claude elige la forma de gráfico para los datos, asigna color por rol, valida la paleta para seguridad de daltonismo y contraste con un script agrupado, y aplica reglas de marca, interacción y accesibilidad. Utiliza una paleta de marcador neutral de marca que reemplaza con la suya propia. {/* min-version: 2.1.198 */}Requiere Claude Code v2.1.198 o posterior |73| `/dataviz [request]` | **[Skill](/docs/es/skills#bundled-skills).** Orientación de diseño para gráficos, diagramas y paneles de control. Claude elige la forma de gráfico para los datos, asigna color por rol, valida la paleta para seguridad de daltonismo y contraste con un script agrupado, y aplica reglas de marca, interacción y accesibilidad. Utiliza una paleta de marcador neutral de marca que reemplaza con la suya propia. {/* min-version: 2.1.198 */}Requiere Claude Code v2.1.198 o posterior |

74| `/debug [description]` | **[Skill](/es/skills#bundled-skills).** Habilitar registro de depuración para la sesión actual y solucionar problemas leyendo el registro de depuración de la sesión. El registro de depuración está desactivado de forma predeterminada a menos que haya iniciado con `claude --debug`, por lo que ejecutar `/debug` a mitad de sesión comienza a capturar registros desde ese punto en adelante. Opcionalmente describa el problema para enfocar el análisis |74| `/debug [description]` | **[Skill](/docs/es/skills#bundled-skills).** Habilitar registro de depuración para la sesión actual y solucionar problemas leyendo el registro de depuración de la sesión. El registro de depuración está desactivado de forma predeterminada a menos que haya iniciado con `claude --debug`, por lo que ejecutar `/debug` a mitad de sesión comienza a capturar registros desde ese punto en adelante. Opcionalmente describa el problema para enfocar el análisis |

75| `/deep-research <question>` | **[Workflow](/es/workflows#bundled-workflows).** Expandir búsquedas web en una pregunta, obtener y verificar cruzadamente fuentes, y sintetizar un informe citado |75| `/deep-research <question>` | **[Workflow](/docs/es/workflows#bundled-workflows).** Expandir búsquedas web en una pregunta, obtener y verificar cruzadamente fuentes, y sintetizar un informe citado |

76| `/design-login` | Autorizar acceso al sistema de diseño para `/design-sync` con su cuenta claude.ai |76| `/design-login` | Autorizar acceso al sistema de diseño para `/design-sync` con su cuenta claude.ai |

77| `/design-sync [hint]` | **[Skill](/es/skills#bundled-skills).** Convertir el sistema de diseño React de su repositorio y cargarlo en [Claude Design](https://claude.ai/design), para que los diseños que produce utilicen sus componentes reales. Opcionalmente nombre el sistema de diseño, por ejemplo `/design-sync Acme DS`. Una sincronización por primera vez verifica cada componente y puede tomar algunas horas en un repositorio grande. Disponible en la API de Anthropic; en Amazon Bedrock, la plataforma de agentes de Google Cloud, Microsoft Foundry y Claude Platform en AWS, la herramienta subyacente no puede alcanzar claude.ai, por lo que el comando no está disponible |77| `/design-sync [hint]` | **[Skill](/docs/es/skills#bundled-skills).** Convertir el sistema de diseño React de su repositorio y cargarlo en [Claude Design](https://claude.ai/design), para que los diseños que produce utilicen sus componentes reales. Opcionalmente nombre el sistema de diseño, por ejemplo `/design-sync Acme DS`. Una sincronización por primera vez verifica cada componente y puede tomar algunas horas en un repositorio grande. Disponible en la API de Anthropic; en Amazon Bedrock, la plataforma de agentes de Google Cloud, Microsoft Foundry y Claude Platform en AWS, la herramienta subyacente no puede alcanzar claude.ai, por lo que el comando no está disponible |

78| `/desktop` | Continuar la sesión actual en la aplicación Claude Code Desktop. Requiere macOS o Windows y una suscripción de Claude. Alias: `/app` |78| `/desktop` | Continuar la sesión actual en la aplicación Claude Code Desktop. Requiere macOS o Windows y una suscripción de Claude. Alias: `/app` |

79| `/diff` | Abrir un visor de diferencias interactivo que muestre cambios sin confirmar y diferencias por turno. Use las flechas izquierda/derecha para cambiar entre el diff de git actual y los turnos individuales de Claude, y arriba/abajo para examinar archivos. Presione Enter para abrir el diff del archivo seleccionado, desplácese con arriba/abajo o PageUp/PageDown, y presione Esc para volver a la lista de archivos. {/* min-version: 2.1.198 */}A partir de v2.1.198, el visor abierto también se actualiza automáticamente cuando el estado de git del repositorio cambia fuera de la sesión, como un cambio de rama o confirmación en otra terminal |79| `/diff` | Abrir un visor de diferencias interactivo que muestre cambios sin confirmar y diferencias por turno. Use las flechas izquierda/derecha para cambiar entre el diff de git actual y los turnos individuales de Claude, y arriba/abajo para examinar archivos. Presione Enter para abrir el diff del archivo seleccionado, desplácese con arriba/abajo o PageUp/PageDown, y presione Esc para volver a la lista de archivos. {/* min-version: 2.1.198 */}A partir de v2.1.198, el visor abierto también se actualiza automáticamente cuando el estado de git del repositorio cambia fuera de la sesión, como un cambio de rama o confirmación en otra terminal |

80| `/doctor` | **[Skill](/es/skills#bundled-skills).** Ejecutar una verificación de configuración que diagnostica problemas y puede corregirlos. Verifica la salud de la instalación, incluidas instalaciones duplicadas o sobrantes, problemas de `PATH` y archivos de configuración no analizables. Encuentra skills no utilizados, servidores MCP y plugins versus su costo de contexto, marca [hooks](/es/hooks) lentos y verifica una versión más nueva en su canal de lanzamiento. Deduplica archivos locales `CLAUDE.md` contra los registrados, recorta archivos [`CLAUDE.md`](/es/memory) registrados cortando contenido que Claude podría derivar de la base de código, y migra la orientación siempre cargada que permanece en [skills](/es/skills) y archivos `CLAUDE.md` anidados que se cargan bajo demanda. El recorte corta secciones como diseños de directorio, listas de dependencias y descripción general de arquitectura, y mantiene trampas, justificación y convenciones que difieren de los valores predeterminados de herramientas. También ofrece hacer que [auto mode](/es/permissions#permission-modes) sea su predeterminado y [pre-aprobar](/es/permissions) comandos de solo lectura frecuentemente denegados. Informa hallazgos primero y pide confirmación antes de cambiar nada. Desde la terminal, `claude doctor` imprime diagnósticos de instalación de solo lectura sin iniciar una sesión. Alias: `/checkup`. {/* min-version: 2.1.206 */}La verificación de recorte de `CLAUDE.md` requiere Claude Code v2.1.206 o posterior. Antes de v2.1.206, la verificación de versión comparaba instalaciones de Homebrew contra la configuración `autoUpdatesChannel` en lugar del [canal del cask instalado](/es/setup#configure-release-channel). {/* min-version: 2.1.205 */}Antes de v2.1.205, `/doctor` abría una pantalla de diagnósticos de solo lectura y presionar `f` enviaba el informe a Claude |80| `/doctor` | **[Skill](/docs/es/skills#bundled-skills).** Ejecutar una verificación de configuración que diagnostica problemas y puede corregirlos. Verifica la salud de la instalación, incluidas instalaciones duplicadas o sobrantes, problemas de `PATH` y archivos de configuración no analizables. Encuentra skills no utilizados, servidores MCP y plugins versus su costo de contexto, marca [hooks](/docs/es/hooks) lentos y verifica una versión más nueva en su canal de lanzamiento. Deduplica archivos locales `CLAUDE.md` contra los registrados, recorta archivos [`CLAUDE.md`](/docs/es/memory) registrados cortando contenido que Claude podría derivar de la base de código, y migra la orientación siempre cargada que permanece en [skills](/docs/es/skills) y archivos `CLAUDE.md` anidados que se cargan bajo demanda. El recorte corta secciones como diseños de directorio, listas de dependencias y descripción general de arquitectura, y mantiene trampas, justificación y convenciones que difieren de los valores predeterminados de herramientas. También ofrece hacer que [auto mode](/docs/es/permissions#permission-modes) sea su predeterminado y [pre-aprobar](/docs/es/permissions) comandos de solo lectura frecuentemente denegados. Informa hallazgos primero y pide confirmación antes de cambiar nada. Desde la terminal, `claude doctor` imprime diagnósticos de instalación de solo lectura sin iniciar una sesión. Alias: `/checkup`. {/* min-version: 2.1.206 */}La verificación de recorte de `CLAUDE.md` requiere Claude Code v2.1.206 o posterior. Antes de v2.1.206, la verificación de versión comparaba instalaciones de Homebrew contra la configuración `autoUpdatesChannel` en lugar del [canal del cask instalado](/docs/es/setup#configure-release-channel). {/* min-version: 2.1.205 */}Antes de v2.1.205, `/doctor` abría una pantalla de diagnósticos de solo lectura y presionar `f` enviaba el informe a Claude |

81| `/effort [level\|auto]` | Establecer el [nivel de esfuerzo](/es/model-config#adjust-effort-level) del modelo. Acepta `low`, `medium`, `high`, `xhigh`, `max` o `ultracode`; los niveles disponibles dependen del modelo, y `max` y `ultracode` son solo para sesión. `ultracode` es una configuración de Claude Code que combina razonamiento `xhigh` con orquestación automática de [workflow](/es/workflows#let-claude-decide-with-ultracode). `auto` se restablece al valor predeterminado del modelo. Sin un argumento, abre un control deslizante interactivo; use las flechas izquierda y derecha para elegir un nivel y `Enter` para aplicar. Entra en vigor inmediatamente sin esperar a que se complete la respuesta actual. {/* min-version: 2.1.205 */}También disponible en modo no interactivo (`-p`) con un argumento de nivel, donde se aplica solo a la sesión actual y no se guarda como su predeterminado; requiere Claude Code v2.1.205 o posterior. En Fable 5, Opus 4.8 y Opus 4.7, un `/effort` no interactivo reporta `Not applied` mientras el [modelo-default effort hold](/es/model-config#adjust-effort-level) está en vigor, así que pase `--effort` en el lanzamiento en su lugar |81| `/effort [level\|auto]` | Establecer el [nivel de esfuerzo](/docs/es/model-config#adjust-effort-level) del modelo. Acepta `low`, `medium`, `high`, `xhigh`, `max` o `ultracode`; los niveles disponibles dependen del modelo, y `max` y `ultracode` son solo para sesión. `ultracode` es una configuración de Claude Code que combina razonamiento `xhigh` con orquestación automática de [workflow](/docs/es/workflows#let-claude-decide-with-ultracode). `auto` se restablece al valor predeterminado del modelo. Sin un argumento, abre un control deslizante interactivo; use las flechas izquierda y derecha para elegir un nivel y `Enter` para aplicar. Entra en vigor inmediatamente sin esperar a que se complete la respuesta actual. {/* min-version: 2.1.205 */}También disponible en modo no interactivo (`-p`) con un argumento de nivel, donde se aplica solo a la sesión actual y no se guarda como su predeterminado; requiere Claude Code v2.1.205 o posterior. En Fable 5, Opus 4.8 y Opus 4.7, un `/effort` no interactivo reporta `Not applied` mientras el [modelo-default effort hold](/docs/es/model-config#adjust-effort-level) está en vigor, así que pase `--effort` en el lanzamiento en su lugar |

82| `/exit` | Salir de la CLI. En una [sesión de fondo](/es/agent-view#attach-to-a-session) conectada, esto desconecta y la sesión continúa ejecutándose. Alias: `/quit` |82| `/exit` | Salir de la CLI. En una [sesión de fondo](/docs/es/agent-view#attach-to-a-session) conectada, esto desconecta y la sesión continúa ejecutándose. Alias: `/quit` |

83| `/export [filename]` | Exportar la conversación actual como texto sin formato. Con un nombre de archivo, escribe directamente en ese archivo. Sin uno, abre un diálogo para copiar al portapapeles o guardar en un archivo |83| `/export [filename]` | Exportar la conversación actual como texto sin formato. Con un nombre de archivo, escribe directamente en ese archivo. Sin uno, abre un diálogo para copiar al portapapeles o guardar en un archivo |

84| `/fast [on\|off]` | Alternar [fast mode](/es/fast-mode) activado o desactivado. {/* min-version: 2.1.205 */}En modo no interactivo (`-p`), `/fast` funciona solo en una sesión lanzada con fast mode en su valor [`--settings`](/es/cli-reference#cli-flags), por ejemplo `claude -p --settings '{"fastMode": true}'`; el cambio se aplica solo a la sesión actual y no se guarda como su predeterminado, y en cualquier otra sesión no interactiva el comando reporta que fast mode no está disponible. Requiere Claude Code v2.1.205 o posterior |84| `/fast [on\|off]` | Alternar [fast mode](/docs/es/fast-mode) activado o desactivado. {/* min-version: 2.1.205 */}En modo no interactivo (`-p`), `/fast` funciona solo en una sesión lanzada con fast mode en su valor [`--settings`](/docs/es/cli-reference#cli-flags), por ejemplo `claude -p --settings '{"fastMode": true}'`; el cambio se aplica solo a la sesión actual y no se guarda como su predeterminado, y en cualquier otra sesión no interactiva el comando reporta que fast mode no está disponible. Requiere Claude Code v2.1.205 o posterior |

85| `/feedback [report]` | Enviar comentarios, reportar un error o compartir su conversación. Enviar a Anthropic requiere [autenticación](/es/authentication). Alias: `/bug`, `/share` |85| `/feedback [report]` | Enviar comentarios, reportar un error o compartir su conversación. Enviar a Anthropic requiere [autenticación](/docs/es/authentication). Alias: `/bug`, `/share` |

86| `/fewer-permission-prompts` | **[Skill](/es/skills#bundled-skills).** Escanear sus transcripciones para llamadas comunes de herramientas Bash y MCP de solo lectura, luego agregar una lista de permitidos priorizada al proyecto `.claude/settings.json` para reducir solicitudes de permiso |86| `/fewer-permission-prompts` | **[Skill](/docs/es/skills#bundled-skills).** Escanear sus transcripciones para llamadas comunes de herramientas Bash y MCP de solo lectura, luego agregar una lista de permitidos priorizada al proyecto `.claude/settings.json` para reducir solicitudes de permiso |

87| `/focus` | Alternar la vista de enfoque, que muestra solo su último prompt, un resumen de llamada de herramienta de una línea con estadísticas de edición de diferencias y la respuesta final. {/* min-version: 2.1.198 */}A partir de v2.1.198, el resumen de llamada de herramienta también cuenta los subagentes lanzados en el turno y colapsa las notificaciones de tareas de fondo completadas en un único recuento. La selección persiste entre sesiones; establezca [`viewMode`](/es/settings#available-settings) en configuración para anularlo. Solo disponible en [renderizado de pantalla completa](/es/fullscreen) |87| `/focus` | Alternar la vista de enfoque, que muestra solo su último prompt, un resumen de llamada de herramienta de una línea con estadísticas de edición de diferencias y la respuesta final. {/* min-version: 2.1.198 */}A partir de v2.1.198, el resumen de llamada de herramienta también cuenta los subagentes lanzados en el turno y colapsa las notificaciones de tareas de fondo completadas en un único recuento. La selección persiste entre sesiones; establezca [`viewMode`](/docs/es/settings#available-settings) en configuración para anularlo. Solo disponible en [renderizado de pantalla completa](/docs/es/fullscreen) |

88| `/fork <directive>` | {/* min-version: 2.1.161 */}Generar un [subagente bifurcado](/es/sub-agents#fork-the-current-conversation): un subagente de fondo que hereda la conversación completa y trabaja en la directiva mientras usted continúa. Su resultado regresa a su conversación cuando termina. Para cambiar a una copia de la conversación usted mismo, use `/branch`. Antes de v2.1.161, `/fork` es un alias para `/branch` |88| `/fork <directive>` | {/* min-version: 2.1.161 */}Generar un [subagente bifurcado](/docs/es/sub-agents#fork-the-current-conversation): un subagente de fondo que hereda la conversación completa y trabaja en la directiva mientras usted continúa. Su resultado regresa a su conversación cuando termina. Para cambiar a una copia de la conversación usted mismo, use `/branch`. Antes de v2.1.161, `/fork` es un alias para `/branch` |

89| `/goal [condition\|clear]` | Establecer un [goal](/es/goal): Claude continúa trabajando entre turnos hasta que se cumpla la condición. Sin un argumento, muestra el goal actual o el más recientemente logrado. `clear`, `stop`, `off`, `reset`, `none` o `cancel` elimina un goal activo temprano |89| `/goal [condition\|clear]` | Establecer un [goal](/docs/es/goal): Claude continúa trabajando entre turnos hasta que se cumpla la condición. Sin un argumento, muestra el goal actual o el más recientemente logrado. `clear`, `stop`, `off`, `reset`, `none` o `cancel` elimina un goal activo temprano |

90| `/heapdump` | Escribir una instantánea de montón de JavaScript y un desglose de memoria en `~/Desktop`, o su directorio de inicio en Linux sin una carpeta Desktop, para diagnosticar uso alto de memoria. Consulte [solución de problemas](/es/troubleshooting#high-cpu-or-memory-usage) |90| `/heapdump` | Escribir una instantánea de montón de JavaScript y un desglose de memoria en `~/Desktop`, o su directorio de inicio en Linux sin una carpeta Desktop, para diagnosticar uso alto de memoria. El archivo `.heapsnapshot` contiene su conversación completa y credenciales, así que no lo comparta. Consulte [solución de problemas](/docs/es/troubleshooting#high-cpu-or-memory-usage) |

91| `/help` | Mostrar ayuda y comandos disponibles |91| `/help` | Mostrar ayuda y comandos disponibles |

92| `/hooks` | Ver configuraciones de [hook](/es/hooks) para eventos de herramientas |92| `/hooks` | Ver configuraciones de [hook](/docs/es/hooks) para eventos de herramientas |

93| `/ide` | Administrar integraciones de IDE y mostrar estado |93| `/ide` | Administrar integraciones de IDE y mostrar estado |

94| `/init` | Inicializar proyecto con una guía `CLAUDE.md`. Establezca `CLAUDE_CODE_NEW_INIT=1` para un flujo interactivo que también lo guíe a través de skills, hooks y archivos de memoria personal |94| `/init` | Inicializar proyecto con una guía `CLAUDE.md`. Establezca `CLAUDE_CODE_NEW_INIT=1` para un flujo interactivo que también lo guíe a través de skills, hooks y archivos de memoria personal |

95| `/insights` | Generar un informe que analice sus sesiones de Claude Code, incluidas áreas de proyecto, patrones de interacción y puntos de fricción |95| `/insights` | Generar un informe que analice sus sesiones de Claude Code, incluidas áreas de proyecto, patrones de interacción y puntos de fricción |

96| `/install-github-app` | Instalar la aplicación Claude GitHub para un repositorio, con un paso opcional para configurar flujos de trabajo de [GitHub Actions](/es/github-actions) y secretos. Lo guía a través de la selección de un repositorio y la configuración de la integración |96| `/install-github-app` | Instalar la aplicación Claude GitHub para un repositorio, con un paso opcional para configurar flujos de trabajo de [GitHub Actions](/docs/es/github-actions) y secretos. Lo guía a través de la selección de un repositorio y la configuración de la integración |

97| `/install-slack-app` | Instalar la aplicación Claude Slack. Abre un navegador para completar el flujo OAuth |97| `/install-slack-app` | Instalar la aplicación Claude Slack. Abre un navegador para completar el flujo OAuth |

98| `/keybindings` | Abrir su archivo de [atajos de teclado](/es/keybindings) |98| `/keybindings` | Abrir su archivo de [atajos de teclado](/docs/es/keybindings) |

99| `/login` | Iniciar sesión en su cuenta de Anthropic |99| `/login` | Iniciar sesión en su cuenta de Anthropic |

100| `/logout` | Cerrar sesión de su cuenta de Anthropic |100| `/logout` | Cerrar sesión de su cuenta de Anthropic |

101| `/loop [interval] [prompt]` | **[Skill](/es/skills#bundled-skills).** Ejecutar un prompt repetidamente mientras la sesión permanece abierta. Omita el intervalo y Claude se autoajusta entre iteraciones. Omita el prompt y, [donde esté disponible](/es/scheduled-tasks#run-the-built-in-maintenance-prompt), Claude ejecuta una verificación de mantenimiento autónoma o el prompt en `.claude/loop.md`. Ejemplo: `/loop 5m check if the deploy finished`. Consulte [Ejecutar prompts en un horario](/es/scheduled-tasks). Alias: `/proactive` |101| `/loop [interval] [prompt]` | **[Skill](/docs/es/skills#bundled-skills).** Ejecutar un prompt repetidamente mientras la sesión permanece abierta. Omita el intervalo y Claude se autoajusta entre iteraciones. Omita el prompt y, [donde esté disponible](/docs/es/scheduled-tasks#run-the-built-in-maintenance-prompt), Claude ejecuta una verificación de mantenimiento autónoma o el prompt en `.claude/loop.md`. Ejemplo: `/loop 5m check if the deploy finished`. Consulte [Ejecutar prompts en un horario](/docs/es/scheduled-tasks). Alias: `/proactive` |

102| `/mcp [reconnect <server>\|enable\|disable [<server>\|all]]` | Administrar conexiones de servidores MCP y autenticación OAuth. Ejecute sin argumento para abrir la lista interactiva, pase `reconnect <server>` para reconectar un servidor desconectado, o pase `enable`/`disable` con un nombre de servidor o `all` para cambiar el estado de conexión sin abrir el diálogo. {/* min-version: 2.1.205 */}También disponible en modo no interactivo (`-p`), donde ejecutarlo sin argumento imprime un resumen de texto del estado del servidor en lugar de abrir la lista; requiere Claude Code v2.1.205 o posterior |102| `/mcp [reconnect <server>\|enable\|disable [<server>\|all]]` | Administrar conexiones de servidores MCP y autenticación OAuth. Ejecute sin argumento para abrir la lista interactiva, pase `reconnect <server>` para reconectar un servidor desconectado, o pase `enable`/`disable` con un nombre de servidor o `all` para cambiar el estado de conexión sin abrir el diálogo. {/* min-version: 2.1.205 */}También disponible en modo no interactivo (`-p`), donde ejecutarlo sin argumento imprime un resumen de texto del estado del servidor en lugar de abrir la lista; requiere Claude Code v2.1.205 o posterior |

103| `/memory` | Editar archivos de memoria `CLAUDE.md`, habilitar o deshabilitar [auto-memory](/es/memory#auto-memory) y ver entradas de auto-memory |103| `/memory` | Editar archivos de memoria `CLAUDE.md`, habilitar o deshabilitar [auto-memory](/docs/es/memory#auto-memory) y ver entradas de auto-memory |

104| `/mobile` | Mostrar código QR para descargar la aplicación móvil Claude. Alias: `/ios`, `/android` |104| `/mobile` | Mostrar código QR para descargar la aplicación móvil Claude. Alias: `/ios`, `/android` |

105| `/model [model]` | Cambiar el modelo de IA y guardarlo como su predeterminado para nuevas sesiones. Para modelos que lo admitan, use las flechas izquierda/derecha para [ajustar el nivel de esfuerzo](/es/model-config#adjust-effort-level). Sin un argumento, abre un selector; presione `s` en una fila para cambiar solo para la sesión actual. El selector pide confirmación cuando la conversación tiene salida anterior, ya que la siguiente respuesta relee el historial completo sin contexto en caché. Una vez confirmado, el cambio se aplica sin esperar a que se complete la respuesta actual. {/* min-version: 2.1.205 */}También disponible en modo no interactivo (`-p`) con un argumento de modelo en lugar del selector, donde se aplica solo a la sesión actual y no se guarda como su predeterminado; requiere Claude Code v2.1.205 o posterior |105| `/model [model]` | Cambiar el modelo de IA y guardarlo como su predeterminado para nuevas sesiones. Para modelos que lo admitan, use las flechas izquierda/derecha para [ajustar el nivel de esfuerzo](/docs/es/model-config#adjust-effort-level). Sin un argumento, abre un selector; presione `s` en una fila para cambiar solo para la sesión actual. El selector pide confirmación cuando la conversación tiene salida anterior, ya que la siguiente respuesta relee el historial completo sin contexto en caché. Una vez confirmado, el cambio se aplica sin esperar a que se complete la respuesta actual. {/* min-version: 2.1.205 */}También disponible en modo no interactivo (`-p`) con un argumento de modelo en lugar del selector, donde se aplica solo a la sesión actual y no se guarda como su predeterminado; requiere Claude Code v2.1.205 o posterior |

106| `/passes` | Compartir una semana gratuita de Claude Code con amigos. Solo visible si su cuenta es elegible |106| `/passes` | Compartir una semana gratuita de Claude Code con amigos. Solo visible si su cuenta es elegible |

107| `/permissions` | Administrar reglas de permitir, preguntar y denegar para permisos de herramientas. Abre un diálogo interactivo donde puede ver reglas por alcance, agregar o eliminar reglas, administrar directorios de trabajo y revisar [denegaciones automáticas recientes](/es/auto-mode-config#review-denials). Alias: `/allowed-tools` |107| `/permissions` | Administrar reglas de permitir, preguntar y denegar para permisos de herramientas. Abre un diálogo interactivo donde puede ver reglas por alcance, agregar o eliminar reglas, administrar directorios de trabajo y revisar [denegaciones automáticas recientes](/docs/es/auto-mode-config#review-denials). Alias: `/allowed-tools` |

108| `/plan [description]` | Entrar en Plan Mode directamente desde el prompt. Pase una descripción opcional para entrar en Plan Mode e inmediatamente comenzar con esa tarea, por ejemplo `/plan fix the auth bug` |108| `/plan [description]` | Entrar en Plan Mode directamente desde el prompt. Pase una descripción opcional para entrar en Plan Mode e inmediatamente comenzar con esa tarea, por ejemplo `/plan fix the auth bug` |

109| `/plugin [subcommand]` | Administrar [plugins](/es/plugins) de Claude Code. Ejecute sin argumento para abrir el menú de plugins, o pase un subcomando como `list`, `install`, `enable` o `disable` para actuar directamente |109| `/plugin [subcommand]` | Administrar [plugins](/docs/es/plugins) de Claude Code. Ejecute sin argumento para abrir el menú de plugins, o pase un subcomando como `list`, `install`, `enable` o `disable` para actuar directamente |

110| `/powerup` | Descubrir características de Claude Code a través de lecciones interactivas rápidas con demostraciones animadas |110| `/powerup` | Descubrir características de Claude Code a través de lecciones interactivas rápidas con demostraciones animadas |

111| `/pr-comments [PR]` | {/* max-version: 2.1.90 */}Eliminado en v2.1.91. Pida a Claude directamente que vea comentarios de solicitud de extracción en su lugar. En versiones anteriores, obtiene y muestra comentarios de una solicitud de extracción de GitHub; detecta automáticamente la PR para la rama actual, o pase una URL o número de PR. Requiere la CLI `gh` |111| `/pr-comments [PR]` | {/* max-version: 2.1.90 */}Eliminado en v2.1.91. Pida a Claude directamente que vea comentarios de solicitud de extracción en su lugar. En versiones anteriores, obtiene y muestra comentarios de una solicitud de extracción de GitHub; detecta automáticamente la PR para la rama actual, o pase una URL o número de PR. Requiere la CLI `gh` |

112| `/privacy-settings` | Ver y actualizar su configuración de privacidad. Solo disponible para suscriptores de planes Pro y Max |112| `/privacy-settings` | Ver y actualizar su configuración de privacidad. Solo disponible para suscriptores de planes Pro y Max |

113| `/radio` | Abrir Claude FM lo-fi radio en su navegador. Imprime la URL de transmisión cuando no hay navegador disponible. No disponible en Amazon Bedrock, Google Cloud's Agent Platform, Microsoft Foundry o Claude Platform en AWS |113| `/radio` | Abrir Claude FM lo-fi radio en su navegador. Imprime la URL de transmisión cuando no hay navegador disponible. No disponible en Amazon Bedrock, Google Cloud's Agent Platform, Microsoft Foundry o Claude Platform en AWS |

114| `/recap` | Generar un resumen de una línea de la sesión actual bajo demanda. Consulte [Session recap](/es/interactive-mode#session-recap) para el resumen automático que aparece después de que ha estado ausente |114| `/recap` | Generar un resumen de una línea de la sesión actual bajo demanda. Consulte [Session recap](/docs/es/interactive-mode#session-recap) para el resumen automático que aparece después de que ha estado ausente |

115| `/release-notes` | Ver el registro de cambios en un selector de versión interactivo. Seleccione una versión específica para ver sus notas de lanzamiento, o elija mostrar todas las versiones. {/* min-version: 2.1.208 */}Las notas aparecen en su transcripción sin entrar en la conversación que Claude ve. Antes de v2.1.208, las notas vistas entraban en la conversación, incluido el registro de cambios completo cuando se muestran todas las versiones |115| `/release-notes` | Ver el registro de cambios en un selector de versión interactivo. Seleccione una versión específica para ver sus notas de lanzamiento, o elija mostrar todas las versiones. {/* min-version: 2.1.208 */}Las notas aparecen en su transcripción sin entrar en la conversación que Claude ve. Antes de v2.1.208, las notas vistas entraban en la conversación, incluido el registro de cambios completo cuando se muestran todas las versiones |

116| `/reload-plugins [--force]` | Recargar todos los [plugins](/es/plugins) activos para aplicar cambios pendientes sin reiniciar. Informa qué se cargó para cada componente recargado e indica cualquier error de carga. Cuando la recarga cambiaría qué herramientas MCP se cargan e invalidaría la caché de prompts, el comando advierte y omite a menos que pase `--force` |116| `/reload-plugins [--force]` | Recargar todos los [plugins](/docs/es/plugins) activos para aplicar cambios pendientes sin reiniciar. Informa qué se cargó para cada componente recargado e indica cualquier error de carga. Cuando la recarga cambiaría qué herramientas MCP se cargan e invalidaría la caché de prompts, el comando advierte y omite a menos que pase `--force` |

117| `/reload-skills` | {/* min-version: 2.1.152 */}Volver a escanear directorios de [skill](/es/skills) y comandos para que los skills agregados o cambiados en el disco durante la sesión estén disponibles sin reiniciar. Informa cuántos skills están disponibles y cuántos se agregaron o eliminaron. Agregado en v2.1.152 |117| `/reload-skills` | {/* min-version: 2.1.152 */}Volver a escanear directorios de [skill](/docs/es/skills) y comandos para que los skills agregados o cambiados en el disco durante la sesión estén disponibles sin reiniciar. Informa cuántos skills están disponibles y cuántos se agregaron o eliminaron. Agregado en v2.1.152 |

118| `/remote-control` | Hacer que esta sesión esté disponible para [Remote Control](/es/remote-control) desde claude.ai. {/* min-version: 2.1.206 */}Ejecutarlo mientras está desconectado imprime que Remote Control requiere una suscripción a claude.ai y le dice cómo iniciar sesión; antes de v2.1.206 reportaba `Unknown command: /remote-control`. Alias: `/rc` |118| `/remote-control` | Hacer que esta sesión esté disponible para [Remote Control](/docs/es/remote-control) desde claude.ai. {/* min-version: 2.1.206 */}Ejecutarlo mientras está desconectado imprime que Remote Control requiere una suscripción a claude.ai y le dice cómo iniciar sesión; antes de v2.1.206 reportaba `Unknown command: /remote-control`. Alias: `/rc` |

119| `/remote-env` | Elegir el entorno predeterminado para [agentes en la nube](/es/claude-code-on-the-web#configure-your-environment) |119| `/remote-env` | Elegir el entorno predeterminado para [agentes en la nube](/docs/es/claude-code-on-the-web#configure-your-environment) |

120| `/rename [name]` | Renombrar la sesión actual y mostrar el nombre en la barra de solicitud. Sin un nombre, genera automáticamente uno a partir del historial de conversación. {/* min-version: 2.1.205 */}También disponible en modo no interactivo (`-p`); requiere Claude Code v2.1.205 o posterior |120| `/rename [name]` | Renombrar la sesión actual y mostrar el nombre en la barra de solicitud. Sin un nombre, genera automáticamente uno a partir del historial de conversación. {/* min-version: 2.1.205 */}También disponible en modo no interactivo (`-p`); requiere Claude Code v2.1.205 o posterior |

121| `/resume [session]` | Reanudar una conversación por ID o nombre, o abrir el selector de sesión. A partir de v2.1.144, [las sesiones de fondo](/es/agent-view) aparecen en el selector marcadas con `bg`; una que aún se está ejecutando no se puede reanudar aquí, así que conéctese a ella desde `claude agents` o deténgala allí primero. Alias: `/continue` |121| `/resume [session]` | Reanudar una conversación por ID o nombre, o abrir el selector de sesión. A partir de v2.1.144, [las sesiones de fondo](/docs/es/agent-view) aparecen en el selector marcadas con `bg`; una que aún se está ejecutando no se puede reanudar aquí, así que conéctese a ella desde `claude agents` o deténgala allí primero. Alias: `/continue` |

122| `/review [PR]` | {/* min-version: 2.1.202 */}Ejecutar una revisión rápida de un solo paso y de solo lectura de una solicitud de extracción de GitHub por número. Sin argumento, enumera las PR abiertas para elegir; el texto después del número de PR se convierte en instrucciones de revisión adicionales. De v2.1.186 a v2.1.201, `/review` ejecutó el mismo motor multiagente que `/code-review medium`. Para una revisión multiagente en un nivel de esfuerzo elegido, use [`/code-review <level> <pr#>`](/es/code-review#review-a-diff-locally); para una revisión basada en la nube, consulte [`/code-review ultra`](/es/ultrareview) |122| `/review [PR]` | {/* min-version: 2.1.202 */}Ejecutar una revisión rápida de un solo paso y de solo lectura de una solicitud de extracción de GitHub por número. Sin argumento, enumera las PR abiertas para elegir; el texto después del número de PR se convierte en instrucciones de revisión adicionales. De v2.1.186 a v2.1.201, `/review` ejecutó el mismo motor multiagente que `/code-review medium`. Para una revisión multiagente en un nivel de esfuerzo elegido, use [`/code-review <level> <pr#>`](/docs/es/code-review#review-a-diff-locally); para una revisión basada en la nube, consulte [`/code-review ultra`](/docs/es/ultrareview) |

123| `/rewind` | Rebobinar la conversación y/o código a un punto anterior, o resumir desde un mensaje seleccionado. Consulte [checkpointing](/es/checkpointing). Alias: `/checkpoint`, `/undo` |123| `/rewind` | Rebobinar la conversación y/o código a un punto anterior, o resumir desde un mensaje seleccionado. Consulte [checkpointing](/docs/es/checkpointing). Alias: `/checkpoint`, `/undo` |

124| `/run` | **[Skill](/es/skills#bundled-skills).** Lanzar y conducir la aplicación de su proyecto para ver un cambio funcionando en la aplicación en ejecución, no solo en pruebas. Consulte [Ejecutar y verificar su aplicación](/es/skills#run-and-verify-your-app). {/* min-version: 2.1.145 */}Requiere Claude Code v2.1.145 o posterior |124| `/run` | **[Skill](/docs/es/skills#bundled-skills).** Lanzar y conducir la aplicación de su proyecto para ver un cambio funcionando en la aplicación en ejecución, no solo en pruebas. Consulte [Ejecutar y verificar su aplicación](/docs/es/skills#run-and-verify-your-app). {/* min-version: 2.1.145 */}Requiere Claude Code v2.1.145 o posterior |

125| `/run-skill-generator` | **[Skill](/es/skills#bundled-skills).** Enseñar a `/run` y `/verify` cómo construir, lanzar y conducir la aplicación de su proyecto desde un entorno limpio escribiendo un [skill](/es/skills#run-and-verify-your-app) por proyecto. {/* min-version: 2.1.145 */}Requiere Claude Code v2.1.145 o posterior |125| `/run-skill-generator` | **[Skill](/docs/es/skills#bundled-skills).** Enseñar a `/run` y `/verify` cómo construir, lanzar y conducir la aplicación de su proyecto desde un entorno limpio escribiendo un [skill](/docs/es/skills#run-and-verify-your-app) por proyecto. {/* min-version: 2.1.145 */}Requiere Claude Code v2.1.145 o posterior |

126| `/sandbox` | Alternar [sandbox mode](/es/sandboxing). Disponible solo en plataformas compatibles |126| `/sandbox` | Alternar [sandbox mode](/docs/es/sandboxing). Disponible solo en plataformas compatibles |

127| `/schedule [description]` | Crear, actualizar, listar o ejecutar [routines](/es/routines), que se ejecutan en infraestructura en la nube administrada por Anthropic. Claude lo guía a través de la configuración de manera conversacional. Alias: `/routines` |127| `/schedule [description]` | Crear, actualizar, listar o ejecutar [routines](/docs/es/routines), que se ejecutan en infraestructura en la nube administrada por Anthropic. Claude lo guía a través de la configuración de manera conversacional. Alias: `/routines` |

128| `/scroll-speed` | Ajustar la [velocidad de desplazamiento](/es/fullscreen#mouse-wheel-scrolling) de la rueda del ratón de forma interactiva, con una regla que puede desplazar mientras el diálogo está abierto para obtener una vista previa del cambio. Disponible solo en [renderizado de pantalla completa](/es/fullscreen) y no en el terminal del IDE JetBrains |128| `/scroll-speed` | Ajustar la [velocidad de desplazamiento](/docs/es/fullscreen#mouse-wheel-scrolling) de la rueda del ratón de forma interactiva, con una regla que puede desplazar mientras el diálogo está abierto para obtener una vista previa del cambio. Disponible solo en [renderizado de pantalla completa](/docs/es/fullscreen) y no en el terminal del IDE JetBrains |

129| `/security-review` | Analizar cambios pendientes en la rama actual para detectar vulnerabilidades de seguridad. Revisa el diff de git e identifica riesgos como inyección, problemas de autenticación y exposición de datos |129| `/security-review` | Analizar cambios pendientes en la rama actual para detectar vulnerabilidades de seguridad. Revisa el diff de git e identifica riesgos como inyección, problemas de autenticación y exposición de datos |

130| `/setup-bedrock` | Configurar autenticación de [Amazon Bedrock](/es/amazon-bedrock), región y fijaciones de modelo a través de un asistente interactivo. Solo visible cuando se establece `CLAUDE_CODE_USE_BEDROCK=1`. Los usuarios de Bedrock por primera vez también pueden acceder a este asistente desde la pantalla de inicio de sesión |130| `/setup-bedrock` | Configurar autenticación de [Amazon Bedrock](/docs/es/amazon-bedrock), región y fijaciones de modelo a través de un asistente interactivo. Solo visible cuando se establece `CLAUDE_CODE_USE_BEDROCK=1`. Los usuarios de Bedrock por primera vez también pueden acceder a este asistente desde la pantalla de inicio de sesión |

131| `/setup-vertex` | Configurar autenticación de [Google Cloud's Agent Platform](/es/google-vertex-ai), proyecto, región y fijaciones de modelo a través de un asistente interactivo. Solo visible cuando se establece `CLAUDE_CODE_USE_VERTEX=1`. Los usuarios de Google Cloud's Agent Platform por primera vez también pueden acceder a este asistente desde la pantalla de inicio de sesión |131| `/setup-vertex` | Configurar autenticación de [Google Cloud's Agent Platform](/docs/es/google-vertex-ai), proyecto, región y fijaciones de modelo a través de un asistente interactivo. Solo visible cuando se establece `CLAUDE_CODE_USE_VERTEX=1`. Los usuarios de Google Cloud's Agent Platform por primera vez también pueden acceder a este asistente desde la pantalla de inicio de sesión |

132| `/simplify [target]` | {/* min-version: 2.1.154 */}**[Skill](/es/skills#bundled-skills).** Revisar el código cambiado para detectar oportunidades de limpieza y aplicar las correcciones. Cuatro [agentes](/es/sub-agents) de revisión se ejecutan en paralelo, cubriendo reutilización de ayudantes existentes, simplificación, eficiencia y si el cambio se encuentra en el nivel correcto de abstracción. A partir de v2.1.154, la revisión no busca errores de corrección. Use `/code-review` para encontrar errores. En versiones anteriores `/simplify` es equivalente a `/code-review --fix`. Pase una ruta o referencia de PR para revisar un objetivo específico |132| `/simplify [target]` | {/* min-version: 2.1.154 */}**[Skill](/docs/es/skills#bundled-skills).** Revisar el código cambiado para detectar oportunidades de limpieza y aplicar las correcciones. Cuatro [agentes](/docs/es/sub-agents) de revisión se ejecutan en paralelo, cubriendo reutilización de ayudantes existentes, simplificación, eficiencia y si el cambio se encuentra en el nivel correcto de abstracción. A partir de v2.1.154, la revisión no busca errores de corrección. Use `/code-review` para encontrar errores. En versiones anteriores `/simplify` es equivalente a `/code-review --fix`. Pase una ruta o referencia de PR para revisar un objetivo específico |

133| `/skills` | Listar [skills](/es/skills) disponibles. {/* min-version: 2.1.121 */}A partir de v2.1.121, escriba para filtrar la lista por nombre. Presione `t` para ordenar por recuento de tokens. Presione `Space` para [ocultar un skill de Claude o del menú `/`](/es/skills#override-skill-visibility-from-settings), luego `Enter` para guardar |133| `/skills` | Listar [skills](/docs/es/skills) disponibles. {/* min-version: 2.1.121 */}A partir de v2.1.121, escriba para filtrar la lista por nombre. Presione `t` para ordenar por recuento de tokens. Presione `Space` para [ocultar un skill de Claude o del menú `/`](/docs/es/skills#override-skill-visibility-from-settings), luego `Enter` para guardar |

134| `/stats` | Alias para `/usage`. Se abre en la pestaña Stats |134| `/stats` | Alias para `/usage`. Se abre en la pestaña Stats |

135| `/status` | Abrir la interfaz de Settings (pestaña Status) que muestra versión, modelo, cuenta y conectividad. Funciona mientras Claude está respondiendo |135| `/status` | Abrir la interfaz de Settings (pestaña Status) que muestra versión, modelo, cuenta y conectividad. Funciona mientras Claude está respondiendo |

136| `/statusline` | Configurar la [status line](/es/statusline) de Claude Code. Describa lo que desea, o ejecute sin argumentos para auto-configurar desde su símbolo del sistema de shell |136| `/statusline` | Configurar la [status line](/docs/es/statusline) de Claude Code. Describa lo que desea, o ejecute sin argumentos para auto-configurar desde su símbolo del sistema de shell |

137| `/stickers` | Pedir pegatinas de Claude Code |137| `/stickers` | Pedir pegatinas de Claude Code |

138| `/stop` | Detener la [sesión de fondo](/es/agent-view) actual. Solo disponible mientras está conectado a una sesión de fondo; la transcripción y cualquier worktree se conservan. Para desconectar sin detener, use `/exit` o presione `←` |138| `/stop` | Detener la [sesión de fondo](/docs/es/agent-view) actual. Solo disponible mientras está conectado a una sesión de fondo; la transcripción y cualquier worktree se conservan. Para desconectar sin detener, use `/exit` o presione `←` |

139| `/tasks` | Ver y administrar trabajo en segundo plano en la sesión actual, incluidos subagentes que han terminado. También disponible como `/bashes` |139| `/tasks` | Ver y administrar trabajo en segundo plano en la sesión actual, incluidos subagentes que han terminado. También disponible como `/bashes` |

140| `/team-onboarding` | Generar una guía de incorporación de equipo a partir del historial de uso de Claude Code. Claude analiza sus sesiones, comandos y uso de servidores MCP de los últimos 30 días y produce una guía de markdown que un compañero de equipo puede pegar como primer mensaje para configurarse rápidamente. Para suscriptores de claude.ai en planes Pro, Max, Team y Enterprise, también devuelve un enlace de compartición que los compañeros de equipo pueden abrir directamente en Claude Code |140| `/team-onboarding` | Generar una guía de incorporación de equipo a partir del historial de uso de Claude Code. Claude analiza sus sesiones, comandos y uso de servidores MCP de los últimos 30 días y produce una guía de markdown que un compañero de equipo puede pegar como primer mensaje para configurarse rápidamente. Para suscriptores de claude.ai en planes Pro, Max, Team y Enterprise, también devuelve un enlace de compartición que los compañeros de equipo pueden abrir directamente en Claude Code |

141| `/teleport` | Extraer una sesión de [Claude Code en la web](/es/claude-code-on-the-web#from-web-to-terminal) en esta terminal: abre un selector, luego obtiene la rama y la conversación. También disponible como `/tp`. Requiere una suscripción a claude.ai |141| `/teleport` | Extraer una sesión de [Claude Code en la web](/docs/es/claude-code-on-the-web#from-web-to-terminal) en esta terminal: abre un selector, luego obtiene la rama y la conversación. También disponible como `/tp`. Requiere una suscripción a claude.ai |

142| `/terminal-setup` | Configurar atajos de teclado de terminal para Shift+Enter y otros accesos directos. Solo visible en terminales que lo necesitan, como VS Code, Cursor, Devin Desktop, Alacritty o Zed |142| `/terminal-setup` | Configurar atajos de teclado de terminal para Shift+Enter y otros accesos directos. Solo visible en terminales que lo necesitan, como VS Code, Cursor, Devin Desktop, Alacritty o Zed |

143| `/theme` | Cambiar el tema de color. Incluye una opción `auto` que sigue el modo oscuro o claro de su terminal, variantes claras y oscuras, temas accesibles para daltónicos (daltónicos), temas ANSI que utilizan la paleta de colores de su terminal, y cualquier [tema personalizado](/es/terminal-config#create-a-custom-theme) de `~/.claude/themes/` o plugins. Seleccione **New custom theme…** para crear uno |143| `/theme` | Cambiar el tema de color. Incluye una opción `auto` que sigue el modo oscuro o claro de su terminal, variantes claras y oscuras, temas accesibles para daltónicos (daltónicos), temas ANSI que utilizan la paleta de colores de su terminal, y cualquier [tema personalizado](/docs/es/terminal-config#create-a-custom-theme) de `~/.claude/themes/` o plugins. Seleccione **New custom theme…** para crear uno |

144| `/tui [default\|fullscreen]` | Establecer el renderizador de interfaz de usuario de terminal y reiniciar en él con su conversación intacta. `fullscreen` habilita el [renderizador de pantalla alternativa sin parpadeo](/es/fullscreen). Sin un argumento, imprime el renderizador activo |144| `/tui [default\|fullscreen]` | Establecer el renderizador de interfaz de usuario de terminal y reiniciar en él con su conversación intacta. `fullscreen` habilita el [renderizador de pantalla alternativa sin parpadeo](/docs/es/fullscreen). Sin un argumento, imprime el renderizador activo |

145| `/ultraplan <prompt>` | Redactar un plan en una sesión de [ultraplan](/es/ultraplan), revisarlo en su navegador, luego ejecutarlo de forma remota o enviarlo de vuelta a su terminal |145| `/ultraplan <prompt>` | Redactar un plan en una sesión de [ultraplan](/docs/es/ultraplan), revisarlo en su navegador, luego ejecutarlo de forma remota o enviarlo de vuelta a su terminal |

146| `/ultrareview [PR]` | Ejecutar una revisión de código profunda y multiagente en una sandbox en la nube con [ultrareview](/es/ultrareview). La invocación preferida ahora es `/code-review ultra`, y `/ultrareview` permanece como un alias. Incluye 3 ejecuciones gratuitas en Pro y Max, luego requiere [créditos de uso](https://support.claude.com/en/articles/12429409-extra-usage-for-paid-claude-plans) |146| `/ultrareview [PR]` | Ejecutar una revisión de código profunda y multiagente en una sandbox en la nube con [ultrareview](/docs/es/ultrareview). La invocación preferida ahora es `/code-review ultra`, y `/ultrareview` permanece como un alias. Incluye 3 ejecuciones gratuitas en Pro y Max, luego requiere [créditos de uso](https://support.claude.com/en/articles/12429409-extra-usage-for-paid-claude-plans) |

147| `/upgrade` | Abrir la página de actualización en su navegador para cambiar a un nivel de plan superior. Cuando el navegador no se abre, el comando muestra un prompt de inicio de sesión sin imprimir la URL |147| `/upgrade` | Abrir la página de actualización en su navegador para cambiar a un nivel de plan superior. Cuando el navegador no se abre, el comando muestra un prompt de inicio de sesión sin imprimir la URL |

148| `/usage` | Mostrar costo de sesión, límites de uso del plan y estadísticas de actividad. En un plan Pro, Max, Team o Enterprise, incluye un desglose del uso por skill, subagente, plugin y servidor MCP. Consulte la [guía de seguimiento de costos](/es/costs#using-the-%2Fusage-command) para detalles. `/cost` y `/stats` son alias |148| `/usage` | Mostrar costo de sesión, límites de uso del plan y estadísticas de actividad. En un plan Pro, Max, Team o Enterprise, incluye un desglose del uso por skill, subagente, plugin y servidor MCP. Consulte la [guía de seguimiento de costos](/docs/es/costs#using-the-%2Fusage-command) para detalles. `/cost` y `/stats` son alias |

149| `/usage-credits` | Configurar créditos de uso para continuar trabajando cuando se alcanzan los límites. En planes Pro y Max, abre un [diálogo en la CLI](/es/costs#set-a-spend-limit-on-pro-and-max) para comprar créditos de uso, establecer un límite de gasto mensual y configurar recarga automática; en versiones de Claude Code anteriores a v2.1.207 y en otros planes, abre la página de facturación de créditos de uso en su navegador, excepto que los miembros de Team y Enterprise sin acceso de facturación envían una solicitud de créditos de uso a su administrador desde la CLI. {/* min-version: 2.1.205 */}Cuando no se puede abrir ningún navegador, por ejemplo a través de SSH, el comando imprime la URL para visitar en su lugar; esto requiere Claude Code v2.1.205 o posterior, y las versiones anteriores no mostraban nada en ese caso. Anteriormente `/extra-usage` |149| `/usage-credits` | Configurar créditos de uso para continuar trabajando cuando se alcanzan los límites. En planes Pro y Max, abre un [diálogo en la CLI](/docs/es/costs#set-a-spend-limit-on-pro-and-max) para comprar créditos de uso, establecer un límite de gasto mensual y configurar recarga automática; en versiones de Claude Code anteriores a v2.1.207 y en otros planes, abre la página de facturación de créditos de uso en su navegador, excepto que los miembros de Team y Enterprise sin acceso de facturación envían una solicitud de créditos de uso a su administrador desde la CLI. {/* min-version: 2.1.205 */}Cuando no se puede abrir ningún navegador, por ejemplo a través de SSH, el comando imprime la URL para visitar en su lugar; esto requiere Claude Code v2.1.205 o posterior, y las versiones anteriores no mostraban nada en ese caso. Anteriormente `/extra-usage` |

150| `/verify` | **[Skill](/es/skills#bundled-skills).** Confirmar que un cambio de código hace lo que debe haciendo construir la aplicación de su proyecto, ejecutándola y observando el resultado, en lugar de confiar en pruebas o verificaciones de tipo. Consulte [Ejecutar y verificar su aplicación](/es/skills#run-and-verify-your-app). {/* min-version: 2.1.145 */}Requiere Claude Code v2.1.145 o posterior |150| `/verify` | **[Skill](/docs/es/skills#bundled-skills).** Confirmar que un cambio de código hace lo que debe haciendo construir la aplicación de su proyecto, ejecutándola y observando el resultado, en lugar de confiar en pruebas o verificaciones de tipo. Consulte [Ejecutar y verificar su aplicación](/docs/es/skills#run-and-verify-your-app). {/* min-version: 2.1.145 */}Requiere Claude Code v2.1.145 o posterior |

151| `/vim` | {/* max-version: 2.1.91 */}Eliminado en v2.1.92. Para alternar entre modos de edición Vim y Normal, use `/config` → Editor mode |151| `/vim` | {/* max-version: 2.1.91 */}Eliminado en v2.1.92. Para alternar entre modos de edición Vim y Normal, use `/config` → Editor mode |

152| `/voice [hold\|tap\|off]` | Alternar [voice dictation](/es/voice-dictation), o habilitarlo en un modo específico. Requiere una cuenta Claude.ai |152| `/voice [hold\|tap\|off]` | Alternar [voice dictation](/docs/es/voice-dictation), o habilitarlo en un modo específico. Requiere una cuenta Claude.ai |

153| `/web-setup` | Conectar su cuenta de GitHub a [Claude Code en la web](/es/web-quickstart#connect-from-your-terminal) usando sus credenciales locales de `gh` CLI. `/schedule` solicita esto automáticamente si GitHub no está conectado |153| `/web-setup` | Conectar su cuenta de GitHub a [Claude Code en la web](/docs/es/web-quickstart#connect-from-your-terminal) usando sus credenciales locales de `gh` CLI. `/schedule` solicita esto automáticamente si GitHub no está conectado |

154| `/workflows` | Abrir la vista de progreso de [workflow](/es/workflows#watch-the-run) para observar, pausar, reanudar o guardar workflows en ejecución y completados |154| `/workflows` | Abrir la vista de progreso de [workflow](/docs/es/workflows#watch-the-run) para observar, pausar, reanudar o guardar workflows en ejecución y completados |

155 155 

156<h2 id="mcp-prompts">156<h2 id="mcp-prompts">

157 MCP prompts157 MCP prompts

158</h2>158</h2>

159 159 

160Los servidores MCP pueden exponer prompts que aparecen como comandos. Estos utilizan el formato `/mcp__<server>__<prompt>` y se descubren dinámicamente desde servidores conectados. Consulte [MCP prompts](/es/mcp#use-mcp-prompts-as-commands) para obtener detalles.160Los servidores MCP pueden exponer prompts que aparecen como comandos. Estos utilizan el formato `/mcp__<server>__<prompt>` y se descubren dinámicamente desde servidores conectados. Consulte [MCP prompts](/docs/es/mcp#use-mcp-prompts-as-commands) para obtener detalles.

161 161 

162<h2 id="see-also">162<h2 id="see-also">

163 Ver también163 Ver también

164</h2>164</h2>

165 165 

166* [Skills](/es/skills): crear sus propios comandos166* [Skills](/docs/es/skills): crear sus propios comandos

167* [Modo interactivo](/es/interactive-mode): atajos de teclado, modo Vim e historial de comandos167* [Modo interactivo](/docs/es/interactive-mode): atajos de teclado, modo Vim e historial de comandos

168* [Referencia de CLI](/es/cli-reference): banderas de tiempo de lanzamiento168* [Referencia de CLI](/docs/es/cli-reference): banderas de tiempo de lanzamiento

hooks.md +64 −64

Details

7> Referencia para eventos de hooks de Claude Code, esquema de configuración, formatos de entrada/salida JSON, códigos de salida, hooks asincronos, hooks HTTP, hooks de prompt y hooks de herramientas MCP.7> Referencia para eventos de hooks de Claude Code, esquema de configuración, formatos de entrada/salida JSON, códigos de salida, hooks asincronos, hooks HTTP, hooks de prompt y hooks de herramientas MCP.

8 8 

9<Tip>9<Tip>

10 Para una guía de inicio rápido con ejemplos, consulte [Automatizar acciones con hooks](/es/hooks-guide).10 Para una guía de inicio rápido con ejemplos, consulte [Automatizar acciones con hooks](/docs/es/hooks-guide).

11</Tip>11</Tip>

12 12 

13Los hooks son comandos de shell definidos por el usuario, puntos finales HTTP o prompts de LLM que se ejecutan automáticamente en puntos específicos del ciclo de vida de Claude Code. Utilice esta referencia para buscar esquemas de eventos, opciones de configuración, formatos de entrada/salida JSON y características avanzadas como hooks asincronos, hooks HTTP y hooks de herramientas MCP. Si está configurando hooks por primera vez, comience con la [guía](/es/hooks-guide) en su lugar.13Los hooks son comandos de shell definidos por el usuario, puntos finales HTTP o prompts de LLM que se ejecutan automáticamente en puntos específicos del ciclo de vida de Claude Code. Utilice esta referencia para buscar esquemas de eventos, opciones de configuración, formatos de entrada/salida JSON y características avanzadas como hooks asincronos, hooks HTTP y hooks de herramientas MCP. Si está configurando hooks por primera vez, comience con la [guía](/docs/es/hooks-guide) en su lugar.

14 14 

15<h2 id="hook-lifecycle">15<h2 id="hook-lifecycle">

16 Ciclo de vida de los hooks16 Ciclo de vida de los hooks


52| `TaskCompleted` | When a task is being marked as completed |52| `TaskCompleted` | When a task is being marked as completed |

53| `Stop` | When Claude finishes responding |53| `Stop` | When Claude finishes responding |

54| `StopFailure` | When the turn ends due to an API error. Output and exit code are ignored |54| `StopFailure` | When the turn ends due to an API error. Output and exit code are ignored |

55| `TeammateIdle` | When an [agent team](/en/agent-teams) teammate is about to go idle |55| `TeammateIdle` | When an [agent team](/docs/en/agent-teams) teammate is about to go idle |

56| `InstructionsLoaded` | When a CLAUDE.md or `.claude/rules/*.md` file is loaded into context. Fires at session start and when files are lazily loaded during a session |56| `InstructionsLoaded` | When a CLAUDE.md or `.claude/rules/*.md` file is loaded into context. Fires at session start and when files are lazily loaded during a session |

57| `ConfigChange` | When a configuration file changes during a session |57| `ConfigChange` | When a configuration file changes during a session |

58| `CwdChanged` | When the working directory changes, for example when Claude executes a `cd` command. Useful for reactive environment management with tools like direnv |58| `CwdChanged` | When the working directory changes, for example when Claude executes a `cd` command. Useful for reactive environment management with tools like direnv |

59| `FileChanged` | When a watched file changes on disk. The `matcher` field specifies which filenames to watch |59| `FileChanged` | When a watched file changes on disk. The `matcher` field specifies which filenames to watch |

60| `WorktreeCreate` | When a worktree is being created via `--worktree` or `isolation: "worktree"`. Replaces default git behavior |60| `WorktreeCreate` | When a worktree is being created via `--worktree`, `isolation: "worktree"`, or for a background session. Replaces default git behavior |

61| `WorktreeRemove` | When a worktree is being removed, either at session exit or when a subagent finishes |61| `WorktreeRemove` | When a worktree is being removed at session exit, when a subagent finishes, or when you delete a background session |

62| `PreCompact` | Before context compaction |62| `PreCompact` | Before context compaction |

63| `PostCompact` | After context compaction completes |63| `PostCompact` | After context compaction completes |

64| `Elicitation` | When an MCP server requests user input during a tool call |64| `Elicitation` | When an MCP server requests user input during a tool call |


147 }147 }

148 ```148 ```

149 149 

150 Si el comando hubiera sido una variante más segura de `rm` como `rm file.txt`, el script habría alcanzado `exit 0` en su lugar. El código de salida 0 sin salida significa que el hook no tiene decisión que reportar, por lo que la llamada a la herramienta continúa a través del [flujo de permisos](/es/permissions) normal. El hook puede denegar la llamada, pero permanecer en silencio no la aprueba.150 Si el comando hubiera sido una variante más segura de `rm` como `rm file.txt`, el script habría alcanzado `exit 0` en su lugar. El código de salida 0 sin salida significa que el hook no tiene decisión que reportar, por lo que la llamada a la herramienta continúa a través del [flujo de permisos](/docs/es/permissions) normal. El hook puede denegar la llamada, pero permanecer en silencio no la aprueba.

151 </Step>151 </Step>

152 152 

153 <Step title="Claude Code actúa sobre el resultado">153 <Step title="Claude Code actúa sobre el resultado">


185| `.claude/settings.json` | Proyecto único | Sí, puede ser confirmado en el repositorio |185| `.claude/settings.json` | Proyecto único | Sí, puede ser confirmado en el repositorio |

186| `.claude/settings.local.json` | Proyecto único | No, ignorado por git cuando Claude Code lo crea |186| `.claude/settings.local.json` | Proyecto único | No, ignorado por git cuando Claude Code lo crea |

187| Configuración de política administrada | Toda la organización | Sí, controlado por administrador |187| Configuración de política administrada | Toda la organización | Sí, controlado por administrador |

188| [Plugin](/es/plugins) `hooks/hooks.json` | Cuando el plugin está habilitado | Sí, incluido con el plugin |188| [Plugin](/docs/es/plugins) `hooks/hooks.json` | Cuando el plugin está habilitado | Sí, incluido con el plugin |

189| [Skill](/es/skills) o [agent](/es/sub-agents) frontmatter | Mientras el componente está activo | Sí, definido en el archivo del componente |189| [Skill](/docs/es/skills) o [agent](/docs/es/sub-agents) frontmatter | Mientras el componente está activo | Sí, definido en el archivo del componente |

190 190 

191Para obtener detalles sobre la resolución de archivos de configuración, consulte [settings](/es/settings).191Para obtener detalles sobre la resolución de archivos de configuración, consulte [settings](/docs/es/settings).

192 192 

193Los administradores empresariales pueden usar `allowManagedHooksOnly` para bloquear hooks de usuario, proyecto y plugin. Los hooks de plugins habilitados forzosamente en la configuración administrada `enabledPlugins` están exentos, por lo que los administradores pueden distribuir hooks verificados a través de un mercado de la organización. Consulte [Hook configuration](/es/settings#hook-configuration).193Los administradores empresariales pueden usar `allowManagedHooksOnly` para bloquear hooks de usuario, proyecto y plugin. Los hooks de plugins habilitados forzosamente en la configuración administrada `enabledPlugins` están exentos, por lo que los administradores pueden distribuir hooks verificados a través de un mercado de la organización. Consulte [Hook configuration](/docs/es/settings#hook-configuration).

194 194 

195<h3 id="matcher-patterns">195<h3 id="matcher-patterns">

196 Patrones de matcher196 Patrones de matcher


260 260 

261`UserPromptSubmit`, `PostToolBatch`, `Stop`, `TeammateIdle`, `TaskCreated`, `TaskCompleted`, `WorktreeCreate`, `WorktreeRemove`, `MessageDisplay` y `CwdChanged` no admiten matchers y siempre se activan en cada ocurrencia. Si agrega un campo `matcher` a estos eventos, se ignora silenciosamente.261`UserPromptSubmit`, `PostToolBatch`, `Stop`, `TeammateIdle`, `TaskCreated`, `TaskCompleted`, `WorktreeCreate`, `WorktreeRemove`, `MessageDisplay` y `CwdChanged` no admiten matchers y siempre se activan en cada ocurrencia. Si agrega un campo `matcher` a estos eventos, se ignora silenciosamente.

262 262 

263Para eventos de herramientas, puede filtrar más estrechamente estableciendo el campo [`if`](#common-fields) en controladores de hooks individuales. `if` utiliza [sintaxis de regla de permiso](/es/permissions) para coincidir con el nombre de la herramienta y los argumentos juntos, por lo que `"Bash(git *)"` se ejecuta cuando cualquier subcomando de la entrada de Bash coincide con `git *` y `"Edit(*.ts)"` se ejecuta solo para archivos TypeScript.263Para eventos de herramientas, puede filtrar más estrechamente estableciendo el campo [`if`](#common-fields) en controladores de hooks individuales. `if` utiliza [sintaxis de regla de permiso](/docs/es/permissions) para coincidir con el nombre de la herramienta y los argumentos juntos, por lo que `"Bash(git *)"` se ejecuta cuando cualquier subcomando de la entrada de Bash coincide con `git *` y `"Edit(*.ts)"` se ejecuta solo para archivos TypeScript.

264 264 

265<h4 id="match-mcp-tools">265<h4 id="match-mcp-tools">

266 Coincidir herramientas MCP266 Coincidir herramientas MCP

267</h4>267</h4>

268 268 

269Las herramientas del servidor [MCP](/es/mcp) aparecen como herramientas normales en eventos de herramientas (`PreToolUse`, `PostToolUse`, `PostToolUseFailure`, `PermissionRequest`, `PermissionDenied`), por lo que puede hacerlas coincidir de la misma manera que cualquier otro nombre de herramienta.269Las herramientas del servidor [MCP](/docs/es/mcp) aparecen como herramientas normales en eventos de herramientas (`PreToolUse`, `PostToolUse`, `PostToolUseFailure`, `PermissionRequest`, `PermissionDenied`), por lo que puede hacerlas coincidir de la misma manera que cualquier otro nombre de herramienta.

270 270 

271Las herramientas MCP siguen el patrón de nomenclatura `mcp__<server>__<tool>`, por ejemplo:271Las herramientas MCP siguen el patrón de nomenclatura `mcp__<server>__<tool>`, por ejemplo:

272 272 


282 282 

283Los guiones en el conjunto de coincidencia exacta requieren Claude Code v2.1.195 o posterior. En versiones anteriores, un prefijo con guiones simple como `mcp__brave-search` se evalúa como una expresión regular sin anclar y coincide con cada herramienta de ese servidor. La forma `mcp__brave-search__.*` funciona en cada versión.283Los guiones en el conjunto de coincidencia exacta requieren Claude Code v2.1.195 o posterior. En versiones anteriores, un prefijo con guiones simple como `mcp__brave-search` se evalúa como una expresión regular sin anclar y coincide con cada herramienta de ese servidor. La forma `mcp__brave-search__.*` funciona en cada versión.

284 284 

285Las herramientas de un [servidor MCP incluido en plugin](/es/mcp#plugin-provided-mcp-servers) utilizan un segmento de servidor con alcance que incluye el nombre del plugin: `mcp__plugin_<plugin-name>_<server-name>__<tool>`. Un matcher escrito contra la clave del servidor simple nunca se activa para estas herramientas. Para un plugin llamado `my-plugin` que incluye un servidor bajo la clave `db`, una herramienta `query` aparece como `mcp__plugin_my-plugin_db__query`, por lo que el matcher para cada herramienta de ese servidor es `mcp__plugin_my-plugin_db__.*`. Use el mismo nombre de herramienta con alcance en el campo [`if`](#common-fields) de un controlador. Consulte [Plugin-provided MCP servers](/es/mcp#plugin-provided-mcp-servers) para ver cómo se construye el nombre con alcance.285Las herramientas de un [servidor MCP incluido en plugin](/docs/es/mcp#plugin-provided-mcp-servers) utilizan un segmento de servidor con alcance que incluye el nombre del plugin: `mcp__plugin_<plugin-name>_<server-name>__<tool>`. Un matcher escrito contra la clave del servidor simple nunca se activa para estas herramientas. Para un plugin llamado `my-plugin` que incluye un servidor bajo la clave `db`, una herramienta `query` aparece como `mcp__plugin_my-plugin_db__query`, por lo que el matcher para cada herramienta de ese servidor es `mcp__plugin_my-plugin_db__.*`. Use el mismo nombre de herramienta con alcance en el campo [`if`](#common-fields) de un controlador. Consulte [Plugin-provided MCP servers](/docs/es/mcp#plugin-provided-mcp-servers) para ver cómo se construye el nombre con alcance.

286 286 

287Este ejemplo registra todas las operaciones del servidor de memoria y valida operaciones de escritura de cualquier servidor MCP:287Este ejemplo registra todas las operaciones del servidor de memoria y valida operaciones de escritura de cualquier servidor MCP:

288 288 


321 321 

322* **[Command hooks](#command-hook-fields)** (`type: "command"`): ejecutan un comando de shell. Su script recibe la [entrada JSON](#hook-input-and-output) del evento en stdin y comunica resultados a través de códigos de salida y stdout.322* **[Command hooks](#command-hook-fields)** (`type: "command"`): ejecutan un comando de shell. Su script recibe la [entrada JSON](#hook-input-and-output) del evento en stdin y comunica resultados a través de códigos de salida y stdout.

323* **[HTTP hooks](#http-hook-fields)** (`type: "http"`): envían la entrada JSON del evento como una solicitud HTTP POST a una URL. El punto final comunica resultados a través del cuerpo de la respuesta usando el mismo [formato de salida JSON](#json-output) que los hooks de comando.323* **[HTTP hooks](#http-hook-fields)** (`type: "http"`): envían la entrada JSON del evento como una solicitud HTTP POST a una URL. El punto final comunica resultados a través del cuerpo de la respuesta usando el mismo [formato de salida JSON](#json-output) que los hooks de comando.

324* **[MCP tool hooks](#mcp-tool-hook-fields)** (`type: "mcp_tool"`): llaman a una herramienta en un servidor [MCP](/es/mcp) ya conectado. La salida de texto de la herramienta se trata como stdout de hook de comando.324* **[MCP tool hooks](#mcp-tool-hook-fields)** (`type: "mcp_tool"`): llaman a una herramienta en un servidor [MCP](/docs/es/mcp) ya conectado. La salida de texto de la herramienta se trata como stdout de hook de comando.

325* **[Prompt hooks](#prompt-and-agent-hook-fields)** (`type: "prompt"`): envían un prompt a un modelo Claude para evaluación de un solo turno. El modelo devuelve una decisión sí/no como JSON. Consulte [Prompt-based hooks](#prompt-based-hooks).325* **[Prompt hooks](#prompt-and-agent-hook-fields)** (`type: "prompt"`): envían un prompt a un modelo Claude para evaluación de un solo turno. El modelo devuelve una decisión sí/no como JSON. Consulte [Prompt-based hooks](#prompt-based-hooks).

326* **[Agent hooks](#prompt-and-agent-hook-fields)** (`type: "agent"`): generan un subagente que puede usar herramientas como Read, Grep y Glob para verificar condiciones antes de devolver una decisión. Los hooks de agente son experimentales y pueden cambiar. Consulte [Agent-based hooks](#agent-based-hooks).326* **[Agent hooks](#prompt-and-agent-hook-fields)** (`type: "agent"`): generan un subagente que puede usar herramientas como Read, Grep y Glob para verificar condiciones antes de devolver una decisión. Los hooks de agente son experimentales y pueden cambiar. Consulte [Agent-based hooks](#agent-based-hooks).

327 327 

328Todos los hooks coincidentes se ejecutan en paralelo, y los controladores idénticos se deduplicarán automáticamente. Los hooks de comando se deduplicarán por cadena de comando y `args`, y los hooks HTTP se deduplicarán por URL.328Todos los hooks coincidentes se ejecutan en paralelo, y los controladores idénticos se deduplicarán automáticamente. Los hooks de comando se deduplicarán por cadena de comando y `args`, y los hooks HTTP se deduplicarán por URL.

329 329 

330Los controladores se ejecutan en el directorio actual con el entorno de Claude Code. La variable de entorno `$CLAUDE_CODE_REMOTE` se establece en `"true"` en entornos web remotos y no se establece en la CLI local. {/* min-version: 2.1.199 */}A partir de v2.1.199, [`$CLAUDE_CODE_BRIDGE_SESSION_ID`](/es/env-vars) se establece en el ID de sesión de [Remote Control](/es/remote-control) mientras la sesión local tiene una conexión Remote Control activa.330Los controladores se ejecutan en el directorio actual con el entorno de Claude Code. La variable de entorno `$CLAUDE_CODE_REMOTE` se establece en `"true"` en entornos web remotos y no se establece en la CLI local. {/* min-version: 2.1.199 */}A partir de v2.1.199, [`$CLAUDE_CODE_BRIDGE_SESSION_ID`](/docs/es/env-vars) se establece en el ID de sesión de [Remote Control](/docs/es/remote-control) mientras la sesión local tiene una conexión Remote Control activa.

331 331 

332<h4 id="common-fields">332<h4 id="common-fields">

333 Campos comunes333 Campos comunes


338| Campo | Requerido | Descripción |338| Campo | Requerido | Descripción |

339| :-------------- | :-------- | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |339| :-------------- | :-------- | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

340| `type` | sí | `"command"`, `"http"`, `"mcp_tool"`, `"prompt"` o `"agent"` |340| `type` | sí | `"command"`, `"http"`, `"mcp_tool"`, `"prompt"` o `"agent"` |

341| `if` | no | Sintaxis de regla de permiso para filtrar cuándo se ejecuta este hook, como `"Bash(git *)"` o `"Edit(*.ts)"`. El hook solo se genera si la llamada a herramienta coincide con el patrón. Consulte la tabla [Bash matching](#bash-if-matching) a continuación para ver cómo los patrones de Bash se evalúan contra subcomandos, `$()` y backticks. Solo se evalúa en eventos de herramientas: `PreToolUse`, `PostToolUse`, `PostToolUseFailure`, `PermissionRequest` y `PermissionDenied`. En otros eventos, un hook con `if` establecido nunca se ejecuta. Utiliza la misma sintaxis que [reglas de permiso](/es/permissions) |341| `if` | no | Sintaxis de regla de permiso para filtrar cuándo se ejecuta este hook, como `"Bash(git *)"` o `"Edit(*.ts)"`. El hook solo se genera si la llamada a herramienta coincide con el patrón. Consulte la tabla [Bash matching](#bash-if-matching) a continuación para ver cómo los patrones de Bash se evalúan contra subcomandos, `$()` y backticks. Solo se evalúa en eventos de herramientas: `PreToolUse`, `PostToolUse`, `PostToolUseFailure`, `PermissionRequest` y `PermissionDenied`. En otros eventos, un hook con `if` establecido nunca se ejecuta. Utiliza la misma sintaxis que [reglas de permiso](/docs/es/permissions) |

342| `timeout` | no | Segundos antes de cancelar. Valores predeterminados: 600 para `command`, `http` y `mcp_tool`; 30 para `prompt`; 60 para `agent`. [`UserPromptSubmit`](#userpromptsubmit) reduce el valor predeterminado de `command`, `http` y `mcp_tool` a 30, y [`MessageDisplay`](#messagedisplay) lo reduce a 10 |342| `timeout` | no | Segundos antes de cancelar. Valores predeterminados: 600 para `command`, `http` y `mcp_tool`; 30 para `prompt`; 60 para `agent`. [`UserPromptSubmit`](#userpromptsubmit) reduce el valor predeterminado de `command`, `http` y `mcp_tool` a 30, y [`MessageDisplay`](#messagedisplay) lo reduce a 10 |

343| `statusMessage` | no | Mensaje de spinner personalizado mostrado mientras se ejecuta el hook |343| `statusMessage` | no | Mensaje de spinner personalizado mostrado mientras se ejecuta el hook |

344| `once` | no | Si es `true`, se ejecuta una vez por sesión y luego se elimina. Solo se honra para hooks declarados en [skill frontmatter](#hooks-in-skills-and-agents); se ignora en archivos de configuración y frontmatter de agente |344| `once` | no | Si es `true`, se ejecuta una vez por sesión y luego se elimina. Solo se honra para hooks declarados en [skill frontmatter](#hooks-in-skills-and-agents); se ignora en archivos de configuración y frontmatter de agente |


355| `Bash(rm *)` | `echo $(date)` | no | ningún subcomando coincide con `rm *` |355| `Bash(rm *)` | `echo $(date)` | no | ningún subcomando coincide con `rm *` |

356| `Bash(git push *)` | `echo $(date)` | sí | los patrones que especifican más que el nombre del comando ejecutan el hook de todas formas en `$()`, backticks o `$VAR` |356| `Bash(git push *)` | `echo $(date)` | sí | los patrones que especifican más que el nombre del comando ejecutan el hook de todas formas en `$()`, backticks o `$VAR` |

357 357 

358El filtro también falla abierto, ejecutando su hook independientemente del patrón, cuando el comando Bash no se puede analizar. Debido a que el filtro `if` es de mejor esfuerzo, use el [sistema de permisos](/es/permissions) en lugar de un hook para aplicar un permiso o denegación duro.358El filtro también falla abierto, ejecutando su hook independientemente del patrón, cuando el comando Bash no se puede analizar. Debido a que el filtro `if` es de mejor esfuerzo, use el [sistema de permisos](/docs/es/permissions) en lugar de un hook para aplicar un permiso o denegación duro.

359 359 

360<h4 id="command-hook-fields">360<h4 id="command-hook-fields">

361 Campos de comando hook361 Campos de comando hook


408 408 

409Ambas formas admiten los mismos [marcadores de posición de ruta](#reference-scripts-by-path), y ambas los exportan como las variables de entorno `CLAUDE_PROJECT_DIR`, `CLAUDE_PLUGIN_ROOT` y `CLAUDE_PLUGIN_DATA` en el proceso generado, por lo que un script puede leer `process.env.CLAUDE_PLUGIN_ROOT` independientemente de cómo se haya lanzado.409Ambas formas admiten los mismos [marcadores de posición de ruta](#reference-scripts-by-path), y ambas los exportan como las variables de entorno `CLAUDE_PROJECT_DIR`, `CLAUDE_PLUGIN_ROOT` y `CLAUDE_PLUGIN_DATA` en el proceso generado, por lo que un script puede leer `process.env.CLAUDE_PLUGIN_ROOT` independientemente de cómo se haya lanzado.

410 410 

411Los hooks de plugin además sustituyen valores [`${user_config.*}`](/es/plugins-reference#user-configuration), solo en exec form: el valor se sustituye en `command` y en cada elemento `args` como una cadena simple, por lo que ningún shell lo vuelve a analizar.411Los hooks de plugin además sustituyen valores [`${user_config.*}`](/docs/es/plugins-reference#user-configuration), solo en exec form: el valor se sustituye en `command` y en cada elemento `args` como una cadena simple, por lo que ningún shell lo vuelve a analizar.

412 412 

413Un hook de plugin en shell form cuyo `command` hace referencia a `${user_config.*}` falla con un [error](/es/errors#plugin-command-references-user-config) en lugar de ejecutarse. Para usar un valor de opción de un hook en shell form, lea la variable de entorno `$CLAUDE_PLUGIN_OPTION_<KEY>`, como `$CLAUDE_PLUGIN_OPTION_WEBHOOK_URL` para una opción `webhook_url`, o establezca `args` para cambiar el hook a exec form. Antes de v2.1.207, los comandos de hook de plugin en shell form también sustituían `${user_config.*}`.413Un hook de plugin en shell form cuyo `command` hace referencia a `${user_config.*}` falla con un [error](/docs/es/errors#plugin-command-references-user-config) en lugar de ejecutarse. Para usar un valor de opción de un hook en shell form, lea la variable de entorno `$CLAUDE_PLUGIN_OPTION_<KEY>`, como `$CLAUDE_PLUGIN_OPTION_WEBHOOK_URL` para una opción `webhook_url`, o establezca `args` para cambiar el hook a exec form. Antes de v2.1.207, los comandos de hook de plugin en shell form también sustituían `${user_config.*}`.

414 414 

415<Note>415<Note>

416 En exec form, `command` es solo el nombre o ruta del ejecutable. Si `command` es un nombre simple sin separador de ruta y contiene espacios junto con `args`, Claude Code registra una advertencia porque la generación fallará: no hay ejecutable llamado `node script.js`. Mueva los tokens adicionales a `args`. Las rutas absolutas con espacios, como `C:\Program Files\nodejs\node.exe`, son un ejecutable válido único y no desencadenan la advertencia.416 En exec form, `command` es solo el nombre o ruta del ejecutable. Si `command` es un nombre simple sin separador de ruta y contiene espacios junto con `args`, Claude Code registra una advertencia porque la generación fallará: no hay ejecutable llamado `node script.js`. Mueva los tokens adicionales a `args`. Las rutas absolutas con espacios, como `C:\Program Files\nodejs\node.exe`, son un ejecutable válido único y no desencadenan la advertencia.


465 465 

466| Campo | Requerido | Descripción |466| Campo | Requerido | Descripción |

467| :------- | :-------- | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |467| :------- | :-------- | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

468| `server` | sí | Nombre de un servidor MCP configurado. Para un [servidor incluido en plugin](/es/mcp#plugin-provided-mcp-servers), este es el nombre con alcance `plugin:<plugin-name>:<server-name>`, como `plugin:my-plugin:db`, no la clave del servidor simple. El servidor ya debe estar conectado; el hook nunca desencadena un flujo OAuth o de conexión |468| `server` | sí | Nombre de un servidor MCP configurado. Para un [servidor incluido en plugin](/docs/es/mcp#plugin-provided-mcp-servers), este es el nombre con alcance `plugin:<plugin-name>:<server-name>`, como `plugin:my-plugin:db`, no la clave del servidor simple. El servidor ya debe estar conectado; el hook nunca desencadena un flujo OAuth o de conexión |

469| `tool` | sí | Nombre de la herramienta a llamar en ese servidor |469| `tool` | sí | Nombre de la herramienta a llamar en ese servidor |

470| `input` | no | Argumentos pasados a la herramienta. Los valores de cadena admiten sustitución `${path}` de la [entrada JSON](#hook-input-and-output) del hook, como `"${tool_input.file_path}"` |470| `input` | no | Argumentos pasados a la herramienta. Los valores de cadena admiten sustitución `${path}` de la [entrada JSON](#hook-input-and-output) del hook, como `"${tool_input.file_path}"` |

471 471 


512 512 

513Use estos marcadores de posición para referenciar scripts de hooks relativos a la raíz del proyecto o plugin, independientemente del directorio de trabajo cuando se ejecuta el hook:513Use estos marcadores de posición para referenciar scripts de hooks relativos a la raíz del proyecto o plugin, independientemente del directorio de trabajo cuando se ejecuta el hook:

514 514 

515* `${CLAUDE_PROJECT_DIR}`: la raíz del proyecto. Claude Code también establece esta variable en el entorno de [servidores MCP stdio](/es/mcp#option-3-add-a-local-stdio-server) y servidores LSP de plugin.515* `${CLAUDE_PROJECT_DIR}`: la raíz del proyecto. Claude Code también establece esta variable en el entorno de [servidores MCP stdio](/docs/es/mcp#option-3-add-a-local-stdio-server) y servidores LSP de plugin.

516* `${CLAUDE_PLUGIN_ROOT}`: el directorio de instalación del plugin, para scripts incluidos con un [plugin](/es/plugins). Cambia en cada actualización de plugin.516* `${CLAUDE_PLUGIN_ROOT}`: el directorio de instalación del plugin, para scripts incluidos con un [plugin](/docs/es/plugins). Cambia en cada actualización de plugin.

517* `${CLAUDE_PLUGIN_DATA}`: el [directorio de datos persistentes](/es/plugins-reference#persistent-data-directory) del plugin, para dependencias y estado que deben sobrevivir a las actualizaciones de plugin.517* `${CLAUDE_PLUGIN_DATA}`: el [directorio de datos persistentes](/docs/es/plugins-reference#persistent-data-directory) del plugin, para dependencias y estado que deben sobrevivir a las actualizaciones de plugin.

518 518 

519Prefiera [exec form](#exec-form-and-shell-form) para cualquier hook que haga referencia a un marcador de posición de ruta. Exec form pasa cada elemento `args` como un argumento sin tokenización de shell, por lo que las rutas con espacios o caracteres especiales no necesitan comillas. En shell form, envuelva cada marcador de posición entre comillas dobles.519Prefiera [exec form](#exec-form-and-shell-form) para cualquier hook que haga referencia a un marcador de posición de ruta. Exec form pasa cada elemento `args` como un argumento sin tokenización de shell, por lo que las rutas con espacios o caracteres especiales no necesitan comillas. En shell form, envuelva cada marcador de posición entre comillas dobles.

520 520 


568 }568 }

569 ```569 ```

570 570 

571 Consulte la [referencia de componentes de plugin](/es/plugins-reference#hooks) para obtener detalles sobre cómo crear hooks de plugin.571 Consulte la [referencia de componentes de plugin](/docs/es/plugins-reference#hooks) para obtener detalles sobre cómo crear hooks de plugin.

572 </Tab>572 </Tab>

573</Tabs>573</Tabs>

574 574 


576 Hooks en skills y agentes576 Hooks en skills y agentes

577</h3>577</h3>

578 578 

579Además de archivos de configuración y plugins, los hooks pueden definirse directamente en [skills](/es/skills) y [subagentes](/es/sub-agents) usando frontmatter. Estos hooks se limitan al ciclo de vida del componente y solo se ejecutan cuando ese componente está activo.579Además de archivos de configuración y plugins, los hooks pueden definirse directamente en [skills](/docs/es/skills) y [subagentes](/docs/es/sub-agents) usando frontmatter. Estos hooks se limitan al ciclo de vida del componente y solo se ejecutan cuando ese componente está activo.

580 580 

581Se admiten todos los eventos de hook. Para subagentes, los hooks `Stop` se convierten automáticamente a `SubagentStop` ya que ese es el evento que se activa cuando un subagente se completa.581Se admiten todos los eventos de hook. Para subagentes, los hooks `Stop` se convierten automáticamente a `SubagentStop` ya que ese es el evento que se activa cuando un subagente se completa.

582 582 


645| Campo | Descripción |645| Campo | Descripción |

646| :---------------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |646| :---------------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

647| `session_id` | Identificador de sesión actual |647| `session_id` | Identificador de sesión actual |

648| `prompt_id` | UUID que identifica el prompt del usuario que se está procesando actualmente. Coincide con el [atributo `prompt.id` en eventos de OpenTelemetry](/es/monitoring-usage#event-correlation-attributes), para que pueda correlacionar la salida del hook con la telemetría de un único prompt. Ausente hasta la primera entrada del usuario. {/* min-version: 2.1.196 */}Requiere Claude Code v2.1.196 o posterior |648| `prompt_id` | UUID que identifica el prompt del usuario que se está procesando actualmente. Coincide con el [atributo `prompt.id` en eventos de OpenTelemetry](/docs/es/monitoring-usage#event-correlation-attributes), para que pueda correlacionar la salida del hook con la telemetría de un único prompt. Ausente hasta la primera entrada del usuario. {/* min-version: 2.1.196 */}Requiere Claude Code v2.1.196 o posterior |

649| `transcript_path` | Ruta al JSON de conversación. El archivo de transcripción se escribe de forma asincrónica y puede rezagarse con respecto a la conversación en memoria, por lo que es posible que aún no incluya los mensajes más recientes del turno actual cuando se activa un hook. Los hooks que necesitan el texto del asistente final del turno actual deben usar `last_assistant_message` en [Stop](#stop) y [SubagentStop](#subagentstop) en lugar de leer la transcripción |649| `transcript_path` | Ruta al JSON de conversación. El archivo de transcripción se escribe de forma asincrónica y puede rezagarse con respecto a la conversación en memoria, por lo que es posible que aún no incluya los mensajes más recientes del turno actual cuando se activa un hook. Los hooks que necesitan el texto del asistente final del turno actual deben usar `last_assistant_message` en [Stop](#stop) y [SubagentStop](#subagentstop) en lugar de leer la transcripción |

650| `cwd` | Directorio de trabajo actual cuando se invoca el hook |650| `cwd` | Directorio de trabajo actual cuando se invoca el hook |

651| `permission_mode` | [Modo de permiso](/es/permissions#permission-modes) actual: `"default"`, `"plan"`, `"acceptEdits"`, `"auto"`, `"dontAsk"` o `"bypassPermissions"`. El modo etiquetado como **Manual** llega como `"default"`, nunca como `"manual"`, por lo que los scripts que coinciden con `"default"` siguen funcionando. No todos los eventos reciben este campo. Consulte el ejemplo JSON en cada sección [hook event](#hook-events) |651| `permission_mode` | [Modo de permiso](/docs/es/permissions#permission-modes) actual: `"default"`, `"plan"`, `"acceptEdits"`, `"auto"`, `"dontAsk"` o `"bypassPermissions"`. El modo etiquetado como **Manual** llega como `"default"`, nunca como `"manual"`, por lo que los scripts que coinciden con `"default"` siguen funcionando. No todos los eventos reciben este campo. Consulte el ejemplo JSON en cada sección [hook event](#hook-events) |

652| `effort` | Objeto con un campo `level` que contiene el [nivel de esfuerzo](/es/model-config#adjust-effort-level) activo para el turno: `"low"`, `"medium"`, `"high"`, `"xhigh"` o `"max"`. Si el esfuerzo solicitado del modelo excede lo que el modelo actual admite, este es el nivel degradado que el modelo realmente utilizó. Ultracode no es un nivel distinto y se reporta como `"xhigh"`. El objeto coincide con el campo `effort` de la [línea de estado](/es/statusline#available-data). Presente para eventos que se activan dentro de un contexto de uso de herramienta, como `PreToolUse`, `PostToolUse`, `Stop` y `SubagentStop`, cuando el modelo actual admite el parámetro de esfuerzo. El nivel también está disponible para comandos de hook y la herramienta Bash como la variable de entorno `$CLAUDE_EFFORT`. |652| `effort` | Objeto con un campo `level` que contiene el [nivel de esfuerzo](/docs/es/model-config#adjust-effort-level) activo para el turno: `"low"`, `"medium"`, `"high"`, `"xhigh"` o `"max"`. Si el esfuerzo solicitado del modelo excede lo que el modelo actual admite, este es el nivel degradado que el modelo realmente utilizó. Ultracode no es un nivel distinto y se reporta como `"xhigh"`. El objeto coincide con el campo `effort` de la [línea de estado](/docs/es/statusline#available-data). Presente para eventos que se activan dentro de un contexto de uso de herramienta, como `PreToolUse`, `PostToolUse`, `Stop` y `SubagentStop`, cuando el modelo actual admite el parámetro de esfuerzo. El nivel también está disponible para comandos de hook y la herramienta Bash como la variable de entorno `$CLAUDE_EFFORT`. |

653| `hook_event_name` | Nombre del evento que se activó |653| `hook_event_name` | Nombre del evento que se activó |

654 654 

655Cuando se ejecuta con `--agent` o dentro de un subagente, se incluyen dos campos adicionales:655Cuando se ejecuta con `--agent` o dentro de un subagente, se incluyen dos campos adicionales:


657| Campo | Descripción |657| Campo | Descripción |

658| :----------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |658| :----------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

659| `agent_id` | Identificador único para el subagente. Presente solo cuando el hook se activa dentro de una llamada de subagente. Use esto para distinguir llamadas de hook de subagente de llamadas de hilo principal. |659| `agent_id` | Identificador único para el subagente. Presente solo cuando el hook se activa dentro de una llamada de subagente. Use esto para distinguir llamadas de hook de subagente de llamadas de hilo principal. |

660| `agent_type` | Nombre del agente (por ejemplo, `"Explore"` o `"security-reviewer"`). Presente cuando la sesión usa `--agent` o el hook se activa dentro de un subagente. Para subagentes, el tipo del subagente tiene precedencia sobre el valor `--agent` de la sesión. Para [subagentes personalizados](/es/sub-agents), este es el campo `name` del frontmatter del agente, no el nombre del archivo. Para subagentes enviados por un [plugin](/es/plugins), este es el identificador con alcance de plugin como `my-plugin:reviewer`, no el nombre de frontmatter desnudo. Consulte [SubagentStart](#subagentstart) para saber cómo escribir un matcher contra un nombre con alcance de plugin. |660| `agent_type` | Nombre del agente (por ejemplo, `"Explore"` o `"security-reviewer"`). Presente cuando la sesión usa `--agent` o el hook se activa dentro de un subagente. Para subagentes, el tipo del subagente tiene precedencia sobre el valor `--agent` de la sesión. Para [subagentes personalizados](/docs/es/sub-agents), este es el campo `name` del frontmatter del agente, no el nombre del archivo. Para subagentes enviados por un [plugin](/docs/es/plugins), este es el identificador con alcance de plugin como `my-plugin:reviewer`, no el nombre de frontmatter desnudo. Consulte [SubagentStart](#subagentstart) para saber cómo escribir un matcher contra un nombre con alcance de plugin. |

661 661 

662Solo los hooks [`SessionStart`](#sessionstart) pueden recibir un campo `model`, y no se garantiza que esté presente. No hay variable de entorno `$CLAUDE_MODEL`. Un proceso de hook hereda el entorno principal, por lo que puede leer `$ANTHROPIC_MODEL` si lo establece en su shell, pero ese valor no cambia cuando cambia de modelos con `/model` durante una sesión. Un conjunto de variables no se hereda: Claude Code [elimina variables exportadoras `OTEL_*` de cada subproceso que genera](/es/monitoring-usage#administrator-configuration), incluyendo hooks.662Solo los hooks [`SessionStart`](#sessionstart) pueden recibir un campo `model`, y no se garantiza que esté presente. No hay variable de entorno `$CLAUDE_MODEL`. Un proceso de hook hereda el entorno principal, por lo que puede leer `$ANTHROPIC_MODEL` si lo establece en su shell, pero ese valor no cambia cuando cambia de modelos con `/model` durante una sesión. Un conjunto de variables no se hereda: Claude Code [elimina variables exportadoras `OTEL_*` de cada subproceso que genera](/docs/es/monitoring-usage#administrator-configuration), incluyendo hooks.

663 663 

664Por ejemplo, un hook `PreToolUse` para un comando Bash recibe esto en stdin:664Por ejemplo, un hook `PreToolUse` para un comando Bash recibe esto en stdin:

665 665 


778 Debe elegir un enfoque por hook, no ambos: use códigos de salida solos para señalizar, o salga 0 e imprima JSON para control estructurado. Claude Code solo procesa JSON en exit 0. Si sale 2, cualquier JSON se ignora.778 Debe elegir un enfoque por hook, no ambos: use códigos de salida solos para señalizar, o salga 0 e imprima JSON para control estructurado. Claude Code solo procesa JSON en exit 0. Si sale 2, cualquier JSON se ignora.

779</Note>779</Note>

780 780 

781El stdout de su hook debe contener solo el objeto JSON. Si su perfil de shell imprime texto al inicio, puede interferir con el análisis JSON. Consulte [JSON validation failed](/es/hooks-guide#json-validation-failed) en la guía de solución de problemas.781El stdout de su hook debe contener solo el objeto JSON. Si su perfil de shell imprime texto al inicio, puede interferir con el análisis JSON. Consulte [JSON validation failed](/docs/es/hooks-guide#json-validation-failed) en la guía de solución de problemas.

782 782 

783Las cadenas de salida de hook, incluyendo `additionalContext`, `systemMessage` y stdout plano, están limitadas a 10.000 caracteres. La salida que excede este límite se guarda en un archivo y se reemplaza con una vista previa y ruta de archivo, de la misma manera que se manejan los resultados de herramientas grandes.783Las cadenas de salida de hook, incluyendo `additionalContext`, `systemMessage` y stdout plano, están limitadas a 10.000 caracteres. La salida que excede este límite se guarda en un archivo y se reemplaza con una vista previa y ruta de archivo, de la misma manera que se manejan los resultados de herramientas grandes.

784 784 


870* **Reglas de proyecto condicionales**: qué comando de prueba se aplica al archivo que acaba de editar, qué directorios son de solo lectura en este worktree870* **Reglas de proyecto condicionales**: qué comando de prueba se aplica al archivo que acaba de editar, qué directorios son de solo lectura en este worktree

871* **Datos externos**: problemas abiertos asignados a usted, resultados recientes de CI, contenido obtenido de un servicio interno871* **Datos externos**: problemas abiertos asignados a usted, resultados recientes de CI, contenido obtenido de un servicio interno

872 872 

873Para instrucciones que nunca cambian, prefiera [CLAUDE.md](/es/memory). Se carga sin ejecutar un script y es el lugar estándar para convenciones de proyecto estáticas.873Para instrucciones que nunca cambian, prefiera [CLAUDE.md](/docs/es/memory). Se carga sin ejecutar un script y es el lugar estándar para convenciones de proyecto estáticas.

874 874 

875Escriba el texto como declaraciones factuales en lugar de instrucciones de sistema imperativas. Frases como "El destino de implementación es producción" o "Este repositorio usa `bun test`" se leen como información del proyecto. El texto enmarcado como comandos de sistema fuera de banda puede activar las defensas de inyección de prompts de Claude, lo que hace que Claude le muestre el texto en lugar de tratarlo como contexto.875Escriba el texto como declaraciones factuales en lugar de instrucciones de sistema imperativas. Frases como "El destino de implementación es producción" o "Este repositorio usa `bun test`" se leen como información del proyecto. El texto enmarcado como comandos de sistema fuera de banda puede activar las defensas de inyección de prompts de Claude, lo que hace que Claude le muestre el texto en lugar de tratarlo como contexto.

876 876 


952 </Tab>952 </Tab>

953</Tabs>953</Tabs>

954 954 

955Para ejemplos extendidos incluyendo validación de comandos Bash, filtrado de prompts y scripts de aprobación automática, consulte [What you can automate](/es/hooks-guide#what-you-can-automate) en la guía y la [implementación de referencia del validador de comandos Bash](https://github.com/anthropics/claude-code/blob/main/examples/hooks/bash_command_validator_example.py).955Para ejemplos extendidos incluyendo validación de comandos Bash, filtrado de prompts y scripts de aprobación automática, consulte [What you can automate](/docs/es/hooks-guide#what-you-can-automate) en la guía y la [implementación de referencia del validador de comandos Bash](https://github.com/anthropics/claude-code/blob/main/examples/hooks/bash_command_validator_example.py).

956 956 

957<h2 id="hook-events">957<h2 id="hook-events">

958 Eventos de hook958 Eventos de hook


964 SessionStart964 SessionStart

965</h3>965</h3>

966 966 

967Se ejecuta cuando Claude Code inicia una nueva sesión o reanuda una sesión existente. Útil para cargar contexto de desarrollo como problemas existentes o cambios recientes en su base de código, o configurar variables de entorno. Para contexto estático que no requiere un script, use [CLAUDE.md](/es/memory) en su lugar.967Se ejecuta cuando Claude Code inicia una nueva sesión o reanuda una sesión existente. Útil para cargar contexto de desarrollo como problemas existentes o cambios recientes en su base de código, o configurar variables de entorno. Para contexto estático que no requiere un script, use [CLAUDE.md](/docs/es/memory) en su lugar.

968 968 

969SessionStart se ejecuta en cada sesión, así que mantenga estos hooks rápidos. Solo se admiten hooks `type: "command"` y `type: "mcp_tool"`.969SessionStart se ejecuta en cada sesión, así que mantenga estos hooks rápidos. Solo se admiten hooks `type: "command"` y `type: "mcp_tool"`.

970 970 


1010| Campo | Descripción |1010| Campo | Descripción |

1011| :------------------- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |1011| :------------------- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

1012| `additionalContext` | Cadena agregada al contexto de Claude al inicio de la conversación, antes del primer prompt. Consulte [Agregar contexto para Claude](#add-context-for-claude) para saber cómo se entrega el texto y qué poner en él |1012| `additionalContext` | Cadena agregada al contexto de Claude al inicio de la conversación, antes del primer prompt. Consulte [Agregar contexto para Claude](#add-context-for-claude) para saber cómo se entrega el texto y qué poner en él |

1013| `initialUserMessage` | Cadena utilizada como el primer mensaje de usuario de la sesión. Se aplica en [modo no interactivo](/es/headless) con la bandera `-p`, donde se convierte en el primer turno incluso si no se proporciona ningún prompt. Si se proporciona un prompt, sigue como el siguiente turno. A diferencia de `additionalContext`, que se adjunta a un turno existente, esto crea el turno |1013| `initialUserMessage` | Cadena utilizada como el primer mensaje de usuario de la sesión. Se aplica en [modo no interactivo](/docs/es/headless) con la bandera `-p`, donde se convierte en el primer turno incluso si no se proporciona ningún prompt. Si se proporciona un prompt, sigue como el siguiente turno. A diferencia de `additionalContext`, que se adjunta a un turno existente, esto crea el turno |

1014| `sessionTitle` | Establece el título de la sesión, con el mismo efecto que `/rename`. Use para nombrar sesiones automáticamente desde la carpeta de lanzamiento, rama de git o nombre de worktree. Se aplica solo cuando `source` es `"startup"` o `"resume"`; se ignora en `"clear"` y `"compact"` |1014| `sessionTitle` | Establece el título de la sesión, con el mismo efecto que `/rename`. Use para nombrar sesiones automáticamente desde la carpeta de lanzamiento, rama de git o nombre de worktree. Se aplica solo cuando `source` es `"startup"` o `"resume"`; se ignora en `"clear"` y `"compact"` |

1015| `watchPaths` | Array de rutas absolutas para monitorear eventos [FileChanged](#filechanged) durante esta sesión |1015| `watchPaths` | Array de rutas absolutas para monitorear eventos [FileChanged](#filechanged) durante esta sesión |

1016| `reloadSkills` | Booleano. Cuando es `true`, Claude Code vuelve a escanear los directorios [skill](/es/skills) y de comandos después de que se completen los hooks SessionStart, por lo que las skills que instaló el hook están disponibles en la misma sesión, comenzando con el primer prompt |1016| `reloadSkills` | Booleano. Cuando es `true`, Claude Code vuelve a escanear los directorios [skill](/docs/es/skills) y de comandos después de que se completen los hooks SessionStart, por lo que las skills que instaló el hook están disponibles en la misma sesión, comenzando con el primer prompt |

1017 1017 

1018```json theme={null}1018```json theme={null}

1019{1019{


1087 Setup1087 Setup

1088</h3>1088</h3>

1089 1089 

1090Se activa solo cuando inicia Claude Code con `--init-only`, o con `--init` o `--maintenance` en [modo no interactivo](/es/headless) con la bandera `-p`. No se activa en el inicio normal. Úselo para instalación de dependencias única o limpieza programada que desencadena explícitamente desde CI o scripts, separado del inicio de sesión normal. Para inicialización por sesión, use [SessionStart](#sessionstart) en su lugar.1090Se activa solo cuando inicia Claude Code con `--init-only`, o con `--init` o `--maintenance` en [modo no interactivo](/docs/es/headless) con la bandera `-p`. No se activa en el inicio normal. Úselo para instalación de dependencias única o limpieza programada que desencadena explícitamente desde CI o scripts, separado del inicio de sesión normal. Para inicialización por sesión, use [SessionStart](#sessionstart) en su lugar.

1091 1091 

1092El valor del matcher corresponde a la bandera CLI que desencadenó el hook:1092El valor del matcher corresponde a la bandera CLI que desencadenó el hook:

1093 1093 


1098 1098 

1099`--init-only` ejecuta hooks Setup y hooks SessionStart con el matcher `startup`, luego sale sin iniciar una conversación. `--init` y `--maintenance` activan hooks Setup solo cuando se combinan con `-p`; en una sesión interactiva esas dos banderas actualmente no activan hooks Setup.1099`--init-only` ejecuta hooks Setup y hooks SessionStart con el matcher `startup`, luego sale sin iniciar una conversación. `--init` y `--maintenance` activan hooks Setup solo cuando se combinan con `-p`; en una sesión interactiva esas dos banderas actualmente no activan hooks Setup.

1100 1100 

1101Debido a que Setup no se activa en cada lanzamiento, un plugin que necesita una dependencia instalada no puede confiar solo en Setup. El patrón práctico es verificar la dependencia en el primer uso e instalar si falta, por ejemplo un hook o skill que pruebe `${CLAUDE_PLUGIN_DATA}/node_modules` y ejecute `npm install` si está ausente. Consulte el [directorio de datos persistentes](/es/plugins-reference#persistent-data-directory) para saber dónde almacenar dependencias instaladas.1101Debido a que Setup no se activa en cada lanzamiento, un plugin que necesita una dependencia instalada no puede confiar solo en Setup. El patrón práctico es verificar la dependencia en el primer uso e instalar si falta, por ejemplo un hook o skill que pruebe `${CLAUDE_PLUGIN_DATA}/node_modules` y ejecute `npm install` si está ausente. Consulte el [directorio de datos persistentes](/docs/es/plugins-reference#persistent-data-directory) para saber dónde almacenar dependencias instaladas.

1102 1102 

1103<h4 id="setup-input">1103<h4 id="setup-input">

1104 Entrada de Setup1104 Entrada de Setup


1120 Control de decisión de Setup1120 Control de decisión de Setup

1121</h4>1121</h4>

1122 1122 

1123Los hooks Setup no pueden bloquear. Cualquier código de salida distinto de cero, incluyendo 2, muestra stderr al usuario como un aviso de `<hook name> hook error`, y la ejecución continúa. En [modo no interactivo](/es/headless), la salida del hook aparece solo cuando inicia con `--verbose`.1123Los hooks Setup no pueden bloquear. Cualquier código de salida distinto de cero, incluyendo 2, muestra stderr al usuario como un aviso de `<hook name> hook error`, y la ejecución continúa. En [modo no interactivo](/docs/es/headless), la salida del hook aparece solo cuando inicia con `--verbose`.

1124 1124 

1125Para pasar información al contexto de Claude, devuelva `additionalContext` en salida JSON; el stdout plano se escribe solo en el registro de depuración. Además de los [campos de salida JSON](#json-output) disponibles para todos los hooks, puede devolver estos campos específicos del evento:1125Para pasar información al contexto de Claude, devuelva `additionalContext` en salida JSON; el stdout plano se escribe solo en el registro de depuración. Además de los [campos de salida JSON](#json-output) disponibles para todos los hooks, puede devolver estos campos específicos del evento:

1126 1126 


1190 1190 

1191Un hook `UserPromptSubmit` de tipo `command`, `http` o `mcp_tool` que alcanza su tiempo de espera se cancela y su salida, incluyendo cualquier `additionalContext`, se descarta. El prompt aún llega a Claude sin ese contexto. A partir de v2.1.196, la transcripción muestra un aviso que nombra el hook, el tiempo de espera que se activó y que la salida fue descartada. Las versiones anteriores cancelan el hook sin aviso.1191Un hook `UserPromptSubmit` de tipo `command`, `http` o `mcp_tool` que alcanza su tiempo de espera se cancela y su salida, incluyendo cualquier `additionalContext`, se descarta. El prompt aún llega a Claude sin ese contexto. A partir de v2.1.196, la transcripción muestra un aviso que nombra el hook, el tiempo de espera que se activó y que la salida fue descartada. Las versiones anteriores cancelan el hook sin aviso.

1192 1192 

1193Un hook de callback [Agent SDK](/es/agent-sdk/hooks) en `UserPromptSubmit` que alcanza su tiempo de espera bloquea el prompt con un mensaje que nombra el hook y el tiempo de espera, porque un callback allí puede estar actuando como una puerta de política que no debe fallar abierta. La sesión continúa. Antes de v2.1.208, un tiempo de espera de callback en ese evento terminaba el turno con un error de ejecución.1193Un hook de callback [Agent SDK](/docs/es/agent-sdk/hooks) en `UserPromptSubmit` que alcanza su tiempo de espera bloquea el prompt con un mensaje que nombra el hook y el tiempo de espera, porque un callback allí puede estar actuando como una puerta de política que no debe fallar abierta. La sesión continúa. Antes de v2.1.208, un tiempo de espera de callback en ese evento terminaba el turno con un error de ejecución.

1194 1194 

1195<h4 id="userpromptsubmit-input">1195<h4 id="userpromptsubmit-input">

1196 Entrada de UserPromptSubmit1196 Entrada de UserPromptSubmit


1445Se ejecuta después de que Claude crea parámetros de herramienta y antes de procesar la llamada a herramienta. Coincide en el nombre de la herramienta: `Bash`, `Edit`, `Write`, `Read`, `Glob`, `Grep`, `Agent`, `WebFetch`, `WebSearch`, `AskUserQuestion`, `ExitPlanMode` y cualquier [nombre de herramienta MCP](#match-mcp-tools).1445Se ejecuta después de que Claude crea parámetros de herramienta y antes de procesar la llamada a herramienta. Coincide en el nombre de la herramienta: `Bash`, `Edit`, `Write`, `Read`, `Glob`, `Grep`, `Agent`, `WebFetch`, `WebSearch`, `AskUserQuestion`, `ExitPlanMode` y cualquier [nombre de herramienta MCP](#match-mcp-tools).

1446 1446 

1447<Warning>1447<Warning>

1448 PreToolUse se ejecuta solo cuando Claude llama a una herramienta. Los archivos que [referencia con `@` en su prompt](/es/common-workflows#reference-files-and-directories) se agregan sin ninguna llamada a herramienta: Claude Code inserta sus contenidos mientras construye el prompt, por lo que no se activa ningún hook PreToolUse para ellos, incluyendo hooks que coincidan con `Read`. Para bloquear rutas específicas de referencias `@`, use una [regla de denegación `Read`](/es/permissions#read-and-edit) en su lugar.1448 PreToolUse se ejecuta solo cuando Claude llama a una herramienta. Los archivos que [referencia con `@` en su prompt](/docs/es/common-workflows#reference-files-and-directories) se agregan sin ninguna llamada a herramienta: Claude Code inserta sus contenidos mientras construye el prompt, por lo que no se activa ningún hook PreToolUse para ellos, incluyendo hooks que coincidan con `Read`. Para bloquear rutas específicas de referencias `@`, use una [regla de denegación `Read`](/docs/es/permissions#read-and-edit) en su lugar.

1449</Warning>1449</Warning>

1450 1450 

1451Use [PreToolUse decision control](#pretooluse-decision-control) para permitir, denegar, preguntar o diferir la llamada a herramienta.1451Use [PreToolUse decision control](#pretooluse-decision-control) para permitir, denegar, preguntar o diferir la llamada a herramienta.


1466| :------------------ | :------ | :----------------- | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------- |1466| :------------------ | :------ | :----------------- | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

1467| `command` | string | `"npm test"` | El comando de shell a ejecutar |1467| `command` | string | `"npm test"` | El comando de shell a ejecutar |

1468| `description` | string | `"Run test suite"` | Descripción opcional de lo que hace el comando |1468| `description` | string | `"Run test suite"` | Descripción opcional de lo que hace el comando |

1469| `timeout` | number | `120000` | Tiempo de espera opcional en milisegundos. Los valores por encima del [máximo](/es/tools-reference#bash-tool-behavior) se reducen al máximo en lugar de ser rechazados |1469| `timeout` | number | `120000` | Tiempo de espera opcional en milisegundos. Los valores por encima del [máximo](/docs/es/tools-reference#bash-tool-behavior) se reducen al máximo en lugar de ser rechazados |

1470| `run_in_background` | boolean | `false` | Si se ejecuta el comando en segundo plano |1470| `run_in_background` | boolean | `false` | Si se ejecuta el comando en segundo plano |

1471 1471 

1472<h5 id="write">1472<h5 id="write">


1558 Agent1558 Agent

1559</h5>1559</h5>

1560 1560 

1561Genera un [subagente](/es/sub-agents).1561Genera un [subagente](/docs/es/sub-agents).

1562 1562 

1563| Campo | Tipo | Ejemplo | Descripción |1563| Campo | Tipo | Ejemplo | Descripción |

1564| :-------------- | :----- | :------------------------- | :----------------------------------------------------- |1564| :-------------- | :----- | :------------------------- | :----------------------------------------------------- |


1601 ExitPlanMode1601 ExitPlanMode

1602</h5>1602</h5>

1603 1603 

1604Presenta un plan y pide al usuario que lo apruebe antes de que Claude salga del [modo plan](/es/permission-modes#analyze-before-you-edit-with-plan-mode). Claude escribe el plan en un archivo en el disco antes de llamar a la herramienta, por lo que el `tool_input` literal del modelo es típicamente vacío. Claude Code inyecta el contenido del plan y la ruta del archivo antes de pasar la entrada a los hooks.1604Presenta un plan y pide al usuario que lo apruebe antes de que Claude salga del [modo plan](/docs/es/permission-modes#analyze-before-you-edit-with-plan-mode). Claude escribe el plan en un archivo en el disco antes de llamar a la herramienta, por lo que el `tool_input` literal del modelo es típicamente vacío. Claude Code inyecta el contenido del plan y la ruta del archivo antes de pasar la entrada a los hooks.

1605 1605 

1606| Campo | Tipo | Ejemplo | Descripción |1606| Campo | Tipo | Ejemplo | Descripción |

1607| :--------------- | :----- | :------------------------------------------ | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |1607| :--------------- | :----- | :------------------------------------------ | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |


1619 1619 

1620| Campo | Descripción |1620| Campo | Descripción |

1621| :------------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |1621| :------------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

1622| `permissionDecision` | `"allow"` omite el sistema de permisos, excepto para [herramientas que requieren interacción del usuario](#pretooluse-decision-control) y herramientas de conector [que su organización estableció en `ask`](/es/mcp#organization-controls-on-connector-tools). `"deny"` evita la llamada a herramienta. `"ask"` solicita al usuario que confirme. `"defer"` sale correctamente para que la herramienta pueda reanudarse más tarde. Las reglas [Deny and ask](/es/permissions#manage-permissions) aún se evalúan independientemente de lo que devuelva el hook |1622| `permissionDecision` | `"allow"` omite el sistema de permisos, excepto para [herramientas que requieren interacción del usuario](#pretooluse-decision-control) y herramientas de conector [que su organización estableció en `ask`](/docs/es/mcp#organization-controls-on-connector-tools). `"deny"` evita la llamada a herramienta. `"ask"` solicita al usuario que confirme. `"defer"` sale correctamente para que la herramienta pueda reanudarse más tarde. Las reglas [Deny and ask](/docs/es/permissions#manage-permissions) aún se evalúan independientemente de lo que devuelva el hook |

1623| `permissionDecisionReason` | Para `"allow"` y `"ask"`, se muestra al usuario pero no a Claude. Para `"deny"`, se muestra a Claude. Para `"defer"`, se ignora |1623| `permissionDecisionReason` | Para `"allow"` y `"ask"`, se muestra al usuario pero no a Claude. Para `"deny"`, se muestra a Claude. Para `"defer"`, se ignora |

1624| `updatedInput` | Modifica los parámetros de entrada de la herramienta antes de la ejecución. Reemplaza el objeto de entrada completo, así que incluya campos sin cambios junto con los modificados. Combinar con `"allow"` para aprobación automática, o `"ask"` para mostrar la entrada modificada al usuario. Para `"defer"`, se ignora |1624| `updatedInput` | Modifica los parámetros de entrada de la herramienta antes de la ejecución. Reemplaza el objeto de entrada completo, así que incluya campos sin cambios junto con los modificados. Combinar con `"allow"` para aprobación automática, o `"ask"` para mostrar la entrada modificada al usuario. Para `"defer"`, se ignora |

1625| `additionalContext` | Cadena agregada al contexto de Claude junto con el resultado de la herramienta. Ignorado cuando `permissionDecision` es `"defer"`. Consulte [Agregar contexto para Claude](#add-context-for-claude) |1625| `additionalContext` | Cadena agregada al contexto de Claude junto con el resultado de la herramienta. Ignorado cuando `permissionDecision` es `"defer"`. Consulte [Agregar contexto para Claude](#add-context-for-claude) |


1642}1642}

1643```1643```

1644 1644 

1645`AskUserQuestion` y `ExitPlanMode` requieren interacción del usuario y normalmente se bloquean en [modo no interactivo](/es/headless) con la bandera `-p`. Devolver `permissionDecision: "allow"` junto con `updatedInput` satisface ese requisito: el hook lee la entrada de la herramienta desde stdin, recopila la respuesta a través de su propia interfaz de usuario y la devuelve en `updatedInput` para que la herramienta se ejecute sin solicitar. Devolver `"allow"` solo no es suficiente para estas herramientas. Para `AskUserQuestion`, repita el array `questions` original y agregue un objeto [`answers`](#askuserquestion) que asigne el texto de cada pregunta a la respuesta elegida.1645`AskUserQuestion` y `ExitPlanMode` requieren interacción del usuario y normalmente se bloquean en [modo no interactivo](/docs/es/headless) con la bandera `-p`. Devolver `permissionDecision: "allow"` junto con `updatedInput` satisface ese requisito: el hook lee la entrada de la herramienta desde stdin, recopila la respuesta a través de su propia interfaz de usuario y la devuelve en `updatedInput` para que la herramienta se ejecute sin solicitar. Devolver `"allow"` solo no es suficiente para estas herramientas. Para `AskUserQuestion`, repita el array `questions` original y agregue un objeto [`answers`](#askuserquestion) que asigne el texto de cada pregunta a la respuesta elegida.

1646 1646 

1647Herramientas de conector [que su organización estableció en `ask`](/es/mcp#organization-controls-on-connector-tools) solicitan incluso cuando un hook devuelve `"allow"`.1647Herramientas de conector [que su organización estableció en `ask`](/docs/es/mcp#organization-controls-on-connector-tools) solicitan incluso cuando un hook devuelve `"allow"`.

1648 1648 

1649A partir de v2.1.199, una herramienta MCP cuyo servidor la marca con [`_meta["anthropic/requiresUserInteraction"]`](/es/mcp#require-approval-for-a-specific-tool) es más estricta: un hook no puede omitir su solicitud de aprobación con `"allow"`, con o sin `updatedInput`, porque Claude Code no puede confirmar que el hook recopiló la interacción que la herramienta necesita.1649A partir de v2.1.199, una herramienta MCP cuyo servidor la marca con [`_meta["anthropic/requiresUserInteraction"]`](/docs/es/mcp#require-approval-for-a-specific-tool) es más estricta: un hook no puede omitir su solicitud de aprobación con `"allow"`, con o sin `updatedInput`, porque Claude Code no puede confirmar que el hook recopiló la interacción que la herramienta necesita.

1650 1650 

1651<Note>1651<Note>

1652 PreToolUse anteriormente usaba campos `decision` y `reason` de nivel superior, pero estos están deprecados para este evento. Use `hookSpecificOutput.permissionDecision` y `hookSpecificOutput.permissionDecisionReason` en su lugar. Los valores deprecados `"approve"` y `"block"` se asignan a `"allow"` y `"deny"` respectivamente. Otros eventos como PostToolUse y Stop continúan usando `decision` y `reason` de nivel superior como su formato actual.1652 PreToolUse anteriormente usaba campos `decision` y `reason` de nivel superior, pero estos están deprecados para este evento. Use `hookSpecificOutput.permissionDecision` y `hookSpecificOutput.permissionDecisionReason` en su lugar. Los valores deprecados `"approve"` y `"block"` se asignan a `"allow"` y `"deny"` respectivamente. Otros eventos como PostToolUse y Stop continúan usando `decision` y `reason` de nivel superior como su formato actual.


1656 Diferir una llamada a herramienta para más tarde1656 Diferir una llamada a herramienta para más tarde

1657</h4>1657</h4>

1658 1658 

1659`"defer"` es para integraciones que ejecutan `claude -p` como un subproceso y leen su salida JSON, como una aplicación del Agent SDK o una interfaz de usuario personalizada construida sobre Claude Code. Permite que ese proceso de llamada pause Claude en una llamada a herramienta, recopile entrada a través de su propia interfaz y reanude donde se quedó. Claude Code honra este valor solo en [modo no interactivo](/es/headless) con la bandera `-p`. En sesiones interactivas registra una advertencia e ignora el resultado del hook.1659`"defer"` es para integraciones que ejecutan `claude -p` como un subproceso y leen su salida JSON, como una aplicación del Agent SDK o una interfaz de usuario personalizada construida sobre Claude Code. Permite que ese proceso de llamada pause Claude en una llamada a herramienta, recopile entrada a través de su propia interfaz y reanude donde se quedó. Claude Code honra este valor solo en [modo no interactivo](/docs/es/headless) con la bandera `-p`. En sesiones interactivas registra una advertencia e ignora el resultado del hook.

1660 1660 

1661La herramienta `AskUserQuestion` es el caso típico: Claude quiere hacer algo al usuario, pero no hay terminal para responder. El viaje de ida y vuelta funciona así:1661La herramienta `AskUserQuestion` es el caso típico: Claude quiere hacer algo al usuario, pero no hay terminal para responder. El viaje de ida y vuelta funciona así:

1662 1662 


1682}1682}

1683```1683```

1684 1684 

1685No hay límite de tiempo de espera o reintento. La sesión permanece en el disco hasta que la reanude, sujeta al barrido de retención [`cleanupPeriodDays`](/es/settings#available-settings) que elimina archivos de sesión después de 30 días por defecto. Si la respuesta no está lista cuando reanuda, el hook puede devolver `"defer"` nuevamente y el proceso sale de la misma manera. El proceso de llamada controla cuándo romper el bucle devolviendo finalmente `"allow"` o `"deny"` del hook.1685No hay límite de tiempo de espera o reintento. La sesión permanece en el disco hasta que la reanude, sujeta al barrido de retención [`cleanupPeriodDays`](/docs/es/settings#available-settings) que elimina archivos de sesión después de 30 días por defecto. Si la respuesta no está lista cuando reanuda, el hook puede devolver `"defer"` nuevamente y el proceso sale de la misma manera. El proceso de llamada controla cuándo romper el bucle devolviendo finalmente `"allow"` o `"deny"` del hook.

1686 1686 

1687`"defer"` solo funciona cuando Claude hace una única llamada a herramienta en el turno. Si Claude hace varias llamadas a herramientas a la vez, `"defer"` se ignora con una advertencia y la herramienta procede a través del flujo de permiso normal. La restricción existe porque reanudar solo puede re-ejecutar una herramienta: no hay forma de diferir una llamada de un lote sin dejar las otras sin resolver.1687`"defer"` solo funciona cuando Claude hace una única llamada a herramienta en el turno. Si Claude hace varias llamadas a herramientas a la vez, `"defer"` se ignora con una advertencia y la herramienta procede a través del flujo de permiso normal. La restricción existe porque reanudar solo puede re-ejecutar una herramienta: no hay forma de diferir una llamada de un lote sin dejar las otras sin resolver.

1688 1688 


1738 1738 

1739| Campo | Descripción |1739| Campo | Descripción |

1740| :------------------- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |1740| :------------------- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

1741| `behavior` | `"allow"` otorga el permiso, `"deny"` lo deniega. Las reglas [Deny and ask](/es/permissions#manage-permissions) aún se evalúan, por lo que un hook que devuelve `"allow"` no anula una regla de denegación coincidente |1741| `behavior` | `"allow"` otorga el permiso, `"deny"` lo deniega. Las reglas [Deny and ask](/docs/es/permissions#manage-permissions) aún se evalúan, por lo que un hook que devuelve `"allow"` no anula una regla de denegación coincidente |

1742| `updatedInput` | Solo para `"allow"`: modifica los parámetros de entrada de la herramienta antes de la ejecución. Reemplaza el objeto de entrada completo, así que incluya campos sin cambios junto con los modificados. La entrada modificada se re-evalúa contra reglas de denegación y pregunta |1742| `updatedInput` | Solo para `"allow"`: modifica los parámetros de entrada de la herramienta antes de la ejecución. Reemplaza el objeto de entrada completo, así que incluya campos sin cambios junto con los modificados. La entrada modificada se re-evalúa contra reglas de denegación y pregunta |

1743| `updatedPermissions` | Solo para `"allow"`: array de [entradas de actualización de permiso](#permission-update-entries) a aplicar, como agregar una regla de permiso o cambiar el modo de permiso de sesión |1743| `updatedPermissions` | Solo para `"allow"`: array de [entradas de actualización de permiso](#permission-update-entries) a aplicar, como agregar una regla de permiso o cambiar el modo de permiso de sesión |

1744| `message` | Solo para `"deny"`: le dice a Claude por qué se denegó el permiso |1744| `message` | Solo para `"deny"`: le dice a Claude por qué se denegó el permiso |


1774| `removeDirectories` | `directories`, `destination` | Elimina directorios de trabajo |1774| `removeDirectories` | `directories`, `destination` | Elimina directorios de trabajo |

1775 1775 

1776<Note>1776<Note>

1777 `setMode` con `bypassPermissions` solo tiene efecto si la sesión se lanzó con modo de omisión ya disponible: `--dangerously-skip-permissions`, `--permission-mode bypassPermissions`, `--allow-dangerously-skip-permissions` o `permissions.defaultMode: "bypassPermissions"` en configuración, y el modo no está deshabilitado por [`permissions.disableBypassPermissionsMode`](/es/permissions#managed-settings). De lo contrario, la actualización es una no-op. `bypassPermissions` nunca se persiste como `defaultMode` independientemente de `destination`.1777 `setMode` con `bypassPermissions` solo tiene efecto si la sesión se lanzó con modo de omisión ya disponible: `--dangerously-skip-permissions`, `--permission-mode bypassPermissions`, `--allow-dangerously-skip-permissions` o `permissions.defaultMode: "bypassPermissions"` en configuración, y el modo no está deshabilitado por [`permissions.disableBypassPermissionsMode`](/docs/es/permissions#managed-settings). De lo contrario, la actualización es una no-op. `bypassPermissions` nunca se persiste como `defaultMode` independientemente de `destination`.

1778</Note>1778</Note>

1779 1779 

1780El campo `destination` en cada entrada determina si el cambio permanece en memoria o persiste en un archivo de configuración.1780El campo `destination` en cada entrada determina si el cambio permanece en memoria o persiste en un archivo de configuración.


1993 PermissionDenied1993 PermissionDenied

1994</h3>1994</h3>

1995 1995 

1996Se ejecuta cuando el clasificador de [modo automático](/es/permission-modes#eliminate-prompts-with-auto-mode) deniega una llamada a herramienta. Este hook solo se activa en modo automático: no se ejecuta cuando deniega manualmente un diálogo de permiso, cuando un hook `PreToolUse` bloquea una llamada o cuando una regla `deny` coincide. Use esto para registrar denegaciones del clasificador, ajustar configuración o decirle al modelo que puede reintentar la llamada a herramienta.1996Se ejecuta cuando el clasificador de [modo automático](/docs/es/permission-modes#eliminate-prompts-with-auto-mode) deniega una llamada a herramienta. Este hook solo se activa en modo automático: no se ejecuta cuando deniega manualmente un diálogo de permiso, cuando un hook `PreToolUse` bloquea una llamada o cuando una regla `deny` coincide. Use esto para registrar denegaciones del clasificador, ajustar configuración o decirle al modelo que puede reintentar la llamada a herramienta.

1997 1997 

1998Coincide en el nombre de la herramienta, los mismos valores que PreToolUse.1998Coincide en el nombre de la herramienta, los mismos valores que PreToolUse.

1999 1999 


2055| `elicitation_dialog` | Un servidor MCP abre un formulario de elicitación |2055| `elicitation_dialog` | Un servidor MCP abre un formulario de elicitación |

2056| `elicitation_complete` | Un formulario de elicitación MCP se envía o se descarta |2056| `elicitation_complete` | Un formulario de elicitación MCP se envía o se descarta |

2057| `elicitation_response` | Una respuesta de elicitación MCP se envía de vuelta al servidor |2057| `elicitation_response` | Una respuesta de elicitación MCP se envía de vuelta al servidor |

2058| `agent_needs_input` | Una sesión en segundo plano comienza a esperar su entrada. Se activa solo mientras [agent view](/es/agent-view) está abierto en una terminal |2058| `agent_needs_input` | Una sesión en segundo plano comienza a esperar su entrada. Se activa solo mientras [agent view](/docs/es/agent-view) está abierto en una terminal |

2059| `agent_completed` | Una sesión en segundo plano termina o falla. Se activa solo mientras [agent view](/es/agent-view) está abierto en una terminal |2059| `agent_completed` | Una sesión en segundo plano termina o falla. Se activa solo mientras [agent view](/docs/es/agent-view) está abierto en una terminal |

2060 2060 

2061Los tipos `agent_needs_input` y `agent_completed` requieren Claude Code v2.1.198 o posterior.2061Los tipos `agent_needs_input` y `agent_completed` requieren Claude Code v2.1.198 o posterior.

2062 2062 


2113 SubagentStart2113 SubagentStart

2114</h3>2114</h3>

2115 2115 

2116Se ejecuta cuando se genera un subagente de Claude Code a través de la herramienta Agent. Admite matchers para filtrar por nombre de tipo de agente. Para agentes integrados, este es el nombre del agente como `general-purpose`, `Explore` o `Plan`. Para [subagentes personalizados](/es/sub-agents), este es el campo `name` del frontmatter del agente, no el nombre del archivo.2116Se ejecuta cuando se genera un subagente de Claude Code a través de la herramienta Agent. Admite matchers para filtrar por nombre de tipo de agente. Para agentes integrados, este es el nombre del agente como `general-purpose`, `Explore` o `Plan`. Para [subagentes personalizados](/docs/es/sub-agents), este es el campo `name` del frontmatter del agente, no el nombre del archivo.

2117 2117 

2118Para subagentes enviados por un [plugin](/es/plugins), el tipo de agente es el identificador con alcance de plugin como `my-plugin:reviewer`, no el nombre del frontmatter desnudo. El colon coloca un nombre con alcance de plugin en la ruta de expresión regular, así que ancle el matcher con `^` y `$` para una coincidencia exacta: `^my-plugin:reviewer$`.2118Para subagentes enviados por un [plugin](/docs/es/plugins), el tipo de agente es el identificador con alcance de plugin como `my-plugin:reviewer`, no el nombre del frontmatter desnudo. El colon coloca un nombre con alcance de plugin en la ruta de expresión regular, así que ancle el matcher con `^` y `$` para una coincidencia exacta: `^my-plugin:reviewer$`.

2119 2119 

2120<h4 id="subagentstart-input">2120<h4 id="subagentstart-input">

2121 Entrada de SubagentStart2121 Entrada de SubagentStart


2247 TaskCompleted2247 TaskCompleted

2248</h3>2248</h3>

2249 2249 

2250Se ejecuta cuando una tarea está siendo marcada como completada. Esto se activa en dos situaciones: cuando cualquier agente marca explícitamente una tarea como completada a través de la herramienta TaskUpdate, o cuando un compañero de [equipo de agentes](/es/agent-teams) termina su turno con tareas en progreso. Use esto para aplicar criterios de finalización como pasar pruebas o verificaciones de lint antes de que una tarea pueda cerrarse.2250Se ejecuta cuando una tarea está siendo marcada como completada. Esto se activa en dos situaciones: cuando cualquier agente marca explícitamente una tarea como completada a través de la herramienta TaskUpdate, o cuando un compañero de [equipo de agentes](/docs/es/agent-teams) termina su turno con tareas en progreso. Use esto para aplicar criterios de finalización como pasar pruebas o verificaciones de lint antes de que una tarea pueda cerrarse.

2251 2251 

2252Cuando un hook `TaskCompleted` sale con código 2, la tarea no se marca como completada y el mensaje de stderr se devuelve al modelo como retroalimentación. Para detener al compañero completamente en lugar de re-ejecutarlo, devuelva JSON con `{"continue": false, "stopReason": "..."}`. Los hooks TaskCompleted no admiten matchers y se activan en cada ocurrencia.2252Cuando un hook `TaskCompleted` sale con código 2, la tarea no se marca como completada y el mensaje de stderr se devuelve al modelo como retroalimentación. Para detener al compañero completamente en lugar de re-ejecutarlo, devuelva JSON con `{"continue": false, "stopReason": "..."}`. Los hooks TaskCompleted no admiten matchers y se activan en cada ocurrencia.

2253 2253 


2312Se ejecuta cuando el agente principal de Claude Code ha terminado de responder. No se ejecuta si la detención ocurrió debido a una interrupción del usuario. Los errores de API activan [StopFailure](#stopfailure) en su lugar.2312Se ejecuta cuando el agente principal de Claude Code ha terminado de responder. No se ejecuta si la detención ocurrió debido a una interrupción del usuario. Los errores de API activan [StopFailure](#stopfailure) en su lugar.

2313 2313 

2314<Tip>2314<Tip>

2315 El comando [`/goal`](/es/goal) es un atajo integrado para un hook Stop basado en prompt con alcance de sesión. Úselo cuando desee que Claude siga trabajando hasta que se cumpla una condición sin escribir configuración de hook.2315 El comando [`/goal`](/docs/es/goal) es un atajo integrado para un hook Stop basado en prompt con alcance de sesión. Úselo cuando desee que Claude siga trabajando hasta que se cumpla una condición sin escribir configuración de hook.

2316</Tip>2316</Tip>

2317 2317 

2318<h4 id="stop-input">2318<h4 id="stop-input">


2445 TeammateIdle2445 TeammateIdle

2446</h3>2446</h3>

2447 2447 

2448Se ejecuta cuando un compañero de [equipo de agentes](/es/agent-teams) está a punto de quedarse inactivo después de terminar su turno. Use esto para aplicar puertas de calidad antes de que un compañero deje de trabajar, como requerir que pasen verificaciones de lint o verificar que existan archivos de salida.2448Se ejecuta cuando un compañero de [equipo de agentes](/docs/es/agent-teams) está a punto de quedarse inactivo después de terminar su turno. Use esto para aplicar puertas de calidad antes de que un compañero deje de trabajar, como requerir que pasen verificaciones de lint o verificar que existan archivos de salida.

2449 2449 

2450Cuando un hook `TeammateIdle` sale con código 2, el compañero recibe el mensaje de stderr como retroalimentación y continúa trabajando en lugar de quedarse inactivo. Para detener al compañero completamente en lugar de re-ejecutarlo, devuelva JSON con `{"continue": false, "stopReason": "..."}`. Los hooks TeammateIdle no admiten matchers y se activan en cada ocurrencia.2450Cuando un hook `TeammateIdle` sale con código 2, el compañero recibe el mensaje de stderr como retroalimentación y continúa trabajando en lugar de quedarse inactivo. Para detener al compañero completamente en lugar de re-ejecutarlo, devuelva JSON con `{"continue": false, "stopReason": "..."}`. Los hooks TeammateIdle no admiten matchers y se activan en cada ocurrencia.

2451 2451 


2659 WorktreeCreate2659 WorktreeCreate

2660</h3>2660</h3>

2661 2661 

2662Se ejecuta cuando se está creando un worktree, ya sea desde `claude --worktree` o desde un [subagente usando `isolation: "worktree"`](/es/sub-agents#choose-the-subagent-scope). Por defecto Claude Code crea la copia de trabajo aislada con `git worktree`. Configurar un hook WorktreeCreate reemplaza ese comportamiento predeterminado de git, permitiéndole usar un sistema de control de versiones diferente como SVN, Perforce o Mercurial.2662Se ejecuta cuando se está creando un worktree, ya sea desde `claude --worktree` o desde un [subagente usando `isolation: "worktree"`](/docs/es/sub-agents#choose-the-subagent-scope). Por defecto Claude Code crea la copia de trabajo aislada con `git worktree`. Configurar un hook WorktreeCreate reemplaza ese comportamiento predeterminado de git, permitiéndole usar un sistema de control de versiones diferente como SVN, Perforce o Mercurial.

2663 2663 

2664Debido a que el hook reemplaza el comportamiento predeterminado completamente, [`.worktreeinclude`](/es/worktrees#copy-gitignored-files-into-worktrees) no se procesa. Si necesita copiar archivos de configuración local como `.env` en el nuevo worktree, hágalo dentro de su script de hook.2664Debido a que el hook reemplaza el comportamiento predeterminado completamente, [`.worktreeinclude`](/docs/es/worktrees#copy-gitignored-files-into-worktrees) no se procesa. Si necesita copiar archivos de configuración local como `.env` en el nuevo worktree, hágalo dentro de su script de hook.

2665 2665 

2666El hook debe devolver la ruta al directorio de worktree creado. Claude Code usa esta ruta como el directorio de trabajo para la sesión aislada. Consulte [WorktreeCreate output](#worktreecreate-output) para saber cómo cada tipo de hook devuelve la ruta.2666El hook debe devolver la ruta al directorio de worktree creado. Claude Code usa esta ruta como el directorio de trabajo para la sesión aislada. Consulte [WorktreeCreate output](#worktreecreate-output) para saber cómo cada tipo de hook devuelve la ruta.

2667 2667 


3114 Verificar múltiples condiciones antes de detener3114 Verificar múltiples condiciones antes de detener

3115</h3>3115</h3>

3116 3116 

3117Este hook `Stop` usa un prompt detallado para verificar tres condiciones antes de permitir que Claude se detenga. Los hooks `SubagentStop` usan el mismo formato para evaluar si un [subagente](/es/sub-agents) debe detenerse. Si `"ok"` es `false`, Claude continúa trabajando con la razón proporcionada como su siguiente instrucción:3117Este hook `Stop` usa un prompt detallado para verificar tres condiciones antes de permitir que Claude se detenga. Los hooks `SubagentStop` usan el mismo formato para evaluar si un [subagente](/docs/es/sub-agents) debe detenerse. Si `"ok"` es `false`, Claude continúa trabajando con la razón proporcionada como su siguiente instrucción:

3118 3118 

3119```json theme={null}3119```json theme={null}

3120{3120{


3387 3387 

3388Para detalles de coincidencia de hooks más granulares, establezca `CLAUDE_CODE_DEBUG_LOG_LEVEL=verbose` para ver líneas de registro adicionales como recuentos de matchers de hooks y coincidencia de consultas.3388Para detalles de coincidencia de hooks más granulares, establezca `CLAUDE_CODE_DEBUG_LOG_LEVEL=verbose` para ver líneas de registro adicionales como recuentos de matchers de hooks y coincidencia de consultas.

3389 3389 

3390Para solucionar problemas comunes como hooks que no se activan, bucles infinitos de hooks Stop o errores de configuración, consulte [Limitaciones y solución de problemas](/es/hooks-guide#limitations-and-troubleshooting) en la guía. Para un recorrido de diagnóstico más amplio que cubra `/context`, `/doctor` y precedencia de configuración, consulte [Depure su configuración](/es/debug-your-config).3390Para solucionar problemas comunes como hooks que no se activan, bucles infinitos de hooks Stop o errores de configuración, consulte [Limitaciones y solución de problemas](/docs/es/hooks-guide#limitations-and-troubleshooting) en la guía. Para un recorrido de diagnóstico más amplio que cubra `/context`, `/doctor` y precedencia de configuración, consulte [Depure su configuración](/docs/es/debug-your-config).

hooks-guide.md +50 −50

Details

10 10 

11Para decisiones que requieren criterio en lugar de reglas deterministas, también puedes usar [hooks basados en prompts](#prompt-based-hooks) o [hooks basados en agentes](#agent-based-hooks) que utilizan un modelo Claude para evaluar condiciones.11Para decisiones que requieren criterio en lugar de reglas deterministas, también puedes usar [hooks basados en prompts](#prompt-based-hooks) o [hooks basados en agentes](#agent-based-hooks) que utilizan un modelo Claude para evaluar condiciones.

12 12 

13Para otras formas de extender Claude Code, consulta [skills](/es/skills) para dar a Claude instrucciones adicionales y comandos ejecutables, [subagents](/es/sub-agents) para ejecutar tareas en contextos aislados, y [plugins](/es/plugins) para empaquetar extensiones para compartir entre proyectos.13Para otras formas de extender Claude Code, consulta [skills](/docs/es/skills) para dar a Claude instrucciones adicionales y comandos ejecutables, [subagents](/docs/es/sub-agents) para ejecutar tareas en contextos aislados, y [plugins](/docs/es/plugins) para empaquetar extensiones para compartir entre proyectos.

14 14 

15<Tip>15<Tip>

16 Esta guía cubre casos de uso comunes y cómo comenzar. Para esquemas de eventos completos, formatos de entrada/salida JSON y características avanzadas como hooks asincronos y hooks de herramientas MCP, consulta la [referencia de Hooks](/es/hooks).16 Esta guía cubre casos de uso comunes y cómo comenzar. Para esquemas de eventos completos, formatos de entrada/salida JSON y características avanzadas como hooks asincronos y hooks de herramientas MCP, consulta la [referencia de Hooks](/docs/es/hooks).

17</Tip>17</Tip>

18 18 

19<h2 id="set-up-your-first-hook">19<h2 id="set-up-your-first-hook">


85 Qué puedes automatizar85 Qué puedes automatizar

86</h2>86</h2>

87 87 

88Los hooks te permiten ejecutar código en puntos clave del ciclo de vida de Claude Code: formatear archivos después de ediciones, bloquear comandos antes de que se ejecuten, enviar notificaciones cuando Claude necesita entrada, inyectar contexto al inicio de la sesión, y más. Para la lista completa de eventos de hook, consulta la [referencia de Hooks](/es/hooks#hook-lifecycle).88Los hooks te permiten ejecutar código en puntos clave del ciclo de vida de Claude Code: formatear archivos después de ediciones, bloquear comandos antes de que se ejecuten, enviar notificaciones cuando Claude necesita entrada, inyectar contexto al inicio de la sesión, y más. Para la lista completa de eventos de hook, consulta la [referencia de Hooks](/docs/es/hooks#hook-lifecycle).

89 89 

90Cada ejemplo incluye un bloque de configuración listo para usar que añades a un [archivo de configuración](#configure-hook-location).90Cada ejemplo incluye un bloque de configuración listo para usar que añades a un [archivo de configuración](#configure-hook-location).

91 91 

92Para un ejemplo de producción de hooks que ejecutan una revisión de modelo separada y alimentan los hallazgos de vuelta a la sesión, consulta [cómo el plugin `security-guidance` se integra con Claude Code](/es/security-guidance#how-the-plugin-integrates-with-claude-code).92Para un ejemplo de producción de hooks que ejecutan una revisión de modelo separada y alimentan los hallazgos de vuelta a la sesión, consulta [cómo el plugin `security-guidance` se integra con Claude Code](/docs/es/security-guidance#how-the-plugin-integrates-with-claude-code).

93 93 

94<h3 id="get-notified-when-claude-needs-input">94<h3 id="get-notified-when-claude-needs-input">

95 Recibe notificaciones cuando Claude necesita entrada95 Recibe notificaciones cuando Claude necesita entrada


181| `elicitation_dialog` | Un servidor MCP abre un formulario de elicitación |181| `elicitation_dialog` | Un servidor MCP abre un formulario de elicitación |

182| `elicitation_complete` | Un formulario de elicitación de MCP se envía o se descarta |182| `elicitation_complete` | Un formulario de elicitación de MCP se envía o se descarta |

183| `elicitation_response` | Una respuesta de elicitación de MCP se envía de vuelta al servidor |183| `elicitation_response` | Una respuesta de elicitación de MCP se envía de vuelta al servidor |

184| `agent_needs_input` | Una sesión en segundo plano comienza a esperar tu entrada. Se activa solo mientras la [vista de agente](/es/agent-view) está abierta |184| `agent_needs_input` | Una sesión en segundo plano comienza a esperar tu entrada. Se activa solo mientras la [vista de agente](/docs/es/agent-view) está abierta |

185| `agent_completed` | Una sesión en segundo plano se completa o falla. Se activa solo mientras la [vista de agente](/es/agent-view) está abierta |185| `agent_completed` | Una sesión en segundo plano se completa o falla. Se activa solo mientras la [vista de agente](/docs/es/agent-view) está abierta |

186 186 

187Los matchers `agent_needs_input` y `agent_completed` requieren Claude Code v2.1.198 o posterior.187Los matchers `agent_needs_input` y `agent_completed` requieren Claude Code v2.1.198 o posterior.

188 188 

189Escribe `/hooks` y selecciona `Notification` para confirmar que el hook está registrado. Para el esquema de evento completo, consulta la [referencia de Notification](/es/hooks#notification).189Escribe `/hooks` y selecciona `Notification` para confirmar que el hook está registrado. Para el esquema de evento completo, consulta la [referencia de Notification](/docs/es/hooks#notification).

190 190 

191<h3 id="auto-format-code-after-edits">191<h3 id="auto-format-code-after-edits">

192 Formatea automáticamente el código después de ediciones192 Formatea automáticamente el código después de ediciones


309}309}

310```310```

311 311 

312Puedes reemplazar el `echo` con cualquier comando que produzca salida dinámica, como `git log --oneline -5` para mostrar commits recientes. Para inyectar contexto en cada inicio de sesión, considera usar [CLAUDE.md](/es/memory) en su lugar. Para variables de entorno, consulta [`CLAUDE_ENV_FILE`](/es/hooks#persist-environment-variables) en la referencia.312Puedes reemplazar el `echo` con cualquier comando que produzca salida dinámica, como `git log --oneline -5` para mostrar commits recientes. Para inyectar contexto en cada inicio de sesión, considera usar [CLAUDE.md](/docs/es/memory) en su lugar. Para variables de entorno, consulta [`CLAUDE_ENV_FILE`](/docs/es/hooks#persist-environment-variables) en la referencia.

313 313 

314<h3 id="audit-configuration-changes">314<h3 id="audit-configuration-changes">

315 Audita cambios de configuración315 Audita cambios de configuración


337}337}

338```338```

339 339 

340El matcher filtra por tipo de configuración: `user_settings`, `project_settings`, `local_settings`, `policy_settings`, o `skills`. Para bloquear que un cambio tenga efecto, sal con código 2 o devuelve `{"decision": "block"}`. Consulta la [referencia de ConfigChange](/es/hooks#configchange) para el esquema de entrada completo.340El matcher filtra por tipo de configuración: `user_settings`, `project_settings`, `local_settings`, `policy_settings`, o `skills`. Para bloquear que un cambio tenga efecto, sal con código 2 o devuelve `{"decision": "block"}`. Consulta la [referencia de ConfigChange](/docs/es/hooks#configchange) para el esquema de entrada completo.

341 341 

342<h3 id="reload-environment-when-directory-or-files-change">342<h3 id="reload-environment-when-directory-or-files-change">

343 Recarga el entorno cuando el directorio o los archivos cambian343 Recarga el entorno cuando el directorio o los archivos cambian


376 376 

377Ejecuta `direnv allow` una vez en cada directorio que tenga un `.envrc` para que direnv tenga permiso de cargarlo. Si usas devbox o nix en lugar de direnv, el mismo patrón funciona con `devbox shellenv` o `devbox global shellenv` en lugar de `direnv export bash`.377Ejecuta `direnv allow` una vez en cada directorio que tenga un `.envrc` para que direnv tenga permiso de cargarlo. Si usas devbox o nix en lugar de direnv, el mismo patrón funciona con `devbox shellenv` o `devbox global shellenv` en lugar de `direnv export bash`.

378 378 

379Para reaccionar a archivos específicos en lugar de cada cambio de directorio, usa `FileChanged` con un `matcher` listando los nombres de archivo a observar, separados por `|`. Cuando construyas la lista de observación, Claude Code divide este valor en nombres de archivo literales en lugar de evaluarlo como una expresión regular. Consulta [FileChanged](/es/hooks#filechanged) para cómo el mismo valor también filtra qué grupos de hooks se ejecutan cuando un archivo cambia. Este ejemplo observa `.envrc` y `.env` en el directorio de trabajo:379Para reaccionar a archivos específicos en lugar de cada cambio de directorio, usa `FileChanged` con un `matcher` listando los nombres de archivo a observar, separados por `|`. Cuando construyas la lista de observación, Claude Code divide este valor en nombres de archivo literales en lugar de evaluarlo como una expresión regular. Consulta [FileChanged](/docs/es/hooks#filechanged) para cómo el mismo valor también filtra qué grupos de hooks se ejecutan cuando un archivo cambia. Este ejemplo observa `.envrc` y `.env` en el directorio de trabajo:

380 380 

381```json theme={null}381```json theme={null}

382{382{


396}396}

397```397```

398 398 

399Consulta las entradas de referencia [CwdChanged](/es/hooks#cwdchanged) y [FileChanged](/es/hooks#filechanged) para esquemas de entrada, salida `watchPaths`, y detalles de `CLAUDE_ENV_FILE`.399Consulta las entradas de referencia [CwdChanged](/docs/es/hooks#cwdchanged) y [FileChanged](/docs/es/hooks#filechanged) para esquemas de entrada, salida `watchPaths`, y detalles de `CLAUDE_ENV_FILE`.

400 400 

401<h3 id="auto-approve-specific-permission-prompts">401<h3 id="auto-approve-specific-permission-prompts">

402 Aprueba automáticamente avisos de permiso específicos402 Aprueba automáticamente avisos de permiso específicos


431Para establecer un modo de permiso específico en su lugar, la salida de tu hook puede incluir un array `updatedPermissions` con una entrada `setMode`. El valor `mode` es cualquier modo de permiso como `default`, `acceptEdits`, o `bypassPermissions`, y `destination: "session"` lo aplica solo para la sesión actual.431Para establecer un modo de permiso específico en su lugar, la salida de tu hook puede incluir un array `updatedPermissions` con una entrada `setMode`. El valor `mode` es cualquier modo de permiso como `default`, `acceptEdits`, o `bypassPermissions`, y `destination: "session"` lo aplica solo para la sesión actual.

432 432 

433<Note>433<Note>

434 `bypassPermissions` solo se aplica si la sesión se lanzó con modo bypass ya disponible: `--dangerously-skip-permissions`, `--permission-mode bypassPermissions`, `--allow-dangerously-skip-permissions`, o `permissions.defaultMode: "bypassPermissions"` en configuración, y no deshabilitado por [`permissions.disableBypassPermissionsMode`](/es/permissions#managed-settings). Nunca se persiste como `defaultMode`.434 `bypassPermissions` solo se aplica si la sesión se lanzó con modo bypass ya disponible: `--dangerously-skip-permissions`, `--permission-mode bypassPermissions`, `--allow-dangerously-skip-permissions`, o `permissions.defaultMode: "bypassPermissions"` en configuración, y no deshabilitado por [`permissions.disableBypassPermissionsMode`](/docs/es/permissions#managed-settings). Nunca se persiste como `defaultMode`.

435</Note>435</Note>

436 436 

437Para cambiar la sesión a `acceptEdits`, tu hook escribe este JSON en stdout:437Para cambiar la sesión a `acceptEdits`, tu hook escribe este JSON en stdout:


450}450}

451```451```

452 452 

453Mantén el matcher lo más estrecho posible. Coincidir con `.*` o dejar el matcher vacío aprobaría automáticamente cada aviso de permiso, incluyendo escrituras de archivos y comandos de shell. Consulta la [referencia de PermissionRequest](/es/hooks#permissionrequest-decision-control) para el conjunto completo de campos de decisión.453Mantén el matcher lo más estrecho posible. Coincidir con `.*` o dejar el matcher vacío aprobaría automáticamente cada aviso de permiso, incluyendo escrituras de archivos y comandos de shell. Consulta la [referencia de PermissionRequest](/docs/es/hooks#permissionrequest-decision-control) para el conjunto completo de campos de decisión.

454 454 

455<h2 id="how-hooks-work">455<h2 id="how-hooks-work">

456 Cómo funcionan los hooks456 Cómo funcionan los hooks


478| `TaskCompleted` | When a task is being marked as completed |478| `TaskCompleted` | When a task is being marked as completed |

479| `Stop` | When Claude finishes responding |479| `Stop` | When Claude finishes responding |

480| `StopFailure` | When the turn ends due to an API error. Output and exit code are ignored |480| `StopFailure` | When the turn ends due to an API error. Output and exit code are ignored |

481| `TeammateIdle` | When an [agent team](/en/agent-teams) teammate is about to go idle |481| `TeammateIdle` | When an [agent team](/docs/en/agent-teams) teammate is about to go idle |

482| `InstructionsLoaded` | When a CLAUDE.md or `.claude/rules/*.md` file is loaded into context. Fires at session start and when files are lazily loaded during a session |482| `InstructionsLoaded` | When a CLAUDE.md or `.claude/rules/*.md` file is loaded into context. Fires at session start and when files are lazily loaded during a session |

483| `ConfigChange` | When a configuration file changes during a session |483| `ConfigChange` | When a configuration file changes during a session |

484| `CwdChanged` | When the working directory changes, for example when Claude executes a `cd` command. Useful for reactive environment management with tools like direnv |484| `CwdChanged` | When the working directory changes, for example when Claude executes a `cd` command. Useful for reactive environment management with tools like direnv |

485| `FileChanged` | When a watched file changes on disk. The `matcher` field specifies which filenames to watch |485| `FileChanged` | When a watched file changes on disk. The `matcher` field specifies which filenames to watch |

486| `WorktreeCreate` | When a worktree is being created via `--worktree` or `isolation: "worktree"`. Replaces default git behavior |486| `WorktreeCreate` | When a worktree is being created via `--worktree`, `isolation: "worktree"`, or for a background session. Replaces default git behavior |

487| `WorktreeRemove` | When a worktree is being removed, either at session exit or when a subagent finishes |487| `WorktreeRemove` | When a worktree is being removed at session exit, when a subagent finishes, or when you delete a background session |

488| `PreCompact` | Before context compaction |488| `PreCompact` | Before context compaction |

489| `PostCompact` | After context compaction completes |489| `PostCompact` | After context compaction completes |

490| `Elicitation` | When an MCP server requests user input during a tool call |490| `Elicitation` | When an MCP server requests user input during a tool call |


494Cada hook tiene un `type` que determina cómo se ejecuta. La mayoría de los hooks usan `"type": "command"`, que ejecuta un comando de shell. Hay otros cuatro tipos disponibles:494Cada hook tiene un `type` que determina cómo se ejecuta. La mayoría de los hooks usan `"type": "command"`, que ejecuta un comando de shell. Hay otros cuatro tipos disponibles:

495 495 

496* `"type": "http"`: POST de datos de evento a una URL. Consulta [HTTP hooks](#http-hooks).496* `"type": "http"`: POST de datos de evento a una URL. Consulta [HTTP hooks](#http-hooks).

497* `"type": "mcp_tool"`: llamar a una herramienta en un servidor MCP ya conectado. Consulta [MCP tool hooks](/es/hooks#mcp-tool-hook-fields).497* `"type": "mcp_tool"`: llamar a una herramienta en un servidor MCP ya conectado. Consulta [MCP tool hooks](/docs/es/hooks#mcp-tool-hook-fields).

498* `"type": "prompt"`: evaluación LLM de un solo turno. Consulta [Prompt-based hooks](#prompt-based-hooks).498* `"type": "prompt"`: evaluación LLM de un solo turno. Consulta [Prompt-based hooks](#prompt-based-hooks).

499* `"type": "agent"`: verificación multi-turno con acceso a herramientas. Los hooks de agente son experimentales y pueden cambiar. Consulta [Agent-based hooks](#agent-based-hooks).499* `"type": "agent"`: verificación multi-turno con acceso a herramientas. Los hooks de agente son experimentales y pueden cambiar. Consulta [Agent-based hooks](#agent-based-hooks).

500 500 


556}556}

557```557```

558 558 

559Tu script puede analizar ese JSON y actuar sobre cualquiera de esos campos. Los hooks `UserPromptSubmit` obtienen el texto `prompt` en su lugar, los hooks `SessionStart` obtienen la `source` (startup, resume, clear, compact), y así sucesivamente. Consulta [Campos de entrada comunes](/es/hooks#common-input-fields) en la referencia para campos compartidos, y la sección de cada evento para esquemas específicos del evento.559Tu script puede analizar ese JSON y actuar sobre cualquiera de esos campos. Los hooks `UserPromptSubmit` obtienen el texto `prompt` en su lugar, los hooks `SessionStart` obtienen la `source` (startup, resume, clear, compact), y así sucesivamente. Consulta [Campos de entrada comunes](/docs/es/hooks#common-input-fields) en la referencia para campos compartidos, y la sección de cada evento para esquemas específicos del evento.

560 560 

561<h4 id="hook-output">561<h4 id="hook-output">

562 Salida del hook562 Salida del hook


579 579 

580El código de salida determina qué sucede a continuación:580El código de salida determina qué sucede a continuación:

581 581 

582* **Exit 0**: el hook reporta sin objeción y la acción procede normalmente. Para un hook `PreToolUse` esto no aprueba la llamada a herramienta: el [flujo de permiso](/es/permissions) normal aún se aplica. Para hooks `UserPromptSubmit`, `UserPromptExpansion`, y `SessionStart`, cualquier cosa que escribas en stdout se añade al contexto de Claude.582* **Exit 0**: el hook reporta sin objeción y la acción procede normalmente. Para un hook `PreToolUse` esto no aprueba la llamada a herramienta: el [flujo de permiso](/docs/es/permissions) normal aún se aplica. Para hooks `UserPromptSubmit`, `UserPromptExpansion`, y `SessionStart`, cualquier cosa que escribas en stdout se añade al contexto de Claude.

583* **Exit 2**: la acción se bloquea. Escribe una razón en stderr, y Claude la recibe como retroalimentación para que pueda ajustar. Algunos eventos no pueden ser bloqueados: para `SessionStart`, `Setup`, `Notification`, y otros, exit 2 muestra stderr al usuario y la ejecución continúa. Consulta [comportamiento del código de salida 2 por evento](/es/hooks#exit-code-2-behavior-per-event) para la lista completa.583* **Exit 2**: la acción se bloquea. Escribe una razón en stderr, y Claude la recibe como retroalimentación para que pueda ajustar. Algunos eventos no pueden ser bloqueados: para `SessionStart`, `Setup`, `Notification`, y otros, exit 2 muestra stderr al usuario y la ejecución continúa. Consulta [comportamiento del código de salida 2 por evento](/docs/es/hooks#exit-code-2-behavior-per-event) para la lista completa.

584* **Cualquier otro código de salida**: la acción procede. La transcripción muestra un aviso `<hook name> hook error` seguido de la primera línea de stderr; el stderr completo va al [registro de depuración](/es/hooks#debug-hooks).584* **Cualquier otro código de salida**: la acción procede. La transcripción muestra un aviso `<hook name> hook error` seguido de la primera línea de stderr; el stderr completo va al [registro de depuración](/docs/es/hooks#debug-hooks).

585 585 

586<h4 id="structured-json-output">586<h4 id="structured-json-output">

587 Salida JSON estructurada587 Salida JSON estructurada


607 607 

608Con `"deny"`, Claude Code cancela la llamada a herramienta y alimenta `permissionDecisionReason` de vuelta a Claude. Estos valores `permissionDecision` son específicos de `PreToolUse`:608Con `"deny"`, Claude Code cancela la llamada a herramienta y alimenta `permissionDecisionReason` de vuelta a Claude. Estos valores `permissionDecision` son específicos de `PreToolUse`:

609 609 

610* `"allow"`: omite el aviso de permiso interactivo. Las reglas de negación y solicitud, incluyendo listas de negación gestionadas empresariales, aún se aplican, al igual que los avisos para herramientas de conector [que tu organización configuró como `ask`](/es/mcp#organization-controls-on-connector-tools) y herramientas MCP marcadas como [`requiresUserInteraction`](/es/mcp#require-approval-for-a-specific-tool)610* `"allow"`: omite el aviso de permiso interactivo. Las reglas de negación y solicitud, incluyendo listas de negación gestionadas empresariales, aún se aplican, al igual que los avisos para herramientas de conector [que tu organización configuró como `ask`](/docs/es/mcp#organization-controls-on-connector-tools) y herramientas MCP marcadas como [`requiresUserInteraction`](/docs/es/mcp#require-approval-for-a-specific-tool)

611* `"deny"`: cancela la llamada a herramienta y envía la razón a Claude611* `"deny"`: cancela la llamada a herramienta y envía la razón a Claude

612* `"ask"`: muestra el aviso de permiso al usuario como es normal612* `"ask"`: muestra el aviso de permiso al usuario como es normal

613 613 

614Un cuarto valor, `"defer"`, está disponible en [modo no interactivo](/es/headless) con la bandera `-p`. Sale del proceso con la llamada a herramienta preservada para que un envoltorio del SDK del Agente pueda recopilar entrada y reanudar. Consulta [Defer a tool call for later](/es/hooks#defer-a-tool-call-for-later) en la referencia.614Un cuarto valor, `"defer"`, está disponible en [modo no interactivo](/docs/es/headless) con la bandera `-p`. Sale del proceso con la llamada a herramienta preservada para que un envoltorio del SDK del Agente pueda recopilar entrada y reanudar. Consulta [Defer a tool call for later](/docs/es/hooks#defer-a-tool-call-for-later) en la referencia.

615 615 

616Devolver `"allow"` omite el aviso interactivo pero no anula [reglas de permiso](/es/permissions#manage-permissions). Si una regla de negación coincide con la llamada a herramienta, la llamada se bloquea incluso cuando tu hook devuelve `"allow"`. Si una regla de solicitud coincide, el usuario sigue siendo solicitado, al igual que las herramientas de conector [que tu organización configuró como `ask`](/es/mcp#organization-controls-on-connector-tools) y herramientas MCP marcadas como [`requiresUserInteraction`](/es/mcp#require-approval-for-a-specific-tool). Esto significa que las reglas de negación de cualquier ámbito de configuración, incluyendo [configuración gestionada](/es/settings#settings-files), siempre tienen prioridad sobre las aprobaciones de hooks.616Devolver `"allow"` omite el aviso interactivo pero no anula [reglas de permiso](/docs/es/permissions#manage-permissions). Si una regla de negación coincide con la llamada a herramienta, la llamada se bloquea incluso cuando tu hook devuelve `"allow"`. Si una regla de solicitud coincide, el usuario sigue siendo solicitado, al igual que las herramientas de conector [que tu organización configuró como `ask`](/docs/es/mcp#organization-controls-on-connector-tools) y herramientas MCP marcadas como [`requiresUserInteraction`](/docs/es/mcp#require-approval-for-a-specific-tool). Esto significa que las reglas de negación de cualquier ámbito de configuración, incluyendo [configuración gestionada](/docs/es/settings#settings-files), siempre tienen prioridad sobre las aprobaciones de hooks.

617 617 

618Otros eventos usan patrones de decisión diferentes. Por ejemplo, los hooks `PostToolUse` y `Stop` usan un campo `decision: "block"` de nivel superior, mientras que `PermissionRequest` usa `hookSpecificOutput.decision.behavior`. Consulta la [tabla de resumen](/es/hooks#decision-control) en la referencia para un desglose completo por evento.618Otros eventos usan patrones de decisión diferentes. Por ejemplo, los hooks `PostToolUse` y `Stop` usan un campo `decision: "block"` de nivel superior, mientras que `PermissionRequest` usa `hookSpecificOutput.decision.behavior`. Consulta la [tabla de resumen](/docs/es/hooks#decision-control) en la referencia para un desglose completo por evento.

619 619 

620Para hooks `UserPromptSubmit`, usa `hookSpecificOutput.additionalContext` en su lugar para inyectar texto en el contexto de Claude. Anida `additionalContext` dentro de `hookSpecificOutput`; si lo colocas en el nivel superior del JSON, Claude Code lo ignora silenciosamente. Por ejemplo, esta salida añade el estado de rama actual a cada aviso:620Para hooks `UserPromptSubmit`, usa `hookSpecificOutput.additionalContext` en su lugar para inyectar texto en el contexto de Claude. Anida `additionalContext` dentro de `hookSpecificOutput`; si lo colocas en el nivel superior del JSON, Claude Code lo ignora silenciosamente. Por ejemplo, esta salida añade el estado de rama actual a cada aviso:

621 621 


628}628}

629```629```

630 630 

631Consulta [UserPromptSubmit decision control](/es/hooks#userpromptsubmit-decision-control) para la forma de salida completa, incluyendo bloqueo de avisos y configuración del título de sesión.631Consulta [UserPromptSubmit decision control](/docs/es/hooks#userpromptsubmit-decision-control) para la forma de salida completa, incluyendo bloqueo de avisos y configuración del título de sesión.

632 632 

633Los hooks con `type: "prompt"` manejan la salida de manera diferente: consulta [Prompt-based hooks](#prompt-based-hooks).633Los hooks con `type: "prompt"` manejan la salida de manera diferente: consulta [Prompt-based hooks](#prompt-based-hooks).

634 634 


653}653}

654```654```

655 655 

656El matcher `"Edit|Write"` se activa solo cuando Claude usa la herramienta `Edit` o `Write`, no cuando usa `Bash`, `Read`, u otra herramienta. {/* min-version: 2.1.191 */}En Claude Code v2.1.191 o posterior, una coma separa alternativas de la misma manera, por lo que `"Edit, Write"` es equivalente. Consulta [Matcher patterns](/es/hooks#matcher-patterns) para cómo se evalúan los nombres simples y las expresiones regulares.656El matcher `"Edit|Write"` se activa solo cuando Claude usa la herramienta `Edit` o `Write`, no cuando usa `Bash`, `Read`, u otra herramienta. {/* min-version: 2.1.191 */}En Claude Code v2.1.191 o posterior, una coma separa alternativas de la misma manera, por lo que `"Edit, Write"` es equivalente. Consulta [Matcher patterns](/docs/es/hooks#matcher-patterns) para cómo se evalúan los nombres simples y las expresiones regulares.

657 657 

658<Note>658<Note>

659 Claude también puede crear o modificar archivos ejecutando comandos de shell a través de la herramienta `Bash`. Si tu hook debe ver cada cambio de archivo, como para escaneo de cumplimiento o registro de auditoría, añade un hook [`Stop`](/es/hooks#stop) que escanee el árbol de trabajo una vez por turno. Para cobertura por llamada en su lugar, también coincide con `Bash` y haz que tu script liste archivos modificados y sin seguimiento con `git status --porcelain`.659 Claude también puede crear o modificar archivos ejecutando comandos de shell a través de la herramienta `Bash`. Si tu hook debe ver cada cambio de archivo, como para escaneo de cumplimiento o registro de auditoría, añade un hook [`Stop`](/docs/es/hooks#stop) que escanee el árbol de trabajo una vez por turno. Para cobertura por llamada en su lugar, también coincide con `Bash` y haz que tu script liste archivos modificados y sin seguimiento con `git status --porcelain`.

660</Note>660</Note>

661 661 

662Cada tipo de evento coincide en un campo específico:662Cada tipo de evento coincide en un campo específico:


676| `InstructionsLoaded` | razón de carga | `session_start`, `nested_traversal`, `path_glob_match`, `include`, `compact` |676| `InstructionsLoaded` | razón de carga | `session_start`, `nested_traversal`, `path_glob_match`, `include`, `compact` |

677| `Elicitation` | nombre del servidor MCP | tus nombres de servidor MCP configurados |677| `Elicitation` | nombre del servidor MCP | tus nombres de servidor MCP configurados |

678| `ElicitationResult` | nombre del servidor MCP | los mismos valores que `Elicitation` |678| `ElicitationResult` | nombre del servidor MCP | los mismos valores que `Elicitation` |

679| `FileChanged` | nombres de archivo literales a observar (consulta [FileChanged](/es/hooks#filechanged)) | `.envrc\|.env` |679| `FileChanged` | nombres de archivo literales a observar (consulta [FileChanged](/docs/es/hooks#filechanged)) | `.envrc\|.env` |

680| `UserPromptExpansion` | nombre del comando | tus nombres de skill o comando |680| `UserPromptExpansion` | nombre del comando | tus nombres de skill o comando |

681| `UserPromptSubmit`, `PostToolBatch`, `Stop`, `TeammateIdle`, `TaskCreated`, `TaskCompleted`, `WorktreeCreate`, `WorktreeRemove`, `CwdChanged`, `MessageDisplay` | sin soporte de matcher | siempre se activa en cada ocurrencia |681| `UserPromptSubmit`, `PostToolBatch`, `Stop`, `TeammateIdle`, `TaskCreated`, `TaskCompleted`, `WorktreeCreate`, `WorktreeRemove`, `CwdChanged`, `MessageDisplay` | sin soporte de matcher | siempre se activa en cada ocurrencia |

682 682 


706 </Tab>706 </Tab>

707 707 

708 <Tab title="Coincide con herramientas MCP">708 <Tab title="Coincide con herramientas MCP">

709 Las herramientas MCP usan una convención de nombres diferente a las herramientas integradas: `mcp__<server>__<tool>`, donde `<server>` es el nombre del servidor MCP y `<tool>` es la herramienta que proporciona. Por ejemplo, `mcp__github__search_repositories` o `mcp__filesystem__read_file`. Las herramientas de un [servidor MCP proporcionado por plugin](/es/mcp#plugin-provided-mcp-servers) usan un segmento de servidor con ámbito en su lugar, como `mcp__plugin_my-plugin_db__query`. Usa un matcher regex para dirigirse a todas las herramientas de un servidor específico, o coincide entre servidores con un patrón como `mcp__.*__write.*`. Consulta [Match MCP tools](/es/hooks#match-mcp-tools) en la referencia para la lista completa de ejemplos.709 Las herramientas MCP usan una convención de nombres diferente a las herramientas integradas: `mcp__<server>__<tool>`, donde `<server>` es el nombre del servidor MCP y `<tool>` es la herramienta que proporciona. Por ejemplo, `mcp__github__search_repositories` o `mcp__filesystem__read_file`. Las herramientas de un [servidor MCP proporcionado por plugin](/docs/es/mcp#plugin-provided-mcp-servers) usan un segmento de servidor con ámbito en su lugar, como `mcp__plugin_my-plugin_db__query`. Usa un matcher regex para dirigirse a todas las herramientas de un servidor específico, o coincide entre servidores con un patrón como `mcp__.*__write.*`. Consulta [Match MCP tools](/docs/es/hooks#match-mcp-tools) en la referencia para la lista completa de ejemplos.

710 710 

711 El comando a continuación extrae el nombre de la herramienta de la entrada JSON del hook con `jq` y lo escribe en stderr. Escribir en stderr mantiene stdout limpio para salida JSON y envía el mensaje al [registro de depuración](/es/hooks#debug-hooks):711 El comando a continuación extrae el nombre de la herramienta de la entrada JSON del hook con `jq` y lo escribe en stderr. Escribir en stderr mantiene stdout limpio para salida JSON y envía el mensaje al [registro de depuración](/docs/es/hooks#debug-hooks):

712 712 

713 ```json theme={null}713 ```json theme={null}

714 {714 {


752 </Tab>752 </Tab>

753</Tabs>753</Tabs>

754 754 

755Para sintaxis de matcher completa, consulta la [referencia de Hooks](/es/hooks#configuration).755Para sintaxis de matcher completa, consulta la [referencia de Hooks](/docs/es/hooks#configuration).

756 756 

757<h4 id="filter-by-tool-name-and-arguments-with-the-if-field">757<h4 id="filter-by-tool-name-and-arguments-with-the-if-field">

758 Filtra por nombre de herramienta y argumentos con el campo `if`758 Filtra por nombre de herramienta y argumentos con el campo `if`

759</h4>759</h4>

760 760 

761El campo `if` usa [sintaxis de regla de permiso](/es/permissions) para filtrar hooks por nombre de herramienta y argumentos juntos, para que el proceso del hook solo se genere cuando la llamada a herramienta coincida. Esto va más allá de `matcher`, que filtra a nivel de grupo solo por nombre de herramienta.761El campo `if` usa [sintaxis de regla de permiso](/docs/es/permissions) para filtrar hooks por nombre de herramienta y argumentos juntos, para que el proceso del hook solo se genere cuando la llamada a herramienta coincida. Esto va más allá de `matcher`, que filtra a nivel de grupo solo por nombre de herramienta.

762 762 

763Por ejemplo, esta configuración ejecuta un hook solo cuando Claude usa comandos `git` en lugar de todos los comandos Bash:763Por ejemplo, esta configuración ejecuta un hook solo cuando Claude usa comandos `git` en lugar de todos los comandos Bash:

764 764 


791| `Bash(git *)` | `echo $(date)` | no | ningún subcomando coincide con `git *` |791| `Bash(git *)` | `echo $(date)` | no | ningún subcomando coincide con `git *` |

792| `Bash(git push *)` | `echo $(date)` | sí | los patrones que especifican más que el nombre del comando ejecutan el hook de todas formas en `$()`, backticks, o `$VAR` |792| `Bash(git push *)` | `echo $(date)` | sí | los patrones que especifican más que el nombre del comando ejecutan el hook de todas formas en `$()`, backticks, o `$VAR` |

793 793 

794El filtro también falla abierto, ejecutando tu hook independientemente del patrón, cuando el comando Bash no puede ser analizado. Porque el filtro es mejor esfuerzo, usa el [sistema de permisos](/es/permissions) en lugar de un hook para aplicar un allow o deny duro.794El filtro también falla abierto, ejecutando tu hook independientemente del patrón, cuando el comando Bash no puede ser analizado. Porque el filtro es mejor esfuerzo, usa el [sistema de permisos](/docs/es/permissions) en lugar de un hook para aplicar un allow o deny duro.

795 795 

796El campo `if` acepta los mismos patrones que las reglas de permiso: `"Bash(git *)"`, `"Edit(*.ts)"`, y así sucesivamente. Para coincidir con múltiples nombres de herramienta, usa manejadores separados cada uno con su propio valor `if`, o coincide a nivel de `matcher` donde se soporta alternancia de tuberías.796El campo `if` acepta los mismos patrones que las reglas de permiso: `"Bash(git *)"`, `"Edit(*.ts)"`, y así sucesivamente. Para coincidir con múltiples nombres de herramienta, usa manejadores separados cada uno con su propio valor `if`, o coincide a nivel de `matcher` donde se soporta alternancia de tuberías.

797 797 


809| `.claude/settings.json` | Proyecto único | Sí, puede ser confirmado en el repositorio |809| `.claude/settings.json` | Proyecto único | Sí, puede ser confirmado en el repositorio |

810| `.claude/settings.local.json` | Proyecto único | No, gitignored cuando Claude Code lo crea |810| `.claude/settings.local.json` | Proyecto único | No, gitignored cuando Claude Code lo crea |

811| Configuración de política gestionada | Organización completa | Sí, controlado por administrador |811| Configuración de política gestionada | Organización completa | Sí, controlado por administrador |

812| [Plugin](/es/plugins) `hooks/hooks.json` | Cuando el plugin está habilitado | Sí, incluido con el plugin |812| [Plugin](/docs/es/plugins) `hooks/hooks.json` | Cuando el plugin está habilitado | Sí, incluido con el plugin |

813| [Skill](/es/skills) o [agente](/es/sub-agents) frontmatter | Mientras el skill o agente está activo | Sí, definido en el archivo del componente |813| [Skill](/docs/es/skills) o [agente](/docs/es/sub-agents) frontmatter | Mientras el skill o agente está activo | Sí, definido en el archivo del componente |

814 814 

815Ejecuta [`/hooks`](/es/hooks#the-%2Fhooks-menu) en Claude Code para examinar todos los hooks configurados agrupados por evento.815Ejecuta [`/hooks`](/docs/es/hooks#the-%2Fhooks-menu) en Claude Code para examinar todos los hooks configurados agrupados por evento.

816 816 

817Para desactivar hooks, establece `"disableAllHooks": true` en tu archivo de configuración. Los hooks configurados en configuración gestionada aún se ejecutan a menos que `disableAllHooks` también esté establecido allí.817Para desactivar hooks, establece `"disableAllHooks": true` en tu archivo de configuración. Los hooks configurados en configuración gestionada aún se ejecutan a menos que `disableAllHooks` también esté establecido allí.

818 818 


851}851}

852```852```

853 853 

854Para opciones de configuración completas, consulta [Hooks basados en prompts](/es/hooks#prompt-based-hooks) en la referencia.854Para opciones de configuración completas, consulta [Hooks basados en prompts](/docs/es/hooks#prompt-based-hooks) en la referencia.

855 855 

856<h2 id="agent-based-hooks">856<h2 id="agent-based-hooks">

857 Hooks basados en agentes857 Hooks basados en agentes

858</h2>858</h2>

859 859 

860<Warning>860<Warning>

861 Los hooks de agente son experimentales. El comportamiento y la configuración pueden cambiar en futuras versiones. Para flujos de trabajo de producción, prefiere [hooks de comando](/es/hooks#command-hook-fields).861 Los hooks de agente son experimentales. El comportamiento y la configuración pueden cambiar en futuras versiones. Para flujos de trabajo de producción, prefiere [hooks de comando](/docs/es/hooks#command-hook-fields).

862</Warning>862</Warning>

863 863 

864Cuando la verificación requiere inspeccionar archivos o ejecutar comandos, usa hooks `type: "agent"`. A diferencia de los hooks de prompt que hacen una sola llamada LLM, los hooks de agente generan un subagente que puede leer archivos, buscar código y usar otras herramientas para verificar condiciones antes de devolver una decisión.864Cuando la verificación requiere inspeccionar archivos o ejecutar comandos, usa hooks `type: "agent"`. A diferencia de los hooks de prompt que hacen una sola llamada LLM, los hooks de agente generan un subagente que puede leer archivos, buscar código y usar otras herramientas para verificar condiciones antes de devolver una decisión.


887 887 

888Usa hooks de prompt cuando los datos de entrada del hook por sí solos son suficientes para tomar una decisión. Usa hooks de agente cuando necesites verificar algo contra el estado real del código base.888Usa hooks de prompt cuando los datos de entrada del hook por sí solos son suficientes para tomar una decisión. Usa hooks de agente cuando necesites verificar algo contra el estado real del código base.

889 889 

890Para opciones de configuración completas, consulta [Hooks basados en agentes](/es/hooks#agent-based-hooks) en la referencia.890Para opciones de configuración completas, consulta [Hooks basados en agentes](/docs/es/hooks#agent-based-hooks) en la referencia.

891 891 

892<h2 id="http-hooks">892<h2 id="http-hooks">

893 HTTP hooks893 HTTP hooks


920}920}

921```921```

922 922 

923El punto final debe devolver un cuerpo de respuesta JSON usando el mismo [formato de salida](/es/hooks#json-output) que los hooks de comando. Para bloquear una llamada a herramienta, devuelve una respuesta 2xx con los campos `hookSpecificOutput` apropiados. Los códigos de estado HTTP por sí solos no pueden bloquear acciones.923El punto final debe devolver un cuerpo de respuesta JSON usando el mismo [formato de salida](/docs/es/hooks#json-output) que los hooks de comando. Para bloquear una llamada a herramienta, devuelve una respuesta 2xx con los campos `hookSpecificOutput` apropiados. Los códigos de estado HTTP por sí solos no pueden bloquear acciones.

924 924 

925Los valores de encabezado soportan interpolación de variables de entorno usando la sintaxis `$VAR_NAME` o `${VAR_NAME}`. Solo las variables listadas en el array `allowedEnvVars` se resuelven; todas las otras referencias `$VAR` permanecen vacías.925Los valores de encabezado soportan interpolación de variables de entorno usando la sintaxis `$VAR_NAME` o `${VAR_NAME}`. Solo las variables listadas en el array `allowedEnvVars` se resuelven; todas las otras referencias `$VAR` permanecen vacías.

926 926 

927Para opciones de configuración completas y manejo de respuestas, consulta [HTTP hooks](/es/hooks#http-hook-fields) en la referencia.927Para opciones de configuración completas y manejo de respuestas, consulta [HTTP hooks](/docs/es/hooks#http-hook-fields) en la referencia.

928 928 

929<h2 id="limitations-and-troubleshooting">929<h2 id="limitations-and-troubleshooting">

930 Limitaciones y solución de problemas930 Limitaciones y solución de problemas


942 * `prompt`: 30 segundos.942 * `prompt`: 30 segundos.

943 * `agent`: 60 segundos.943 * `agent`: 60 segundos.

944* Los hooks `PostToolUse` no pueden deshacer acciones ya que la herramienta ya se ha ejecutado.944* Los hooks `PostToolUse` no pueden deshacer acciones ya que la herramienta ya se ha ejecutado.

945* Los hooks `PermissionRequest` no se activan en [modo no interactivo](/es/headless) con la bandera `-p`. Use hooks `PreToolUse` para decisiones de permiso automatizadas.945* Los hooks `PermissionRequest` no se activan en [modo no interactivo](/docs/es/headless) con la bandera `-p`. Use hooks `PreToolUse` para decisiones de permiso automatizadas.

946* Los hooks `Stop` se activan cada vez que Claude termina de responder, no solo en la finalización de tareas. No se activan en interrupciones del usuario. Los errores de API activan [StopFailure](/es/hooks#stopfailure) en su lugar.946* Los hooks `Stop` se activan cada vez que Claude termina de responder, no solo en la finalización de tareas. No se activan en interrupciones del usuario. Los errores de API activan [StopFailure](/docs/es/hooks#stopfailure) en su lugar.

947* Cuando múltiples hooks `PreToolUse` devuelven [`updatedInput`](/es/hooks#pretooluse) para reescribir los argumentos de una herramienta, el último en terminar gana. Como los hooks se ejecutan en paralelo, el orden es no determinista. Evite tener más de un hook modificando la entrada de la misma herramienta.947* Cuando múltiples hooks `PreToolUse` devuelven [`updatedInput`](/docs/es/hooks#pretooluse) para reescribir los argumentos de una herramienta, el último en terminar gana. Como los hooks se ejecutan en paralelo, el orden es no determinista. Evite tener más de un hook modificando la entrada de la misma herramienta.

948 948 

949<h3 id="hooks-and-permission-modes">949<h3 id="hooks-and-permission-modes">

950 Hooks y modos de permiso950 Hooks y modos de permiso


952 952 

953Los hooks `PreToolUse` se activan antes de cualquier verificación de modo de permiso. Un hook que devuelve `permissionDecision: "deny"` bloquea la herramienta incluso en modo `bypassPermissions` o con `--dangerously-skip-permissions`. Esto le permite aplicar política que los usuarios no pueden eludir cambiando su modo de permiso.953Los hooks `PreToolUse` se activan antes de cualquier verificación de modo de permiso. Un hook que devuelve `permissionDecision: "deny"` bloquea la herramienta incluso en modo `bypassPermissions` o con `--dangerously-skip-permissions`. Esto le permite aplicar política que los usuarios no pueden eludir cambiando su modo de permiso.

954 954 

955Lo inverso no es cierto: un hook que devuelve `"allow"` no elude reglas de negación de configuración, y no puede suprimir la solicitud de herramientas conectoras [que su organización estableció en `ask`](/es/mcp#organization-controls-on-connector-tools) o herramientas MCP marcadas [`requiresUserInteraction`](/es/mcp#require-approval-for-a-specific-tool). Los hooks pueden endurecer restricciones pero no relajarlas más allá de lo que las reglas de permiso permiten.955Lo inverso no es cierto: un hook que devuelve `"allow"` no elude reglas de negación de configuración, y no puede suprimir la solicitud de herramientas conectoras [que su organización estableció en `ask`](/docs/es/mcp#organization-controls-on-connector-tools) o herramientas MCP marcadas [`requiresUserInteraction`](/docs/es/mcp#require-approval-for-a-specific-tool). Los hooks pueden endurecer restricciones pero no relajarlas más allá de lo que las reglas de permiso permiten.

956 956 

957<h3 id="hook-not-firing">957<h3 id="hook-not-firing">

958 Hook no se activa958 Hook no se activa


976 echo '{"tool_name":"Bash","tool_input":{"command":"ls"}}' | ./my-hook.sh976 echo '{"tool_name":"Bash","tool_input":{"command":"ls"}}' | ./my-hook.sh

977 echo $? # Verifica el código de salida977 echo $? # Verifica el código de salida

978 ```978 ```

979* Si ves "command not found", usa rutas absolutas o `${CLAUDE_PROJECT_DIR}` para referenciar scripts. Para evitar entrecomillado de shell por completo, añade `"args": []` para cambiar a [forma exec](/es/hooks#exec-form-and-shell-form), que genera el script directamente sin un shell979* Si ves "command not found", usa rutas absolutas o `${CLAUDE_PROJECT_DIR}` para referenciar scripts. Para evitar entrecomillado de shell por completo, añade `"args": []` para cambiar a [forma exec](/docs/es/hooks#exec-form-and-shell-form), que genera el script directamente sin un shell

980* Si ves "jq: command not found", instala `jq` o usa Python/Node.js para análisis JSON980* Si ves "jq: command not found", instala `jq` o usa Python/Node.js para análisis JSON

981* Si el script no se ejecuta en absoluto, hazlo ejecutable: `chmod +x ./my-hook.sh`981* Si el script no se ejecuta en absoluto, hazlo ejecutable: `chmod +x ./my-hook.sh`

982 982 


1007# ... resto de tu lógica de hook1007# ... resto de tu lógica de hook

1008```1008```

1009 1009 

1010Si tu hook legítimamente necesita más de ocho iteraciones para converger, aumenta el límite con [`CLAUDE_CODE_STOP_HOOK_BLOCK_CAP`](/es/env-vars).1010Si tu hook legítimamente necesita más de ocho iteraciones para converger, aumenta el límite con [`CLAUDE_CODE_STOP_HOOK_BLOCK_CAP`](/docs/es/env-vars).

1011 1011 

1012<h3 id="json-validation-failed">1012<h3 id="json-validation-failed">

1013 Falló la validación JSON1013 Falló la validación JSON


1045 Aprende más1045 Aprende más

1046</h2>1046</h2>

1047 1047 

1048* [Referencia de Hooks](/es/hooks): esquemas de eventos completos, formato de salida JSON, hooks asincronos y hooks de herramientas MCP1048* [Referencia de Hooks](/docs/es/hooks): esquemas de eventos completos, formato de salida JSON, hooks asincronos y hooks de herramientas MCP

1049* [Consideraciones de seguridad](/es/hooks#security-considerations): revisa antes de desplegar hooks en entornos compartidos o de producción1049* [Consideraciones de seguridad](/docs/es/hooks#security-considerations): revisa antes de desplegar hooks en entornos compartidos o de producción

1050* [Ejemplo de validador de comandos Bash](https://github.com/anthropics/claude-code/blob/main/examples/hooks/bash_command_validator_example.py): implementación de referencia completa1050* [Ejemplo de validador de comandos Bash](https://github.com/anthropics/claude-code/blob/main/examples/hooks/bash_command_validator_example.py): implementación de referencia completa

Details

27 27 

28En todos los modos excepto `bypassPermissions`, las escrituras en [rutas protegidas](#protected-paths) nunca se aprueban automáticamente, protegiendo el estado del repositorio y la configuración de Claude contra corrupción accidental.28En todos los modos excepto `bypassPermissions`, las escrituras en [rutas protegidas](#protected-paths) nunca se aprueban automáticamente, protegiendo el estado del repositorio y la configuración de Claude contra corrupción accidental.

29 29 

30Los modos establecen la línea base. Superponga [reglas de permisos](/es/permissions#manage-permissions) para preaprobación o bloqueo de herramientas específicas. Las reglas de denegación y las reglas de solicitud explícita se aplican en todos los modos, incluido `bypassPermissions`. Las reglas de permitir no tienen efecto en ese modo porque todo lo demás ya está aprobado.30Los modos establecen la línea base. Superponga [reglas de permisos](/es/permissions#manage-permissions) en la parte superior para preaprobación o bloqueo de herramientas específicas. Las reglas de denegación, las reglas de solicitud explícita, la [configuración de `ask` de la organización en herramientas de conector](/es/mcp#organization-controls-on-connector-tools) y el marcador [`requiresUserInteraction`](/es/mcp#require-approval-for-a-specific-tool) se aplican en todos los modos, incluido `bypassPermissions`. Las reglas de permitir no tienen efecto en ese modo porque todo lo demás ya está aprobado.

31 31 

32<h2 id="switch-permission-modes">32<h2 id="switch-permission-modes">

33 Cambiar modos de permisos33 Cambiar modos de permisos


137 137 

138El modo `acceptEdits` permite que Claude cree y edite archivos en su directorio de trabajo sin solicitar confirmación. La barra de estado muestra `⏵⏵ accept edits on` mientras este modo está activo.138El modo `acceptEdits` permite que Claude cree y edite archivos en su directorio de trabajo sin solicitar confirmación. La barra de estado muestra `⏵⏵ accept edits on` mientras este modo está activo.

139 139 

140Además de las ediciones de archivos, el modo `acceptEdits` aprueba automáticamente comandos Bash comunes del sistema de archivos: `mkdir`, `touch`, `rm`, `rmdir`, `mv`, `cp` y `sed`. Estos comandos también se aprueban automáticamente cuando van precedidos de variables de entorno seguras como `LANG=C` o `NO_COLOR=1`, o envoltorios de procesos como `timeout`, `nice` o `nohup`. Al igual que las ediciones de archivos, la aprobación automática se aplica solo a las rutas dentro de su directorio de trabajo o `additionalDirectories`. Las rutas fuera de ese alcance, las escrituras en [rutas protegidas](#protected-paths) y todos los demás comandos Bash aún solicitan confirmación.140Además de las ediciones de archivos, el modo `acceptEdits` aprueba automáticamente comandos Bash comunes del sistema de archivos: `mkdir`, `touch`, `rm`, `rmdir`, `mv`, `cp` y `sed`. Estos comandos también se aprueban automáticamente cuando van precedidos de variables de entorno seguras como `LANG=C` o `NO_COLOR=1`, o envoltorios de procesos como `timeout`, `nice` o `nohup`. Al igual que las ediciones de archivos, la aprobación automática se aplica solo a las rutas dentro de su directorio de trabajo o `additionalDirectories`. Las rutas fuera de ese alcance, las escrituras en [rutas protegidas](#protected-paths) y todos los demás comandos Bash excepto el [conjunto integrado de solo lectura](/es/permissions#read-only-commands) aún solicitan confirmación.

141 141 

142Cuando la [herramienta PowerShell](/es/tools-reference#powershell-tool) está habilitada, el modo `acceptEdits` también aprueba automáticamente `Set-Content`, `Add-Content`, `Clear-Content` y `Remove-Item` en rutas dentro del alcance, junto con sus alias comunes. Se aplican las mismas reglas de alcance y rutas protegidas.142Cuando la [herramienta PowerShell](/es/tools-reference#powershell-tool) está habilitada, el modo `acceptEdits` también aprueba automáticamente `Set-Content`, `Add-Content`, `Clear-Content` y `Remove-Item` en rutas dentro del alcance, junto con sus alias comunes. Se aplican las mismas reglas de alcance y rutas protegidas.

143 143 


201 201 

202El modo automático permite que Claude se ejecute sin solicitudes de permiso rutinarias. Un modelo clasificador separado revisa las acciones antes de que se ejecuten, bloqueando cualquier cosa que escale más allá de su solicitud, se dirija a infraestructura no reconocida o parezca impulsada por contenido hostil que Claude haya leído. Las [reglas de solicitud](/es/permissions#manage-permissions) explícitas aún fuerzan una solicitud.202El modo automático permite que Claude se ejecute sin solicitudes de permiso rutinarias. Un modelo clasificador separado revisa las acciones antes de que se ejecuten, bloqueando cualquier cosa que escale más allá de su solicitud, se dirija a infraestructura no reconocida o parezca impulsada por contenido hostil que Claude haya leído. Las [reglas de solicitud](/es/permissions#manage-permissions) explícitas aún fuerzan una solicitud.

203 203 

204Las eliminaciones dirigidas al directorio raíz del sistema de archivos o al directorio de inicio, como `rm -rf /` y `rm -rf ~`, solicitan aprobación en lugar de ir al clasificador. {/* min-version: 2.1.208 */}Esta solicitud también se activa cuando el comando contiene sustitución de comandos con `$(...)` o comillas invertidas, o sustitución de procesos con `<(...)`, ya sea que la eliminación esté dentro de la sustitución, como en `echo "$(rm -rf ~)"`, o en otro lugar del mismo comando. Antes de v2.1.208, los comandos que contenían esas formas iban al clasificador en lugar de solicitar.

205 

204El modo automático también anima a Claude a seguir trabajando sin detenerse para hacer preguntas aclaratorias, aunque Claude aún pregunta cuando su solicitud o una skill depende explícitamente de ello. Para un comportamiento más autónomo mientras se mantienen las solicitudes de permiso, establezca el [estilo de salida proactivo](/es/output-styles) en su lugar.206El modo automático también anima a Claude a seguir trabajando sin detenerse para hacer preguntas aclaratorias, aunque Claude aún pregunta cuando su solicitud o una skill depende explícitamente de ello. Para un comportamiento más autónomo mientras se mantienen las solicitudes de permiso, establezca el [estilo de salida proactivo](/es/output-styles) en su lugar.

205 207 

206<Warning>208<Warning>


301* Leer `.env` y enviar credenciales a su API coincidente303* Leer `.env` y enviar credenciales a su API coincidente

302* Solicitudes HTTP de solo lectura304* Solicitudes HTTP de solo lectura

303* Hacer push a la rama en la que comenzó o una que Claude creó305* Hacer push a la rama en la que comenzó o una que Claude creó

306* {/* min-version: 2.1.203 */}Pushes rutinarios a la rama predeterminada del repositorio. Antes de v2.1.203, cualquier push directo a la rama predeterminada se bloqueaba

304 307 

305Claude Code v2.1.195 y posterior también permiten estos por defecto:308Claude Code v2.1.195 y posterior también permiten estos por defecto:

306 309 


319 322 

320Ejecute `claude auto-mode defaults` para ver las listas de reglas completas. Si las acciones rutinarias se bloquean, un administrador puede agregar repositorios, buckets y servicios de confianza a través de la configuración `autoMode.environment`: consulte [Configurar modo automático](/es/auto-mode-config).323Ejecute `claude auto-mode defaults` para ver las listas de reglas completas. Si las acciones rutinarias se bloquean, un administrador puede agregar repositorios, buckets y servicios de confianza a través de la configuración `autoMode.environment`: consulte [Configurar modo automático](/es/auto-mode-config).

321 324 

325Hacer push a su rama de trabajo, hacer un push rutinario a la rama predeterminada del repositorio y crear una solicitud de extracción que coincida con su solicitud se ejecutan sin una solicitud. El clasificador bloquea un push solo cuando lleva riesgo, como un force push o contenido que evita una revisión que configuró. Para requerir un punto de control humano antes de estas acciones mientras permanece en modo automático, agregue reglas `permissions.ask`: consulte [Límites comunes](/es/auto-mode-config#common-boundaries).

326 

322<h3 id="boundaries-you-state-in-conversation">327<h3 id="boundaries-you-state-in-conversation">

323 Límites que establece en la conversación328 Límites que establece en la conversación

324</h3>329</h3>


343 <Accordion title="Cómo el clasificador evalúa acciones">348 <Accordion title="Cómo el clasificador evalúa acciones">

344 Cada acción pasa por un orden de decisión fijo. El primer paso coincidente gana:349 Cada acción pasa por un orden de decisión fijo. El primer paso coincidente gana:

345 350 

346 1. Las acciones que coinciden con sus [reglas de permiso o rechazo](/es/permissions#manage-permissions) se resuelven inmediatamente, excepto las escrituras en [rutas protegidas](#protected-paths), que se enrutan al clasificador incluso cuando una regla de permiso coincide351 1. Las acciones que coinciden con sus [reglas de permiso, solicitud o rechazo](/es/permissions#manage-permissions) se resuelven inmediatamente. Las escrituras en [rutas protegidas](#protected-paths) se enrutan al clasificador incluso cuando una regla de permiso coincide. Las herramientas de conector [que su organización estableció en `ask`](/es/mcp#organization-controls-on-connector-tools) y las herramientas MCP marcadas [`requiresUserInteraction`](/es/mcp#require-approval-for-a-specific-tool) le solicitan directamente incluso cuando una regla de permiso coincide. Las reglas de solicitud con alcance de contenido retroceden a una solicitud de permiso

347 2. Las acciones de solo lectura y ediciones de archivo en su directorio de trabajo se aprueban automáticamente, excepto las escrituras en [rutas protegidas](#protected-paths)352 2. Las acciones de solo lectura y ediciones de archivo en su directorio de trabajo se aprueban automáticamente, excepto las escrituras en [rutas protegidas](#protected-paths)

348 3. Todo lo demás va al clasificador. {/* min-version: 2.1.199 */}A partir de v2.1.199, una herramienta MCP marcada con [`_meta["anthropic/requiresUserInteraction"]`](/es/mcp#require-approval-for-a-specific-tool) omite el clasificador y le solicita directamente, por lo que un paso de consentimiento nunca se aprueba automáticamente en nombre del autor de la herramienta353 3. Todo lo demás va al clasificador. Una herramienta de conector [que su organización estableció en `ask`](/es/mcp#organization-controls-on-connector-tools) omite el clasificador y le solicita directamente, por lo que una aprobación requerida por la organización nunca se aprueba automáticamente. {/* min-version: 2.1.199 */}A partir de v2.1.199, una herramienta MCP marcada con [`_meta["anthropic/requiresUserInteraction"]`](/es/mcp#require-approval-for-a-specific-tool) también omite el clasificador y le solicita directamente, por lo que un paso de consentimiento nunca se aprueba automáticamente en nombre del autor de la herramienta

349 4. Si el clasificador bloquea, Claude recibe la razón e intenta una alternativa354 4. Si el clasificador bloquea, Claude recibe la razón e intenta una alternativa

350 355 

351 Al entrar en modo automático, se descartan las reglas de permiso amplias que otorgan ejecución de código arbitraria:356 Al entrar en modo automático, se descartan las reglas de permiso amplias que otorgan ejecución de código arbitraria:


379 Permitir solo herramientas preaprobadas con el modo dontAsk384 Permitir solo herramientas preaprobadas con el modo dontAsk

380</h2>385</h2>

381 386 

382El modo `dontAsk` deniega automáticamente cada llamada de herramienta que de otro modo solicitaría confirmación. La barra de estado muestra `⏵⏵ don't ask on` mientras este modo está activo. Solo las acciones que coincidan con sus reglas `permissions.allow` y [comandos Bash de solo lectura](/es/permissions#read-only-commands) pueden ejecutarse; las reglas explícitas de [`ask`](/es/permissions#manage-permissions) se deniegan en lugar de solicitar confirmación. {/* min-version: 2.1.199 */}A partir de v2.1.199, una herramienta MCP marcada con [`_meta["anthropic/requiresUserInteraction"]`](/es/mcp#require-approval-for-a-specific-tool) también se deniega en este modo incluso cuando una regla de permiso coincide, porque su tarjeta de aprobación necesita una respuesta que este modo nunca recopila. Esto hace que el modo sea completamente no interactivo para canalizaciones de CI o entornos restringidos donde predefine exactamente qué puede hacer Claude. Las sesiones en la nube en [Claude Code en la web](/es/claude-code-on-the-web) ignoran `defaultMode: "dontAsk"`; consulte [bypassPermissions](#skip-all-checks-with-bypasspermissions-mode) para obtener más detalles.387Si establece el modo `dontAsk`, Claude Code deniega automáticamente cada llamada de herramienta que de otro modo le solicitaría confirmación. Claude ejecuta solo acciones que coincidan con sus reglas `permissions.allow`, [comandos Bash de solo lectura](/es/permissions#read-only-commands) y llamadas aprobadas por un [hook PreToolUse](/es/permissions#extend-permissions-with-hooks). Utilice este modo para canalizaciones de CI o entornos restringidos donde predefine exactamente qué puede hacer Claude; la sesión nunca espera entrada. La barra de estado muestra `⏵⏵ don't ask on` mientras este modo está activo.

388 

389Claude Code deniega llamadas que coincidan con sus reglas explícitas de [`ask`](/es/permissions#manage-permissions) en lugar de solicitar confirmación. También deniega la herramienta integrada `AskUserQuestion` y las herramientas de conector [que su organización estableció en `ask`](/es/mcp#organization-controls-on-connector-tools), incluso si sus reglas de permiso coinciden. {/* min-version: 2.1.199 */}Deniega las herramientas MCP marcadas como [`_meta["anthropic/requiresUserInteraction"]`](/es/mcp#require-approval-for-a-specific-tool) de la misma manera, porque su tarjeta de aprobación necesita una respuesta que este modo nunca recopila; esto requiere Claude Code v2.1.199 o posterior.

390 

391Las sesiones en la nube en [Claude Code en la web](/es/claude-code-on-the-web) ignoran `defaultMode: "dontAsk"`; consulte [bypassPermissions](#skip-all-checks-with-bypasspermissions-mode) para obtener más detalles.

383 392 

384Configúrelo al inicio con la bandera:393Configúrelo al inicio con la bandera:

385 394 


391 Omitir todas las comprobaciones con el modo bypassPermissions400 Omitir todas las comprobaciones con el modo bypassPermissions

392</h2>401</h2>

393 402 

394El modo `bypassPermissions` desactiva los avisos de permisos y las comprobaciones de seguridad para que las llamadas a herramientas se ejecuten inmediatamente. A partir de v2.1.126, esto incluye escrituras en [rutas protegidas](#protected-paths), que las versiones anteriores aún solicitaban. Las [reglas ask](/es/permissions#manage-permissions) explícitas aún fuerzan un aviso en este modo, y las eliminaciones dirigidas al directorio raíz del sistema de archivos o al directorio de inicio, como `rm -rf /` y `rm -rf ~`, aún solicitan confirmación como un cortacircuitos contra errores del modelo. {/* min-version: 2.1.199 */}A partir de v2.1.199, las herramientas MCP marcadas con [`_meta["anthropic/requiresUserInteraction"]`](/es/mcp#require-approval-for-a-specific-tool) también aún solicitan confirmación. Utilice este modo solo en entornos aislados como contenedores, máquinas virtuales o dev containers sin acceso a Internet, donde Claude Code no pueda dañar su sistema anfitrión.403El modo `bypassPermissions` desactiva los avisos de permisos y las comprobaciones de seguridad para que las llamadas a herramientas se ejecuten inmediatamente, incluidas las escrituras en [rutas protegidas](#protected-paths). Antes de v2.1.126, las escrituras en rutas protegidas aún solicitaban confirmación en este modo.

404 

405Las [reglas ask](/es/permissions#manage-permissions) explícitas y las herramientas de conector [que su organización configuró como `ask`](/es/mcp#organization-controls-on-connector-tools) aún fuerzan un aviso en este modo. {/* min-version: 2.1.199 */}Las herramientas MCP marcadas con [`_meta["anthropic/requiresUserInteraction"]`](/es/mcp#require-approval-for-a-specific-tool) también aún solicitan confirmación; esto requiere Claude Code v2.1.199 o posterior.

406 

407Las eliminaciones dirigidas al directorio raíz del sistema de archivos o al directorio de inicio, como `rm -rf /` y `rm -rf ~`, aún solicitan confirmación como un cortacircuitos contra errores del modelo. {/* min-version: 2.1.208 */}El cortacircuitos también se activa cuando el comando contiene sustitución de comandos con `$(...)` o comillas invertidas, o sustitución de procesos con `<(...)`, ya sea que la eliminación esté dentro de la sustitución, como en `echo "$(rm -rf ~)"`, o en otro lugar del mismo comando. La forma simple, escrita como su propio comando, ha solicitado confirmación en este modo desde que se introdujo el cortacircuitos; antes de v2.1.208, los comandos que contenían esas formas no solicitaban confirmación.

408 

409<Warning>

410 Utilice este modo solo en entornos aislados como contenedores, máquinas virtuales o dev containers sin acceso a Internet, donde Claude Code no pueda dañar su sistema anfitrión.

411</Warning>

395 412 

396No puede entrar en `bypassPermissions` desde una sesión que se inició sin una de las banderas de habilitación; reinicie con una para habilitarlo:413No puede entrar en `bypassPermissions` desde una sesión que se inició sin una de las banderas de habilitación; reinicie con una para habilitarlo:

397 414 

Details

7> Referencia técnica completa para el sistema de plugins de Claude Code, incluyendo esquemas, comandos CLI y especificaciones de componentes.7> Referencia técnica completa para el sistema de plugins de Claude Code, incluyendo esquemas, comandos CLI y especificaciones de componentes.

8 8 

9<Tip>9<Tip>

10 ¿Buscas instalar plugins? Consulta [Descubrir e instalar plugins](/es/discover-plugins). Para crear plugins, consulta [Plugins](/es/plugins). Para distribuir plugins, consulta [Marketplaces de plugins](/es/plugin-marketplaces).10 ¿Buscas instalar plugins? Consulta [Descubrir e instalar plugins](/docs/es/discover-plugins). Para crear plugins, consulta [Plugins](/docs/es/plugins). Para distribuir plugins, consulta [Marketplaces de plugins](/docs/es/plugin-marketplaces).

11</Tip>11</Tip>

12 12 

13Esta referencia proporciona especificaciones técnicas completas para el sistema de plugins de Claude Code, incluyendo esquemas de componentes, comandos CLI y herramientas de desarrollo.13Esta referencia proporciona especificaciones técnicas completas para el sistema de plugins de Claude Code, incluyendo esquemas de componentes, comandos CLI y herramientas de desarrollo.


48 48 

49Si un plugin no tiene un directorio `skills/` y ningún campo de manifiesto `skills`, un `SKILL.md` en la raíz del plugin se carga como una única skill. Establezca el campo frontmatter `name` para controlar el nombre de invocación de la skill. Sin él, Claude Code recurre al nombre del directorio de instalación, que para plugins instalados desde el marketplace es una cadena de versión que cambia en cada actualización. Para plugins que distribuyen más de una skill, use el diseño de directorio `skills/` mostrado arriba.49Si un plugin no tiene un directorio `skills/` y ningún campo de manifiesto `skills`, un `SKILL.md` en la raíz del plugin se carga como una única skill. Establezca el campo frontmatter `name` para controlar el nombre de invocación de la skill. Sin él, Claude Code recurre al nombre del directorio de instalación, que para plugins instalados desde el marketplace es una cadena de versión que cambia en cada actualización. Para plugins que distribuyen más de una skill, use el diseño de directorio `skills/` mostrado arriba.

50 50 

51Para obtener detalles completos, consulte [Skills](/es/skills).51Para obtener detalles completos, consulte [Skills](/docs/es/skills).

52 52 

53<h3 id="agents">53<h3 id="agents">

54 Agents54 Agents


79 79 

80**Puntos de integración**:80**Puntos de integración**:

81 81 

82* Los agents aparecen en la interfaz [@-mention typeahead](/es/sub-agents#invoke-subagents-explicitly) bajo su nombre con alcance, como `my-plugin:code-reviewer`, una vez que el plugin está habilitado82* Los agents aparecen en la interfaz [@-mention typeahead](/docs/es/sub-agents#invoke-subagents-explicitly) bajo su nombre con alcance, como `my-plugin:code-reviewer`, una vez que el plugin está habilitado

83* Claude puede invocar agents automáticamente según el contexto de la tarea83* Claude puede invocar agents automáticamente según el contexto de la tarea

84* Los agents pueden ser invocados manualmente por los usuarios84* Los agents pueden ser invocados manualmente por los usuarios

85* Los agents del plugin funcionan junto con los agents integrados de Claude85* Los agents del plugin funcionan junto con los agents integrados de Claude

86 86 

87Para obtener detalles completos, consulte [Subagents](/es/sub-agents).87Para obtener detalles completos, consulte [Subagents](/docs/es/sub-agents).

88 88 

89<h3 id="hooks">89<h3 id="hooks">

90 Hooks90 Hooks


116}116}

117```117```

118 118 

119Los hooks del plugin responden a los mismos eventos del ciclo de vida que los [hooks definidos por el usuario](/es/hooks):119Los hooks del plugin responden a los mismos eventos del ciclo de vida que los [hooks definidos por el usuario](/docs/es/hooks):

120 120 

121| Event | When it fires |121| Event | When it fires |

122| :-------------------- | :----------------------------------------------------------------------------------------------------------------------------------------------------- |122| :-------------------- | :----------------------------------------------------------------------------------------------------------------------------------------------------- |


138| `TaskCompleted` | When a task is being marked as completed |138| `TaskCompleted` | When a task is being marked as completed |

139| `Stop` | When Claude finishes responding |139| `Stop` | When Claude finishes responding |

140| `StopFailure` | When the turn ends due to an API error. Output and exit code are ignored |140| `StopFailure` | When the turn ends due to an API error. Output and exit code are ignored |

141| `TeammateIdle` | When an [agent team](/en/agent-teams) teammate is about to go idle |141| `TeammateIdle` | When an [agent team](/docs/en/agent-teams) teammate is about to go idle |

142| `InstructionsLoaded` | When a CLAUDE.md or `.claude/rules/*.md` file is loaded into context. Fires at session start and when files are lazily loaded during a session |142| `InstructionsLoaded` | When a CLAUDE.md or `.claude/rules/*.md` file is loaded into context. Fires at session start and when files are lazily loaded during a session |

143| `ConfigChange` | When a configuration file changes during a session |143| `ConfigChange` | When a configuration file changes during a session |

144| `CwdChanged` | When the working directory changes, for example when Claude executes a `cd` command. Useful for reactive environment management with tools like direnv |144| `CwdChanged` | When the working directory changes, for example when Claude executes a `cd` command. Useful for reactive environment management with tools like direnv |

145| `FileChanged` | When a watched file changes on disk. The `matcher` field specifies which filenames to watch |145| `FileChanged` | When a watched file changes on disk. The `matcher` field specifies which filenames to watch |

146| `WorktreeCreate` | When a worktree is being created via `--worktree` or `isolation: "worktree"`. Replaces default git behavior |146| `WorktreeCreate` | When a worktree is being created via `--worktree`, `isolation: "worktree"`, or for a background session. Replaces default git behavior |

147| `WorktreeRemove` | When a worktree is being removed, either at session exit or when a subagent finishes |147| `WorktreeRemove` | When a worktree is being removed at session exit, when a subagent finishes, or when you delete a background session |

148| `PreCompact` | Before context compaction |148| `PreCompact` | Before context compaction |

149| `PostCompact` | After context compaction completes |149| `PostCompact` | After context compaction completes |

150| `Elicitation` | When an MCP server requests user input during a tool call |150| `Elicitation` | When an MCP server requests user input during a tool call |


155 155 

156* `command`: ejecutar comandos de shell o scripts156* `command`: ejecutar comandos de shell o scripts

157* `http`: enviar el JSON del evento como una solicitud POST a una URL157* `http`: enviar el JSON del evento como una solicitud POST a una URL

158* `mcp_tool`: llamar a una herramienta en un [servidor MCP](/es/mcp) configurado158* `mcp_tool`: llamar a una herramienta en un [servidor MCP](/docs/es/mcp) configurado

159* `prompt`: evaluar un prompt con un LLM (usa el marcador de posición `$ARGUMENTS` para el contexto)159* `prompt`: evaluar un prompt con un LLM (usa el marcador de posición `$ARGUMENTS` para el contexto)

160* `agent`: ejecutar un verificador agentic con herramientas para tareas de verificación complejas160* `agent`: ejecutar un verificador agentic con herramientas para tareas de verificación complejas

161 161 

162Los hooks que apuntan al [servidor MCP agrupado](#mcp-servers) propio del plugin deben usar sus nombres con alcance. Los coincidentes de herramientas y los campos `if` toman el nombre de herramienta con alcance `mcp__plugin_<plugin-name>_<server-name>__<tool>`, y el campo `server` de un hook `mcp_tool` toma `plugin:<plugin-name>:<server-name>`. Un coincidente escrito contra la clave del servidor desnuda nunca se dispara. Consulte [Coincidir herramientas MCP](/es/hooks#match-mcp-tools) y [Servidores MCP proporcionados por plugins](/es/mcp#plugin-provided-mcp-servers).162Los hooks que apuntan al [servidor MCP agrupado](#mcp-servers) propio del plugin deben usar sus nombres con alcance. Los coincidentes de herramientas y los campos `if` toman el nombre de herramienta con alcance `mcp__plugin_<plugin-name>_<server-name>__<tool>`, y el campo `server` de un hook `mcp_tool` toma `plugin:<plugin-name>:<server-name>`. Un coincidente escrito contra la clave del servidor desnuda nunca se dispara. Consulte [Coincidir herramientas MCP](/docs/es/hooks#match-mcp-tools) y [Servidores MCP proporcionados por plugins](/docs/es/mcp#plugin-provided-mcp-servers).

163 163 

164<h3 id="mcp-servers">164<h3 id="mcp-servers">

165 MCP servers165 MCP servers


300 300 

301Los plugins pueden declarar monitores de fondo que Claude Code inicia automáticamente cuando el plugin está activo. Cada monitor ejecuta un comando de shell durante la vida útil de la sesión y entrega cada línea de stdout a Claude como una notificación, para que Claude pueda reaccionar a entradas de registro, cambios de estado o eventos sondeados sin que se le pida que inicie la vigilancia por sí mismo.301Los plugins pueden declarar monitores de fondo que Claude Code inicia automáticamente cuando el plugin está activo. Cada monitor ejecuta un comando de shell durante la vida útil de la sesión y entrega cada línea de stdout a Claude como una notificación, para que Claude pueda reaccionar a entradas de registro, cambios de estado o eventos sondeados sin que se le pida que inicie la vigilancia por sí mismo.

302 302 

303Los monitores del plugin utilizan el mismo mecanismo que la [herramienta Monitor](/es/tools-reference#monitor-tool) y comparten sus restricciones de disponibilidad. Se ejecutan solo en sesiones CLI interactivas, se ejecutan sin sandbox al mismo nivel de confianza que los [hooks](#hooks), y se omiten en hosts donde la herramienta Monitor no está disponible.303Los monitores del plugin utilizan el mismo mecanismo que la [herramienta Monitor](/docs/es/tools-reference#monitor-tool) y comparten sus restricciones de disponibilidad. Se ejecutan solo en sesiones CLI interactivas, se ejecutan sin sandbox al mismo nivel de confianza que los [hooks](#hooks), y se omiten en hosts donde la herramienta Monitor no está disponible.

304 304 

305**Ubicación**: `monitors/monitors.json` en la raíz del plugin, o en línea en `plugin.json`305**Ubicación**: `monitors/monitors.json` en la raíz del plugin, o en línea en `plugin.json`

306 306 


342 342 

343El valor `command` soporta las [sustituciones de ruta](#environment-variables) `${CLAUDE_PLUGIN_ROOT}`, `${CLAUDE_PLUGIN_DATA}` y `${CLAUDE_PROJECT_DIR}`, más cualquier `${ENV_VAR}` del entorno. Prefije el comando con `cd "${CLAUDE_PLUGIN_ROOT}" && ` si el script necesita ejecutarse desde el directorio del plugin.343El valor `command` soporta las [sustituciones de ruta](#environment-variables) `${CLAUDE_PLUGIN_ROOT}`, `${CLAUDE_PLUGIN_DATA}` y `${CLAUDE_PROJECT_DIR}`, más cualquier `${ENV_VAR}` del entorno. Prefije el comando con `cd "${CLAUDE_PLUGIN_ROOT}" && ` si el script necesita ejecutarse desde el directorio del plugin.

344 344 

345Un comando `command` de monitor no puede hacer referencia a valores [`${user_config.*}`](#user-configuration). El comando se ejecuta a través de un shell, por lo que Claude Code rechaza el monitor con un [error](/es/errors#plugin-command-references-user-config) en lugar de sustituir el valor. Los procesos de monitor no reciben variables de entorno `CLAUDE_PLUGIN_OPTION_<KEY>`, por lo que el script de monitor debe leer el valor de un archivo de configuración que posee. Antes de v2.1.207, los comandos de monitor sustituían valores `${user_config.*}`.345Un comando `command` de monitor no puede hacer referencia a valores [`${user_config.*}`](#user-configuration). El comando se ejecuta a través de un shell, por lo que Claude Code rechaza el monitor con un [error](/docs/es/errors#plugin-command-references-user-config) en lugar de sustituir el valor. Los procesos de monitor no reciben variables de entorno `CLAUDE_PLUGIN_OPTION_<KEY>`, por lo que el script de monitor debe leer el valor de un archivo de configuración que posee. Antes de v2.1.207, los comandos de monitor sustituían valores `${user_config.*}`.

346 346 

347Deshabilitar un plugin a mitad de sesión no detiene los monitores que ya se están ejecutando. Se detienen cuando termina la sesión.347Deshabilitar un plugin a mitad de sesión no detiene los monitores que ya se están ejecutando. Se detienen cuando termina la sesión.

348 348 


379| `user` | `~/.claude/settings.json` | Plugins personales disponibles en todos los proyectos (predeterminado) |379| `user` | `~/.claude/settings.json` | Plugins personales disponibles en todos los proyectos (predeterminado) |

380| `project` | `.claude/settings.json` | Plugins de equipo compartidos a través del control de versiones |380| `project` | `.claude/settings.json` | Plugins de equipo compartidos a través del control de versiones |

381| `local` | `.claude/settings.local.json` | Plugins específicos del proyecto, ignorados por git |381| `local` | `.claude/settings.local.json` | Plugins específicos del proyecto, ignorados por git |

382| `managed` | [Configuración administrada](/es/settings#settings-files) | Plugins administrados (solo lectura, solo actualizar) |382| `managed` | [Configuración administrada](/docs/es/settings#settings-files) | Plugins administrados (solo lectura, solo actualizar) |

383 383 

384Los plugins utilizan el mismo sistema de alcance que otras configuraciones de Claude Code. Para instrucciones de instalación y banderas de alcance, consulte [Instalar plugins](/es/discover-plugins#install-plugins). Para una explicación completa de los alcances, consulte [Alcances de configuración](/es/settings#configuration-scopes).384Los plugins utilizan el mismo sistema de alcance que otras configuraciones de Claude Code. Para instrucciones de instalación y banderas de alcance, consulte [Instalar plugins](/docs/es/discover-plugins#install-plugins). Para una explicación completa de los alcances, consulte [Alcances de configuración](/docs/es/settings#configuration-scopes).

385 385 

386***386***

387 387 


395 395 

396| Lo que tiene | Qué es |396| Lo que tiene | Qué es |

397| :-------------------------------------------- | :------------------------------------------------------------------------------------ |397| :-------------------------------------------- | :------------------------------------------------------------------------------------ |

398| `<skills-dir>/foo/SKILL.md` sin manifiesto | Una [skill](/es/skills) simple llamada `foo` |398| `<skills-dir>/foo/SKILL.md` sin manifiesto | Una [skill](/docs/es/skills) simple llamada `foo` |

399| `<skills-dir>/foo/.claude-plugin/plugin.json` | Un plugin `foo@skills-dir`, que puede agrupar sus propias skills, agents, hooks y más |399| `<skills-dir>/foo/.claude-plugin/plugin.json` | Un plugin `foo@skills-dir`, que puede agrupar sus propias skills, agents, hooks y más |

400| `<plugin>/skills/bar/SKILL.md` | Una skill `bar` empaquetada dentro de un plugin |400| `<plugin>/skills/bar/SKILL.md` | Una skill `bar` empaquetada dentro de un plugin |

401 401 


406| Directorio de skills | Alcance | Se carga |406| Directorio de skills | Alcance | Se carga |

407| :---------------------- | :------- | :--------------------------------------------------------------------------------------------------------- |407| :---------------------- | :------- | :--------------------------------------------------------------------------------------------------------- |

408| `~/.claude/skills/` | personal | En cada proyecto, ya que la ubicación es solo suya |408| `~/.claude/skills/` | personal | En cada proyecto, ya que la ubicación es solo suya |

409| `<cwd>/.claude/skills/` | proyecto | Solo después de que acepte el diálogo de [confianza](/es/settings) del espacio de trabajo para esa carpeta |409| `<cwd>/.claude/skills/` | proyecto | Solo después de que acepte el diálogo de [confianza](/docs/es/settings) del espacio de trabajo para esa carpeta |

410 410 

411Un plugin de alcance de proyecto se verifica en el repositorio y llega a cada colaborador que lo clona. Porque ese contenido proviene del repositorio en lugar de usted, se carga solo después de la misma puerta de confianza que rige `.claude/settings.json`, y los componentes que ejecutan código están restringidos aún más:411Un plugin de alcance de proyecto se verifica en el repositorio y llega a cada colaborador que lo clona. Porque ese contenido proviene del repositorio en lugar de usted, se carga solo después de la misma puerta de confianza que rige `.claude/settings.json`, y los componentes que ejecutan código están restringidos aún más:

412 412 

413* Los servidores MCP que declara pasan por la [misma aprobación por servidor](/es/mcp) que un `.mcp.json` del proyecto413* Los servidores MCP que declara pasan por la [misma aprobación por servidor](/docs/es/mcp) que un `.mcp.json` del proyecto

414* Los servidores LSP se inician solo después de que confíe en el espacio de trabajo414* Los servidores LSP se inician solo después de que confíe en el espacio de trabajo

415* Los [monitores de fondo](#monitors) no se cargan415* Los [monitores de fondo](#monitors) no se cargan

416 416 

417Los plugins de alcance personal no tienen ninguna de estas restricciones.417Los plugins de alcance personal no tienen ninguna de estas restricciones.

418 418 

419<Warning>419<Warning>

420 Los plugins `@skills-dir` de alcance de proyecto se cargan solo desde `.claude/skills/` del directorio donde inicia Claude Code. No [caminan hasta la raíz del repositorio](/es/skills#automatic-discovery-from-parent-and-nested-directories) de la forma en que lo hacen las skills y comandos simples, por lo que lanzar desde un subdirectorio pierde un plugin que vive en la raíz del repositorio. Inicie desde la raíz del repositorio, o ejecute `/reload-plugins` después de cambiar de directorio.420 Los plugins `@skills-dir` de alcance de proyecto se cargan solo desde `.claude/skills/` del directorio donde inicia Claude Code. No [caminan hasta la raíz del repositorio](/docs/es/skills#automatic-discovery-from-parent-and-nested-directories) de la forma en que lo hacen las skills y comandos simples, por lo que lanzar desde un subdirectorio pierde un plugin que vive en la raíz del repositorio. Inicie desde la raíz del repositorio, o ejecute `/reload-plugins` después de cambiar de directorio.

421</Warning>421</Warning>

422 422 

423<h3 id="edit-reload-and-disable-a-skills-directory-plugin">423<h3 id="edit-reload-and-disable-a-skills-directory-plugin">

424 Editar, recargar y deshabilitar un plugin de directorio de skills424 Editar, recargar y deshabilitar un plugin de directorio de skills

425</h3>425</h3>

426 426 

427Los cambios que realiza en el `SKILL.md` de una skill tienen efecto inmediatamente en la sesión actual. Los cambios en otros componentes del plugin, como `hooks/`, `.mcp.json`, `agents/` y `output-styles/`, no lo hacen. Ejecute `/reload-plugins` o reinicie Claude Code para recogerlos. Consulte [Detección de cambios en vivo](/es/skills#live-change-detection).427Los cambios que realiza en el `SKILL.md` de una skill tienen efecto inmediatamente en la sesión actual. Los cambios en otros componentes del plugin, como `hooks/`, `.mcp.json`, `agents/` y `output-styles/`, no lo hacen. Ejecute `/reload-plugins` o reinicie Claude Code para recogerlos. Consulte [Detección de cambios en vivo](/docs/es/skills#live-change-detection).

428 428 

429Para dejar de cargar un plugin de directorio de skills, elimine su carpeta o deshabilítelo por nombre. No hay paso de `uninstall` porque nada se instaló desde un marketplace.429Para dejar de cargar un plugin de directorio de skills, elimine su carpeta o deshabilítelo por nombre. No hay paso de `uninstall` porque nada se instaló desde un marketplace.

430 430 


487 487 

488| Campo | Tipo | Descripción | Ejemplo |488| Campo | Tipo | Descripción | Ejemplo |

489| :----- | :----- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :------------------- |489| :----- | :----- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :------------------- |

490| `name` | string | Identificador único (kebab-case, sin espacios). Cuando una [entrada del marketplace](/es/plugin-marketplaces#plugin-entries) lista el plugin bajo un nombre diferente, el nombre de la entrada del marketplace es lo que usan las claves `enabledPlugins` y `/plugin` | `"deployment-tools"` |490| `name` | string | Identificador único (kebab-case, sin espacios). Cuando una [entrada del marketplace](/docs/es/plugin-marketplaces#plugin-entries) lista el plugin bajo un nombre diferente, el nombre de la entrada del marketplace es lo que usan las claves `enabledPlugins` y `/plugin` | `"deployment-tools"` |

491 491 

492Este nombre se utiliza para espacios de nombres de componentes. Por ejemplo, en la interfaz de usuario, el agent `agent-creator` para el plugin con nombre `plugin-dev` aparecerá como `plugin-dev:agent-creator`.492Este nombre se utiliza para espacios de nombres de componentes. Por ejemplo, en la interfaz de usuario, el agent `agent-creator` para el plugin con nombre `plugin-dev` aparecerá como `plugin-dev:agent-creator`.

493 493 


533`defaultEnabled` es la alternativa cuando nada más ha decidido el estado del plugin. Dos cosas tienen prioridad sobre él:533`defaultEnabled` es la alternativa cuando nada más ha decidido el estado del plugin. Dos cosas tienen prioridad sobre él:

534 534 

535* **La configuración del usuario**: una entrada para el plugin en `enabledPlugins` en cualquier alcance de configuración. Una vez escrita, persiste en actualizaciones y reinstalaciones del plugin, por lo que cambiar `defaultEnabled` en una versión posterior no cambia un usuario existente.535* **La configuración del usuario**: una entrada para el plugin en `enabledPlugins` en cualquier alcance de configuración. Una vez escrita, persiste en actualizaciones y reinstalaciones del plugin, por lo que cambiar `defaultEnabled` en una versión posterior no cambia un usuario existente.

536* **Un requisito de dependencia**: cuando un plugin es requerido por otro que está activo, Claude Code escribe `true` para él en el tiempo de instalación o habilitación. Eso le da una configuración explícita, por lo que su propio predeterminado ya no se aplica. Consulte [Habilitar o deshabilitar un plugin con dependencias](/es/plugin-dependencies#enable-or-disable-a-plugin-with-dependencies).536* **Un requisito de dependencia**: cuando un plugin es requerido por otro que está activo, Claude Code escribe `true` para él en el tiempo de instalación o habilitación. Eso le da una configuración explícita, por lo que su propio predeterminado ya no se aplica. Consulte [Habilitar o deshabilitar un plugin con dependencias](/docs/es/plugin-dependencies#enable-or-disable-a-plugin-with-dependencies).

537 537 

538El mismo campo puede aparecer en la entrada del marketplace de un plugin, donde tiene prioridad sobre el valor en `plugin.json`. Consulte [Campos de plugin opcionales](/es/plugin-marketplaces#optional-plugin-fields).538El mismo campo puede aparecer en la entrada del marketplace de un plugin, donde tiene prioridad sobre el valor en `plugin.json`. Consulte [Campos de plugin opcionales](/docs/es/plugin-marketplaces#optional-plugin-fields).

539 539 

540<h3 id="component-path-fields">540<h3 id="component-path-fields">

541 Campos de ruta de componentes541 Campos de ruta de componentes


551| `outputStyles` | string\|array | Archivos/directorios de estilos de salida personalizados (reemplaza el predeterminado `output-styles/`) | `"./styles/"` |551| `outputStyles` | string\|array | Archivos/directorios de estilos de salida personalizados (reemplaza el predeterminado `output-styles/`) | `"./styles/"` |

552| `lspServers` | string\|array\|object | Configuraciones de [Language Server Protocol](https://microsoft.github.io/language-server-protocol/) para inteligencia de código (ir a definición, encontrar referencias, etc.) | `"./.lsp.json"` |552| `lspServers` | string\|array\|object | Configuraciones de [Language Server Protocol](https://microsoft.github.io/language-server-protocol/) para inteligencia de código (ir a definición, encontrar referencias, etc.) | `"./.lsp.json"` |

553| `experimental.themes` | string\|array | Archivos/directorios de temas de color (reemplaza el predeterminado `themes/`). Consulte [Themes](#themes) | `"./themes/"` |553| `experimental.themes` | string\|array | Archivos/directorios de temas de color (reemplaza el predeterminado `themes/`). Consulte [Themes](#themes) | `"./themes/"` |

554| `experimental.monitors` | string\|array | Configuraciones de [Monitor](/es/tools-reference#monitor-tool) de fondo que se inician automáticamente cuando el plugin está activo. Consulte [Monitors](#monitors) | `"./monitors.json"` |554| `experimental.monitors` | string\|array | Configuraciones de [Monitor](/docs/es/tools-reference#monitor-tool) de fondo que se inician automáticamente cuando el plugin está activo. Consulte [Monitors](#monitors) | `"./monitors.json"` |

555| `userConfig` | object | Valores configurables por el usuario solicitados al habilitar. Consulte [Configuración del usuario](#user-configuration) | Ver abajo |555| `userConfig` | object | Valores configurables por el usuario solicitados al habilitar. Consulte [Configuración del usuario](#user-configuration) | Ver abajo |

556| `channels` | array | Declaraciones de canales para inyección de mensajes (estilo Telegram, Slack, Discord). Consulte [Channels](#channels) | Ver abajo |556| `channels` | array | Declaraciones de canales para inyección de mensajes (estilo Telegram, Slack, Discord). Consulte [Channels](#channels) | Ver abajo |

557| `dependencies` | array | Otros plugins que requiere este plugin, opcionalmente con restricciones de versión semántica. Consulte [Restringir versiones de dependencias de plugins](/es/plugin-dependencies) | `[{ "name": "secrets-vault", "version": "~2.1.0" }]` |557| `dependencies` | array | Otros plugins que requiere este plugin, opcionalmente con restricciones de versión semántica. Consulte [Restringir versiones de dependencias de plugins](/docs/es/plugin-dependencies) | `[{ "name": "secrets-vault", "version": "~2.1.0" }]` |

558 558 

559<h3 id="experimental-components">559<h3 id="experimental-components">

560 Componentes experimentales560 Componentes experimentales


601 601 

602Cada valor está disponible para sustitución como `${user_config.KEY}` en configuraciones de servidores MCP y LSP, comandos de hooks y comandos de monitores. Los valores no sensibles también pueden sustituirse en contenido de skills y agents. Todos los valores se exportan a procesos de hooks y subprocesos de servidores MCP y LSP como variables de entorno `CLAUDE_PLUGIN_OPTION_<KEY>`, donde `<KEY>` es la clave de opción en mayúsculas.602Cada valor está disponible para sustitución como `${user_config.KEY}` en configuraciones de servidores MCP y LSP, comandos de hooks y comandos de monitores. Los valores no sensibles también pueden sustituirse en contenido de skills y agents. Todos los valores se exportan a procesos de hooks y subprocesos de servidores MCP y LSP como variables de entorno `CLAUDE_PLUGIN_OPTION_<KEY>`, donde `<KEY>` es la clave de opción en mayúsculas.

603 603 

604Los campos que se ejecutan en un shell rechazan `${user_config.*}`: sustituir un valor configurado en un comando shell permitiría que el shell ejecute lo que contenga ese valor, por lo que el componente falla con un [error](/es/errors#plugin-command-references-user-config) en su lugar. Cada campo rechazado tiene una forma alternativa de pasar el valor:604Los campos que se ejecutan en un shell rechazan `${user_config.*}`: sustituir un valor configurado en un comando shell permitiría que el shell ejecute lo que contenga ese valor, por lo que el componente falla con un [error](/docs/es/errors#plugin-command-references-user-config) en su lugar. Cada campo rechazado tiene una forma alternativa de pasar el valor:

605 605 

606| Campo rechazado | Cómo pasar el valor |606| Campo rechazado | Cómo pasar el valor |

607| :--------------------------------------------------------------------------- | :----------------------------------------------------------------------------------------------------------------------- |607| :--------------------------------------------------------------------------- | :----------------------------------------------------------------------------------------------------------------------- |

608| Comandos de hooks de forma shell | Use [forma exec](/es/hooks#exec-form-and-shell-form) con `args`, o lea `CLAUDE_PLUGIN_OPTION_<KEY>` del entorno del hook |608| Comandos de hooks de forma shell | Use [forma exec](/docs/es/hooks#exec-form-and-shell-form) con `args`, o lea `CLAUDE_PLUGIN_OPTION_<KEY>` del entorno del hook |

609| Comandos de [Monitor](#monitors) | Lea el valor de un archivo de configuración en el script |609| Comandos de [Monitor](#monitors) | Lea el valor de un archivo de configuración en el script |

610| MCP [`headersHelper`](/es/mcp#use-dynamic-headers-for-custom-authentication) | Lea el valor de un archivo de configuración en el script |610| MCP [`headersHelper`](/docs/es/mcp#use-dynamic-headers-for-custom-authentication) | Lea el valor de un archivo de configuración en el script |

611 611 

612Antes de v2.1.207, estos campos sustituían valores `${user_config.KEY}`; actualice los plugins que dependían de esto.612Antes de v2.1.207, estos campos sustituían valores `${user_config.KEY}`; actualice los plugins que dependían de esto.

613 613 

614Los valores no sensibles se almacenan bajo la clave [`pluginConfigs`](/es/settings#pluginconfigs) en `settings.json` como `pluginConfigs[<plugin-id>].options`. {/* min-version: 2.1.207 */}Claude Code escribe la clave en la configuración del usuario y la lee desde la configuración del usuario, la bandera `--settings` y la configuración administrada solo; las entradas en `.claude/settings.json` o `.claude/settings.local.json` de un proyecto se ignoran. Antes de v2.1.207, Claude Code también leía la configuración del proyecto y local.614Los valores no sensibles se almacenan bajo la clave [`pluginConfigs`](/docs/es/settings#pluginconfigs) en `settings.json` como `pluginConfigs[<plugin-id>].options`. {/* min-version: 2.1.207 */}Claude Code escribe la clave en la configuración del usuario y la lee desde la configuración del usuario, la bandera `--settings` y la configuración administrada solo; las entradas en `.claude/settings.json` o `.claude/settings.local.json` de un proyecto se ignoran. Antes de v2.1.207, Claude Code también leía la configuración del proyecto y local.

615 615 

616Los valores sensibles van al Keychain de macOS, o a `~/.claude/.credentials.json` en plataformas donde no hay un keychain soportado disponible. El almacenamiento en keychain se comparte con tokens OAuth y tiene un límite total aproximado de 2 KB, así que mantenga los valores sensibles pequeños.616Los valores sensibles van al Keychain de macOS, o a `~/.claude/.credentials.json` en plataformas donde no hay un keychain soportado disponible. El almacenamiento en keychain se comparte con tokens OAuth y tiene un límite total aproximado de 2 KB, así que mantenga los valores sensibles pequeños.

617 617 


653Si una ruta personalizada reemplaza o extiende el directorio predeterminado del plugin depende del campo:653Si una ruta personalizada reemplaza o extiende el directorio predeterminado del plugin depende del campo:

654 654 

655* **Reemplaza el predeterminado**: `commands`, `agents`, `outputStyles`, `experimental.themes`, `experimental.monitors`. Por ejemplo, cuando el manifiesto especifica `commands`, el directorio predeterminado `commands/` no se escanea. Para mantener el predeterminado y añadir más, enumérelo explícitamente: `"commands": ["./commands/", "./extras/"]`655* **Reemplaza el predeterminado**: `commands`, `agents`, `outputStyles`, `experimental.themes`, `experimental.monitors`. Por ejemplo, cuando el manifiesto especifica `commands`, el directorio predeterminado `commands/` no se escanea. Para mantener el predeterminado y añadir más, enumérelo explícitamente: `"commands": ["./commands/", "./extras/"]`

656* **Se añade al predeterminado**: `skills`. El directorio predeterminado `skills/` siempre se escanea, y los directorios enumerados en `skills` se cargan junto a él. Excepción: para una [entrada del marketplace cuya `source` se resuelve a la raíz del marketplace](/es/plugin-marketplaces#advanced-plugin-entries), declarar subdirectorios específicos reemplaza el escaneo predeterminado de `skills/`656* **Se añade al predeterminado**: `skills`. El directorio predeterminado `skills/` siempre se escanea, y los directorios enumerados en `skills` se cargan junto a él. Excepción: para una [entrada del marketplace cuya `source` se resuelve a la raíz del marketplace](/docs/es/plugin-marketplaces#advanced-plugin-entries), declarar subdirectorios específicos reemplaza el escaneo predeterminado de `skills/`

657* **Reglas de fusión propias**: [hooks](#hooks), [MCP servers](#mcp-servers) y [LSP servers](#lsp-servers). Consulte cada sección para ver cómo se combinan múltiples fuentes657* **Reglas de fusión propias**: [hooks](#hooks), [MCP servers](#mcp-servers) y [LSP servers](#lsp-servers). Consulte cada sección para ver cómo se combinan múltiples fuentes

658 658 

659Cuando un plugin tiene tanto una carpeta predeterminada como la clave de manifiesto coincidente, Claude Code v2.1.140 y posterior marca la carpeta ignorada en `claude plugin list` y la vista de detalles `/plugin`. El plugin aún se carga usando las rutas del manifiesto. No se muestra advertencia cuando la clave del manifiesto apunta a la carpeta predeterminada, por ejemplo `"commands": ["./commands/deploy.md"]`, porque la carpeta se aborda explícitamente en ese caso.659Cuando un plugin tiene tanto una carpeta predeterminada como la clave de manifiesto coincidente, Claude Code v2.1.140 y posterior marca la carpeta ignorada en `claude plugin list` y la vista de detalles `/plugin`. El plugin aún se carga usando las rutas del manifiesto. No se muestra advertencia cuando la clave del manifiesto apunta a la carpeta predeterminada, por ejemplo `"commands": ["./commands/deploy.md"]`, porque la carpeta se aborda explícitamente en ese caso.


704| Servidores MCP `http`, `sse`, `ws` | `url`, `headers`, `headersHelper` |704| Servidores MCP `http`, `sse`, `ws` | `url`, `headers`, `headersHelper` |

705| Servidores LSP | `command`, `args`, `env`, `workspaceFolder` |705| Servidores LSP | `command`, `args`, `env`, `workspaceFolder` |

706 706 

707En comandos de hooks, use [forma exec](/es/hooks#exec-form-and-shell-form) con `args` para que cada ruta se pase como un argumento sin comillas. En hooks de forma shell y comandos de monitores, envuélvalo en comillas dobles, como en `"${CLAUDE_PROJECT_DIR}/scripts/server.sh"`. Este hook de forma shell ejecuta un script incluido con un plugin:707En comandos de hooks, use [forma exec](/docs/es/hooks#exec-form-and-shell-form) con `args` para que cada ruta se pase como un argumento sin comillas. En hooks de forma shell y comandos de monitores, envuélvalo en comillas dobles, como en `"${CLAUDE_PROJECT_DIR}/scripts/server.sh"`. Este hook de forma shell ejecuta un script incluido con un plugin:

708 708 

709```json theme={null}709```json theme={null}

710{710{


727 727 

728Cuando un plugin se actualiza a mitad de sesión, los comandos de hooks, monitores, servidores MCP y servidores LSP siguen usando la ruta de la versión anterior. Ejecute `/reload-plugins` para cambiar hooks, servidores MCP y servidores LSP a la nueva ruta; los monitores requieren un reinicio de sesión.728Cuando un plugin se actualiza a mitad de sesión, los comandos de hooks, monitores, servidores MCP y servidores LSP siguen usando la ruta de la versión anterior. Ejecute `/reload-plugins` para cambiar hooks, servidores MCP y servidores LSP a la nueva ruta; los monitores requieren un reinicio de sesión.

729 729 

730Los servidores MCP también pueden llamar a la solicitud `roots/list` para leer los directorios de trabajo de la sesión en tiempo de ejecución. Consulte [qué devuelve `roots/list` y cuándo Claude Code notifica al servidor de cambios](/es/mcp#option-3-add-a-local-stdio-server).730Los servidores MCP también pueden llamar a la solicitud `roots/list` para leer los directorios de trabajo de la sesión en tiempo de ejecución. Consulte [qué devuelve `roots/list` y cuándo Claude Code notifica al servidor de cambios](/docs/es/mcp#option-3-add-a-local-stdio-server).

731 731 

732<h4 id="persistent-data-directory">732<h4 id="persistent-data-directory">

733 Directorio de datos persistente733 Directorio de datos persistente


893| **Servidores LSP** | `.lsp.json` | Configuraciones del servidor de lenguaje |893| **Servidores LSP** | `.lsp.json` | Configuraciones del servidor de lenguaje |

894| **Monitores** | `monitors/monitors.json` | Configuraciones de monitor de fondo |894| **Monitores** | `monitors/monitors.json` | Configuraciones de monitor de fondo |

895| **Ejecutables** | `bin/` | Ejecutables añadidos al `PATH` de la herramienta Bash. Los archivos aquí son invocables como comandos desnudos en cualquier llamada de herramienta Bash mientras el plugin está habilitado |895| **Ejecutables** | `bin/` | Ejecutables añadidos al `PATH` de la herramienta Bash. Los archivos aquí son invocables como comandos desnudos en cualquier llamada de herramienta Bash mientras el plugin está habilitado |

896| **Configuración** | `settings.json` | Configuración predeterminada aplicada cuando se habilita el plugin. Actualmente solo se soportan las claves [`agent`](/es/sub-agents) y [`subagentStatusLine`](/es/statusline#subagent-status-lines) |896| **Configuración** | `settings.json` | Configuración predeterminada aplicada cuando se habilita el plugin. Actualmente solo se soportan las claves [`agent`](/docs/es/sub-agents) y [`subagentStatusLine`](/docs/es/statusline#subagent-status-lines) |

897 897 

898***898***

899 899 


942| `mcp` | Un `.mcp.json` con ejemplos de servidor HTTP y stdio |942| `mcp` | Un `.mcp.json` con ejemplos de servidor HTTP y stdio |

943| `lsp` | Un ejemplo de `.lsp.json` de servidor de lenguaje |943| `lsp` | Un ejemplo de `.lsp.json` de servidor de lenguaje |

944| `output-style` | Un `output-styles/<name>.md` que se aplica automáticamente mientras el plugin está habilitado |944| `output-style` | Un `output-styles/<name>.md` que se aplica automáticamente mientras el plugin está habilitado |

945| `channel` | Un [canal](/es/channels) basado en MCP: un servidor stdio (`server.ts`), su `.mcp.json` y un `package.json` |945| `channel` | Un [canal](/docs/es/channels) basado en MCP: un servidor stdio (`server.ts`), su `.mcp.json` y un `package.json` |

946 946 

947El plugin creado usa la fuente `@skills-dir` en lugar de un marketplace. Los administradores pueden bloquear esta fuente con `strictKnownMarketplaces` o añadiendo `{"source": "skills-dir"}` a `blockedMarketplaces` en [configuración administrada](/es/plugin-marketplaces#managed-marketplace-restrictions). Cuando se bloquea, `plugin init` falla antes de escribir.947El plugin creado usa la fuente `@skills-dir` en lugar de un marketplace. Los administradores pueden bloquear esta fuente con `strictKnownMarketplaces` o añadiendo `{"source": "skills-dir"}` a `blockedMarketplaces` en [configuración administrada](/docs/es/plugin-marketplaces#managed-marketplace-restrictions). Cuando se bloquea, `plugin init` falla antes de escribir.

948 948 

949**Ejemplos:**949**Ejemplos:**

950 950 


1027 plugin prune1027 plugin prune

1028</h3>1028</h3>

1029 1029 

1030Elimina las dependencias de plugins instaladas automáticamente que ya no son requeridas por ningún plugin instalado. Las dependencias que Claude Code incluyó para satisfacer el campo [`dependencies`](/es/plugin-dependencies) de otro plugin se eliminan; los plugins que instaló directamente nunca se tocan.1030Elimina las dependencias de plugins instaladas automáticamente que ya no son requeridas por ningún plugin instalado. Las dependencias que Claude Code incluyó para satisfacer el campo [`dependencies`](/docs/es/plugin-dependencies) de otro plugin se eliminan; los plugins que instaló directamente nunca se tocan.

1031 1031 

1032```bash theme={null}1032```bash theme={null}

1033claude plugin prune [options]1033claude plugin prune [options]


1054 plugin enable1054 plugin enable

1055</h3>1055</h3>

1056 1056 

1057Habilita un plugin deshabilitado. Si el plugin declara [dependencias](/es/plugin-dependencies), Claude Code las habilita transitivamente en el mismo alcance, y el comando falla cuando una dependencia no está instalada.1057Habilita un plugin deshabilitado. Si el plugin declara [dependencias](/docs/es/plugin-dependencies), Claude Code las habilita transitivamente en el mismo alcance, y el comando falla cuando una dependencia no está instalada.

1058 1058 

1059```bash theme={null}1059```bash theme={null}

1060claude plugin enable <plugin> [options]1060claude plugin enable <plugin> [options]


1075 plugin disable1075 plugin disable

1076</h3>1076</h3>

1077 1077 

1078Deshabilita un plugin sin desinstalarlo. Falla cuando otro plugin habilitado [depende de](/es/plugin-dependencies#enable-or-disable-a-plugin-with-dependencies) el objetivo. El mensaje de error incluye un comando encadenado que deshabilita primero cada dependiente.1078Deshabilita un plugin sin desinstalarlo. Falla cuando otro plugin habilitado [depende de](/docs/es/plugin-dependencies#enable-or-disable-a-plugin-with-dependencies) el objetivo. El mensaje de error incluye un comando encadenado que deshabilita primero cada dependiente.

1079 1079 

1080```bash theme={null}1080```bash theme={null}

1081claude plugin disable <plugin> [options]1081claude plugin disable <plugin> [options]


1192 plugin tag1192 plugin tag

1193</h3>1193</h3>

1194 1194 

1195Crea una etiqueta de lanzamiento de git para el plugin en el directorio actual. Ejecute desde dentro de la carpeta del plugin. Consulte [Etiquetar lanzamientos de plugins](/es/plugin-dependencies#tag-plugin-releases-for-version-resolution).1195Crea una etiqueta de lanzamiento de git para el plugin en el directorio actual. Ejecute desde dentro de la carpeta del plugin. Consulte [Etiquetar lanzamientos de plugins](/docs/es/plugin-dependencies#tag-plugin-releases-for-version-resolution).

1196 1196 

1197```bash theme={null}1197```bash theme={null}

1198claude plugin tag [options]1198claude plugin tag [options]


1352 Ver también1352 Ver también

1353</h2>1353</h2>

1354 1354 

1355* [Plugins](/es/plugins) - Tutoriales y uso práctico1355* [Plugins](/docs/es/plugins) - Tutoriales y uso práctico

1356* [Marketplaces de plugins](/es/plugin-marketplaces) - Crear y gestionar marketplaces1356* [Marketplaces de plugins](/docs/es/plugin-marketplaces) - Crear y gestionar marketplaces

1357* [Skills](/es/skills) - Detalles de desarrollo de skills1357* [Skills](/docs/es/skills) - Detalles de desarrollo de skills

1358* [Subagents](/es/sub-agents) - Configuración y capacidades del agent1358* [Subagents](/docs/es/sub-agents) - Configuración y capacidades del agent

1359* [Hooks](/es/hooks) - Manejo de eventos y automatización1359* [Hooks](/docs/es/hooks) - Manejo de eventos y automatización

1360* [MCP](/es/mcp) - Integración de herramientas externas1360* [MCP](/docs/es/mcp) - Integración de herramientas externas

1361* [Configuración](/es/settings) - Opciones de configuración para plugins1361* [Configuración](/docs/es/settings) - Opciones de configuración para plugins

troubleshooting.md +18 −14

Details

10 10 

11| Síntoma | Ir a |11| Síntoma | Ir a |

12| :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | :---------------------------------------------------------------------------------------------------------- |12| :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | :---------------------------------------------------------------------------------------------------------- |

13| `command not found`, falla de instalación, problemas de PATH, `EACCES`, errores de TLS | [Solucionar problemas de instalación e inicio de sesión](/es/troubleshoot-install) |13| `command not found`, falla de instalación, problemas de PATH, `EACCES`, errores de TLS | [Solucionar problemas de instalación e inicio de sesión](/docs/es/troubleshoot-install) |

14| Actualización o falla de descarga de instalación con `The connection dropped while downloading the update` o `aborted` | [Referencia de errores](/es/errors#the-connection-dropped-while-downloading-the-update) |14| Actualización o falla de descarga de instalación con `The connection dropped while downloading the update` o `aborted` | [Referencia de errores](/docs/es/errors#the-connection-dropped-while-downloading-the-update) |

15| Bucles de inicio de sesión, errores de OAuth, `403 Forbidden`, "organización deshabilitada", credenciales de Amazon Bedrock, Google Cloud's Agent Platform, o Microsoft Foundry | [Solucionar problemas de instalación e inicio de sesión](/es/troubleshoot-install#login-and-authentication) |15| Bucles de inicio de sesión, errores de OAuth, `403 Forbidden`, "organización deshabilitada", credenciales de Amazon Bedrock, Google Cloud's Agent Platform, o Microsoft Foundry | [Solucionar problemas de instalación e inicio de sesión](/docs/es/troubleshoot-install#login-and-authentication) |

16| La configuración no se aplica, hooks no se disparan, servidores MCP no se cargan | [Depurar tu configuración](/es/debug-your-config) |16| La configuración no se aplica, hooks no se disparan, servidores MCP no se cargan | [Depurar tu configuración](/docs/es/debug-your-config) |

17| `API Error: 5xx`, `529 Overloaded`, `429`, errores de validación de solicitudes | [Referencia de errores](/es/errors) |17| `API Error: 5xx`, `529 Overloaded`, `429`, errores de validación de solicitudes | [Referencia de errores](/docs/es/errors) |

18| `model not found` o `you may not have access to it` | [Referencia de errores](/es/errors#theres-an-issue-with-the-selected-model) |18| `model not found` o `you may not have access to it` | [Referencia de errores](/docs/es/errors#theres-an-issue-with-the-selected-model) |

19| La extensión de VS Code no se conecta o no detecta Claude | [Integración de VS Code](/es/vs-code#fix-common-issues) |19| La extensión de VS Code no se conecta o no detecta Claude | [Integración de VS Code](/docs/es/vs-code#fix-common-issues) |

20| Plugin de JetBrains o IDE no detectado | [Integración de JetBrains](/es/jetbrains#troubleshooting) |20| Plugin de JetBrains o IDE no detectado | [Integración de JetBrains](/docs/es/jetbrains#troubleshooting) |

21| Alto uso de CPU o memoria, respuestas lentas, cuelgues, búsqueda no encuentra archivos | [Rendimiento y estabilidad](#performance-and-stability) abajo |21| Alto uso de CPU o memoria, respuestas lentas, cuelgues, búsqueda no encuentra archivos | [Rendimiento y estabilidad](#performance-and-stability) abajo |

22 22 

23Si no estás seguro de cuál aplica, ejecuta `/doctor` dentro de Claude Code para una verificación automatizada de tu instalación, configuración, extensiones, y uso de contexto; propone correcciones que puede aplicar después de que confirmes. Si `claude` no inicia en absoluto, ejecuta `claude doctor` desde tu shell en su lugar. Ejecuta `/mcp` para verificar el estado del servidor MCP.23Si no estás seguro de cuál aplica, ejecuta `/doctor` dentro de Claude Code para una verificación automatizada de tu instalación, configuración, extensiones, y uso de contexto; propone correcciones que puede aplicar después de que confirmes. Si `claude` no inicia en absoluto, ejecuta `claude doctor` desde tu shell en su lugar. Ejecuta `/mcp` para verificar el estado del servidor MCP.


371. Utilice `/compact` regularmente para reducir el tamaño del contexto371. Utilice `/compact` regularmente para reducir el tamaño del contexto

382. Cierre y reinicie Claude Code entre tareas principales382. Cierre y reinicie Claude Code entre tareas principales

393. Considere añadir directorios de compilación grandes a su archivo `.gitignore`393. Considere añadir directorios de compilación grandes a su archivo `.gitignore`

404. Reinicie con [`claude --safe-mode`](/es/cli-reference#cli-flags) para verificar si un plugin, servidor MCP, o hook es la fuente. Desactiva todas las personalizaciones para la sesión; si el uso disminuye, consulte [Depurar su configuración](/es/debug-your-config#test-against-a-clean-configuration) para encontrar cuál es404. Reinicie con [`claude --safe-mode`](/docs/es/cli-reference#cli-flags) para verificar si un plugin, servidor MCP, o hook es la fuente. Desactiva todas las personalizaciones para la sesión; si el uso disminuye, consulte [Depurar su configuración](/docs/es/debug-your-config#test-against-a-clean-configuration) para encontrar cuál es

41 41 

42Si el uso de memoria se mantiene alto después de estos pasos, ejecute `/heapdump` para escribir una instantánea de montón de JavaScript y un desglose de memoria a `~/Desktop`. En Linux sin una carpeta Desktop, los archivos se escriben en su directorio de inicio.42Si el uso de memoria se mantiene alto después de estos pasos, ejecute `/heapdump` para escribir una instantánea de montón de JavaScript y un desglose de memoria a `~/Desktop`. En Linux sin una carpeta Desktop, los archivos se escriben en su directorio de inicio.

43 43 

44El desglose muestra el tamaño del conjunto residente, montón de JS, búferes de matriz, y memoria nativa no contabilizada, lo que ayuda a identificar si el crecimiento está en objetos de JavaScript o en código nativo. Para inspeccionar retentores, abra el archivo `.heapsnapshot` en Chrome DevTools bajo Memory → Load. Adjunte ambos archivos al reportar un problema de memoria en [GitHub](https://github.com/anthropics/claude-code/issues).44El desglose muestra el tamaño del conjunto residente, el montón de JS, los búferes de matriz y la memoria nativa no contabilizada, lo que ayuda a identificar si el crecimiento está en objetos de JavaScript o en código nativo. Para inspeccionar los retenedores, abra el archivo `.heapsnapshot` en Chrome DevTools en Memory → Load; el desglose es el archivo que termina en `-diagnostics.json`.

45 

46<Warning>

47 El archivo `.heapsnapshot` contiene cada cadena en el proceso. No lo adjunte a un problema público ni lo comparta. Adjunte solo el archivo `-diagnostics.json` al informar un problema de memoria en [GitHub](https://github.com/anthropics/claude-code/issues). Ese archivo contiene estadísticas de memoria y ningún contenido de conversación ni credenciales.

48</Warning>

45 49 

46<h3 id="large-tables-are-cut-off-in-the-terminal">50<h3 id="large-tables-are-cut-off-in-the-terminal">

47 Las tablas grandes se cortan en la terminal51 Las tablas grandes se cortan en la terminal

48</h3>52</h3>

49 53 

50Una tabla Markdown con más de 200 filas renderiza sus primeras 200 filas seguidas de una línea `… N more rows not shown`. Solo la visualización está limitada: la tabla completa permanece en la conversación, y [`/copy`](/es/commands) copia cada fila. Para una tabla demasiado grande para leer en la terminal, pida a Claude que la escriba en un archivo en su lugar. Antes de v2.1.208, Claude Code renderizaba cada fila, por lo que reanudar una sesión que contenía una tabla muy grande podría estancarse mientras se re-renderizaba.54Una tabla Markdown con más de 200 filas renderiza sus primeras 200 filas seguidas de una línea `… N more rows not shown`. Solo la visualización está limitada: la tabla completa permanece en la conversación, y [`/copy`](/docs/es/commands) copia cada fila. Para una tabla demasiado grande para leer en la terminal, pida a Claude que la escriba en un archivo en su lugar. Antes de v2.1.208, Claude Code renderizaba cada fila, por lo que reanudar una sesión que contenía una tabla muy grande podría estancarse mientras se re-renderizaba.

51 55 

52<h3 id="auto-compaction-stops-with-a-thrashing-error">56<h3 id="auto-compaction-stops-with-a-thrashing-error">

53 Auto-compaction se detiene con un error de thrashing57 Auto-compaction se detiene con un error de thrashing


59 63 

601. Pida a Claude que lea el archivo de gran tamaño en fragmentos más pequeños, como un rango de línea específico o función, en lugar de todo el archivo641. Pida a Claude que lea el archivo de gran tamaño en fragmentos más pequeños, como un rango de línea específico o función, en lugar de todo el archivo

612. Ejecute `/compact` con un enfoque que elimine la salida grande, por ejemplo `/compact keep only the plan and the diff`652. Ejecute `/compact` con un enfoque que elimine la salida grande, por ejemplo `/compact keep only the plan and the diff`

623. Mueva el trabajo de archivo grande a un [subagente](/es/sub-agents) para que se ejecute en una ventana de contexto separada663. Mueva el trabajo de archivo grande a un [subagente](/docs/es/sub-agents) para que se ejecute en una ventana de contexto separada

634. Ejecute `/clear` si la conversación anterior ya no es necesaria674. Ejecute `/clear` si la conversación anterior ya no es necesaria

64 68 

65<h3 id="command-hangs-or-freezes">69<h3 id="command-hangs-or-freezes">


77 Texto garbled o corrupto en la terminal integrada de un editor81 Texto garbled o corrupto en la terminal integrada de un editor

78</h3>82</h3>

79 83 

80Si los caracteres se renderizan como cuadros, manchas, o glifos incorrectos al ejecutar Claude Code en la terminal integrada de VS Code, Cursor, o Devin Desktop, el renderizador GPU de la terminal es probablemente la causa. Ejecute `/terminal-setup` dentro de Claude Code para establecer `terminal.integrated.gpuAcceleration` a `"off"`, o establézcalo manualmente en la configuración de su editor y recargue la ventana. Consulte [Configuración de terminal](/es/terminal-config) para las otras configuraciones que `/terminal-setup` escribe.84Si los caracteres se renderizan como cuadros, manchas, o glifos incorrectos al ejecutar Claude Code en la terminal integrada de VS Code, Cursor, o Devin Desktop, el renderizador GPU de la terminal es probablemente la causa. Ejecute `/terminal-setup` dentro de Claude Code para establecer `terminal.integrated.gpuAcceleration` a `"off"`, o establézcalo manualmente en la configuración de su editor y recargue la ventana. Consulte [Configuración de terminal](/docs/es/terminal-config) para las otras configuraciones que `/terminal-setup` escribe.

81 85 

82<h3 id="search-and-discovery-issues">86<h3 id="search-and-discovery-issues">

83 Problemas de búsqueda y descubrimiento87 Problemas de búsqueda y descubrimiento


117 </Tab>121 </Tab>

118</Tabs>122</Tabs>

119 123 

120Luego establezca `USE_BUILTIN_RIPGREP=0` en su [entorno](/es/env-vars).124Luego establezca `USE_BUILTIN_RIPGREP=0` en su [entorno](/docs/es/env-vars).

121 125 

122<h3 id="slow-or-incomplete-search-results-on-wsl">126<h3 id="slow-or-incomplete-search-results-on-wsl">

123 Resultados de búsqueda lentos o incompletos en WSL127 Resultados de búsqueda lentos o incompletos en WSL