SpyBara
Go Premium

Documentation 2026-05-02 18:14 UTC to 2026-05-04 22:58 UTC

99 files changed +47,325 −0. View all changes and history on the product overview
2026
Tue 19 06:34 Mon 18 23:59 Sun 17 01:01 Fri 15 22:58 Thu 14 17:02 Wed 13 23:01 Tue 12 22:57 Mon 11 23:00 Sun 10 23:03 Sat 9 04:57 Fri 8 22:00 Thu 7 22:59 Tue 5 23:00 Mon 4 22:58

admin-setup.md +132 −0 created

Details

1> ## Documentation Index

2> Fetch the complete documentation index at: https://code.claude.com/docs/llms.txt

3> Use this file to discover all available pages before exploring further.

4 

5# Configurar Claude Code para su organización

6 

7> Un mapa de decisiones para administradores que implementan Claude Code, cubriendo proveedores de API, configuración administrada, aplicación de políticas, monitoreo de uso y manejo de datos.

8 

9Claude Code aplica la política de la organización a través de configuraciones administradas que tienen prioridad sobre la configuración local del desarrollador. Usted entrega esa configuración desde la consola de administración de Claude, su sistema de gestión de dispositivos móviles (MDM), o un archivo en disco. La configuración controla qué herramientas, comandos, servidores y destinos de red puede alcanzar Claude.

10 

11Esta página lo guía a través de las decisiones de implementación en orden. Cada fila se vincula a la sección a continuación y a la página de referencia para esa área.

12 

13<Note>

14 SSO, aprovisionamiento SCIM y asignación de asientos se configuran a nivel de cuenta de Claude. Consulte la [Guía del administrador empresarial de Claude](https://claude.com/resources/tutorials/claude-enterprise-administrator-guide) y [asignación de asientos](https://support.claude.com/en/articles/11845131-use-claude-code-with-your-team-or-enterprise-plan) para esos pasos.

15</Note>

16 

17| Decisión | Lo que está eligiendo | Referencia |

18| :------------------------------------------------------------------------------------------- | :------------------------------------------------------------------------ | :--------------------------------------------------------------------------------------------------------------------------------------- |

19| [Elegir su proveedor de API](#choose-your-api-provider) | Dónde Claude Code se autentica y cómo se factura | [Authentication](/es/authentication), [Bedrock](/es/amazon-bedrock), [Vertex AI](/es/google-vertex-ai), [Foundry](/es/microsoft-foundry) |

20| [Decidir cómo llega la configuración a los dispositivos](#decide-how-settings-reach-devices) | Cómo la política administrada llega a las máquinas de los desarrolladores | [Server-managed settings](/es/server-managed-settings), [Settings files](/es/settings#settings-files) |

21| [Decidir qué aplicar](#decide-what-to-enforce) | Qué herramientas, comandos e integraciones están permitidas | [Permissions](/es/permissions), [Sandboxing](/es/sandboxing) |

22| [Configurar visibilidad de uso](#set-up-usage-visibility) | Cómo rastrear el gasto y la adopción | [Analytics](/es/analytics), [Monitoring](/es/monitoring-usage), [Costs](/es/costs) |

23| [Revisar el manejo de datos](#review-data-handling) | Retención de datos y postura de cumplimiento | [Data usage](/es/data-usage), [Security](/es/security) |

24 

25## Elegir su proveedor de API

26 

27Claude Code se conecta a Claude a través de uno de varios proveedores de API. Su elección afecta la facturación, la autenticación y qué postura de cumplimiento hereda.

28 

29| Proveedor | Elija esto cuando |

30| :---------------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------- |

31| Claude for Teams / Enterprise | Desea Claude Code y claude.ai bajo una suscripción por asiento con ninguna infraestructura para ejecutar. Esta es la recomendación predeterminada. |

32| Claude Console | Es API-first o desea facturación de pago por uso |

33| Amazon Bedrock | Desea heredar controles de cumplimiento y facturación de AWS existentes |

34| Google Vertex AI | Desea heredar controles de cumplimiento y facturación de GCP existentes |

35| Microsoft Foundry | Desea heredar controles de cumplimiento y facturación de Azure existentes |

36 

37Para la comparación completa del proveedor que cubre autenticación, regiones y paridad de características, consulte la [descripción general de implementación empresarial](/es/third-party-integrations). La configuración de autenticación de cada proveedor está en [Authentication](/es/authentication).

38 

39Los requisitos de proxy y firewall en [Network configuration](/es/network-config) se aplican independientemente del proveedor. Si desea un único punto final frente a múltiples proveedores o registro de solicitudes centralizado, consulte [LLM gateway](/es/llm-gateway).

40 

41## Decidir cómo llega la configuración a los dispositivos

42 

43La configuración administrada define la política que tiene prioridad sobre la configuración local del desarrollador. Claude Code las busca en cuatro lugares y usa la primera que encuentra en un dispositivo determinado.

44 

45| Mecanismo | Entrega | Prioridad | Plataformas |

46| :---------------------- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :-------- | :------------- |

47| Server-managed | Consola de administración de Claude.ai | Más alta | Todas |

48| plist / registry policy | macOS: `com.anthropic.claudecode` plist<br />Windows: `HKLM\SOFTWARE\Policies\ClaudeCode` | Alta | macOS, Windows |

49| File-based managed | macOS: `/Library/Application Support/ClaudeCode/managed-settings.json`<br />Linux y WSL: `/etc/claude-code/managed-settings.json`<br />Windows: `C:\Program Files\ClaudeCode\managed-settings.json` | Media | Todas |

50| Windows user registry | `HKCU\SOFTWARE\Policies\ClaudeCode` | Más baja | Solo Windows |

51 

52La configuración administrada por servidor llega a los dispositivos en el momento de la autenticación y se actualiza cada hora durante las sesiones activas, sin infraestructura de punto final. Requieren un plan Claude for Teams o Enterprise, por lo que las implementaciones en otros proveedores necesitan uno de los mecanismos basados en archivos o a nivel del SO en su lugar.

53 

54Si su organización mezcla proveedores, configure [server-managed settings](/es/server-managed-settings) para usuarios de Claude.ai más un [respaldo basado en archivos o plist/registry](/es/settings#settings-files) para que otros usuarios aún reciban política administrada.

55 

56Las ubicaciones de plist y registro HKLM funcionan con cualquier proveedor y resisten la manipulación porque requieren privilegios de administrador para escribir. El registro de usuario de Windows en HKCU se puede escribir sin elevación, así que trátelo como un valor predeterminado de conveniencia en lugar de un canal de aplicación.

57 

58Por defecto, WSL lee solo la ruta de archivo de Linux en `/etc/claude-code`. Para extender su política de registro de Windows y `C:\Program Files\ClaudeCode` a WSL en la misma máquina, establezca [`wslInheritsWindowsSettings: true`](/es/settings#available-settings) en cualquiera de esas fuentes de solo administrador de Windows.

59 

60Cualquiera que sea el mecanismo que elija, los valores administrados tienen prioridad sobre la configuración de usuario y proyecto. La configuración de matriz como `permissions.allow` y `permissions.deny` fusionan entradas de todas las fuentes, por lo que los desarrolladores pueden extender listas administradas pero no eliminar de ellas.

61 

62Consulte [Server-managed settings](/es/server-managed-settings) y [Settings files and precedence](/es/settings#settings-files).

63 

64## Decidir qué aplicar

65 

66La configuración administrada puede bloquear herramientas, ejecución de sandbox, restringir servidores MCP y fuentes de plugins, y controlar qué hooks se ejecutan. Cada fila es una superficie de control con las claves de configuración que la impulsan.

67 

68| Control | Lo que hace | Configuraciones clave |

69| :------------------------------------------------------------------------------------- | :---------------------------------------------------------------------------------------------- | :---------------------------------------------------------------------------- |

70| [Permission rules](/es/permissions) | Permitir, preguntar o denegar herramientas y comandos específicos | `permissions.allow`, `permissions.deny` |

71| [Permission lockdown](/es/permissions#managed-only-settings) | Solo se aplican reglas de permisos administradas; deshabilitar `--dangerously-skip-permissions` | `allowManagedPermissionRulesOnly`, `permissions.disableBypassPermissionsMode` |

72| [Sandboxing](/es/sandboxing) | Aislamiento de sistema de archivos y red a nivel del SO con listas de permitidos de dominio | `sandbox.enabled`, `sandbox.network.allowedDomains` |

73| [Managed policy CLAUDE.md](/es/memory#deploy-organization-wide-claude-md) | Instrucciones de toda la organización cargadas en cada sesión, no se pueden excluir | Archivo en la ruta de política administrada |

74| [MCP server control](/es/mcp#managed-mcp-configuration) | Restringir qué servidores MCP pueden agregar o conectar los usuarios | `allowedMcpServers`, `deniedMcpServers`, `allowManagedMcpServersOnly` |

75| [Plugin marketplace control](/es/plugin-marketplaces#managed-marketplace-restrictions) | Restringir qué fuentes de marketplace pueden agregar e instalar los usuarios | `strictKnownMarketplaces`, `blockedMarketplaces` |

76| [Hook restrictions](/es/settings#hook-configuration) | Solo se cargan hooks administrados; restringir URLs de hooks HTTP | `allowManagedHooksOnly`, `allowedHttpHookUrls` |

77| [Version floor](/es/settings) | Evitar que la actualización automática instale por debajo de un mínimo de toda la organización | `minimumVersion` |

78 

79Las reglas de permisos y el sandboxing cubren diferentes capas. Denegar WebFetch bloquea la herramienta de búsqueda de Claude, pero si Bash está permitido, `curl` y `wget` aún pueden alcanzar cualquier URL. El sandboxing cierra esa brecha con una lista de permitidos de dominio de red aplicada a nivel del SO.

80 

81Para el modelo de amenaza que estos controles defienden, consulte [Security](/es/security).

82 

83## Configurar visibilidad de uso

84 

85Elija monitoreo basado en lo que necesita reportar.

86 

87| Capacidad | Lo que obtiene | Disponibilidad | Dónde comenzar |

88| :------------------ | :-------------------------------------------------------------------------- | :-------------------- | :--------------------------------------- |

89| Usage monitoring | Exportación de OpenTelemetry de sesiones, herramientas y tokens | Todos los proveedores | [Monitoring usage](/es/monitoring-usage) |

90| Analytics dashboard | Métricas por usuario, seguimiento de contribuciones, tabla de clasificación | Solo Anthropic | [Analytics](/es/analytics) |

91| Cost tracking | Límites de gasto, límites de velocidad y atribución de uso | Solo Anthropic | [Costs](/es/costs) |

92 

93Los proveedores de nube exponen el gasto a través de AWS Cost Explorer, GCP Billing o Azure Cost Management. Los planes Claude for Teams y Enterprise incluyen un panel de uso en [claude.ai/analytics/claude-code](https://claude.ai/analytics/claude-code).

94 

95## Revisar el manejo de datos

96 

97En planes de Team, Enterprise, Claude API y proveedores de nube, Anthropic no entrena modelos con su código o indicaciones. Su proveedor de API determina la retención y la postura de cumplimiento.

98 

99| Tema | Lo que debe saber | Dónde comenzar |

100| :------------------------ | :------------------------------------------------------------------------------------------- | :--------------------------------------------- |

101| Data usage policy | Qué recopila Anthropic, cuánto tiempo se retiene, qué nunca se usa para entrenamiento | [Data usage](/es/data-usage) |

102| Zero Data Retention (ZDR) | Nada almacenado después de que se completa la solicitud. Disponible en Claude for Enterprise | [Zero data retention](/es/zero-data-retention) |

103| Security architecture | Modelo de red, cifrado, autenticación, pista de auditoría | [Security](/es/security) |

104 

105Si necesita registro de auditoría a nivel de solicitud o enrutar tráfico por sensibilidad de datos, coloque una [LLM gateway](/es/llm-gateway) entre desarrolladores y su proveedor. Para requisitos regulatorios y certificaciones, consulte [Legal and compliance](/es/legal-and-compliance).

106 

107## Verificar e incorporar

108 

109Después de configurar la configuración administrada, haga que un desarrollador ejecute `/status` dentro de Claude Code. La salida incluye una línea que comienza con `Enterprise managed settings` seguida de la fuente entre paréntesis, una de `(remote)`, `(plist)`, `(HKLM)`, `(HKCU)`, o `(file)`. Consulte [Verificar configuración activa](/es/settings#verify-active-settings).

110 

111Comparta estos recursos para ayudar a los desarrolladores a comenzar:

112 

113* [Quickstart](/es/quickstart): recorrido de primera sesión desde la instalación hasta trabajar con un proyecto

114* [Common workflows](/es/common-workflows): patrones para tareas cotidianas como revisión de código, refactorización y depuración

115* [Claude 101](https://anthropic.skilljar.com/claude-101) y [Claude Code in Action](https://anthropic.skilljar.com/claude-code-in-action): cursos de Anthropic Academy a su propio ritmo

116 

117Para problemas de inicio de sesión, dirija a los desarrolladores a [solución de problemas de autenticación](/es/troubleshoot-install#login-and-authentication). Las correcciones más comunes son:

118 

119* Ejecutar `/logout` luego `/login` para cambiar de cuenta

120* Ejecutar `claude update` si falta la opción de autenticación empresarial

121* Reiniciar la terminal después de actualizar

122 

123Si un desarrollador ve "You haven't been added to your organization yet," su asiento no incluye acceso a Claude Code y debe actualizarse en la consola de administración.

124 

125## Próximos pasos

126 

127Con el proveedor y el mecanismo de entrega elegidos, continúe con la configuración detallada:

128 

129* [Server-managed settings](/es/server-managed-settings): entregar política administrada desde la consola de administración de Claude

130* [Settings reference](/es/settings): cada clave de configuración, ubicación de archivo y regla de precedencia

131* [Amazon Bedrock](/es/amazon-bedrock), [Google Vertex AI](/es/google-vertex-ai), [Microsoft Foundry](/es/microsoft-foundry): implementación específica del proveedor

132* [Claude Enterprise Administrator Guide](https://claude.com/resources/tutorials/claude-enterprise-administrator-guide): SSO, SCIM, gestión de asientos y guía de implementación

Details

1> ## Documentation Index

2> Fetch the complete documentation index at: https://code.claude.com/docs/llms.txt

3> Use this file to discover all available pages before exploring further.

4 

5# Usar características de Claude Code en el SDK

6 

7> Cargue instrucciones de proyecto, skills, hooks y otras características de Claude Code en sus agentes SDK.

8 

9El Agent SDK se basa en la misma base que Claude Code, lo que significa que sus agentes SDK tienen acceso a las mismas características basadas en el sistema de archivos: instrucciones de proyecto (`CLAUDE.md` y reglas), skills, hooks y más.

10 

11Cuando omite `settingSources`, `query()` lee la misma configuración del sistema de archivos que la CLI de Claude Code: configuración de usuario, proyecto y local, archivos `CLAUDE.md` y skills, agentes y comandos en `.claude/`. Para ejecutar sin estos, pase `settingSources: []`, lo que limita el agente a lo que configure programáticamente. La configuración de políticas administradas y la configuración global `~/.claude.json` se leen independientemente de esta opción. Consulte [Qué settingSources no controla](#what-settingsources-does-not-control).

12 

13Para una descripción conceptual de lo que hace cada característica y cuándo usarla, consulte [Extender Claude Code](/es/features-overview).

14 

15## Controlar la configuración del sistema de archivos con settingSources

16 

17La opción de fuentes de configuración ([`setting_sources`](/es/agent-sdk/python#claude-agent-options) en Python, [`settingSources`](/es/agent-sdk/typescript#setting-source) en TypeScript) controla qué configuración basada en el sistema de archivos carga el SDK. Pase una lista explícita para optar por fuentes específicas, o pase una matriz vacía para deshabilitar la configuración de usuario, proyecto y local.

18 

19Este ejemplo carga tanto la configuración a nivel de usuario como a nivel de proyecto estableciendo `settingSources` en `["user", "project"]`:

20 

21<CodeGroup>

22 ```python Python theme={null}

23 from claude_agent_sdk import query, ClaudeAgentOptions, AssistantMessage, ResultMessage

24 

25 async for message in query(

26 prompt="Help me refactor the auth module",

27 options=ClaudeAgentOptions(

28 # "user" loads from ~/.claude/, "project" loads from ./.claude/ in cwd.

29 # Together they give the agent access to CLAUDE.md, skills, hooks, and

30 # permissions from both locations.

31 setting_sources=["user", "project"],

32 allowed_tools=["Read", "Edit", "Bash"],

33 ),

34 ):

35 if isinstance(message, AssistantMessage):

36 for block in message.content:

37 if hasattr(block, "text"):

38 print(block.text)

39 if isinstance(message, ResultMessage) and message.subtype == "success":

40 print(f"\nResult: {message.result}")

41 ```

42 

43 ```typescript TypeScript theme={null}

44 import { query } from "@anthropic-ai/claude-agent-sdk";

45 

46 for await (const message of query({

47 prompt: "Help me refactor the auth module",

48 options: {

49 // "user" loads from ~/.claude/, "project" loads from ./.claude/ in cwd.

50 // Together they give the agent access to CLAUDE.md, skills, hooks, and

51 // permissions from both locations.

52 settingSources: ["user", "project"],

53 allowedTools: ["Read", "Edit", "Bash"]

54 }

55 })) {

56 if (message.type === "assistant") {

57 for (const block of message.message.content) {

58 if (block.type === "text") console.log(block.text);

59 }

60 }

61 if (message.type === "result" && message.subtype === "success") {

62 console.log(`\nResult: ${message.result}`);

63 }

64 }

65 ```

66</CodeGroup>

67 

68Cada fuente carga la configuración desde una ubicación específica, donde `<cwd>` es el directorio de trabajo que pasa a través de la opción `cwd` (o el directorio actual del proceso si no está establecido). Para la definición de tipo completa, consulte [`SettingSource`](/es/agent-sdk/typescript#setting-source) (TypeScript) o [`SettingSource`](/es/agent-sdk/python#setting-source) (Python).

69 

70| Fuente | Qué carga | Ubicación |

71| :---------- | :------------------------------------------------------------------------------------------------------------------ | :-------------------------------------------------------------------------------------------------------------------------------------------------- |

72| `"project"` | CLAUDE.md del proyecto, `.claude/rules/*.md`, skills del proyecto, hooks del proyecto, `settings.json` del proyecto | `<cwd>/.claude/` y cada directorio padre hasta la raíz del sistema de archivos (deteniéndose cuando se encuentra un `.claude/` o no hay más padres) |

73| `"user"` | CLAUDE.md del usuario, `~/.claude/rules/*.md`, skills del usuario, configuración del usuario | `~/.claude/` |

74| `"local"` | CLAUDE.local.md (gitignored), `.claude/settings.local.json` | `<cwd>/` |

75 

76Omitir `settingSources` es equivalente a `["user", "project", "local"]`.

77 

78La opción `cwd` determina dónde busca el SDK la configuración del proyecto. Si ni `cwd` ni ninguno de sus directorios padre contiene una carpeta `.claude/`, las características a nivel de proyecto no se cargarán.

79 

80### Qué settingSources no controla

81 

82`settingSources` cubre la configuración de usuario, proyecto y local. Algunas entradas se leen independientemente de su valor:

83 

84| Entrada | Comportamiento | Para deshabilitar |

85| :----------------------------------------------------------- | :--------------------------------------------------------- | :-------------------------------------------------------------------------------------------------------- |

86| Configuración de políticas administradas | Siempre se carga cuando está presente en el host | Elimine el archivo de configuración administrada |

87| Configuración global `~/.claude.json` | Siempre se lee | Reubique con `CLAUDE_CONFIG_DIR` en `env` |

88| Memoria automática en `~/.claude/projects/<project>/memory/` | Se carga de forma predeterminada en el mensaje del sistema | Establezca `autoMemoryEnabled: false` en la configuración, o `CLAUDE_CODE_DISABLE_AUTO_MEMORY=1` en `env` |

89 

90<Warning>

91 No confíe en las opciones predeterminadas de `query()` para el aislamiento multiinquilino. Debido a que las entradas anteriores se leen independientemente de `settingSources`, un proceso SDK puede recopilar configuración a nivel de host y memoria por directorio. Para implementaciones multiinquilino, ejecute cada inquilino en su propio sistema de archivos y establezca `settingSources: []` más `CLAUDE_CODE_DISABLE_AUTO_MEMORY=1` en `env`. Consulte [Implementación segura](/es/agent-sdk/secure-deployment).

92</Warning>

93 

94## Instrucciones de proyecto (CLAUDE.md y reglas)

95 

96Los archivos `CLAUDE.md` y los archivos `.claude/rules/*.md` proporcionan a su agente contexto persistente sobre su proyecto: convenciones de codificación, comandos de compilación, decisiones de arquitectura e instrucciones. Cuando `settingSources` incluye `"project"` (como en el ejemplo anterior), el SDK carga estos archivos en el contexto al inicio de la sesión. El agente luego sigue sus convenciones de proyecto sin que tenga que repetirlas en cada mensaje.

97 

98### Ubicaciones de carga de CLAUDE.md

99 

100| Nivel | Ubicación | Cuándo se carga |

101| :--------------------------- | :------------------------------------------------------ | :---------------------------------------------------------------------------------------------------------- |

102| Proyecto (raíz) | `<cwd>/CLAUDE.md` o `<cwd>/.claude/CLAUDE.md` | `settingSources` incluye `"project"` |

103| Reglas del proyecto | `<cwd>/.claude/rules/*.md` | `settingSources` incluye `"project"` |

104| Proyecto (directorios padre) | Archivos `CLAUDE.md` en directorios por encima de `cwd` | `settingSources` incluye `"project"`, se carga al inicio de la sesión |

105| Proyecto (directorios hijo) | Archivos `CLAUDE.md` en subdirectorios de `cwd` | `settingSources` incluye `"project"`, se carga bajo demanda cuando el agente lee un archivo en ese subárbol |

106| Local (gitignored) | `<cwd>/CLAUDE.local.md` | `settingSources` incluye `"local"` |

107| Usuario | `~/.claude/CLAUDE.md` | `settingSources` incluye `"user"` |

108| Reglas del usuario | `~/.claude/rules/*.md` | `settingSources` incluye `"user"` |

109 

110Todos los niveles son aditivos: si existen archivos `CLAUDE.md` tanto de proyecto como de usuario, el agente ve ambos. No hay una regla de precedencia dura entre niveles; si las instrucciones entran en conflicto, el resultado depende de cómo Claude las interprete. Escriba reglas que no entren en conflicto, o indique la precedencia explícitamente en el archivo más específico ("Estas instrucciones de proyecto anulan cualquier valor predeterminado conflictivo a nivel de usuario").

111 

112<Tip>

113 También puede inyectar contexto directamente a través de `systemPrompt` sin usar archivos `CLAUDE.md`. Consulte [Modificar mensajes del sistema](/es/agent-sdk/modifying-system-prompts). Use `CLAUDE.md` cuando desee que el mismo contexto se comparta entre sesiones interactivas de Claude Code y sus agentes SDK.

114</Tip>

115 

116Para saber cómo estructurar y organizar el contenido de `CLAUDE.md`, consulte [Administrar la memoria de Claude](/es/memory).

117 

118## Skills

119 

120Los skills son archivos markdown que proporcionan a su agente conocimiento especializado y flujos de trabajo invocables. A diferencia de `CLAUDE.md` (que se carga cada sesión), los skills se cargan bajo demanda. El agente recibe descripciones de skills al inicio y carga el contenido completo cuando es relevante.

121 

122Los skills se descubren desde el sistema de archivos a través de `settingSources`. Con opciones predeterminadas, los skills de usuario y proyecto se cargan automáticamente. La herramienta `Skill` está habilitada de forma predeterminada cuando no especifica `allowedTools`. Si está usando una lista de permitidos `allowedTools`, incluya `"Skill"` explícitamente.

123 

124<CodeGroup>

125 ```python Python theme={null}

126 from claude_agent_sdk import query, ClaudeAgentOptions, ResultMessage

127 

128 # Skills in .claude/skills/ are discovered automatically

129 # when settingSources includes "project"

130 async for message in query(

131 prompt="Review this PR using our code review checklist",

132 options=ClaudeAgentOptions(

133 setting_sources=["user", "project"],

134 allowed_tools=["Skill", "Read", "Grep", "Glob"],

135 ),

136 ):

137 if isinstance(message, ResultMessage) and message.subtype == "success":

138 print(message.result)

139 ```

140 

141 ```typescript TypeScript theme={null}

142 import { query } from "@anthropic-ai/claude-agent-sdk";

143 

144 // Skills in .claude/skills/ are discovered automatically

145 // when settingSources includes "project"

146 for await (const message of query({

147 prompt: "Review this PR using our code review checklist",

148 options: {

149 settingSources: ["user", "project"],

150 allowedTools: ["Skill", "Read", "Grep", "Glob"]

151 }

152 })) {

153 if (message.type === "result" && message.subtype === "success") {

154 console.log(message.result);

155 }

156 }

157 ```

158</CodeGroup>

159 

160<Note>

161 Los skills deben crearse como artefactos del sistema de archivos (`.claude/skills/<name>/SKILL.md`). El SDK no tiene una API programática para registrar skills. Consulte [Agent Skills en el SDK](/es/agent-sdk/skills) para obtener detalles completos.

162</Note>

163 

164Para obtener más información sobre cómo crear y usar skills, consulte [Agent Skills en el SDK](/es/agent-sdk/skills).

165 

166## Hooks

167 

168El SDK admite dos formas de definir hooks, y se ejecutan lado a lado:

169 

170* **Hooks del sistema de archivos:** comandos de shell definidos en `settings.json`, cargados cuando `settingSources` incluye la fuente relevante. Estos son los mismos hooks que configuraría para [sesiones interactivas de Claude Code](/es/hooks-guide).

171* **Hooks programáticos:** funciones de devolución de llamada pasadas directamente a `query()`. Se ejecutan en el proceso de su aplicación y pueden devolver decisiones estructuradas. Consulte [Controlar la ejecución con hooks](/es/agent-sdk/hooks).

172 

173Ambos tipos se ejecutan durante el mismo ciclo de vida del hook. Si ya tiene hooks en el `.claude/settings.json` de su proyecto y establece `settingSources: ["project"]`, esos hooks se ejecutan automáticamente en el SDK sin configuración adicional.

174 

175Las devoluciones de llamada de hooks reciben la entrada de la herramienta y devuelven un diccionario de decisión. Devolver `{}` (un diccionario vacío) significa permitir que la herramienta continúe. Devolver `{"decision": "block", "reason": "..."}` previene la ejecución y la razón se envía a Claude como el resultado de la herramienta. Consulte la [guía de hooks](/es/agent-sdk/hooks) para la firma de devolución de llamada completa y los tipos de retorno.

176 

177<CodeGroup>

178 ```python Python theme={null}

179 from claude_agent_sdk import query, ClaudeAgentOptions, HookMatcher, ResultMessage

180 

181 

182 # PreToolUse hook callback. Positional args:

183 # input_data: HookInput dict with tool_name, tool_input, hook_event_name

184 # tool_use_id: str | None, the ID of the tool call being intercepted

185 # context: HookContext, carries session metadata

186 async def audit_bash(input_data, tool_use_id, context):

187 command = input_data.get("tool_input", {}).get("command", "")

188 if "rm -rf" in command:

189 return {"decision": "block", "reason": "Destructive command blocked"}

190 return {} # Empty dict: allow the tool to proceed

191 

192 

193 # Filesystem hooks from .claude/settings.json run automatically

194 # when settingSources loads them. You can also add programmatic hooks:

195 async for message in query(

196 prompt="Refactor the auth module",

197 options=ClaudeAgentOptions(

198 setting_sources=["project"], # Loads hooks from .claude/settings.json

199 hooks={

200 "PreToolUse": [

201 HookMatcher(matcher="Bash", hooks=[audit_bash]),

202 ]

203 },

204 ),

205 ):

206 if isinstance(message, ResultMessage) and message.subtype == "success":

207 print(message.result)

208 ```

209 

210 ```typescript TypeScript theme={null}

211 import { query, type HookInput, type HookJSONOutput } from "@anthropic-ai/claude-agent-sdk";

212 

213 // PreToolUse hook callback. HookInput is a discriminated union on

214 // hook_event_name, so narrowing on it gives TypeScript the right

215 // tool_input shape for this event.

216 const auditBash = async (input: HookInput): Promise<HookJSONOutput> => {

217 if (input.hook_event_name !== "PreToolUse") return {};

218 const toolInput = input.tool_input as { command?: string };

219 if (toolInput.command?.includes("rm -rf")) {

220 return { decision: "block", reason: "Destructive command blocked" };

221 }

222 return {}; // Empty object: allow the tool to proceed

223 };

224 

225 // Filesystem hooks from .claude/settings.json run automatically

226 // when settingSources loads them. You can also add programmatic hooks:

227 for await (const message of query({

228 prompt: "Refactor the auth module",

229 options: {

230 settingSources: ["project"], // Loads hooks from .claude/settings.json

231 hooks: {

232 PreToolUse: [{ matcher: "Bash", hooks: [auditBash] }]

233 }

234 }

235 })) {

236 if (message.type === "result" && message.subtype === "success") {

237 console.log(message.result);

238 }

239 }

240 ```

241</CodeGroup>

242 

243### Cuándo usar qué tipo de hook

244 

245| Tipo de hook | Mejor para |

246| :------------------------------------------------------ | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

247| **Sistema de archivos** (`settings.json`) | Compartir hooks entre sesiones CLI y SDK. Admite `"command"` (scripts de shell), `"http"` (POST a un punto final), `"mcp_tool"` (llamar a la herramienta de un servidor MCP conectado), `"prompt"` (LLM evalúa un mensaje), y `"agent"` (genera un agente verificador). Se ejecutan en el agente principal y en cualquier subagenteque genere. |

248| **Programático** (devoluciones de llamada en `query()`) | Lógica específica de la aplicación; devolver decisiones estructuradas; integración en proceso. Limitado a la sesión principal únicamente. |

249 

250<Note>

251 El SDK de TypeScript admite eventos de hook adicionales más allá de Python, incluidos `SessionStart`, `SessionEnd`, `TeammateIdle` y `TaskCompleted`. Consulte la [guía de hooks](/es/agent-sdk/hooks) para la tabla de compatibilidad de eventos completa.

252</Note>

253 

254Para obtener detalles completos sobre hooks programáticos, consulte [Controlar la ejecución con hooks](/es/agent-sdk/hooks). Para la sintaxis de hooks del sistema de archivos, consulte [Hooks](/es/hooks).

255 

256## Elegir la característica correcta

257 

258El Agent SDK le proporciona acceso a varias formas de extender el comportamiento de su agente. Si no está seguro de cuál usar, esta tabla asigna objetivos comunes al enfoque correcto.

259 

260| Desea... | Usar | Superficie del SDK |

261| :---------------------------------------------------------------------------------------------------------------- | :------------------------------------------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

262| Establecer convenciones de proyecto que su agente siempre sigue | [CLAUDE.md](/es/memory) | `settingSources: ["project"]` lo carga automáticamente |

263| Proporcionar al agente material de referencia que carga cuando es relevante | [Skills](/es/agent-sdk/skills) | `settingSources` + `allowedTools: ["Skill"]` |

264| Ejecutar un flujo de trabajo reutilizable (desplegar, revisar, lanzar) | [Skills invocables por el usuario](/es/agent-sdk/skills) | `settingSources` + `allowedTools: ["Skill"]` |

265| Delegar una subtarea aislada a un contexto nuevo (investigación, revisión) | [Subagentos](/es/agent-sdk/subagents) | parámetro `agents` + `allowedTools: ["Agent"]` |

266| Coordinar múltiples instancias de Claude Code con listas de tareas compartidas y mensajería directa entre agentes | [Equipos de agentes](/es/agent-teams) | No se configura directamente a través de opciones del SDK. Los equipos de agentes son una característica CLI donde una sesión actúa como el líder del equipo, coordinando el trabajo entre compañeros independientes |

267| Ejecutar lógica determinista en llamadas de herramientas (auditoría, bloqueo, transformación) | [Hooks](/es/agent-sdk/hooks) | parámetro `hooks` con devoluciones de llamada, o scripts de shell cargados a través de `settingSources` |

268| Proporcionar a Claude acceso a herramientas estructuradas a un servicio externo | [MCP](/es/agent-sdk/mcp) | parámetro `mcpServers` |

269 

270<Tip>

271 **Subagentos versus equipos de agentes:** Los subagentos son efímeros y aislados: conversación nueva, una tarea, resumen devuelto al padre. Los equipos de agentes coordinan múltiples instancias independientes de Claude Code que comparten una lista de tareas y se envían mensajes directamente entre sí. Los equipos de agentes son una característica CLI. Consulte [Qué heredan los subagentos](/es/agent-sdk/subagents#what-subagents-inherit) y la [comparación de equipos de agentes](/es/agent-teams#compare-with-subagents) para obtener detalles.

272</Tip>

273 

274Cada característica que habilita se suma a la ventana de contexto de su agente. Para costos por característica y cómo se superponen estas características, consulte [Extender Claude Code](/es/features-overview#understand-context-costs).

275 

276## Recursos relacionados

277 

278* [Extender Claude Code](/es/features-overview): Descripción conceptual de todas las características de extensión, con tablas de comparación y análisis de costos de contexto

279* [Skills en el SDK](/es/agent-sdk/skills): Guía completa para usar skills programáticamente

280* [Subagentos](/es/agent-sdk/subagents): Defina e invoque subagentos para subtareas aisladas

281* [Hooks](/es/agent-sdk/hooks): Intercepte y controle el comportamiento del agente en puntos de ejecución clave

282* [Permisos](/es/agent-sdk/permissions): Controle el acceso a herramientas con modos, reglas y devoluciones de llamada

283* [Mensajes del sistema](/es/agent-sdk/modifying-system-prompts): Inyecte contexto sin archivos CLAUDE.md

agent-sdk/cost-tracking.md +263 −0 created

Details

1> ## Documentation Index

2> Fetch the complete documentation index at: https://code.claude.com/docs/llms.txt

3> Use this file to discover all available pages before exploring further.

4 

5# Rastrear costo y uso

6 

7> Aprenda a rastrear el uso de tokens, estimar costos y configurar el almacenamiento en caché de indicaciones con el SDK del Agente Claude.

8 

9El SDK del Agente Claude proporciona información detallada sobre el uso de tokens para cada interacción con Claude. Esta guía explica cómo rastrear adecuadamente el uso y comprender los informes de costos, especialmente cuando se trata de usos de herramientas paralelas y conversaciones de múltiples pasos.

10 

11Para la documentación completa de la API, consulte la [referencia del SDK de TypeScript](/es/agent-sdk/typescript) y la [referencia del SDK de Python](/es/agent-sdk/python).

12 

13<Warning>

14 Los campos `total_cost_usd` y `costUSD` son estimaciones del lado del cliente, no datos de facturación autorizados. El SDK los calcula localmente a partir de una tabla de precios incluida en el momento de la compilación, por lo que pueden desviarse de lo que realmente se le factura cuando:

15 

16 * los precios cambian

17 * la versión del SDK instalada no reconoce un modelo

18 * se aplican reglas de facturación que el cliente no puede modelar

19 

20 Utilice estos campos para obtener información de desarrollo y presupuestos aproximados. Para facturación autorizada, utilice la [API de Uso y Costo](https://platform.claude.com/docs/en/build-with-claude/usage-cost-api) o la página de Uso en la [Consola Claude](https://platform.claude.com/usage). No facture a los usuarios finales ni desencadene decisiones financieras a partir de estos campos.

21</Warning>

22 

23## Comprender el uso de tokens

24 

25Los SDK de TypeScript y Python exponen los mismos datos de uso con nombres de campo diferentes:

26 

27* **TypeScript** proporciona desgloses de tokens por paso en cada mensaje del asistente (`message.message.id`, `message.message.usage`), costo por modelo a través de `modelUsage` en el mensaje de resultado, y un total acumulativo en el mensaje de resultado.

28* **Python** proporciona desgloses de tokens por paso en cada mensaje del asistente (`message.usage`, `message.message_id`), costo por modelo a través de `model_usage` en el mensaje de resultado, y el total acumulado en el mensaje de resultado (`total_cost_usd` y diccionario `usage`).

29 

30Ambos SDK utilizan el mismo modelo de costo subyacente y exponen la misma granularidad. La diferencia está en la nomenclatura de campos y dónde se anida el uso por paso.

31 

32El rastreo de costos depende de comprender cómo el SDK delimita los datos de uso:

33 

34* **Llamada `query()`:** una invocación de la función `query()` del SDK. Una sola llamada puede implicar múltiples pasos (Claude responde, usa herramientas, obtiene resultados, responde nuevamente). Cada llamada produce un mensaje [`result`](/es/agent-sdk/typescript#sdk-result-message) al final.

35* **Paso:** un ciclo único de solicitud/respuesta dentro de una llamada `query()`. Cada paso produce mensajes del asistente con uso de tokens.

36* **Sesión:** una serie de llamadas `query()` vinculadas por un ID de sesión (usando la opción `resume`). Cada llamada `query()` dentro de una sesión reporta su propio costo de forma independiente.

37 

38El siguiente diagrama muestra el flujo de mensajes de una sola llamada `query()`, con el uso de tokens reportado en cada paso y la estimación acumulativa al final:

39 

40<img src="https://mintcdn.com/claude-code/Dujg43sxTkuhSELI/images/agent-sdk/message-usage-flow.svg?fit=max&auto=format&n=Dujg43sxTkuhSELI&q=85&s=c542f51ff58547ef9c0e57b16d03f33c" alt="Diagrama que muestra una consulta que produce dos pasos de mensajes. El paso 1 tiene cuatro mensajes del asistente que comparten el mismo ID y uso (contar una vez), el paso 2 tiene un mensaje del asistente con un nuevo ID, y el mensaje de resultado final muestra el total_cost_usd estimado." width="760" height="520" data-path="images/agent-sdk/message-usage-flow.svg" />

41 

42<Steps>

43 <Step title="Cada paso produce mensajes del asistente">

44 Cuando Claude responde, envía uno o más mensajes del asistente. En TypeScript, cada mensaje del asistente contiene un `BetaMessage` anidado (accesible a través de `message.message`) con un `id` y un objeto [`usage`](https://platform.claude.com/docs/en/api/messages) con conteos de tokens (`input_tokens`, `output_tokens`). En Python, la clase de datos `AssistantMessage` expone los mismos datos directamente a través de `message.usage` y `message.message_id`. Cuando Claude usa múltiples herramientas en un turno, todos los mensajes en ese turno comparten el mismo ID, así que deduplique por ID para evitar contar dos veces.

45 </Step>

46 

47 <Step title="El mensaje de resultado proporciona la estimación acumulativa">

48 Cuando se completa la llamada `query()`, el SDK emite un mensaje de resultado con `total_cost_usd` y `usage` acumulativo. Esto está disponible tanto en TypeScript ([`SDKResultMessage`](/es/agent-sdk/typescript#sdk-result-message)) como en Python ([`ResultMessage`](/es/agent-sdk/python#result-message)). Si realiza múltiples llamadas `query()` (por ejemplo, en una sesión de múltiples turnos), cada resultado solo refleja el costo de esa llamada individual. Si solo necesita el total estimado, puede ignorar el uso por paso y leer este valor único.

49 </Step>

50</Steps>

51 

52## Obtener el costo total de una consulta

53 

54El mensaje de resultado ([TypeScript](/es/agent-sdk/typescript#sdk-result-message), [Python](/es/agent-sdk/python#result-message)) marca el final del bucle del agente para una llamada `query()`. Incluye `total_cost_usd`, el costo estimado acumulativo en todos los pasos de esa llamada. Esto funciona tanto para resultados de éxito como de error. Si utiliza sesiones para realizar múltiples llamadas `query()`, cada resultado solo refleja el costo de esa llamada individual.

55 

56Los siguientes ejemplos iteran sobre el flujo de mensajes de una llamada `query()` e imprimen el costo total cuando llega el mensaje `result`:

57 

58<CodeGroup>

59 ```typescript TypeScript theme={null}

60 import { query } from "@anthropic-ai/claude-agent-sdk";

61 

62 for await (const message of query({ prompt: "Summarize this project" })) {

63 if (message.type === "result") {

64 console.log(`Total cost: $${message.total_cost_usd}`);

65 }

66 }

67 ```

68 

69 ```python Python theme={null}

70 from claude_agent_sdk import query, ResultMessage

71 import asyncio

72 

73 

74 async def main():

75 async for message in query(prompt="Summarize this project"):

76 if isinstance(message, ResultMessage):

77 print(f"Total cost: ${message.total_cost_usd or 0}")

78 

79 

80 asyncio.run(main())

81 ```

82</CodeGroup>

83 

84## Rastrear el uso por paso y por modelo

85 

86Los ejemplos en esta sección utilizan nombres de campo de TypeScript. En Python, los campos equivalentes son [`AssistantMessage.usage`](/es/agent-sdk/python#assistant-message) y `AssistantMessage.message_id` para el uso por paso, y [`ResultMessage.model_usage`](/es/agent-sdk/python#result-message) para desgloses por modelo.

87 

88### Rastrear el uso por paso

89 

90Cada mensaje del asistente contiene un `BetaMessage` anidado (accesible a través de `message.message`) con un `id` y un objeto `usage` con conteos de tokens. Cuando Claude usa herramientas en paralelo, múltiples mensajes comparten el mismo `id` con datos de uso idénticos. Realice un seguimiento de qué ID ya ha contado y omita los duplicados para evitar totales inflados.

91 

92<Warning>

93 Las llamadas de herramientas paralelas producen múltiples mensajes del asistente cuyo `BetaMessage` anidado comparte el mismo `id` y uso idéntico. Siempre deduplique por ID para obtener conteos de tokens por paso precisos.

94</Warning>

95 

96El siguiente ejemplo acumula tokens de entrada y salida en todos los pasos, contando cada ID de mensaje único solo una vez:

97 

98```typescript theme={null}

99import { query } from "@anthropic-ai/claude-agent-sdk";

100 

101const seenIds = new Set<string>();

102let totalInputTokens = 0;

103let totalOutputTokens = 0;

104 

105for await (const message of query({ prompt: "Summarize this project" })) {

106 if (message.type === "assistant") {

107 const msgId = message.message.id;

108 

109 // Parallel tool calls share the same ID, only count once

110 if (!seenIds.has(msgId)) {

111 seenIds.add(msgId);

112 totalInputTokens += message.message.usage.input_tokens;

113 totalOutputTokens += message.message.usage.output_tokens;

114 }

115 }

116}

117 

118console.log(`Steps: ${seenIds.size}`);

119console.log(`Input tokens: ${totalInputTokens}`);

120console.log(`Output tokens: ${totalOutputTokens}`);

121```

122 

123### Desglosar el uso por modelo

124 

125El mensaje de resultado incluye [`modelUsage`](/es/agent-sdk/typescript#model-usage), un mapa del nombre del modelo a conteos de tokens y costo por modelo. Esto es útil cuando ejecuta múltiples modelos (por ejemplo, Haiku para suagentes y Opus para el agente principal) y desea ver dónde van los tokens.

126 

127El siguiente ejemplo ejecuta una consulta e imprime el costo y desglose de tokens para cada modelo utilizado:

128 

129```typescript theme={null}

130import { query } from "@anthropic-ai/claude-agent-sdk";

131 

132for await (const message of query({ prompt: "Summarize this project" })) {

133 if (message.type !== "result") continue;

134 

135 for (const [modelName, usage] of Object.entries(message.modelUsage)) {

136 console.log(`${modelName}: $${usage.costUSD.toFixed(4)}`);

137 console.log(` Input tokens: ${usage.inputTokens}`);

138 console.log(` Output tokens: ${usage.outputTokens}`);

139 console.log(` Cache read: ${usage.cacheReadInputTokens}`);

140 console.log(` Cache creation: ${usage.cacheCreationInputTokens}`);

141 }

142}

143```

144 

145## Acumular costos en múltiples llamadas

146 

147Cada llamada `query()` devuelve su propio `total_cost_usd`. El SDK no proporciona un total a nivel de sesión, así que si su aplicación realiza múltiples llamadas `query()` (por ejemplo, en una sesión de múltiples turnos o entre diferentes usuarios), acumule los totales usted mismo.

148 

149Los siguientes ejemplos ejecutan dos llamadas `query()` secuencialmente, agregan el `total_cost_usd` de cada llamada a un total acumulado, e imprimen tanto el costo por llamada como el combinado:

150 

151<CodeGroup>

152 ```typescript TypeScript theme={null}

153 import { query } from "@anthropic-ai/claude-agent-sdk";

154 

155 // Track cumulative cost across multiple query() calls

156 let totalSpend = 0;

157 

158 const prompts = [

159 "Read the files in src/ and summarize the architecture",

160 "List all exported functions in src/auth.ts"

161 ];

162 

163 for (const prompt of prompts) {

164 for await (const message of query({ prompt })) {

165 if (message.type === "result") {

166 totalSpend += message.total_cost_usd;

167 console.log(`This call: $${message.total_cost_usd}`);

168 }

169 }

170 }

171 

172 console.log(`Total spend: $${totalSpend.toFixed(4)}`);

173 ```

174 

175 ```python Python theme={null}

176 from claude_agent_sdk import query, ResultMessage

177 import asyncio

178 

179 

180 async def main():

181 # Track cumulative cost across multiple query() calls

182 total_spend = 0.0

183 

184 prompts = [

185 "Read the files in src/ and summarize the architecture",

186 "List all exported functions in src/auth.ts",

187 ]

188 

189 for prompt in prompts:

190 async for message in query(prompt=prompt):

191 if isinstance(message, ResultMessage):

192 cost = message.total_cost_usd or 0

193 total_spend += cost

194 print(f"This call: ${cost}")

195 

196 print(f"Total spend: ${total_spend:.4f}")

197 

198 

199 asyncio.run(main())

200 ```

201</CodeGroup>

202 

203## Manejar errores, almacenamiento en caché y discrepancias de tokens

204 

205Para un rastreo de costos preciso, tenga en cuenta conversaciones fallidas, precios de tokens en caché e inconsistencias ocasionales en los informes.

206 

207### Resolver discrepancias de tokens de salida

208 

209En casos raros, puede observar diferentes valores de `output_tokens` para mensajes con el mismo ID. Cuando esto ocurra:

210 

2111. **Utilice el valor más alto:** el mensaje final en un grupo típicamente contiene el total preciso.

2122. **Prefiera el mensaje de resultado:** el `total_cost_usd` en el mensaje de resultado refleja la estimación acumulada del SDK en todos los pasos, por lo que es más confiable que sumar valores por paso usted mismo. Sigue siendo una estimación y puede diferir de su factura real.

2133. **Reporte inconsistencias:** presente problemas en el [repositorio de GitHub de Claude Code](https://github.com/anthropics/claude-code/issues).

214 

215### Rastrear costos en conversaciones fallidas

216 

217Tanto los mensajes de resultado de éxito como de error incluyen `usage` y `total_cost_usd`. Si una conversación falla a mitad de camino, aún consumió tokens hasta el punto de falla. Siempre lea datos de costo del mensaje de resultado independientemente de su `subtype`.

218 

219### Rastrear tokens en caché

220 

221El SDK del Agente utiliza automáticamente [almacenamiento en caché de indicaciones](https://platform.claude.com/docs/en/build-with-claude/prompt-caching) para reducir costos en contenido repetido. No necesita configurar el almacenamiento en caché usted mismo. El objeto de uso incluye dos campos adicionales para rastreo de caché:

222 

223* `cache_creation_input_tokens`: tokens utilizados para crear nuevas entradas de caché (facturados a una tasa más alta que los tokens de entrada estándar).

224* `cache_read_input_tokens`: tokens leídos de entradas de caché existentes (facturados a una tasa reducida).

225 

226Rastree estos por separado de `input_tokens` para comprender los ahorros de almacenamiento en caché. En TypeScript, estos campos se escriben en el objeto [`Usage`](/es/agent-sdk/typescript#usage). En Python, aparecen como claves en el diccionario [`ResultMessage.usage`](/es/agent-sdk/python#result-message) (por ejemplo, `message.usage.get("cache_read_input_tokens", 0)`).

227 

228### Extender el TTL de caché de indicaciones a una hora

229 

230Las entradas de caché escritas por el SDK utilizan un TTL de 5 minutos de forma predeterminada cuando se autentica con una clave de API o se ejecuta en Amazon Bedrock, Google Cloud Vertex AI o Microsoft Foundry. Si su carga de trabajo ejecuta muchas sesiones cortas contra el mismo indicador del sistema y contexto con brechas más largas que 5 minutos entre ellas, el caché expira entre sesiones y cada nueva sesión paga el precio de entrada completo.

231 

232Para solicitar un TTL de 1 hora en escrituras de caché, establezca la variable de entorno [`ENABLE_PROMPT_CACHING_1H`](/es/env-vars). Puede exportarla en su entorno de shell o contenedor, o pasarla a través de `options.env`.

233 

234El siguiente ejemplo habilita TTL de 1 hora para un agente que se ejecuta en Bedrock:

235 

236<CodeGroup>

237 ```python Python theme={null}

238 options = ClaudeAgentOptions(

239 env={

240 "CLAUDE_CODE_USE_BEDROCK": "1",

241 "ENABLE_PROMPT_CACHING_1H": "1",

242 },

243 )

244 ```

245 

246 ```typescript TypeScript theme={null}

247 const options = {

248 env: {

249 ...process.env,

250 CLAUDE_CODE_USE_BEDROCK: "1",

251 ENABLE_PROMPT_CACHING_1H: "1",

252 },

253 };

254 ```

255</CodeGroup>

256 

257Las escrituras de caché con TTL de 1 hora se facturan a una tasa más alta que las escrituras de 5 minutos, por lo que habilitar esto intercambia un costo de escritura más alto por más lecturas de caché. Consulte [precios de almacenamiento en caché de indicaciones](https://platform.claude.com/docs/en/build-with-claude/prompt-caching) para obtener detalles. Los usuarios de suscripción de Claude ya reciben TTL de 1 hora automáticamente y no necesitan establecer esta variable.

258 

259## Documentación relacionada

260 

261* [Referencia del SDK de TypeScript](/es/agent-sdk/typescript) - Documentación completa de la API

262* [Descripción general del SDK](/es/agent-sdk/overview) - Introducción al SDK

263* [Permisos del SDK](/es/agent-sdk/permissions) - Gestión de permisos de herramientas

agent-sdk/hooks.md +819 −0 created

Details

1> ## Documentation Index

2> Fetch the complete documentation index at: https://code.claude.com/docs/llms.txt

3> Use this file to discover all available pages before exploring further.

4 

5# Interceptar y controlar el comportamiento del agente con hooks

6 

7> Interceptar y personalizar el comportamiento del agente en puntos clave de ejecución con hooks

8 

9Los hooks son funciones de devolución de llamada que ejecutan su código en respuesta a eventos del agente, como una herramienta siendo llamada, una sesión iniciándose, o la ejecución deteniéndose. Con hooks, puede:

10 

11* **Bloquear operaciones peligrosas** antes de que se ejecuten, como comandos de shell destructivos o acceso a archivos no autorizado

12* **Registrar y auditar** cada llamada de herramienta para cumplimiento, depuración o análisis

13* **Transformar entradas y salidas** para desinfectar datos, inyectar credenciales o redirigir rutas de archivos

14* **Requerir aprobación humana** para acciones sensibles como escrituras en bases de datos o llamadas a API

15* **Rastrear el ciclo de vida de la sesión** para gestionar estado, limpiar recursos o enviar notificaciones

16 

17Esta guía cubre cómo funcionan los hooks, cómo configurarlos, y proporciona ejemplos para patrones comunes como bloquear herramientas, modificar entradas y reenviar notificaciones.

18 

19## Cómo funcionan los hooks

20 

21<Steps>

22 <Step title="Se dispara un evento">

23 Algo sucede durante la ejecución del agente y el SDK dispara un evento: una herramienta está a punto de ser llamada (`PreToolUse`), una herramienta devolvió un resultado (`PostToolUse`), un subagente se inició o se detuvo, el agente está inactivo, o la ejecución finalizó. Vea la [lista completa de eventos](#available-hooks).

24 </Step>

25 

26 <Step title="El SDK recopila hooks registrados">

27 El SDK verifica si hay hooks registrados para ese tipo de evento. Esto incluye hooks de devolución de llamada que pasa en `options.hooks` y hooks de comandos de shell de archivos de configuración cuando la entrada [`settingSources`](/es/agent-sdk/typescript#setting-source) o [`setting_sources`](/es/agent-sdk/python#setting-source) correspondiente está habilitada, lo cual lo está para las opciones predeterminadas de `query()`.

28 </Step>

29 

30 <Step title="Los matchers filtran qué hooks se ejecutan">

31 Si un hook tiene un patrón [`matcher`](#matchers) (como `"Write|Edit"`), el SDK lo prueba contra el objetivo del evento (por ejemplo, el nombre de la herramienta). Los hooks sin un matcher se ejecutan para cada evento de ese tipo.

32 </Step>

33 

34 <Step title="Se ejecutan las funciones de devolución de llamada">

35 Cada hook coincidente recibe su [función de devolución de llamada](#callback-functions) con información sobre lo que está sucediendo: el nombre de la herramienta, sus argumentos, el ID de sesión y otros detalles específicos del evento.

36 </Step>

37 

38 <Step title="Su devolución de llamada devuelve una decisión">

39 Después de realizar cualquier operación (registro, llamadas a API, validación), su devolución de llamada devuelve un [objeto de salida](#outputs) que le dice al agente qué hacer: permitir la operación, bloquearla, modificar la entrada o inyectar contexto en la conversación.

40 </Step>

41</Steps>

42 

43El siguiente ejemplo reúne estos pasos. Registra un hook `PreToolUse` (paso 1) con un matcher `"Write|Edit"` (paso 3) para que la devolución de llamada solo se dispare para herramientas de escritura de archivos. Cuando se activa, la devolución de llamada recibe la entrada de la herramienta (paso 4), verifica si la ruta del archivo apunta a un archivo `.env`, y devuelve `permissionDecision: "deny"` para bloquear la operación (paso 5):

44 

45<CodeGroup>

46 ```python Python theme={null}

47 import asyncio

48 from claude_agent_sdk import (

49 AssistantMessage,

50 ClaudeSDKClient,

51 ClaudeAgentOptions,

52 HookMatcher,

53 ResultMessage,

54 )

55 

56 

57 # Define a hook callback that receives tool call details

58 async def protect_env_files(input_data, tool_use_id, context):

59 # Extract the file path from the tool's input arguments

60 file_path = input_data["tool_input"].get("file_path", "")

61 file_name = file_path.split("/")[-1]

62 

63 # Block the operation if targeting a .env file

64 if file_name == ".env":

65 return {

66 "hookSpecificOutput": {

67 "hookEventName": input_data["hook_event_name"],

68 "permissionDecision": "deny",

69 "permissionDecisionReason": "Cannot modify .env files",

70 }

71 }

72 

73 # Return empty object to allow the operation

74 return {}

75 

76 

77 async def main():

78 options = ClaudeAgentOptions(

79 hooks={

80 # Register the hook for PreToolUse events

81 # The matcher filters to only Write and Edit tool calls

82 "PreToolUse": [HookMatcher(matcher="Write|Edit", hooks=[protect_env_files])]

83 }

84 )

85 

86 async with ClaudeSDKClient(options=options) as client:

87 await client.query("Update the database configuration")

88 async for message in client.receive_response():

89 # Filter for assistant and result messages

90 if isinstance(message, (AssistantMessage, ResultMessage)):

91 print(message)

92 

93 

94 asyncio.run(main())

95 ```

96 

97 ```typescript TypeScript theme={null}

98 import { query, HookCallback, PreToolUseHookInput } from "@anthropic-ai/claude-agent-sdk";

99 

100 // Define a hook callback with the HookCallback type

101 const protectEnvFiles: HookCallback = async (input, toolUseID, { signal }) => {

102 // Cast input to the specific hook type for type safety

103 const preInput = input as PreToolUseHookInput;

104 

105 // Cast tool_input to access its properties (typed as unknown in the SDK)

106 const toolInput = preInput.tool_input as Record<string, unknown>;

107 const filePath = toolInput?.file_path as string;

108 const fileName = filePath?.split("/").pop();

109 

110 // Block the operation if targeting a .env file

111 if (fileName === ".env") {

112 return {

113 hookSpecificOutput: {

114 hookEventName: preInput.hook_event_name,

115 permissionDecision: "deny",

116 permissionDecisionReason: "Cannot modify .env files"

117 }

118 };

119 }

120 

121 // Return empty object to allow the operation

122 return {};

123 };

124 

125 for await (const message of query({

126 prompt: "Update the database configuration",

127 options: {

128 hooks: {

129 // Register the hook for PreToolUse events

130 // The matcher filters to only Write and Edit tool calls

131 PreToolUse: [{ matcher: "Write|Edit", hooks: [protectEnvFiles] }]

132 }

133 }

134 })) {

135 // Filter for assistant and result messages

136 if (message.type === "assistant" || message.type === "result") {

137 console.log(message);

138 }

139 }

140 ```

141</CodeGroup>

142 

143## Hooks disponibles

144 

145El SDK proporciona hooks para diferentes etapas de la ejecución del agente. Algunos hooks están disponibles en ambos SDK, mientras que otros son solo para TypeScript.

146 

147| Evento de Hook | SDK de Python | SDK de TypeScript | Qué lo dispara | Caso de uso de ejemplo |

148| -------------------- | ------------- | ----------------- | ------------------------------------------------------------------------------------------------------------------ | --------------------------------------------------------------- |

149| `PreToolUse` | Sí | Sí | Solicitud de llamada de herramienta (puede bloquear o modificar) | Bloquear comandos de shell peligrosos |

150| `PostToolUse` | Sí | Sí | Resultado de ejecución de herramienta | Registrar todos los cambios de archivo en pista de auditoría |

151| `PostToolUseFailure` | Sí | Sí | Fallo de ejecución de herramienta | Manejar o registrar errores de herramienta |

152| `PostToolBatch` | No | Sí | Un lote completo de llamadas de herramienta se resuelve, una vez por lote antes de la siguiente llamada del modelo | Inyectar convenciones una vez para todo el lote |

153| `UserPromptSubmit` | Sí | Sí | Envío de solicitud del usuario | Inyectar contexto adicional en solicitudes |

154| `Stop` | Sí | Sí | Detención de ejecución del agente | Guardar estado de sesión antes de salir |

155| `SubagentStart` | Sí | Sí | Inicialización de subagente | Rastrear generación de tareas paralelas |

156| `SubagentStop` | Sí | Sí | Finalización de subagente | Agregar resultados de tareas paralelas |

157| `PreCompact` | Sí | Sí | Solicitud de compactación de conversación | Archivar transcripción completa antes de resumir |

158| `PermissionRequest` | Sí | Sí | Se mostraría diálogo de permiso | Manejo de permisos personalizado |

159| `SessionStart` | No | Sí | Inicialización de sesión | Inicializar registro y telemetría |

160| `SessionEnd` | No | Sí | Terminación de sesión | Limpiar recursos temporales |

161| `Notification` | Sí | Sí | Mensajes de estado del agente | Enviar actualizaciones de estado del agente a Slack o PagerDuty |

162| `Setup` | No | Sí | Configuración/mantenimiento de sesión | Ejecutar tareas de inicialización |

163| `TeammateIdle` | No | Sí | El compañero se vuelve inactivo | Reasignar trabajo o notificar |

164| `TaskCompleted` | No | Sí | Tarea de fondo se completa | Agregar resultados de tareas paralelas |

165| `ConfigChange` | No | Sí | Archivo de configuración cambia | Recargar configuración dinámicamente |

166| `WorktreeCreate` | No | Sí | Git worktree creado | Rastrear espacios de trabajo aislados |

167| `WorktreeRemove` | No | Sí | Git worktree eliminado | Limpiar recursos de espacio de trabajo |

168 

169## Configurar hooks

170 

171Para configurar un hook, páselo en el campo `hooks` de sus opciones de agente (`ClaudeAgentOptions` en Python, el objeto `options` en TypeScript):

172 

173<CodeGroup>

174 ```python Python theme={null}

175 options = ClaudeAgentOptions(

176 hooks={"PreToolUse": [HookMatcher(matcher="Bash", hooks=[my_callback])]}

177 )

178 

179 async with ClaudeSDKClient(options=options) as client:

180 await client.query("Your prompt")

181 async for message in client.receive_response():

182 print(message)

183 ```

184 

185 ```typescript TypeScript theme={null}

186 for await (const message of query({

187 prompt: "Your prompt",

188 options: {

189 hooks: {

190 PreToolUse: [{ matcher: "Bash", hooks: [myCallback] }]

191 }

192 }

193 })) {

194 console.log(message);

195 }

196 ```

197</CodeGroup>

198 

199La opción `hooks` es un diccionario (Python) u objeto (TypeScript) donde:

200 

201* **Las claves** son [nombres de eventos de hook](#available-hooks) (por ejemplo, `'PreToolUse'`, `'PostToolUse'`, `'Stop'`)

202* **Los valores** son matrices de [matchers](#matchers), cada una conteniendo un patrón de filtro opcional y sus [funciones de devolución de llamada](#callback-functions)

203 

204### Matchers

205 

206Use matchers para filtrar cuándo se disparan sus devoluciones de llamada. El campo `matcher` es una cadena regex que coincide con un valor diferente dependiendo del tipo de evento de hook. Por ejemplo, los hooks basados en herramientas coinciden con el nombre de la herramienta, mientras que los hooks `Notification` coinciden con el tipo de notificación. Vea la [referencia de hooks de Claude Code](/es/hooks#matcher-patterns) para la lista completa de valores de matcher para cada tipo de evento.

207 

208| Opción | Tipo | Predeterminado | Descripción |

209| --------- | ---------------- | -------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

210| `matcher` | `string` | `undefined` | Patrón regex coincidido contra el campo de filtro del evento. Para hooks de herramientas, este es el nombre de la herramienta. Las herramientas integradas incluyen `Bash`, `Read`, `Write`, `Edit`, `Glob`, `Grep`, `WebFetch`, `Agent` y otros (vea [Tipos de entrada de herramienta](/es/agent-sdk/typescript#tool-input-types) para la lista completa). Las herramientas MCP usan el patrón `mcp__<server>__<action>`. |

211| `hooks` | `HookCallback[]` | - | Requerido. Matriz de funciones de devolución de llamada a ejecutar cuando el patrón coincide |

212| `timeout` | `number` | `60` | Tiempo de espera en segundos |

213 

214Use el patrón `matcher` para dirigirse a herramientas específicas siempre que sea posible. Un matcher con `'Bash'` solo se ejecuta para comandos Bash, mientras que omitir el patrón ejecuta sus devoluciones de llamada para cada ocurrencia del evento. Tenga en cuenta que para hooks basados en herramientas, los matchers solo filtran por **nombre de herramienta**, no por rutas de archivo u otros argumentos. Para filtrar por ruta de archivo, verifique `tool_input.file_path` dentro de su devolución de llamada.

215 

216<Tip>

217 **Descubriendo nombres de herramientas:** Vea [Tipos de entrada de herramienta](/es/agent-sdk/typescript#tool-input-types) para la lista completa de nombres de herramientas integradas, o agregue un hook sin un matcher para registrar todas las llamadas de herramienta que su sesión realiza.

218 

219 **Nomenclatura de herramientas MCP:** Las herramientas MCP siempre comienzan con `mcp__` seguido del nombre del servidor y la acción: `mcp__<server>__<action>`. Por ejemplo, si configura un servidor llamado `playwright`, sus herramientas se nombrarán `mcp__playwright__browser_screenshot`, `mcp__playwright__browser_click`, etc. El nombre del servidor proviene de la clave que usa en la configuración `mcpServers`.

220</Tip>

221 

222### Funciones de devolución de llamada

223 

224#### Entradas

225 

226Cada devolución de llamada de hook recibe tres argumentos:

227 

228* **Datos de entrada:** un objeto tipado que contiene detalles del evento. Cada tipo de hook tiene su propia forma de entrada (por ejemplo, `PreToolUseHookInput` incluye `tool_name` y `tool_input`, mientras que `NotificationHookInput` incluye `message`). Vea las definiciones de tipo completas en las referencias del SDK de [TypeScript](/es/agent-sdk/typescript#hook-input) y [Python](/es/agent-sdk/python#hook-input).

229 * Todas las entradas de hook comparten `session_id`, `cwd` y `hook_event_name`.

230 * `agent_id` y `agent_type` se rellenan cuando el hook se dispara dentro de un subagente. En TypeScript, estos están en la entrada de hook base y disponibles para todos los tipos de hook. En Python, están solo en `PreToolUse`, `PostToolUse` y `PostToolUseFailure`.

231* **ID de uso de herramienta** (`str | None` / `string | undefined`): correlaciona eventos `PreToolUse` y `PostToolUse` para la misma llamada de herramienta.

232* **Contexto:** en TypeScript, contiene una propiedad `signal` (`AbortSignal`) para cancelación. En Python, este argumento está reservado para uso futuro.

233 

234#### Salidas

235 

236Su devolución de llamada devuelve un objeto con dos categorías de campos:

237 

238* **Campos de nivel superior** controlan la conversación: `systemMessage` inyecta un mensaje en la conversación visible para el modelo, y `continue` (`continue_` en Python) determina si el agente sigue ejecutándose después de este hook.

239* **`hookSpecificOutput`** controla la operación actual. Los campos dentro dependen del tipo de evento de hook. Para hooks `PreToolUse`, aquí es donde establece `permissionDecision` (`"allow"`, `"deny"` o `"ask"`), `permissionDecisionReason` e `updatedInput`. En el SDK de TypeScript, `permissionDecision` también acepta `"defer"` para finalizar la consulta y [reanudar más tarde](/es/hooks#defer-a-tool-call-for-later); este valor no está disponible en el SDK de Python. Para hooks `PostToolUse`, puede establecer `additionalContext` para agregar información al resultado de la herramienta.

240 

241Devuelva `{}` para permitir la operación sin cambios. Los hooks de devolución de llamada del SDK usan el mismo formato de salida JSON que [hooks de comandos de shell de Claude Code](/es/hooks#json-output), que documenta cada campo y opción específica del evento. Para las definiciones de tipo del SDK, vea las referencias del SDK de [TypeScript](/es/agent-sdk/typescript#sync-hook-json-output) y [Python](/es/agent-sdk/python#sync-hook-json-output).

242 

243<Note>

244 Cuando se aplican múltiples hooks o reglas de permiso, **deny** tiene prioridad sobre **defer**, que tiene prioridad sobre **ask**, que tiene prioridad sobre **allow**. Si algún hook devuelve `deny`, la operación se bloquea independientemente de otros hooks.

245</Note>

246 

247#### Salida asincrónica

248 

249De forma predeterminada, el agente espera a que su hook devuelva antes de continuar. Si su hook realiza un efecto secundario (registro, envío de webhook) y no necesita influir en el comportamiento del agente, puede devolver una salida asincrónica en su lugar. Esto le dice al agente que continúe inmediatamente sin esperar a que el hook termine:

250 

251<CodeGroup>

252 ```python Python theme={null}

253 async def async_hook(input_data, tool_use_id, context):

254 # Start a background task, then return immediately

255 asyncio.create_task(send_to_logging_service(input_data))

256 return {"async_": True, "asyncTimeout": 30000}

257 ```

258 

259 ```typescript TypeScript theme={null}

260 const asyncHook: HookCallback = async (input, toolUseID, { signal }) => {

261 // Start a background task, then return immediately

262 sendToLoggingService(input).catch(console.error);

263 return { async: true, asyncTimeout: 30000 };

264 };

265 ```

266</CodeGroup>

267 

268| Campo | Tipo | Descripción |

269| -------------- | -------- | ------------------------------------------------------------------------------------------------------------------------ |

270| `async` | `true` | Señala modo asincrónico. El agente continúa sin esperar. En Python, use `async_` para evitar la palabra clave reservada. |

271| `asyncTimeout` | `number` | Tiempo de espera opcional en milisegundos para la operación de fondo |

272 

273<Note>

274 Las salidas asincrónicas no pueden bloquear, modificar o inyectar contexto en la operación ya que el agente ya ha avanzado. Úselas solo para efectos secundarios como registro, métricas o notificaciones.

275</Note>

276 

277## Ejemplos

278 

279### Modificar entrada de herramienta

280 

281Este ejemplo intercepta llamadas de herramienta Write y reescribe el argumento `file_path` para anteponer `/sandbox`, redirigiendo todas las escrituras de archivo a un directorio aislado. La devolución de llamada devuelve `updatedInput` con la ruta modificada y `permissionDecision: 'allow'` para aprobar automáticamente la operación reescrita:

282 

283<CodeGroup>

284 ```python Python theme={null}

285 async def redirect_to_sandbox(input_data, tool_use_id, context):

286 if input_data["hook_event_name"] != "PreToolUse":

287 return {}

288 

289 if input_data["tool_name"] == "Write":

290 original_path = input_data["tool_input"].get("file_path", "")

291 return {

292 "hookSpecificOutput": {

293 "hookEventName": input_data["hook_event_name"],

294 "permissionDecision": "allow",

295 "updatedInput": {

296 **input_data["tool_input"],

297 "file_path": f"/sandbox{original_path}",

298 },

299 }

300 }

301 return {}

302 ```

303 

304 ```typescript TypeScript theme={null}

305 const redirectToSandbox: HookCallback = async (input, toolUseID, { signal }) => {

306 if (input.hook_event_name !== "PreToolUse") return {};

307 

308 const preInput = input as PreToolUseHookInput;

309 const toolInput = preInput.tool_input as Record<string, unknown>;

310 if (preInput.tool_name === "Write") {

311 const originalPath = toolInput.file_path as string;

312 return {

313 hookSpecificOutput: {

314 hookEventName: preInput.hook_event_name,

315 permissionDecision: "allow",

316 updatedInput: {

317 ...toolInput,

318 file_path: `/sandbox${originalPath}`

319 }

320 }

321 };

322 }

323 return {};

324 };

325 ```

326</CodeGroup>

327 

328<Note>

329 Cuando use `updatedInput`, también debe incluir `permissionDecision: 'allow'`. Siempre devuelva un nuevo objeto en lugar de mutar el `tool_input` original.

330</Note>

331 

332### Agregar contexto y bloquear una herramienta

333 

334Este ejemplo bloquea cualquier intento de escribir en el directorio `/etc` y usa dos campos de salida juntos: `permissionDecision: 'deny'` detiene la llamada de herramienta, mientras que `systemMessage` inyecta un recordatorio en la conversación para que el agente reciba contexto sobre por qué se bloqueó la operación y evite reintentar:

335 

336<CodeGroup>

337 ```python Python theme={null}

338 async def block_etc_writes(input_data, tool_use_id, context):

339 file_path = input_data["tool_input"].get("file_path", "")

340 

341 if file_path.startswith("/etc"):

342 return {

343 # Top-level field: inject guidance into the conversation

344 "systemMessage": "Remember: system directories like /etc are protected.",

345 # hookSpecificOutput: block the operation

346 "hookSpecificOutput": {

347 "hookEventName": input_data["hook_event_name"],

348 "permissionDecision": "deny",

349 "permissionDecisionReason": "Writing to /etc is not allowed",

350 },

351 }

352 return {}

353 ```

354 

355 ```typescript TypeScript theme={null}

356 const blockEtcWrites: HookCallback = async (input, toolUseID, { signal }) => {

357 const preInput = input as PreToolUseHookInput;

358 const toolInput = preInput.tool_input as Record<string, unknown>;

359 const filePath = toolInput?.file_path as string;

360 

361 if (filePath?.startsWith("/etc")) {

362 return {

363 // Top-level field: inject guidance into the conversation

364 systemMessage: "Remember: system directories like /etc are protected.",

365 // hookSpecificOutput: block the operation

366 hookSpecificOutput: {

367 hookEventName: preInput.hook_event_name,

368 permissionDecision: "deny",

369 permissionDecisionReason: "Writing to /etc is not allowed"

370 }

371 };

372 }

373 return {};

374 };

375 ```

376</CodeGroup>

377 

378### Aprobar automáticamente herramientas específicas

379 

380De forma predeterminada, el agente puede solicitar permiso antes de usar ciertas herramientas. Este ejemplo aprueba automáticamente herramientas del sistema de archivos de solo lectura (Read, Glob, Grep) devolviendo `permissionDecision: 'allow'`, permitiéndoles ejecutarse sin confirmación del usuario mientras deja todas las otras herramientas sujetas a verificaciones de permiso normales:

381 

382<CodeGroup>

383 ```python Python theme={null}

384 async def auto_approve_read_only(input_data, tool_use_id, context):

385 if input_data["hook_event_name"] != "PreToolUse":

386 return {}

387 

388 read_only_tools = ["Read", "Glob", "Grep"]

389 if input_data["tool_name"] in read_only_tools:

390 return {

391 "hookSpecificOutput": {

392 "hookEventName": input_data["hook_event_name"],

393 "permissionDecision": "allow",

394 "permissionDecisionReason": "Read-only tool auto-approved",

395 }

396 }

397 return {}

398 ```

399 

400 ```typescript TypeScript theme={null}

401 const autoApproveReadOnly: HookCallback = async (input, toolUseID, { signal }) => {

402 if (input.hook_event_name !== "PreToolUse") return {};

403 

404 const preInput = input as PreToolUseHookInput;

405 const readOnlyTools = ["Read", "Glob", "Grep"];

406 if (readOnlyTools.includes(preInput.tool_name)) {

407 return {

408 hookSpecificOutput: {

409 hookEventName: preInput.hook_event_name,

410 permissionDecision: "allow",

411 permissionDecisionReason: "Read-only tool auto-approved"

412 }

413 };

414 }

415 return {};

416 };

417 ```

418</CodeGroup>

419 

420### Encadenar múltiples hooks

421 

422Los hooks se ejecutan en el orden en que aparecen en la matriz. Mantenga cada hook enfocado en una única responsabilidad y encadene múltiples hooks para lógica compleja:

423 

424<CodeGroup>

425 ```python Python theme={null}

426 options = ClaudeAgentOptions(

427 hooks={

428 "PreToolUse": [

429 HookMatcher(hooks=[rate_limiter]), # First: check rate limits

430 HookMatcher(hooks=[authorization_check]), # Second: verify permissions

431 HookMatcher(hooks=[input_sanitizer]), # Third: sanitize inputs

432 HookMatcher(hooks=[audit_logger]), # Last: log the action

433 ]

434 }

435 )

436 ```

437 

438 ```typescript TypeScript theme={null}

439 const options = {

440 hooks: {

441 PreToolUse: [

442 { hooks: [rateLimiter] }, // First: check rate limits

443 { hooks: [authorizationCheck] }, // Second: verify permissions

444 { hooks: [inputSanitizer] }, // Third: sanitize inputs

445 { hooks: [auditLogger] } // Last: log the action

446 ]

447 }

448 };

449 ```

450</CodeGroup>

451 

452### Filtrar con matchers regex

453 

454Use patrones regex para coincidir con múltiples herramientas. Este ejemplo registra tres matchers con diferentes alcances: el primero dispara `file_security_hook` solo para herramientas de modificación de archivos, el segundo dispara `mcp_audit_hook` para cualquier herramienta MCP (herramientas cuyos nombres comienzan con `mcp__`), y el tercero dispara `global_logger` para cada llamada de herramienta independientemente del nombre:

455 

456<CodeGroup>

457 ```python Python theme={null}

458 options = ClaudeAgentOptions(

459 hooks={

460 "PreToolUse": [

461 # Match file modification tools

462 HookMatcher(matcher="Write|Edit|Delete", hooks=[file_security_hook]),

463 # Match all MCP tools

464 HookMatcher(matcher="^mcp__", hooks=[mcp_audit_hook]),

465 # Match everything (no matcher)

466 HookMatcher(hooks=[global_logger]),

467 ]

468 }

469 )

470 ```

471 

472 ```typescript TypeScript theme={null}

473 const options = {

474 hooks: {

475 PreToolUse: [

476 // Match file modification tools

477 { matcher: "Write|Edit|Delete", hooks: [fileSecurityHook] },

478 

479 // Match all MCP tools

480 { matcher: "^mcp__", hooks: [mcpAuditHook] },

481 

482 // Match everything (no matcher)

483 { hooks: [globalLogger] }

484 ]

485 }

486 };

487 ```

488</CodeGroup>

489 

490### Rastrear actividad de subagente

491 

492Use hooks `SubagentStop` para monitorear cuándo los subagentes terminan su trabajo. Vea el tipo de entrada completo en las referencias del SDK de [TypeScript](/es/agent-sdk/typescript#hook-input) y [Python](/es/agent-sdk/python#hook-input). Este ejemplo registra un resumen cada vez que un subagente se completa:

493 

494<CodeGroup>

495 ```python Python theme={null}

496 async def subagent_tracker(input_data, tool_use_id, context):

497 # Log subagent details when it finishes

498 print(f"[SUBAGENT] Completed: {input_data['agent_id']}")

499 print(f" Transcript: {input_data['agent_transcript_path']}")

500 print(f" Tool use ID: {tool_use_id}")

501 print(f" Stop hook active: {input_data.get('stop_hook_active')}")

502 return {}

503 

504 

505 options = ClaudeAgentOptions(

506 hooks={"SubagentStop": [HookMatcher(hooks=[subagent_tracker])]}

507 )

508 ```

509 

510 ```typescript TypeScript theme={null}

511 import { HookCallback, SubagentStopHookInput } from "@anthropic-ai/claude-agent-sdk";

512 

513 const subagentTracker: HookCallback = async (input, toolUseID, { signal }) => {

514 // Cast to SubagentStopHookInput to access subagent-specific fields

515 const subInput = input as SubagentStopHookInput;

516 

517 // Log subagent details when it finishes

518 console.log(`[SUBAGENT] Completed: ${subInput.agent_id}`);

519 console.log(` Transcript: ${subInput.agent_transcript_path}`);

520 console.log(` Tool use ID: ${toolUseID}`);

521 console.log(` Stop hook active: ${subInput.stop_hook_active}`);

522 return {};

523 };

524 

525 const options = {

526 hooks: {

527 SubagentStop: [{ hooks: [subagentTracker] }]

528 }

529 };

530 ```

531</CodeGroup>

532 

533### Realizar solicitudes HTTP desde hooks

534 

535Los hooks pueden realizar operaciones asincrónicas como solicitudes HTTP. Capture errores dentro de su hook en lugar de dejarlos propagarse, ya que una excepción no manejada puede interrumpir el agente.

536 

537Este ejemplo envía un webhook después de que cada herramienta se completa, registrando qué herramienta se ejecutó y cuándo. El hook captura errores para que un webhook fallido no interrumpa el agente:

538 

539<CodeGroup>

540 ```python Python theme={null}

541 import asyncio

542 import json

543 import urllib.request

544 from datetime import datetime

545 

546 

547 def _send_webhook(tool_name):

548 """Synchronous helper that POSTs tool usage data to an external webhook."""

549 data = json.dumps(

550 {

551 "tool": tool_name,

552 "timestamp": datetime.now().isoformat(),

553 }

554 ).encode()

555 req = urllib.request.Request(

556 "https://api.example.com/webhook",

557 data=data,

558 headers={"Content-Type": "application/json"},

559 method="POST",

560 )

561 urllib.request.urlopen(req)

562 

563 

564 async def webhook_notifier(input_data, tool_use_id, context):

565 # Only fire after a tool completes (PostToolUse), not before

566 if input_data["hook_event_name"] != "PostToolUse":

567 return {}

568 

569 try:

570 # Run the blocking HTTP call in a thread to avoid blocking the event loop

571 await asyncio.to_thread(_send_webhook, input_data["tool_name"])

572 except Exception as e:

573 # Log the error but don't raise. A failed webhook shouldn't stop the agent

574 print(f"Webhook request failed: {e}")

575 

576 return {}

577 ```

578 

579 ```typescript TypeScript theme={null}

580 import { query, HookCallback, PostToolUseHookInput } from "@anthropic-ai/claude-agent-sdk";

581 

582 const webhookNotifier: HookCallback = async (input, toolUseID, { signal }) => {

583 // Only fire after a tool completes (PostToolUse), not before

584 if (input.hook_event_name !== "PostToolUse") return {};

585 

586 try {

587 await fetch("https://api.example.com/webhook", {

588 method: "POST",

589 headers: { "Content-Type": "application/json" },

590 body: JSON.stringify({

591 tool: (input as PostToolUseHookInput).tool_name,

592 timestamp: new Date().toISOString()

593 }),

594 // Pass signal so the request cancels if the hook times out

595 signal

596 });

597 } catch (error) {

598 // Handle cancellation separately from other errors

599 if (error instanceof Error && error.name === "AbortError") {

600 console.log("Webhook request cancelled");

601 }

602 // Don't re-throw. A failed webhook shouldn't stop the agent

603 }

604 

605 return {};

606 };

607 

608 // Register as a PostToolUse hook

609 for await (const message of query({

610 prompt: "Refactor the auth module",

611 options: {

612 hooks: {

613 PostToolUse: [{ hooks: [webhookNotifier] }]

614 }

615 }

616 })) {

617 console.log(message);

618 }

619 ```

620</CodeGroup>

621 

622### Reenviar notificaciones a Slack

623 

624Use hooks `Notification` para recibir notificaciones del sistema del agente y reenviarlas a servicios externos. Las notificaciones se disparan para tipos de evento específicos: `permission_prompt` (Claude necesita permiso), `idle_prompt` (Claude está esperando entrada), `auth_success` (autenticación completada) y `elicitation_dialog` (Claude está solicitando al usuario). Cada notificación incluye un campo `message` con una descripción legible por humanos y opcionalmente un `title`.

625 

626Este ejemplo reenvía cada notificación a un canal de Slack. Requiere una [URL de webhook entrante de Slack](https://api.slack.com/messaging/webhooks), que crea agregando una aplicación a su espacio de trabajo de Slack y habilitando webhooks entrantes:

627 

628<CodeGroup>

629 ```python Python theme={null}

630 import asyncio

631 import json

632 import urllib.request

633 

634 from claude_agent_sdk import ClaudeSDKClient, ClaudeAgentOptions, HookMatcher

635 

636 

637 def _send_slack_notification(message):

638 """Synchronous helper that sends a message to Slack via incoming webhook."""

639 data = json.dumps({"text": f"Agent status: {message}"}).encode()

640 req = urllib.request.Request(

641 "https://hooks.slack.com/services/YOUR/WEBHOOK/URL",

642 data=data,

643 headers={"Content-Type": "application/json"},

644 method="POST",

645 )

646 urllib.request.urlopen(req)

647 

648 

649 async def notification_handler(input_data, tool_use_id, context):

650 try:

651 # Run the blocking HTTP call in a thread to avoid blocking the event loop

652 await asyncio.to_thread(_send_slack_notification, input_data.get("message", ""))

653 except Exception as e:

654 print(f"Failed to send notification: {e}")

655 

656 # Return empty object. Notification hooks don't modify agent behavior

657 return {}

658 

659 

660 async def main():

661 options = ClaudeAgentOptions(

662 hooks={

663 # Register the hook for Notification events (no matcher needed)

664 "Notification": [HookMatcher(hooks=[notification_handler])],

665 },

666 )

667 

668 async with ClaudeSDKClient(options=options) as client:

669 await client.query("Analyze this codebase")

670 async for message in client.receive_response():

671 print(message)

672 

673 

674 asyncio.run(main())

675 ```

676 

677 ```typescript TypeScript theme={null}

678 import { query, HookCallback, NotificationHookInput } from "@anthropic-ai/claude-agent-sdk";

679 

680 // Define a hook callback that sends notifications to Slack

681 const notificationHandler: HookCallback = async (input, toolUseID, { signal }) => {

682 // Cast to NotificationHookInput to access the message field

683 const notification = input as NotificationHookInput;

684 

685 try {

686 // POST the notification message to a Slack incoming webhook

687 await fetch("https://hooks.slack.com/services/YOUR/WEBHOOK/URL", {

688 method: "POST",

689 headers: { "Content-Type": "application/json" },

690 body: JSON.stringify({

691 text: `Agent status: ${notification.message}`

692 }),

693 // Pass signal so the request cancels if the hook times out

694 signal

695 });

696 } catch (error) {

697 if (error instanceof Error && error.name === "AbortError") {

698 console.log("Notification cancelled");

699 } else {

700 console.error("Failed to send notification:", error);

701 }

702 }

703 

704 // Return empty object. Notification hooks don't modify agent behavior

705 return {};

706 };

707 

708 // Register the hook for Notification events (no matcher needed)

709 for await (const message of query({

710 prompt: "Analyze this codebase",

711 options: {

712 hooks: {

713 Notification: [{ hooks: [notificationHandler] }]

714 }

715 }

716 })) {

717 console.log(message);

718 }

719 ```

720</CodeGroup>

721 

722## Solucionar problemas comunes

723 

724### Hook no se dispara

725 

726* Verifique que el nombre del evento de hook sea correcto y sensible a mayúsculas (`PreToolUse`, no `preToolUse`)

727* Verifique que su patrón de matcher coincida exactamente con el nombre de la herramienta

728* Asegúrese de que el hook esté bajo el tipo de evento correcto en `options.hooks`

729* Para hooks que no son de herramientas como `Stop` y `SubagentStop`, los matchers coinciden contra campos diferentes (vea [patrones de matcher](/es/hooks#matcher-patterns))

730* Los hooks pueden no dispararse cuando el agente alcanza el límite [`max_turns`](/es/agent-sdk/python#claude-agent-options) porque la sesión termina antes de que los hooks puedan ejecutarse

731 

732### Matcher no filtra como se esperaba

733 

734Los matchers solo coinciden con **nombres de herramientas**, no con rutas de archivo u otros argumentos. Para filtrar por ruta de archivo, verifique `tool_input.file_path` dentro de su hook:

735 

736```typescript theme={null}

737const myHook: HookCallback = async (input, toolUseID, { signal }) => {

738 const preInput = input as PreToolUseHookInput;

739 const toolInput = preInput.tool_input as Record<string, unknown>;

740 const filePath = toolInput?.file_path as string;

741 if (!filePath?.endsWith(".md")) return {}; // Skip non-markdown files

742 // Process markdown files...

743 return {};

744};

745```

746 

747### Tiempo de espera del hook

748 

749* Aumente el valor `timeout` en la configuración `HookMatcher`

750* Use el `AbortSignal` del tercer argumento de devolución de llamada para manejar la cancelación correctamente en TypeScript

751 

752### Herramienta bloqueada inesperadamente

753 

754* Verifique todos los hooks `PreToolUse` para devoluciones de `permissionDecision: 'deny'`

755* Agregue registro a sus hooks para ver qué `permissionDecisionReason` están devolviendo

756* Verifique que los patrones de matcher no sean demasiado amplios (un matcher vacío coincide con todas las herramientas)

757 

758### Entrada modificada no aplicada

759 

760* Asegúrese de que `updatedInput` esté dentro de `hookSpecificOutput`, no en el nivel superior:

761 

762 ```typescript theme={null}

763 return {

764 hookSpecificOutput: {

765 hookEventName: "PreToolUse",

766 permissionDecision: "allow",

767 updatedInput: { command: "new command" }

768 }

769 };

770 ```

771 

772* También debe devolver `permissionDecision: 'allow'` para que la modificación de entrada surta efecto

773 

774* Incluya `hookEventName` en `hookSpecificOutput` para identificar para qué tipo de hook es la salida

775 

776### Hooks de sesión no disponibles en Python

777 

778`SessionStart` y `SessionEnd` pueden registrarse como hooks de devolución de llamada del SDK en TypeScript, pero no están disponibles en el SDK de Python (`HookEvent` los omite). En Python, solo están disponibles como [hooks de comandos de shell](/es/hooks#hook-events) definidos en archivos de configuración (por ejemplo, `.claude/settings.json`). Para cargar hooks de comandos de shell desde su aplicación SDK, incluya la fuente de configuración apropiada con [`setting_sources`](/es/agent-sdk/python#setting-source) o [`settingSources`](/es/agent-sdk/typescript#setting-source):

779 

780<CodeGroup>

781 ```python Python theme={null}

782 options = ClaudeAgentOptions(

783 setting_sources=["project"], # Loads .claude/settings.json including hooks

784 )

785 ```

786 

787 ```typescript TypeScript theme={null}

788 const options = {

789 settingSources: ["project"] // Loads .claude/settings.json including hooks

790 };

791 ```

792</CodeGroup>

793 

794Para ejecutar lógica de inicialización como una devolución de llamada del SDK de Python en su lugar, use el primer mensaje de `client.receive_response()` como su disparador.

795 

796### Solicitudes de permiso de subagente multiplicándose

797 

798Al generar múltiples subagentes, cada uno puede solicitar permisos por separado. Los subagentes no heredan automáticamente los permisos del agente padre. Para evitar solicitudes repetidas, use hooks `PreToolUse` para aprobar automáticamente herramientas específicas, o configure reglas de permiso que se apliquen a sesiones de subagente.

799 

800### Bucles recursivos de hook con subagentes

801 

802Un hook `UserPromptSubmit` que genera subagentes puede crear bucles infinitos si esos subagentes disparan el mismo hook. Para prevenir esto:

803 

804* Verifique un indicador de subagente en la entrada del hook antes de generar

805* Use una variable compartida o estado de sesión para rastrear si ya está dentro de un subagente

806* Alcance los hooks para ejecutarse solo para la sesión del agente de nivel superior

807 

808### systemMessage no aparece en la salida

809 

810El campo `systemMessage` agrega contexto a la conversación que el modelo ve, pero puede no aparecer en todos los modos de salida del SDK. Si necesita exponer decisiones de hook a su aplicación, regístrelas por separado o use un canal de salida dedicado.

811 

812## Recursos relacionados

813 

814* [Referencia de hooks de Claude Code](/es/hooks): esquemas completos de entrada/salida JSON, documentación de eventos y patrones de matcher

815* [Guía de hooks de Claude Code](/es/hooks-guide): ejemplos de hooks de comandos de shell y tutoriales

816* [Referencia del SDK de TypeScript](/es/agent-sdk/typescript): tipos de hook, definiciones de entrada/salida y opciones de configuración

817* [Referencia del SDK de Python](/es/agent-sdk/python): tipos de hook, definiciones de entrada/salida y opciones de configuración

818* [Permisos](/es/agent-sdk/permissions): controlar qué puede hacer su agente

819* [Herramientas personalizadas](/es/agent-sdk/custom-tools): crear herramientas para extender las capacidades del agente

agent-sdk/hosting.md +142 −0 created

Details

1> ## Documentation Index

2> Fetch the complete documentation index at: https://code.claude.com/docs/llms.txt

3> Use this file to discover all available pages before exploring further.

4 

5# Alojamiento del Agent SDK

6 

7> Implementar y alojar Claude Agent SDK en entornos de producción

8 

9El Claude Agent SDK difiere de las API LLM tradicionales sin estado en que mantiene el estado conversacional y ejecuta comandos en un entorno persistente. Esta guía cubre la arquitectura, las consideraciones de alojamiento y las mejores prácticas para implementar agentes basados en SDK en producción.

10 

11<Info>

12 Para endurecimiento de seguridad más allá del sandboxing básico (incluidos controles de red, gestión de credenciales y opciones de aislamiento), consulte [Implementación Segura](/es/agent-sdk/secure-deployment).

13</Info>

14 

15## Requisitos de Alojamiento

16 

17### Sandboxing Basado en Contenedores

18 

19Para seguridad y aislamiento, el SDK debe ejecutarse dentro de un entorno de contenedor aislado. Esto proporciona aislamiento de procesos, límites de recursos, control de red y sistemas de archivos efímeros.

20 

21El SDK también admite [configuración de sandbox programática](/es/agent-sdk/typescript#sandbox-settings) para la ejecución de comandos.

22 

23### Requisitos del Sistema

24 

25Cada instancia de SDK requiere:

26 

27* **Dependencias de tiempo de ejecución**

28 * Python 3.10+ para el SDK de Python, o Node.js 18+ para el SDK de TypeScript

29 * Ambos paquetes de SDK incluyen un binario nativo de Claude Code para la plataforma del host, por lo que no se necesita una instalación separada de Claude Code o Node.js para la CLI generada

30 

31* **Asignación de recursos**

32 * Recomendado: 1GiB de RAM, 5GiB de disco y 1 CPU (varíe esto según su tarea según sea necesario)

33 

34* **Acceso de red**

35 * HTTPS saliente a `api.anthropic.com`

36 * Opcional: Acceso a servidores MCP o herramientas externas

37 

38## Comprensión de la Arquitectura del SDK

39 

40A diferencia de las llamadas API sin estado, el Claude Agent SDK funciona como un **proceso de larga duración** que:

41 

42* **Ejecuta comandos** en un entorno de shell persistente

43* **Gestiona operaciones de archivos** dentro de un directorio de trabajo

44* **Maneja la ejecución de herramientas** con contexto de interacciones anteriores

45 

46## Opciones de Proveedores de Sandbox

47 

48Varios proveedores se especializan en entornos de contenedor seguro para la ejecución de código de IA:

49 

50* **[Modal Sandbox](https://modal.com/docs/guide/sandbox)** - [implementación de demostración](https://modal.com/docs/examples/claude-slack-gif-creator)

51* **[Cloudflare Sandboxes](https://github.com/cloudflare/sandbox-sdk)**

52* **[Daytona](https://www.daytona.io/)**

53* **[E2B](https://e2b.dev/)**

54* **[Fly Machines](https://fly.io/docs/machines/)**

55* **[Vercel Sandbox](https://vercel.com/docs/functions/sandbox)**

56 

57Para opciones autohospedadas (Docker, gVisor, Firecracker) y configuración de aislamiento detallada, consulte [Tecnologías de Aislamiento](/es/agent-sdk/secure-deployment#isolation-technologies).

58 

59## Patrones de Implementación en Producción

60 

61### Patrón 1: Sesiones Efímeras

62 

63Cree un nuevo contenedor para cada tarea del usuario y luego destrúyalo cuando se complete.

64 

65Mejor para tareas puntuales, el usuario aún puede interactuar con la IA mientras se completa la tarea, pero una vez completada, el contenedor se destruye.

66 

67**Ejemplos:**

68 

69* Investigación y Corrección de Errores: Depurar y resolver un problema específico con contexto relevante

70* Procesamiento de Facturas: Extraer y estructurar datos de recibos/facturas para sistemas contables

71* Tareas de Traducción: Traducir documentos o lotes de contenido entre idiomas

72* Procesamiento de Imágenes/Vídeos: Aplicar transformaciones, optimizaciones o extraer metadatos de archivos multimedia

73 

74### Patrón 2: Sesiones de Larga Duración

75 

76Mantener instancias de contenedor persistentes para tareas de larga duración. A menudo se ejecutan *múltiples* procesos de Claude Agent dentro del contenedor según la demanda.

77 

78Mejor para agentes proactivos que toman medidas sin la entrada del usuario, agentes que sirven contenido o agentes que procesan grandes cantidades de mensajes.

79 

80**Ejemplos:**

81 

82* Agente de Correo Electrónico: Monitorea correos electrónicos entrantes y clasifica, responde o toma medidas de forma autónoma según el contenido

83* Constructor de Sitios: Aloja sitios web personalizados por usuario con capacidades de edición en vivo servidas a través de puertos de contenedor

84* Chatbots de Alta Frecuencia: Maneja flujos continuos de mensajes de plataformas como Slack donde los tiempos de respuesta rápidos son críticos

85 

86### Patrón 3: Sesiones Híbridas

87 

88Contenedores efímeros que se hidratan con historial y estado, posiblemente desde una base de datos o desde las características de reanudación de sesión del SDK.

89 

90Mejor para contenedores con interacción intermitente del usuario que inicia trabajo y se apaga cuando se completa el trabajo pero puede continuarse.

91 

92**Ejemplos:**

93 

94* Gestor de Proyectos Personal: Ayuda a gestionar proyectos en curso con verificaciones intermitentes, mantiene el contexto de tareas, decisiones y progreso

95* Investigación Profunda: Realiza tareas de investigación de varias horas, guarda hallazgos y reanuda la investigación cuando el usuario regresa

96* Agente de Soporte al Cliente: Maneja tickets de soporte que abarcan múltiples interacciones, carga el historial de tickets y el contexto del cliente

97 

98### Patrón 4: Contenedores Únicos

99 

100Ejecute múltiples procesos de Claude Agent SDK en un contenedor global único.

101 

102Mejor para agentes que deben colaborar estrechamente. Este es probablemente el patrón menos popular porque tendrá que evitar que los agentes se sobrescriban entre sí.

103 

104**Ejemplos:**

105 

106* **Simulaciones**: Agentes que interactúan entre sí en simulaciones como videojuegos.

107 

108## Preguntas Frecuentes

109 

110### ¿Cómo me comunico con mis sandboxes?

111 

112Al alojar en contenedores, exponga puertos para comunicarse con sus instancias de SDK. Su aplicación puede exponer puntos finales HTTP/WebSocket para clientes externos mientras el SDK se ejecuta internamente dentro del contenedor.

113 

114### ¿Cuál es el costo de alojar un contenedor?

115 

116El costo dominante de servir agentes son los tokens; los contenedores varían según lo que aprovisione, pero un costo mínimo es aproximadamente 5 centavos por hora de ejecución.

117 

118### ¿Cuándo debo apagar contenedores inactivos frente a mantenerlos activos?

119 

120Esto probablemente dependerá del proveedor, diferentes proveedores de sandbox le permitirán establecer diferentes criterios para tiempos de espera de inactividad después de los cuales un sandbox podría apagarse.

121Querrá ajustar este tiempo de espera según la frecuencia con la que crea que podría haber respuesta del usuario.

122 

123### ¿Con qué frecuencia debo actualizar la CLI de Claude Code?

124 

125La CLI de Claude Code se versionea con semver, por lo que cualquier cambio importante se versionará.

126 

127### ¿Cómo monitoreo la salud del contenedor y el rendimiento del agente?

128 

129Dado que los contenedores son solo servidores, la misma infraestructura de registro que usa para el backend funcionará para contenedores.

130 

131### ¿Cuánto tiempo puede ejecutarse una sesión de agente antes de agotar el tiempo?

132 

133Una sesión de agente no agotará el tiempo, pero considere establecer una propiedad 'maxTurns' para evitar que Claude se quede atrapado en un bucle.

134 

135## Próximos Pasos

136 

137* [Implementación Segura](/es/agent-sdk/secure-deployment) - Controles de red, gestión de credenciales y endurecimiento de aislamiento

138* [SDK de TypeScript - Configuración de Sandbox](/es/agent-sdk/typescript#sandbox-settings) - Configurar sandbox programáticamente

139* [Guía de Sesiones](/es/agent-sdk/sessions) - Aprenda sobre la gestión de sesiones

140* [Permisos](/es/agent-sdk/permissions) - Configurar permisos de herramientas

141* [Seguimiento de Costos](/es/agent-sdk/cost-tracking) - Monitorear el uso de API

142* [Integración MCP](/es/agent-sdk/mcp) - Extender con herramientas personalizadas

agent-sdk/overview.md +607 −0 created

Details

1> ## Documentation Index

2> Fetch the complete documentation index at: https://code.claude.com/docs/llms.txt

3> Use this file to discover all available pages before exploring further.

4 

5# Descripción general del Agent SDK

6 

7> Construya agentes de IA en producción con Claude Code como una biblioteca

8 

9<Note>

10 El Claude Code SDK ha sido renombrado a Claude Agent SDK. Si está migrando desde el SDK anterior, consulte la [Guía de migración](/es/agent-sdk/migration-guide).

11</Note>

12 

13Construya agentes de IA que lean archivos de forma autónoma, ejecuten comandos, busquen en la web, editen código y mucho más. El Agent SDK le proporciona las mismas herramientas, bucle de agente y gestión de contexto que potencian Claude Code, programable en Python y TypeScript.

14 

15<Note>

16 Opus 4.7 (`claude-opus-4-7`) requiere Agent SDK v0.2.111 o posterior. Si ve un error de API `thinking.type.enabled`, consulte [Solución de problemas](/es/agent-sdk/quickstart#troubleshooting).

17</Note>

18 

19<CodeGroup>

20 ```python Python theme={null}

21 import asyncio

22 from claude_agent_sdk import query, ClaudeAgentOptions

23 

24 

25 async def main():

26 async for message in query(

27 prompt="Find and fix the bug in auth.py",

28 options=ClaudeAgentOptions(allowed_tools=["Read", "Edit", "Bash"]),

29 ):

30 print(message) # Claude reads the file, finds the bug, edits it

31 

32 

33 asyncio.run(main())

34 ```

35 

36 ```typescript TypeScript theme={null}

37 import { query } from "@anthropic-ai/claude-agent-sdk";

38 

39 for await (const message of query({

40 prompt: "Find and fix the bug in auth.ts",

41 options: { allowedTools: ["Read", "Edit", "Bash"] }

42 })) {

43 console.log(message); // Claude reads the file, finds the bug, edits it

44 }

45 ```

46</CodeGroup>

47 

48El Agent SDK incluye herramientas integradas para leer archivos, ejecutar comandos y editar código, por lo que su agente puede comenzar a trabajar inmediatamente sin que usted implemente la ejecución de herramientas. Sumérjase en el inicio rápido o explore agentes reales construidos con el SDK:

49 

50<CardGroup cols={2}>

51 <Card title="Inicio rápido" icon="play" href="/es/agent-sdk/quickstart">

52 Construya un agente corrector de errores en minutos

53 </Card>

54 

55 <Card title="Agentes de ejemplo" icon="star" href="https://github.com/anthropics/claude-agent-sdk-demos">

56 Asistente de correo electrónico, agente de investigación y más

57 </Card>

58</CardGroup>

59 

60## Comenzar

61 

62<Steps>

63 <Step title="Instale el SDK">

64 <Tabs>

65 <Tab title="TypeScript">

66 ```bash theme={null}

67 npm install @anthropic-ai/claude-agent-sdk

68 ```

69 </Tab>

70 

71 <Tab title="Python">

72 ```bash theme={null}

73 pip install claude-agent-sdk

74 ```

75 </Tab>

76 </Tabs>

77 

78 <Note>

79 El SDK de TypeScript agrupa un binario nativo de Claude Code para su plataforma como una dependencia opcional, por lo que no necesita instalar Claude Code por separado.

80 </Note>

81 </Step>

82 

83 <Step title="Configure su clave de API">

84 Obtenga una clave de API de la [Consola](https://platform.claude.com/), luego configúrela como una variable de entorno:

85 

86 ```bash theme={null}

87 export ANTHROPIC_API_KEY=your-api-key

88 ```

89 

90 El SDK también admite autenticación a través de proveedores de API de terceros:

91 

92 * **Amazon Bedrock**: configure la variable de entorno `CLAUDE_CODE_USE_BEDROCK=1` y configure las credenciales de AWS

93 * **Google Vertex AI**: configure la variable de entorno `CLAUDE_CODE_USE_VERTEX=1` y configure las credenciales de Google Cloud

94 * **Microsoft Azure**: configure la variable de entorno `CLAUDE_CODE_USE_FOUNDRY=1` y configure las credenciales de Azure

95 

96 Consulte las guías de configuración para [Bedrock](/es/amazon-bedrock), [Vertex AI](/es/google-vertex-ai) o [Azure AI Foundry](/es/microsoft-foundry) para obtener más detalles.

97 

98 <Note>

99 A menos que haya sido aprobado previamente, Anthropic no permite que desarrolladores de terceros ofrezcan inicio de sesión en claude.ai o límites de velocidad para sus productos, incluidos los agentes construidos en el Claude Agent SDK. Por favor, utilice los métodos de autenticación de clave de API descritos en este documento en su lugar.

100 </Note>

101 </Step>

102 

103 <Step title="Ejecute su primer agente">

104 Este ejemplo crea un agente que enumera archivos en su directorio actual utilizando herramientas integradas.

105 

106 <CodeGroup>

107 ```python Python theme={null}

108 import asyncio

109 from claude_agent_sdk import query, ClaudeAgentOptions

110 

111 

112 async def main():

113 async for message in query(

114 prompt="What files are in this directory?",

115 options=ClaudeAgentOptions(allowed_tools=["Bash", "Glob"]),

116 ):

117 if hasattr(message, "result"):

118 print(message.result)

119 

120 

121 asyncio.run(main())

122 ```

123 

124 ```typescript TypeScript theme={null}

125 import { query } from "@anthropic-ai/claude-agent-sdk";

126 

127 for await (const message of query({

128 prompt: "What files are in this directory?",

129 options: { allowedTools: ["Bash", "Glob"] }

130 })) {

131 if ("result" in message) console.log(message.result);

132 }

133 ```

134 </CodeGroup>

135 </Step>

136</Steps>

137 

138**¿Listo para construir?** Siga el [Inicio rápido](/es/agent-sdk/quickstart) para crear un agente que encuentre y corrija errores en minutos.

139 

140## Capacidades

141 

142Todo lo que hace que Claude Code sea poderoso está disponible en el SDK:

143 

144<Tabs>

145 <Tab title="Herramientas integradas">

146 Su agente puede leer archivos, ejecutar comandos y buscar en bases de código de forma inmediata. Las herramientas clave incluyen:

147 

148 | Herramienta | Qué hace |

149 | --------------------------------------------------------------------------- | ------------------------------------------------------------------------------ |

150 | **Read** | Leer cualquier archivo en el directorio de trabajo |

151 | **Write** | Crear nuevos archivos |

152 | **Edit** | Realizar ediciones precisas en archivos existentes |

153 | **Bash** | Ejecutar comandos de terminal, scripts, operaciones de git |

154 | **Monitor** | Observar un script de fondo y reaccionar a cada línea de salida como un evento |

155 | **Glob** | Encontrar archivos por patrón (`**/*.ts`, `src/**/*.py`) |

156 | **Grep** | Buscar contenido de archivos con expresiones regulares |

157 | **WebSearch** | Buscar en la web información actual |

158 | **WebFetch** | Obtener y analizar contenido de páginas web |

159 | **[AskUserQuestion](/es/agent-sdk/user-input#handle-clarifying-questions)** | Hacer preguntas aclaratorias al usuario con opciones de opción múltiple |

160 

161 Este ejemplo crea un agente que busca comentarios TODO en su base de código:

162 

163 <CodeGroup>

164 ```python Python theme={null}

165 import asyncio

166 from claude_agent_sdk import query, ClaudeAgentOptions

167 

168 

169 async def main():

170 async for message in query(

171 prompt="Find all TODO comments and create a summary",

172 options=ClaudeAgentOptions(allowed_tools=["Read", "Glob", "Grep"]),

173 ):

174 if hasattr(message, "result"):

175 print(message.result)

176 

177 

178 asyncio.run(main())

179 ```

180 

181 ```typescript TypeScript theme={null}

182 import { query } from "@anthropic-ai/claude-agent-sdk";

183 

184 for await (const message of query({

185 prompt: "Find all TODO comments and create a summary",

186 options: { allowedTools: ["Read", "Glob", "Grep"] }

187 })) {

188 if ("result" in message) console.log(message.result);

189 }

190 ```

191 </CodeGroup>

192 </Tab>

193 

194 <Tab title="Hooks">

195 Ejecute código personalizado en puntos clave del ciclo de vida del agente. Los hooks del SDK utilizan funciones de devolución de llamada para validar, registrar, bloquear o transformar el comportamiento del agente.

196 

197 **Hooks disponibles:** `PreToolUse`, `PostToolUse`, `Stop`, `SessionStart`, `SessionEnd`, `UserPromptSubmit` y más.

198 

199 Este ejemplo registra todos los cambios de archivo en un archivo de auditoría:

200 

201 <CodeGroup>

202 ```python Python theme={null}

203 import asyncio

204 from datetime import datetime

205 from claude_agent_sdk import query, ClaudeAgentOptions, HookMatcher

206 

207 

208 async def log_file_change(input_data, tool_use_id, context):

209 file_path = input_data.get("tool_input", {}).get("file_path", "unknown")

210 with open("./audit.log", "a") as f:

211 f.write(f"{datetime.now()}: modified {file_path}\n")

212 return {}

213 

214 

215 async def main():

216 async for message in query(

217 prompt="Refactor utils.py to improve readability",

218 options=ClaudeAgentOptions(

219 permission_mode="acceptEdits",

220 hooks={

221 "PostToolUse": [

222 HookMatcher(matcher="Edit|Write", hooks=[log_file_change])

223 ]

224 },

225 ),

226 ):

227 if hasattr(message, "result"):

228 print(message.result)

229 

230 

231 asyncio.run(main())

232 ```

233 

234 ```typescript TypeScript theme={null}

235 import { query, HookCallback } from "@anthropic-ai/claude-agent-sdk";

236 import { appendFile } from "fs/promises";

237 

238 const logFileChange: HookCallback = async (input) => {

239 const filePath = (input as any).tool_input?.file_path ?? "unknown";

240 await appendFile("./audit.log", `${new Date().toISOString()}: modified ${filePath}\n`);

241 return {};

242 };

243 

244 for await (const message of query({

245 prompt: "Refactor utils.py to improve readability",

246 options: {

247 permissionMode: "acceptEdits",

248 hooks: {

249 PostToolUse: [{ matcher: "Edit|Write", hooks: [logFileChange] }]

250 }

251 }

252 })) {

253 if ("result" in message) console.log(message.result);

254 }

255 ```

256 </CodeGroup>

257 

258 [Obtenga más información sobre hooks →](/es/agent-sdk/hooks)

259 </Tab>

260 

261 <Tab title="Subagentes">

262 Genere agentes especializados para manejar subtareas enfocadas. Su agente principal delega trabajo y los subagentes informan con resultados.

263 

264 Defina agentes personalizados con instrucciones especializadas. Incluya `Agent` en `allowedTools` ya que los subagentes se invocan a través de la herramienta Agent:

265 

266 <CodeGroup>

267 ```python Python theme={null}

268 import asyncio

269 from claude_agent_sdk import query, ClaudeAgentOptions, AgentDefinition

270 

271 

272 async def main():

273 async for message in query(

274 prompt="Use the code-reviewer agent to review this codebase",

275 options=ClaudeAgentOptions(

276 allowed_tools=["Read", "Glob", "Grep", "Agent"],

277 agents={

278 "code-reviewer": AgentDefinition(

279 description="Expert code reviewer for quality and security reviews.",

280 prompt="Analyze code quality and suggest improvements.",

281 tools=["Read", "Glob", "Grep"],

282 )

283 },

284 ),

285 ):

286 if hasattr(message, "result"):

287 print(message.result)

288 

289 

290 asyncio.run(main())

291 ```

292 

293 ```typescript TypeScript theme={null}

294 import { query } from "@anthropic-ai/claude-agent-sdk";

295 

296 for await (const message of query({

297 prompt: "Use the code-reviewer agent to review this codebase",

298 options: {

299 allowedTools: ["Read", "Glob", "Grep", "Agent"],

300 agents: {

301 "code-reviewer": {

302 description: "Expert code reviewer for quality and security reviews.",

303 prompt: "Analyze code quality and suggest improvements.",

304 tools: ["Read", "Glob", "Grep"]

305 }

306 }

307 }

308 })) {

309 if ("result" in message) console.log(message.result);

310 }

311 ```

312 </CodeGroup>

313 

314 Los mensajes dentro del contexto de un subagente incluyen un campo `parent_tool_use_id`, lo que le permite rastrear qué mensajes pertenecen a qué ejecución de subagente.

315 

316 [Obtenga más información sobre subagentes →](/es/agent-sdk/subagents)

317 </Tab>

318 

319 <Tab title="MCP">

320 Conéctese a sistemas externos a través del Protocolo de Contexto del Modelo: bases de datos, navegadores, API y [cientos más](https://github.com/modelcontextprotocol/servers).

321 

322 Este ejemplo conecta el [servidor Playwright MCP](https://github.com/microsoft/playwright-mcp) para dar a su agente capacidades de automatización del navegador:

323 

324 <CodeGroup>

325 ```python Python theme={null}

326 import asyncio

327 from claude_agent_sdk import query, ClaudeAgentOptions

328 

329 

330 async def main():

331 async for message in query(

332 prompt="Open example.com and describe what you see",

333 options=ClaudeAgentOptions(

334 mcp_servers={

335 "playwright": {"command": "npx", "args": ["@playwright/mcp@latest"]}

336 }

337 ),

338 ):

339 if hasattr(message, "result"):

340 print(message.result)

341 

342 

343 asyncio.run(main())

344 ```

345 

346 ```typescript TypeScript theme={null}

347 import { query } from "@anthropic-ai/claude-agent-sdk";

348 

349 for await (const message of query({

350 prompt: "Open example.com and describe what you see",

351 options: {

352 mcpServers: {

353 playwright: { command: "npx", args: ["@playwright/mcp@latest"] }

354 }

355 }

356 })) {

357 if ("result" in message) console.log(message.result);

358 }

359 ```

360 </CodeGroup>

361 

362 [Obtenga más información sobre MCP →](/es/agent-sdk/mcp)

363 </Tab>

364 

365 <Tab title="Permisos">

366 Controle exactamente qué herramientas puede usar su agente. Permita operaciones seguras, bloquee las peligrosas o requiera aprobación para acciones sensibles.

367 

368 <Note>

369 Para solicitudes de aprobación interactivas y la herramienta `AskUserQuestion`, consulte [Manejar aprobaciones e entrada del usuario](/es/agent-sdk/user-input).

370 </Note>

371 

372 Este ejemplo crea un agente de solo lectura que puede analizar pero no modificar código. `allowed_tools` aprueba previamente `Read`, `Glob` y `Grep`.

373 

374 <CodeGroup>

375 ```python Python theme={null}

376 import asyncio

377 from claude_agent_sdk import query, ClaudeAgentOptions

378 

379 

380 async def main():

381 async for message in query(

382 prompt="Review this code for best practices",

383 options=ClaudeAgentOptions(

384 allowed_tools=["Read", "Glob", "Grep"],

385 ),

386 ):

387 if hasattr(message, "result"):

388 print(message.result)

389 

390 

391 asyncio.run(main())

392 ```

393 

394 ```typescript TypeScript theme={null}

395 import { query } from "@anthropic-ai/claude-agent-sdk";

396 

397 for await (const message of query({

398 prompt: "Review this code for best practices",

399 options: {

400 allowedTools: ["Read", "Glob", "Grep"]

401 }

402 })) {

403 if ("result" in message) console.log(message.result);

404 }

405 ```

406 </CodeGroup>

407 

408 [Obtenga más información sobre permisos →](/es/agent-sdk/permissions)

409 </Tab>

410 

411 <Tab title="Sesiones">

412 Mantenga el contexto en múltiples intercambios. Claude recuerda archivos leídos, análisis realizados e historial de conversación. Reanude sesiones más tarde o divídalas para explorar diferentes enfoques.

413 

414 Este ejemplo captura el ID de sesión de la primera consulta, luego reanuda para continuar con contexto completo:

415 

416 <CodeGroup>

417 ```python Python theme={null}

418 import asyncio

419 from claude_agent_sdk import query, ClaudeAgentOptions, SystemMessage, ResultMessage

420 

421 

422 async def main():

423 session_id = None

424 

425 # First query: capture the session ID

426 async for message in query(

427 prompt="Read the authentication module",

428 options=ClaudeAgentOptions(allowed_tools=["Read", "Glob"]),

429 ):

430 if isinstance(message, SystemMessage) and message.subtype == "init":

431 session_id = message.data["session_id"]

432 

433 # Resume with full context from the first query

434 async for message in query(

435 prompt="Now find all places that call it", # "it" = auth module

436 options=ClaudeAgentOptions(resume=session_id),

437 ):

438 if isinstance(message, ResultMessage):

439 print(message.result)

440 

441 

442 asyncio.run(main())

443 ```

444 

445 ```typescript TypeScript theme={null}

446 import { query } from "@anthropic-ai/claude-agent-sdk";

447 

448 let sessionId: string | undefined;

449 

450 // First query: capture the session ID

451 for await (const message of query({

452 prompt: "Read the authentication module",

453 options: { allowedTools: ["Read", "Glob"] }

454 })) {

455 if (message.type === "system" && message.subtype === "init") {

456 sessionId = message.session_id;

457 }

458 }

459 

460 // Resume with full context from the first query

461 for await (const message of query({

462 prompt: "Now find all places that call it", // "it" = auth module

463 options: { resume: sessionId }

464 })) {

465 if ("result" in message) console.log(message.result);

466 }

467 ```

468 </CodeGroup>

469 

470 [Obtenga más información sobre sesiones →](/es/agent-sdk/sessions)

471 </Tab>

472</Tabs>

473 

474### Características de Claude Code

475 

476El SDK también admite la configuración basada en el sistema de archivos de Claude Code. Con opciones predeterminadas, el SDK carga estas desde `.claude/` en su directorio de trabajo y `~/.claude/`. Para restringir qué fuentes se cargan, configure `setting_sources` (Python) o `settingSources` (TypeScript) en sus opciones.

477 

478| Característica | Descripción | Ubicación |

479| ------------------------------------------------ | -------------------------------------------------------------- | -------------------------------------------- |

480| [Skills](/es/agent-sdk/skills) | Capacidades especializadas definidas en Markdown | `.claude/skills/*/SKILL.md` |

481| [Slash commands](/es/agent-sdk/slash-commands) | Comandos personalizados para tareas comunes | `.claude/commands/*.md` |

482| [Memory](/es/agent-sdk/modifying-system-prompts) | Contexto e instrucciones del proyecto | `CLAUDE.md` o `.claude/CLAUDE.md` |

483| [Plugins](/es/agent-sdk/plugins) | Extienda con comandos personalizados, agentes y servidores MCP | Programático a través de la opción `plugins` |

484 

485## Compare el Agent SDK con otras herramientas de Claude

486 

487La Plataforma Claude ofrece múltiples formas de construir con Claude. Así es como se ajusta el Agent SDK:

488 

489<Tabs>

490 <Tab title="Agent SDK vs Client SDK">

491 El [Anthropic Client SDK](https://platform.claude.com/docs/es/api/client-sdks) le proporciona acceso directo a la API: usted envía solicitudes e implementa la ejecución de herramientas usted mismo. El **Agent SDK** le proporciona Claude con ejecución de herramientas integrada.

492 

493 Con el Client SDK, implementa un bucle de herramientas. Con el Agent SDK, Claude lo maneja:

494 

495 <CodeGroup>

496 ```python Python theme={null}

497 # Client SDK: You implement the tool loop

498 response = client.messages.create(...)

499 while response.stop_reason == "tool_use":

500 result = your_tool_executor(response.tool_use)

501 response = client.messages.create(tool_result=result, **params)

502 

503 # Agent SDK: Claude handles tools autonomously

504 async for message in query(prompt="Fix the bug in auth.py"):

505 print(message)

506 ```

507 

508 ```typescript TypeScript theme={null}

509 // Client SDK: You implement the tool loop

510 let response = await client.messages.create({ ...params });

511 while (response.stop_reason === "tool_use") {

512 const result = yourToolExecutor(response.tool_use);

513 response = await client.messages.create({ tool_result: result, ...params });

514 }

515 

516 // Agent SDK: Claude handles tools autonomously

517 for await (const message of query({ prompt: "Fix the bug in auth.ts" })) {

518 console.log(message);

519 }

520 ```

521 </CodeGroup>

522 </Tab>

523 

524 <Tab title="Agent SDK vs Claude Code CLI">

525 Mismas capacidades, interfaz diferente:

526 

527 | Caso de uso | Mejor opción |

528 | ---------------------------- | ------------ |

529 | Desarrollo interactivo | CLI |

530 | Canalizaciones CI/CD | SDK |

531 | Aplicaciones personalizadas | SDK |

532 | Tareas puntuales | CLI |

533 | Automatización en producción | SDK |

534 

535 Muchos equipos usan ambos: CLI para desarrollo diario, SDK para producción. Los flujos de trabajo se traducen directamente entre ellos.

536 </Tab>

537 

538 <Tab title="Agent SDK vs Managed Agents">

539 [Managed Agents](https://platform.claude.com/docs/es/managed-agents/overview) es una API REST alojada: Anthropic ejecuta el agente y el sandbox, y su aplicación envía eventos y transmite resultados. El **Agent SDK** es una biblioteca que ejecuta el bucle del agente dentro de su propio proceso.

540 

541 | | Agent SDK | Managed Agents |

542 | ------------------------------- | ------------------------------------------------------------------------------------------ | --------------------------------------------------------------------------------------------------------------- |

543 | **Se ejecuta en** | Su proceso, su infraestructura | Infraestructura administrada por Anthropic |

544 | **Interfaz** | Biblioteca de Python o TypeScript | API REST |

545 | **El agente trabaja en** | Archivos en su infraestructura | Un sandbox administrado por sesión |

546 | **Estado de la sesión** | JSONL en su sistema de archivos | Registro de eventos alojado por Anthropic |

547 | **Herramientas personalizadas** | Funciones de Python o TypeScript en proceso | Claude activa la herramienta; usted ejecuta y devuelve resultados |

548 | **Mejor para** | Prototipado local, agentes que trabajan directamente en su sistema de archivos y servicios | Agentes de producción sin operar infraestructura de sandbox o sesión, sesiones de larga duración y asincrónicas |

549 

550 Una ruta común es crear prototipos con el Agent SDK localmente, luego pasar a Managed Agents para producción.

551 </Tab>

552</Tabs>

553 

554## Registro de cambios

555 

556Vea el registro de cambios completo para actualizaciones del SDK, correcciones de errores y nuevas características:

557 

558* **TypeScript SDK**: [ver CHANGELOG.md](https://github.com/anthropics/claude-agent-sdk-typescript/blob/main/CHANGELOG.md)

559* **Python SDK**: [ver CHANGELOG.md](https://github.com/anthropics/claude-agent-sdk-python/blob/main/CHANGELOG.md)

560 

561## Reportar errores

562 

563Si encuentra errores o problemas con el Agent SDK:

564 

565* **TypeScript SDK**: [reportar problemas en GitHub](https://github.com/anthropics/claude-agent-sdk-typescript/issues)

566* **Python SDK**: [reportar problemas en GitHub](https://github.com/anthropics/claude-agent-sdk-python/issues)

567 

568## Directrices de marca

569 

570Para socios que integran el Claude Agent SDK, el uso de la marca Claude es opcional. Al hacer referencia a Claude en su producto:

571 

572**Permitido:**

573 

574* "Claude Agent" (preferido para menús desplegables)

575* "Claude" (cuando ya está dentro de un menú etiquetado como "Agents")

576* "{YourAgentName} Powered by Claude" (si tiene un nombre de agente existente)

577 

578**No permitido:**

579 

580* "Claude Code" o "Claude Code Agent"

581* Arte ASCII de marca Claude Code o elementos visuales que imiten Claude Code

582 

583Su producto debe mantener su propia marca y no parecer ser Claude Code o ningún producto de Anthropic. Para preguntas sobre cumplimiento de marca, póngase en contacto con el [equipo de ventas](https://www.anthropic.com/contact-sales) de Anthropic.

584 

585## Licencia y términos

586 

587El uso del Claude Agent SDK se rige por los [Términos de Servicio Comerciales de Anthropic](https://www.anthropic.com/legal/commercial-terms), incluso cuando lo utiliza para potenciar productos y servicios que pone a disposición de sus propios clientes y usuarios finales, excepto en la medida en que un componente específico o dependencia esté cubierto por una licencia diferente como se indica en el archivo LICENSE de ese componente.

588 

589## Próximos pasos

590 

591<CardGroup cols={2}>

592 <Card title="Inicio rápido" icon="play" href="/es/agent-sdk/quickstart">

593 Construya un agente que encuentre y corrija errores en minutos

594 </Card>

595 

596 <Card title="Agentes de ejemplo" icon="star" href="https://github.com/anthropics/claude-agent-sdk-demos">

597 Asistente de correo electrónico, agente de investigación y más

598 </Card>

599 

600 <Card title="TypeScript SDK" icon="code" href="/es/agent-sdk/typescript">

601 Referencia completa de API de TypeScript y ejemplos

602 </Card>

603 

604 <Card title="Python SDK" icon="code" href="/es/agent-sdk/python">

605 Referencia completa de API de Python y ejemplos

606 </Card>

607</CardGroup>

agent-sdk/plugins.md +342 −0 created

Details

1> ## Documentation Index

2> Fetch the complete documentation index at: https://code.claude.com/docs/llms.txt

3> Use this file to discover all available pages before exploring further.

4 

5# Plugins en el SDK

6 

7> Cargue plugins personalizados para extender Claude Code con comandos, agentes, skills y hooks a través del Agent SDK

8 

9Los plugins le permiten extender Claude Code con funcionalidad personalizada que se puede compartir entre proyectos. A través del Agent SDK, puede cargar programáticamente plugins desde directorios locales para agregar comandos slash personalizados, agentes, skills, hooks y servidores MCP a sus sesiones de agente.

10 

11## ¿Qué son los plugins?

12 

13Los plugins son paquetes de extensiones de Claude Code que pueden incluir:

14 

15* **Skills**: Capacidades invocadas por el modelo que Claude utiliza de forma autónoma (también se pueden invocar con `/skill-name`)

16* **Agents**: Subagentes especializados para tareas específicas

17* **Hooks**: Controladores de eventos que responden al uso de herramientas y otros eventos

18* **MCP servers**: Integraciones de herramientas externas a través del Model Context Protocol

19 

20<Note>

21 El directorio `commands/` es un formato heredado. Use `skills/` para nuevos plugins. Claude Code continúa admitiendo ambos formatos para compatibilidad hacia atrás.

22</Note>

23 

24Para obtener información completa sobre la estructura de plugins y cómo crear plugins, consulte [Plugins](/es/plugins).

25 

26## Cargando plugins

27 

28Cargue plugins proporcionando sus rutas del sistema de archivos local en su configuración de opciones. El campo `type` debe ser `"local"`, el único valor que acepta el SDK. Para usar un plugin distribuido a través de un [marketplace](/es/plugin-marketplaces) o repositorio remoto, descárguelo primero y proporcione la ruta del directorio local. El SDK admite cargar múltiples plugins desde diferentes ubicaciones.

29 

30<CodeGroup>

31 ```typescript TypeScript theme={null}

32 import { query } from "@anthropic-ai/claude-agent-sdk";

33 

34 for await (const message of query({

35 prompt: "Hello",

36 options: {

37 plugins: [

38 { type: "local", path: "./my-plugin" },

39 { type: "local", path: "/absolute/path/to/another-plugin" }

40 ]

41 }

42 })) {

43 // Plugin commands, agents, and other features are now available

44 }

45 ```

46 

47 ```python Python theme={null}

48 import asyncio

49 from claude_agent_sdk import query

50 

51 

52 async def main():

53 async for message in query(

54 prompt="Hello",

55 options={

56 "plugins": [

57 {"type": "local", "path": "./my-plugin"},

58 {"type": "local", "path": "/absolute/path/to/another-plugin"},

59 ]

60 },

61 ):

62 # Plugin commands, agents, and other features are now available

63 pass

64 

65 

66 asyncio.run(main())

67 ```

68</CodeGroup>

69 

70### Especificaciones de ruta

71 

72Las rutas de plugins pueden ser:

73 

74* **Rutas relativas**: Se resuelven en relación con su directorio de trabajo actual (por ejemplo, `"./plugins/my-plugin"`)

75* **Rutas absolutas**: Rutas completas del sistema de archivos (por ejemplo, `"/home/user/plugins/my-plugin"`)

76 

77<Note>

78 La ruta debe apuntar al directorio raíz del plugin (el directorio que contiene `.claude-plugin/plugin.json`).

79</Note>

80 

81## Verificando la instalación del plugin

82 

83Cuando los plugins se cargan correctamente, aparecen en el mensaje de inicialización del sistema. Puede verificar que sus plugins estén disponibles:

84 

85<CodeGroup>

86 ```typescript TypeScript theme={null}

87 import { query } from "@anthropic-ai/claude-agent-sdk";

88 

89 for await (const message of query({

90 prompt: "Hello",

91 options: {

92 plugins: [{ type: "local", path: "./my-plugin" }]

93 }

94 })) {

95 if (message.type === "system" && message.subtype === "init") {

96 // Check loaded plugins

97 console.log("Plugins:", message.plugins);

98 // Example: [{ name: "my-plugin", path: "./my-plugin" }]

99 

100 // Check available commands from plugins

101 console.log("Commands:", message.slash_commands);

102 // Example: ["/help", "/compact", "my-plugin:custom-command"]

103 }

104 }

105 ```

106 

107 ```python Python theme={null}

108 import asyncio

109 from claude_agent_sdk import query

110 

111 

112 async def main():

113 async for message in query(

114 prompt="Hello", options={"plugins": [{"type": "local", "path": "./my-plugin"}]}

115 ):

116 if message.type == "system" and message.subtype == "init":

117 # Check loaded plugins

118 print("Plugins:", message.data.get("plugins"))

119 # Example: [{"name": "my-plugin", "path": "./my-plugin"}]

120 

121 # Check available commands from plugins

122 print("Commands:", message.data.get("slash_commands"))

123 # Example: ["/help", "/compact", "my-plugin:custom-command"]

124 

125 

126 asyncio.run(main())

127 ```

128</CodeGroup>

129 

130## Usando skills de plugins

131 

132Los skills de los plugins se espacian automáticamente con el nombre del plugin para evitar conflictos. Cuando se invocan como comandos slash, el formato es `plugin-name:skill-name`.

133 

134<CodeGroup>

135 ```typescript TypeScript theme={null}

136 import { query } from "@anthropic-ai/claude-agent-sdk";

137 

138 // Load a plugin with a custom /greet skill

139 for await (const message of query({

140 prompt: "/my-plugin:greet", // Use plugin skill with namespace

141 options: {

142 plugins: [{ type: "local", path: "./my-plugin" }]

143 }

144 })) {

145 // Claude executes the custom greeting skill from the plugin

146 if (message.type === "assistant") {

147 console.log(message.message.content);

148 }

149 }

150 ```

151 

152 ```python Python theme={null}

153 import asyncio

154 from claude_agent_sdk import query, AssistantMessage, TextBlock

155 

156 

157 async def main():

158 # Load a plugin with a custom /greet skill

159 async for message in query(

160 prompt="/demo-plugin:greet", # Use plugin skill with namespace

161 options={"plugins": [{"type": "local", "path": "./plugins/demo-plugin"}]},

162 ):

163 # Claude executes the custom greeting skill from the plugin

164 if isinstance(message, AssistantMessage):

165 for block in message.content:

166 if isinstance(block, TextBlock):

167 print(f"Claude: {block.text}")

168 

169 

170 asyncio.run(main())

171 ```

172</CodeGroup>

173 

174<Note>

175 Si instaló un plugin a través de la CLI (por ejemplo, `/plugin install my-plugin@marketplace`), aún puede usarlo en el SDK proporcionando su ruta de instalación. Verifique `~/.claude/plugins/` para plugins instalados por CLI.

176</Note>

177 

178## Ejemplo completo

179 

180Aquí hay un ejemplo completo que demuestra la carga y el uso de plugins:

181 

182<CodeGroup>

183 ```typescript TypeScript theme={null}

184 import { query } from "@anthropic-ai/claude-agent-sdk";

185 import * as path from "path";

186 

187 async function runWithPlugin() {

188 const pluginPath = path.join(__dirname, "plugins", "my-plugin");

189 

190 console.log("Loading plugin from:", pluginPath);

191 

192 for await (const message of query({

193 prompt: "What custom commands do you have available?",

194 options: {

195 plugins: [{ type: "local", path: pluginPath }],

196 maxTurns: 3

197 }

198 })) {

199 if (message.type === "system" && message.subtype === "init") {

200 console.log("Loaded plugins:", message.plugins);

201 console.log("Available commands:", message.slash_commands);

202 }

203 

204 if (message.type === "assistant") {

205 console.log("Assistant:", message.message.content);

206 }

207 }

208 }

209 

210 runWithPlugin().catch(console.error);

211 ```

212 

213 ```python Python theme={null}

214 #!/usr/bin/env python3

215 """Example demonstrating how to use plugins with the Agent SDK."""

216 

217 from pathlib import Path

218 import anyio

219 from claude_agent_sdk import (

220 AssistantMessage,

221 ClaudeAgentOptions,

222 TextBlock,

223 query,

224 )

225 

226 

227 async def run_with_plugin():

228 """Example using a custom plugin."""

229 plugin_path = Path(__file__).parent / "plugins" / "demo-plugin"

230 

231 print(f"Loading plugin from: {plugin_path}")

232 

233 options = ClaudeAgentOptions(

234 plugins=[{"type": "local", "path": str(plugin_path)}],

235 max_turns=3,

236 )

237 

238 async for message in query(

239 prompt="What custom commands do you have available?", options=options

240 ):

241 if message.type == "system" and message.subtype == "init":

242 print(f"Loaded plugins: {message.data.get('plugins')}")

243 print(f"Available commands: {message.data.get('slash_commands')}")

244 

245 if isinstance(message, AssistantMessage):

246 for block in message.content:

247 if isinstance(block, TextBlock):

248 print(f"Assistant: {block.text}")

249 

250 

251 if __name__ == "__main__":

252 anyio.run(run_with_plugin)

253 ```

254</CodeGroup>

255 

256## Referencia de estructura de plugin

257 

258Un directorio de plugin debe contener un archivo de manifiesto `.claude-plugin/plugin.json`. Opcionalmente puede incluir:

259 

260```text theme={null}

261my-plugin/

262├── .claude-plugin/

263│ └── plugin.json # Required: plugin manifest

264├── skills/ # Agent Skills (invoked autonomously or via /skill-name)

265│ └── my-skill/

266│ └── SKILL.md

267├── commands/ # Legacy: use skills/ instead

268│ └── custom-cmd.md

269├── agents/ # Custom agents

270│ └── specialist.md

271├── hooks/ # Event handlers

272│ └── hooks.json

273└── .mcp.json # MCP server definitions

274```

275 

276Para obtener información detallada sobre cómo crear plugins, consulte:

277 

278* [Plugins](/es/plugins) - Guía completa de desarrollo de plugins

279* [Plugins reference](/es/plugins-reference) - Especificaciones técnicas y esquemas

280 

281## Casos de uso comunes

282 

283### Desarrollo y pruebas

284 

285Cargue plugins durante el desarrollo sin instalarlos globalmente:

286 

287```typescript theme={null}

288plugins: [{ type: "local", path: "./dev-plugins/my-plugin" }];

289```

290 

291### Extensiones específicas del proyecto

292 

293Incluya plugins en su repositorio de proyecto para consistencia en todo el equipo:

294 

295```typescript theme={null}

296plugins: [{ type: "local", path: "./project-plugins/team-workflows" }];

297```

298 

299### Múltiples fuentes de plugins

300 

301Combine plugins de diferentes ubicaciones:

302 

303```typescript theme={null}

304plugins: [

305 { type: "local", path: "./local-plugin" },

306 { type: "local", path: "~/.claude/custom-plugins/shared-plugin" }

307];

308```

309 

310## Troubleshooting

311 

312### Plugin no se carga

313 

314Si su plugin no aparece en el mensaje de inicialización:

315 

3161. **Verifique la ruta**: Asegúrese de que la ruta apunte al directorio raíz del plugin (que contiene `.claude-plugin/`)

3172. **Valide plugin.json**: Asegúrese de que su archivo de manifiesto tenga una sintaxis JSON válida

3183. **Verifique los permisos de archivo**: Asegúrese de que el directorio del plugin sea legible

319 

320### Los skills no aparecen

321 

322Si los skills del plugin no funcionan:

323 

3241. **Use el espacio de nombres**: Los skills del plugin requieren el formato `plugin-name:skill-name` cuando se invocan como comandos slash

3252. **Verifique el mensaje de inicialización**: Verifique que el skill aparezca en `slash_commands` con el espacio de nombres correcto

3263. **Valide los archivos de skill**: Asegúrese de que cada skill tenga un archivo `SKILL.md` en su propio subdirectorio bajo `skills/` (por ejemplo, `skills/my-skill/SKILL.md`)

327 

328### Problemas de resolución de ruta

329 

330Si las rutas relativas no funcionan:

331 

3321. **Verifique el directorio de trabajo**: Las rutas relativas se resuelven desde su directorio de trabajo actual

3332. **Use rutas absolutas**: Para mayor confiabilidad, considere usar rutas absolutas

3343. **Normalice las rutas**: Use utilidades de ruta para construir rutas correctamente

335 

336## Ver también

337 

338* [Plugins](/es/plugins) - Guía completa de desarrollo de plugins

339* [Plugins reference](/es/plugins-reference) - Especificaciones técnicas

340* [Slash Commands](/es/agent-sdk/slash-commands) - Usando comandos slash en el SDK

341* [Subagents](/es/agent-sdk/subagents) - Trabajando con agentes especializados

342* [Skills](/es/agent-sdk/skills) - Usando Agent Skills

agent-sdk/python.md +3274 −0 created

Details

1> ## Documentation Index

2> Fetch the complete documentation index at: https://code.claude.com/docs/llms.txt

3> Use this file to discover all available pages before exploring further.

4 

5# Referencia del SDK de Agent - Python

6 

7> Referencia completa de la API del SDK de Agent de Python, incluyendo todas las funciones, tipos y clases.

8 

9## Instalación

10 

11```bash theme={null}

12pip install claude-agent-sdk

13```

14 

15## Elegir entre `query()` y `ClaudeSDKClient`

16 

17El SDK de Python proporciona dos formas de interactuar con Claude Code:

18 

19### Comparación rápida

20 

21| Característica | `query()` | `ClaudeSDKClient` |

22| :------------------------------ | :----------------------------- | :------------------------------------------ |

23| **Sesión** | Crea una nueva sesión cada vez | Reutiliza la misma sesión |

24| **Conversación** | Intercambio único | Múltiples intercambios en el mismo contexto |

25| **Conexión** | Se gestiona automáticamente | Control manual |

26| **Entrada de streaming** | ✅ Compatible | ✅ Compatible |

27| **Interrupciones** | ❌ No compatible | ✅ Compatible |

28| **Hooks** | ✅ Compatible | ✅ Compatible |

29| **Herramientas personalizadas** | ✅ Compatible | ✅ Compatible |

30| **Continuar chat** | ❌ Nueva sesión cada vez | ✅ Mantiene la conversación |

31| **Caso de uso** | Tareas puntuales | Conversaciones continuas |

32 

33### Cuándo usar `query()` (nueva sesión cada vez)

34 

35**Mejor para:**

36 

37* Preguntas puntuales donde no necesita historial de conversación

38* Tareas independientes que no requieren contexto de intercambios anteriores

39* Scripts de automatización simple

40* Cuando desea un comienzo nuevo cada vez

41 

42### Cuándo usar `ClaudeSDKClient` (conversación continua)

43 

44**Mejor para:**

45 

46* **Continuar conversaciones** - Cuando necesita que Claude recuerde el contexto

47* **Preguntas de seguimiento** - Construir sobre respuestas anteriores

48* **Aplicaciones interactivas** - Interfaces de chat, REPLs

49* **Lógica impulsada por respuestas** - Cuando la siguiente acción depende de la respuesta de Claude

50* **Control de sesión** - Gestionar explícitamente el ciclo de vida de la conversación

51 

52## Funciones

53 

54### `query()`

55 

56Crea una nueva sesión para cada interacción con Claude Code. Devuelve un iterador asincrónico que produce mensajes a medida que llegan. Cada llamada a `query()` comienza de nuevo sin memoria de interacciones anteriores.

57 

58```python theme={null}

59async def query(

60 *,

61 prompt: str | AsyncIterable[dict[str, Any]],

62 options: ClaudeAgentOptions | None = None,

63 transport: Transport | None = None

64) -> AsyncIterator[Message]

65```

66 

67#### Parámetros

68 

69| Parámetro | Tipo | Descripción |

70| :---------- | :--------------------------- | :--------------------------------------------------------------------------------- |

71| `prompt` | `str \| AsyncIterable[dict]` | El prompt de entrada como una cadena o iterable asincrónico para modo de streaming |

72| `options` | `ClaudeAgentOptions \| None` | Objeto de configuración opcional (por defecto `ClaudeAgentOptions()` si es None) |

73| `transport` | `Transport \| None` | Transporte personalizado opcional para comunicarse con el proceso CLI |

74 

75#### Devuelve

76 

77Devuelve un `AsyncIterator[Message]` que produce mensajes de la conversación.

78 

79#### Ejemplo - Con opciones

80 

81```python theme={null}

82import asyncio

83from claude_agent_sdk import query, ClaudeAgentOptions

84 

85 

86async def main():

87 options = ClaudeAgentOptions(

88 system_prompt="You are an expert Python developer",

89 permission_mode="acceptEdits",

90 cwd="/home/user/project",

91 )

92 

93 async for message in query(prompt="Create a Python web server", options=options):

94 print(message)

95 

96 

97asyncio.run(main())

98```

99 

100### `tool()`

101 

102Decorador para definir herramientas MCP con seguridad de tipos.

103 

104```python theme={null}

105def tool(

106 name: str,

107 description: str,

108 input_schema: type | dict[str, Any],

109 annotations: ToolAnnotations | None = None

110) -> Callable[[Callable[[Any], Awaitable[dict[str, Any]]]], SdkMcpTool[Any]]

111```

112 

113#### Parámetros

114 

115| Parámetro | Tipo | Descripción |

116| :------------- | :----------------------------------------------- | :------------------------------------------------------------------------------------------------------ |

117| `name` | `str` | Identificador único para la herramienta |

118| `description` | `str` | Descripción legible de lo que hace la herramienta |

119| `input_schema` | `type \| dict[str, Any]` | Esquema que define los parámetros de entrada de la herramienta (ver abajo) |

120| `annotations` | [`ToolAnnotations`](#tool-annotations)` \| None` | Anotaciones opcionales de herramienta MCP que proporcionan sugerencias de comportamiento a los clientes |

121 

122#### Opciones de esquema de entrada

123 

1241. **Mapeo de tipo simple** (recomendado):

125 

126 ```python theme={null}

127 {"text": str, "count": int, "enabled": bool}

128 ```

129 

1302. **Formato JSON Schema** (para validación compleja):

131 ```python theme={null}

132 {

133 "type": "object",

134 "properties": {

135 "text": {"type": "string"},

136 "count": {"type": "integer", "minimum": 0},

137 },

138 "required": ["text"],

139 }

140 ```

141 

142#### Devuelve

143 

144Una función decoradora que envuelve la implementación de la herramienta y devuelve una instancia de `SdkMcpTool`.

145 

146#### Ejemplo

147 

148```python theme={null}

149from claude_agent_sdk import tool

150from typing import Any

151 

152 

153@tool("greet", "Greet a user", {"name": str})

154async def greet(args: dict[str, Any]) -> dict[str, Any]:

155 return {"content": [{"type": "text", "text": f"Hello, {args['name']}!"}]}

156```

157 

158#### `ToolAnnotations`

159 

160Re-exportado desde `mcp.types` (también disponible como `from claude_agent_sdk import ToolAnnotations`). Todos los campos son sugerencias opcionales; los clientes no deben depender de ellos para decisiones de seguridad.

161 

162| Campo | Tipo | Predeterminado | Descripción |

163| :---------------- | :------------- | :------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

164| `title` | `str \| None` | `None` | Título legible para la herramienta |

165| `readOnlyHint` | `bool \| None` | `False` | Si es `True`, la herramienta no modifica su entorno |

166| `destructiveHint` | `bool \| None` | `True` | Si es `True`, la herramienta puede realizar actualizaciones destructivas (solo significativo cuando `readOnlyHint` es `False`) |

167| `idempotentHint` | `bool \| None` | `False` | Si es `True`, las llamadas repetidas con los mismos argumentos no tienen efecto adicional (solo significativo cuando `readOnlyHint` es `False`) |

168| `openWorldHint` | `bool \| None` | `True` | Si es `True`, la herramienta interactúa con entidades externas (por ejemplo, búsqueda web). Si es `False`, el dominio de la herramienta es cerrado (por ejemplo, una herramienta de memoria) |

169 

170```python theme={null}

171from claude_agent_sdk import tool, ToolAnnotations

172from typing import Any

173 

174 

175@tool(

176 "search",

177 "Search the web",

178 {"query": str},

179 annotations=ToolAnnotations(readOnlyHint=True, openWorldHint=True),

180)

181async def search(args: dict[str, Any]) -> dict[str, Any]:

182 return {"content": [{"type": "text", "text": f"Results for: {args['query']}"}]}

183```

184 

185### `create_sdk_mcp_server()`

186 

187Crea un servidor MCP en proceso que se ejecuta dentro de su aplicación Python.

188 

189```python theme={null}

190def create_sdk_mcp_server(

191 name: str,

192 version: str = "1.0.0",

193 tools: list[SdkMcpTool[Any]] | None = None

194) -> McpSdkServerConfig

195```

196 

197#### Parámetros

198 

199| Parámetro | Tipo | Predeterminado | Descripción |

200| :-------- | :------------------------------ | :------------- | :----------------------------------------------------------------- |

201| `name` | `str` | - | Identificador único para el servidor |

202| `version` | `str` | `"1.0.0"` | Cadena de versión del servidor |

203| `tools` | `list[SdkMcpTool[Any]] \| None` | `None` | Lista de funciones de herramienta creadas con el decorador `@tool` |

204 

205#### Devuelve

206 

207Devuelve un objeto `McpSdkServerConfig` que se puede pasar a `ClaudeAgentOptions.mcp_servers`.

208 

209#### Ejemplo

210 

211```python theme={null}

212from claude_agent_sdk import tool, create_sdk_mcp_server

213 

214 

215@tool("add", "Add two numbers", {"a": float, "b": float})

216async def add(args):

217 return {"content": [{"type": "text", "text": f"Sum: {args['a'] + args['b']}"}]}

218 

219 

220@tool("multiply", "Multiply two numbers", {"a": float, "b": float})

221async def multiply(args):

222 return {"content": [{"type": "text", "text": f"Product: {args['a'] * args['b']}"}]}

223 

224 

225calculator = create_sdk_mcp_server(

226 name="calculator",

227 version="2.0.0",

228 tools=[add, multiply], # Pass decorated functions

229)

230 

231# Use with Claude

232options = ClaudeAgentOptions(

233 mcp_servers={"calc": calculator},

234 allowed_tools=["mcp__calc__add", "mcp__calc__multiply"],

235)

236```

237 

238### `list_sessions()`

239 

240Lista sesiones pasadas con metadatos. Filtre por directorio de proyecto o liste sesiones en todos los proyectos. Sincrónico; devuelve inmediatamente.

241 

242```python theme={null}

243def list_sessions(

244 directory: str | None = None,

245 limit: int | None = None,

246 include_worktrees: bool = True

247) -> list[SDKSessionInfo]

248```

249 

250#### Parámetros

251 

252| Parámetro | Tipo | Predeterminado | Descripción |

253| :------------------ | :------------ | :------------- | :---------------------------------------------------------------------------------------------------- |

254| `directory` | `str \| None` | `None` | Directorio para listar sesiones. Cuando se omite, devuelve sesiones en todos los proyectos |

255| `limit` | `int \| None` | `None` | Número máximo de sesiones a devolver |

256| `include_worktrees` | `bool` | `True` | Cuando `directory` está dentro de un repositorio git, incluya sesiones de todas las rutas de worktree |

257 

258#### Tipo de retorno: `SDKSessionInfo`

259 

260| Propiedad | Tipo | Descripción |

261| :-------------- | :------------ | :---------------------------------------------------------------------------------------------- |

262| `session_id` | `str` | Identificador único de sesión |

263| `summary` | `str` | Título de visualización: título personalizado, resumen generado automáticamente o primer prompt |

264| `last_modified` | `int` | Última hora de modificación en milisegundos desde la época |

265| `file_size` | `int \| None` | Tamaño del archivo de sesión en bytes (`None` para backends de almacenamiento remoto) |

266| `custom_title` | `str \| None` | Título de sesión establecido por el usuario |

267| `first_prompt` | `str \| None` | Primer prompt de usuario significativo en la sesión |

268| `git_branch` | `str \| None` | Rama de Git al final de la sesión |

269| `cwd` | `str \| None` | Directorio de trabajo para la sesión |

270| `tag` | `str \| None` | Etiqueta de sesión establecida por el usuario (ver [`tag_session()`](#tag-session)) |

271| `created_at` | `int \| None` | Hora de creación de sesión en milisegundos desde la época |

272 

273#### Ejemplo

274 

275Imprima las 10 sesiones más recientes para un proyecto. Los resultados se ordenan por `last_modified` descendente, por lo que el primer elemento es el más nuevo. Omita `directory` para buscar en todos los proyectos.

276 

277```python theme={null}

278from claude_agent_sdk import list_sessions

279 

280for session in list_sessions(directory="/path/to/project", limit=10):

281 print(f"{session.summary} ({session.session_id})")

282```

283 

284### `get_session_messages()`

285 

286Recupera mensajes de una sesión pasada. Sincrónico; devuelve inmediatamente.

287 

288```python theme={null}

289def get_session_messages(

290 session_id: str,

291 directory: str | None = None,

292 limit: int | None = None,

293 offset: int = 0

294) -> list[SessionMessage]

295```

296 

297#### Parámetros

298 

299| Parámetro | Tipo | Predeterminado | Descripción |

300| :----------- | :------------ | :------------- | :-------------------------------------------------------------------------------- |

301| `session_id` | `str` | requerido | El ID de sesión para recuperar mensajes |

302| `directory` | `str \| None` | `None` | Directorio de proyecto para buscar. Cuando se omite, busca en todos los proyectos |

303| `limit` | `int \| None` | `None` | Número máximo de mensajes a devolver |

304| `offset` | `int` | `0` | Número de mensajes a omitir desde el inicio |

305 

306#### Tipo de retorno: `SessionMessage`

307 

308| Propiedad | Tipo | Descripción |

309| :------------------- | :----------------------------- | :--------------------------------- |

310| `type` | `Literal["user", "assistant"]` | Rol del mensaje |

311| `uuid` | `str` | Identificador único del mensaje |

312| `session_id` | `str` | Identificador de sesión |

313| `message` | `Any` | Contenido del mensaje sin procesar |

314| `parent_tool_use_id` | `None` | Reservado para uso futuro |

315 

316#### Ejemplo

317 

318```python theme={null}

319from claude_agent_sdk import list_sessions, get_session_messages

320 

321sessions = list_sessions(limit=1)

322if sessions:

323 messages = get_session_messages(sessions[0].session_id)

324 for msg in messages:

325 print(f"[{msg.type}] {msg.uuid}")

326```

327 

328### `get_session_info()`

329 

330Lee metadatos para una única sesión por ID sin escanear el directorio del proyecto completo. Sincrónico; devuelve inmediatamente.

331 

332```python theme={null}

333def get_session_info(

334 session_id: str,

335 directory: str | None = None,

336) -> SDKSessionInfo | None

337```

338 

339#### Parámetros

340 

341| Parámetro | Tipo | Predeterminado | Descripción |

342| :----------- | :------------ | :------------- | :--------------------------------------------------------------------------------------------- |

343| `session_id` | `str` | requerido | UUID de la sesión a buscar |

344| `directory` | `str \| None` | `None` | Ruta del directorio del proyecto. Cuando se omite, busca en todos los directorios del proyecto |

345 

346Devuelve [`SDKSessionInfo`](#return-type-sdk-session-info), o `None` si la sesión no se encuentra.

347 

348#### Ejemplo

349 

350Busque los metadatos de una única sesión sin escanear el directorio del proyecto. Útil cuando ya tiene un ID de sesión de una ejecución anterior.

351 

352```python theme={null}

353from claude_agent_sdk import get_session_info

354 

355info = get_session_info("550e8400-e29b-41d4-a716-446655440000")

356if info:

357 print(f"{info.summary} (branch: {info.git_branch}, tag: {info.tag})")

358```

359 

360### `rename_session()`

361 

362Renombra una sesión agregando una entrada de título personalizado. Las llamadas repetidas son seguras; el título más reciente gana. Sincrónico.

363 

364```python theme={null}

365def rename_session(

366 session_id: str,

367 title: str,

368 directory: str | None = None,

369) -> None

370```

371 

372#### Parámetros

373 

374| Parámetro | Tipo | Predeterminado | Descripción |

375| :----------- | :------------ | :------------- | :--------------------------------------------------------------------------------------------- |

376| `session_id` | `str` | requerido | UUID de la sesión a renombrar |

377| `title` | `str` | requerido | Nuevo título. Debe ser no vacío después de eliminar espacios en blanco |

378| `directory` | `str \| None` | `None` | Ruta del directorio del proyecto. Cuando se omite, busca en todos los directorios del proyecto |

379 

380Genera `ValueError` si `session_id` no es un UUID válido o `title` está vacío; `FileNotFoundError` si la sesión no se puede encontrar.

381 

382#### Ejemplo

383 

384Renombre la sesión más reciente para que sea más fácil de encontrar más tarde. El nuevo título aparece en [`SDKSessionInfo.custom_title`](#return-type-sdk-session-info) en lecturas posteriores.

385 

386```python theme={null}

387from claude_agent_sdk import list_sessions, rename_session

388 

389sessions = list_sessions(directory="/path/to/project", limit=1)

390if sessions:

391 rename_session(sessions[0].session_id, "Refactor auth module")

392```

393 

394### `tag_session()`

395 

396Etiqueta una sesión. Pase `None` para borrar la etiqueta. Las llamadas repetidas son seguras; la etiqueta más reciente gana. Sincrónico.

397 

398```python theme={null}

399def tag_session(

400 session_id: str,

401 tag: str | None,

402 directory: str | None = None,

403) -> None

404```

405 

406#### Parámetros

407 

408| Parámetro | Tipo | Predeterminado | Descripción |

409| :----------- | :------------ | :------------- | :--------------------------------------------------------------------------------------------- |

410| `session_id` | `str` | requerido | UUID de la sesión a etiquetar |

411| `tag` | `str \| None` | requerido | Cadena de etiqueta, o `None` para borrar. Desinfectada de Unicode antes de almacenar |

412| `directory` | `str \| None` | `None` | Ruta del directorio del proyecto. Cuando se omite, busca en todos los directorios del proyecto |

413 

414Genera `ValueError` si `session_id` no es un UUID válido o `tag` está vacío después de la desinfección; `FileNotFoundError` si la sesión no se puede encontrar.

415 

416#### Ejemplo

417 

418Etiquete una sesión, luego filtre por esa etiqueta en una lectura posterior. Pase `None` para borrar una etiqueta existente.

419 

420```python theme={null}

421from claude_agent_sdk import list_sessions, tag_session

422 

423# Tag a session

424tag_session("550e8400-e29b-41d4-a716-446655440000", "needs-review")

425 

426# Later: find all sessions with that tag

427for session in list_sessions(directory="/path/to/project"):

428 if session.tag == "needs-review":

429 print(session.summary)

430```

431 

432## Clases

433 

434### `ClaudeSDKClient`

435 

436**Mantiene una sesión de conversación en múltiples intercambios.** Este es el equivalente de Python de cómo funciona internamente la función `query()` del SDK de TypeScript - crea un objeto cliente que puede continuar conversaciones.

437 

438#### Características clave

439 

440* **Continuidad de sesión**: Mantiene el contexto de conversación en múltiples llamadas a `query()`

441* **Misma conversación**: La sesión retiene mensajes anteriores

442* **Soporte de interrupciones**: Puede detener la ejecución a mitad de tarea

443* **Ciclo de vida explícito**: Usted controla cuándo comienza y termina la sesión

444* **Flujo impulsado por respuestas**: Puede reaccionar a respuestas y enviar seguimientos

445* **Herramientas personalizadas y hooks**: Admite herramientas personalizadas (creadas con el decorador `@tool`) y hooks

446 

447```python theme={null}

448class ClaudeSDKClient:

449 def __init__(self, options: ClaudeAgentOptions | None = None, transport: Transport | None = None)

450 async def connect(self, prompt: str | AsyncIterable[dict] | None = None) -> None

451 async def query(self, prompt: str | AsyncIterable[dict], session_id: str = "default") -> None

452 async def receive_messages(self) -> AsyncIterator[Message]

453 async def receive_response(self) -> AsyncIterator[Message]

454 async def interrupt(self) -> None

455 async def set_permission_mode(self, mode: str) -> None

456 async def set_model(self, model: str | None = None) -> None

457 async def rewind_files(self, user_message_id: str) -> None

458 async def get_mcp_status(self) -> McpStatusResponse

459 async def reconnect_mcp_server(self, server_name: str) -> None

460 async def toggle_mcp_server(self, server_name: str, enabled: bool) -> None

461 async def stop_task(self, task_id: str) -> None

462 async def get_server_info(self) -> dict[str, Any] | None

463 async def disconnect(self) -> None

464```

465 

466#### Métodos

467 

468| Método | Descripción |

469| :---------------------------------------- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

470| `__init__(options)` | Inicializa el cliente con configuración opcional |

471| `connect(prompt)` | Conectar a Claude con un prompt inicial opcional o flujo de mensajes |

472| `query(prompt, session_id)` | Enviar una nueva solicitud en modo de streaming |

473| `receive_messages()` | Recibir todos los mensajes de Claude como un iterador asincrónico |

474| `receive_response()` | Recibir mensajes hasta e incluyendo un ResultMessage |

475| `interrupt()` | Enviar señal de interrupción (solo funciona en modo de streaming) |

476| `set_permission_mode(mode)` | Cambiar el modo de permiso para la sesión actual |

477| `set_model(model)` | Cambiar el modelo para la sesión actual. Pase `None` para restablecer al predeterminado |

478| `rewind_files(user_message_id)` | Restaurar archivos a su estado en el mensaje de usuario especificado. Requiere `enable_file_checkpointing=True`. Ver [File checkpointing](/es/agent-sdk/file-checkpointing) |

479| `get_mcp_status()` | Obtener el estado de todos los servidores MCP configurados. Devuelve [`McpStatusResponse`](#mcp-status-response) |

480| `reconnect_mcp_server(server_name)` | Reintentar conectar a un servidor MCP que falló o fue desconectado |

481| `toggle_mcp_server(server_name, enabled)` | Habilitar o deshabilitar un servidor MCP a mitad de sesión. Deshabilitar elimina sus herramientas |

482| `stop_task(task_id)` | Detener una tarea de fondo en ejecución. Un [`TaskNotificationMessage`](#task-notification-message) con estado `"stopped"` sigue en el flujo de mensajes |

483| `get_server_info()` | Obtener información del servidor incluyendo ID de sesión y capacidades |

484| `disconnect()` | Desconectar de Claude |

485 

486#### Soporte de gestor de contexto

487 

488El cliente se puede usar como un gestor de contexto asincrónico para la gestión automática de conexiones:

489 

490```python theme={null}

491async with ClaudeSDKClient() as client:

492 await client.query("Hello Claude")

493 async for message in client.receive_response():

494 print(message)

495```

496 

497> **Importante:** Al iterar sobre mensajes, evite usar `break` para salir temprano ya que esto puede causar problemas de limpieza de asyncio. En su lugar, deje que la iteración se complete naturalmente o use banderas para rastrear cuándo ha encontrado lo que necesita.

498 

499#### Ejemplo - Continuar una conversación

500 

501```python theme={null}

502import asyncio

503from claude_agent_sdk import ClaudeSDKClient, AssistantMessage, TextBlock, ResultMessage

504 

505 

506async def main():

507 async with ClaudeSDKClient() as client:

508 # First question

509 await client.query("What's the capital of France?")

510 

511 # Process response

512 async for message in client.receive_response():

513 if isinstance(message, AssistantMessage):

514 for block in message.content:

515 if isinstance(block, TextBlock):

516 print(f"Claude: {block.text}")

517 

518 # Follow-up question - the session retains the previous context

519 await client.query("What's the population of that city?")

520 

521 async for message in client.receive_response():

522 if isinstance(message, AssistantMessage):

523 for block in message.content:

524 if isinstance(block, TextBlock):

525 print(f"Claude: {block.text}")

526 

527 # Another follow-up - still in the same conversation

528 await client.query("What are some famous landmarks there?")

529 

530 async for message in client.receive_response():

531 if isinstance(message, AssistantMessage):

532 for block in message.content:

533 if isinstance(block, TextBlock):

534 print(f"Claude: {block.text}")

535 

536 

537asyncio.run(main())

538```

539 

540#### Ejemplo - Entrada de streaming con ClaudeSDKClient

541 

542```python theme={null}

543import asyncio

544from claude_agent_sdk import ClaudeSDKClient

545 

546 

547async def message_stream():

548 """Generate messages dynamically."""

549 yield {

550 "type": "user",

551 "message": {"role": "user", "content": "Analyze the following data:"},

552 }

553 await asyncio.sleep(0.5)

554 yield {

555 "type": "user",

556 "message": {"role": "user", "content": "Temperature: 25°C, Humidity: 60%"},

557 }

558 await asyncio.sleep(0.5)

559 yield {

560 "type": "user",

561 "message": {"role": "user", "content": "What patterns do you see?"},

562 }

563 

564 

565async def main():

566 async with ClaudeSDKClient() as client:

567 # Stream input to Claude

568 await client.query(message_stream())

569 

570 # Process response

571 async for message in client.receive_response():

572 print(message)

573 

574 # Follow-up in same session

575 await client.query("Should we be concerned about these readings?")

576 

577 async for message in client.receive_response():

578 print(message)

579 

580 

581asyncio.run(main())

582```

583 

584#### Ejemplo - Usar interrupciones

585 

586```python theme={null}

587import asyncio

588from claude_agent_sdk import ClaudeSDKClient, ClaudeAgentOptions, ResultMessage

589 

590 

591async def interruptible_task():

592 options = ClaudeAgentOptions(allowed_tools=["Bash"], permission_mode="acceptEdits")

593 

594 async with ClaudeSDKClient(options=options) as client:

595 # Start a long-running task

596 await client.query("Count from 1 to 100 slowly, using the bash sleep command")

597 

598 # Let it run for a bit

599 await asyncio.sleep(2)

600 

601 # Interrupt the task

602 await client.interrupt()

603 print("Task interrupted!")

604 

605 # Drain the interrupted task's messages (including its ResultMessage)

606 async for message in client.receive_response():

607 if isinstance(message, ResultMessage):

608 print(f"Interrupted task finished with subtype={message.subtype!r}")

609 # subtype is "error_during_execution" for interrupted tasks

610 

611 # Send a new command

612 await client.query("Just say hello instead")

613 

614 # Now receive the new response

615 async for message in client.receive_response():

616 if isinstance(message, ResultMessage) and message.subtype == "success":

617 print(f"New result: {message.result}")

618 

619 

620asyncio.run(interruptible_task())

621```

622 

623<Note>

624 **Comportamiento del búfer después de la interrupción:** `interrupt()` envía una señal de parada pero no borra el búfer de mensajes. Los mensajes ya producidos por la tarea interrumpida, incluyendo su `ResultMessage` (con `subtype="error_during_execution"`), permanecen en el flujo. Debe drenarlos con `receive_response()` antes de leer la respuesta a una nueva consulta. Si envía una nueva consulta inmediatamente después de `interrupt()` y llama a `receive_response()` solo una vez, recibirá los mensajes de la tarea interrumpida, no la respuesta de la nueva consulta.

625</Note>

626 

627#### Ejemplo - Control de permisos avanzado

628 

629```python theme={null}

630from claude_agent_sdk import ClaudeSDKClient, ClaudeAgentOptions

631from claude_agent_sdk.types import (

632 PermissionResultAllow,

633 PermissionResultDeny,

634 ToolPermissionContext,

635)

636 

637 

638async def custom_permission_handler(

639 tool_name: str, input_data: dict, context: ToolPermissionContext

640) -> PermissionResultAllow | PermissionResultDeny:

641 """Custom logic for tool permissions."""

642 

643 # Block writes to system directories

644 if tool_name == "Write" and input_data.get("file_path", "").startswith("/system/"):

645 return PermissionResultDeny(

646 message="System directory write not allowed", interrupt=True

647 )

648 

649 # Redirect sensitive file operations

650 if tool_name in ["Write", "Edit"] and "config" in input_data.get("file_path", ""):

651 safe_path = f"./sandbox/{input_data['file_path']}"

652 return PermissionResultAllow(

653 updated_input={**input_data, "file_path": safe_path}

654 )

655 

656 # Allow everything else

657 return PermissionResultAllow(updated_input=input_data)

658 

659 

660async def main():

661 options = ClaudeAgentOptions(

662 can_use_tool=custom_permission_handler, allowed_tools=["Read", "Write", "Edit"]

663 )

664 

665 async with ClaudeSDKClient(options=options) as client:

666 await client.query("Update the system config file")

667 

668 async for message in client.receive_response():

669 # Will use sandbox path instead

670 print(message)

671 

672 

673asyncio.run(main())

674```

675 

676## Tipos

677 

678<Note>

679 **`@dataclass` vs `TypedDict`:** Este SDK utiliza dos tipos de tipos. Las clases decoradas con `@dataclass` (como `ResultMessage`, `AgentDefinition`, `TextBlock`) son instancias de objeto en tiempo de ejecución y admiten acceso de atributo: `msg.result`. Las clases definidas con `TypedDict` (como `ThinkingConfigEnabled`, `McpStdioServerConfig`, `SyncHookJSONOutput`) son **dicts simples en tiempo de ejecución** y requieren acceso de clave: `config["budget_tokens"]`, no `config.budget_tokens`. La sintaxis de llamada `ClassName(field=value)` funciona para ambos, pero solo las dataclasses producen objetos con atributos.

680</Note>

681 

682### `SdkMcpTool`

683 

684Definición para una herramienta MCP del SDK creada con el decorador `@tool`.

685 

686```python theme={null}

687@dataclass

688class SdkMcpTool(Generic[T]):

689 name: str

690 description: str

691 input_schema: type[T] | dict[str, Any]

692 handler: Callable[[T], Awaitable[dict[str, Any]]]

693 annotations: ToolAnnotations | None = None

694```

695 

696| Propiedad | Tipo | Descripción |

697| :------------- | :----------------------------------------- | :-------------------------------------------------------------------------------------------------------------------------- |

698| `name` | `str` | Identificador único para la herramienta |

699| `description` | `str` | Descripción legible |

700| `input_schema` | `type[T] \| dict[str, Any]` | Esquema para validación de entrada |

701| `handler` | `Callable[[T], Awaitable[dict[str, Any]]]` | Función asincrónica que maneja la ejecución de la herramienta |

702| `annotations` | `ToolAnnotations \| None` | Anotaciones opcionales de herramienta MCP (por ejemplo, `readOnlyHint`, `destructiveHint`, `openWorldHint`). De `mcp.types` |

703 

704### `Transport`

705 

706Clase base abstracta para implementaciones de transporte personalizado. Úsela para comunicarse con el proceso Claude a través de un canal personalizado (por ejemplo, una conexión remota en lugar de un subproceso local).

707 

708<Warning>

709 Esta es una API interna de bajo nivel. La interfaz puede cambiar en versiones futuras. Las implementaciones personalizadas deben actualizarse para coincidir con cualquier cambio de interfaz.

710</Warning>

711 

712```python theme={null}

713from abc import ABC, abstractmethod

714from collections.abc import AsyncIterator

715from typing import Any

716 

717 

718class Transport(ABC):

719 @abstractmethod

720 async def connect(self) -> None: ...

721 

722 @abstractmethod

723 async def write(self, data: str) -> None: ...

724 

725 @abstractmethod

726 def read_messages(self) -> AsyncIterator[dict[str, Any]]: ...

727 

728 @abstractmethod

729 async def close(self) -> None: ...

730 

731 @abstractmethod

732 def is_ready(self) -> bool: ...

733 

734 @abstractmethod

735 async def end_input(self) -> None: ...

736```

737 

738| Método | Descripción |

739| :---------------- | :------------------------------------------------------------------------------------ |

740| `connect()` | Conectar el transporte y prepararse para la comunicación |

741| `write(data)` | Escribir datos sin procesar (JSON + nueva línea) en el transporte |

742| `read_messages()` | Iterador asincrónico que produce mensajes JSON analizados |

743| `close()` | Cerrar la conexión y limpiar recursos |

744| `is_ready()` | Devuelve `True` si el transporte puede enviar y recibir |

745| `end_input()` | Cerrar el flujo de entrada (por ejemplo, cerrar stdin para transportes de subproceso) |

746 

747Importar: `from claude_agent_sdk import Transport`

748 

749### `ClaudeAgentOptions`

750 

751Dataclass de configuración para consultas de Claude Code.

752 

753```python theme={null}

754@dataclass

755class ClaudeAgentOptions:

756 tools: list[str] | ToolsPreset | None = None

757 allowed_tools: list[str] = field(default_factory=list)

758 system_prompt: str | SystemPromptPreset | None = None

759 mcp_servers: dict[str, McpServerConfig] | str | Path = field(default_factory=dict)

760 permission_mode: PermissionMode | None = None

761 continue_conversation: bool = False

762 resume: str | None = None

763 max_turns: int | None = None

764 max_budget_usd: float | None = None

765 disallowed_tools: list[str] = field(default_factory=list)

766 model: str | None = None

767 fallback_model: str | None = None

768 betas: list[SdkBeta] = field(default_factory=list)

769 output_format: dict[str, Any] | None = None

770 permission_prompt_tool_name: str | None = None

771 cwd: str | Path | None = None

772 cli_path: str | Path | None = None

773 settings: str | None = None

774 add_dirs: list[str | Path] = field(default_factory=list)

775 env: dict[str, str] = field(default_factory=dict)

776 extra_args: dict[str, str | None] = field(default_factory=dict)

777 max_buffer_size: int | None = None

778 debug_stderr: Any = sys.stderr # Deprecated

779 stderr: Callable[[str], None] | None = None

780 can_use_tool: CanUseTool | None = None

781 hooks: dict[HookEvent, list[HookMatcher]] | None = None

782 user: str | None = None

783 include_partial_messages: bool = False

784 fork_session: bool = False

785 agents: dict[str, AgentDefinition] | None = None

786 setting_sources: list[SettingSource] | None = None

787 sandbox: SandboxSettings | None = None

788 plugins: list[SdkPluginConfig] = field(default_factory=list)

789 max_thinking_tokens: int | None = None # Deprecated: use thinking instead

790 thinking: ThinkingConfig | None = None

791 effort: Literal["low", "medium", "high", "max"] | None = None

792 enable_file_checkpointing: bool = False

793 session_store: SessionStore | None = None

794```

795 

796| Propiedad | Tipo | Predeterminado | Descripción |

797| :---------------------------- | :------------------------------------------------------------------------------------- | :--------------------------------- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

798| `tools` | `list[str] \| ToolsPreset \| None` | `None` | Configuración de herramientas. Use `{"type": "preset", "preset": "claude_code"}` para las herramientas predeterminadas de Claude Code |

799| `allowed_tools` | `list[str]` | `[]` | Herramientas para aprobar automáticamente sin solicitar. Esto no restringe Claude solo a estas herramientas; las herramientas no listadas caen a través de `permission_mode` y `can_use_tool`. Use `disallowed_tools` para bloquear herramientas. Ver [Permissions](/es/agent-sdk/permissions#allow-and-deny-rules) |

800| `system_prompt` | `str \| SystemPromptPreset \| None` | `None` | Configuración de prompt del sistema. Pase una cadena para un prompt personalizado, o use `{"type": "preset", "preset": "claude_code"}` para el prompt del sistema de Claude Code. Agregue `"append"` para extender el preset |

801| `mcp_servers` | `dict[str, McpServerConfig] \| str \| Path` | `{}` | Configuraciones de servidor MCP o ruta al archivo de configuración |

802| `permission_mode` | `PermissionMode \| None` | `None` | Modo de permiso para el uso de herramientas |

803| `continue_conversation` | `bool` | `False` | Continuar la conversación más reciente |

804| `resume` | `str \| None` | `None` | ID de sesión a reanudar |

805| `max_turns` | `int \| None` | `None` | Número máximo de turnos agentes (viajes de ronda de uso de herramientas) |

806| `max_budget_usd` | `float \| None` | `None` | Detener la consulta cuando la estimación de costo del lado del cliente alcance este valor en USD. Comparado con la misma estimación que `total_cost_usd`; ver [Track cost and usage](/es/agent-sdk/cost-tracking) para advertencias de precisión |

807| `disallowed_tools` | `list[str]` | `[]` | Herramientas para siempre denegar. Las reglas de denegación se verifican primero e anulan `allowed_tools` y `permission_mode` (incluyendo `bypassPermissions`) |

808| `enable_file_checkpointing` | `bool` | `False` | Habilitar el seguimiento de cambios de archivo para rebobinar. Ver [File checkpointing](/es/agent-sdk/file-checkpointing) |

809| `model` | `str \| None` | `None` | Modelo Claude a usar |

810| `fallback_model` | `str \| None` | `None` | Modelo de respaldo a usar si el modelo principal falla |

811| `betas` | `list[SdkBeta]` | `[]` | Características beta a habilitar. Ver [`SdkBeta`](#sdk-beta) para opciones disponibles |

812| `output_format` | `dict[str, Any] \| None` | `None` | Formato de salida para respuestas estructuradas (por ejemplo, `{"type": "json_schema", "schema": {...}}`). Ver [Structured outputs](/es/agent-sdk/structured-outputs) para detalles |

813| `permission_prompt_tool_name` | `str \| None` | `None` | Nombre de herramienta MCP para solicitudes de permiso |

814| `cwd` | `str \| Path \| None` | `None` | Directorio de trabajo actual |

815| `cli_path` | `str \| Path \| None` | `None` | Ruta personalizada al ejecutable CLI de Claude Code |

816| `settings` | `str \| None` | `None` | Ruta al archivo de configuración |

817| `add_dirs` | `list[str \| Path]` | `[]` | Directorios adicionales a los que Claude puede acceder |

818| `env` | `dict[str, str]` | `{}` | Variables de entorno fusionadas en la parte superior del entorno del proceso heredado. Ver [Environment variables](/es/env-vars) para variables que el CLI subyacente lee |

819| `extra_args` | `dict[str, str \| None]` | `{}` | Argumentos CLI adicionales para pasar directamente al CLI |

820| `max_buffer_size` | `int \| None` | `None` | Bytes máximos al almacenar en búfer la salida estándar del CLI |

821| `debug_stderr` | `Any` | `sys.stderr` | *Deprecated* - Objeto similar a un archivo para salida de depuración. Use la devolución de llamada `stderr` en su lugar |

822| `stderr` | `Callable[[str], None] \| None` | `None` | Función de devolución de llamada para salida stderr del CLI |

823| `can_use_tool` | [`CanUseTool`](#can-use-tool) ` \| None` | `None` | Función de devolución de llamada de permiso de herramienta. Ver [Permission types](#can-use-tool) para detalles |

824| `hooks` | `dict[HookEvent, list[HookMatcher]] \| None` | `None` | Configuraciones de hook para interceptar eventos |

825| `user` | `str \| None` | `None` | Identificador de usuario |

826| `include_partial_messages` | `bool` | `False` | Incluir eventos de streaming de mensaje parcial. Cuando está habilitado, se producen mensajes [`StreamEvent`](#stream-event) |

827| `fork_session` | `bool` | `False` | Cuando se reanuda con `resume`, bifurcar a un nuevo ID de sesión en lugar de continuar la sesión original |

828| `agents` | `dict[str, AgentDefinition] \| None` | `None` | Subagentes definidos programáticamente |

829| `plugins` | `list[SdkPluginConfig]` | `[]` | Cargar plugins personalizados desde rutas locales. Ver [Plugins](/es/agent-sdk/plugins) para detalles |

830| `sandbox` | [`SandboxSettings`](#sandbox-settings) ` \| None` | `None` | Configurar el comportamiento de sandbox programáticamente. Ver [Sandbox settings](#sandbox-settings) para detalles |

831| `setting_sources` | `list[SettingSource] \| None` | `None` (CLI defaults: all sources) | Controlar qué configuración del sistema de archivos cargar. Pase `[]` para deshabilitar la configuración de usuario, proyecto y local. La configuración de política administrada se carga independientemente. Ver [Use Claude Code features](/es/agent-sdk/claude-code-features#what-settingsources-does-not-control) |

832| `max_thinking_tokens` | `int \| None` | `None` | *Deprecated* - Tokens máximos para bloques de pensamiento. Use `thinking` en su lugar |

833| `thinking` | [`ThinkingConfig`](#thinking-config) ` \| None` | `None` | Controla el comportamiento de pensamiento extendido. Tiene precedencia sobre `max_thinking_tokens` |

834| `effort` | `Literal["low", "medium", "high", "max"] \| None` | `None` | Nivel de esfuerzo para la profundidad del pensamiento |

835| `session_store` | [`SessionStore`](/es/agent-sdk/session-storage#the-session-store-interface) ` \| None` | `None` | Reflejar transcripciones de sesión a un backend externo para que cualquier host pueda reanudarlas. Ver [Persist sessions to external storage](/es/agent-sdk/session-storage) |

836 

837### `OutputFormat`

838 

839Configuración para validación de salida estructurada. Pase esto como un `dict` al campo `output_format` en `ClaudeAgentOptions`:

840 

841```python theme={null}

842# Expected dict shape for output_format

843{

844 "type": "json_schema",

845 "schema": {...}, # Your JSON Schema definition

846}

847```

848 

849| Campo | Requerido | Descripción |

850| :------- | :-------- | :------------------------------------------------------ |

851| `type` | Sí | Debe ser `"json_schema"` para validación de JSON Schema |

852| `schema` | Sí | Definición de JSON Schema para validación de salida |

853 

854### `SystemPromptPreset`

855 

856Configuración para usar el prompt del sistema preset de Claude Code con adiciones opcionales.

857 

858```python theme={null}

859class SystemPromptPreset(TypedDict):

860 type: Literal["preset"]

861 preset: Literal["claude_code"]

862 append: NotRequired[str]

863 exclude_dynamic_sections: NotRequired[bool]

864```

865 

866| Campo | Requerido | Descripción |

867| :------------------------- | :-------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

868| `type` | Sí | Debe ser `"preset"` para usar un prompt del sistema preset |

869| `preset` | Sí | Debe ser `"claude_code"` para usar el prompt del sistema de Claude Code |

870| `append` | No | Instrucciones adicionales para agregar al prompt del sistema preset |

871| `exclude_dynamic_sections` | No | Mover contexto por sesión como directorio de trabajo, estado de git y rutas de memoria del prompt del sistema al primer mensaje del usuario. Mejora la reutilización de caché de prompt en usuarios y máquinas. Ver [Modify system prompts](/es/agent-sdk/modifying-system-prompts#improve-prompt-caching-across-users-and-machines) |

872 

873### `SettingSource`

874 

875Controla qué fuentes de configuración basadas en el sistema de archivos carga el SDK.

876 

877```python theme={null}

878SettingSource = Literal["user", "project", "local"]

879```

880 

881| Valor | Descripción | Ubicación |

882| :---------- | :------------------------------------------------------------- | :---------------------------- |

883| `"user"` | Configuración global del usuario | `~/.claude/settings.json` |

884| `"project"` | Configuración del proyecto compartido (controlada por versión) | `.claude/settings.json` |

885| `"local"` | Configuración del proyecto local (gitignored) | `.claude/settings.local.json` |

886 

887#### Comportamiento predeterminado

888 

889Cuando `setting_sources` se omite o es `None`, `query()` carga la misma configuración del sistema de archivos que el CLI de Claude Code: usuario, proyecto y local. La configuración de política administrada se carga en todos los casos. Ver [What settingSources does not control](/es/agent-sdk/claude-code-features#what-settingsources-does-not-control) para entradas que se leen independientemente de esta opción, y cómo deshabilitarlas.

890 

891#### Por qué usar setting\_sources

892 

893**Deshabilitar configuración del sistema de archivos:**

894 

895```python theme={null}

896# Do not load user, project, or local settings from disk

897from claude_agent_sdk import query, ClaudeAgentOptions

898 

899async for message in query(

900 prompt="Analyze this code",

901 options=ClaudeAgentOptions(

902 setting_sources=[]

903 ),

904):

905 print(message)

906```

907 

908<Note>

909 En Python SDK 0.1.59 y anteriores, una lista vacía se trataba igual que omitir la opción, por lo que `setting_sources=[]` no deshabilitaba la configuración del sistema de archivos. Actualice a una versión más nueva si necesita que una lista vacía tenga efecto. El SDK de TypeScript no se ve afectado.

910</Note>

911 

912**Cargar toda la configuración del sistema de archivos explícitamente:**

913 

914```python theme={null}

915from claude_agent_sdk import query, ClaudeAgentOptions

916 

917async for message in query(

918 prompt="Analyze this code",

919 options=ClaudeAgentOptions(

920 setting_sources=["user", "project", "local"]

921 ),

922):

923 print(message)

924```

925 

926**Cargar solo fuentes de configuración específicas:**

927 

928```python theme={null}

929# Load only project settings, ignore user and local

930async for message in query(

931 prompt="Run CI checks",

932 options=ClaudeAgentOptions(

933 setting_sources=["project"] # Only .claude/settings.json

934 ),

935):

936 print(message)

937```

938 

939**Entornos de prueba e IC:**

940 

941```python theme={null}

942# Ensure consistent behavior in CI by excluding local settings

943async for message in query(

944 prompt="Run tests",

945 options=ClaudeAgentOptions(

946 setting_sources=["project"], # Only team-shared settings

947 permission_mode="bypassPermissions",

948 ),

949):

950 print(message)

951```

952 

953**Aplicaciones solo SDK:**

954 

955```python theme={null}

956# Define everything programmatically.

957# Pass [] to opt out of filesystem setting sources.

958async for message in query(

959 prompt="Review this PR",

960 options=ClaudeAgentOptions(

961 setting_sources=[],

962 agents={...},

963 mcp_servers={...},

964 allowed_tools=["Read", "Grep", "Glob"],

965 ),

966):

967 print(message)

968```

969 

970**Cargando instrucciones del proyecto CLAUDE.md:**

971 

972```python theme={null}

973# Load project settings to include CLAUDE.md files

974async for message in query(

975 prompt="Add a new feature following project conventions",

976 options=ClaudeAgentOptions(

977 system_prompt={

978 "type": "preset",

979 "preset": "claude_code", # Use Claude Code's system prompt

980 },

981 setting_sources=["project"], # Loads CLAUDE.md from project

982 allowed_tools=["Read", "Write", "Edit"],

983 ),

984):

985 print(message)

986```

987 

988#### Precedencia de configuración

989 

990Cuando se cargan múltiples fuentes, la configuración se fusiona con esta precedencia (mayor a menor):

991 

9921. Configuración local (`.claude/settings.local.json`)

9932. Configuración del proyecto (`.claude/settings.json`)

9943. Configuración del usuario (`~/.claude/settings.json`)

995 

996Las opciones programáticas como `agents` y `allowed_tools` anulan la configuración del sistema de archivos de usuario, proyecto y local. La configuración de política administrada tiene precedencia sobre las opciones programáticas.

997 

998### `AgentDefinition`

999 

1000Configuración para un subagente definido programáticamente.

1001 

1002```python theme={null}

1003@dataclass

1004class AgentDefinition:

1005 description: str

1006 prompt: str

1007 tools: list[str] | None = None

1008 disallowedTools: list[str] | None = None

1009 model: str | None = None

1010 skills: list[str] | None = None

1011 memory: Literal["user", "project", "local"] | None = None

1012 mcpServers: list[str | dict[str, Any]] | None = None

1013 initialPrompt: str | None = None

1014 maxTurns: int | None = None

1015 background: bool | None = None

1016 effort: Literal["low", "medium", "high", "max"] | int | None = None

1017 permissionMode: PermissionMode | None = None

1018```

1019 

1020| Campo | Requerido | Descripción |

1021| :---------------- | :-------- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

1022| `description` | Sí | Descripción en lenguaje natural de cuándo usar este agente |

1023| `prompt` | Sí | El prompt del sistema del agente |

1024| `tools` | No | Matriz de nombres de herramientas permitidas. Si se omite, hereda todas las herramientas |

1025| `disallowedTools` | No | Matriz de nombres de herramientas a eliminar del conjunto de herramientas del agente |

1026| `model` | No | Anulación de modelo para este agente. Acepta un alias como `"sonnet"`, `"opus"`, `"haiku"`, o `"inherit"`, o un ID de modelo completo. Si se omite, usa el modelo principal |

1027| `skills` | No | Lista de nombres de skills disponibles para este agente |

1028| `memory` | No | Fuente de memoria para este agente: `"user"`, `"project"`, o `"local"` |

1029| `mcpServers` | No | Servidores MCP disponibles para este agente. Cada entrada es un nombre de servidor o un dict `{name: config}` en línea |

1030| `initialPrompt` | No | Auto-enviado como el primer turno de usuario cuando este agente se ejecuta como el agente del hilo principal |

1031| `maxTurns` | No | Número máximo de turnos agentes antes de que el agente se detenga |

1032| `background` | No | Ejecutar este agente como una tarea de fondo no bloqueante cuando se invoca |

1033| `effort` | No | Nivel de esfuerzo de razonamiento para este agente. Acepta un nivel nombrado o un entero |

1034| `permissionMode` | No | Modo de permiso para la ejecución de herramientas dentro de este agente. Ver [`PermissionMode`](#permission-mode) |

1035 

1036<Note>

1037 Los nombres de campo de `AgentDefinition` usan camelCase, como `disallowedTools`, `permissionMode` y `maxTurns`. Estos nombres se asignan directamente al formato de cable compartido con el SDK de TypeScript. Esto difiere de `ClaudeAgentOptions`, que usa snake\_case de Python para campos de nivel superior equivalentes como `disallowed_tools` y `permission_mode`. Porque `AgentDefinition` es una dataclass, pasar una palabra clave snake\_case genera un `TypeError` en el tiempo de construcción.

1038</Note>

1039 

1040### `PermissionMode`

1041 

1042Modos de permiso para controlar la ejecución de herramientas.

1043 

1044```python theme={null}

1045PermissionMode = Literal[

1046 "default", # Standard permission behavior

1047 "acceptEdits", # Auto-accept file edits

1048 "plan", # Planning mode - no execution

1049 "dontAsk", # Deny anything not pre-approved instead of prompting

1050 "bypassPermissions", # Bypass all permission checks (use with caution)

1051]

1052```

1053 

1054### `CanUseTool`

1055 

1056Alias de tipo para funciones de devolución de llamada de permiso de herramienta.

1057 

1058```python theme={null}

1059CanUseTool = Callable[

1060 [str, dict[str, Any], ToolPermissionContext], Awaitable[PermissionResult]

1061]

1062```

1063 

1064La devolución de llamada recibe:

1065 

1066* `tool_name`: Nombre de la herramienta que se está llamando

1067* `input_data`: Los parámetros de entrada de la herramienta

1068* `context`: Un `ToolPermissionContext` con información adicional

1069 

1070Devuelve un `PermissionResult` (ya sea `PermissionResultAllow` o `PermissionResultDeny`).

1071 

1072### `ToolPermissionContext`

1073 

1074Información de contexto pasada a devoluciones de llamada de permiso de herramienta.

1075 

1076```python theme={null}

1077@dataclass

1078class ToolPermissionContext:

1079 signal: Any | None = None # Future: abort signal support

1080 suggestions: list[PermissionUpdate] = field(default_factory=list)

1081```

1082 

1083| Campo | Tipo | Descripción |

1084| :------------ | :----------------------- | :----------------------------------------------- |

1085| `signal` | `Any \| None` | Reservado para soporte de señal de aborto futuro |

1086| `suggestions` | `list[PermissionUpdate]` | Sugerencias de actualización de permiso del CLI |

1087 

1088### `PermissionResult`

1089 

1090Tipo de unión para resultados de devolución de llamada de permiso.

1091 

1092```python theme={null}

1093PermissionResult = PermissionResultAllow | PermissionResultDeny

1094```

1095 

1096### `PermissionResultAllow`

1097 

1098Resultado indicando que la llamada de herramienta debe permitirse.

1099 

1100```python theme={null}

1101@dataclass

1102class PermissionResultAllow:

1103 behavior: Literal["allow"] = "allow"

1104 updated_input: dict[str, Any] | None = None

1105 updated_permissions: list[PermissionUpdate] | None = None

1106```

1107 

1108| Campo | Tipo | Predeterminado | Descripción |

1109| :-------------------- | :------------------------------- | :------------- | :------------------------------------------------ |

1110| `behavior` | `Literal["allow"]` | `"allow"` | Debe ser "allow" |

1111| `updated_input` | `dict[str, Any] \| None` | `None` | Entrada modificada a usar en lugar de la original |

1112| `updated_permissions` | `list[PermissionUpdate] \| None` | `None` | Actualizaciones de permiso a aplicar |

1113 

1114### `PermissionResultDeny`

1115 

1116Resultado indicando que la llamada de herramienta debe denegarse.

1117 

1118```python theme={null}

1119@dataclass

1120class PermissionResultDeny:

1121 behavior: Literal["deny"] = "deny"

1122 message: str = ""

1123 interrupt: bool = False

1124```

1125 

1126| Campo | Tipo | Predeterminado | Descripción |

1127| :---------- | :---------------- | :------------- | :-------------------------------------------------- |

1128| `behavior` | `Literal["deny"]` | `"deny"` | Debe ser "deny" |

1129| `message` | `str` | `""` | Mensaje explicando por qué se denegó la herramienta |

1130| `interrupt` | `bool` | `False` | Si se debe interrumpir la ejecución actual |

1131 

1132### `PermissionUpdate`

1133 

1134Configuración para actualizar permisos programáticamente.

1135 

1136```python theme={null}

1137@dataclass

1138class PermissionUpdate:

1139 type: Literal[

1140 "addRules",

1141 "replaceRules",

1142 "removeRules",

1143 "setMode",

1144 "addDirectories",

1145 "removeDirectories",

1146 ]

1147 rules: list[PermissionRuleValue] | None = None

1148 behavior: Literal["allow", "deny", "ask"] | None = None

1149 mode: PermissionMode | None = None

1150 directories: list[str] | None = None

1151 destination: (

1152 Literal["userSettings", "projectSettings", "localSettings", "session"] | None

1153 ) = None

1154```

1155 

1156| Campo | Tipo | Descripción |

1157| :------------ | :---------------------------------------- | :---------------------------------------------------------- |

1158| `type` | `Literal[...]` | El tipo de operación de actualización de permiso |

1159| `rules` | `list[PermissionRuleValue] \| None` | Reglas para operaciones de agregar/reemplazar/eliminar |

1160| `behavior` | `Literal["allow", "deny", "ask"] \| None` | Comportamiento para operaciones basadas en reglas |

1161| `mode` | `PermissionMode \| None` | Modo para operación setMode |

1162| `directories` | `list[str] \| None` | Directorios para operaciones de agregar/eliminar directorio |

1163| `destination` | `Literal[...] \| None` | Dónde aplicar la actualización de permiso |

1164 

1165### `PermissionRuleValue`

1166 

1167Una regla a agregar, reemplazar o eliminar en una actualización de permiso.

1168 

1169```python theme={null}

1170@dataclass

1171class PermissionRuleValue:

1172 tool_name: str

1173 rule_content: str | None = None

1174```

1175 

1176### `ToolsPreset`

1177 

1178Configuración de herramientas preset para usar el conjunto de herramientas predeterminado de Claude Code.

1179 

1180```python theme={null}

1181class ToolsPreset(TypedDict):

1182 type: Literal["preset"]

1183 preset: Literal["claude_code"]

1184```

1185 

1186### `ThinkingConfig`

1187 

1188Controla el comportamiento de pensamiento extendido. Una unión de tres configuraciones:

1189 

1190```python theme={null}

1191class ThinkingConfigAdaptive(TypedDict):

1192 type: Literal["adaptive"]

1193 

1194 

1195class ThinkingConfigEnabled(TypedDict):

1196 type: Literal["enabled"]

1197 budget_tokens: int

1198 

1199 

1200class ThinkingConfigDisabled(TypedDict):

1201 type: Literal["disabled"]

1202 

1203 

1204ThinkingConfig = ThinkingConfigAdaptive | ThinkingConfigEnabled | ThinkingConfigDisabled

1205```

1206 

1207| Variante | Campos | Descripción |

1208| :--------- | :---------------------- | :----------------------------------------------------------- |

1209| `adaptive` | `type` | Claude decide adaptativamente cuándo pensar |

1210| `enabled` | `type`, `budget_tokens` | Habilitar pensamiento con un presupuesto de token específico |

1211| `disabled` | `type` | Deshabilitar pensamiento |

1212 

1213Porque estas son clases `TypedDict`, son dicts simples en tiempo de ejecución. Construya cualquiera como literales de dict o llame a la clase como un constructor; ambos producen un `dict`. Acceda a campos con `config["budget_tokens"]`, no `config.budget_tokens`:

1214 

1215```python theme={null}

1216from claude_agent_sdk import ClaudeAgentOptions, ThinkingConfigEnabled

1217 

1218# Option 1: dict literal (recommended, no import needed)

1219options = ClaudeAgentOptions(thinking={"type": "enabled", "budget_tokens": 20000})

1220 

1221# Option 2: constructor-style (returns a plain dict)

1222config = ThinkingConfigEnabled(type="enabled", budget_tokens=20000)

1223print(config["budget_tokens"]) # 20000

1224# config.budget_tokens would raise AttributeError

1225```

1226 

1227### `SdkBeta`

1228 

1229Tipo literal para características beta del SDK.

1230 

1231```python theme={null}

1232SdkBeta = Literal["context-1m-2025-08-07"]

1233```

1234 

1235Use con el campo `betas` en `ClaudeAgentOptions` para habilitar características beta.

1236 

1237<Warning>

1238 La beta `context-1m-2025-08-07` se retiró a partir del 30 de abril de 2026. Pasar este encabezado con Claude Sonnet 4.5 o Sonnet 4 no tiene efecto, y las solicitudes que exceden la ventana de contexto estándar de 200k tokens devuelven un error. Para usar una ventana de contexto de 1M tokens, migre a [Claude Sonnet 4.6, Claude Opus 4.6, o Claude Opus 4.7](https://platform.claude.com/docs/en/about-claude/models/overview), que incluyen contexto de 1M a precios estándar sin encabezado beta requerido.

1239</Warning>

1240 

1241### `McpSdkServerConfig`

1242 

1243Configuración para servidores MCP del SDK creados con `create_sdk_mcp_server()`.

1244 

1245```python theme={null}

1246class McpSdkServerConfig(TypedDict):

1247 type: Literal["sdk"]

1248 name: str

1249 instance: Any # MCP Server instance

1250```

1251 

1252### `McpServerConfig`

1253 

1254Tipo de unión para configuraciones de servidor MCP.

1255 

1256```python theme={null}

1257McpServerConfig = (

1258 McpStdioServerConfig | McpSSEServerConfig | McpHttpServerConfig | McpSdkServerConfig

1259)

1260```

1261 

1262#### `McpStdioServerConfig`

1263 

1264```python theme={null}

1265class McpStdioServerConfig(TypedDict):

1266 type: NotRequired[Literal["stdio"]] # Optional for backwards compatibility

1267 command: str

1268 args: NotRequired[list[str]]

1269 env: NotRequired[dict[str, str]]

1270```

1271 

1272#### `McpSSEServerConfig`

1273 

1274```python theme={null}

1275class McpSSEServerConfig(TypedDict):

1276 type: Literal["sse"]

1277 url: str

1278 headers: NotRequired[dict[str, str]]

1279```

1280 

1281#### `McpHttpServerConfig`

1282 

1283```python theme={null}

1284class McpHttpServerConfig(TypedDict):

1285 type: Literal["http"]

1286 url: str

1287 headers: NotRequired[dict[str, str]]

1288```

1289 

1290### `McpServerStatusConfig`

1291 

1292La configuración de un servidor MCP como se reporta por [`get_mcp_status()`](#methods). Esta es la unión de todas las variantes de transporte [`McpServerConfig`](#mcp-server-config) más una variante de salida única `claudeai-proxy` para servidores proxied a través de claude.ai.

1293 

1294```python theme={null}

1295McpServerStatusConfig = (

1296 McpStdioServerConfig

1297 | McpSSEServerConfig

1298 | McpHttpServerConfig

1299 | McpSdkServerConfigStatus

1300 | McpClaudeAIProxyServerConfig

1301)

1302```

1303 

1304`McpSdkServerConfigStatus` es la forma serializable de [`McpSdkServerConfig`](#mcp-sdk-server-config) con solo campos `type` (`"sdk"`) y `name` (`str`); la `instance` en proceso se omite. `McpClaudeAIProxyServerConfig` tiene campos `type` (`"claudeai-proxy"`), `url` (`str`), e `id` (`str`).

1305 

1306### `McpStatusResponse`

1307 

1308Respuesta de [`ClaudeSDKClient.get_mcp_status()`](#methods). Envuelve la lista de estados del servidor bajo la clave `mcpServers`.

1309 

1310```python theme={null}

1311class McpStatusResponse(TypedDict):

1312 mcpServers: list[McpServerStatus]

1313```

1314 

1315### `McpServerStatus`

1316 

1317Estado de un servidor MCP conectado, contenido en [`McpStatusResponse`](#mcp-status-response).

1318 

1319```python theme={null}

1320class McpServerStatus(TypedDict):

1321 name: str

1322 status: McpServerConnectionStatus # "connected" | "failed" | "needs-auth" | "pending" | "disabled"

1323 serverInfo: NotRequired[McpServerInfo]

1324 error: NotRequired[str]

1325 config: NotRequired[McpServerStatusConfig]

1326 scope: NotRequired[str]

1327 tools: NotRequired[list[McpToolInfo]]

1328```

1329 

1330| Campo | Tipo | Descripción |

1331| :----------- | :-------------------------------------------------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |

1332| `name` | `str` | Nombre del servidor |

1333| `status` | `str` | Uno de `"connected"`, `"failed"`, `"needs-auth"`, `"pending"`, o `"disabled"` |

1334| `serverInfo` | `dict` (opcional) | Nombre y versión del servidor (`{"name": str, "version": str}`) |

1335| `error` | `str` (opcional) | Mensaje de error si el servidor no se conectó |

1336| `config` | [`McpServerStatusConfig`](#mcp-server-status-config) (opcional) | Configuración del servidor. Misma forma que [`McpServerConfig`](#mcp-server-config) (stdio, SSE, HTTP, o SDK), más una variante `claudeai-proxy` para servidores conectados a través de claude.ai |

1337| `scope` | `str` (opcional) | Alcance de configuración |

1338| `tools` | `list` (opcional) | Herramientas proporcionadas por este servidor, cada una con campos `name`, `description`, y `annotations` |

1339 

1340### `SdkPluginConfig`

1341 

1342Configuración para cargar plugins en el SDK.

1343 

1344```python theme={null}

1345class SdkPluginConfig(TypedDict):

1346 type: Literal["local"]

1347 path: str

1348```

1349 

1350| Campo | Tipo | Descripción |

1351| :----- | :----------------- | :--------------------------------------------------------------- |

1352| `type` | `Literal["local"]` | Debe ser `"local"` (actualmente solo se admiten plugins locales) |

1353| `path` | `str` | Ruta absoluta o relativa al directorio del plugin |

1354 

1355**Ejemplo:**

1356 

1357```python theme={null}

1358plugins = [

1359 {"type": "local", "path": "./my-plugin"},

1360 {"type": "local", "path": "/absolute/path/to/plugin"},

1361]

1362```

1363 

1364Para información completa sobre la creación y uso de plugins, ver [Plugins](/es/agent-sdk/plugins).

1365 

1366## Tipos de mensaje

1367 

1368### `Message`

1369 

1370Tipo de unión de todos los mensajes posibles.

1371 

1372```python theme={null}

1373Message = (

1374 UserMessage

1375 | AssistantMessage

1376 | SystemMessage

1377 | ResultMessage

1378 | StreamEvent

1379 | RateLimitEvent

1380)

1381```

1382 

1383### `UserMessage`

1384 

1385Mensaje de entrada del usuario.

1386 

1387```python theme={null}

1388@dataclass

1389class UserMessage:

1390 content: str | list[ContentBlock]

1391 uuid: str | None = None

1392 parent_tool_use_id: str | None = None

1393 tool_use_result: dict[str, Any] | None = None

1394```

1395 

1396| Campo | Tipo | Descripción |

1397| :------------------- | :-------------------------- | :------------------------------------------------------------------------------------ |

1398| `content` | `str \| list[ContentBlock]` | Contenido del mensaje como texto o bloques de contenido |

1399| `uuid` | `str \| None` | Identificador único del mensaje |

1400| `parent_tool_use_id` | `str \| None` | ID de uso de herramienta si este mensaje es una respuesta de resultado de herramienta |

1401| `tool_use_result` | `dict[str, Any] \| None` | Datos de resultado de herramienta si es aplicable |

1402 

1403### `AssistantMessage`

1404 

1405Mensaje de respuesta del asistente con bloques de contenido.

1406 

1407```python theme={null}

1408@dataclass

1409class AssistantMessage:

1410 content: list[ContentBlock]

1411 model: str

1412 parent_tool_use_id: str | None = None

1413 error: AssistantMessageError | None = None

1414 usage: dict[str, Any] | None = None

1415 message_id: str | None = None

1416```

1417 

1418| Campo | Tipo | Descripción |

1419| :------------------- | :------------------------------------------------------------- | :------------------------------------------------------------------------------------ |

1420| `content` | `list[ContentBlock]` | Lista de bloques de contenido en la respuesta |

1421| `model` | `str` | Modelo que generó la respuesta |

1422| `parent_tool_use_id` | `str \| None` | ID de uso de herramienta si esta es una respuesta anidada |

1423| `error` | [`AssistantMessageError`](#assistant-message-error) ` \| None` | Tipo de error si la respuesta encontró un error |

1424| `usage` | `dict[str, Any] \| None` | Uso de token por mensaje (mismas claves que [`ResultMessage.usage`](#result-message)) |

1425| `message_id` | `str \| None` | ID de mensaje de API. Múltiples mensajes de un turno comparten el mismo ID |

1426 

1427### `AssistantMessageError`

1428 

1429Posibles tipos de error para mensajes del asistente.

1430 

1431```python theme={null}

1432AssistantMessageError = Literal[

1433 "authentication_failed",

1434 "billing_error",

1435 "rate_limit",

1436 "invalid_request",

1437 "server_error",

1438 "max_output_tokens",

1439 "unknown",

1440]

1441```

1442 

1443### `SystemMessage`

1444 

1445Mensaje del sistema con metadatos.

1446 

1447```python theme={null}

1448@dataclass

1449class SystemMessage:

1450 subtype: str

1451 data: dict[str, Any]

1452```

1453 

1454### `ResultMessage`

1455 

1456Mensaje de resultado final con información de costo y uso.

1457 

1458```python theme={null}

1459@dataclass

1460class ResultMessage:

1461 subtype: str

1462 duration_ms: int

1463 duration_api_ms: int

1464 is_error: bool

1465 num_turns: int

1466 session_id: str

1467 total_cost_usd: float | None = None

1468 usage: dict[str, Any] | None = None

1469 result: str | None = None

1470 stop_reason: str | None = None

1471 structured_output: Any = None

1472 model_usage: dict[str, Any] | None = None

1473```

1474 

1475El dict `usage` contiene las siguientes claves cuando está presente:

1476 

1477| Clave | Tipo | Descripción |

1478| ----------------------------- | ----- | -------------------------------------------------- |

1479| `input_tokens` | `int` | Tokens de entrada totales consumidos. |

1480| `output_tokens` | `int` | Tokens de salida totales generados. |

1481| `cache_creation_input_tokens` | `int` | Tokens usados para crear nuevas entradas de caché. |

1482| `cache_read_input_tokens` | `int` | Tokens leídos de entradas de caché existentes. |

1483 

1484El dict `model_usage` asigna nombres de modelo a uso por modelo. Las claves del dict interno usan camelCase porque el valor se pasa sin modificar desde el proceso CLI subyacente, coincidiendo con el tipo [`ModelUsage`](/es/agent-sdk/typescript#model-usage) de TypeScript:

1485 

1486| Clave | Tipo | Descripción |

1487| -------------------------- | ------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------- |

1488| `inputTokens` | `int` | Tokens de entrada para este modelo. |

1489| `outputTokens` | `int` | Tokens de salida para este modelo. |

1490| `cacheReadInputTokens` | `int` | Tokens de lectura de caché para este modelo. |

1491| `cacheCreationInputTokens` | `int` | Tokens de creación de caché para este modelo. |

1492| `webSearchRequests` | `int` | Solicitudes de búsqueda web realizadas por este modelo. |

1493| `costUSD` | `float` | Costo estimado en USD para este modelo, calculado del lado del cliente. Ver [Track cost and usage](/es/agent-sdk/cost-tracking) para advertencias de facturación. |

1494| `contextWindow` | `int` | Tamaño de ventana de contexto para este modelo. |

1495| `maxOutputTokens` | `int` | Límite de token de salida máximo para este modelo. |

1496 

1497### `StreamEvent`

1498 

1499Evento de flujo para actualizaciones de mensaje parcial durante el streaming. Solo se recibe cuando `include_partial_messages=True` en `ClaudeAgentOptions`. Importar vía `from claude_agent_sdk.types import StreamEvent`.

1500 

1501```python theme={null}

1502@dataclass

1503class StreamEvent:

1504 uuid: str

1505 session_id: str

1506 event: dict[str, Any] # The raw Claude API stream event

1507 parent_tool_use_id: str | None = None

1508```

1509 

1510| Campo | Tipo | Descripción |

1511| :------------------- | :--------------- | :------------------------------------------------------------------- |

1512| `uuid` | `str` | Identificador único para este evento |

1513| `session_id` | `str` | Identificador de sesión |

1514| `event` | `dict[str, Any]` | Los datos del evento de flujo de API de Claude sin procesar |

1515| `parent_tool_use_id` | `str \| None` | ID de uso de herramienta principal si este evento es de un subagente |

1516 

1517### `RateLimitEvent`

1518 

1519Emitido cuando el estado del límite de velocidad cambia (por ejemplo, de `"allowed"` a `"allowed_warning"`). Use esto para advertir a los usuarios antes de que alcancen un límite duro, o para retroceder cuando el estado es `"rejected"`.

1520 

1521```python theme={null}

1522@dataclass

1523class RateLimitEvent:

1524 rate_limit_info: RateLimitInfo

1525 uuid: str

1526 session_id: str

1527```

1528 

1529| Campo | Tipo | Descripción |

1530| :---------------- | :---------------------------------- | :------------------------------------ |

1531| `rate_limit_info` | [`RateLimitInfo`](#rate-limit-info) | Estado actual del límite de velocidad |

1532| `uuid` | `str` | Identificador único del evento |

1533| `session_id` | `str` | Identificador de sesión |

1534 

1535### `RateLimitInfo`

1536 

1537Estado del límite de velocidad llevado por [`RateLimitEvent`](#rate-limit-event).

1538 

1539```python theme={null}

1540RateLimitStatus = Literal["allowed", "allowed_warning", "rejected"]

1541RateLimitType = Literal[

1542 "five_hour", "seven_day", "seven_day_opus", "seven_day_sonnet", "overage"

1543]

1544 

1545 

1546@dataclass

1547class RateLimitInfo:

1548 status: RateLimitStatus

1549 resets_at: int | None = None

1550 rate_limit_type: RateLimitType | None = None

1551 utilization: float | None = None

1552 overage_status: RateLimitStatus | None = None

1553 overage_resets_at: int | None = None

1554 overage_disabled_reason: str | None = None

1555 raw: dict[str, Any] = field(default_factory=dict)

1556```

1557 

1558| Campo | Tipo | Descripción |

1559| :------------------------ | :------------------------ | :---------------------------------------------------------------------------------------------------------------- |

1560| `status` | `RateLimitStatus` | Estado actual. `"allowed_warning"` significa acercarse al límite; `"rejected"` significa que se alcanzó el límite |

1561| `resets_at` | `int \| None` | Marca de tiempo Unix cuando se reinicia la ventana del límite de velocidad |

1562| `rate_limit_type` | `RateLimitType \| None` | Qué ventana de límite de velocidad se aplica |

1563| `utilization` | `float \| None` | Fracción del límite de velocidad consumido (0.0 a 1.0) |

1564| `overage_status` | `RateLimitStatus \| None` | Estado del uso de exceso de pago por uso, si es aplicable |

1565| `overage_resets_at` | `int \| None` | Marca de tiempo Unix cuando se reinicia la ventana de exceso |

1566| `overage_disabled_reason` | `str \| None` | Por qué el exceso no está disponible, si el estado es `"rejected"` |

1567| `raw` | `dict[str, Any]` | Dict sin procesar completo del CLI, incluyendo campos no modelados arriba |

1568 

1569### `TaskStartedMessage`

1570 

1571Emitido cuando comienza una tarea de fondo. Una tarea de fondo es cualquier cosa rastreada fuera del turno principal: un comando Bash en segundo plano, un reloj de Monitor, un subagente generado a través de la herramienta Agent, o un agente remoto. El campo `task_type` le dice cuál. Este nombre no está relacionado con el cambio de nombre de herramienta `Task`-a-`Agent`.

1572 

1573```python theme={null}

1574@dataclass

1575class TaskStartedMessage(SystemMessage):

1576 task_id: str

1577 description: str

1578 uuid: str

1579 session_id: str

1580 tool_use_id: str | None = None

1581 task_type: str | None = None

1582```

1583 

1584| Campo | Tipo | Descripción |

1585| :------------ | :------------ | :---------------------------------------------------------------------------------------------------------------------- |

1586| `task_id` | `str` | Identificador único para la tarea |

1587| `description` | `str` | Descripción de la tarea |

1588| `uuid` | `str` | Identificador único del mensaje |

1589| `session_id` | `str` | Identificador de sesión |

1590| `tool_use_id` | `str \| None` | ID de uso de herramienta asociado |

1591| `task_type` | `str \| None` | Qué tipo de tarea de fondo: `"local_bash"` para Bash de fondo y relojes de Monitor, `"local_agent"`, o `"remote_agent"` |

1592 

1593### `TaskUsage`

1594 

1595Datos de token y tiempo para una tarea de fondo.

1596 

1597```python theme={null}

1598class TaskUsage(TypedDict):

1599 total_tokens: int

1600 tool_uses: int

1601 duration_ms: int

1602```

1603 

1604### `TaskProgressMessage`

1605 

1606Emitido periódicamente con actualizaciones de progreso para una tarea de fondo en ejecución.

1607 

1608```python theme={null}

1609@dataclass

1610class TaskProgressMessage(SystemMessage):

1611 task_id: str

1612 description: str

1613 usage: TaskUsage

1614 uuid: str

1615 session_id: str

1616 tool_use_id: str | None = None

1617 last_tool_name: str | None = None

1618```

1619 

1620| Campo | Tipo | Descripción |

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

1622| `task_id` | `str` | Identificador único para la tarea |

1623| `description` | `str` | Descripción del estado actual |

1624| `usage` | `TaskUsage` | Uso de token para esta tarea hasta ahora |

1625| `uuid` | `str` | Identificador único del mensaje |

1626| `session_id` | `str` | Identificador de sesión |

1627| `tool_use_id` | `str \| None` | ID de uso de herramienta asociado |

1628| `last_tool_name` | `str \| None` | Nombre de la última herramienta que usó la tarea |

1629 

1630### `TaskNotificationMessage`

1631 

1632Emitido cuando una tarea de fondo se completa, falla o se detiene. Las tareas de fondo incluyen comandos Bash `run_in_background`, relojes de Monitor y subagentes de fondo.

1633 

1634```python theme={null}

1635@dataclass

1636class TaskNotificationMessage(SystemMessage):

1637 task_id: str

1638 status: TaskNotificationStatus # "completed" | "failed" | "stopped"

1639 output_file: str

1640 summary: str

1641 uuid: str

1642 session_id: str

1643 tool_use_id: str | None = None

1644 usage: TaskUsage | None = None

1645```

1646 

1647| Campo | Tipo | Descripción |

1648| :------------ | :----------------------- | :---------------------------------------------- |

1649| `task_id` | `str` | Identificador único para la tarea |

1650| `status` | `TaskNotificationStatus` | Uno de `"completed"`, `"failed"`, o `"stopped"` |

1651| `output_file` | `str` | Ruta al archivo de salida de la tarea |

1652| `summary` | `str` | Resumen del resultado de la tarea |

1653| `uuid` | `str` | Identificador único del mensaje |

1654| `session_id` | `str` | Identificador de sesión |

1655| `tool_use_id` | `str \| None` | ID de uso de herramienta asociado |

1656| `usage` | `TaskUsage \| None` | Uso de token final para la tarea |

1657 

1658## Tipos de bloque de contenido

1659 

1660### `ContentBlock`

1661 

1662Tipo de unión de todos los bloques de contenido.

1663 

1664```python theme={null}

1665ContentBlock = TextBlock | ThinkingBlock | ToolUseBlock | ToolResultBlock

1666```

1667 

1668### `TextBlock`

1669 

1670Bloque de contenido de texto.

1671 

1672```python theme={null}

1673@dataclass

1674class TextBlock:

1675 text: str

1676```

1677 

1678### `ThinkingBlock`

1679 

1680Bloque de contenido de pensamiento (para modelos con capacidad de pensamiento).

1681 

1682```python theme={null}

1683@dataclass

1684class ThinkingBlock:

1685 thinking: str

1686 signature: str

1687```

1688 

1689### `ToolUseBlock`

1690 

1691Bloque de solicitud de uso de herramienta.

1692 

1693```python theme={null}

1694@dataclass

1695class ToolUseBlock:

1696 id: str

1697 name: str

1698 input: dict[str, Any]

1699```

1700 

1701### `ToolResultBlock`

1702 

1703Bloque de resultado de ejecución de herramienta.

1704 

1705```python theme={null}

1706@dataclass

1707class ToolResultBlock:

1708 tool_use_id: str

1709 content: str | list[dict[str, Any]] | None = None

1710 is_error: bool | None = None

1711```

1712 

1713## Tipos de error

1714 

1715### `ClaudeSDKError`

1716 

1717Clase de excepción base para todos los errores del SDK.

1718 

1719```python theme={null}

1720class ClaudeSDKError(Exception):

1721 """Base error for Claude SDK."""

1722```

1723 

1724### `CLINotFoundError`

1725 

1726Se genera cuando Claude Code CLI no está instalado o no se encuentra.

1727 

1728```python theme={null}

1729class CLINotFoundError(CLIConnectionError):

1730 def __init__(

1731 self, message: str = "Claude Code not found", cli_path: str | None = None

1732 ):

1733 """

1734 Args:

1735 message: Error message (default: "Claude Code not found")

1736 cli_path: Optional path to the CLI that was not found

1737 """

1738```

1739 

1740### `CLIConnectionError`

1741 

1742Se genera cuando la conexión a Claude Code falla.

1743 

1744```python theme={null}

1745class CLIConnectionError(ClaudeSDKError):

1746 """Failed to connect to Claude Code."""

1747```

1748 

1749### `ProcessError`

1750 

1751Se genera cuando el proceso de Claude Code falla.

1752 

1753```python theme={null}

1754class ProcessError(ClaudeSDKError):

1755 def __init__(

1756 self, message: str, exit_code: int | None = None, stderr: str | None = None

1757 ):

1758 self.exit_code = exit_code

1759 self.stderr = stderr

1760```

1761 

1762### `CLIJSONDecodeError`

1763 

1764Se genera cuando el análisis JSON falla.

1765 

1766```python theme={null}

1767class CLIJSONDecodeError(ClaudeSDKError):

1768 def __init__(self, line: str, original_error: Exception):

1769 """

1770 Args:

1771 line: The line that failed to parse

1772 original_error: The original JSON decode exception

1773 """

1774 self.line = line

1775 self.original_error = original_error

1776```

1777 

1778## Tipos de hook

1779 

1780Para una guía completa sobre el uso de hooks con ejemplos y patrones comunes, ver la [Guía de Hooks](/es/agent-sdk/hooks).

1781 

1782### `HookEvent`

1783 

1784Tipos de evento de hook soportados.

1785 

1786```python theme={null}

1787HookEvent = Literal[

1788 "PreToolUse", # Called before tool execution

1789 "PostToolUse", # Called after tool execution

1790 "PostToolUseFailure", # Called when a tool execution fails

1791 "UserPromptSubmit", # Called when user submits a prompt

1792 "Stop", # Called when stopping execution

1793 "SubagentStop", # Called when a subagent stops

1794 "PreCompact", # Called before message compaction

1795 "Notification", # Called for notification events

1796 "SubagentStart", # Called when a subagent starts

1797 "PermissionRequest", # Called when a permission decision is needed

1798]

1799```

1800 

1801<Note>

1802 El SDK de TypeScript admite eventos de hook adicionales no disponibles aún en Python: `SessionStart`, `SessionEnd`, `Setup`, `TeammateIdle`, `TaskCompleted`, `ConfigChange`, `WorktreeCreate`, `WorktreeRemove`, y `PostToolBatch`.

1803</Note>

1804 

1805### `HookCallback`

1806 

1807Definición de tipo para funciones de devolución de llamada de hook.

1808 

1809```python theme={null}

1810HookCallback = Callable[[HookInput, str | None, HookContext], Awaitable[HookJSONOutput]]

1811```

1812 

1813Parámetros:

1814 

1815* `input`: Entrada de hook fuertemente tipada con uniones discriminadas basadas en `hook_event_name` (ver [`HookInput`](#hook-input))

1816* `tool_use_id`: Identificador de uso de herramienta opcional (para hooks relacionados con herramientas)

1817* `context`: Contexto de hook con información adicional

1818 

1819Devuelve un [`HookJSONOutput`](#hook-json-output) que puede contener:

1820 

1821* `decision`: `"block"` para bloquear la acción

1822* `systemMessage`: Mensaje del sistema a agregar a la transcripción

1823* `hookSpecificOutput`: Datos de salida específicos del hook

1824 

1825### `HookContext`

1826 

1827Información de contexto pasada a devoluciones de llamada de hook.

1828 

1829```python theme={null}

1830class HookContext(TypedDict):

1831 signal: Any | None # Future: abort signal support

1832```

1833 

1834### `HookMatcher`

1835 

1836Configuración para hacer coincidir hooks con eventos o herramientas específicas.

1837 

1838```python theme={null}

1839@dataclass

1840class HookMatcher:

1841 matcher: str | None = (

1842 None # Tool name or pattern to match (e.g., "Bash", "Write|Edit")

1843 )

1844 hooks: list[HookCallback] = field(

1845 default_factory=list

1846 ) # List of callbacks to execute

1847 timeout: float | None = (

1848 None # Timeout in seconds for all hooks in this matcher (default: 60)

1849 )

1850```

1851 

1852### `HookInput`

1853 

1854Tipo de unión de todos los tipos de entrada de hook. El tipo real depende del campo `hook_event_name`.

1855 

1856```python theme={null}

1857HookInput = (

1858 PreToolUseHookInput

1859 | PostToolUseHookInput

1860 | PostToolUseFailureHookInput

1861 | UserPromptSubmitHookInput

1862 | StopHookInput

1863 | SubagentStopHookInput

1864 | PreCompactHookInput

1865 | NotificationHookInput

1866 | SubagentStartHookInput

1867 | PermissionRequestHookInput

1868)

1869```

1870 

1871### `BaseHookInput`

1872 

1873Campos base presentes en todos los tipos de entrada de hook.

1874 

1875```python theme={null}

1876class BaseHookInput(TypedDict):

1877 session_id: str

1878 transcript_path: str

1879 cwd: str

1880 permission_mode: NotRequired[str]

1881```

1882 

1883| Campo | Tipo | Descripción |

1884| :---------------- | :--------------- | :----------------------------------------- |

1885| `session_id` | `str` | Identificador de sesión actual |

1886| `transcript_path` | `str` | Ruta al archivo de transcripción de sesión |

1887| `cwd` | `str` | Directorio de trabajo actual |

1888| `permission_mode` | `str` (opcional) | Modo de permiso actual |

1889 

1890### `PreToolUseHookInput`

1891 

1892Datos de entrada para eventos de hook `PreToolUse`.

1893 

1894```python theme={null}

1895class PreToolUseHookInput(BaseHookInput):

1896 hook_event_name: Literal["PreToolUse"]

1897 tool_name: str

1898 tool_input: dict[str, Any]

1899 tool_use_id: str

1900 agent_id: NotRequired[str]

1901 agent_type: NotRequired[str]

1902```

1903 

1904| Campo | Tipo | Descripción |

1905| :---------------- | :---------------------- | :------------------------------------------------------------------------------------ |

1906| `hook_event_name` | `Literal["PreToolUse"]` | Siempre "PreToolUse" |

1907| `tool_name` | `str` | Nombre de la herramienta a punto de ejecutarse |

1908| `tool_input` | `dict[str, Any]` | Parámetros de entrada para la herramienta |

1909| `tool_use_id` | `str` | Identificador único para este uso de herramienta |

1910| `agent_id` | `str` (opcional) | Identificador de subagente, presente cuando el hook se dispara dentro de un subagente |

1911| `agent_type` | `str` (opcional) | Tipo de subagente, presente cuando el hook se dispara dentro de un subagente |

1912 

1913### `PostToolUseHookInput`

1914 

1915Datos de entrada para eventos de hook `PostToolUse`.

1916 

1917```python theme={null}

1918class PostToolUseHookInput(BaseHookInput):

1919 hook_event_name: Literal["PostToolUse"]

1920 tool_name: str

1921 tool_input: dict[str, Any]

1922 tool_response: Any

1923 tool_use_id: str

1924 agent_id: NotRequired[str]

1925 agent_type: NotRequired[str]

1926```

1927 

1928| Campo | Tipo | Descripción |

1929| :---------------- | :----------------------- | :------------------------------------------------------------------------------------ |

1930| `hook_event_name` | `Literal["PostToolUse"]` | Siempre "PostToolUse" |

1931| `tool_name` | `str` | Nombre de la herramienta que se ejecutó |

1932| `tool_input` | `dict[str, Any]` | Parámetros de entrada que se utilizaron |

1933| `tool_response` | `Any` | Respuesta de la ejecución de la herramienta |

1934| `tool_use_id` | `str` | Identificador único para este uso de herramienta |

1935| `agent_id` | `str` (opcional) | Identificador de subagente, presente cuando el hook se dispara dentro de un subagente |

1936| `agent_type` | `str` (opcional) | Tipo de subagente, presente cuando el hook se dispara dentro de un subagente |

1937 

1938### `PostToolUseFailureHookInput`

1939 

1940Datos de entrada para eventos de hook `PostToolUseFailure`. Se llama cuando la ejecución de una herramienta falla.

1941 

1942```python theme={null}

1943class PostToolUseFailureHookInput(BaseHookInput):

1944 hook_event_name: Literal["PostToolUseFailure"]

1945 tool_name: str

1946 tool_input: dict[str, Any]

1947 tool_use_id: str

1948 error: str

1949 is_interrupt: NotRequired[bool]

1950 agent_id: NotRequired[str]

1951 agent_type: NotRequired[str]

1952```

1953 

1954| Campo | Tipo | Descripción |

1955| :---------------- | :------------------------------ | :------------------------------------------------------------------------------------ |

1956| `hook_event_name` | `Literal["PostToolUseFailure"]` | Siempre "PostToolUseFailure" |

1957| `tool_name` | `str` | Nombre de la herramienta que falló |

1958| `tool_input` | `dict[str, Any]` | Parámetros de entrada que se utilizaron |

1959| `tool_use_id` | `str` | Identificador único para este uso de herramienta |

1960| `error` | `str` | Mensaje de error de la ejecución fallida |

1961| `is_interrupt` | `bool` (opcional) | Si el fallo fue causado por una interrupción |

1962| `agent_id` | `str` (opcional) | Identificador de subagente, presente cuando el hook se dispara dentro de un subagente |

1963| `agent_type` | `str` (opcional) | Tipo de subagente, presente cuando el hook se dispara dentro de un subagente |

1964 

1965### `UserPromptSubmitHookInput`

1966 

1967Datos de entrada para eventos de hook `UserPromptSubmit`.

1968 

1969```python theme={null}

1970class UserPromptSubmitHookInput(BaseHookInput):

1971 hook_event_name: Literal["UserPromptSubmit"]

1972 prompt: str

1973```

1974 

1975| Campo | Tipo | Descripción |

1976| :---------------- | :---------------------------- | :------------------------------- |

1977| `hook_event_name` | `Literal["UserPromptSubmit"]` | Siempre "UserPromptSubmit" |

1978| `prompt` | `str` | El prompt enviado por el usuario |

1979 

1980### `StopHookInput`

1981 

1982Datos de entrada para eventos de hook `Stop`.

1983 

1984```python theme={null}

1985class StopHookInput(BaseHookInput):

1986 hook_event_name: Literal["Stop"]

1987 stop_hook_active: bool

1988```

1989 

1990| Campo | Tipo | Descripción |

1991| :----------------- | :---------------- | :------------------------------- |

1992| `hook_event_name` | `Literal["Stop"]` | Siempre "Stop" |

1993| `stop_hook_active` | `bool` | Si el hook de parada está activo |

1994 

1995### `SubagentStopHookInput`

1996 

1997Datos de entrada para eventos de hook `SubagentStop`.

1998 

1999```python theme={null}

2000class SubagentStopHookInput(BaseHookInput):

2001 hook_event_name: Literal["SubagentStop"]

2002 stop_hook_active: bool

2003 agent_id: str

2004 agent_transcript_path: str

2005 agent_type: str

2006```

2007 

2008| Campo | Tipo | Descripción |

2009| :---------------------- | :------------------------ | :--------------------------------------------- |

2010| `hook_event_name` | `Literal["SubagentStop"]` | Siempre "SubagentStop" |

2011| `stop_hook_active` | `bool` | Si el hook de parada está activo |

2012| `agent_id` | `str` | Identificador único para el subagente |

2013| `agent_transcript_path` | `str` | Ruta al archivo de transcripción del subagente |

2014| `agent_type` | `str` | Tipo del subagente |

2015 

2016### `PreCompactHookInput`

2017 

2018Datos de entrada para eventos de hook `PreCompact`.

2019 

2020```python theme={null}

2021class PreCompactHookInput(BaseHookInput):

2022 hook_event_name: Literal["PreCompact"]

2023 trigger: Literal["manual", "auto"]

2024 custom_instructions: str | None

2025```

2026 

2027| Campo | Tipo | Descripción |

2028| :-------------------- | :-------------------------- | :--------------------------------------------- |

2029| `hook_event_name` | `Literal["PreCompact"]` | Siempre "PreCompact" |

2030| `trigger` | `Literal["manual", "auto"]` | Qué desencadenó la compactación |

2031| `custom_instructions` | `str \| None` | Instrucciones personalizadas para compactación |

2032 

2033### `NotificationHookInput`

2034 

2035Datos de entrada para eventos de hook `Notification`.

2036 

2037```python theme={null}

2038class NotificationHookInput(BaseHookInput):

2039 hook_event_name: Literal["Notification"]

2040 message: str

2041 title: NotRequired[str]

2042 notification_type: str

2043```

2044 

2045| Campo | Tipo | Descripción |

2046| :------------------ | :------------------------ | :------------------------------------ |

2047| `hook_event_name` | `Literal["Notification"]` | Siempre "Notification" |

2048| `message` | `str` | Contenido del mensaje de notificación |

2049| `title` | `str` (opcional) | Título de la notificación |

2050| `notification_type` | `str` | Tipo de notificación |

2051 

2052### `SubagentStartHookInput`

2053 

2054Datos de entrada para eventos de hook `SubagentStart`.

2055 

2056```python theme={null}

2057class SubagentStartHookInput(BaseHookInput):

2058 hook_event_name: Literal["SubagentStart"]

2059 agent_id: str

2060 agent_type: str

2061```

2062 

2063| Campo | Tipo | Descripción |

2064| :---------------- | :------------------------- | :------------------------------------ |

2065| `hook_event_name` | `Literal["SubagentStart"]` | Siempre "SubagentStart" |

2066| `agent_id` | `str` | Identificador único para el subagente |

2067| `agent_type` | `str` | Tipo del subagente |

2068 

2069### `PermissionRequestHookInput`

2070 

2071Datos de entrada para eventos de hook `PermissionRequest`. Permite que los hooks manejen decisiones de permiso programáticamente.

2072 

2073```python theme={null}

2074class PermissionRequestHookInput(BaseHookInput):

2075 hook_event_name: Literal["PermissionRequest"]

2076 tool_name: str

2077 tool_input: dict[str, Any]

2078 permission_suggestions: NotRequired[list[Any]]

2079```

2080 

2081| Campo | Tipo | Descripción |

2082| :----------------------- | :----------------------------- | :------------------------------------------- |

2083| `hook_event_name` | `Literal["PermissionRequest"]` | Siempre "PermissionRequest" |

2084| `tool_name` | `str` | Nombre de la herramienta solicitando permiso |

2085| `tool_input` | `dict[str, Any]` | Parámetros de entrada para la herramienta |

2086| `permission_suggestions` | `list[Any]` (opcional) | Actualizaciones de permiso sugeridas del CLI |

2087 

2088### `HookJSONOutput`

2089 

2090Tipo de unión para valores de retorno de devolución de llamada de hook.

2091 

2092```python theme={null}

2093HookJSONOutput = AsyncHookJSONOutput | SyncHookJSONOutput

2094```

2095 

2096#### `SyncHookJSONOutput`

2097 

2098Salida de hook sincrónico con campos de control y decisión.

2099 

2100```python theme={null}

2101class SyncHookJSONOutput(TypedDict):

2102 # Control fields

2103 continue_: NotRequired[bool] # Whether to proceed (default: True)

2104 suppressOutput: NotRequired[bool] # Hide stdout from transcript

2105 stopReason: NotRequired[str] # Message when continue is False

2106 

2107 # Decision fields

2108 decision: NotRequired[Literal["block"]]

2109 systemMessage: NotRequired[str] # Warning message for user

2110 reason: NotRequired[str] # Feedback for Claude

2111 

2112 # Hook-specific output

2113 hookSpecificOutput: NotRequired[HookSpecificOutput]

2114```

2115 

2116<Note>

2117 Use `continue_` (con guion bajo) en código Python. Se convierte automáticamente a `continue` cuando se envía al CLI.

2118</Note>

2119 

2120#### `HookSpecificOutput`

2121 

2122Un `TypedDict` que contiene el nombre del evento de hook y campos específicos del evento. La forma depende del valor `hookEventName`. Para detalles completos sobre campos disponibles por evento de hook, ver [Control execution with hooks](/es/agent-sdk/hooks#outputs).

2123 

2124Una unión discriminada de tipos de salida específicos del evento. El campo `hookEventName` determina qué campos son válidos.

2125 

2126```python theme={null}

2127class PreToolUseHookSpecificOutput(TypedDict):

2128 hookEventName: Literal["PreToolUse"]

2129 permissionDecision: NotRequired[Literal["allow", "deny", "ask"]]

2130 permissionDecisionReason: NotRequired[str]

2131 updatedInput: NotRequired[dict[str, Any]]

2132 additionalContext: NotRequired[str]

2133 

2134 

2135class PostToolUseHookSpecificOutput(TypedDict):

2136 hookEventName: Literal["PostToolUse"]

2137 additionalContext: NotRequired[str]

2138 updatedMCPToolOutput: NotRequired[Any]

2139 

2140 

2141class PostToolUseFailureHookSpecificOutput(TypedDict):

2142 hookEventName: Literal["PostToolUseFailure"]

2143 additionalContext: NotRequired[str]

2144 

2145 

2146class UserPromptSubmitHookSpecificOutput(TypedDict):

2147 hookEventName: Literal["UserPromptSubmit"]

2148 additionalContext: NotRequired[str]

2149 

2150 

2151class NotificationHookSpecificOutput(TypedDict):

2152 hookEventName: Literal["Notification"]

2153 additionalContext: NotRequired[str]

2154 

2155 

2156class SubagentStartHookSpecificOutput(TypedDict):

2157 hookEventName: Literal["SubagentStart"]

2158 additionalContext: NotRequired[str]

2159 

2160 

2161class PermissionRequestHookSpecificOutput(TypedDict):

2162 hookEventName: Literal["PermissionRequest"]

2163 decision: dict[str, Any]

2164 

2165 

2166HookSpecificOutput = (

2167 PreToolUseHookSpecificOutput

2168 | PostToolUseHookSpecificOutput

2169 | PostToolUseFailureHookSpecificOutput

2170 | UserPromptSubmitHookSpecificOutput

2171 | NotificationHookSpecificOutput

2172 | SubagentStartHookSpecificOutput

2173 | PermissionRequestHookSpecificOutput

2174)

2175```

2176 

2177#### `AsyncHookJSONOutput`

2178 

2179Salida de hook asincrónico que difiere la ejecución del hook.

2180 

2181```python theme={null}

2182class AsyncHookJSONOutput(TypedDict):

2183 async_: Literal[True] # Set to True to defer execution

2184 asyncTimeout: NotRequired[int] # Timeout in milliseconds

2185```

2186 

2187<Note>

2188 Use `async_` (con guion bajo) en código Python. Se convierte automáticamente a `async` cuando se envía al CLI.

2189</Note>

2190 

2191### Ejemplo de uso de hook

2192 

2193Este ejemplo registra dos hooks: uno que bloquea comandos bash peligrosos como `rm -rf /`, y otro que registra todo el uso de herramientas para auditoría. El hook de seguridad solo se ejecuta en comandos Bash (a través del `matcher`), mientras que el hook de registro se ejecuta en todas las herramientas.

2194 

2195```python theme={null}

2196from claude_agent_sdk import query, ClaudeAgentOptions, HookMatcher, HookContext

2197from typing import Any

2198 

2199 

2200async def validate_bash_command(

2201 input_data: dict[str, Any], tool_use_id: str | None, context: HookContext

2202) -> dict[str, Any]:

2203 """Validate and potentially block dangerous bash commands."""

2204 if input_data["tool_name"] == "Bash":

2205 command = input_data["tool_input"].get("command", "")

2206 if "rm -rf /" in command:

2207 return {

2208 "hookSpecificOutput": {

2209 "hookEventName": "PreToolUse",

2210 "permissionDecision": "deny",

2211 "permissionDecisionReason": "Dangerous command blocked",

2212 }

2213 }

2214 return {}

2215 

2216 

2217async def log_tool_use(

2218 input_data: dict[str, Any], tool_use_id: str | None, context: HookContext

2219) -> dict[str, Any]:

2220 """Log all tool usage for auditing."""

2221 print(f"Tool used: {input_data.get('tool_name')}")

2222 return {}

2223 

2224 

2225options = ClaudeAgentOptions(

2226 hooks={

2227 "PreToolUse": [

2228 HookMatcher(

2229 matcher="Bash", hooks=[validate_bash_command], timeout=120

2230 ), # 2 min for validation

2231 HookMatcher(

2232 hooks=[log_tool_use]

2233 ), # Applies to all tools (default 60s timeout)

2234 ],

2235 "PostToolUse": [HookMatcher(hooks=[log_tool_use])],

2236 }

2237)

2238 

2239async for message in query(prompt="Analyze this codebase", options=options):

2240 print(message)

2241```

2242 

2243## Tipos de entrada/salida de herramienta

2244 

2245Documentación de esquemas de entrada/salida para todas las herramientas integradas de Claude Code. Aunque el SDK de Python no exporta estos como tipos, representan la estructura de entradas y salidas de herramientas en mensajes.

2246 

2247### Agent

2248 

2249**Nombre de herramienta:** `Agent` (anteriormente `Task`, que aún se acepta como alias)

2250 

2251**Entrada:**

2252 

2253```python theme={null}

2254{

2255 "description": str, # A short (3-5 word) description of the task

2256 "prompt": str, # The task for the agent to perform

2257 "subagent_type": str, # The type of specialized agent to use

2258}

2259```

2260 

2261**Salida:**

2262 

2263```python theme={null}

2264{

2265 "result": str, # Final result from the subagent

2266 "usage": dict | None, # Token usage statistics

2267 "total_cost_usd": float | None, # Estimated total cost in USD

2268 "duration_ms": int | None, # Execution duration in milliseconds

2269}

2270```

2271 

2272### AskUserQuestion

2273 

2274**Nombre de herramienta:** `AskUserQuestion`

2275 

2276Hace preguntas aclaratorias al usuario durante la ejecución. Ver [Handle approvals and user input](/es/agent-sdk/user-input#handle-clarifying-questions) para detalles de uso.

2277 

2278**Entrada:**

2279 

2280```python theme={null}

2281{

2282 "questions": [ # Questions to ask the user (1-4 questions)

2283 {

2284 "question": str, # The complete question to ask the user

2285 "header": str, # Very short label displayed as a chip/tag (max 12 chars)

2286 "options": [ # The available choices (2-4 options)

2287 {

2288 "label": str, # Display text for this option (1-5 words)

2289 "description": str, # Explanation of what this option means

2290 }

2291 ],

2292 "multiSelect": bool, # Set to true to allow multiple selections

2293 }

2294 ],

2295 "answers": dict | None, # User answers populated by the permission system

2296}

2297```

2298 

2299**Salida:**

2300 

2301```python theme={null}

2302{

2303 "questions": [ # The questions that were asked

2304 {

2305 "question": str,

2306 "header": str,

2307 "options": [{"label": str, "description": str}],

2308 "multiSelect": bool,

2309 }

2310 ],

2311 "answers": dict[str, str], # Maps question text to answer string

2312 # Multi-select answers are comma-separated

2313}

2314```

2315 

2316### Bash

2317 

2318**Nombre de herramienta:** `Bash`

2319 

2320**Entrada:**

2321 

2322```python theme={null}

2323{

2324 "command": str, # The command to execute

2325 "timeout": int | None, # Optional timeout in milliseconds (max 600000)

2326 "description": str | None, # Clear, concise description (5-10 words)

2327 "run_in_background": bool | None, # Set to true to run in background

2328}

2329```

2330 

2331**Salida:**

2332 

2333```python theme={null}

2334{

2335 "output": str, # Combined stdout and stderr output

2336 "exitCode": int, # Exit code of the command

2337 "killed": bool | None, # Whether command was killed due to timeout

2338 "shellId": str | None, # Shell ID for background processes

2339}

2340```

2341 

2342### Monitor

2343 

2344**Nombre de herramienta:** `Monitor`

2345 

2346Ejecuta un script de fondo y entrega cada línea stdout a Claude como un evento para que pueda reaccionar sin sondeo. Monitor sigue las mismas reglas de permiso que Bash. Ver la [referencia de herramienta Monitor](/es/tools-reference#monitor-tool) para comportamiento y disponibilidad de proveedor.

2347 

2348**Entrada:**

2349 

2350```python theme={null}

2351{

2352 "command": str, # Shell script; each stdout line is an event, exit ends the watch

2353 "description": str, # Short description shown in notifications

2354 "timeout_ms": int | None, # Kill after this deadline (default 300000, max 3600000)

2355 "persistent": bool | None, # Run for the lifetime of the session; stop with TaskStop

2356}

2357```

2358 

2359**Salida:**

2360 

2361```python theme={null}

2362{

2363 "taskId": str, # ID of the background monitor task

2364 "timeoutMs": int, # Timeout deadline in milliseconds (0 when persistent)

2365 "persistent": bool | None, # True when running until TaskStop or session end

2366}

2367```

2368 

2369### Edit

2370 

2371**Nombre de herramienta:** `Edit`

2372 

2373**Entrada:**

2374 

2375```python theme={null}

2376{

2377 "file_path": str, # The absolute path to the file to modify

2378 "old_string": str, # The text to replace

2379 "new_string": str, # The text to replace it with

2380 "replace_all": bool | None, # Replace all occurrences (default False)

2381}

2382```

2383 

2384**Salida:**

2385 

2386```python theme={null}

2387{

2388 "message": str, # Confirmation message

2389 "replacements": int, # Number of replacements made

2390 "file_path": str, # File path that was edited

2391}

2392```

2393 

2394### Read

2395 

2396**Nombre de herramienta:** `Read`

2397 

2398**Entrada:**

2399 

2400```python theme={null}

2401{

2402 "file_path": str, # The absolute path to the file to read

2403 "offset": int | None, # The line number to start reading from

2404 "limit": int | None, # The number of lines to read

2405}

2406```

2407 

2408**Salida (archivos de texto):**

2409 

2410```python theme={null}

2411{

2412 "content": str, # File contents with line numbers

2413 "total_lines": int, # Total number of lines in file

2414 "lines_returned": int, # Lines actually returned

2415}

2416```

2417 

2418**Salida (imágenes):**

2419 

2420```python theme={null}

2421{

2422 "image": str, # Base64 encoded image data

2423 "mime_type": str, # Image MIME type

2424 "file_size": int, # File size in bytes

2425}

2426```

2427 

2428### Write

2429 

2430**Nombre de herramienta:** `Write`

2431 

2432**Entrada:**

2433 

2434```python theme={null}

2435{

2436 "file_path": str, # The absolute path to the file to write

2437 "content": str, # The content to write to the file

2438}

2439```

2440 

2441**Salida:**

2442 

2443```python theme={null}

2444{

2445 "message": str, # Success message

2446 "bytes_written": int, # Number of bytes written

2447 "file_path": str, # File path that was written

2448}

2449```

2450 

2451### Glob

2452 

2453**Nombre de herramienta:** `Glob`

2454 

2455**Entrada:**

2456 

2457```python theme={null}

2458{

2459 "pattern": str, # The glob pattern to match files against

2460 "path": str | None, # The directory to search in (defaults to cwd)

2461}

2462```

2463 

2464**Salida:**

2465 

2466```python theme={null}

2467{

2468 "matches": list[str], # Array of matching file paths

2469 "count": int, # Number of matches found

2470 "search_path": str, # Search directory used

2471}

2472```

2473 

2474### Grep

2475 

2476**Nombre de herramienta:** `Grep`

2477 

2478**Entrada:**

2479 

2480```python theme={null}

2481{

2482 "pattern": str, # The regular expression pattern

2483 "path": str | None, # File or directory to search in

2484 "glob": str | None, # Glob pattern to filter files

2485 "type": str | None, # File type to search

2486 "output_mode": str | None, # "content", "files_with_matches", or "count"

2487 "-i": bool | None, # Case insensitive search

2488 "-n": bool | None, # Show line numbers

2489 "-B": int | None, # Lines to show before each match

2490 "-A": int | None, # Lines to show after each match

2491 "-C": int | None, # Lines to show before and after

2492 "head_limit": int | None, # Limit output to first N lines/entries

2493 "multiline": bool | None, # Enable multiline mode

2494}

2495```

2496 

2497**Salida (modo content):**

2498 

2499```python theme={null}

2500{

2501 "matches": [

2502 {

2503 "file": str,

2504 "line_number": int | None,

2505 "line": str,

2506 "before_context": list[str] | None,

2507 "after_context": list[str] | None,

2508 }

2509 ],

2510 "total_matches": int,

2511}

2512```

2513 

2514**Salida (modo files\_with\_matches):**

2515 

2516```python theme={null}

2517{

2518 "files": list[str], # Files containing matches

2519 "count": int, # Number of files with matches

2520}

2521```

2522 

2523### NotebookEdit

2524 

2525**Nombre de herramienta:** `NotebookEdit`

2526 

2527**Entrada:**

2528 

2529```python theme={null}

2530{

2531 "notebook_path": str, # Absolute path to the Jupyter notebook

2532 "cell_id": str | None, # The ID of the cell to edit

2533 "new_source": str, # The new source for the cell

2534 "cell_type": "code" | "markdown" | None, # The type of the cell

2535 "edit_mode": "replace" | "insert" | "delete" | None, # Edit operation type

2536}

2537```

2538 

2539**Salida:**

2540 

2541```python theme={null}

2542{

2543 "message": str, # Success message

2544 "edit_type": "replaced" | "inserted" | "deleted", # Type of edit performed

2545 "cell_id": str | None, # Cell ID that was affected

2546 "total_cells": int, # Total cells in notebook after edit

2547}

2548```

2549 

2550### WebFetch

2551 

2552**Nombre de herramienta:** `WebFetch`

2553 

2554**Entrada:**

2555 

2556```python theme={null}

2557{

2558 "url": str, # The URL to fetch content from

2559 "prompt": str, # The prompt to run on the fetched content

2560}

2561```

2562 

2563**Salida:**

2564 

2565```python theme={null}

2566{

2567 "response": str, # AI model's response to the prompt

2568 "url": str, # URL that was fetched

2569 "final_url": str | None, # Final URL after redirects

2570 "status_code": int | None, # HTTP status code

2571}

2572```

2573 

2574### WebSearch

2575 

2576**Nombre de herramienta:** `WebSearch`

2577 

2578**Entrada:**

2579 

2580```python theme={null}

2581{

2582 "query": str, # The search query to use

2583 "allowed_domains": list[str] | None, # Only include results from these domains

2584 "blocked_domains": list[str] | None, # Never include results from these domains

2585}

2586```

2587 

2588**Salida:**

2589 

2590```python theme={null}

2591{

2592 "results": [{"title": str, "url": str, "snippet": str, "metadata": dict | None}],

2593 "total_results": int,

2594 "query": str,

2595}

2596```

2597 

2598### TodoWrite

2599 

2600**Nombre de herramienta:** `TodoWrite`

2601 

2602**Entrada:**

2603 

2604```python theme={null}

2605{

2606 "todos": [

2607 {

2608 "content": str, # The task description

2609 "status": "pending" | "in_progress" | "completed", # Task status

2610 "activeForm": str, # Active form of the description

2611 }

2612 ]

2613}

2614```

2615 

2616**Salida:**

2617 

2618```python theme={null}

2619{

2620 "message": str, # Success message

2621 "stats": {"total": int, "pending": int, "in_progress": int, "completed": int},

2622}

2623```

2624 

2625### BashOutput

2626 

2627**Nombre de herramienta:** `BashOutput`

2628 

2629**Entrada:**

2630 

2631```python theme={null}

2632{

2633 "bash_id": str, # The ID of the background shell

2634 "filter": str | None, # Optional regex to filter output lines

2635}

2636```

2637 

2638**Salida:**

2639 

2640```python theme={null}

2641{

2642 "output": str, # New output since last check

2643 "status": "running" | "completed" | "failed", # Current shell status

2644 "exitCode": int | None, # Exit code when completed

2645}

2646```

2647 

2648### KillBash

2649 

2650**Nombre de herramienta:** `KillBash`

2651 

2652**Entrada:**

2653 

2654```python theme={null}

2655{

2656 "shell_id": str # The ID of the background shell to kill

2657}

2658```

2659 

2660**Salida:**

2661 

2662```python theme={null}

2663{

2664 "message": str, # Success message

2665 "shell_id": str, # ID of the killed shell

2666}

2667```

2668 

2669### ExitPlanMode

2670 

2671**Nombre de herramienta:** `ExitPlanMode`

2672 

2673**Entrada:**

2674 

2675```python theme={null}

2676{

2677 "plan": str # The plan to run by the user for approval

2678}

2679```

2680 

2681**Salida:**

2682 

2683```python theme={null}

2684{

2685 "message": str, # Confirmation message

2686 "approved": bool | None, # Whether user approved the plan

2687}

2688```

2689 

2690### ListMcpResources

2691 

2692**Nombre de herramienta:** `ListMcpResources`

2693 

2694**Entrada:**

2695 

2696```python theme={null}

2697{

2698 "server": str | None # Optional server name to filter resources by

2699}

2700```

2701 

2702**Salida:**

2703 

2704```python theme={null}

2705{

2706 "resources": [

2707 {

2708 "uri": str,

2709 "name": str,

2710 "description": str | None,

2711 "mimeType": str | None,

2712 "server": str,

2713 }

2714 ],

2715 "total": int,

2716}

2717```

2718 

2719### ReadMcpResource

2720 

2721**Nombre de herramienta:** `ReadMcpResource`

2722 

2723**Entrada:**

2724 

2725```python theme={null}

2726{

2727 "server": str, # The MCP server name

2728 "uri": str, # The resource URI to read

2729}

2730```

2731 

2732**Salida:**

2733 

2734```python theme={null}

2735{

2736 "contents": [

2737 {"uri": str, "mimeType": str | None, "text": str | None, "blob": str | None}

2738 ],

2739 "server": str,

2740}

2741```

2742 

2743## Características avanzadas con ClaudeSDKClient

2744 

2745### Construir una interfaz de conversación continua

2746 

2747```python theme={null}

2748from claude_agent_sdk import (

2749 ClaudeSDKClient,

2750 ClaudeAgentOptions,

2751 AssistantMessage,

2752 TextBlock,

2753)

2754import asyncio

2755 

2756 

2757class ConversationSession:

2758 """Maintains a single conversation session with Claude."""

2759 

2760 def __init__(self, options: ClaudeAgentOptions | None = None):

2761 self.client = ClaudeSDKClient(options)

2762 self.turn_count = 0

2763 

2764 async def start(self):

2765 await self.client.connect()

2766 print("Starting conversation session. Claude will remember context.")

2767 print(

2768 "Commands: 'exit' to quit, 'interrupt' to stop current task, 'new' for new session"

2769 )

2770 

2771 while True:

2772 user_input = input(f"\n[Turn {self.turn_count + 1}] You: ")

2773 

2774 if user_input.lower() == "exit":

2775 break

2776 elif user_input.lower() == "interrupt":

2777 await self.client.interrupt()

2778 print("Task interrupted!")

2779 continue

2780 elif user_input.lower() == "new":

2781 # Disconnect and reconnect for a fresh session

2782 await self.client.disconnect()

2783 await self.client.connect()

2784 self.turn_count = 0

2785 print("Started new conversation session (previous context cleared)")

2786 continue

2787 

2788 # Send message - the session retains all previous messages

2789 await self.client.query(user_input)

2790 self.turn_count += 1

2791 

2792 # Process response

2793 print(f"[Turn {self.turn_count}] Claude: ", end="")

2794 async for message in self.client.receive_response():

2795 if isinstance(message, AssistantMessage):

2796 for block in message.content:

2797 if isinstance(block, TextBlock):

2798 print(block.text, end="")

2799 print() # New line after response

2800 

2801 await self.client.disconnect()

2802 print(f"Conversation ended after {self.turn_count} turns.")

2803 

2804 

2805async def main():

2806 options = ClaudeAgentOptions(

2807 allowed_tools=["Read", "Write", "Bash"], permission_mode="acceptEdits"

2808 )

2809 session = ConversationSession(options)

2810 await session.start()

2811 

2812 

2813# Example conversation:

2814# Turn 1 - You: "Create a file called hello.py"

2815# Turn 1 - Claude: "I'll create a hello.py file for you..."

2816# Turn 2 - You: "What's in that file?"

2817# Turn 2 - Claude: "The hello.py file I just created contains..." (remembers!)

2818# Turn 3 - You: "Add a main function to it"

2819# Turn 3 - Claude: "I'll add a main function to hello.py..." (knows which file!)

2820 

2821asyncio.run(main())

2822```

2823 

2824### Usar hooks para modificación de comportamiento

2825 

2826```python theme={null}

2827from claude_agent_sdk import (

2828 ClaudeSDKClient,

2829 ClaudeAgentOptions,

2830 HookMatcher,

2831 HookContext,

2832)

2833import asyncio

2834from typing import Any

2835 

2836 

2837async def pre_tool_logger(

2838 input_data: dict[str, Any], tool_use_id: str | None, context: HookContext

2839) -> dict[str, Any]:

2840 """Log all tool usage before execution."""

2841 tool_name = input_data.get("tool_name", "unknown")

2842 print(f"[PRE-TOOL] About to use: {tool_name}")

2843 

2844 # You can modify or block the tool execution here

2845 if tool_name == "Bash" and "rm -rf" in str(input_data.get("tool_input", {})):

2846 return {

2847 "hookSpecificOutput": {

2848 "hookEventName": "PreToolUse",

2849 "permissionDecision": "deny",

2850 "permissionDecisionReason": "Dangerous command blocked",

2851 }

2852 }

2853 return {}

2854 

2855 

2856async def post_tool_logger(

2857 input_data: dict[str, Any], tool_use_id: str | None, context: HookContext

2858) -> dict[str, Any]:

2859 """Log results after tool execution."""

2860 tool_name = input_data.get("tool_name", "unknown")

2861 print(f"[POST-TOOL] Completed: {tool_name}")

2862 return {}

2863 

2864 

2865async def user_prompt_modifier(

2866 input_data: dict[str, Any], tool_use_id: str | None, context: HookContext

2867) -> dict[str, Any]:

2868 """Add context to user prompts."""

2869 original_prompt = input_data.get("prompt", "")

2870 

2871 # Add a timestamp as additional context for Claude to see

2872 from datetime import datetime

2873 

2874 timestamp = datetime.now().strftime("%Y-%m-%d %H:%M:%S")

2875 

2876 return {

2877 "hookSpecificOutput": {

2878 "hookEventName": "UserPromptSubmit",

2879 "additionalContext": f"[Submitted at {timestamp}] Original prompt: {original_prompt}",

2880 }

2881 }

2882 

2883 

2884async def main():

2885 options = ClaudeAgentOptions(

2886 hooks={

2887 "PreToolUse": [

2888 HookMatcher(hooks=[pre_tool_logger]),

2889 HookMatcher(matcher="Bash", hooks=[pre_tool_logger]),

2890 ],

2891 "PostToolUse": [HookMatcher(hooks=[post_tool_logger])],

2892 "UserPromptSubmit": [HookMatcher(hooks=[user_prompt_modifier])],

2893 },

2894 allowed_tools=["Read", "Write", "Bash"],

2895 )

2896 

2897 async with ClaudeSDKClient(options=options) as client:

2898 await client.query("List files in current directory")

2899 

2900 async for message in client.receive_response():

2901 # Hooks will automatically log tool usage

2902 pass

2903 

2904 

2905asyncio.run(main())

2906```

2907 

2908### Monitoreo de progreso en tiempo real

2909 

2910```python theme={null}

2911from claude_agent_sdk import (

2912 ClaudeSDKClient,

2913 ClaudeAgentOptions,

2914 AssistantMessage,

2915 ToolUseBlock,

2916 ToolResultBlock,

2917 TextBlock,

2918)

2919import asyncio

2920 

2921 

2922async def monitor_progress():

2923 options = ClaudeAgentOptions(

2924 allowed_tools=["Write", "Bash"], permission_mode="acceptEdits"

2925 )

2926 

2927 async with ClaudeSDKClient(options=options) as client:

2928 await client.query("Create 5 Python files with different sorting algorithms")

2929 

2930 # Monitor progress in real-time

2931 async for message in client.receive_response():

2932 if isinstance(message, AssistantMessage):

2933 for block in message.content:

2934 if isinstance(block, ToolUseBlock):

2935 if block.name == "Write":

2936 file_path = block.input.get("file_path", "")

2937 print(f"Creating: {file_path}")

2938 elif isinstance(block, ToolResultBlock):

2939 print("Completed tool execution")

2940 elif isinstance(block, TextBlock):

2941 print(f"Claude says: {block.text[:100]}...")

2942 

2943 print("Task completed!")

2944 

2945 

2946asyncio.run(monitor_progress())

2947```

2948 

2949## Uso de ejemplo

2950 

2951### Operaciones básicas de archivo (usando query)

2952 

2953```python theme={null}

2954from claude_agent_sdk import query, ClaudeAgentOptions, AssistantMessage, ToolUseBlock

2955import asyncio

2956 

2957 

2958async def create_project():

2959 options = ClaudeAgentOptions(

2960 allowed_tools=["Read", "Write", "Bash"],

2961 permission_mode="acceptEdits",

2962 cwd="/home/user/project",

2963 )

2964 

2965 async for message in query(

2966 prompt="Create a Python project structure with setup.py", options=options

2967 ):

2968 if isinstance(message, AssistantMessage):

2969 for block in message.content:

2970 if isinstance(block, ToolUseBlock):

2971 print(f"Using tool: {block.name}")

2972 

2973 

2974asyncio.run(create_project())

2975```

2976 

2977### Manejo de errores

2978 

2979```python theme={null}

2980from claude_agent_sdk import query, CLINotFoundError, ProcessError, CLIJSONDecodeError

2981 

2982try:

2983 async for message in query(prompt="Hello"):

2984 print(message)

2985except CLINotFoundError:

2986 print(

2987 "Claude Code CLI not found. Try reinstalling: pip install --force-reinstall claude-agent-sdk"

2988 )

2989except ProcessError as e:

2990 print(f"Process failed with exit code: {e.exit_code}")

2991except CLIJSONDecodeError as e:

2992 print(f"Failed to parse response: {e}")

2993```

2994 

2995### Modo de streaming con cliente

2996 

2997```python theme={null}

2998from claude_agent_sdk import ClaudeSDKClient

2999import asyncio

3000 

3001 

3002async def interactive_session():

3003 async with ClaudeSDKClient() as client:

3004 # Send initial message

3005 await client.query("What's the weather like?")

3006 

3007 # Process responses

3008 async for msg in client.receive_response():

3009 print(msg)

3010 

3011 # Send follow-up

3012 await client.query("Tell me more about that")

3013 

3014 # Process follow-up response

3015 async for msg in client.receive_response():

3016 print(msg)

3017 

3018 

3019asyncio.run(interactive_session())

3020```

3021 

3022### Usar herramientas personalizadas con ClaudeSDKClient

3023 

3024```python theme={null}

3025from claude_agent_sdk import (

3026 ClaudeSDKClient,

3027 ClaudeAgentOptions,

3028 tool,

3029 create_sdk_mcp_server,

3030 AssistantMessage,

3031 TextBlock,

3032)

3033import asyncio

3034from typing import Any

3035 

3036 

3037# Define custom tools with @tool decorator

3038@tool("calculate", "Perform mathematical calculations", {"expression": str})

3039async def calculate(args: dict[str, Any]) -> dict[str, Any]:

3040 try:

3041 result = eval(args["expression"], {"__builtins__": {}})

3042 return {"content": [{"type": "text", "text": f"Result: {result}"}]}

3043 except Exception as e:

3044 return {

3045 "content": [{"type": "text", "text": f"Error: {str(e)}"}],

3046 "is_error": True,

3047 }

3048 

3049 

3050@tool("get_time", "Get current time", {})

3051async def get_time(args: dict[str, Any]) -> dict[str, Any]:

3052 from datetime import datetime

3053 

3054 current_time = datetime.now().strftime("%Y-%m-%d %H:%M:%S")

3055 return {"content": [{"type": "text", "text": f"Current time: {current_time}"}]}

3056 

3057 

3058async def main():

3059 # Create SDK MCP server with custom tools

3060 my_server = create_sdk_mcp_server(

3061 name="utilities", version="1.0.0", tools=[calculate, get_time]

3062 )

3063 

3064 # Configure options with the server

3065 options = ClaudeAgentOptions(

3066 mcp_servers={"utils": my_server},

3067 allowed_tools=["mcp__utils__calculate", "mcp__utils__get_time"],

3068 )

3069 

3070 # Use ClaudeSDKClient for interactive tool usage

3071 async with ClaudeSDKClient(options=options) as client:

3072 await client.query("What's 123 * 456?")

3073 

3074 # Process calculation response

3075 async for message in client.receive_response():

3076 if isinstance(message, AssistantMessage):

3077 for block in message.content:

3078 if isinstance(block, TextBlock):

3079 print(f"Calculation: {block.text}")

3080 

3081 # Follow up with time query

3082 await client.query("What time is it now?")

3083 

3084 async for message in client.receive_response():

3085 if isinstance(message, AssistantMessage):

3086 for block in message.content:

3087 if isinstance(block, TextBlock):

3088 print(f"Time: {block.text}")

3089 

3090 

3091asyncio.run(main())

3092```

3093 

3094## Configuración de sandbox

3095 

3096### `SandboxSettings`

3097 

3098Configuración para el comportamiento de sandbox. Use esto para habilitar el sandboxing de comandos y configurar restricciones de red programáticamente.

3099 

3100```python theme={null}

3101class SandboxSettings(TypedDict, total=False):

3102 enabled: bool

3103 autoAllowBashIfSandboxed: bool

3104 excludedCommands: list[str]

3105 allowUnsandboxedCommands: bool

3106 network: SandboxNetworkConfig

3107 ignoreViolations: SandboxIgnoreViolations

3108 enableWeakerNestedSandbox: bool

3109```

3110 

3111| Propiedad | Tipo | Predeterminado | Descripción |

3112| :-------------------------- | :------------------------------------------------------ | :------------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

3113| `enabled` | `bool` | `False` | Habilitar modo sandbox para ejecución de comandos |

3114| `autoAllowBashIfSandboxed` | `bool` | `True` | Aprobar automáticamente comandos bash cuando sandbox está habilitado |

3115| `excludedCommands` | `list[str]` | `[]` | Comandos que siempre evitan restricciones de sandbox (por ejemplo, `["docker"]`). Estos se ejecutan sin sandbox automáticamente sin participación del modelo |

3116| `allowUnsandboxedCommands` | `bool` | `True` | Permitir que el modelo solicite ejecutar comandos fuera del sandbox. Cuando es `True`, el modelo puede establecer `dangerouslyDisableSandbox` en entrada de herramienta, que vuelve al [sistema de permisos](#permissions-fallback-for-unsandboxed-commands) |

3117| `network` | [`SandboxNetworkConfig`](#sandbox-network-config) | `None` | Configuración de sandbox específica de red |

3118| `ignoreViolations` | [`SandboxIgnoreViolations`](#sandbox-ignore-violations) | `None` | Configurar qué violaciones de sandbox ignorar |

3119| `enableWeakerNestedSandbox` | `bool` | `False` | Habilitar un sandbox anidado más débil para compatibilidad |

3120 

3121#### Ejemplo de uso

3122 

3123```python theme={null}

3124from claude_agent_sdk import query, ClaudeAgentOptions, SandboxSettings

3125 

3126sandbox_settings: SandboxSettings = {

3127 "enabled": True,

3128 "autoAllowBashIfSandboxed": True,

3129 "network": {"allowLocalBinding": True},

3130}

3131 

3132async for message in query(

3133 prompt="Build and test my project",

3134 options=ClaudeAgentOptions(sandbox=sandbox_settings),

3135):

3136 print(message)

3137```

3138 

3139<Warning>

3140 **Seguridad de socket Unix**: La opción `allowUnixSockets` puede otorgar acceso a servicios del sistema poderosos. Por ejemplo, permitir `/var/run/docker.sock` efectivamente otorga acceso completo al sistema host a través de la API de Docker, evitando el aislamiento de sandbox. Solo permita sockets Unix que sean estrictamente necesarios y comprenda las implicaciones de seguridad de cada uno.

3141</Warning>

3142 

3143### `SandboxNetworkConfig`

3144 

3145Configuración específica de red para modo sandbox.

3146 

3147```python theme={null}

3148class SandboxNetworkConfig(TypedDict, total=False):

3149 allowedDomains: list[str]

3150 deniedDomains: list[str]

3151 allowManagedDomainsOnly: bool

3152 allowUnixSockets: list[str]

3153 allowAllUnixSockets: bool

3154 allowLocalBinding: bool

3155 allowMachLookup: list[str]

3156 httpProxyPort: int

3157 socksProxyPort: int

3158```

3159 

3160| Propiedad | Tipo | Predeterminado | Descripción |

3161| :------------------------ | :---------- | :------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

3162| `allowedDomains` | `list[str]` | `[]` | Nombres de dominio que los procesos en sandbox pueden acceder |

3163| `deniedDomains` | `list[str]` | `[]` | Nombres de dominio que los procesos en sandbox no pueden acceder. Tiene precedencia sobre `allowedDomains` |

3164| `allowManagedDomainsOnly` | `bool` | `False` | Solo configuración administrada: cuando se establece en configuración administrada, ignorar `allowedDomains` de fuentes de configuración no administradas. No tiene efecto cuando se establece a través de opciones de SDK |

3165| `allowUnixSockets` | `list[str]` | `[]` | Rutas de socket Unix que los procesos pueden acceder (por ejemplo, socket de Docker) |

3166| `allowAllUnixSockets` | `bool` | `False` | Permitir acceso a todos los sockets Unix |

3167| `allowLocalBinding` | `bool` | `False` | Permitir que los procesos se vinculen a puertos locales (por ejemplo, para servidores de desarrollo) |

3168| `allowMachLookup` | `list[str]` | `[]` | Solo macOS: nombres de servicios XPC/Mach para permitir. Admite un comodín al final |

3169| `httpProxyPort` | `int` | `None` | Puerto proxy HTTP para solicitudes de red |

3170| `socksProxyPort` | `int` | `None` | Puerto proxy SOCKS para solicitudes de red |

3171 

3172<Note>

3173 El proxy de sandbox integrado aplica la lista de permitidos de red basada en el nombre de host solicitado y no termina ni inspecciona el tráfico TLS, por lo que técnicas como [domain fronting](https://en.wikipedia.org/wiki/Domain_fronting) potencialmente pueden evitarlo. Consulte [Limitaciones de seguridad de sandboxing](/es/sandboxing#security-limitations) para obtener detalles y [Implementación segura](/es/agent-sdk/secure-deployment#traffic-forwarding) para configurar un proxy que termine TLS.

3174</Note>

3175 

3176### `SandboxIgnoreViolations`

3177 

3178Configuración para ignorar violaciones de sandbox específicas.

3179 

3180```python theme={null}

3181class SandboxIgnoreViolations(TypedDict, total=False):

3182 file: list[str]

3183 network: list[str]

3184```

3185 

3186| Propiedad | Tipo | Predeterminado | Descripción |

3187| :-------- | :---------- | :------------- | :--------------------------------------------------- |

3188| `file` | `list[str]` | `[]` | Patrones de ruta de archivo para ignorar violaciones |

3189| `network` | `list[str]` | `[]` | Patrones de red para ignorar violaciones |

3190 

3191### Respaldo de permisos para comandos sin sandbox

3192 

3193Cuando `allowUnsandboxedCommands` está habilitado, el modelo puede solicitar ejecutar comandos fuera del sandbox estableciendo `dangerouslyDisableSandbox: True` en la entrada de la herramienta. Estas solicitudes vuelven al sistema de permisos existente, lo que significa que se invocará su controlador `can_use_tool`, permitiéndole implementar lógica de autorización personalizada.

3194 

3195<Note>

3196 **`excludedCommands` vs `allowUnsandboxedCommands`:**

3197 

3198 * `excludedCommands`: Una lista estática de comandos que siempre evitan el sandbox automáticamente (por ejemplo, `["docker"]`). El modelo no tiene control sobre esto.

3199 * `allowUnsandboxedCommands`: Permite que el modelo decida en tiempo de ejecución si solicitar ejecución sin sandbox estableciendo `dangerouslyDisableSandbox: True` en la entrada de la herramienta.

3200</Note>

3201 

3202```python theme={null}

3203from claude_agent_sdk import (

3204 query,

3205 ClaudeAgentOptions,

3206 HookMatcher,

3207 PermissionResultAllow,

3208 PermissionResultDeny,

3209 ToolPermissionContext,

3210)

3211 

3212 

3213async def can_use_tool(

3214 tool: str, input: dict, context: ToolPermissionContext

3215) -> PermissionResultAllow | PermissionResultDeny:

3216 # Check if the model is requesting to bypass the sandbox

3217 if tool == "Bash" and input.get("dangerouslyDisableSandbox"):

3218 # The model is requesting to run this command outside the sandbox

3219 print(f"Unsandboxed command requested: {input.get('command')}")

3220 

3221 if is_command_authorized(input.get("command")):

3222 return PermissionResultAllow()

3223 return PermissionResultDeny(

3224 message="Command not authorized for unsandboxed execution"

3225 )

3226 return PermissionResultAllow()

3227 

3228 

3229# Required: dummy hook keeps the stream open for can_use_tool

3230async def dummy_hook(input_data, tool_use_id, context):

3231 return {"continue_": True}

3232 

3233 

3234async def prompt_stream():

3235 yield {

3236 "type": "user",

3237 "message": {"role": "user", "content": "Deploy my application"},

3238 }

3239 

3240 

3241async def main():

3242 async for message in query(

3243 prompt=prompt_stream(),

3244 options=ClaudeAgentOptions(

3245 sandbox={

3246 "enabled": True,

3247 "allowUnsandboxedCommands": True, # Model can request unsandboxed execution

3248 },

3249 permission_mode="default",

3250 can_use_tool=can_use_tool,

3251 hooks={"PreToolUse": [HookMatcher(matcher=None, hooks=[dummy_hook])]},

3252 ),

3253 ):

3254 print(message)

3255```

3256 

3257Este patrón le permite:

3258 

3259* **Auditar solicitudes del modelo**: Registrar cuándo el modelo solicita ejecución sin sandbox

3260* **Implementar listas de permitidos**: Solo permitir comandos específicos para ejecutarse sin sandbox

3261* **Agregar flujos de trabajo de aprobación**: Requerir autorización explícita para operaciones privilegiadas

3262 

3263<Warning>

3264 Los comandos que se ejecutan con `dangerouslyDisableSandbox: True` tienen acceso completo al sistema. Asegúrese de que su controlador `can_use_tool` valide estas solicitudes cuidadosamente.

3265 

3266 Si `permission_mode` se establece en `bypassPermissions` y `allow_unsandboxed_commands` está habilitado, el modelo puede ejecutar autónomamente comandos fuera del sandbox sin solicitudes de aprobación. Esta combinación efectivamente permite que el modelo escape del aislamiento de sandbox silenciosamente.

3267</Warning>

3268 

3269## Ver también

3270 

3271* [SDK overview](/es/agent-sdk/overview) - Conceptos generales del SDK

3272* [TypeScript SDK reference](/es/agent-sdk/typescript) - Documentación del SDK de TypeScript

3273* [CLI reference](/es/cli-reference) - Interfaz de línea de comandos

3274* [Common workflows](/es/common-workflows) - Guías paso a paso

agent-sdk/quickstart.md +333 −0 created

Details

1> ## Documentation Index

2> Fetch the complete documentation index at: https://code.claude.com/docs/llms.txt

3> Use this file to discover all available pages before exploring further.

4 

5# Inicio rápido

6 

7> Comience con el SDK de Agent de Python o TypeScript para crear agentes de IA que funcionen de forma autónoma

8 

9Utilice el SDK de Agent para crear un agente de IA que lea su código, encuentre errores y los corrija, todo sin intervención manual.

10 

11**Lo que hará:**

12 

131. Configurar un proyecto con el SDK de Agent

142. Crear un archivo con código con errores

153. Ejecutar un agente que encuentre y corrija los errores automáticamente

16 

17## Requisitos previos

18 

19* **Node.js 18+** o **Python 3.10+**

20* Una **cuenta de Anthropic** ([regístrese aquí](https://platform.claude.com/))

21 

22## Configuración

23 

24<Steps>

25 <Step title="Crear una carpeta de proyecto">

26 Cree un nuevo directorio para este inicio rápido:

27 

28 ```bash theme={null}

29 mkdir my-agent && cd my-agent

30 ```

31 

32 Para sus propios proyectos, puede ejecutar el SDK desde cualquier carpeta; tendrá acceso a los archivos en ese directorio y sus subdirectorios de forma predeterminada.

33 </Step>

34 

35 <Step title="Instalar el SDK">

36 Instale el paquete del SDK de Agent para su idioma:

37 

38 <Tabs>

39 <Tab title="TypeScript">

40 ```bash theme={null}

41 npm install @anthropic-ai/claude-agent-sdk

42 ```

43 </Tab>

44 

45 <Tab title="Python (uv)">

46 [uv Python package manager](https://docs.astral.sh/uv/) es un gestor de paquetes de Python rápido que maneja automáticamente los entornos virtuales:

47 

48 ```bash theme={null}

49 uv init && uv add claude-agent-sdk

50 ```

51 </Tab>

52 

53 <Tab title="Python (pip)">

54 Primero cree un entorno virtual, luego instale:

55 

56 ```bash theme={null}

57 python3 -m venv .venv && source .venv/bin/activate

58 pip3 install claude-agent-sdk

59 ```

60 </Tab>

61 </Tabs>

62 

63 <Note>

64 El SDK de TypeScript incluye un binario nativo de Claude Code para su plataforma como una dependencia opcional, por lo que no necesita instalar Claude Code por separado.

65 </Note>

66 </Step>

67 

68 <Step title="Establecer su clave de API">

69 Obtenga una clave de API de la [Consola de Claude](https://platform.claude.com/), luego cree un archivo `.env` en su directorio de proyecto:

70 

71 ```bash theme={null}

72 ANTHROPIC_API_KEY=your-api-key

73 ```

74 

75 El SDK también admite autenticación a través de proveedores de API de terceros:

76 

77 * **Amazon Bedrock**: establezca la variable de entorno `CLAUDE_CODE_USE_BEDROCK=1` y configure las credenciales de AWS

78 * **Google Vertex AI**: establezca la variable de entorno `CLAUDE_CODE_USE_VERTEX=1` y configure las credenciales de Google Cloud

79 * **Microsoft Azure**: establezca la variable de entorno `CLAUDE_CODE_USE_FOUNDRY=1` y configure las credenciales de Azure

80 

81 Consulte las guías de configuración para [Bedrock](/es/amazon-bedrock), [Vertex AI](/es/google-vertex-ai), o [Azure AI Foundry](/es/microsoft-foundry) para obtener más detalles.

82 

83 <Note>

84 A menos que haya sido aprobado previamente, Anthropic no permite que desarrolladores de terceros ofrezcan inicio de sesión en claude.ai o límites de velocidad para sus productos, incluidos los agentes construidos en el SDK de Agent de Claude. Por favor, utilice los métodos de autenticación de clave de API descritos en este documento en su lugar.

85 </Note>

86 </Step>

87</Steps>

88 

89## Crear un archivo con errores

90 

91Este inicio rápido lo guía a través de la construcción de un agente que puede encontrar y corregir errores en el código. Primero, necesita un archivo con algunos errores intencionales para que el agente corrija. Cree `utils.py` en el directorio `my-agent` y pegue el siguiente código:

92 

93```python theme={null}

94def calculate_average(numbers):

95 total = 0

96 for num in numbers:

97 total += num

98 return total / len(numbers)

99 

100 

101def get_user_name(user):

102 return user["name"].upper()

103```

104 

105Este código tiene dos errores:

106 

1071. `calculate_average([])` se bloquea con una división por cero

1082. `get_user_name(None)` se bloquea con un TypeError

109 

110## Construir un agente que encuentre y corrija errores

111 

112Cree `agent.py` si está utilizando el SDK de Python, o `agent.ts` para TypeScript:

113 

114<CodeGroup>

115 ```python Python theme={null}

116 import asyncio

117 from claude_agent_sdk import query, ClaudeAgentOptions, AssistantMessage, ResultMessage

118 

119 

120 async def main():

121 # Agentic loop: streams messages as Claude works

122 async for message in query(

123 prompt="Review utils.py for bugs that would cause crashes. Fix any issues you find.",

124 options=ClaudeAgentOptions(

125 allowed_tools=["Read", "Edit", "Glob"], # Tools Claude can use

126 permission_mode="acceptEdits", # Auto-approve file edits

127 ),

128 ):

129 # Print human-readable output

130 if isinstance(message, AssistantMessage):

131 for block in message.content:

132 if hasattr(block, "text"):

133 print(block.text) # Claude's reasoning

134 elif hasattr(block, "name"):

135 print(f"Tool: {block.name}") # Tool being called

136 elif isinstance(message, ResultMessage):

137 print(f"Done: {message.subtype}") # Final result

138 

139 

140 asyncio.run(main())

141 ```

142 

143 ```typescript TypeScript theme={null}

144 import { query } from "@anthropic-ai/claude-agent-sdk";

145 

146 // Agentic loop: streams messages as Claude works

147 for await (const message of query({

148 prompt: "Review utils.py for bugs that would cause crashes. Fix any issues you find.",

149 options: {

150 allowedTools: ["Read", "Edit", "Glob"], // Tools Claude can use

151 permissionMode: "acceptEdits" // Auto-approve file edits

152 }

153 })) {

154 // Print human-readable output

155 if (message.type === "assistant" && message.message?.content) {

156 for (const block of message.message.content) {

157 if ("text" in block) {

158 console.log(block.text); // Claude's reasoning

159 } else if ("name" in block) {

160 console.log(`Tool: ${block.name}`); // Tool being called

161 }

162 }

163 } else if (message.type === "result") {

164 console.log(`Done: ${message.subtype}`); // Final result

165 }

166 }

167 ```

168</CodeGroup>

169 

170Este código tiene tres partes principales:

171 

1721. **`query`**: el punto de entrada principal que crea el bucle agentic. Devuelve un iterador asincrónico, por lo que utiliza `async for` para transmitir mensajes mientras Claude trabaja. Consulte la API completa en la referencia del SDK de [Python](/es/agent-sdk/python#query) o [TypeScript](/es/agent-sdk/typescript#query).

173 

1742. **`prompt`**: lo que desea que haga Claude. Claude determina qué herramientas usar en función de la tarea.

175 

1763. **`options`**: configuración para el agente. Este ejemplo utiliza `allowedTools` para preautorizar `Read`, `Edit` y `Glob`, y `permissionMode: "acceptEdits"` para aprobar automáticamente los cambios de archivo. Otras opciones incluyen `systemPrompt`, `mcpServers` y más. Consulte todas las opciones para [Python](/es/agent-sdk/python#claude-agent-options) o [TypeScript](/es/agent-sdk/typescript#options).

177 

178El bucle `async for` continúa ejecutándose mientras Claude piensa, llama a herramientas, observa resultados y decide qué hacer a continuación. Cada iteración produce un mensaje: el razonamiento de Claude, una llamada a herramienta, un resultado de herramienta o el resultado final. El SDK maneja la orquestación (ejecución de herramientas, gestión de contexto, reintentos) para que solo consuma el flujo. El bucle termina cuando Claude completa la tarea o encuentra un error.

179 

180El manejo de mensajes dentro del bucle filtra la salida legible por humanos. Sin filtrado, vería objetos de mensaje sin procesar, incluida la inicialización del sistema y el estado interno, lo que es útil para depuración pero ruidoso de otra manera.

181 

182<Note>

183 Este ejemplo utiliza transmisión para mostrar el progreso en tiempo real. Si no necesita salida en vivo (por ejemplo, para trabajos en segundo plano o canalizaciones de CI), puede recopilar todos los mensajes a la vez. Consulte [Transmisión frente a modo de un solo turno](/es/agent-sdk/streaming-vs-single-mode) para obtener más detalles.

184</Note>

185 

186### Ejecutar su agente

187 

188Su agente está listo. Ejecútelo con el siguiente comando:

189 

190<Tabs>

191 <Tab title="Python">

192 ```bash theme={null}

193 python3 agent.py

194 ```

195 </Tab>

196 

197 <Tab title="TypeScript">

198 ```bash theme={null}

199 npx tsx agent.ts

200 ```

201 </Tab>

202</Tabs>

203 

204Después de ejecutar, verifique `utils.py`. Verá código defensivo que maneja listas vacías y usuarios nulos. Su agente de forma autónoma:

205 

2061. **Leyó** `utils.py` para entender el código

2072. **Analizó** la lógica e identificó casos extremos que causarían bloqueos

2083. **Editó** el archivo para agregar manejo de errores adecuado

209 

210Esto es lo que hace diferente al SDK de Agent: Claude ejecuta herramientas directamente en lugar de pedirle que las implemente.

211 

212<Note>

213 Si ve "API key not found", asegúrese de haber establecido la variable de entorno `ANTHROPIC_API_KEY` en su archivo `.env` o entorno de shell. Consulte la [guía completa de solución de problemas](/es/troubleshooting) para obtener más ayuda.

214</Note>

215 

216### Probar otros prompts

217 

218Ahora que su agente está configurado, pruebe algunos prompts diferentes:

219 

220* `"Add docstrings to all functions in utils.py"`

221* `"Add type hints to all functions in utils.py"`

222* `"Create a README.md documenting the functions in utils.py"`

223 

224### Personalizar su agente

225 

226Puede modificar el comportamiento de su agente cambiando las opciones. Aquí hay algunos ejemplos:

227 

228**Agregar capacidad de búsqueda web:**

229 

230<CodeGroup>

231 ```python Python theme={null}

232 options = ClaudeAgentOptions(

233 allowed_tools=["Read", "Edit", "Glob", "WebSearch"], permission_mode="acceptEdits"

234 )

235 ```

236 

237 ```typescript TypeScript hidelines={1,-1} theme={null}

238 const _ = {

239 options: {

240 allowedTools: ["Read", "Edit", "Glob", "WebSearch"],

241 permissionMode: "acceptEdits"

242 }

243 };

244 ```

245</CodeGroup>

246 

247**Dar a Claude un prompt de sistema personalizado:**

248 

249<CodeGroup>

250 ```python Python theme={null}

251 options = ClaudeAgentOptions(

252 allowed_tools=["Read", "Edit", "Glob"],

253 permission_mode="acceptEdits",

254 system_prompt="You are a senior Python developer. Always follow PEP 8 style guidelines.",

255 )

256 ```

257 

258 ```typescript TypeScript hidelines={1,-1} theme={null}

259 const _ = {

260 options: {

261 allowedTools: ["Read", "Edit", "Glob"],

262 permissionMode: "acceptEdits",

263 systemPrompt: "You are a senior Python developer. Always follow PEP 8 style guidelines."

264 }

265 };

266 ```

267</CodeGroup>

268 

269**Ejecutar comandos en la terminal:**

270 

271<CodeGroup>

272 ```python Python theme={null}

273 options = ClaudeAgentOptions(

274 allowed_tools=["Read", "Edit", "Glob", "Bash"], permission_mode="acceptEdits"

275 )

276 ```

277 

278 ```typescript TypeScript hidelines={1,-1} theme={null}

279 const _ = {

280 options: {

281 allowedTools: ["Read", "Edit", "Glob", "Bash"],

282 permissionMode: "acceptEdits"

283 }

284 };

285 ```

286</CodeGroup>

287 

288Con `Bash` habilitado, intente: `"Write unit tests for utils.py, run them, and fix any failures"`

289 

290## Conceptos clave

291 

292**Tools** controlan lo que su agente puede hacer:

293 

294| Herramientas | Lo que el agente puede hacer |

295| -------------------------------------- | ---------------------------- |

296| `Read`, `Glob`, `Grep` | Análisis de solo lectura |

297| `Read`, `Edit`, `Glob` | Analizar y modificar código |

298| `Read`, `Edit`, `Bash`, `Glob`, `Grep` | Automatización completa |

299 

300**Modos de permiso** controlan cuánta supervisión humana desea:

301 

302| Modo | Comportamiento | Caso de uso |

303| ------------------------ | -------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------ |

304| `acceptEdits` | Aprueba automáticamente ediciones de archivo y comandos comunes del sistema de archivos, pregunta por otras acciones | Flujos de trabajo de desarrollo confiables |

305| `dontAsk` | Deniega cualquier cosa que no esté en `allowedTools` | Agentes sin cabeza bloqueados |

306| `auto` (solo TypeScript) | Un clasificador de modelo aprueba o deniega cada llamada de herramienta | Agentes autónomos con protecciones de seguridad |

307| `bypassPermissions` | Ejecuta cada herramienta sin indicadores | CI en sandbox, entornos completamente confiables |

308| `default` | Requiere una devolución de llamada `canUseTool` para manejar la aprobación | Flujos de aprobación personalizados |

309 

310El ejemplo anterior utiliza el modo `acceptEdits`, que aprueba automáticamente las operaciones de archivo para que el agente pueda ejecutarse sin indicadores interactivos. Si desea solicitar a los usuarios la aprobación, utilice el modo `default` y proporcione una devolución de llamada [`canUseTool`](/es/agent-sdk/user-input) que recopile la entrada del usuario. Para más control, consulte [Permisos](/es/agent-sdk/permissions).

311 

312## Solución de problemas

313 

314### Error de API `thinking.type.enabled` no es compatible con este modelo

315 

316Claude Opus 4.7 reemplaza `thinking.type.enabled` con `thinking.type.adaptive`. Las versiones anteriores del SDK de Agent fallan con el siguiente error de API cuando selecciona `claude-opus-4-7`:

317 

318```text theme={null}

319API Error: 400 {"type":"invalid_request_error","message":"\"thinking.type.enabled\" is not supported for this model. Use \"thinking.type.adaptive\" and \"output_config.effort\" to control thinking behavior."}

320```

321 

322Actualice a la versión 0.2.111 o posterior del SDK de Agent para usar Opus 4.7.

323 

324## Próximos pasos

325 

326Ahora que ha creado su primer agente, aprenda cómo extender sus capacidades y adaptarlo a su caso de uso:

327 

328* **[Permisos](/es/agent-sdk/permissions)**: controle lo que su agente puede hacer y cuándo necesita aprobación

329* **[Hooks](/es/agent-sdk/hooks)**: ejecute código personalizado antes o después de llamadas de herramientas

330* **[Sesiones](/es/agent-sdk/sessions)**: construya agentes de múltiples turnos que mantengan contexto

331* **[Servidores MCP](/es/agent-sdk/mcp)**: conéctese a bases de datos, navegadores, API y otros sistemas externos

332* **[Hosting](/es/agent-sdk/hosting)**: implemente agentes en Docker, nube e CI/CD

333* **[Agentes de ejemplo](https://github.com/anthropics/claude-agent-sdk-demos)**: vea ejemplos completos: asistente de correo electrónico, agente de investigación y más

agent-sdk/slash-commands.md +444 −0 created

Details

1> ## Documentation Index

2> Fetch the complete documentation index at: https://code.claude.com/docs/llms.txt

3> Use this file to discover all available pages before exploring further.

4 

5# Slash Commands en el SDK

6 

7> Aprenda cómo usar slash commands para controlar sesiones de Claude Code a través del SDK

8 

9Los slash commands proporcionan una forma de controlar sesiones de Claude Code con comandos especiales que comienzan con `/`. Estos comandos se pueden enviar a través del SDK para realizar acciones como compactar contexto, listar el uso del contexto o invocar comandos personalizados. Solo los comandos que funcionan sin una terminal interactiva se pueden enviar a través del SDK; el mensaje `system/init` enumera los disponibles en su sesión.

10 

11## Descubrimiento de Slash Commands Disponibles

12 

13El Claude Agent SDK proporciona información sobre los slash commands disponibles en el mensaje de inicialización del sistema. Acceda a esta información cuando su sesión comience:

14 

15<CodeGroup>

16 ```typescript TypeScript theme={null}

17 import { query } from "@anthropic-ai/claude-agent-sdk";

18 

19 for await (const message of query({

20 prompt: "Hello Claude",

21 options: { maxTurns: 1 }

22 })) {

23 if (message.type === "system" && message.subtype === "init") {

24 console.log("Available slash commands:", message.slash_commands);

25 // Example output: ["/compact", "/context", "/usage"]

26 }

27 }

28 ```

29 

30 ```python Python theme={null}

31 import asyncio

32 from claude_agent_sdk import query, ClaudeAgentOptions, SystemMessage

33 

34 

35 async def main():

36 async for message in query(prompt="Hello Claude", options=ClaudeAgentOptions(max_turns=1)):

37 if isinstance(message, SystemMessage) and message.subtype == "init":

38 print("Available slash commands:", message.data["slash_commands"])

39 # Example output: ["/compact", "/context", "/usage"]

40 

41 

42 asyncio.run(main())

43 ```

44</CodeGroup>

45 

46## Envío de Slash Commands

47 

48Envíe slash commands incluyéndolos en su cadena de prompt, como texto normal:

49 

50<CodeGroup>

51 ```typescript TypeScript theme={null}

52 import { query } from "@anthropic-ai/claude-agent-sdk";

53 

54 // Send a slash command

55 for await (const message of query({

56 prompt: "/compact",

57 options: { maxTurns: 1 }

58 })) {

59 if (message.type === "result") {

60 console.log("Command executed:", message.result);

61 }

62 }

63 ```

64 

65 ```python Python theme={null}

66 import asyncio

67 from claude_agent_sdk import query, ClaudeAgentOptions, ResultMessage

68 

69 

70 async def main():

71 # Send a slash command

72 async for message in query(prompt="/compact", options=ClaudeAgentOptions(max_turns=1)):

73 if isinstance(message, ResultMessage):

74 print("Command executed:", message.result)

75 

76 

77 asyncio.run(main())

78 ```

79</CodeGroup>

80 

81## Slash Commands Comunes

82 

83### `/compact` - Compactar Historial de Conversación

84 

85El comando `/compact` reduce el tamaño de su historial de conversación resumiendo mensajes antiguos mientras preserva el contexto importante:

86 

87<CodeGroup>

88 ```typescript TypeScript theme={null}

89 import { query } from "@anthropic-ai/claude-agent-sdk";

90 

91 for await (const message of query({

92 prompt: "/compact",

93 options: { maxTurns: 1 }

94 })) {

95 if (message.type === "system" && message.subtype === "compact_boundary") {

96 console.log("Compaction completed");

97 console.log("Pre-compaction tokens:", message.compact_metadata.pre_tokens);

98 console.log("Trigger:", message.compact_metadata.trigger);

99 }

100 }

101 ```

102 

103 ```python Python theme={null}

104 import asyncio

105 from claude_agent_sdk import query, ClaudeAgentOptions, SystemMessage

106 

107 

108 async def main():

109 async for message in query(prompt="/compact", options=ClaudeAgentOptions(max_turns=1)):

110 if isinstance(message, SystemMessage) and message.subtype == "compact_boundary":

111 print("Compaction completed")

112 print("Pre-compaction tokens:", message.data["compact_metadata"]["pre_tokens"])

113 print("Trigger:", message.data["compact_metadata"]["trigger"])

114 

115 

116 asyncio.run(main())

117 ```

118</CodeGroup>

119 

120### Limpiar la conversación

121 

122El comando interactivo `/clear` no está disponible en el SDK. Cada llamada a `query()` ya comienza una conversación nueva, así que para limpiar el contexto, termine la `query()` actual e inicie una nueva. La conversación anterior se mantiene en disco y se puede recuperar pasando su ID de sesión a la [opción `resume`](/es/agent-sdk/sessions#resume-by-id).

123 

124## Creación de Slash Commands Personalizados

125 

126Además de usar slash commands integrados, puede crear sus propios comandos personalizados que estén disponibles a través del SDK. Los comandos personalizados se definen como archivos markdown en directorios específicos, similar a cómo se configuran los subagentes.

127 

128<Note>

129 El directorio `.claude/commands/` es el formato heredado. El formato recomendado es `.claude/skills/<name>/SKILL.md`, que admite la misma invocación de slash command (`/name`) más invocación autónoma por Claude. Consulte [Skills](/es/agent-sdk/skills) para el formato actual. La CLI continúa admitiendo ambos formatos, y los ejemplos a continuación siguen siendo precisos para `.claude/commands/`.

130</Note>

131 

132### Ubicaciones de Archivos

133 

134Los slash commands personalizados se almacenan en directorios designados según su alcance:

135 

136* **Comandos de proyecto**: `.claude/commands/` - Disponibles solo en el proyecto actual (heredado; prefiera `.claude/skills/`)

137* **Comandos personales**: `~/.claude/commands/` - Disponibles en todos sus proyectos (heredado; prefiera `~/.claude/skills/`)

138 

139### Formato de Archivo

140 

141Cada comando personalizado es un archivo markdown donde:

142 

143* El nombre del archivo (sin extensión `.md`) se convierte en el nombre del comando

144* El contenido del archivo define qué hace el comando

145* El frontmatter YAML opcional proporciona configuración

146 

147#### Ejemplo Básico

148 

149Cree `.claude/commands/refactor.md`:

150 

151```markdown theme={null}

152Refactor the selected code to improve readability and maintainability.

153Focus on clean code principles and best practices.

154```

155 

156Esto crea el comando `/refactor` que puede usar a través del SDK.

157 

158#### Con Frontmatter

159 

160Cree `.claude/commands/security-check.md`:

161 

162```markdown theme={null}

163---

164allowed-tools: Read, Grep, Glob

165description: Run security vulnerability scan

166model: claude-opus-4-7

167---

168 

169Analyze the codebase for security vulnerabilities including:

170- SQL injection risks

171- XSS vulnerabilities

172- Exposed credentials

173- Insecure configurations

174```

175 

176### Uso de Comandos Personalizados en el SDK

177 

178Una vez definidos en el sistema de archivos, los comandos personalizados están automáticamente disponibles a través del SDK:

179 

180<CodeGroup>

181 ```typescript TypeScript theme={null}

182 import { query } from "@anthropic-ai/claude-agent-sdk";

183 

184 // Use a custom command

185 for await (const message of query({

186 prompt: "/refactor src/auth/login.ts",

187 options: { maxTurns: 3 }

188 })) {

189 if (message.type === "assistant") {

190 console.log("Refactoring suggestions:", message.message);

191 }

192 }

193 

194 // Custom commands appear in the slash_commands list

195 for await (const message of query({

196 prompt: "Hello",

197 options: { maxTurns: 1 }

198 })) {

199 if (message.type === "system" && message.subtype === "init") {

200 // Will include both built-in and custom commands

201 console.log("Available commands:", message.slash_commands);

202 // Example: ["/compact", "/context", "/usage", "/refactor", "/security-check"]

203 }

204 }

205 ```

206 

207 ```python Python theme={null}

208 import asyncio

209 from claude_agent_sdk import query, ClaudeAgentOptions, AssistantMessage, SystemMessage

210 

211 

212 async def main():

213 # Use a custom command

214 async for message in query(

215 prompt="/refactor src/auth/login.py", options=ClaudeAgentOptions(max_turns=3)

216 ):

217 if isinstance(message, AssistantMessage):

218 for block in message.content:

219 if hasattr(block, "text"):

220 print("Refactoring suggestions:", block.text)

221 

222 # Custom commands appear in the slash_commands list

223 async for message in query(prompt="Hello", options=ClaudeAgentOptions(max_turns=1)):

224 if isinstance(message, SystemMessage) and message.subtype == "init":

225 # Will include both built-in and custom commands

226 print("Available commands:", message.data["slash_commands"])

227 # Example: ["/compact", "/context", "/usage", "/refactor", "/security-check"]

228 

229 

230 asyncio.run(main())

231 ```

232</CodeGroup>

233 

234### Características Avanzadas

235 

236#### Argumentos y Placeholders

237 

238Los comandos personalizados admiten argumentos dinámicos usando placeholders:

239 

240Cree `.claude/commands/fix-issue.md`:

241 

242```markdown theme={null}

243---

244argument-hint: [issue-number] [priority]

245description: Fix a GitHub issue

246---

247 

248Fix issue #$1 with priority $2.

249Check the issue description and implement the necessary changes.

250```

251 

252Úselo en el SDK:

253 

254<CodeGroup>

255 ```typescript TypeScript theme={null}

256 import { query } from "@anthropic-ai/claude-agent-sdk";

257 

258 // Pass arguments to custom command

259 for await (const message of query({

260 prompt: "/fix-issue 123 high",

261 options: { maxTurns: 5 }

262 })) {

263 // Command will process with $1="123" and $2="high"

264 if (message.type === "result") {

265 console.log("Issue fixed:", message.result);

266 }

267 }

268 ```

269 

270 ```python Python theme={null}

271 import asyncio

272 from claude_agent_sdk import query, ClaudeAgentOptions, ResultMessage

273 

274 

275 async def main():

276 # Pass arguments to custom command

277 async for message in query(prompt="/fix-issue 123 high", options=ClaudeAgentOptions(max_turns=5)):

278 # Command will process with $1="123" and $2="high"

279 if isinstance(message, ResultMessage):

280 print("Issue fixed:", message.result)

281 

282 

283 asyncio.run(main())

284 ```

285</CodeGroup>

286 

287#### Ejecución de Comandos Bash

288 

289Los comandos personalizados pueden ejecutar comandos bash e incluir su salida:

290 

291Cree `.claude/commands/git-commit.md`:

292 

293```markdown theme={null}

294---

295allowed-tools: Bash(git add *), Bash(git status *), Bash(git commit *)

296description: Create a git commit

297---

298 

299## Context

300 

301- Current status: !`git status`

302- Current diff: !`git diff HEAD`

303 

304## Task

305 

306Create a git commit with appropriate message based on the changes.

307```

308 

309#### Referencias de Archivos

310 

311Incluya contenidos de archivos usando el prefijo `@`:

312 

313Cree `.claude/commands/review-config.md`:

314 

315```markdown theme={null}

316---

317description: Review configuration files

318---

319 

320Review the following configuration files for issues:

321- Package config: @package.json

322- TypeScript config: @tsconfig.json

323- Environment config: @.env

324 

325Check for security issues, outdated dependencies, and misconfigurations.

326```

327 

328### Organización con Espacios de Nombres

329 

330Organice comandos en subdirectorios para una mejor estructura:

331 

332```bash theme={null}

333.claude/commands/

334├── frontend/

335│ ├── component.md # Creates /component (project:frontend)

336│ └── style-check.md # Creates /style-check (project:frontend)

337├── backend/

338│ ├── api-test.md # Creates /api-test (project:backend)

339│ └── db-migrate.md # Creates /db-migrate (project:backend)

340└── review.md # Creates /review (project)

341```

342 

343El subdirectorio aparece en la descripción del comando pero no afecta el nombre del comando en sí.

344 

345### Ejemplos Prácticos

346 

347#### Comando de Revisión de Código

348 

349Cree `.claude/commands/code-review.md`:

350 

351```markdown theme={null}

352---

353allowed-tools: Read, Grep, Glob, Bash(git diff *)

354description: Comprehensive code review

355---

356 

357## Changed Files

358!`git diff --name-only HEAD~1`

359 

360## Detailed Changes

361!`git diff HEAD~1`

362 

363## Review Checklist

364 

365Review the above changes for:

3661. Code quality and readability

3672. Security vulnerabilities

3683. Performance implications

3694. Test coverage

3705. Documentation completeness

371 

372Provide specific, actionable feedback organized by priority.

373```

374 

375#### Comando de Ejecutor de Pruebas

376 

377Cree `.claude/commands/test.md`:

378 

379```markdown theme={null}

380---

381allowed-tools: Bash, Read, Edit

382argument-hint: [test-pattern]

383description: Run tests with optional pattern

384---

385 

386Run tests matching pattern: $ARGUMENTS

387 

3881. Detect the test framework (Jest, pytest, etc.)

3892. Run tests with the provided pattern

3903. If tests fail, analyze and fix them

3914. Re-run to verify fixes

392```

393 

394Use estos comandos a través del SDK:

395 

396<CodeGroup>

397 ```typescript TypeScript theme={null}

398 import { query } from "@anthropic-ai/claude-agent-sdk";

399 

400 // Run code review

401 for await (const message of query({

402 prompt: "/code-review",

403 options: { maxTurns: 3 }

404 })) {

405 // Process review feedback

406 }

407 

408 // Run specific tests

409 for await (const message of query({

410 prompt: "/test auth",

411 options: { maxTurns: 5 }

412 })) {

413 // Handle test results

414 }

415 ```

416 

417 ```python Python theme={null}

418 import asyncio

419 from claude_agent_sdk import query, ClaudeAgentOptions

420 

421 

422 async def main():

423 # Run code review

424 async for message in query(prompt="/code-review", options=ClaudeAgentOptions(max_turns=3)):

425 # Process review feedback

426 pass

427 

428 # Run specific tests

429 async for message in query(prompt="/test auth", options=ClaudeAgentOptions(max_turns=5)):

430 # Handle test results

431 pass

432 

433 

434 asyncio.run(main())

435 ```

436</CodeGroup>

437 

438## Véase También

439 

440* [Slash Commands](/es/skills) - Documentación completa de slash commands

441* [Subagentes en el SDK](/es/agent-sdk/subagents) - Configuración similar basada en sistema de archivos para subagentes

442* [Referencia del SDK de TypeScript](/es/agent-sdk/typescript) - Documentación completa de la API

443* [Descripción general del SDK](/es/agent-sdk/overview) - Conceptos generales del SDK

444* [Referencia de CLI](/es/cli-reference) - Interfaz de línea de comandos

agent-sdk/typescript.md +2975 −0 created

Details

1> ## Documentation Index

2> Fetch the complete documentation index at: https://code.claude.com/docs/llms.txt

3> Use this file to discover all available pages before exploring further.

4 

5# Referencia del SDK de Agent - TypeScript

6 

7> Referencia completa de la API del SDK de Agent de TypeScript, incluyendo todas las funciones, tipos e interfaces.

8 

9<script src="/components/typescript-sdk-type-links.js" defer />

10 

11<Note>

12 **Pruebe la nueva interfaz V2 (vista previa):** Una interfaz simplificada con patrones `send()` y `stream()` está ahora disponible, lo que facilita las conversaciones de múltiples turnos. [Obtenga más información sobre la vista previa de TypeScript V2](/es/agent-sdk/typescript-v2-preview)

13</Note>

14 

15## Instalación

16 

17```bash theme={null}

18npm install @anthropic-ai/claude-agent-sdk

19```

20 

21<Note>

22 El SDK incluye un binario nativo de Claude Code para su plataforma como una dependencia opcional como `@anthropic-ai/claude-agent-sdk-darwin-arm64`. No necesita instalar Claude Code por separado. Si su gestor de paquetes omite las dependencias opcionales, el SDK lanza `Native CLI binary for <platform> not found`; en su lugar, establezca [`pathToClaudeCodeExecutable`](#options) en un binario `claude` instalado por separado.

23</Note>

24 

25## Funciones

26 

27### `query()`

28 

29La función principal para interactuar con Claude Code. Crea un generador asincrónico que transmite mensajes a medida que llegan.

30 

31```typescript theme={null}

32function query({

33 prompt,

34 options

35}: {

36 prompt: string | AsyncIterable<SDKUserMessage>;

37 options?: Options;

38}): Query;

39```

40 

41#### Parámetros

42 

43| Parámetro | Tipo | Descripción |

44| :-------- | :---------------------------------------------------------------- | :--------------------------------------------------------------------------------------- |

45| `prompt` | `string \| AsyncIterable<`[`SDKUserMessage`](#sdkuser-message)`>` | El mensaje de entrada como una cadena o iterable asincrónico para el modo de transmisión |

46| `options` | [`Options`](#options) | Objeto de configuración opcional (vea el tipo Options a continuación) |

47 

48#### Devuelve

49 

50Devuelve un objeto [`Query`](#query-object) que extiende `AsyncGenerator<`[`SDKMessage`](#sdk-message)`, void>` con métodos adicionales.

51 

52### `startup()`

53 

54Precalienta el subproceso CLI iniciándolo y completando el protocolo de inicialización antes de que un mensaje esté disponible. El identificador [`WarmQuery`](#warm-query) devuelto acepta un mensaje más tarde y lo escribe en un proceso ya listo, por lo que la primera llamada a `query()` se resuelve sin pagar el costo de generación e inicialización del subproceso en línea.

55 

56```typescript theme={null}

57function startup(params?: {

58 options?: Options;

59 initializeTimeoutMs?: number;

60}): Promise<WarmQuery>;

61```

62 

63#### Parámetros

64 

65| Parámetro | Tipo | Descripción |

66| :-------------------- | :-------------------- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

67| `options` | [`Options`](#options) | Objeto de configuración opcional. Igual que el parámetro `options` para `query()` |

68| `initializeTimeoutMs` | `number` | Tiempo máximo en milisegundos para esperar la inicialización del subproceso. Por defecto es `60000`. Si la inicialización no se completa a tiempo, la promesa se rechaza con un error de tiempo de espera |

69 

70#### Devuelve

71 

72Devuelve una `Promise<`[`WarmQuery`](#warm-query)`>` que se resuelve una vez que el subproceso se ha generado y ha completado su protocolo de inicialización.

73 

74#### Ejemplo

75 

76Llame a `startup()` temprano, por ejemplo al inicio de la aplicación, luego llame a `.query()` en el identificador devuelto una vez que un mensaje esté listo. Esto mueve la generación del subproceso e inicialización fuera de la ruta crítica.

77 

78```typescript theme={null}

79import { startup } from "@anthropic-ai/claude-agent-sdk";

80 

81// Pague el costo de inicio por adelantado

82const warm = await startup({ options: { maxTurns: 3 } });

83 

84// Más tarde, cuando un mensaje esté listo, esto es inmediato

85for await (const message of warm.query("What files are here?")) {

86 console.log(message);

87}

88```

89 

90### `tool()`

91 

92Crea una definición de herramienta MCP segura de tipos para usar con servidores MCP del SDK.

93 

94```typescript theme={null}

95function tool<Schema extends AnyZodRawShape>(

96 name: string,

97 description: string,

98 inputSchema: Schema,

99 handler: (args: InferShape<Schema>, extra: unknown) => Promise<CallToolResult>,

100 extras?: { annotations?: ToolAnnotations }

101): SdkMcpToolDefinition<Schema>;

102```

103 

104#### Parámetros

105 

106| Parámetro | Tipo | Descripción |

107| :------------ | :------------------------------------------------------------------ | :------------------------------------------------------------------------------------------------------ |

108| `name` | `string` | El nombre de la herramienta |

109| `description` | `string` | Una descripción de lo que hace la herramienta |

110| `inputSchema` | `Schema extends AnyZodRawShape` | Esquema Zod que define los parámetros de entrada de la herramienta (soporta tanto Zod 3 como Zod 4) |

111| `handler` | `(args, extra) => Promise<`[`CallToolResult`](#call-tool-result)`>` | Función asincrónica que ejecuta la lógica de la herramienta |

112| `extras` | `{ annotations?: `[`ToolAnnotations`](#tool-annotations)` }` | Anotaciones opcionales de herramienta MCP que proporcionan sugerencias de comportamiento a los clientes |

113 

114#### `ToolAnnotations`

115 

116Re-exportado desde `@modelcontextprotocol/sdk/types.js`. Todos los campos son sugerencias opcionales; los clientes no deben confiar en ellos para decisiones de seguridad.

117 

118| Campo | Tipo | Predeterminado | Descripción |

119| :---------------- | :-------- | :------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

120| `title` | `string` | `undefined` | Título legible por humanos para la herramienta |

121| `readOnlyHint` | `boolean` | `false` | Si es `true`, la herramienta no modifica su entorno |

122| `destructiveHint` | `boolean` | `true` | Si es `true`, la herramienta puede realizar actualizaciones destructivas (solo significativo cuando `readOnlyHint` es `false`) |

123| `idempotentHint` | `boolean` | `false` | Si es `true`, las llamadas repetidas con los mismos argumentos no tienen efecto adicional (solo significativo cuando `readOnlyHint` es `false`) |

124| `openWorldHint` | `boolean` | `true` | Si es `true`, la herramienta interactúa con entidades externas (por ejemplo, búsqueda web). Si es `false`, el dominio de la herramienta es cerrado (por ejemplo, una herramienta de memoria) |

125 

126```typescript theme={null}

127import { tool } from "@anthropic-ai/claude-agent-sdk";

128import { z } from "zod";

129 

130const searchTool = tool(

131 "search",

132 "Search the web",

133 { query: z.string() },

134 async ({ query }) => {

135 return { content: [{ type: "text", text: `Results for: ${query}` }] };

136 },

137 { annotations: { readOnlyHint: true, openWorldHint: true } }

138);

139```

140 

141### `createSdkMcpServer()`

142 

143Crea una instancia de servidor MCP que se ejecuta en el mismo proceso que su aplicación.

144 

145```typescript theme={null}

146function createSdkMcpServer(options: {

147 name: string;

148 version?: string;

149 tools?: Array<SdkMcpToolDefinition<any>>;

150}): McpSdkServerConfigWithInstance;

151```

152 

153#### Parámetros

154 

155| Parámetro | Tipo | Descripción |

156| :---------------- | :---------------------------- | :------------------------------------------------------------------- |

157| `options.name` | `string` | El nombre del servidor MCP |

158| `options.version` | `string` | Cadena de versión opcional |

159| `options.tools` | `Array<SdkMcpToolDefinition>` | Matriz de definiciones de herramientas creadas con [`tool()`](#tool) |

160 

161### `listSessions()`

162 

163Descubre y enumera sesiones pasadas con metadatos ligeros. Filtre por directorio de proyecto o enumere sesiones en todos los proyectos.

164 

165```typescript theme={null}

166function listSessions(options?: ListSessionsOptions): Promise<SDKSessionInfo[]>;

167```

168 

169#### Parámetros

170 

171| Parámetro | Tipo | Predeterminado | Descripción |

172| :------------------------- | :-------- | :------------- | :---------------------------------------------------------------------------------------------- |

173| `options.dir` | `string` | `undefined` | Directorio para enumerar sesiones. Cuando se omite, devuelve sesiones en todos los proyectos |

174| `options.limit` | `number` | `undefined` | Número máximo de sesiones a devolver |

175| `options.includeWorktrees` | `boolean` | `true` | Cuando `dir` está dentro de un repositorio git, incluya sesiones de todas las rutas de worktree |

176 

177#### Tipo de retorno: `SDKSessionInfo`

178 

179| Propiedad | Tipo | Descripción |

180| :------------- | :-------------------- | :----------------------------------------------------------------------------------------------- |

181| `sessionId` | `string` | Identificador de sesión único (UUID) |

182| `summary` | `string` | Título de visualización: título personalizado, resumen generado automáticamente o primer mensaje |

183| `lastModified` | `number` | Última hora de modificación en milisegundos desde la época |

184| `fileSize` | `number \| undefined` | Tamaño del archivo de sesión en bytes. Solo se completa para almacenamiento JSONL local |

185| `customTitle` | `string \| undefined` | Título de sesión establecido por el usuario (a través de `/rename`) |

186| `firstPrompt` | `string \| undefined` | Primer mensaje de usuario significativo en la sesión |

187| `gitBranch` | `string \| undefined` | Rama Git al final de la sesión |

188| `cwd` | `string \| undefined` | Directorio de trabajo para la sesión |

189| `tag` | `string \| undefined` | Etiqueta de sesión establecida por el usuario (vea [`tagSession()`](#tag-session)) |

190| `createdAt` | `number \| undefined` | Hora de creación en milisegundos desde la época, de la marca de tiempo de la primera entrada |

191 

192#### Ejemplo

193 

194Imprima las 10 sesiones más recientes para un proyecto. Los resultados se ordenan por `lastModified` descendente, por lo que el primer elemento es el más nuevo. Omita `dir` para buscar en todos los proyectos.

195 

196```typescript theme={null}

197import { listSessions } from "@anthropic-ai/claude-agent-sdk";

198 

199const sessions = await listSessions({ dir: "/path/to/project", limit: 10 });

200 

201for (const session of sessions) {

202 console.log(`${session.summary} (${session.sessionId})`);

203}

204```

205 

206### `getSessionMessages()`

207 

208Lee mensajes de usuario y asistente de una transcripción de sesión pasada.

209 

210```typescript theme={null}

211function getSessionMessages(

212 sessionId: string,

213 options?: GetSessionMessagesOptions

214): Promise<SessionMessage[]>;

215```

216 

217#### Parámetros

218 

219| Parámetro | Tipo | Predeterminado | Descripción |

220| :--------------- | :------- | :------------- | :--------------------------------------------------------------------------------------------- |

221| `sessionId` | `string` | requerido | UUID de sesión a leer (vea `listSessions()`) |

222| `options.dir` | `string` | `undefined` | Directorio de proyecto para encontrar la sesión. Cuando se omite, busca en todos los proyectos |

223| `options.limit` | `number` | `undefined` | Número máximo de mensajes a devolver |

224| `options.offset` | `number` | `undefined` | Número de mensajes a omitir desde el inicio |

225 

226#### Tipo de retorno: `SessionMessage`

227 

228| Propiedad | Tipo | Descripción |

229| :------------------- | :---------------------- | :----------------------------------------------------- |

230| `type` | `"user" \| "assistant"` | Rol del mensaje |

231| `uuid` | `string` | Identificador de mensaje único |

232| `session_id` | `string` | Sesión a la que pertenece este mensaje |

233| `message` | `unknown` | Carga útil de mensaje sin procesar de la transcripción |

234| `parent_tool_use_id` | `null` | Reservado |

235 

236#### Ejemplo

237 

238```typescript theme={null}

239import { listSessions, getSessionMessages } from "@anthropic-ai/claude-agent-sdk";

240 

241const [latest] = await listSessions({ dir: "/path/to/project", limit: 1 });

242 

243if (latest) {

244 const messages = await getSessionMessages(latest.sessionId, {

245 dir: "/path/to/project",

246 limit: 20

247 });

248 

249 for (const msg of messages) {

250 console.log(`[${msg.type}] ${msg.uuid}`);

251 }

252}

253```

254 

255### `getSessionInfo()`

256 

257Lee metadatos para una única sesión por ID sin escanear el directorio de proyecto completo.

258 

259```typescript theme={null}

260function getSessionInfo(

261 sessionId: string,

262 options?: GetSessionInfoOptions

263): Promise<SDKSessionInfo | undefined>;

264```

265 

266#### Parámetros

267 

268| Parámetro | Tipo | Predeterminado | Descripción |

269| :------------ | :------- | :------------- | :-------------------------------------------------------------------------------------------- |

270| `sessionId` | `string` | requerido | UUID de la sesión a buscar |

271| `options.dir` | `string` | `undefined` | Ruta del directorio del proyecto. Cuando se omite, busca en todos los directorios de proyecto |

272 

273Devuelve [`SDKSessionInfo`](#return-type-sdk-session-info), o `undefined` si la sesión no se encuentra.

274 

275### `renameSession()`

276 

277Cambia el nombre de una sesión añadiendo una entrada de título personalizado. Las llamadas repetidas son seguras; el título más reciente gana.

278 

279```typescript theme={null}

280function renameSession(

281 sessionId: string,

282 title: string,

283 options?: SessionMutationOptions

284): Promise<void>;

285```

286 

287#### Parámetros

288 

289| Parámetro | Tipo | Predeterminado | Descripción |

290| :------------ | :------- | :------------- | :-------------------------------------------------------------------------------------------- |

291| `sessionId` | `string` | requerido | UUID de la sesión a renombrar |

292| `title` | `string` | requerido | Nuevo título. Debe ser no vacío después de recortar espacios en blanco |

293| `options.dir` | `string` | `undefined` | Ruta del directorio del proyecto. Cuando se omite, busca en todos los directorios de proyecto |

294 

295### `tagSession()`

296 

297Etiqueta una sesión. Pase `null` para borrar la etiqueta. Las llamadas repetidas son seguras; la etiqueta más reciente gana.

298 

299```typescript theme={null}

300function tagSession(

301 sessionId: string,

302 tag: string | null,

303 options?: SessionMutationOptions

304): Promise<void>;

305```

306 

307#### Parámetros

308 

309| Parámetro | Tipo | Predeterminado | Descripción |

310| :------------ | :--------------- | :------------- | :-------------------------------------------------------------------------------------------- |

311| `sessionId` | `string` | requerido | UUID de la sesión a etiquetar |

312| `tag` | `string \| null` | requerido | Cadena de etiqueta, o `null` para borrar |

313| `options.dir` | `string` | `undefined` | Ruta del directorio del proyecto. Cuando se omite, busca en todos los directorios de proyecto |

314 

315## Tipos

316 

317### `Options`

318 

319Objeto de configuración para la función `query()`.

320 

321| Propiedad | Tipo | Predeterminado | Descripción |

322| :-------------------------------- | :------------------------------------------------------------------------------------------------------- | :------------------------------------------------- | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

323| `abortController` | `AbortController` | `new AbortController()` | Controlador para cancelar operaciones |

324| `additionalDirectories` | `string[]` | `[]` | Directorios adicionales a los que Claude puede acceder |

325| `agent` | `string` | `undefined` | Nombre del agente para el hilo principal. El agente debe estar definido en la opción `agents` o en la configuración |

326| `agents` | `Record<string, [`AgentDefinition`](#agent-definition)>` | `undefined` | Defina subagentes mediante programación |

327| `allowDangerouslySkipPermissions` | `boolean` | `false` | Habilite omitir permisos. Requerido cuando se usa `permissionMode: 'bypassPermissions'` |

328| `allowedTools` | `string[]` | `[]` | Herramientas para aprobar automáticamente sin solicitar. Esto no restringe Claude a solo estas herramientas; las herramientas no listadas caen en `permissionMode` y `canUseTool`. Use `disallowedTools` para bloquear herramientas. Vea [Permisos](/es/agent-sdk/permissions#allow-and-deny-rules) |

329| `betas` | [`SdkBeta`](#sdk-beta)`[]` | `[]` | Habilite características beta |

330| `canUseTool` | [`CanUseTool`](#can-use-tool) | `undefined` | Función de permiso personalizado para el uso de herramientas |

331| `continue` | `boolean` | `false` | Continúe la conversación más reciente |

332| `cwd` | `string` | `process.cwd()` | Directorio de trabajo actual |

333| `debug` | `boolean` | `false` | Habilite el modo de depuración para el proceso de Claude Code |

334| `debugFile` | `string` | `undefined` | Escriba registros de depuración en una ruta de archivo específica. Habilita implícitamente el modo de depuración |

335| `disallowedTools` | `string[]` | `[]` | Herramientas a negar siempre. Las reglas de negación se verifican primero e anulan `allowedTools` y `permissionMode` (incluyendo `bypassPermissions`) |

336| `effort` | `'low' \| 'medium' \| 'high' \| 'xhigh' \| 'max'` | `'high'` | Controla cuánto esfuerzo pone Claude en su respuesta. Funciona con el pensamiento adaptativo para guiar la profundidad del pensamiento |

337| `enableFileCheckpointing` | `boolean` | `false` | Habilite el seguimiento de cambios de archivo para rebobinar. Vea [File checkpointing](/es/agent-sdk/file-checkpointing) |

338| `env` | `Record<string, string \| undefined>` | `process.env` | Variables de entorno. Vea [Variables de entorno](/es/env-vars) para variables que la CLI subyacente lee. Establezca `CLAUDE_AGENT_SDK_CLIENT_APP` para identificar su aplicación en el encabezado User-Agent |

339| `executable` | `'bun' \| 'deno' \| 'node'` | Detectado automáticamente | Tiempo de ejecución de JavaScript a usar |

340| `executableArgs` | `string[]` | `[]` | Argumentos a pasar al ejecutable |

341| `extraArgs` | `Record<string, string \| null>` | `{}` | Argumentos adicionales |

342| `fallbackModel` | `string` | `undefined` | Modelo a usar si el principal falla |

343| `forkSession` | `boolean` | `false` | Cuando se reanuda con `resume`, bifurque a un nuevo ID de sesión en lugar de continuar la sesión original |

344| `hooks` | `Partial<Record<`[`HookEvent`](#hook-event)`, `[`HookCallbackMatcher`](#hook-callback-matcher)`[]>>` | `{}` | Devoluciones de llamada de hooks para eventos |

345| `includePartialMessages` | `boolean` | `false` | Incluya eventos de mensaje parcial |

346| `maxBudgetUsd` | `number` | `undefined` | Detenga la consulta cuando la estimación de costo del lado del cliente alcance este valor en USD. Comparado con la misma estimación que `total_cost_usd`; vea [Rastrear costo y uso](/es/agent-sdk/cost-tracking) para advertencias de precisión |

347| `maxThinkingTokens` | `number` | `undefined` | *Deprecado:* Use `thinking` en su lugar. Tokens máximos para el proceso de pensamiento |

348| `maxTurns` | `number` | `undefined` | Número máximo de turnos agentes (viajes de ronda de uso de herramientas) |

349| `mcpServers` | `Record<string, [`McpServerConfig`](#mcp-server-config)>` | `{}` | Configuraciones de servidor MCP |

350| `model` | `string` | Predeterminado de CLI | Modelo Claude a usar |

351| `outputFormat` | `{ type: 'json_schema', schema: JSONSchema }` | `undefined` | Defina el formato de salida para los resultados del agente. Vea [Structured outputs](/es/agent-sdk/structured-outputs) para detalles |

352| `pathToClaudeCodeExecutable` | `string` | Auto-resuelto desde el binario nativo incluido | Ruta al ejecutable de Claude Code. Solo se necesita si las dependencias opcionales se omitieron durante la instalación o su plataforma no está en el conjunto compatible |

353| `permissionMode` | [`PermissionMode`](#permission-mode) | `'default'` | Modo de permiso para la sesión |

354| `permissionPromptToolName` | `string` | `undefined` | Nombre de herramienta MCP para solicitudes de permiso |

355| `persistSession` | `boolean` | `true` | Cuando es `false`, deshabilita la persistencia de sesión en disco. Las sesiones no se pueden reanudar más tarde |

356| `plugins` | [`SdkPluginConfig`](#sdk-plugin-config)`[]` | `[]` | Cargue plugins personalizados desde rutas locales. Vea [Plugins](/es/agent-sdk/plugins) para detalles |

357| `promptSuggestions` | `boolean` | `false` | Habilite sugerencias de mensaje. Emite un mensaje `prompt_suggestion` después de cada turno con un mensaje de usuario predicho siguiente |

358| `resume` | `string` | `undefined` | ID de sesión a reanudar |

359| `resumeSessionAt` | `string` | `undefined` | Reanude la sesión en un UUID de mensaje específico |

360| `sandbox` | [`SandboxSettings`](#sandbox-settings) | `undefined` | Configure el comportamiento de sandbox mediante programación. Vea [Sandbox settings](#sandbox-settings) para detalles |

361| `sessionId` | `string` | Auto-generado | Use un UUID específico para la sesión en lugar de generar uno automáticamente |

362| `sessionStore` | [`SessionStore`](/es/agent-sdk/session-storage#the-session-store-interface) | `undefined` | Refleje transcripciones de sesión en un backend externo para que cualquier host pueda reanudarlas. Vea [Persistir sesiones en almacenamiento externo](/es/agent-sdk/session-storage) |

363| `settingSources` | [`SettingSource`](#setting-source)`[]` | Valores predeterminados de CLI (todas las fuentes) | Controle qué configuración del sistema de archivos cargar. Pase `[]` para deshabilitar la configuración de usuario, proyecto y local. La configuración de política administrada se carga independientemente. Vea [Usar características de Claude Code](/es/agent-sdk/claude-code-features#what-settingsources-does-not-control) |

364| `spawnClaudeCodeProcess` | `(options: SpawnOptions) => SpawnedProcess` | `undefined` | Función personalizada para generar el proceso de Claude Code. Use para ejecutar Claude Code en máquinas virtuales, contenedores o entornos remotos |

365| `stderr` | `(data: string) => void` | `undefined` | Devolución de llamada para salida de stderr |

366| `strictMcpConfig` | `boolean` | `false` | Aplique validación MCP estricta |

367| `systemPrompt` | `string \| { type: 'preset'; preset: 'claude_code'; append?: string; excludeDynamicSections?: boolean }` | `undefined` (mensaje mínimo) | Configuración de mensaje del sistema. Pase una cadena para un mensaje personalizado, o `{ type: 'preset', preset: 'claude_code' }` para usar el mensaje del sistema de Claude Code. Cuando use la forma de objeto preestablecido, agregue `append` para extenderlo con instrucciones adicionales, y establezca `excludeDynamicSections: true` para mover el contexto por sesión al primer mensaje de usuario para [mejor reutilización de caché de mensaje en máquinas](/es/agent-sdk/modifying-system-prompts#improve-prompt-caching-across-users-and-machines) |

368| `thinking` | [`ThinkingConfig`](#thinking-config) | `{ type: 'adaptive' }` para modelos compatibles | Controla el comportamiento de pensamiento/razonamiento de Claude. Vea [`ThinkingConfig`](#thinking-config) para opciones |

369| `toolConfig` | [`ToolConfig`](#tool-config) | `undefined` | Configuración para el comportamiento de herramientas integradas. Vea [`ToolConfig`](#tool-config) para detalles |

370| `tools` | `string[] \| { type: 'preset'; preset: 'claude_code' }` | `undefined` | Configuración de herramientas. Pase una matriz de nombres de herramientas o use el preestablecido para obtener las herramientas predeterminadas de Claude Code |

371 

372### Objeto `Query`

373 

374Interfaz devuelta por la función `query()`.

375 

376```typescript theme={null}

377interface Query extends AsyncGenerator<SDKMessage, void> {

378 interrupt(): Promise<void>;

379 rewindFiles(

380 userMessageId: string,

381 options?: { dryRun?: boolean }

382 ): Promise<RewindFilesResult>;

383 setPermissionMode(mode: PermissionMode): Promise<void>;

384 setModel(model?: string): Promise<void>;

385 setMaxThinkingTokens(maxThinkingTokens: number | null): Promise<void>;

386 initializationResult(): Promise<SDKControlInitializeResponse>;

387 supportedCommands(): Promise<SlashCommand[]>;

388 supportedModels(): Promise<ModelInfo[]>;

389 supportedAgents(): Promise<AgentInfo[]>;

390 mcpServerStatus(): Promise<McpServerStatus[]>;

391 accountInfo(): Promise<AccountInfo>;

392 reconnectMcpServer(serverName: string): Promise<void>;

393 toggleMcpServer(serverName: string, enabled: boolean): Promise<void>;

394 setMcpServers(servers: Record<string, McpServerConfig>): Promise<McpSetServersResult>;

395 streamInput(stream: AsyncIterable<SDKUserMessage>): Promise<void>;

396 stopTask(taskId: string): Promise<void>;

397 close(): void;

398}

399```

400 

401#### Métodos

402 

403| Método | Descripción |

404| :------------------------------------- | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

405| `interrupt()` | Interrumpe la consulta (solo disponible en modo de entrada de transmisión) |

406| `rewindFiles(userMessageId, options?)` | Restaura archivos a su estado en el mensaje de usuario especificado. Pase `{ dryRun: true }` para obtener una vista previa de los cambios. Requiere `enableFileCheckpointing: true`. Vea [File checkpointing](/es/agent-sdk/file-checkpointing) |

407| `setPermissionMode()` | Cambia el modo de permiso (solo disponible en modo de entrada de transmisión) |

408| `setModel()` | Cambia el modelo (solo disponible en modo de entrada de transmisión) |

409| `setMaxThinkingTokens()` | *Deprecado:* Use la opción `thinking` en su lugar. Cambia los tokens de pensamiento máximos |

410| `initializationResult()` | Devuelve el resultado de inicialización completo incluyendo comandos compatibles, modelos, información de cuenta y configuración de estilo de salida |

411| `supportedCommands()` | Devuelve comandos slash disponibles |

412| `supportedModels()` | Devuelve modelos disponibles con información de visualización |

413| `supportedAgents()` | Devuelve subagentes disponibles como [`AgentInfo`](#agent-info)`[]` |

414| `mcpServerStatus()` | Devuelve el estado de los servidores MCP conectados |

415| `accountInfo()` | Devuelve información de cuenta |

416| `reconnectMcpServer(serverName)` | Reconecte un servidor MCP por nombre |

417| `toggleMcpServer(serverName, enabled)` | Habilite o deshabilite un servidor MCP por nombre |

418| `setMcpServers(servers)` | Reemplace dinámicamente el conjunto de servidores MCP para esta sesión. Devuelve información sobre qué servidores se agregaron, eliminaron y cualquier error |

419| `streamInput(stream)` | Transmita mensajes de entrada a la consulta para conversaciones de múltiples turnos |

420| `stopTask(taskId)` | Detenga una tarea de fondo en ejecución por ID |

421| `close()` | Cierre la consulta y termine el proceso subyacente. Finaliza forzadamente la consulta y limpia todos los recursos |

422 

423### `WarmQuery`

424 

425Identificador devuelto por [`startup()`](#startup). El subproceso ya está generado e inicializado, por lo que llamar a `query()` en este identificador escribe el mensaje directamente en un proceso listo sin latencia de inicio.

426 

427```typescript theme={null}

428interface WarmQuery extends AsyncDisposable {

429 query(prompt: string | AsyncIterable<SDKUserMessage>): Query;

430 close(): void;

431}

432```

433 

434#### Métodos

435 

436| Método | Descripción |

437| :-------------- | :------------------------------------------------------------------------------------------------------------------------------- |

438| `query(prompt)` | Envíe un mensaje al subproceso precalentado y devuelva un [`Query`](#query-object). Solo se puede llamar una vez por `WarmQuery` |

439| `close()` | Cierre el subproceso sin enviar un mensaje. Use esto para descartar una consulta cálida que ya no es necesaria |

440 

441`WarmQuery` implementa `AsyncDisposable`, por lo que se puede usar con `await using` para limpieza automática.

442 

443### `SDKControlInitializeResponse`

444 

445Tipo de retorno de `initializationResult()`. Contiene datos de inicialización de sesión.

446 

447```typescript theme={null}

448type SDKControlInitializeResponse = {

449 commands: SlashCommand[];

450 agents: AgentInfo[];

451 output_style: string;

452 available_output_styles: string[];

453 models: ModelInfo[];

454 account: AccountInfo;

455 fast_mode_state?: "off" | "cooldown" | "on";

456};

457```

458 

459### `AgentDefinition`

460 

461Configuración para un subagente definido mediante programación.

462 

463```typescript theme={null}

464type AgentDefinition = {

465 description: string;

466 tools?: string[];

467 disallowedTools?: string[];

468 prompt: string;

469 model?: string;

470 mcpServers?: AgentMcpServerSpec[];

471 skills?: string[];

472 initialPrompt?: string;

473 maxTurns?: number;

474 background?: boolean;

475 memory?: "user" | "project" | "local";

476 effort?: "low" | "medium" | "high" | "xhigh" | "max" | number;

477 permissionMode?: PermissionMode;

478 criticalSystemReminder_EXPERIMENTAL?: string;

479};

480```

481 

482| Campo | Requerido | Descripción |

483| :------------------------------------ | :-------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

484| `description` | Sí | Descripción en lenguaje natural de cuándo usar este agente |

485| `tools` | No | Matriz de nombres de herramientas permitidas. Si se omite, hereda todas las herramientas del padre |

486| `disallowedTools` | No | Matriz de nombres de herramientas a desautorizar explícitamente para este agente |

487| `prompt` | Sí | El mensaje del sistema del agente |

488| `model` | No | Anulación de modelo para este agente. Acepta un alias como `'sonnet'`, `'opus'`, `'haiku'`, `'inherit'`, o un ID de modelo completo. Si se omite o es `'inherit'`, usa el modelo principal |

489| `mcpServers` | No | Especificaciones de servidor MCP para este agente |

490| `skills` | No | Matriz de nombres de habilidades a precargar en el contexto del agente |

491| `initialPrompt` | No | Auto-enviado como el primer turno de usuario cuando este agente se ejecuta como el agente del hilo principal |

492| `maxTurns` | No | Número máximo de turnos agentes (viajes de ronda de API) antes de detener |

493| `background` | No | Ejecute este agente como una tarea de fondo no bloqueante cuando se invoque |

494| `memory` | No | Fuente de memoria para este agente: `'user'`, `'project'`, o `'local'` |

495| `effort` | No | Nivel de esfuerzo de razonamiento para este agente. Acepta un nivel nombrado o un entero |

496| `permissionMode` | No | Modo de permiso para la ejecución de herramientas dentro de este agente. Vea [`PermissionMode`](#permission-mode) |

497| `criticalSystemReminder_EXPERIMENTAL` | No | Experimental: Recordatorio crítico agregado al mensaje del sistema |

498 

499### `AgentMcpServerSpec`

500 

501Especifica servidores MCP disponibles para un subagente. Puede ser un nombre de servidor (cadena que hace referencia a un servidor de la configuración `mcpServers` del padre) o una configuración de servidor en línea que mapea nombres de servidor a configuraciones.

502 

503```typescript theme={null}

504type AgentMcpServerSpec = string | Record<string, McpServerConfigForProcessTransport>;

505```

506 

507Donde `McpServerConfigForProcessTransport` es `McpStdioServerConfig | McpSSEServerConfig | McpHttpServerConfig | McpSdkServerConfig`.

508 

509### `SettingSource`

510 

511Controla qué fuentes de configuración basadas en el sistema de archivos carga el SDK.

512 

513```typescript theme={null}

514type SettingSource = "user" | "project" | "local";

515```

516 

517| Valor | Descripción | Ubicación |

518| :---------- | :------------------------------------------------------------ | :---------------------------- |

519| `'user'` | Configuración global del usuario | `~/.claude/settings.json` |

520| `'project'` | Configuración de proyecto compartida (controlada por versión) | `.claude/settings.json` |

521| `'local'` | Configuración de proyecto local (gitignored) | `.claude/settings.local.json` |

522 

523#### Comportamiento predeterminado

524 

525Cuando `settingSources` se omite o es `undefined`, `query()` carga la misma configuración del sistema de archivos que la CLI de Claude Code: usuario, proyecto y local. La configuración de política administrada se carga en todos los casos. Vea [Qué settingSources no controla](/es/agent-sdk/claude-code-features#what-settingsources-does-not-control) para entradas que se leen independientemente de esta opción, y cómo deshabilitarlas.

526 

527#### Por qué usar settingSources

528 

529**Deshabilitar configuración del sistema de archivos:**

530 

531```typescript theme={null}

532// No cargue la configuración de usuario, proyecto o local desde el disco

533const result = query({

534 prompt: "Analyze this code",

535 options: { settingSources: [] }

536});

537```

538 

539**Cargue toda la configuración del sistema de archivos explícitamente:**

540 

541```typescript theme={null}

542const result = query({

543 prompt: "Analyze this code",

544 options: {

545 settingSources: ["user", "project", "local"] // Cargue toda la configuración

546 }

547});

548```

549 

550**Cargue solo fuentes de configuración específicas:**

551 

552```typescript theme={null}

553// Cargue solo la configuración del proyecto, ignore usuario y local

554const result = query({

555 prompt: "Run CI checks",

556 options: {

557 settingSources: ["project"] // Solo .claude/settings.json

558 }

559});

560```

561 

562**Entornos de prueba e IC:**

563 

564```typescript theme={null}

565// Asegure un comportamiento consistente en IC excluyendo la configuración local

566const result = query({

567 prompt: "Run tests",

568 options: {

569 settingSources: ["project"], // Solo configuración compartida del equipo

570 permissionMode: "bypassPermissions"

571 }

572});

573```

574 

575**Aplicaciones solo SDK:**

576 

577```typescript theme={null}

578// Defina todo mediante programación.

579// Pase [] para optar por no usar fuentes de configuración del sistema de archivos.

580const result = query({

581 prompt: "Review this PR",

582 options: {

583 settingSources: [],

584 agents: {

585 /* ... */

586 },

587 mcpServers: {

588 /* ... */

589 },

590 allowedTools: ["Read", "Grep", "Glob"]

591 }

592});

593```

594 

595**Cargando instrucciones de proyecto CLAUDE.md:**

596 

597```typescript theme={null}

598// Cargue la configuración del proyecto para incluir archivos CLAUDE.md

599const result = query({

600 prompt: "Add a new feature following project conventions",

601 options: {

602 systemPrompt: {

603 type: "preset",

604 preset: "claude_code" // Use el mensaje del sistema de Claude Code

605 },

606 settingSources: ["project"], // Carga CLAUDE.md del directorio del proyecto

607 allowedTools: ["Read", "Write", "Edit"]

608 }

609});

610```

611 

612#### Precedencia de configuración

613 

614Cuando se cargan múltiples fuentes, la configuración se fusiona con esta precedencia (mayor a menor):

615 

6161. Configuración local (`.claude/settings.local.json`)

6172. Configuración del proyecto (`.claude/settings.json`)

6183. Configuración del usuario (`~/.claude/settings.json`)

619 

620Las opciones programáticas como `agents` y `allowedTools` anulan la configuración del sistema de archivos de usuario, proyecto y local. La configuración de política administrada tiene precedencia sobre las opciones programáticas.

621 

622### `PermissionMode`

623 

624```typescript theme={null}

625type PermissionMode =

626 | "default" // Comportamiento de permiso estándar

627 | "acceptEdits" // Auto-aceptar ediciones de archivo

628 | "bypassPermissions" // Omitir todas las verificaciones de permiso

629 | "plan" // Modo de planificación - sin ejecución

630 | "dontAsk" // No solicitar permisos, negar si no está preaprobado

631 | "auto"; // Usar un clasificador de modelo para aprobar o negar cada llamada de herramienta

632```

633 

634### `CanUseTool`

635 

636Tipo de función de permiso personalizado para controlar el uso de herramientas.

637 

638```typescript theme={null}

639type CanUseTool = (

640 toolName: string,

641 input: Record<string, unknown>,

642 options: {

643 signal: AbortSignal;

644 suggestions?: PermissionUpdate[];

645 blockedPath?: string;

646 decisionReason?: string;

647 toolUseID: string;

648 agentID?: string;

649 }

650) => Promise<PermissionResult>;

651```

652 

653| Opción | Tipo | Descripción |

654| :--------------- | :------------------------------------------- | :---------------------------------------------------------------------------------------------------------- |

655| `signal` | `AbortSignal` | Señalizado si la operación debe abortarse |

656| `suggestions` | [`PermissionUpdate`](#permission-update)`[]` | Actualizaciones de permiso sugeridas para que el usuario no sea solicitado nuevamente para esta herramienta |

657| `blockedPath` | `string` | La ruta de archivo que activó la solicitud de permiso, si corresponde |

658| `decisionReason` | `string` | Explica por qué se activó esta solicitud de permiso |

659| `toolUseID` | `string` | Identificador único para esta llamada de herramienta específica dentro del mensaje del asistente |

660| `agentID` | `string` | Si se ejecuta dentro de un sub-agente, el ID del sub-agente |

661 

662### `PermissionResult`

663 

664Resultado de una verificación de permiso.

665 

666```typescript theme={null}

667type PermissionResult =

668 | {

669 behavior: "allow";

670 updatedInput?: Record<string, unknown>;

671 updatedPermissions?: PermissionUpdate[];

672 toolUseID?: string;

673 }

674 | {

675 behavior: "deny";

676 message: string;

677 interrupt?: boolean;

678 toolUseID?: string;

679 };

680```

681 

682### `ToolConfig`

683 

684Configuración para el comportamiento de herramientas integradas.

685 

686```typescript theme={null}

687type ToolConfig = {

688 askUserQuestion?: {

689 previewFormat?: "markdown" | "html";

690 };

691};

692```

693 

694| Campo | Tipo | Descripción |

695| :------------------------------ | :--------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |

696| `askUserQuestion.previewFormat` | `'markdown' \| 'html'` | Opte por el campo `preview` en las opciones de [`AskUserQuestion`](/es/agent-sdk/user-input#question-format) y establezca su formato de contenido. Cuando no está establecido, Claude no emite vistas previas |

697 

698### `McpServerConfig`

699 

700Configuración para servidores MCP.

701 

702```typescript theme={null}

703type McpServerConfig =

704 | McpStdioServerConfig

705 | McpSSEServerConfig

706 | McpHttpServerConfig

707 | McpSdkServerConfigWithInstance;

708```

709 

710#### `McpStdioServerConfig`

711 

712```typescript theme={null}

713type McpStdioServerConfig = {

714 type?: "stdio";

715 command: string;

716 args?: string[];

717 env?: Record<string, string>;

718};

719```

720 

721#### `McpSSEServerConfig`

722 

723```typescript theme={null}

724type McpSSEServerConfig = {

725 type: "sse";

726 url: string;

727 headers?: Record<string, string>;

728};

729```

730 

731#### `McpHttpServerConfig`

732 

733```typescript theme={null}

734type McpHttpServerConfig = {

735 type: "http";

736 url: string;

737 headers?: Record<string, string>;

738};

739```

740 

741#### `McpSdkServerConfigWithInstance`

742 

743```typescript theme={null}

744type McpSdkServerConfigWithInstance = {

745 type: "sdk";

746 name: string;

747 instance: McpServer;

748};

749```

750 

751#### `McpClaudeAIProxyServerConfig`

752 

753```typescript theme={null}

754type McpClaudeAIProxyServerConfig = {

755 type: "claudeai-proxy";

756 url: string;

757 id: string;

758};

759```

760 

761### `SdkPluginConfig`

762 

763Configuración para cargar plugins en el SDK.

764 

765```typescript theme={null}

766type SdkPluginConfig = {

767 type: "local";

768 path: string;

769};

770```

771 

772| Campo | Tipo | Descripción |

773| :----- | :-------- | :---------------------------------------------------------------- |

774| `type` | `'local'` | Debe ser `'local'` (actualmente solo se soportan plugins locales) |

775| `path` | `string` | Ruta absoluta o relativa al directorio del plugin |

776 

777**Ejemplo:**

778 

779```typescript theme={null}

780plugins: [

781 { type: "local", path: "./my-plugin" },

782 { type: "local", path: "/absolute/path/to/plugin" }

783];

784```

785 

786Para información completa sobre la creación y uso de plugins, vea [Plugins](/es/agent-sdk/plugins).

787 

788## Tipos de Mensaje

789 

790### `SDKMessage`

791 

792Tipo de unión de todos los mensajes posibles devueltos por la consulta.

793 

794```typescript theme={null}

795type SDKMessage =

796 | SDKAssistantMessage

797 | SDKUserMessage

798 | SDKUserMessageReplay

799 | SDKResultMessage

800 | SDKSystemMessage

801 | SDKPartialAssistantMessage

802 | SDKCompactBoundaryMessage

803 | SDKStatusMessage

804 | SDKLocalCommandOutputMessage

805 | SDKHookStartedMessage

806 | SDKHookProgressMessage

807 | SDKHookResponseMessage

808 | SDKPluginInstallMessage

809 | SDKToolProgressMessage

810 | SDKAuthStatusMessage

811 | SDKTaskNotificationMessage

812 | SDKTaskStartedMessage

813 | SDKTaskProgressMessage

814 | SDKTaskUpdatedMessage

815 | SDKFilesPersistedEvent

816 | SDKToolUseSummaryMessage

817 | SDKRateLimitEvent

818 | SDKPromptSuggestionMessage;

819```

820 

821### `SDKAssistantMessage`

822 

823Mensaje de respuesta del asistente.

824 

825```typescript theme={null}

826type SDKAssistantMessage = {

827 type: "assistant";

828 uuid: UUID;

829 session_id: string;

830 message: BetaMessage; // Del SDK de Anthropic

831 parent_tool_use_id: string | null;

832 error?: SDKAssistantMessageError;

833};

834```

835 

836El campo `message` es un [`BetaMessage`](https://platform.claude.com/docs/es/api/messages/create) del SDK de Anthropic. Incluye campos como `id`, `content`, `model`, `stop_reason` y `usage`.

837 

838`SDKAssistantMessageError` es uno de: `'authentication_failed'`, `'oauth_org_not_allowed'`, `'billing_error'`, `'rate_limit'`, `'invalid_request'`, `'server_error'`, `'max_output_tokens'`, o `'unknown'`.

839 

840### `SDKUserMessage`

841 

842Mensaje de entrada del usuario.

843 

844```typescript theme={null}

845type SDKUserMessage = {

846 type: "user";

847 uuid?: UUID;

848 session_id: string;

849 message: MessageParam; // Del SDK de Anthropic

850 parent_tool_use_id: string | null;

851 isSynthetic?: boolean;

852 shouldQuery?: boolean;

853 tool_use_result?: unknown;

854 origin?: SDKMessageOrigin;

855};

856```

857 

858Establezca `shouldQuery` en `false` para añadir el mensaje a la transcripción sin activar un turno del asistente. El mensaje se mantiene y se fusiona en el siguiente mensaje de usuario que sí activa un turno. Use esto para inyectar contexto, como la salida de un comando que ejecutó fuera de banda, sin gastar una llamada de modelo en él.

859 

860### `SDKUserMessageReplay`

861 

862Mensaje de usuario reproducido con UUID requerido.

863 

864```typescript theme={null}

865type SDKUserMessageReplay = {

866 type: "user";

867 uuid: UUID;

868 session_id: string;

869 message: MessageParam;

870 parent_tool_use_id: string | null;

871 isSynthetic?: boolean;

872 tool_use_result?: unknown;

873 origin?: SDKMessageOrigin;

874 isReplay: true;

875};

876```

877 

878### `SDKResultMessage`

879 

880Mensaje de resultado final.

881 

882```typescript theme={null}

883type SDKResultMessage =

884 | {

885 type: "result";

886 subtype: "success";

887 uuid: UUID;

888 session_id: string;

889 duration_ms: number;

890 duration_api_ms: number;

891 is_error: boolean;

892 num_turns: number;

893 result: string;

894 stop_reason: string | null;

895 total_cost_usd: number;

896 usage: NonNullableUsage;

897 modelUsage: { [modelName: string]: ModelUsage };

898 permission_denials: SDKPermissionDenial[];

899 structured_output?: unknown;

900 deferred_tool_use?: { id: string; name: string; input: Record<string, unknown> };

901 origin?: SDKMessageOrigin;

902 }

903 | {

904 type: "result";

905 subtype:

906 | "error_max_turns"

907 | "error_during_execution"

908 | "error_max_budget_usd"

909 | "error_max_structured_output_retries";

910 uuid: UUID;

911 session_id: string;

912 duration_ms: number;

913 duration_api_ms: number;

914 is_error: boolean;

915 num_turns: number;

916 stop_reason: string | null;

917 total_cost_usd: number;

918 usage: NonNullableUsage;

919 modelUsage: { [modelName: string]: ModelUsage };

920 permission_denials: SDKPermissionDenial[];

921 errors: string[];

922 origin?: SDKMessageOrigin;

923 };

924```

925 

926El campo `origin` reenvía el [`SDKMessageOrigin`](#sdkmessageorigin) del mensaje de usuario que activó este resultado. Cuando una tarea de fondo finaliza y el SDK inyecta un turno de seguimiento sintético, el `SDKResultMessage` resultante lleva `origin: { kind: "task-notification" }`. Verifique este campo para distinguir los resultados que responden a su solicitud de los resultados emitidos para seguimientos de tareas de fondo, para que pueda enrutar o suprimir estos últimos. El campo está ausente para los resultados emitidos antes de cualquier turno de usuario, como errores de inicio.

927 

928Cuando un hook `PreToolUse` devuelve `permissionDecision: "defer"`, el resultado tiene `stop_reason: "tool_deferred"` y `deferred_tool_use` lleva el `id`, `name` e `input` de la herramienta pendiente. Lea este campo para mostrar la solicitud en su propia interfaz de usuario, luego reanude con el mismo `session_id` para continuar. Consulte [Diferir una llamada de herramienta para más tarde](/es/hooks#defer-a-tool-call-for-later) para el viaje completo.

929 

930### `SDKSystemMessage`

931 

932Mensaje de inicialización del sistema.

933 

934```typescript theme={null}

935type SDKSystemMessage = {

936 type: "system";

937 subtype: "init";

938 uuid: UUID;

939 session_id: string;

940 agents?: string[];

941 apiKeySource: ApiKeySource;

942 betas?: string[];

943 claude_code_version: string;

944 cwd: string;

945 tools: string[];

946 mcp_servers: {

947 name: string;

948 status: string;

949 }[];

950 model: string;

951 permissionMode: PermissionMode;

952 slash_commands: string[];

953 output_style: string;

954 skills: string[];

955 plugins: { name: string; path: string }[];

956};

957```

958 

959### `SDKPartialAssistantMessage`

960 

961Mensaje parcial de transmisión (solo cuando `includePartialMessages` es true).

962 

963```typescript theme={null}

964type SDKPartialAssistantMessage = {

965 type: "stream_event";

966 event: BetaRawMessageStreamEvent; // Del SDK de Anthropic

967 parent_tool_use_id: string | null;

968 uuid: UUID;

969 session_id: string;

970};

971```

972 

973### `SDKCompactBoundaryMessage`

974 

975Mensaje que indica un límite de compactación de conversación.

976 

977```typescript theme={null}

978type SDKCompactBoundaryMessage = {

979 type: "system";

980 subtype: "compact_boundary";

981 uuid: UUID;

982 session_id: string;

983 compact_metadata: {

984 trigger: "manual" | "auto";

985 pre_tokens: number;

986 };

987};

988```

989 

990### `SDKPluginInstallMessage`

991 

992Evento de progreso de instalación de plugin. Se emite cuando [`CLAUDE_CODE_SYNC_PLUGIN_INSTALL`](/es/env-vars) está establecido, para que su aplicación Agent SDK pueda rastrear la instalación de plugins del mercado antes del primer turno. Los estados `started` y `completed` cierran la instalación general. Los estados `installed` y `failed` reportan mercados individuales e incluyen `name`.

993 

994```typescript theme={null}

995type SDKPluginInstallMessage = {

996 type: "system";

997 subtype: "plugin_install";

998 status: "started" | "installed" | "failed" | "completed";

999 name?: string;

1000 error?: string;

1001 uuid: UUID;

1002 session_id: string;

1003};

1004```

1005 

1006### `SDKPermissionDenial`

1007 

1008Información sobre un uso de herramienta denegado.

1009 

1010```typescript theme={null}

1011type SDKPermissionDenial = {

1012 tool_name: string;

1013 tool_use_id: string;

1014 tool_input: Record<string, unknown>;

1015};

1016```

1017 

1018### `SDKMessageOrigin`

1019 

1020Procedencia de un mensaje con rol de usuario. Esto aparece como `origin` en [`SDKUserMessage`](#sdkusermessage) y se reenvía al [`SDKResultMessage`](#sdkresultmessage) correspondiente para que pueda saber qué activó un turno determinado.

1021 

1022```typescript theme={null}

1023type SDKMessageOrigin =

1024 | { kind: "human" }

1025 | { kind: "channel"; server: string }

1026 | { kind: "peer"; from: string; name?: string }

1027 | { kind: "task-notification" }

1028 | { kind: "coordinator" };

1029```

1030 

1031| `kind` | Significado |

1032| ------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |

1033| `human` | Entrada directa del usuario final. En mensajes de usuario, una `origin` ausente también significa entrada humana. |

1034| `channel` | Mensaje que llega en un [canal](/es/channels). `server` es el nombre del servidor MCP de origen. |

1035| `peer` | Mensaje de otra sesión de agente a través de `SendMessage`. `from` es la dirección del remitente; `name` es el nombre para mostrar del remitente cuando está disponible. |

1036| `task-notification` | Turno sintético inyectado después de que finalizó una tarea de fondo. Consulte [`SDKTaskNotificationMessage`](#sdktasknotificationmessage). |

1037| `coordinator` | Mensaje de un coordinador de equipo en un [equipo de agentes](/es/agent-teams). |

1038 

1039## Tipos de Hook

1040 

1041Para una guía completa sobre el uso de hooks con ejemplos y patrones comunes, vea la [guía de Hooks](/es/agent-sdk/hooks).

1042 

1043### `HookEvent`

1044 

1045Eventos de hook disponibles.

1046 

1047```typescript theme={null}

1048type HookEvent =

1049 | "PreToolUse"

1050 | "PostToolUse"

1051 | "PostToolUseFailure"

1052 | "PostToolBatch"

1053 | "Notification"

1054 | "UserPromptSubmit"

1055 | "SessionStart"

1056 | "SessionEnd"

1057 | "Stop"

1058 | "SubagentStart"

1059 | "SubagentStop"

1060 | "PreCompact"

1061 | "PermissionRequest"

1062 | "Setup"

1063 | "TeammateIdle"

1064 | "TaskCompleted"

1065 | "ConfigChange"

1066 | "WorktreeCreate"

1067 | "WorktreeRemove";

1068```

1069 

1070### `HookCallback`

1071 

1072Tipo de función de devolución de llamada de hook.

1073 

1074```typescript theme={null}

1075type HookCallback = (

1076 input: HookInput, // Unión de todos los tipos de entrada de hook

1077 toolUseID: string | undefined,

1078 options: { signal: AbortSignal }

1079) => Promise<HookJSONOutput>;

1080```

1081 

1082### `HookCallbackMatcher`

1083 

1084Configuración de hook con coincidencia opcional.

1085 

1086```typescript theme={null}

1087interface HookCallbackMatcher {

1088 matcher?: string;

1089 hooks: HookCallback[];

1090 timeout?: number; // Tiempo de espera en segundos para todos los hooks en este coincididor

1091}

1092```

1093 

1094### `HookInput`

1095 

1096Tipo de unión de todos los tipos de entrada de hook.

1097 

1098```typescript theme={null}

1099type HookInput =

1100 | PreToolUseHookInput

1101 | PostToolUseHookInput

1102 | PostToolUseFailureHookInput

1103 | PostToolBatchHookInput

1104 | NotificationHookInput

1105 | UserPromptSubmitHookInput

1106 | SessionStartHookInput

1107 | SessionEndHookInput

1108 | StopHookInput

1109 | SubagentStartHookInput

1110 | SubagentStopHookInput

1111 | PreCompactHookInput

1112 | PermissionRequestHookInput

1113 | SetupHookInput

1114 | TeammateIdleHookInput

1115 | TaskCompletedHookInput

1116 | ConfigChangeHookInput

1117 | WorktreeCreateHookInput

1118 | WorktreeRemoveHookInput;

1119```

1120 

1121### `BaseHookInput`

1122 

1123Interfaz base que todos los tipos de entrada de hook extienden.

1124 

1125```typescript theme={null}

1126type BaseHookInput = {

1127 session_id: string;

1128 transcript_path: string;

1129 cwd: string;

1130 permission_mode?: string;

1131 agent_id?: string;

1132 agent_type?: string;

1133};

1134```

1135 

1136#### `PreToolUseHookInput`

1137 

1138```typescript theme={null}

1139type PreToolUseHookInput = BaseHookInput & {

1140 hook_event_name: "PreToolUse";

1141 tool_name: string;

1142 tool_input: unknown;

1143 tool_use_id: string;

1144};

1145```

1146 

1147#### `PostToolUseHookInput`

1148 

1149```typescript theme={null}

1150type PostToolUseHookInput = BaseHookInput & {

1151 hook_event_name: "PostToolUse";

1152 tool_name: string;

1153 tool_input: unknown;

1154 tool_response: unknown;

1155 tool_use_id: string;

1156 duration_ms?: number;

1157};

1158```

1159 

1160#### `PostToolUseFailureHookInput`

1161 

1162```typescript theme={null}

1163type PostToolUseFailureHookInput = BaseHookInput & {

1164 hook_event_name: "PostToolUseFailure";

1165 tool_name: string;

1166 tool_input: unknown;

1167 tool_use_id: string;

1168 error: string;

1169 is_interrupt?: boolean;

1170 duration_ms?: number;

1171};

1172```

1173 

1174#### `PostToolBatchHookInput`

1175 

1176Se activa una vez después de que cada llamada de herramienta en un lote se haya resuelto, antes de la siguiente solicitud del modelo. `tool_response` lleva el contenido serializado de `tool_result` que el modelo ve; la forma difiere del objeto `Output` estructurado de `PostToolUseHookInput`.

1177 

1178```typescript theme={null}

1179type PostToolBatchHookInput = BaseHookInput & {

1180 hook_event_name: "PostToolBatch";

1181 tool_calls: PostToolBatchToolCall[];

1182};

1183 

1184type PostToolBatchToolCall = {

1185 tool_name: string;

1186 tool_input: unknown;

1187 tool_use_id: string;

1188 tool_response?: unknown;

1189};

1190```

1191 

1192#### `NotificationHookInput`

1193 

1194```typescript theme={null}

1195type NotificationHookInput = BaseHookInput & {

1196 hook_event_name: "Notification";

1197 message: string;

1198 title?: string;

1199 notification_type: string;

1200};

1201```

1202 

1203#### `UserPromptSubmitHookInput`

1204 

1205```typescript theme={null}

1206type UserPromptSubmitHookInput = BaseHookInput & {

1207 hook_event_name: "UserPromptSubmit";

1208 prompt: string;

1209};

1210```

1211 

1212#### `SessionStartHookInput`

1213 

1214```typescript theme={null}

1215type SessionStartHookInput = BaseHookInput & {

1216 hook_event_name: "SessionStart";

1217 source: "startup" | "resume" | "clear" | "compact";

1218 agent_type?: string;

1219 model?: string;

1220};

1221```

1222 

1223#### `SessionEndHookInput`

1224 

1225```typescript theme={null}

1226type SessionEndHookInput = BaseHookInput & {

1227 hook_event_name: "SessionEnd";

1228 reason: ExitReason; // Cadena de matriz EXIT_REASONS

1229};

1230```

1231 

1232#### `StopHookInput`

1233 

1234```typescript theme={null}

1235type StopHookInput = BaseHookInput & {

1236 hook_event_name: "Stop";

1237 stop_hook_active: boolean;

1238 last_assistant_message?: string;

1239};

1240```

1241 

1242#### `SubagentStartHookInput`

1243 

1244```typescript theme={null}

1245type SubagentStartHookInput = BaseHookInput & {

1246 hook_event_name: "SubagentStart";

1247 agent_id: string;

1248 agent_type: string;

1249};

1250```

1251 

1252#### `SubagentStopHookInput`

1253 

1254```typescript theme={null}

1255type SubagentStopHookInput = BaseHookInput & {

1256 hook_event_name: "SubagentStop";

1257 stop_hook_active: boolean;

1258 agent_id: string;

1259 agent_transcript_path: string;

1260 agent_type: string;

1261 last_assistant_message?: string;

1262};

1263```

1264 

1265#### `PreCompactHookInput`

1266 

1267```typescript theme={null}

1268type PreCompactHookInput = BaseHookInput & {

1269 hook_event_name: "PreCompact";

1270 trigger: "manual" | "auto";

1271 custom_instructions: string | null;

1272};

1273```

1274 

1275#### `PermissionRequestHookInput`

1276 

1277```typescript theme={null}

1278type PermissionRequestHookInput = BaseHookInput & {

1279 hook_event_name: "PermissionRequest";

1280 tool_name: string;

1281 tool_input: unknown;

1282 permission_suggestions?: PermissionUpdate[];

1283};

1284```

1285 

1286#### `SetupHookInput`

1287 

1288```typescript theme={null}

1289type SetupHookInput = BaseHookInput & {

1290 hook_event_name: "Setup";

1291 trigger: "init" | "maintenance";

1292};

1293```

1294 

1295#### `TeammateIdleHookInput`

1296 

1297```typescript theme={null}

1298type TeammateIdleHookInput = BaseHookInput & {

1299 hook_event_name: "TeammateIdle";

1300 teammate_name: string;

1301 team_name: string;

1302};

1303```

1304 

1305#### `TaskCompletedHookInput`

1306 

1307```typescript theme={null}

1308type TaskCompletedHookInput = BaseHookInput & {

1309 hook_event_name: "TaskCompleted";

1310 task_id: string;

1311 task_subject: string;

1312 task_description?: string;

1313 teammate_name?: string;

1314 team_name?: string;

1315};

1316```

1317 

1318#### `ConfigChangeHookInput`

1319 

1320```typescript theme={null}

1321type ConfigChangeHookInput = BaseHookInput & {

1322 hook_event_name: "ConfigChange";

1323 source:

1324 | "user_settings"

1325 | "project_settings"

1326 | "local_settings"

1327 | "policy_settings"

1328 | "skills";

1329 file_path?: string;

1330};

1331```

1332 

1333#### `WorktreeCreateHookInput`

1334 

1335```typescript theme={null}

1336type WorktreeCreateHookInput = BaseHookInput & {

1337 hook_event_name: "WorktreeCreate";

1338 name: string;

1339};

1340```

1341 

1342#### `WorktreeRemoveHookInput`

1343 

1344```typescript theme={null}

1345type WorktreeRemoveHookInput = BaseHookInput & {

1346 hook_event_name: "WorktreeRemove";

1347 worktree_path: string;

1348};

1349```

1350 

1351### `HookJSONOutput`

1352 

1353Valor de retorno de hook.

1354 

1355```typescript theme={null}

1356type HookJSONOutput = AsyncHookJSONOutput | SyncHookJSONOutput;

1357```

1358 

1359#### `AsyncHookJSONOutput`

1360 

1361```typescript theme={null}

1362type AsyncHookJSONOutput = {

1363 async: true;

1364 asyncTimeout?: number;

1365};

1366```

1367 

1368#### `SyncHookJSONOutput`

1369 

1370```typescript theme={null}

1371type SyncHookJSONOutput = {

1372 continue?: boolean;

1373 suppressOutput?: boolean;

1374 stopReason?: string;

1375 decision?: "approve" | "block";

1376 systemMessage?: string;

1377 reason?: string;

1378 hookSpecificOutput?:

1379 | {

1380 hookEventName: "PreToolUse";

1381 permissionDecision?: "allow" | "deny" | "ask" | "defer";

1382 permissionDecisionReason?: string;

1383 updatedInput?: Record<string, unknown>;

1384 additionalContext?: string;

1385 }

1386 | {

1387 hookEventName: "UserPromptSubmit";

1388 additionalContext?: string;

1389 }

1390 | {

1391 hookEventName: "SessionStart";

1392 additionalContext?: string;

1393 }

1394 | {

1395 hookEventName: "Setup";

1396 additionalContext?: string;

1397 }

1398 | {

1399 hookEventName: "SubagentStart";

1400 additionalContext?: string;

1401 }

1402 | {

1403 hookEventName: "PostToolUse";

1404 additionalContext?: string;

1405 updatedToolOutput?: unknown;

1406 /** @deprecated Use `updatedToolOutput`, which works for all tools. */

1407 updatedMCPToolOutput?: unknown;

1408 }

1409 | {

1410 hookEventName: "PostToolUseFailure";

1411 additionalContext?: string;

1412 }

1413 | {

1414 hookEventName: "PostToolBatch";

1415 additionalContext?: string;

1416 }

1417 | {

1418 hookEventName: "Notification";

1419 additionalContext?: string;

1420 }

1421 | {

1422 hookEventName: "PermissionRequest";

1423 decision:

1424 | {

1425 behavior: "allow";

1426 updatedInput?: Record<string, unknown>;

1427 updatedPermissions?: PermissionUpdate[];

1428 }

1429 | {

1430 behavior: "deny";

1431 message?: string;

1432 interrupt?: boolean;

1433 };

1434 };

1435};

1436```

1437 

1438## Tipos de Entrada de Herramienta

1439 

1440Documentación de esquemas de entrada para todas las herramientas integradas de Claude Code. Estos tipos se exportan desde `@anthropic-ai/claude-agent-sdk` y se pueden usar para interacciones de herramientas seguras de tipos.

1441 

1442### `ToolInputSchemas`

1443 

1444Unión de todos los tipos de entrada de herramienta, exportados desde `@anthropic-ai/claude-agent-sdk`.

1445 

1446```typescript theme={null}

1447type ToolInputSchemas =

1448 | AgentInput

1449 | AskUserQuestionInput

1450 | BashInput

1451 | TaskOutputInput

1452 | EnterWorktreeInput

1453 | ExitPlanModeInput

1454 | FileEditInput

1455 | FileReadInput

1456 | FileWriteInput

1457 | GlobInput

1458 | GrepInput

1459 | ListMcpResourcesInput

1460 | McpInput

1461 | MonitorInput

1462 | NotebookEditInput

1463 | ReadMcpResourceInput

1464 | SubscribeMcpResourceInput

1465 | SubscribePollingInput

1466 | TaskStopInput

1467 | TodoWriteInput

1468 | UnsubscribeMcpResourceInput

1469 | UnsubscribePollingInput

1470 | WebFetchInput

1471 | WebSearchInput;

1472```

1473 

1474### Agent

1475 

1476**Nombre de herramienta:** `Agent` (anteriormente `Task`, que aún se acepta como alias)

1477 

1478```typescript theme={null}

1479type AgentInput = {

1480 description: string;

1481 prompt: string;

1482 subagent_type: string;

1483 model?: "sonnet" | "opus" | "haiku";

1484 resume?: string;

1485 run_in_background?: boolean;

1486 max_turns?: number;

1487 name?: string;

1488 team_name?: string;

1489 mode?: "acceptEdits" | "bypassPermissions" | "default" | "dontAsk" | "plan";

1490 isolation?: "worktree";

1491};

1492```

1493 

1494Lanza un nuevo agente para manejar tareas complejas de múltiples pasos de forma autónoma.

1495 

1496### AskUserQuestion

1497 

1498**Nombre de herramienta:** `AskUserQuestion`

1499 

1500```typescript theme={null}

1501type AskUserQuestionInput = {

1502 questions: Array<{

1503 question: string;

1504 header: string;

1505 options: Array<{ label: string; description: string; preview?: string }>;

1506 multiSelect: boolean;

1507 }>;

1508};

1509```

1510 

1511Hace preguntas aclaratorias al usuario durante la ejecución. Vea [Manejar aprobaciones e entrada del usuario](/es/agent-sdk/user-input#handle-clarifying-questions) para detalles de uso.

1512 

1513### Bash

1514 

1515**Nombre de herramienta:** `Bash`

1516 

1517```typescript theme={null}

1518type BashInput = {

1519 command: string;

1520 timeout?: number;

1521 description?: string;

1522 run_in_background?: boolean;

1523 dangerouslyDisableSandbox?: boolean;

1524};

1525```

1526 

1527Ejecuta comandos bash en una sesión de shell persistente con tiempo de espera opcional y ejecución en segundo plano.

1528 

1529### Monitor

1530 

1531**Nombre de herramienta:** `Monitor`

1532 

1533```typescript theme={null}

1534type MonitorInput = {

1535 command: string;

1536 description: string;

1537 timeout_ms?: number;

1538 persistent?: boolean;

1539};

1540```

1541 

1542Ejecuta un script de fondo y entrega cada línea de stdout a Claude como un evento para que pueda reaccionar sin sondeo. Establezca `persistent: true` para vigilancias de duración de sesión como colas de registro. Monitor sigue las mismas reglas de permiso que Bash. Vea la [referencia de herramienta Monitor](/es/tools-reference#monitor-tool) para comportamiento y disponibilidad de proveedor.

1543 

1544### TaskOutput

1545 

1546**Nombre de herramienta:** `TaskOutput`

1547 

1548```typescript theme={null}

1549type TaskOutputInput = {

1550 task_id: string;

1551 block: boolean;

1552 timeout: number;

1553};

1554```

1555 

1556Recupera salida de una tarea de fondo en ejecución o completada.

1557 

1558### Edit

1559 

1560**Nombre de herramienta:** `Edit`

1561 

1562```typescript theme={null}

1563type FileEditInput = {

1564 file_path: string;

1565 old_string: string;

1566 new_string: string;

1567 replace_all?: boolean;

1568};

1569```

1570 

1571Realiza reemplazos de cadena exactos en archivos.

1572 

1573### Read

1574 

1575**Nombre de herramienta:** `Read`

1576 

1577```typescript theme={null}

1578type FileReadInput = {

1579 file_path: string;

1580 offset?: number;

1581 limit?: number;

1582 pages?: string;

1583};

1584```

1585 

1586Lee archivos del sistema de archivos local, incluyendo texto, imágenes, PDFs y cuadernos Jupyter. Use `pages` para rangos de páginas PDF (por ejemplo, `"1-5"`).

1587 

1588### Write

1589 

1590**Nombre de herramienta:** `Write`

1591 

1592```typescript theme={null}

1593type FileWriteInput = {

1594 file_path: string;

1595 content: string;

1596};

1597```

1598 

1599Escribe un archivo en el sistema de archivos local, sobrescribiendo si existe.

1600 

1601### Glob

1602 

1603**Nombre de herramienta:** `Glob`

1604 

1605```typescript theme={null}

1606type GlobInput = {

1607 pattern: string;

1608 path?: string;

1609};

1610```

1611 

1612Coincidencia de patrón de archivo rápida que funciona con cualquier tamaño de base de código.

1613 

1614### Grep

1615 

1616**Nombre de herramienta:** `Grep`

1617 

1618```typescript theme={null}

1619type GrepInput = {

1620 pattern: string;

1621 path?: string;

1622 glob?: string;

1623 type?: string;

1624 output_mode?: "content" | "files_with_matches" | "count";

1625 "-i"?: boolean;

1626 "-n"?: boolean;

1627 "-B"?: number;

1628 "-A"?: number;

1629 "-C"?: number;

1630 context?: number;

1631 head_limit?: number;

1632 offset?: number;

1633 multiline?: boolean;

1634};

1635```

1636 

1637Herramienta de búsqueda poderosa construida en ripgrep con soporte de expresiones regulares.

1638 

1639### TaskStop

1640 

1641**Nombre de herramienta:** `TaskStop`

1642 

1643```typescript theme={null}

1644type TaskStopInput = {

1645 task_id?: string;

1646 shell_id?: string; // Deprecado: use task_id

1647};

1648```

1649 

1650Detiene una tarea de fondo en ejecución o shell por ID.

1651 

1652### NotebookEdit

1653 

1654**Nombre de herramienta:** `NotebookEdit`

1655 

1656```typescript theme={null}

1657type NotebookEditInput = {

1658 notebook_path: string;

1659 cell_id?: string;

1660 new_source: string;

1661 cell_type?: "code" | "markdown";

1662 edit_mode?: "replace" | "insert" | "delete";

1663};

1664```

1665 

1666Edita celdas en archivos de cuaderno Jupyter.

1667 

1668### WebFetch

1669 

1670**Nombre de herramienta:** `WebFetch`

1671 

1672```typescript theme={null}

1673type WebFetchInput = {

1674 url: string;

1675 prompt: string;

1676};

1677```

1678 

1679Obtiene contenido de una URL y lo procesa con un modelo de IA.

1680 

1681### WebSearch

1682 

1683**Nombre de herramienta:** `WebSearch`

1684 

1685```typescript theme={null}

1686type WebSearchInput = {

1687 query: string;

1688 allowed_domains?: string[];

1689 blocked_domains?: string[];

1690};

1691```

1692 

1693Busca en la web y devuelve resultados formateados.

1694 

1695### TodoWrite

1696 

1697**Nombre de herramienta:** `TodoWrite`

1698 

1699```typescript theme={null}

1700type TodoWriteInput = {

1701 todos: Array<{

1702 content: string;

1703 status: "pending" | "in_progress" | "completed";

1704 activeForm: string;

1705 }>;

1706};

1707```

1708 

1709Crea y gestiona una lista de tareas estructurada para rastrear el progreso.

1710 

1711### ExitPlanMode

1712 

1713**Nombre de herramienta:** `ExitPlanMode`

1714 

1715```typescript theme={null}

1716type ExitPlanModeInput = {

1717 allowedPrompts?: Array<{

1718 tool: "Bash";

1719 prompt: string;

1720 }>;

1721};

1722```

1723 

1724Sale del modo de planificación. Opcionalmente especifica permisos basados en mensajes necesarios para implementar el plan.

1725 

1726### ListMcpResources

1727 

1728**Nombre de herramienta:** `ListMcpResources`

1729 

1730```typescript theme={null}

1731type ListMcpResourcesInput = {

1732 server?: string;

1733};

1734```

1735 

1736Enumera recursos MCP disponibles de servidores conectados.

1737 

1738### ReadMcpResource

1739 

1740**Nombre de herramienta:** `ReadMcpResource`

1741 

1742```typescript theme={null}

1743type ReadMcpResourceInput = {

1744 server: string;

1745 uri: string;

1746};

1747```

1748 

1749Lee un recurso MCP específico de un servidor.

1750 

1751### EnterWorktree

1752 

1753**Nombre de herramienta:** `EnterWorktree`

1754 

1755```typescript theme={null}

1756type EnterWorktreeInput = {

1757 name?: string;

1758 path?: string;

1759};

1760```

1761 

1762Crea e ingresa a un worktree git temporal para trabajo aislado. Pase `path` para cambiar a un worktree existente del repositorio actual en lugar de crear uno nuevo. `name` y `path` son mutuamente excluyentes.

1763 

1764## Tipos de Salida de Herramienta

1765 

1766Documentación de esquemas de salida para todas las herramientas integradas de Claude Code. Estos tipos se exportan desde `@anthropic-ai/claude-agent-sdk` y representan los datos de respuesta reales devueltos por cada herramienta.

1767 

1768### `ToolOutputSchemas`

1769 

1770Unión de todos los tipos de salida de herramienta.

1771 

1772```typescript theme={null}

1773type ToolOutputSchemas =

1774 | AgentOutput

1775 | AskUserQuestionOutput

1776 | BashOutput

1777 | EnterWorktreeOutput

1778 | ExitPlanModeOutput

1779 | FileEditOutput

1780 | FileReadOutput

1781 | FileWriteOutput

1782 | GlobOutput

1783 | GrepOutput

1784 | ListMcpResourcesOutput

1785 | MonitorOutput

1786 | NotebookEditOutput

1787 | ReadMcpResourceOutput

1788 | TaskStopOutput

1789 | TodoWriteOutput

1790 | WebFetchOutput

1791 | WebSearchOutput;

1792```

1793 

1794### Agent

1795 

1796**Nombre de herramienta:** `Agent` (anteriormente `Task`, que aún se acepta como alias)

1797 

1798```typescript theme={null}

1799type AgentOutput =

1800 | {

1801 status: "completed";

1802 agentId: string;

1803 content: Array<{ type: "text"; text: string }>;

1804 totalToolUseCount: number;

1805 totalDurationMs: number;

1806 totalTokens: number;

1807 usage: {

1808 input_tokens: number;

1809 output_tokens: number;

1810 cache_creation_input_tokens: number | null;

1811 cache_read_input_tokens: number | null;

1812 server_tool_use: {

1813 web_search_requests: number;

1814 web_fetch_requests: number;

1815 } | null;

1816 service_tier: ("standard" | "priority" | "batch") | null;

1817 cache_creation: {

1818 ephemeral_1h_input_tokens: number;

1819 ephemeral_5m_input_tokens: number;

1820 } | null;

1821 };

1822 prompt: string;

1823 }

1824 | {

1825 status: "async_launched";

1826 agentId: string;

1827 description: string;

1828 prompt: string;

1829 outputFile: string;

1830 canReadOutputFile?: boolean;

1831 }

1832 | {

1833 status: "sub_agent_entered";

1834 description: string;

1835 message: string;

1836 };

1837```

1838 

1839Devuelve el resultado del subagente. Discriminado en el campo `status`: `"completed"` para tareas terminadas, `"async_launched"` para tareas de fondo, y `"sub_agent_entered"` para subagentes interactivos.

1840 

1841### AskUserQuestion

1842 

1843**Nombre de herramienta:** `AskUserQuestion`

1844 

1845```typescript theme={null}

1846type AskUserQuestionOutput = {

1847 questions: Array<{

1848 question: string;

1849 header: string;

1850 options: Array<{ label: string; description: string; preview?: string }>;

1851 multiSelect: boolean;

1852 }>;

1853 answers: Record<string, string>;

1854};

1855```

1856 

1857Devuelve las preguntas hechas y las respuestas del usuario.

1858 

1859### Bash

1860 

1861**Nombre de herramienta:** `Bash`

1862 

1863```typescript theme={null}

1864type BashOutput = {

1865 stdout: string;

1866 stderr: string;

1867 rawOutputPath?: string;

1868 interrupted: boolean;

1869 isImage?: boolean;

1870 backgroundTaskId?: string;

1871 backgroundedByUser?: boolean;

1872 dangerouslyDisableSandbox?: boolean;

1873 returnCodeInterpretation?: string;

1874 structuredContent?: unknown[];

1875 persistedOutputPath?: string;

1876 persistedOutputSize?: number;

1877};

1878```

1879 

1880Devuelve la salida del comando con stdout/stderr divididos. Los comandos de fondo incluyen un `backgroundTaskId`.

1881 

1882### Monitor

1883 

1884**Nombre de herramienta:** `Monitor`

1885 

1886```typescript theme={null}

1887type MonitorOutput = {

1888 taskId: string;

1889 timeoutMs: number;

1890 persistent?: boolean;

1891};

1892```

1893 

1894Devuelve el ID de tarea de fondo para el monitor en ejecución. Use este ID con `TaskStop` para cancelar la vigilancia temprano.

1895 

1896### Edit

1897 

1898**Nombre de herramienta:** `Edit`

1899 

1900```typescript theme={null}

1901type FileEditOutput = {

1902 filePath: string;

1903 oldString: string;

1904 newString: string;

1905 originalFile: string;

1906 structuredPatch: Array<{

1907 oldStart: number;

1908 oldLines: number;

1909 newStart: number;

1910 newLines: number;

1911 lines: string[];

1912 }>;

1913 userModified: boolean;

1914 replaceAll: boolean;

1915 gitDiff?: {

1916 filename: string;

1917 status: "modified" | "added";

1918 additions: number;

1919 deletions: number;

1920 changes: number;

1921 patch: string;

1922 };

1923};

1924```

1925 

1926Devuelve el diff estructurado de la operación de edición.

1927 

1928### Read

1929 

1930**Nombre de herramienta:** `Read`

1931 

1932```typescript theme={null}

1933type FileReadOutput =

1934 | {

1935 type: "text";

1936 file: {

1937 filePath: string;

1938 content: string;

1939 numLines: number;

1940 startLine: number;

1941 totalLines: number;

1942 };

1943 }

1944 | {

1945 type: "image";

1946 file: {

1947 base64: string;

1948 type: "image/jpeg" | "image/png" | "image/gif" | "image/webp";

1949 originalSize: number;

1950 dimensions?: {

1951 originalWidth?: number;

1952 originalHeight?: number;

1953 displayWidth?: number;

1954 displayHeight?: number;

1955 };

1956 };

1957 }

1958 | {

1959 type: "notebook";

1960 file: {

1961 filePath: string;

1962 cells: unknown[];

1963 };

1964 }

1965 | {

1966 type: "pdf";

1967 file: {

1968 filePath: string;

1969 base64: string;

1970 originalSize: number;

1971 };

1972 }

1973 | {

1974 type: "parts";

1975 file: {

1976 filePath: string;

1977 originalSize: number;

1978 count: number;

1979 outputDir: string;

1980 };

1981 };

1982```

1983 

1984Devuelve el contenido del archivo en un formato apropiado para el tipo de archivo. Discriminado en el campo `type`.

1985 

1986### Write

1987 

1988**Nombre de herramienta:** `Write`

1989 

1990```typescript theme={null}

1991type FileWriteOutput = {

1992 type: "create" | "update";

1993 filePath: string;

1994 content: string;

1995 structuredPatch: Array<{

1996 oldStart: number;

1997 oldLines: number;

1998 newStart: number;

1999 newLines: number;

2000 lines: string[];

2001 }>;

2002 originalFile: string | null;

2003 gitDiff?: {

2004 filename: string;

2005 status: "modified" | "added";

2006 additions: number;

2007 deletions: number;

2008 changes: number;

2009 patch: string;

2010 };

2011};

2012```

2013 

2014Devuelve el resultado de escritura con información de diff estructurado.

2015 

2016### Glob

2017 

2018**Nombre de herramienta:** `Glob`

2019 

2020```typescript theme={null}

2021type GlobOutput = {

2022 durationMs: number;

2023 numFiles: number;

2024 filenames: string[];

2025 truncated: boolean;

2026};

2027```

2028 

2029Devuelve rutas de archivo que coinciden con el patrón glob, ordenadas por hora de modificación.

2030 

2031### Grep

2032 

2033**Nombre de herramienta:** `Grep`

2034 

2035```typescript theme={null}

2036type GrepOutput = {

2037 mode?: "content" | "files_with_matches" | "count";

2038 numFiles: number;

2039 filenames: string[];

2040 content?: string;

2041 numLines?: number;

2042 numMatches?: number;

2043 appliedLimit?: number;

2044 appliedOffset?: number;

2045};

2046```

2047 

2048Devuelve resultados de búsqueda. La forma varía por `mode`: lista de archivos, contenido con coincidencias o conteos de coincidencias.

2049 

2050### TaskStop

2051 

2052**Nombre de herramienta:** `TaskStop`

2053 

2054```typescript theme={null}

2055type TaskStopOutput = {

2056 message: string;

2057 task_id: string;

2058 task_type: string;

2059 command?: string;

2060};

2061```

2062 

2063Devuelve confirmación después de detener la tarea de fondo.

2064 

2065### NotebookEdit

2066 

2067**Nombre de herramienta:** `NotebookEdit`

2068 

2069```typescript theme={null}

2070type NotebookEditOutput = {

2071 new_source: string;

2072 cell_id?: string;

2073 cell_type: "code" | "markdown";

2074 language: string;

2075 edit_mode: string;

2076 error?: string;

2077 notebook_path: string;

2078 original_file: string;

2079 updated_file: string;

2080};

2081```

2082 

2083Devuelve el resultado de la edición del cuaderno con contenido de archivo original y actualizado.

2084 

2085### WebFetch

2086 

2087**Nombre de herramienta:** `WebFetch`

2088 

2089```typescript theme={null}

2090type WebFetchOutput = {

2091 bytes: number;

2092 code: number;

2093 codeText: string;

2094 result: string;

2095 durationMs: number;

2096 url: string;

2097};

2098```

2099 

2100Devuelve el contenido obtenido con estado HTTP y metadatos.

2101 

2102### WebSearch

2103 

2104**Nombre de herramienta:** `WebSearch`

2105 

2106```typescript theme={null}

2107type WebSearchOutput = {

2108 query: string;

2109 results: Array<

2110 | {

2111 tool_use_id: string;

2112 content: Array<{ title: string; url: string }>;

2113 }

2114 | string

2115 >;

2116 durationSeconds: number;

2117};

2118```

2119 

2120Devuelve resultados de búsqueda de la web.

2121 

2122### TodoWrite

2123 

2124**Nombre de herramienta:** `TodoWrite`

2125 

2126```typescript theme={null}

2127type TodoWriteOutput = {

2128 oldTodos: Array<{

2129 content: string;

2130 status: "pending" | "in_progress" | "completed";

2131 activeForm: string;

2132 }>;

2133 newTodos: Array<{

2134 content: string;

2135 status: "pending" | "in_progress" | "completed";

2136 activeForm: string;

2137 }>;

2138};

2139```

2140 

2141Devuelve las listas de tareas anteriores y actualizadas.

2142 

2143### ExitPlanMode

2144 

2145**Nombre de herramienta:** `ExitPlanMode`

2146 

2147```typescript theme={null}

2148type ExitPlanModeOutput = {

2149 plan: string | null;

2150 isAgent: boolean;

2151 filePath?: string;

2152 hasTaskTool?: boolean;

2153 awaitingLeaderApproval?: boolean;

2154 requestId?: string;

2155};

2156```

2157 

2158Devuelve el estado del plan después de salir del modo de planificación.

2159 

2160### ListMcpResources

2161 

2162**Nombre de herramienta:** `ListMcpResources`

2163 

2164```typescript theme={null}

2165type ListMcpResourcesOutput = Array<{

2166 uri: string;

2167 name: string;

2168 mimeType?: string;

2169 description?: string;

2170 server: string;

2171}>;

2172```

2173 

2174Devuelve una matriz de recursos MCP disponibles.

2175 

2176### ReadMcpResource

2177 

2178**Nombre de herramienta:** `ReadMcpResource`

2179 

2180```typescript theme={null}

2181type ReadMcpResourceOutput = {

2182 contents: Array<{

2183 uri: string;

2184 mimeType?: string;

2185 text?: string;

2186 }>;

2187};

2188```

2189 

2190Devuelve el contenido del recurso MCP solicitado.

2191 

2192### EnterWorktree

2193 

2194**Nombre de herramienta:** `EnterWorktree`

2195 

2196```typescript theme={null}

2197type EnterWorktreeOutput = {

2198 worktreePath: string;

2199 worktreeBranch?: string;

2200 message: string;

2201};

2202```

2203 

2204Devuelve información sobre el worktree git.

2205 

2206## Tipos de Permiso

2207 

2208### `PermissionUpdate`

2209 

2210Operaciones para actualizar permisos.

2211 

2212```typescript theme={null}

2213type PermissionUpdate =

2214 | {

2215 type: "addRules";

2216 rules: PermissionRuleValue[];

2217 behavior: PermissionBehavior;

2218 destination: PermissionUpdateDestination;

2219 }

2220 | {

2221 type: "replaceRules";

2222 rules: PermissionRuleValue[];

2223 behavior: PermissionBehavior;

2224 destination: PermissionUpdateDestination;

2225 }

2226 | {

2227 type: "removeRules";

2228 rules: PermissionRuleValue[];

2229 behavior: PermissionBehavior;

2230 destination: PermissionUpdateDestination;

2231 }

2232 | {

2233 type: "setMode";

2234 mode: PermissionMode;

2235 destination: PermissionUpdateDestination;

2236 }

2237 | {

2238 type: "addDirectories";

2239 directories: string[];

2240 destination: PermissionUpdateDestination;

2241 }

2242 | {

2243 type: "removeDirectories";

2244 directories: string[];

2245 destination: PermissionUpdateDestination;

2246 };

2247```

2248 

2249### `PermissionBehavior`

2250 

2251```typescript theme={null}

2252type PermissionBehavior = "allow" | "deny" | "ask";

2253```

2254 

2255### `PermissionUpdateDestination`

2256 

2257```typescript theme={null}

2258type PermissionUpdateDestination =

2259 | "userSettings" // Configuración global del usuario

2260 | "projectSettings" // Configuración del proyecto por directorio

2261 | "localSettings" // Configuración local gitignored

2262 | "session" // Solo sesión actual

2263 | "cliArg"; // Argumento CLI

2264```

2265 

2266### `PermissionRuleValue`

2267 

2268```typescript theme={null}

2269type PermissionRuleValue = {

2270 toolName: string;

2271 ruleContent?: string;

2272};

2273```

2274 

2275## Otros Tipos

2276 

2277### `ApiKeySource`

2278 

2279```typescript theme={null}

2280type ApiKeySource = "user" | "project" | "org" | "temporary" | "oauth";

2281```

2282 

2283### `SdkBeta`

2284 

2285Características beta disponibles que se pueden habilitar a través de la opción `betas`. Vea [Encabezados Beta](https://platform.claude.com/docs/es/api/beta-headers) para más información.

2286 

2287```typescript theme={null}

2288type SdkBeta = "context-1m-2025-08-07";

2289```

2290 

2291<Warning>

2292 La beta `context-1m-2025-08-07` se retiró a partir del 30 de abril de 2026. Pasar este valor con Claude Sonnet 4.5 o Sonnet 4 no tiene efecto, y las solicitudes que excedan la ventana de contexto estándar de 200k tokens devuelven un error. Para usar una ventana de contexto de 1M tokens, migre a [Claude Sonnet 4.6, Claude Opus 4.6, o Claude Opus 4.7](https://platform.claude.com/docs/es/about-claude/models/overview), que incluyen contexto de 1M a precios estándar sin encabezado beta requerido.

2293</Warning>

2294 

2295### `SlashCommand`

2296 

2297Información sobre un comando slash disponible.

2298 

2299```typescript theme={null}

2300type SlashCommand = {

2301 name: string;

2302 description: string;

2303 argumentHint: string;

2304 aliases?: string[];

2305};

2306```

2307 

2308### `ModelInfo`

2309 

2310Información sobre un modelo disponible.

2311 

2312```typescript theme={null}

2313type ModelInfo = {

2314 value: string;

2315 displayName: string;

2316 description: string;

2317 supportsEffort?: boolean;

2318 supportedEffortLevels?: ("low" | "medium" | "high" | "xhigh" | "max")[];

2319 supportsAdaptiveThinking?: boolean;

2320 supportsFastMode?: boolean;

2321};

2322```

2323 

2324### `AgentInfo`

2325 

2326Información sobre un subagente disponible que se puede invocar a través de la herramienta Agent.

2327 

2328```typescript theme={null}

2329type AgentInfo = {

2330 name: string;

2331 description: string;

2332 model?: string;

2333};

2334```

2335 

2336| Campo | Tipo | Descripción |

2337| :------------ | :-------------------- | :------------------------------------------------------------------------------ |

2338| `name` | `string` | Identificador de tipo de agente (por ejemplo, `"Explore"`, `"general-purpose"`) |

2339| `description` | `string` | Descripción de cuándo usar este agente |

2340| `model` | `string \| undefined` | Alias de modelo que usa este agente. Si se omite, hereda el modelo del padre |

2341 

2342### `McpServerStatus`

2343 

2344Estado de un servidor MCP conectado.

2345 

2346```typescript theme={null}

2347type McpServerStatus = {

2348 name: string;

2349 status: "connected" | "failed" | "needs-auth" | "pending" | "disabled";

2350 serverInfo?: {

2351 name: string;

2352 version: string;

2353 };

2354 error?: string;

2355 config?: McpServerStatusConfig;

2356 scope?: string;

2357 tools?: {

2358 name: string;

2359 description?: string;

2360 annotations?: {

2361 readOnly?: boolean;

2362 destructive?: boolean;

2363 openWorld?: boolean;

2364 };

2365 }[];

2366};

2367```

2368 

2369### `McpServerStatusConfig`

2370 

2371La configuración de un servidor MCP como se reporta por `mcpServerStatus()`. Esta es la unión de todos los tipos de transporte de servidor MCP.

2372 

2373```typescript theme={null}

2374type McpServerStatusConfig =

2375 | McpStdioServerConfig

2376 | McpSSEServerConfig

2377 | McpHttpServerConfig

2378 | McpSdkServerConfig

2379 | McpClaudeAIProxyServerConfig;

2380```

2381 

2382Vea [`McpServerConfig`](#mcp-server-config) para detalles sobre cada tipo de transporte.

2383 

2384### `AccountInfo`

2385 

2386Información de cuenta para el usuario autenticado.

2387 

2388```typescript theme={null}

2389type AccountInfo = {

2390 email?: string;

2391 organization?: string;

2392 subscriptionType?: string;

2393 tokenSource?: string;

2394 apiKeySource?: string;

2395};

2396```

2397 

2398### `ModelUsage`

2399 

2400Estadísticas de uso por modelo devueltas en mensajes de resultado. El valor `costUSD` es una estimación del lado del cliente. Vea [Rastrear costo y uso](/es/agent-sdk/cost-tracking) para advertencias de facturación.

2401 

2402```typescript theme={null}

2403type ModelUsage = {

2404 inputTokens: number;

2405 outputTokens: number;

2406 cacheReadInputTokens: number;

2407 cacheCreationInputTokens: number;

2408 webSearchRequests: number;

2409 costUSD: number;

2410 contextWindow: number;

2411 maxOutputTokens: number;

2412};

2413```

2414 

2415### `ConfigScope`

2416 

2417```typescript theme={null}

2418type ConfigScope = "local" | "user" | "project";

2419```

2420 

2421### `NonNullableUsage`

2422 

2423Una versión de [`Usage`](#usage) con todos los campos anulables hechos no anulables.

2424 

2425```typescript theme={null}

2426type NonNullableUsage = {

2427 [K in keyof Usage]: NonNullable<Usage[K]>;

2428};

2429```

2430 

2431### `Usage`

2432 

2433Estadísticas de uso de tokens (desde `@anthropic-ai/sdk`).

2434 

2435```typescript theme={null}

2436type Usage = {

2437 input_tokens: number | null;

2438 output_tokens: number | null;

2439 cache_creation_input_tokens?: number | null;

2440 cache_read_input_tokens?: number | null;

2441};

2442```

2443 

2444### `CallToolResult`

2445 

2446Tipo de resultado de herramienta MCP (desde `@modelcontextprotocol/sdk/types.js`).

2447 

2448```typescript theme={null}

2449type CallToolResult = {

2450 content: Array<{

2451 type: "text" | "image" | "resource";

2452 // Los campos adicionales varían por tipo

2453 }>;

2454 isError?: boolean;

2455};

2456```

2457 

2458### `ThinkingConfig`

2459 

2460Controla el comportamiento de pensamiento/razonamiento de Claude. Tiene precedencia sobre el `maxThinkingTokens` deprecado.

2461 

2462```typescript theme={null}

2463type ThinkingConfig =

2464 | { type: "adaptive" } // El modelo determina cuándo y cuánto razonar (Opus 4.6+)

2465 | { type: "enabled"; budgetTokens?: number } // Presupuesto de token de pensamiento fijo

2466 | { type: "disabled" }; // Sin pensamiento extendido

2467```

2468 

2469### `SpawnedProcess`

2470 

2471Interfaz para generación de proceso personalizado (usada con la opción `spawnClaudeCodeProcess`). `ChildProcess` ya satisface esta interfaz.

2472 

2473```typescript theme={null}

2474interface SpawnedProcess {

2475 stdin: Writable;

2476 stdout: Readable;

2477 readonly killed: boolean;

2478 readonly exitCode: number | null;

2479 kill(signal: NodeJS.Signals): boolean;

2480 on(

2481 event: "exit",

2482 listener: (code: number | null, signal: NodeJS.Signals | null) => void

2483 ): void;

2484 on(event: "error", listener: (error: Error) => void): void;

2485 once(

2486 event: "exit",

2487 listener: (code: number | null, signal: NodeJS.Signals | null) => void

2488 ): void;

2489 once(event: "error", listener: (error: Error) => void): void;

2490 off(

2491 event: "exit",

2492 listener: (code: number | null, signal: NodeJS.Signals | null) => void

2493 ): void;

2494 off(event: "error", listener: (error: Error) => void): void;

2495}

2496```

2497 

2498### `SpawnOptions`

2499 

2500Opciones pasadas a la función de generación personalizada.

2501 

2502```typescript theme={null}

2503interface SpawnOptions {

2504 command: string;

2505 args: string[];

2506 cwd?: string;

2507 env: Record<string, string | undefined>;

2508 signal: AbortSignal;

2509}

2510```

2511 

2512### `McpSetServersResult`

2513 

2514Resultado de una operación `setMcpServers()`.

2515 

2516```typescript theme={null}

2517type McpSetServersResult = {

2518 added: string[];

2519 removed: string[];

2520 errors: Record<string, string>;

2521};

2522```

2523 

2524### `RewindFilesResult`

2525 

2526Resultado de una operación `rewindFiles()`.

2527 

2528```typescript theme={null}

2529type RewindFilesResult = {

2530 canRewind: boolean;

2531 error?: string;

2532 filesChanged?: string[];

2533 insertions?: number;

2534 deletions?: number;

2535};

2536```

2537 

2538### `SDKStatusMessage`

2539 

2540Mensaje de actualización de estado (por ejemplo, compactación).

2541 

2542```typescript theme={null}

2543type SDKStatusMessage = {

2544 type: "system";

2545 subtype: "status";

2546 status: "compacting" | null;

2547 permissionMode?: PermissionMode;

2548 uuid: UUID;

2549 session_id: string;

2550};

2551```

2552 

2553### `SDKTaskNotificationMessage`

2554 

2555Notificación cuando una tarea de fondo se completa, falla o se detiene. Las tareas de fondo incluyen comandos Bash `run_in_background`, vigilancias [Monitor](#monitor) y subagentes de fondo.

2556 

2557```typescript theme={null}

2558type SDKTaskNotificationMessage = {

2559 type: "system";

2560 subtype: "task_notification";

2561 task_id: string;

2562 tool_use_id?: string;

2563 status: "completed" | "failed" | "stopped";

2564 output_file: string;

2565 summary: string;

2566 usage?: {

2567 total_tokens: number;

2568 tool_uses: number;

2569 duration_ms: number;

2570 };

2571 uuid: UUID;

2572 session_id: string;

2573};

2574```

2575 

2576### `SDKToolUseSummaryMessage`

2577 

2578Resumen del uso de herramientas en una conversación.

2579 

2580```typescript theme={null}

2581type SDKToolUseSummaryMessage = {

2582 type: "tool_use_summary";

2583 summary: string;

2584 preceding_tool_use_ids: string[];

2585 uuid: UUID;

2586 session_id: string;

2587};

2588```

2589 

2590### `SDKHookStartedMessage`

2591 

2592Se emite cuando un hook comienza a ejecutarse.

2593 

2594```typescript theme={null}

2595type SDKHookStartedMessage = {

2596 type: "system";

2597 subtype: "hook_started";

2598 hook_id: string;

2599 hook_name: string;

2600 hook_event: string;

2601 uuid: UUID;

2602 session_id: string;

2603};

2604```

2605 

2606### `SDKHookProgressMessage`

2607 

2608Se emite mientras un hook se está ejecutando, con salida de stdout/stderr.

2609 

2610```typescript theme={null}

2611type SDKHookProgressMessage = {

2612 type: "system";

2613 subtype: "hook_progress";

2614 hook_id: string;

2615 hook_name: string;

2616 hook_event: string;

2617 stdout: string;

2618 stderr: string;

2619 output: string;

2620 uuid: UUID;

2621 session_id: string;

2622};

2623```

2624 

2625### `SDKHookResponseMessage`

2626 

2627Se emite cuando un hook termina de ejecutarse.

2628 

2629```typescript theme={null}

2630type SDKHookResponseMessage = {

2631 type: "system";

2632 subtype: "hook_response";

2633 hook_id: string;

2634 hook_name: string;

2635 hook_event: string;

2636 output: string;

2637 stdout: string;

2638 stderr: string;

2639 exit_code?: number;

2640 outcome: "success" | "error" | "cancelled";

2641 uuid: UUID;

2642 session_id: string;

2643};

2644```

2645 

2646### `SDKToolProgressMessage`

2647 

2648Se emite periódicamente mientras se ejecuta una herramienta para indicar progreso.

2649 

2650```typescript theme={null}

2651type SDKToolProgressMessage = {

2652 type: "tool_progress";

2653 tool_use_id: string;

2654 tool_name: string;

2655 parent_tool_use_id: string | null;

2656 elapsed_time_seconds: number;

2657 task_id?: string;

2658 uuid: UUID;

2659 session_id: string;

2660};

2661```

2662 

2663### `SDKAuthStatusMessage`

2664 

2665Se emite durante flujos de autenticación.

2666 

2667```typescript theme={null}

2668type SDKAuthStatusMessage = {

2669 type: "auth_status";

2670 isAuthenticating: boolean;

2671 output: string[];

2672 error?: string;

2673 uuid: UUID;

2674 session_id: string;

2675};

2676```

2677 

2678### `SDKTaskStartedMessage`

2679 

2680Se emite cuando comienza una tarea de fondo. El campo `task_type` es `"local_bash"` para comandos Bash de fondo y vigilancias [Monitor](#monitor), `"local_agent"` para subagentes, o `"remote_agent"`.

2681 

2682```typescript theme={null}

2683type SDKTaskStartedMessage = {

2684 type: "system";

2685 subtype: "task_started";

2686 task_id: string;

2687 tool_use_id?: string;

2688 description: string;

2689 task_type?: string;

2690 uuid: UUID;

2691 session_id: string;

2692};

2693```

2694 

2695### `SDKTaskProgressMessage`

2696 

2697Se emite periódicamente mientras se ejecuta una tarea de fondo.

2698 

2699```typescript theme={null}

2700type SDKTaskProgressMessage = {

2701 type: "system";

2702 subtype: "task_progress";

2703 task_id: string;

2704 tool_use_id?: string;

2705 description: string;

2706 usage: {

2707 total_tokens: number;

2708 tool_uses: number;

2709 duration_ms: number;

2710 };

2711 last_tool_name?: string;

2712 uuid: UUID;

2713 session_id: string;

2714};

2715```

2716 

2717### `SDKTaskUpdatedMessage`

2718 

2719Se emite cuando el estado de una tarea de fondo cambia, como cuando transiciona de `running` a `completed`. Combine `patch` en su mapa de tareas local con clave `task_id`. El campo `end_time` es una marca de tiempo de época Unix en milisegundos, comparable con `Date.now()`.

2720 

2721```typescript theme={null}

2722type SDKTaskUpdatedMessage = {

2723 type: "system";

2724 subtype: "task_updated";

2725 task_id: string;

2726 patch: {

2727 status?: "pending" | "running" | "completed" | "failed" | "killed";

2728 description?: string;

2729 end_time?: number;

2730 total_paused_ms?: number;

2731 error?: string;

2732 is_backgrounded?: boolean;

2733 };

2734 uuid: UUID;

2735 session_id: string;

2736};

2737```

2738 

2739### `SDKFilesPersistedEvent`

2740 

2741Se emite cuando los puntos de control de archivo se persisten en el disco.

2742 

2743```typescript theme={null}

2744type SDKFilesPersistedEvent = {

2745 type: "system";

2746 subtype: "files_persisted";

2747 files: { filename: string; file_id: string }[];

2748 failed: { filename: string; error: string }[];

2749 processed_at: string;

2750 uuid: UUID;

2751 session_id: string;

2752};

2753```

2754 

2755### `SDKRateLimitEvent`

2756 

2757Se emite cuando la sesión encuentra un límite de velocidad.

2758 

2759```typescript theme={null}

2760type SDKRateLimitEvent = {

2761 type: "rate_limit_event";

2762 rate_limit_info: {

2763 status: "allowed" | "allowed_warning" | "rejected";

2764 resetsAt?: number;

2765 utilization?: number;

2766 };

2767 uuid: UUID;

2768 session_id: string;

2769};

2770```

2771 

2772### `SDKLocalCommandOutputMessage`

2773 

2774Salida de un comando slash local (por ejemplo, `/voice` o `/usage`). Se muestra como texto de estilo asistente en la transcripción.

2775 

2776```typescript theme={null}

2777type SDKLocalCommandOutputMessage = {

2778 type: "system";

2779 subtype: "local_command_output";

2780 content: string;

2781 uuid: UUID;

2782 session_id: string;

2783};

2784```

2785 

2786### `SDKPromptSuggestionMessage`

2787 

2788Se emite después de cada turno cuando `promptSuggestions` está habilitado. Contiene un mensaje de usuario predicho siguiente.

2789 

2790```typescript theme={null}

2791type SDKPromptSuggestionMessage = {

2792 type: "prompt_suggestion";

2793 suggestion: string;

2794 uuid: UUID;

2795 session_id: string;

2796};

2797```

2798 

2799### `AbortError`

2800 

2801Clase de error personalizado para operaciones de aborto.

2802 

2803```typescript theme={null}

2804class AbortError extends Error {}

2805```

2806 

2807## Configuración de Sandbox

2808 

2809### `SandboxSettings`

2810 

2811Configuración para el comportamiento de sandbox. Use esto para habilitar el sandboxing de comandos y configurar restricciones de red mediante programación.

2812 

2813```typescript theme={null}

2814type SandboxSettings = {

2815 enabled?: boolean;

2816 autoAllowBashIfSandboxed?: boolean;

2817 excludedCommands?: string[];

2818 allowUnsandboxedCommands?: boolean;

2819 network?: SandboxNetworkConfig;

2820 filesystem?: SandboxFilesystemConfig;

2821 ignoreViolations?: Record<string, string[]>;

2822 enableWeakerNestedSandbox?: boolean;

2823 ripgrep?: { command: string; args?: string[] };

2824};

2825```

2826 

2827| Propiedad | Tipo | Predeterminado | Descripción |

2828| :-------------------------- | :------------------------------------------------------ | :------------- | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

2829| `enabled` | `boolean` | `false` | Habilite el modo sandbox para la ejecución de comandos |

2830| `autoAllowBashIfSandboxed` | `boolean` | `true` | Auto-apruebe comandos bash cuando el sandbox está habilitado |

2831| `excludedCommands` | `string[]` | `[]` | Comandos que siempre omiten restricciones de sandbox (por ejemplo, `['docker']`). Estos se ejecutan sin sandbox automáticamente sin participación del modelo |

2832| `allowUnsandboxedCommands` | `boolean` | `true` | Permita que el modelo solicite ejecutar comandos fuera del sandbox. Cuando es `true`, el modelo puede establecer `dangerouslyDisableSandbox` en la entrada de herramienta, que se vuelve al [sistema de permisos](#permissions-fallback-for-unsandboxed-commands) |

2833| `network` | [`SandboxNetworkConfig`](#sandbox-network-config) | `undefined` | Configuración de sandbox específica de red |

2834| `filesystem` | [`SandboxFilesystemConfig`](#sandbox-filesystem-config) | `undefined` | Configuración de sandbox específica del sistema de archivos para restricciones de lectura/escritura |

2835| `ignoreViolations` | `Record<string, string[]>` | `undefined` | Mapa de categorías de violación a patrones a ignorar (por ejemplo, `{ file: ['/tmp/*'], network: ['localhost'] }`) |

2836| `enableWeakerNestedSandbox` | `boolean` | `false` | Habilite un sandbox anidado más débil para compatibilidad |

2837| `ripgrep` | `{ command: string; args?: string[] }` | `undefined` | Configuración de binario ripgrep personalizado para entornos sandbox |

2838 

2839#### Ejemplo de uso

2840 

2841```typescript theme={null}

2842import { query } from "@anthropic-ai/claude-agent-sdk";

2843 

2844for await (const message of query({

2845 prompt: "Build and test my project",

2846 options: {

2847 sandbox: {

2848 enabled: true,

2849 autoAllowBashIfSandboxed: true,

2850 network: {

2851 allowLocalBinding: true

2852 }

2853 }

2854 }

2855})) {

2856 if ("result" in message) console.log(message.result);

2857}

2858```

2859 

2860<Warning>

2861 **Seguridad de socket Unix:** La opción `allowUnixSockets` puede otorgar acceso a servicios del sistema poderosos. Por ejemplo, permitir `/var/run/docker.sock` efectivamente otorga acceso completo al sistema host a través de la API de Docker, omitiendo el aislamiento de sandbox. Solo permita sockets Unix que sean estrictamente necesarios y comprenda las implicaciones de seguridad de cada uno.

2862</Warning>

2863 

2864### `SandboxNetworkConfig`

2865 

2866Configuración específica de red para el modo sandbox.

2867 

2868```typescript theme={null}

2869type SandboxNetworkConfig = {

2870 allowedDomains?: string[];

2871 deniedDomains?: string[];

2872 allowManagedDomainsOnly?: boolean;

2873 allowLocalBinding?: boolean;

2874 allowUnixSockets?: string[];

2875 allowAllUnixSockets?: boolean;

2876 httpProxyPort?: number;

2877 socksProxyPort?: number;

2878};

2879```

2880 

2881| Propiedad | Tipo | Predeterminado | Descripción |

2882| :------------------------ | :--------- | :------------- | :------------------------------------------------------------------------------------------------------------- |

2883| `allowedDomains` | `string[]` | `[]` | Nombres de dominio a los que los procesos en sandbox pueden acceder |

2884| `deniedDomains` | `string[]` | `[]` | Nombres de dominio a los que los procesos en sandbox no pueden acceder. Tiene prioridad sobre `allowedDomains` |

2885| `allowManagedDomainsOnly` | `boolean` | `false` | Restrinja el acceso de red solo a los dominios en `allowedDomains` |

2886| `allowLocalBinding` | `boolean` | `false` | Permita que los procesos se vinculen a puertos locales (por ejemplo, para servidores de desarrollo) |

2887| `allowUnixSockets` | `string[]` | `[]` | Rutas de socket Unix a las que los procesos pueden acceder (por ejemplo, socket de Docker) |

2888| `allowAllUnixSockets` | `boolean` | `false` | Permita el acceso a todos los sockets Unix |

2889| `httpProxyPort` | `number` | `undefined` | Puerto proxy HTTP para solicitudes de red |

2890| `socksProxyPort` | `number` | `undefined` | Puerto proxy SOCKS para solicitudes de red |

2891 

2892<Note>

2893 El proxy de sandbox integrado aplica `allowedDomains` basándose en el nombre de host solicitado y no termina ni inspecciona el tráfico TLS, por lo que técnicas como [domain fronting](https://en.wikipedia.org/wiki/Domain_fronting) potencialmente pueden omitirlo. Consulte [Limitaciones de seguridad de sandboxing](/es/sandboxing#security-limitations) para obtener detalles y [Implementación segura](/es/agent-sdk/secure-deployment#traffic-forwarding) para configurar un proxy que termine TLS.

2894</Note>

2895 

2896### `SandboxFilesystemConfig`

2897 

2898Configuración específica del sistema de archivos para el modo sandbox.

2899 

2900```typescript theme={null}

2901type SandboxFilesystemConfig = {

2902 allowWrite?: string[];

2903 denyWrite?: string[];

2904 denyRead?: string[];

2905};

2906```

2907 

2908| Propiedad | Tipo | Predeterminado | Descripción |

2909| :----------- | :--------- | :------------- | :-------------------------------------------------------------- |

2910| `allowWrite` | `string[]` | `[]` | Patrones de ruta de archivo para permitir acceso de escritura a |

2911| `denyWrite` | `string[]` | `[]` | Patrones de ruta de archivo para negar acceso de escritura a |

2912| `denyRead` | `string[]` | `[]` | Patrones de ruta de archivo para negar acceso de lectura a |

2913 

2914### Fallback de Permisos para Comandos Sin Sandbox

2915 

2916Cuando `allowUnsandboxedCommands` está habilitado, el modelo puede solicitar ejecutar comandos fuera del sandbox estableciendo `dangerouslyDisableSandbox: true` en la entrada de herramienta. Estas solicitudes se vuelven al sistema de permisos existente, lo que significa que se invoca su controlador `canUseTool`, permitiéndole implementar lógica de autorización personalizada.

2917 

2918<Note>

2919 **`excludedCommands` vs `allowUnsandboxedCommands`:**

2920 

2921 * `excludedCommands`: Una lista estática de comandos que siempre omiten el sandbox automáticamente (por ejemplo, `['docker']`). El modelo no tiene control sobre esto.

2922 * `allowUnsandboxedCommands`: Permite que el modelo decida en tiempo de ejecución si solicitar ejecución sin sandbox estableciendo `dangerouslyDisableSandbox: true` en la entrada de herramienta.

2923</Note>

2924 

2925```typescript theme={null}

2926import { query } from "@anthropic-ai/claude-agent-sdk";

2927 

2928for await (const message of query({

2929 prompt: "Deploy my application",

2930 options: {

2931 sandbox: {

2932 enabled: true,

2933 allowUnsandboxedCommands: true // El modelo puede solicitar ejecución sin sandbox

2934 },

2935 permissionMode: "default",

2936 canUseTool: async (tool, input) => {

2937 // Verifique si el modelo está solicitando omitir el sandbox

2938 if (tool === "Bash" && input.dangerouslyDisableSandbox) {

2939 // El modelo está solicitando ejecutar este comando fuera del sandbox

2940 console.log(`Unsandboxed command requested: ${input.command}`);

2941 

2942 if (isCommandAuthorized(input.command)) {

2943 return { behavior: "allow" as const, updatedInput: input };

2944 }

2945 return {

2946 behavior: "deny" as const,

2947 message: "Command not authorized for unsandboxed execution"

2948 };

2949 }

2950 return { behavior: "allow" as const, updatedInput: input };

2951 }

2952 }

2953})) {

2954 if ("result" in message) console.log(message.result);

2955}

2956```

2957 

2958Este patrón le permite:

2959 

2960* **Auditar solicitudes del modelo:** Registre cuándo el modelo solicita ejecución sin sandbox

2961* **Implementar listas de permitidos:** Solo permita comandos específicos para ejecutarse sin sandbox

2962* **Agregar flujos de trabajo de aprobación:** Requiera autorización explícita para operaciones privilegiadas

2963 

2964<Warning>

2965 Los comandos que se ejecutan con `dangerouslyDisableSandbox: true` tienen acceso completo al sistema. Asegúrese de que su controlador `canUseTool` valide estas solicitudes cuidadosamente.

2966 

2967 Si `permissionMode` se establece en `bypassPermissions` y `allowUnsandboxedCommands` está habilitado, el modelo puede ejecutar autónomamente comandos fuera del sandbox sin solicitudes de aprobación. Esta combinación efectivamente permite que el modelo escape del aislamiento de sandbox silenciosamente.

2968</Warning>

2969 

2970## Ver también

2971 

2972* [Descripción general del SDK](/es/agent-sdk/overview) - Conceptos generales del SDK

2973* [Referencia del SDK de Python](/es/agent-sdk/python) - Documentación del SDK de Python

2974* [Referencia de CLI](/es/cli-reference) - Interfaz de línea de comandos

2975* [Flujos de trabajo comunes](/es/common-workflows) - Guías paso a paso

Details

1> ## Documentation Index

2> Fetch the complete documentation index at: https://code.claude.com/docs/llms.txt

3> Use this file to discover all available pages before exploring further.

4 

5# Interfaz TypeScript SDK V2 (vista previa)

6 

7> Vista previa del SDK del Agente TypeScript V2 simplificado, con patrones de envío/transmisión basados en sesiones para conversaciones de múltiples turnos.

8 

9<Warning>

10 La interfaz V2 es una **vista previa inestable**. Las API pueden cambiar según los comentarios antes de volverse estables. Algunas características como la bifurcación de sesiones solo están disponibles en el [SDK V1](/es/agent-sdk/typescript).

11</Warning>

12 

13El SDK del Agente TypeScript V2 de Claude elimina la necesidad de generadores asincronos y coordinación de rendimiento. Esto hace que las conversaciones de múltiples turnos sean más simples; en lugar de gestionar el estado del generador entre turnos, cada turno es un ciclo `send()`/`stream()` separado. La superficie de la API se reduce a tres conceptos:

14 

15* `createSession()` / `resumeSession()`: Iniciar o continuar una conversación

16* `session.send()`: Enviar un mensaje

17* `session.stream()`: Obtener la respuesta

18 

19## Instalación

20 

21La interfaz V2 se incluye en el paquete SDK existente:

22 

23```bash theme={null}

24npm install @anthropic-ai/claude-agent-sdk

25```

26 

27<Note>

28 El SDK incluye un binario nativo de Claude Code para su plataforma como una dependencia opcional, por lo que no necesita instalar Claude Code por separado.

29</Note>

30 

31## Inicio rápido

32 

33### Solicitud de un solo turno

34 

35Para consultas simples de un solo turno donde no necesita mantener una sesión, use `unstable_v2_prompt()`. Este ejemplo envía una pregunta matemática y registra la respuesta:

36 

37```typescript theme={null}

38import { unstable_v2_prompt } from "@anthropic-ai/claude-agent-sdk";

39 

40const result = await unstable_v2_prompt("What is 2 + 2?", {

41 model: "claude-opus-4-7"

42});

43if (result.subtype === "success") {

44 console.log(result.result);

45}

46```

47 

48<details>

49 <summary>Vea la misma operación en V1</summary>

50 

51 ```typescript theme={null}

52 import { query } from "@anthropic-ai/claude-agent-sdk";

53 

54 const q = query({

55 prompt: "What is 2 + 2?",

56 options: { model: "claude-opus-4-7" }

57 });

58 

59 for await (const msg of q) {

60 if (msg.type === "result" && msg.subtype === "success") {

61 console.log(msg.result);

62 }

63 }

64 ```

65</details>

66 

67### Sesión básica

68 

69Para interacciones más allá de una solicitud única, cree una sesión. V2 separa el envío y la transmisión en pasos distintos:

70 

71* `send()` envía su mensaje

72* `stream()` transmite la respuesta

73 

74Esta separación explícita facilita agregar lógica entre turnos (como procesar respuestas antes de enviar seguimientos).

75 

76El ejemplo a continuación crea una sesión, envía "¡Hola!" a Claude e imprime la respuesta de texto. Utiliza [`await using`](https://www.typescriptlang.org/docs/handbook/release-notes/typescript-5-2.html#using-declarations-and-explicit-resource-management) (TypeScript 5.2+) para cerrar automáticamente la sesión cuando el bloque sale. También puede llamar a `session.close()` manualmente.

77 

78```typescript theme={null}

79import { unstable_v2_createSession } from "@anthropic-ai/claude-agent-sdk";

80 

81await using session = unstable_v2_createSession({

82 model: "claude-opus-4-7"

83});

84 

85await session.send("Hello!");

86for await (const msg of session.stream()) {

87 // Filter for assistant messages to get human-readable output

88 if (msg.type === "assistant") {

89 const text = msg.message.content

90 .filter((block) => block.type === "text")

91 .map((block) => block.text)

92 .join("");

93 console.log(text);

94 }

95}

96```

97 

98<details>

99 <summary>Vea la misma operación en V1</summary>

100 

101 En V1, tanto la entrada como la salida fluyen a través de un único generador asincrónico. Para una solicitud básica, esto se ve similar, pero agregar lógica de múltiples turnos requiere reestructuración para usar un generador de entrada.

102 

103 ```typescript theme={null}

104 import { query } from "@anthropic-ai/claude-agent-sdk";

105 

106 const q = query({

107 prompt: "Hello!",

108 options: { model: "claude-opus-4-7" }

109 });

110 

111 for await (const msg of q) {

112 if (msg.type === "assistant") {

113 const text = msg.message.content

114 .filter((block) => block.type === "text")

115 .map((block) => block.text)

116 .join("");

117 console.log(text);

118 }

119 }

120 ```

121</details>

122 

123### Conversación de múltiples turnos

124 

125Las sesiones persisten el contexto en múltiples intercambios. Para continuar una conversación, llame a `send()` nuevamente en la misma sesión. Claude recuerda los turnos anteriores.

126 

127Este ejemplo hace una pregunta matemática y luego hace un seguimiento que hace referencia a la respuesta anterior:

128 

129```typescript theme={null}

130import { unstable_v2_createSession } from "@anthropic-ai/claude-agent-sdk";

131 

132await using session = unstable_v2_createSession({

133 model: "claude-opus-4-7"

134});

135 

136// Turn 1

137await session.send("What is 5 + 3?");

138for await (const msg of session.stream()) {

139 // Filter for assistant messages to get human-readable output

140 if (msg.type === "assistant") {

141 const text = msg.message.content

142 .filter((block) => block.type === "text")

143 .map((block) => block.text)

144 .join("");

145 console.log(text);

146 }

147}

148 

149// Turn 2

150await session.send("Multiply that by 2");

151for await (const msg of session.stream()) {

152 if (msg.type === "assistant") {

153 const text = msg.message.content

154 .filter((block) => block.type === "text")

155 .map((block) => block.text)

156 .join("");

157 console.log(text);

158 }

159}

160```

161 

162<details>

163 <summary>Vea la misma operación en V1</summary>

164 

165 ```typescript theme={null}

166 import { query } from "@anthropic-ai/claude-agent-sdk";

167 

168 // Must create an async iterable to feed messages

169 async function* createInputStream() {

170 yield {

171 type: "user",

172 session_id: "",

173 message: { role: "user", content: [{ type: "text", text: "What is 5 + 3?" }] },

174 parent_tool_use_id: null

175 };

176 // Must coordinate when to yield next message

177 yield {

178 type: "user",

179 session_id: "",

180 message: { role: "user", content: [{ type: "text", text: "Multiply by 2" }] },

181 parent_tool_use_id: null

182 };

183 }

184 

185 const q = query({

186 prompt: createInputStream(),

187 options: { model: "claude-opus-4-7" }

188 });

189 

190 for await (const msg of q) {

191 if (msg.type === "assistant") {

192 const text = msg.message.content

193 .filter((block) => block.type === "text")

194 .map((block) => block.text)

195 .join("");

196 console.log(text);

197 }

198 }

199 ```

200</details>

201 

202### Reanudación de sesión

203 

204Si tiene un ID de sesión de una interacción anterior, puede reanudarlo más tarde. Esto es útil para flujos de trabajo de larga duración o cuando necesita persistir conversaciones entre reinicios de aplicaciones.

205 

206Este ejemplo crea una sesión, almacena su ID, la cierra y luego reanuda la conversación:

207 

208```typescript theme={null}

209import {

210 unstable_v2_createSession,

211 unstable_v2_resumeSession,

212 type SDKMessage

213} from "@anthropic-ai/claude-agent-sdk";

214 

215// Helper to extract text from assistant messages

216function getAssistantText(msg: SDKMessage): string | null {

217 if (msg.type !== "assistant") return null;

218 return msg.message.content

219 .filter((block) => block.type === "text")

220 .map((block) => block.text)

221 .join("");

222}

223 

224// Create initial session and have a conversation

225const session = unstable_v2_createSession({

226 model: "claude-opus-4-7"

227});

228 

229await session.send("Remember this number: 42");

230 

231// Get the session ID from any received message

232let sessionId: string | undefined;

233for await (const msg of session.stream()) {

234 sessionId = msg.session_id;

235 const text = getAssistantText(msg);

236 if (text) console.log("Initial response:", text);

237}

238 

239console.log("Session ID:", sessionId);

240session.close();

241 

242// Later: resume the session using the stored ID

243await using resumedSession = unstable_v2_resumeSession(sessionId!, {

244 model: "claude-opus-4-7"

245});

246 

247await resumedSession.send("What number did I ask you to remember?");

248for await (const msg of resumedSession.stream()) {

249 const text = getAssistantText(msg);

250 if (text) console.log("Resumed response:", text);

251}

252```

253 

254<details>

255 <summary>Vea la misma operación en V1</summary>

256 

257 ```typescript theme={null}

258 import { query } from "@anthropic-ai/claude-agent-sdk";

259 

260 // Create initial session

261 const initialQuery = query({

262 prompt: "Remember this number: 42",

263 options: { model: "claude-opus-4-7" }

264 });

265 

266 // Get session ID from any message

267 let sessionId: string | undefined;

268 for await (const msg of initialQuery) {

269 sessionId = msg.session_id;

270 if (msg.type === "assistant") {

271 const text = msg.message.content

272 .filter((block) => block.type === "text")

273 .map((block) => block.text)

274 .join("");

275 console.log("Initial response:", text);

276 }

277 }

278 

279 console.log("Session ID:", sessionId);

280 

281 // Later: resume the session

282 const resumedQuery = query({

283 prompt: "What number did I ask you to remember?",

284 options: {

285 model: "claude-opus-4-7",

286 resume: sessionId

287 }

288 });

289 

290 for await (const msg of resumedQuery) {

291 if (msg.type === "assistant") {

292 const text = msg.message.content

293 .filter((block) => block.type === "text")

294 .map((block) => block.text)

295 .join("");

296 console.log("Resumed response:", text);

297 }

298 }

299 ```

300</details>

301 

302### Limpieza

303 

304Las sesiones se pueden cerrar manualmente o automáticamente usando [`await using`](https://www.typescriptlang.org/docs/handbook/release-notes/typescript-5-2.html#using-declarations-and-explicit-resource-management), una característica de TypeScript 5.2+ para la limpieza automática de recursos. Si está utilizando una versión anterior de TypeScript o encuentra problemas de compatibilidad, use la limpieza manual en su lugar.

305 

306**Limpieza automática (TypeScript 5.2+):**

307 

308```typescript theme={null}

309import { unstable_v2_createSession } from "@anthropic-ai/claude-agent-sdk";

310 

311await using session = unstable_v2_createSession({

312 model: "claude-opus-4-7"

313});

314// Session closes automatically when the block exits

315```

316 

317**Limpieza manual:**

318 

319```typescript theme={null}

320import { unstable_v2_createSession } from "@anthropic-ai/claude-agent-sdk";

321 

322const session = unstable_v2_createSession({

323 model: "claude-opus-4-7"

324});

325// ... use the session ...

326session.close();

327```

328 

329## Referencia de API

330 

331### `unstable_v2_createSession()`

332 

333Crea una nueva sesión para conversaciones de múltiples turnos.

334 

335```typescript theme={null}

336function unstable_v2_createSession(options: {

337 model: string;

338 // Additional options supported

339}): SDKSession;

340```

341 

342### `unstable_v2_resumeSession()`

343 

344Reanuda una sesión existente por ID.

345 

346```typescript theme={null}

347function unstable_v2_resumeSession(

348 sessionId: string,

349 options: {

350 model: string;

351 // Additional options supported

352 }

353): SDKSession;

354```

355 

356### `unstable_v2_prompt()`

357 

358Función de conveniencia de un solo turno para consultas de un solo turno.

359 

360```typescript theme={null}

361function unstable_v2_prompt(

362 prompt: string,

363 options: {

364 model: string;

365 // Additional options supported

366 }

367): Promise<SDKResultMessage>;

368```

369 

370### Interfaz SDKSession

371 

372```typescript theme={null}

373interface SDKSession {

374 readonly sessionId: string;

375 send(message: string | SDKUserMessage): Promise<void>;

376 stream(): AsyncGenerator<SDKMessage, void>;

377 close(): void;

378}

379```

380 

381## Disponibilidad de características

382 

383No todas las características de V1 están disponibles en V2 aún. Lo siguiente requiere usar el [SDK V1](/es/agent-sdk/typescript):

384 

385* Bifurcación de sesiones (opción `forkSession`)

386* Algunos patrones avanzados de entrada de transmisión

387 

388## Comentarios

389 

390Comparta sus comentarios sobre la interfaz V2 antes de que se vuelva estable. Informe de problemas y sugerencias a través de [GitHub Issues](https://github.com/anthropics/claude-code/issues).

391 

392## Véase también

393 

394* [Referencia del SDK TypeScript (V1)](/es/agent-sdk/typescript) - Documentación completa del SDK V1

395* [Descripción general del SDK](/es/agent-sdk/overview) - Conceptos generales del SDK

396* [Ejemplos de V2 en GitHub](https://github.com/anthropics/claude-agent-sdk-demos/tree/main/hello-world-v2) - Ejemplos de código funcionales

agent-teams.md +427 −0 created

Details

1> ## Documentation Index

2> Fetch the complete documentation index at: https://code.claude.com/docs/llms.txt

3> Use this file to discover all available pages before exploring further.

4 

5# Orquestar equipos de sesiones de Claude Code

6 

7> Coordine múltiples instancias de Claude Code trabajando juntas como un equipo, con tareas compartidas, mensajería entre agentes y gestión centralizada.

8 

9<Warning>

10 Los equipos de agentes son experimentales y están deshabilitados por defecto. Habilítelos agregando `CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS` a su [settings.json](/es/settings) o entorno. Los equipos de agentes tienen [limitaciones conocidas](#limitations) alrededor de la reanudación de sesiones, coordinación de tareas y comportamiento de apagado.

11</Warning>

12 

13Los equipos de agentes le permiten coordinar múltiples instancias de Claude Code trabajando juntas. Una sesión actúa como el líder del equipo, coordinando el trabajo, asignando tareas y sintetizando resultados. Los compañeros de equipo trabajan de forma independiente, cada uno en su propia ventana de contexto, y se comunican directamente entre sí.

14 

15A diferencia de los [subagents](/es/sub-agents), que se ejecutan dentro de una única sesión y solo pueden reportar al agente principal, también puede interactuar directamente con compañeros de equipo individuales sin pasar por el líder.

16 

17<Note>

18 Los equipos de agentes requieren Claude Code v2.1.32 o posterior. Verifique su versión con `claude --version`.

19</Note>

20 

21Esta página cubre:

22 

23* [Cuándo usar equipos de agentes](#when-to-use-agent-teams), incluyendo los mejores casos de uso y cómo se comparan con los subagents

24* [Iniciando un equipo](#start-your-first-agent-team)

25* [Controlando compañeros de equipo](#control-your-agent-team), incluyendo modos de visualización, asignación de tareas y delegación

26* [Mejores prácticas para trabajo paralelo](#best-practices)

27 

28## Cuándo usar equipos de agentes

29 

30Los equipos de agentes son más efectivos para tareas donde la exploración paralela agrega valor real. Vea [ejemplos de casos de uso](#use-case-examples) para escenarios completos. Los casos de uso más sólidos son:

31 

32* **Investigación y revisión**: múltiples compañeros de equipo pueden investigar diferentes aspectos de un problema simultáneamente, luego compartir y desafiar los hallazgos de los demás

33* **Nuevos módulos o características**: los compañeros de equipo pueden poseer cada uno una pieza separada sin pisarse mutuamente

34* **Depuración con hipótesis competidoras**: los compañeros de equipo prueban diferentes teorías en paralelo y convergen en la respuesta más rápidamente

35* **Coordinación entre capas**: cambios que abarcan frontend, backend y pruebas, cada uno propiedad de un compañero de equipo diferente

36 

37Los equipos de agentes agregan sobrecarga de coordinación y usan significativamente más tokens que una única sesión. Funcionan mejor cuando los compañeros de equipo pueden operar de forma independiente. Para tareas secuenciales, ediciones del mismo archivo o trabajo con muchas dependencias, una única sesión o [subagents](/es/sub-agents) son más efectivos.

38 

39### Comparar con subagents

40 

41Tanto los equipos de agentes como los [subagents](/es/sub-agents) le permiten paralelizar el trabajo, pero operan de manera diferente. Elija según si sus trabajadores necesitan comunicarse entre sí:

42 

43<Frame caption="Los subagents solo reportan resultados al agente principal y nunca se hablan entre sí. En los equipos de agentes, los compañeros de equipo comparten una lista de tareas, reclaman trabajo y se comunican directamente entre sí.">

44 <img src="https://mintcdn.com/claude-code/nsvRFSDNfpSU5nT7/images/subagents-vs-agent-teams-light.png?fit=max&auto=format&n=nsvRFSDNfpSU5nT7&q=85&s=2f8db9b4f3705dd3ab931fbe2d96e42a" className="dark:hidden" alt="Diagrama comparando arquitecturas de subagent y equipo de agentes. Los subagents son generados por el agente principal, hacen trabajo y reportan resultados. Los equipos de agentes se coordinan a través de una lista de tareas compartida, con compañeros de equipo comunicándose directamente entre sí." width="4245" height="1615" data-path="images/subagents-vs-agent-teams-light.png" />

45 

46 <img src="https://mintcdn.com/claude-code/nsvRFSDNfpSU5nT7/images/subagents-vs-agent-teams-dark.png?fit=max&auto=format&n=nsvRFSDNfpSU5nT7&q=85&s=d573a037540f2ada6a9ae7d8285b46fd" className="hidden dark:block" alt="Diagrama comparando arquitecturas de subagent y equipo de agentes. Los subagents son generados por el agente principal, hacen trabajo y reportan resultados. Los equipos de agentes se coordinan a través de una lista de tareas compartida, con compañeros de equipo comunicándose directamente entre sí." width="4245" height="1615" data-path="images/subagents-vs-agent-teams-dark.png" />

47</Frame>

48 

49| | Subagents | Equipos de agentes |

50| :------------------ | :-------------------------------------------------------------- | :--------------------------------------------------------------- |

51| **Contexto** | Ventana de contexto propia; los resultados regresan al llamador | Ventana de contexto propia; completamente independiente |

52| **Comunicación** | Reportan resultados solo al agente principal | Los compañeros de equipo se envían mensajes directamente |

53| **Coordinación** | El agente principal gestiona todo el trabajo | Lista de tareas compartida con auto-coordinación |

54| **Mejor para** | Tareas enfocadas donde solo importa el resultado | Trabajo complejo que requiere discusión y colaboración |

55| **Costo de tokens** | Menor: resultados resumidos de vuelta al contexto principal | Mayor: cada compañero de equipo es una instancia Claude separada |

56 

57Use subagents cuando necesite trabajadores rápidos y enfocados que reporten. Use equipos de agentes cuando los compañeros de equipo necesiten compartir hallazgos, desafiarse mutuamente y coordinarse por su cuenta.

58 

59## Habilitar equipos de agentes

60 

61Los equipos de agentes están deshabilitados por defecto. Habilítelos configurando la variable de entorno `CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS` a `1`, ya sea en su entorno de shell o a través de [settings.json](/es/settings):

62 

63```json settings.json theme={null}

64{

65 "env": {

66 "CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS": "1"

67 }

68}

69```

70 

71## Inicie su primer equipo de agentes

72 

73Después de habilitar los equipos de agentes, dígale a Claude que cree un equipo de agentes y describa la tarea y la estructura del equipo que desea en lenguaje natural. Claude crea el equipo, genera compañeros de equipo y coordina el trabajo según su indicación.

74 

75Este ejemplo funciona bien porque los tres roles son independientes y pueden explorar el problema sin esperar el uno al otro:

76 

77```text theme={null}

78Estoy diseñando una herramienta CLI que ayuda a los desarrolladores a rastrear

79comentarios TODO en su base de código. Crea un equipo de agentes para explorar

80esto desde diferentes ángulos: un compañero de equipo en UX, uno en arquitectura

81técnica, uno jugando al abogado del diablo.

82```

83 

84A partir de ahí, Claude crea un equipo con una [lista de tareas compartida](/es/interactive-mode#task-list), genera compañeros de equipo para cada perspectiva, los hace explorar el problema, sintetiza hallazgos e intenta [limpiar el equipo](#clean-up-the-team) cuando termina.

85 

86La terminal del líder enumera todos los compañeros de equipo y en qué están trabajando. Use Shift+Down para ciclar a través de compañeros de equipo y enviarles un mensaje directamente. Después del último compañero de equipo, Shift+Down vuelve al líder.

87 

88Si desea que cada compañero de equipo esté en su propio panel dividido, vea [Elegir un modo de visualización](#choose-a-display-mode).

89 

90## Controle su equipo de agentes

91 

92Dígale al líder lo que desea en lenguaje natural. Maneja la coordinación del equipo, asignación de tareas y delegación según sus instrucciones.

93 

94### Elegir un modo de visualización

95 

96Los equipos de agentes admiten dos modos de visualización:

97 

98* **En proceso**: todos los compañeros de equipo se ejecutan dentro de su terminal principal. Use Shift+Down para ciclar a través de compañeros de equipo y escriba para enviarles un mensaje directamente. Funciona en cualquier terminal, sin configuración adicional requerida.

99* **Paneles divididos**: cada compañero de equipo obtiene su propio panel. Puede ver la salida de todos a la vez y hacer clic en un panel para interactuar directamente. Requiere tmux o iTerm2.

100 

101<Note>

102 `tmux` tiene limitaciones conocidas en ciertos sistemas operativos y tradicionalmente funciona mejor en macOS. Usar `tmux -CC` en iTerm2 es el punto de entrada sugerido en `tmux`.

103</Note>

104 

105El valor predeterminado es `"auto"`, que usa paneles divididos si ya está ejecutándose dentro de una sesión tmux, y en proceso de lo contrario. La configuración `"tmux"` habilita el modo de panel dividido y detecta automáticamente si usar tmux o iTerm2 según su terminal. Para anular, configure [`teammateMode`](/es/settings#available-settings) en `~/.claude/settings.json`:

106 

107```json theme={null}

108{

109 "teammateMode": "in-process"

110}

111```

112 

113Para forzar el modo en proceso para una única sesión, páselo como una bandera:

114 

115```bash theme={null}

116claude --teammate-mode in-process

117```

118 

119El modo de panel dividido requiere [tmux](https://github.com/tmux/tmux/wiki) o iTerm2 con la [CLI `it2`](https://github.com/mkusaka/it2). Para instalar manualmente:

120 

121* **tmux**: instale a través del gestor de paquetes de su sistema. Vea la [wiki de tmux](https://github.com/tmux/tmux/wiki/Installing) para instrucciones específicas de la plataforma.

122* **iTerm2**: instale la [CLI `it2`](https://github.com/mkusaka/it2), luego habilite la API de Python en **iTerm2 → Settings → General → Magic → Enable Python API**.

123 

124### Especificar compañeros de equipo y modelos

125 

126Claude decide el número de compañeros de equipo a generar según su tarea, o puede especificar exactamente lo que desea:

127 

128```text theme={null}

129Crea un equipo con 4 compañeros de equipo para refactorizar estos módulos en paralelo.

130Usa Sonnet para cada compañero de equipo.

131```

132 

133### Requerir aprobación de plan para compañeros de equipo

134 

135Para tareas complejas o riesgosas, puede requerir que los compañeros de equipo planifiquen antes de implementar. El compañero de equipo trabaja en modo de plan de solo lectura hasta que el líder apruebe su enfoque:

136 

137```text theme={null}

138Genera un compañero de equipo arquitecto para refactorizar el módulo de autenticación.

139Requiere aprobación de plan antes de que hagan cambios.

140```

141 

142Cuando un compañero de equipo termina de planificar, envía una solicitud de aprobación de plan al líder. El líder revisa el plan y lo aprueba o lo rechaza con retroalimentación. Si se rechaza, el compañero de equipo permanece en modo de plan, revisa según la retroalimentación y reenvía. Una vez aprobado, el compañero de equipo sale del modo de plan y comienza la implementación.

143 

144El líder toma decisiones de aprobación de forma autónoma. Para influir en el juicio del líder, proporcione criterios en su indicación, como "solo aprueba planes que incluyan cobertura de pruebas" o "rechaza planes que modifiquen el esquema de la base de datos".

145 

146### Hable directamente con los compañeros de equipo

147 

148Cada compañero de equipo es una sesión completa e independiente de Claude Code. Puede enviar un mensaje a cualquier compañero de equipo directamente para dar instrucciones adicionales, hacer preguntas de seguimiento o redirigir su enfoque.

149 

150* **Modo en proceso**: use Shift+Down para ciclar a través de compañeros de equipo, luego escriba para enviarles un mensaje. Presione Enter para ver la sesión de un compañero de equipo, luego Escape para interrumpir su turno actual. Presione Ctrl+T para alternar la lista de tareas.

151* **Modo de panel dividido**: haga clic en el panel de un compañero de equipo para interactuar directamente con su sesión. Cada compañero de equipo tiene una vista completa de su propio terminal.

152 

153### Asignar y reclamar tareas

154 

155La lista de tareas compartida coordina el trabajo en todo el equipo. El líder crea tareas y los compañeros de equipo las trabajan. Las tareas tienen tres estados: pendiente, en progreso y completada. Las tareas también pueden depender de otras tareas: una tarea pendiente con dependencias sin resolver no puede ser reclamada hasta que esas dependencias se completen.

156 

157El líder puede asignar tareas explícitamente, o los compañeros de equipo pueden auto-reclamar:

158 

159* **El líder asigna**: dígale al líder qué tarea dar a qué compañero de equipo

160* **Auto-reclamar**: después de terminar una tarea, un compañero de equipo recoge la siguiente tarea sin asignar y sin bloquear por su cuenta

161 

162El reclamo de tareas usa bloqueo de archivos para prevenir condiciones de carrera cuando múltiples compañeros de equipo intentan reclamar la misma tarea simultáneamente.

163 

164### Apagar compañeros de equipo

165 

166Para terminar gracefully la sesión de un compañero de equipo:

167 

168```text theme={null}

169Pídele al compañero de equipo investigador que se apague

170```

171 

172El líder envía una solicitud de apagado. El compañero de equipo puede aprobar, saliendo gracefully, o rechazar con una explicación.

173 

174### Limpiar el equipo

175 

176Cuando haya terminado, pídele al líder que limpie:

177 

178```text theme={null}

179Limpia el equipo

180```

181 

182Esto elimina los recursos compartidos del equipo. Cuando el líder ejecuta la limpieza, verifica si hay compañeros de equipo activos y falla si alguno aún se está ejecutando, así que apáguelos primero.

183 

184<Warning>

185 Siempre use el líder para limpiar. Los compañeros de equipo no deben ejecutar la limpieza porque su contexto de equipo puede no resolverse correctamente, dejando potencialmente recursos en un estado inconsistente.

186</Warning>

187 

188### Aplicar puertas de calidad con hooks

189 

190Use [hooks](/es/hooks) para aplicar reglas cuando los compañeros de equipo terminen el trabajo o las tareas se creen o completen:

191 

192* [`TeammateIdle`](/es/hooks#teammateidle): se ejecuta cuando un compañero de equipo está a punto de quedarse inactivo. Salga con código 2 para enviar retroalimentación y mantener al compañero de equipo trabajando.

193* [`TaskCreated`](/es/hooks#taskcreated): se ejecuta cuando una tarea está siendo creada. Salga con código 2 para prevenir la creación y enviar retroalimentación.

194* [`TaskCompleted`](/es/hooks#taskcompleted): se ejecuta cuando una tarea está siendo marcada como completada. Salga con código 2 para prevenir la finalización y enviar retroalimentación.

195 

196## Cómo funcionan los equipos de agentes

197 

198Esta sección cubre la arquitectura y la mecánica detrás de los equipos de agentes. Si desea comenzar a usarlos, vea [Controle su equipo de agentes](#control-your-agent-team) arriba.

199 

200### Cómo Claude inicia equipos de agentes

201 

202Hay dos formas en que los equipos de agentes se inician:

203 

204* **Usted solicita un equipo**: dé a Claude una tarea que se beneficie del trabajo paralelo y solicite explícitamente un equipo de agentes. Claude crea uno según sus instrucciones.

205* **Claude propone un equipo**: si Claude determina que su tarea se beneficiaría del trabajo paralelo, puede sugerir crear un equipo. Usted confirma antes de que proceda.

206 

207En ambos casos, usted mantiene el control. Claude no creará un equipo sin su aprobación.

208 

209### Arquitectura

210 

211Un equipo de agentes consiste en:

212 

213| Componente | Rol |

214| :----------------------- | :------------------------------------------------------------------------------------------------------- |

215| **Líder del equipo** | La sesión principal de Claude Code que crea el equipo, genera compañeros de equipo y coordina el trabajo |

216| **Compañeros de equipo** | Instancias separadas de Claude Code que cada una trabaja en tareas asignadas |

217| **Lista de tareas** | Lista compartida de elementos de trabajo que los compañeros de equipo reclaman y completan |

218| **Buzón** | Sistema de mensajería para comunicación entre agentes |

219 

220Vea [Elegir un modo de visualización](#choose-a-display-mode) para opciones de configuración de visualización. Los mensajes de los compañeros de equipo llegan al líder automáticamente.

221 

222El sistema gestiona las dependencias de tareas automáticamente. Cuando un compañero de equipo completa una tarea de la que otras tareas dependen, las tareas bloqueadas se desbloquean sin intervención manual.

223 

224Los equipos y tareas se almacenan localmente:

225 

226* **Configuración del equipo**: `~/.claude/teams/{team-name}/config.json`

227* **Lista de tareas**: `~/.claude/tasks/{team-name}/`

228 

229Claude Code genera ambos automáticamente cuando crea un equipo y los actualiza a medida que los compañeros de equipo se unen, se quedan inactivos o se van. La configuración del equipo contiene estado de tiempo de ejecución como IDs de sesión e IDs de panel tmux, así que no la edite manualmente ni la pre-autorice: sus cambios se sobrescriben en la siguiente actualización de estado.

230 

231Para definir roles de compañeros de equipo reutilizables, use [definiciones de subagents](#use-subagent-definitions-for-teammates) en su lugar.

232 

233La configuración del equipo contiene un array `members` con el nombre de cada compañero de equipo, ID de agente y tipo de agente. Los compañeros de equipo pueden leer este archivo para descubrir otros miembros del equipo.

234 

235No hay equivalente a nivel de proyecto de la configuración del equipo. Un archivo como `.claude/teams/teams.json` en su directorio de proyecto no se reconoce como configuración; Claude lo trata como un archivo ordinario.

236 

237### Usar definiciones de subagents para compañeros de equipo

238 

239Al generar un compañero de equipo, puede hacer referencia a un tipo de [subagent](/es/sub-agents) de cualquier [alcance de subagent](/es/sub-agents#choose-the-subagent-scope): proyecto, usuario, plugin o definido por CLI. Esto le permite definir un rol una vez, como un revisor de seguridad o ejecutor de pruebas, y reutilizarlo tanto como un subagent delegado como un compañero de equipo de equipo de agentes.

240 

241Para usar una definición de subagent, mencione por nombre cuando le pida a Claude que genere el compañero de equipo:

242 

243```text theme={null}

244Genera un compañero de equipo usando el tipo de agente security-reviewer para auditar el módulo de autenticación.

245```

246 

247El compañero de equipo honra los campos `tools` y `model` de esa definición, y el cuerpo de la definición se añade al prompt del sistema del compañero de equipo como instrucciones adicionales en lugar de reemplazarlo. Las herramientas de coordinación de equipos como `SendMessage` y las herramientas de gestión de tareas siempre están disponibles para un compañero de equipo incluso cuando `tools` restringe otras herramientas.

248 

249<Note>

250 Los campos `skills` y `mcpServers` en la portada de una definición de subagent no se aplican cuando esa definición se ejecuta como un compañero de equipo. Los compañeros de equipo cargan skills y MCP servers desde su configuración de proyecto y usuario, igual que una sesión regular.

251</Note>

252 

253### Permisos

254 

255Los compañeros de equipo comienzan con la configuración de permisos del líder. Si el líder se ejecuta con `--dangerously-skip-permissions`, todos los compañeros de equipo también lo hacen. Después de generar, puede cambiar los modos de compañeros de equipo individuales, pero no puede establecer modos por compañero de equipo en el momento de la generación.

256 

257### Contexto y comunicación

258 

259Cada compañero de equipo tiene su propia ventana de contexto. Cuando se genera, un compañero de equipo carga el mismo contexto de proyecto que una sesión regular: CLAUDE.md, MCP servers y skills. También recibe la indicación de generación del líder. El historial de conversación del líder no se transfiere.

260 

261**Cómo los compañeros de equipo comparten información:**

262 

263* **Entrega automática de mensajes**: cuando los compañeros de equipo envían mensajes, se entregan automáticamente a los destinatarios. El líder no necesita sondear actualizaciones.

264* **Notificaciones de inactividad**: cuando un compañero de equipo termina y se detiene, notifica automáticamente al líder.

265* **Lista de tareas compartida**: todos los agentes pueden ver el estado de la tarea y reclamar trabajo disponible.

266* **Mensajería de compañeros de equipo**: enviar un mensaje a un compañero de equipo específico por nombre. Para llegar a todos, envíe un mensaje por destinatario.

267 

268El líder asigna a cada compañero de equipo un nombre cuando lo genera, y cualquier compañero de equipo puede enviar un mensaje a otro por ese nombre. Para obtener nombres predecibles que pueda referenciar en indicaciones posteriores, dígale al líder cómo llamar a cada compañero de equipo en su instrucción de generación.

269 

270### Uso de tokens

271 

272Los equipos de agentes usan significativamente más tokens que una única sesión. Cada compañero de equipo tiene su propia ventana de contexto, y el uso de tokens escala con el número de compañeros de equipo activos. Para investigación, revisión y trabajo de nuevas características, los tokens adicionales generalmente valen la pena. Para tareas rutinarias, una única sesión es más rentable. Vea [costos de tokens de equipos de agentes](/es/costs#agent-team-token-costs) para orientación de uso.

273 

274## Ejemplos de casos de uso

275 

276Estos ejemplos muestran cómo los equipos de agentes manejan tareas donde la exploración paralela agrega valor.

277 

278### Ejecutar una revisión de código paralela

279 

280Un único revisor tiende a gravitar hacia un tipo de problema a la vez. Dividir criterios de revisión en dominios independientes significa que la seguridad, el rendimiento y la cobertura de pruebas reciben atención exhaustiva simultáneamente. La indicación asigna a cada compañero de equipo una lente distinta para que no se superpongan:

281 

282```text theme={null}

283Crea un equipo de agentes para revisar la PR #142. Genera tres revisores:

284- Uno enfocado en implicaciones de seguridad

285- Uno verificando impacto de rendimiento

286- Uno validando cobertura de pruebas

287Que cada uno revise e informe hallazgos.

288```

289 

290Cada revisor trabaja desde la misma PR pero aplica un filtro diferente. El líder sintetiza hallazgos en los tres después de que terminen.

291 

292### Investigar con hipótesis competidoras

293 

294Cuando la causa raíz es poco clara, un único agente tiende a encontrar una explicación plausible y dejar de buscar. La indicación lucha contra esto haciendo que los compañeros de equipo sean explícitamente adversarios: el trabajo de cada uno no es solo investigar su propia teoría sino desafiar las de los demás.

295 

296```text theme={null}

297Los usuarios reportan que la aplicación se cierra después de un mensaje en lugar de

298mantenerse conectada. Genera 5 compañeros de equipo de agentes para investigar

299diferentes hipótesis. Haz que se hablen entre sí para intentar refutar las teorías

300de los demás, como un debate científico. Actualiza el documento de hallazgos con

301cualquier consenso que emerja.

302```

303 

304La estructura de debate es el mecanismo clave aquí. La investigación secuencial sufre de anclaje: una vez que se explora una teoría, la investigación posterior está sesgada hacia ella.

305 

306Con múltiples investigadores independientes intentando activamente refutar mutuamente, la teoría que sobrevive es mucho más probable que sea la causa raíz real.

307 

308## Mejores prácticas

309 

310### Dé a los compañeros de equipo suficiente contexto

311 

312Los compañeros de equipo cargan contexto de proyecto automáticamente, incluyendo CLAUDE.md, MCP servers y skills, pero no heredan el historial de conversación del líder. Vea [Contexto y comunicación](#context-and-communication) para detalles. Incluya detalles específicos de la tarea en la indicación de generación:

313 

314```text theme={null}

315Genera un compañero de equipo revisor de seguridad con la indicación: "Revisa el módulo

316de autenticación en src/auth/ para vulnerabilidades de seguridad. Enfócate en manejo

317de tokens, gestión de sesiones y validación de entrada. La aplicación usa tokens JWT

318almacenados en cookies httpOnly. Reporta cualquier problema con calificaciones de

319severidad."

320```

321 

322### Elegir un tamaño de equipo apropiado

323 

324No hay límite duro en el número de compañeros de equipo, pero se aplican restricciones prácticas:

325 

326* **Los costos de tokens escalan linealmente**: cada compañero de equipo tiene su propia ventana de contexto y consume tokens independientemente. Vea [costos de tokens de equipos de agentes](/es/costs#agent-team-token-costs) para detalles.

327* **La sobrecarga de coordinación aumenta**: más compañeros de equipo significa más comunicación, coordinación de tareas y potencial para conflictos

328* **Rendimientos decrecientes**: más allá de cierto punto, compañeros de equipo adicionales no aceleran el trabajo proporcionalmente

329 

330Comience con 3-5 compañeros de equipo para la mayoría de flujos de trabajo. Esto equilibra el trabajo paralelo con coordinación manejable. Los ejemplos en esta guía usan 3-5 compañeros de equipo porque ese rango funciona bien en diferentes tipos de tareas.

331 

332Tener 5-6 [tareas](/es/agent-teams#architecture) por compañero de equipo mantiene a todos productivos sin cambio de contexto excesivo. Si tiene 15 tareas independientes, 3 compañeros de equipo es un buen punto de partida.

333 

334Escale solo cuando el trabajo genuinamente se beneficie de tener compañeros de equipo trabajando simultáneamente. Tres compañeros de equipo enfocados a menudo superan a cinco dispersos.

335 

336### Dimensionar tareas apropiadamente

337 

338* **Demasiado pequeñas**: la sobrecarga de coordinación excede el beneficio

339* **Demasiado grandes**: los compañeros de equipo trabajan demasiado tiempo sin check-ins, aumentando el riesgo de esfuerzo desperdiciado

340* **Justo bien**: unidades auto-contenidas que producen un entregable claro, como una función, un archivo de prueba o una revisión

341 

342<Tip>

343 El líder divide el trabajo en tareas y las asigna a los compañeros de equipo automáticamente. Si no está creando suficientes tareas, pídele que divida el trabajo en piezas más pequeñas. Tener 5-6 tareas por compañero de equipo mantiene a todos productivos y permite al líder reasignar trabajo si alguien se queda atrapado.

344</Tip>

345 

346### Espere a que los compañeros de equipo terminen

347 

348A veces el líder comienza a implementar tareas por sí mismo en lugar de esperar a los compañeros de equipo. Si nota esto:

349 

350```text theme={null}

351Espera a que tus compañeros de equipo completen sus tareas antes de proceder

352```

353 

354### Comience con investigación y revisión

355 

356Si es nuevo en equipos de agentes, comience con tareas que tengan límites claros y no requieran escribir código: revisar una PR, investigar una biblioteca o investigar un error. Estas tareas muestran el valor de la exploración paralela sin los desafíos de coordinación que vienen con la implementación paralela.

357 

358### Evitar conflictos de archivos

359 

360Dos compañeros de equipo editando el mismo archivo lleva a sobrescrituras. Divida el trabajo para que cada compañero de equipo posea un conjunto diferente de archivos.

361 

362### Monitorear y dirigir

363 

364Verifique el progreso de los compañeros de equipo, redirija enfoques que no estén funcionando y sintetice hallazgos a medida que lleguen. Dejar que un equipo se ejecute desatendido durante demasiado tiempo aumenta el riesgo de esfuerzo desperdiciado.

365 

366## Solución de problemas

367 

368### Los compañeros de equipo no aparecen

369 

370Si los compañeros de equipo no aparecen después de que le pida a Claude que cree un equipo:

371 

372* En modo en proceso, los compañeros de equipo pueden ya estar ejecutándose pero no ser visibles. Presione Shift+Down para ciclar a través de compañeros de equipo activos.

373* Verifique que la tarea que le dio a Claude fue lo suficientemente compleja para justificar un equipo. Claude decide si generar compañeros de equipo según la tarea.

374* Si solicitó explícitamente paneles divididos, asegúrese de que tmux esté instalado y disponible en su PATH:

375 ```bash theme={null}

376 which tmux

377 ```

378* Para iTerm2, verifique que la CLI `it2` esté instalada y la API de Python esté habilitada en las preferencias de iTerm2.

379 

380### Demasiados avisos de permisos

381 

382Las solicitudes de permisos de compañeros de equipo suben al líder, lo que puede crear fricción. Pre-apruebe operaciones comunes en su [configuración de permisos](/es/permissions) antes de generar compañeros de equipo para reducir interrupciones.

383 

384### Los compañeros de equipo se detienen en errores

385 

386Los compañeros de equipo pueden detenerse después de encontrar errores en lugar de recuperarse. Verifique su salida usando Shift+Down en modo en proceso o haciendo clic en el panel en modo dividido, luego:

387 

388* Deles instrucciones adicionales directamente

389* Genere un compañero de equipo de reemplazo para continuar el trabajo

390 

391### El líder se apaga antes de que el trabajo esté hecho

392 

393El líder puede decidir que el equipo está terminado antes de que todas las tareas estén realmente completas. Si esto sucede, dígale que continúe. También puede decirle al líder que espere a que los compañeros de equipo terminen antes de proceder si comienza a hacer trabajo en lugar de delegar.

394 

395### Sesiones tmux huérfanas

396 

397Si una sesión tmux persiste después de que el equipo termina, puede no haber sido completamente limpiada. Enumere sesiones y mate la creada por el equipo:

398 

399```bash theme={null}

400tmux ls

401tmux kill-session -t <session-name>

402```

403 

404## Limitaciones

405 

406Los equipos de agentes son experimentales. Las limitaciones actuales a tener en cuenta:

407 

408* **Sin reanudación de sesión con compañeros de equipo en proceso**: `/resume` y `/rewind` no restauran compañeros de equipo en proceso. Después de reanudar una sesión, el líder puede intentar enviar mensajes a compañeros de equipo que ya no existen. Si esto sucede, dígale al líder que genere nuevos compañeros de equipo.

409* **El estado de la tarea puede retrasarse**: los compañeros de equipo a veces no marcan las tareas como completadas, lo que bloquea tareas dependientes. Si una tarea parece atrapada, verifique si el trabajo está realmente hecho y actualice el estado de la tarea manualmente o dígale al líder que empuje al compañero de equipo.

410* **El apagado puede ser lento**: los compañeros de equipo terminan su solicitud actual o llamada de herramienta antes de apagarse, lo que puede tomar tiempo.

411* **Un equipo por sesión**: un líder solo puede gestionar un equipo a la vez. Limpie el equipo actual antes de iniciar uno nuevo.

412* **Sin equipos anidados**: los compañeros de equipo no pueden generar sus propios equipos o compañeros de equipo. Solo el líder puede gestionar el equipo.

413* **El líder es fijo**: la sesión que crea el equipo es el líder de por vida. No puede promover un compañero de equipo a líder o transferir liderazgo.

414* **Permisos establecidos en la generación**: todos los compañeros de equipo comienzan con el modo de permiso del líder. Puede cambiar modos de compañeros de equipo individuales después de generar, pero no puede establecer modos por compañero de equipo en el momento de la generación.

415* **Los paneles divididos requieren tmux o iTerm2**: el modo en proceso predeterminado funciona en cualquier terminal. El modo de panel dividido no es compatible con la terminal integrada de VS Code, Windows Terminal o Ghostty.

416 

417<Tip>

418 **`CLAUDE.md` funciona normalmente**: los compañeros de equipo leen archivos `CLAUDE.md` de su directorio de trabajo. Use esto para proporcionar orientación específica del proyecto a todos los compañeros de equipo.

419</Tip>

420 

421## Próximos pasos

422 

423Explore enfoques relacionados para trabajo paralelo y delegación:

424 

425* **Delegación ligera**: [subagents](/es/sub-agents) generan agentes auxiliares para investigación o verificación dentro de su sesión, mejor para tareas que no necesitan coordinación entre agentes

426* **Sesiones paralelas manuales**: [Git worktrees](/es/common-workflows#run-parallel-claude-code-sessions-with-git-worktrees) le permiten ejecutar múltiples sesiones de Claude Code usted mismo sin coordinación de equipo automatizada

427* **Comparar enfoques**: vea la comparación [subagent vs agent team](/es/features-overview#compare-similar-features) para un desglose lado a lado

amazon-bedrock.md +589 −0 created

Details

1> ## Documentation Index

2> Fetch the complete documentation index at: https://code.claude.com/docs/llms.txt

3> Use this file to discover all available pages before exploring further.

4 

5# Claude Code en Amazon Bedrock

6 

7> Aprenda a configurar Claude Code a través de Amazon Bedrock, incluyendo configuración, configuración de IAM y solución de problemas.

8 

9export const ContactSalesCard = ({surface}) => {

10 const utm = content => `utm_source=claude_code&utm_medium=docs&utm_content=${surface}_${content}`;

11 const iconArrowRight = (size = 13) => <svg width={size} height={size} viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2.5" strokeLinecap="round" strokeLinejoin="round" aria-hidden="true">

12 <line x1="5" y1="12" x2="19" y2="12" />

13 <polyline points="12 5 19 12 12 19" />

14 </svg>;

15 const STYLES = `

16.cc-cs {

17 --cs-slate: #141413;

18 --cs-clay: #d97757;

19 --cs-clay-deep: #c6613f;

20 --cs-gray-000: #ffffff;

21 --cs-gray-700: #3d3d3a;

22 --cs-border-default: rgba(31, 30, 29, 0.15);

23 font-family: inherit;

24}

25.dark .cc-cs {

26 --cs-slate: #f0eee6;

27 --cs-gray-000: #262624;

28 --cs-gray-700: #bfbdb4;

29 --cs-border-default: rgba(240, 238, 230, 0.14);

30}

31.cc-cs-card {

32 display: flex; align-items: center; justify-content: space-between;

33 gap: 16px; padding: 14px 16px; margin: 0;

34 background: var(--cs-gray-000); border: 0.5px solid var(--cs-border-default);

35 border-radius: 8px; flex-wrap: wrap;

36}

37.cc-cs-text { font-size: 13px; color: var(--cs-gray-700); line-height: 1.5; flex: 1; min-width: 240px; }

38.cc-cs-text strong { font-weight: 550; color: var(--cs-slate); }

39.cc-cs-actions { display: flex; align-items: center; gap: 8px; flex-shrink: 0; }

40.cc-cs-btn-clay {

41 display: inline-flex; align-items: center; gap: 8px;

42 background: var(--cs-clay-deep); color: #fff; border: none;

43 border-radius: 8px; padding: 8px 14px;

44 font-size: 13px; font-weight: 500;

45 transition: background-color 0.15s; white-space: nowrap;

46}

47.cc-cs-btn-clay:hover { background: var(--cs-clay); }

48.cc-cs-btn-ghost {

49 display: inline-flex; align-items: center; gap: 8px;

50 background: transparent; color: var(--cs-gray-700);

51 border: 0.5px solid var(--cs-border-default);

52 border-radius: 8px; padding: 8px 14px;

53 font-size: 13px; font-weight: 500;

54}

55.cc-cs-btn-ghost:hover { background: rgba(0, 0, 0, 0.04); }

56.dark .cc-cs-btn-ghost:hover { background: rgba(255, 255, 255, 0.04); }

57@media (max-width: 720px) {

58 .cc-cs-actions { width: 100%; }

59}

60`;

61 return <div className="cc-cs not-prose">

62 <style>{STYLES}</style>

63 <div className="cc-cs-card">

64 <div className="cc-cs-text">

65 <strong>Deploying Claude Code across your organization?</strong> Talk to sales about enterprise plans, SSO, and centralized billing.

66 </div>

67 <div className="cc-cs-actions">

68 <a href={`https://claude.com/pricing?${utm('view_plans')}#plans-business`} className="cc-cs-btn-ghost">

69 View plans

70 </a>

71 <a href={`https://claude.com/contact-sales?${utm('contact_sales')}`} className="cc-cs-btn-clay">

72 Contact sales {iconArrowRight()}

73 </a>

74 </div>

75 </div>

76 </div>;

77};

78 

79export const Experiment = ({flag, treatment, children}) => {

80 const VID_KEY = 'exp_vid';

81 const CONSENT_COUNTRIES = new Set(['AT', 'BE', 'BG', 'HR', 'CY', 'CZ', 'DK', 'EE', 'FI', 'FR', 'DE', 'GR', 'HU', 'IE', 'IT', 'LV', 'LT', 'LU', 'MT', 'NL', 'PL', 'PT', 'RO', 'SK', 'SI', 'ES', 'SE', 'RE', 'GP', 'MQ', 'GF', 'YT', 'BL', 'MF', 'PM', 'WF', 'PF', 'NC', 'AW', 'CW', 'SX', 'FO', 'GL', 'AX', 'GB', 'UK', 'AI', 'BM', 'IO', 'VG', 'KY', 'FK', 'GI', 'MS', 'PN', 'SH', 'TC', 'GG', 'JE', 'IM', 'CA', 'BR', 'IN']);

82 const fnv1a = s => {

83 let h = 0x811c9dc5;

84 for (let i = 0; i < s.length; i++) {

85 h ^= s.charCodeAt(i);

86 h += (h << 1) + (h << 4) + (h << 7) + (h << 8) + (h << 24);

87 }

88 return h >>> 0;

89 };

90 const bucket = (seed, vid) => fnv1a(fnv1a(seed + vid) + '') % 10000 < 5000 ? 'control' : 'treatment';

91 const [decision] = useState(() => {

92 const params = new URLSearchParams(location.search);

93 const preBucketed = document.documentElement.dataset['gb_' + flag.replace(/-/g, '_')];

94 const force = params.get('gb-force');

95 if (force) {

96 for (const p of force.split(',')) {

97 const [k, v] = p.split(':');

98 if (k === flag) return {

99 variant: v || 'treatment',

100 track: false

101 };

102 }

103 }

104 if (navigator.globalPrivacyControl) {

105 return {

106 variant: 'control',

107 track: false

108 };

109 }

110 const prefsMatch = document.cookie.match(/(?:^|; )anthropic-consent-preferences=([^;]+)/);

111 if (prefsMatch) {

112 try {

113 if (JSON.parse(decodeURIComponent(prefsMatch[1])).analytics !== true) {

114 return {

115 variant: 'control',

116 track: false

117 };

118 }

119 } catch {

120 return {

121 variant: 'control',

122 track: false

123 };

124 }

125 } else {

126 const country = params.get('country')?.toUpperCase() || (document.cookie.match(/(?:^|; )cf_geo=([A-Z]{2})/) || [])[1];

127 if (!country || CONSENT_COUNTRIES.has(country)) {

128 return {

129 variant: 'control',

130 track: false

131 };

132 }

133 }

134 let vid;

135 try {

136 const ajsMatch = document.cookie.match(/(?:^|; )ajs_anonymous_id=([^;]+)/);

137 if (ajsMatch) {

138 vid = decodeURIComponent(ajsMatch[1]).replace(/^"|"$/g, '');

139 } else {

140 vid = localStorage.getItem(VID_KEY);

141 if (!vid) {

142 vid = crypto.randomUUID();

143 }

144 document.cookie = `ajs_anonymous_id=${vid}; domain=.claude.com; path=/; Secure; SameSite=Lax; max-age=31536000`;

145 }

146 try {

147 localStorage.setItem(VID_KEY, vid);

148 } catch {}

149 } catch {

150 return {

151 variant: 'control',

152 track: false

153 };

154 }

155 const variant = preBucketed === '1' ? 'treatment' : preBucketed === '0' ? 'control' : bucket(flag, vid);

156 return {

157 variant,

158 track: true,

159 vid

160 };

161 });

162 useEffect(() => {

163 if (!decision.track) return;

164 fetch('https://api.anthropic.com/api/event_logging/v2/batch', {

165 method: 'POST',

166 headers: {

167 'Content-Type': 'application/json',

168 'x-service-name': 'claude_code_docs'

169 },

170 body: JSON.stringify({

171 events: [{

172 event_type: 'GrowthbookExperimentEvent',

173 event_data: {

174 device_id: decision.vid,

175 anonymous_id: decision.vid,

176 timestamp: new Date().toISOString(),

177 experiment_id: flag,

178 variation_id: decision.variant === 'treatment' ? 1 : 0,

179 environment: 'production'

180 }

181 }]

182 }),

183 keepalive: true

184 }).catch(() => {});

185 }, []);

186 return decision.variant === 'treatment' ? treatment : children;

187};

188 

189<Experiment flag="docs-contact-sales-cta" treatment={<ContactSalesCard surface="bedrock" />} />

190 

191## Requisitos previos

192 

193Antes de configurar Claude Code con Bedrock, asegúrese de tener:

194 

195* Una cuenta de AWS con acceso a Bedrock habilitado

196* Acceso a los modelos Claude deseados (por ejemplo, Claude Sonnet 4.6) en Bedrock

197* AWS CLI instalado y configurado (opcional - solo se necesita si no tiene otro mecanismo para obtener credenciales)

198* Permisos de IAM apropiados

199 

200Para iniciar sesión con sus propias credenciales de Bedrock, siga [Iniciar sesión con Bedrock](#sign-in-with-bedrock) a continuación. Para implementar Claude Code en un equipo, utilice los pasos de [configuración manual](#set-up-manually) y [fije las versiones de su modelo](#4-pin-model-versions) antes de implementar.

201 

202## Iniciar sesión con Bedrock

203 

204Si tiene credenciales de AWS y desea comenzar a usar Claude Code a través de Bedrock, el asistente de inicio de sesión lo guía a través del proceso. Completa los requisitos previos del lado de AWS una vez por cuenta; el asistente maneja el lado de Claude Code.

205 

206<Steps>

207 <Step title="Habilitar modelos de Anthropic en su cuenta de AWS">

208 En la [consola de Amazon Bedrock](https://console.aws.amazon.com/bedrock/), abra el catálogo de modelos, seleccione un modelo de Anthropic y envíe el formulario de caso de uso. El acceso se otorga inmediatamente después del envío. Vea [Enviar detalles del caso de uso](#1-submit-use-case-details) para AWS Organizations y [configuración de IAM](#iam-configuration) para los permisos que su rol necesita.

209 </Step>

210 

211 <Step title="Inicie Claude Code y elija Bedrock">

212 Ejecute `claude`. En el mensaje de inicio de sesión, seleccione **3rd-party platform**, luego **Amazon Bedrock**.

213 </Step>

214 

215 <Step title="Siga los mensajes del asistente">

216 Elija cómo se autentica en AWS: un perfil de AWS detectado desde su directorio `~/.aws`, una clave de API de Bedrock, una clave de acceso y secreto, o credenciales ya en su entorno. El asistente recoge su región, verifica qué modelos de Claude puede invocar su cuenta, y le permite fijarlos. Guarda el resultado en el bloque `env` de su [archivo de configuración de usuario](/es/settings), por lo que no necesita exportar variables de entorno usted mismo.

217 </Step>

218</Steps>

219 

220Después de haber iniciado sesión, ejecute `/setup-bedrock` en cualquier momento para reabrirlo el asistente y cambiar sus credenciales, región o fijaciones de modelo.

221 

222## Configurar manualmente

223 

224Para configurar Bedrock a través de variables de entorno en lugar del asistente, por ejemplo en CI o una implementación empresarial con script, siga los pasos a continuación.

225 

226### 1. Enviar detalles del caso de uso

227 

228Los usuarios por primera vez de modelos de Anthropic deben enviar detalles del caso de uso antes de invocar un modelo. Esto se realiza una vez por cuenta de AWS.

229 

2301. Asegúrese de tener los permisos de IAM correctos descritos a continuación

2312. Navegue a la [consola de Amazon Bedrock](https://console.aws.amazon.com/bedrock/)

2323. Seleccione un modelo de Anthropic del **catálogo de modelos**

2334. Complete el formulario de caso de uso. El acceso se otorga inmediatamente después del envío.

234 

235Si utiliza AWS Organizations, puede enviar el formulario una vez desde la cuenta de administración utilizando la [API `PutUseCaseForModelAccess`](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_PutUseCaseForModelAccess.html). Esta llamada requiere el permiso de IAM `bedrock:PutUseCaseForModelAccess`. La aprobación se extiende a las cuentas secundarias automáticamente.

236 

237### 2. Configurar credenciales de AWS

238 

239Claude Code utiliza la cadena de credenciales predeterminada del SDK de AWS. Configure sus credenciales utilizando uno de estos métodos:

240 

241**Opción A: Configuración de AWS CLI**

242 

243```bash theme={null}

244aws configure

245```

246 

247**Opción B: Variables de entorno (clave de acceso)**

248 

249```bash theme={null}

250export AWS_ACCESS_KEY_ID=your-access-key-id

251export AWS_SECRET_ACCESS_KEY=your-secret-access-key

252export AWS_SESSION_TOKEN=your-session-token

253```

254 

255**Opción C: Variables de entorno (perfil SSO)**

256 

257```bash theme={null}

258aws sso login --profile=<your-profile-name>

259 

260export AWS_PROFILE=your-profile-name

261```

262 

263**Opción D: Credenciales de la consola de administración de AWS**

264 

265```bash theme={null}

266aws login

267```

268 

269[Obtenga más información](https://docs.aws.amazon.com/signin/latest/userguide/command-line-sign-in.html) sobre `aws login`.

270 

271**Opción E: Claves de API de Bedrock**

272 

273```bash theme={null}

274export AWS_BEARER_TOKEN_BEDROCK=your-bedrock-api-key

275```

276 

277Las claves de API de Bedrock proporcionan un método de autenticación más simple sin necesidad de credenciales completas de AWS. [Obtenga más información sobre las claves de API de Bedrock](https://aws.amazon.com/blogs/machine-learning/accelerate-ai-development-with-amazon-bedrock-api-keys/).

278 

279#### Configuración avanzada de credenciales

280 

281Claude Code admite la actualización automática de credenciales para AWS SSO y proveedores de identidad corporativos. Agregue estas configuraciones a su archivo de configuración de Claude Code (vea [Configuración](/es/settings) para ubicaciones de archivos).

282 

283Cuando Claude Code detecta que sus credenciales de AWS han expirado (ya sea localmente según su marca de tiempo o cuando Bedrock devuelve un error de credencial), ejecutará automáticamente sus comandos `awsAuthRefresh` y/o `awsCredentialExport` configurados para obtener nuevas credenciales antes de reintentar la solicitud.

284 

285##### Configuración de ejemplo

286 

287```json theme={null}

288{

289 "awsAuthRefresh": "aws sso login --profile myprofile",

290 "env": {

291 "AWS_PROFILE": "myprofile"

292 }

293}

294```

295 

296##### Configuración explicada

297 

298**`awsAuthRefresh`**: Utilice esto para comandos que modifiquen el directorio `.aws`, como actualizar credenciales, caché de SSO o archivos de configuración. La salida del comando se muestra al usuario, pero la entrada interactiva no es compatible. Esto funciona bien para flujos de SSO basados en navegador donde la CLI muestra una URL o código y usted completa la autenticación en el navegador.

299 

300**`awsCredentialExport`**: Solo use esto si no puede modificar `.aws` y debe devolver credenciales directamente. La salida se captura silenciosamente y no se muestra al usuario. El comando debe generar JSON en este formato:

301 

302```json theme={null}

303{

304 "Credentials": {

305 "AccessKeyId": "value",

306 "SecretAccessKey": "value",

307 "SessionToken": "value"

308 }

309}

310```

311 

312### 3. Configurar Claude Code

313 

314Establezca las siguientes variables de entorno para habilitar Bedrock:

315 

316```bash theme={null}

317# Enable Bedrock integration

318export CLAUDE_CODE_USE_BEDROCK=1

319export AWS_REGION=us-east-1 # or your preferred region

320 

321# Optional: Override the region for the small/fast model (Haiku).

322# Also applies to Bedrock Mantle.

323export ANTHROPIC_SMALL_FAST_MODEL_AWS_REGION=us-west-2

324 

325# Optional: Override the Bedrock endpoint URL for custom endpoints or gateways

326# export ANTHROPIC_BEDROCK_BASE_URL=https://bedrock-runtime.us-east-1.amazonaws.com

327```

328 

329Al habilitar Bedrock para Claude Code, tenga en cuenta lo siguiente:

330 

331* `AWS_REGION` es una variable de entorno requerida. Claude Code no lee desde el archivo de configuración `.aws` para esta configuración.

332* Cuando se usa Bedrock, los comandos `/login` y `/logout` están deshabilitados ya que la autenticación se maneja a través de credenciales de AWS.

333* Puede usar archivos de configuración para variables de entorno como `AWS_PROFILE` que no desea filtrar a otros procesos. Vea [Configuración](/es/settings) para más información.

334 

335### 4. Fijar versiones de modelo

336 

337<Warning>

338 Fije versiones de modelo específicas al implementar para múltiples usuarios. Sin fijar, alias de modelo como `sonnet` y `opus` se resuelven a la versión más reciente, que puede no estar disponible aún en su cuenta de Bedrock cuando Anthropic lanza una actualización. Claude Code [retrocede](#startup-model-checks) a la versión anterior al inicio cuando la más reciente no está disponible, pero fijar le permite controlar cuándo sus usuarios se mueven a un nuevo modelo.

339</Warning>

340 

341Establezca estas variables de entorno en IDs de modelo de Bedrock específicos.

342 

343Sin `ANTHROPIC_DEFAULT_OPUS_MODEL`, el alias `opus` en Bedrock se resuelve a Opus 4.6. Establézcalo en el ID de Opus 4.7 para usar el modelo más reciente:

344 

345```bash theme={null}

346export ANTHROPIC_DEFAULT_OPUS_MODEL='us.anthropic.claude-opus-4-7'

347export ANTHROPIC_DEFAULT_SONNET_MODEL='us.anthropic.claude-sonnet-4-6'

348export ANTHROPIC_DEFAULT_HAIKU_MODEL='us.anthropic.claude-haiku-4-5-20251001-v1:0'

349```

350 

351Estas variables utilizan IDs de perfil de inferencia entre regiones (con el prefijo `us.`). Si utiliza un prefijo de región diferente o perfiles de inferencia de aplicación, ajuste en consecuencia. Para IDs de modelo actuales y heredados, vea [Descripción general de modelos](https://platform.claude.com/docs/en/about-claude/models/overview). Vea [Configuración de modelo](/es/model-config#pin-models-for-third-party-deployments) para la lista completa de variables de entorno.

352 

353Claude Code utiliza estos modelos predeterminados cuando no se establecen variables de fijación:

354 

355| Tipo de modelo | Valor predeterminado |

356| :-------------------- | :--------------------------------------------- |

357| Modelo principal | `us.anthropic.claude-sonnet-4-5-20250929-v1:0` |

358| Modelo pequeño/rápido | `us.anthropic.claude-haiku-4-5-20251001-v1:0` |

359 

360Para personalizar modelos aún más, utilice uno de estos métodos:

361 

362```bash theme={null}

363# Using inference profile ID

364export ANTHROPIC_MODEL='global.anthropic.claude-sonnet-4-6'

365export ANTHROPIC_DEFAULT_HAIKU_MODEL='us.anthropic.claude-haiku-4-5-20251001-v1:0'

366 

367# Using application inference profile ARN

368export ANTHROPIC_MODEL='arn:aws:bedrock:us-east-2:your-account-id:application-inference-profile/your-model-id'

369 

370# Optional: Disable prompt caching if needed

371export DISABLE_PROMPT_CACHING=1

372 

373# Optional: Request 1-hour prompt cache TTL instead of the 5-minute default

374export ENABLE_PROMPT_CACHING_1H=1

375```

376 

377<Note>[Prompt caching](https://platform.claude.com/docs/en/build-with-claude/prompt-caching) puede no estar disponible en todas las regiones. Las escrituras de caché con un TTL de 1 hora se facturan a una tasa más alta que las escrituras de 5 minutos.</Note>

378 

379#### Asignar cada versión de modelo a un perfil de inferencia

380 

381Las variables de entorno `ANTHROPIC_DEFAULT_*_MODEL` configuran un perfil de inferencia por familia de modelo. Si su organización necesita exponer varias versiones de la misma familia en el selector `/model`, cada una enrutada a su propio ARN de perfil de inferencia de aplicación, utilice la configuración `modelOverrides` en su [archivo de configuración](/es/settings#settings-files) en su lugar.

382 

383Este ejemplo asigna cuatro versiones de Opus a ARN distintos para que los usuarios puedan cambiar entre ellas sin eludir los perfiles de inferencia de su organización:

384 

385```json theme={null}

386{

387 "modelOverrides": {

388 "claude-opus-4-7": "arn:aws:bedrock:us-east-2:123456789012:application-inference-profile/opus-47-prod",

389 "claude-opus-4-6": "arn:aws:bedrock:us-east-2:123456789012:application-inference-profile/opus-46-prod",

390 "claude-opus-4-5-20251101": "arn:aws:bedrock:us-east-2:123456789012:application-inference-profile/opus-45-prod",

391 "claude-opus-4-1-20250805": "arn:aws:bedrock:us-east-2:123456789012:application-inference-profile/opus-41-prod"

392 }

393}

394```

395 

396Cuando un usuario selecciona una de estas versiones en `/model`, Claude Code llama a Bedrock con el ARN asignado. Las versiones sin una anulación se revierten al ID de modelo de Bedrock integrado o a cualquier perfil de inferencia coincidente descubierto al inicio. Vea [Anular IDs de modelo por versión](/es/model-config#override-model-ids-per-version) para detalles sobre cómo las anulaciones interactúan con `availableModels` y otras configuraciones de modelo.

397 

398## Verificaciones de modelo al inicio

399 

400Cuando Claude Code se inicia con Bedrock configurado, verifica que los modelos que pretende usar sean accesibles en su cuenta. Esta verificación requiere Claude Code v2.1.94 o posterior.

401 

402Si ha fijado una versión de modelo que es más antigua que el valor predeterminado actual de Claude Code, y su cuenta puede invocar la versión más reciente, Claude Code le solicita que actualice la fijación. Aceptar escribe el nuevo ID de modelo en su [archivo de configuración de usuario](/es/settings) y reinicia Claude Code. Rechazar se recuerda hasta el próximo cambio de versión predeterminada. Las fijaciones que apuntan a un [ARN de perfil de inferencia de aplicación](#map-each-model-version-to-an-inference-profile) se omiten, ya que son administradas por su administrador.

403 

404Si no ha fijado un modelo y el valor predeterminado actual no está disponible en su cuenta, Claude Code retrocede a la versión anterior para la sesión actual y muestra un aviso. El retroceso no se persiste. Habilite el modelo más reciente en su cuenta de Bedrock o [fije una versión](#4-pin-model-versions) para hacer la opción permanente.

405 

406## Configuración de IAM

407 

408Cree una política de IAM con los permisos requeridos para Claude Code:

409 

410```json theme={null}

411{

412 "Version": "2012-10-17",

413 "Statement": [

414 {

415 "Sid": "AllowModelAndInferenceProfileAccess",

416 "Effect": "Allow",

417 "Action": [

418 "bedrock:InvokeModel",

419 "bedrock:InvokeModelWithResponseStream",

420 "bedrock:ListInferenceProfiles",

421 "bedrock:GetInferenceProfile"

422 ],

423 "Resource": [

424 "arn:aws:bedrock:*:*:inference-profile/*",

425 "arn:aws:bedrock:*:*:application-inference-profile/*",

426 "arn:aws:bedrock:*:*:foundation-model/*"

427 ]

428 },

429 {

430 "Sid": "AllowMarketplaceSubscription",

431 "Effect": "Allow",

432 "Action": [

433 "aws-marketplace:ViewSubscriptions",

434 "aws-marketplace:Subscribe"

435 ],

436 "Resource": "*",

437 "Condition": {

438 "StringEquals": {

439 "aws:CalledViaLast": "bedrock.amazonaws.com"

440 }

441 }

442 }

443 ]

444}

445```

446 

447Para permisos más restrictivos, puede limitar el Resource a ARN de perfil de inferencia específicos.

448 

449`bedrock:GetInferenceProfile` permite que Claude Code resuelva un [ARN de perfil de inferencia de aplicación](#map-each-model-version-to-an-inference-profile) a su modelo de fundación de respaldo, que se utiliza para seleccionar la forma de solicitud correcta para ese modelo.

450 

451Si el token carece de este permiso, Claude Code se recupera automáticamente reintentando una vez con la forma alternativa, por lo que las solicitudes aún tienen éxito pero cada nuevo modelo agrega un viaje de ida y vuelta adicional. Otorgar el permiso evita el reintento. Esto se aplica con mayor frecuencia a implementaciones de `AWS_BEARER_TOKEN_BEDROCK`, donde la política del token es típicamente más estrecha que un rol de IAM completo.

452 

453Para más detalles, vea [documentación de IAM de Bedrock](https://docs.aws.amazon.com/bedrock/latest/userguide/security-iam.html).

454 

455<Note>

456 Cree una cuenta de AWS dedicada para Claude Code para simplificar el seguimiento de costos y el control de acceso.

457</Note>

458 

459## Ventana de contexto de 1M de tokens

460 

461Claude Opus 4.7, Opus 4.6 y Sonnet 4.6 admiten la [ventana de contexto de 1M de tokens](https://platform.claude.com/docs/en/build-with-claude/context-windows#1m-token-context-window) en Amazon Bedrock. Claude Code habilita automáticamente la ventana de contexto extendida cuando selecciona una variante de modelo de 1M.

462 

463El [asistente de configuración](#sign-in-with-bedrock) ofrece una opción de contexto de 1M cuando fija modelos. Para habilitarlo para un modelo fijado manualmente en su lugar, agregue `[1m]` al ID del modelo. Vea [Fijar modelos para implementaciones de terceros](/es/model-config#pin-models-for-third-party-deployments) para detalles.

464 

465## AWS Guardrails

466 

467[Amazon Bedrock Guardrails](https://docs.aws.amazon.com/bedrock/latest/userguide/guardrails.html) le permite implementar filtrado de contenido para Claude Code. Cree un Guardrail en la [consola de Amazon Bedrock](https://console.aws.amazon.com/bedrock/), publique una versión, luego agregue los encabezados de Guardrail a su [archivo de configuración](/es/settings). Habilite la inferencia entre regiones en su Guardrail si está utilizando perfiles de inferencia entre regiones.

468 

469Configuración de ejemplo:

470 

471```json theme={null}

472{

473 "env": {

474 "ANTHROPIC_CUSTOM_HEADERS": "X-Amzn-Bedrock-GuardrailIdentifier: your-guardrail-id\nX-Amzn-Bedrock-GuardrailVersion: 1"

475 }

476}

477```

478 

479## Usar el punto final de Mantle

480 

481Mantle es un punto final de Amazon Bedrock que sirve modelos de Claude a través de la forma de API nativa de Anthropic en lugar de la API de Invoke de Bedrock. Utiliza las mismas credenciales de AWS, permisos de IAM y configuración de `awsAuthRefresh` descritos anteriormente en esta página.

482 

483<Note>

484 Mantle requiere Claude Code v2.1.94 o posterior. Ejecute `claude --version` para verificar.

485</Note>

486 

487### Habilitar Mantle

488 

489Con credenciales de AWS ya configuradas, establezca `CLAUDE_CODE_USE_MANTLE` para enrutar solicitudes al punto final de Mantle:

490 

491```bash theme={null}

492export CLAUDE_CODE_USE_MANTLE=1

493export AWS_REGION=us-east-1

494```

495 

496Claude Code construye la URL del punto final desde `AWS_REGION`. Para anularla para un punto final personalizado o puerta de enlace, establezca `ANTHROPIC_BEDROCK_MANTLE_BASE_URL`.

497 

498Ejecute `/status` dentro de Claude Code para confirmar. La línea del proveedor muestra `Amazon Bedrock (Mantle)` cuando Mantle está activo.

499 

500### Seleccionar un modelo de Mantle

501 

502Mantle utiliza IDs de modelo con prefijo `anthropic.` y sin sufijo de versión, por ejemplo `anthropic.claude-haiku-4-5`. Los modelos disponibles para su cuenta dependen de lo que su organización haya sido autorizada; los IDs de modelo adicionales se enumeran en sus materiales de incorporación de AWS. Póngase en contacto con su equipo de cuenta de AWS para solicitar acceso a modelos permitidos.

503 

504Establezca el modelo con la bandera `--model` o con `/model` dentro de Claude Code:

505 

506```bash theme={null}

507claude --model anthropic.claude-haiku-4-5

508```

509 

510### Ejecutar Mantle junto con la API de Invoke

511 

512Los modelos disponibles para usted en Mantle pueden no incluir todos los modelos que usa hoy. Establecer tanto `CLAUDE_CODE_USE_BEDROCK` como `CLAUDE_CODE_USE_MANTLE` permite que Claude Code llame a ambos puntos finales desde la misma sesión. Los IDs de modelo que coinciden con el formato de Mantle se enrutan a Mantle, y todos los demás IDs de modelo van a la API de Invoke de Bedrock.

513 

514```bash theme={null}

515export CLAUDE_CODE_USE_BEDROCK=1

516export CLAUDE_CODE_USE_MANTLE=1

517```

518 

519Para mostrar un modelo de Mantle en el selector `/model`, enumere su ID en `availableModels` en su [archivo de configuración](/es/settings). Esta configuración también restringe el selector a las entradas enumeradas, por lo que incluya cada alias que desee mantener disponible:

520 

521```json theme={null}

522{

523 "availableModels": ["opus", "sonnet", "haiku", "anthropic.claude-haiku-4-5"]

524}

525```

526 

527Las entradas con el prefijo `anthropic.` se agregan como opciones de selector personalizado y se enrutan a Mantle. Reemplace `anthropic.claude-haiku-4-5` con el ID de modelo que su cuenta ha sido autorizada. Vea [Restringir selección de modelo](/es/model-config#restrict-model-selection) para cómo `availableModels` interactúa con otras configuraciones de modelo.

528 

529Cuando ambos proveedores están activos, `/status` muestra `Amazon Bedrock + Amazon Bedrock (Mantle)`.

530 

531### Enrutar Mantle a través de una puerta de enlace

532 

533Si su organización enruta el tráfico de modelo a través de una [puerta de enlace LLM](/es/llm-gateway) centralizada que inyecta credenciales de AWS del lado del servidor, deshabilite la autenticación del lado del cliente para que Claude Code envíe solicitudes sin firmas SigV4 o encabezados `x-api-key`:

534 

535```bash theme={null}

536export CLAUDE_CODE_USE_MANTLE=1

537export CLAUDE_CODE_SKIP_MANTLE_AUTH=1

538export ANTHROPIC_BEDROCK_MANTLE_BASE_URL=https://your-gateway.example.com

539```

540 

541### Variables de entorno de Mantle

542 

543Estas variables son específicas del punto final de Mantle. Vea [Variables de entorno](/es/env-vars) para la lista completa.

544 

545| Variable | Propósito |

546| :-------------------------------------- | :----------------------------------------------------------------------------- |

547| `CLAUDE_CODE_USE_MANTLE` | Habilitar el punto final de Mantle. Establezca en `1` o `true`. |

548| `ANTHROPIC_BEDROCK_MANTLE_BASE_URL` | Anular la URL del punto final de Mantle predeterminada |

549| `CLAUDE_CODE_SKIP_MANTLE_AUTH` | Omitir la autenticación del lado del cliente para configuraciones de proxy |

550| `ANTHROPIC_SMALL_FAST_MODEL_AWS_REGION` | Anular la región de AWS para el modelo de clase Haiku (compartido con Bedrock) |

551 

552## Solución de problemas

553 

554### Bucle de autenticación con SSO y proxies corporativos

555 

556Si las pestañas del navegador se abren repetidamente cuando se usa AWS SSO, elimine la configuración `awsAuthRefresh` de su [archivo de configuración](/es/settings). Esto puede ocurrir cuando las VPN corporativas o los proxies de inspección TLS interrumpen el flujo del navegador SSO. Claude Code trata la conexión interrumpida como un error de autenticación, vuelve a ejecutar `awsAuthRefresh` y entra en un bucle indefinido.

557 

558Si su entorno de red interfiere con los flujos de SSO automáticos basados en navegador, use `aws sso login` manualmente antes de iniciar Claude Code en lugar de depender de `awsAuthRefresh`.

559 

560### Problemas de región

561 

562Si encuentra problemas de región:

563 

564* Verifique la disponibilidad del modelo: `aws bedrock list-inference-profiles --region your-region`

565* Cambie a una región compatible: `export AWS_REGION=us-east-1`

566* Considere usar perfiles de inferencia para acceso entre regiones

567 

568Si recibe un error "on-demand throughput isn't supported":

569 

570* Especifique el modelo como un ID de [perfil de inferencia](https://docs.aws.amazon.com/bedrock/latest/userguide/inference-profiles-support.html)

571 

572Claude Code utiliza la [API de Invoke](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_runtime_InvokeModelWithResponseStream.html) de Bedrock y no admite la API de Converse.

573 

574### Errores del punto final de Mantle

575 

576Si `/status` no muestra `Amazon Bedrock (Mantle)` después de establecer `CLAUDE_CODE_USE_MANTLE`, la variable no está llegando al proceso. Confirme que se exporta en el shell donde lanzó `claude`, o establézcala en el bloque `env` de su [archivo de configuración](/es/settings).

577 

578Un `403` del punto final de Mantle con credenciales válidas significa que su cuenta de AWS no ha sido autorizada para acceder al modelo que solicitó. Póngase en contacto con su equipo de cuenta de AWS para solicitar acceso.

579 

580Un `400` que nombra el ID del modelo significa que ese modelo no se sirve en Mantle. Mantle tiene su propio catálogo de modelos separado del catálogo estándar de Bedrock, por lo que los IDs de perfil de inferencia como `us.anthropic.claude-sonnet-4-6` no funcionarán. Utilice un ID de formato de Mantle, o habilite [ambos puntos finales](#run-mantle-alongside-the-invoke-api) para que Claude Code enrute cada solicitud al punto final donde el modelo está disponible.

581 

582## Recursos adicionales

583 

584* [Documentación de Bedrock](https://docs.aws.amazon.com/bedrock/)

585* [Precios de Bedrock](https://aws.amazon.com/bedrock/pricing/)

586* [Perfiles de inferencia de Bedrock](https://docs.aws.amazon.com/bedrock/latest/userguide/inference-profiles-support.html)

587* [Burndown de tokens de Bedrock y cuotas](https://docs.aws.amazon.com/bedrock/latest/userguide/quotas-token-burndown.html)

588* [Claude Code en Amazon Bedrock: Guía de configuración rápida](https://community.aws/content/2tXkZKrZzlrlu0KfH8gST5Dkppq/claude-code-on-amazon-bedrock-quick-setup-guide)

589* [Implementación de monitoreo de Claude Code (Bedrock)](https://github.com/aws-solutions-library-samples/guidance-for-claude-code-with-amazon-bedrock/blob/main/assets/docs/MONITORING.md)

analytics.md +224 −0 created

Details

1> ## Documentation Index

2> Fetch the complete documentation index at: https://code.claude.com/docs/llms.txt

3> Use this file to discover all available pages before exploring further.

4 

5# Rastrear el uso del equipo con análisis

6 

7> Ver métricas de uso de Claude Code, rastrear la adopción y medir la velocidad de ingeniería en el panel de análisis.

8 

9Claude Code proporciona paneles de análisis para ayudar a las organizaciones a comprender los patrones de uso de desarrolladores, rastrear métricas de contribución y medir cómo Claude Code impacta la velocidad de ingeniería. Acceda al panel para su plan:

10 

11| Plan | URL del panel | Incluye | Más información |

12| ----------------------------- | -------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------ |

13| Claude for Teams / Enterprise | [claude.ai/analytics/claude-code](https://claude.ai/analytics/claude-code) | Métricas de uso, métricas de contribución con integración de GitHub, tabla de clasificación, exportación de datos | [Detalles](#access-analytics-for-teams-and-enterprise) |

14| API (Claude Console) | [platform.claude.com/claude-code](https://platform.claude.com/claude-code) | Métricas de uso, seguimiento de gastos, información del equipo | [Detalles](#access-analytics-for-api-customers) |

15 

16## Acceder a análisis para Teams y Enterprise

17 

18Navegue a [claude.ai/analytics/claude-code](https://claude.ai/analytics/claude-code). Los administradores y propietarios pueden ver el panel.

19 

20El panel de Teams y Enterprise incluye:

21 

22* **Métricas de uso**: líneas de código aceptadas, tasa de aceptación de sugerencias, usuarios activos diarios y sesiones

23* **Métricas de contribución**: PRs y líneas de código enviadas con asistencia de Claude Code, con [integración de GitHub](#enable-contribution-metrics)

24* **Tabla de clasificación**: principales contribuyentes clasificados por uso de Claude Code

25* **Exportación de datos**: descargar datos de contribución como CSV para informes personalizados

26 

27### Habilitar métricas de contribución

28 

29<Note>

30 Las métricas de contribución están en versión beta pública y disponibles en los planes Claude for Teams y Claude for Enterprise. Estas métricas solo cubren usuarios dentro de su organización de claude.ai. El uso a través de la API de Claude Console o integraciones de terceros no se incluye.

31</Note>

32 

33Los datos de uso y adopción están disponibles para todas las cuentas de Claude for Teams y Claude for Enterprise. Las métricas de contribución requieren configuración adicional para conectar su organización de GitHub.

34 

35Necesita el rol de propietario para configurar los ajustes de análisis. Un administrador de GitHub debe instalar la aplicación de GitHub.

36 

37<Warning>

38 Las métricas de contribución no están disponibles para organizaciones con [Retención de datos cero](/es/zero-data-retention) habilitada. El panel de análisis mostrará solo métricas de uso.

39</Warning>

40 

41<Steps>

42 <Step title="Instalar la aplicación de GitHub">

43 Un administrador de GitHub instala la aplicación Claude GitHub en la cuenta de GitHub de su organización en [github.com/apps/claude](https://github.com/apps/claude).

44 </Step>

45 

46 <Step title="Habilitar análisis de Claude Code">

47 Un propietario de Claude navega a [claude.ai/admin-settings/claude-code](https://claude.ai/admin-settings/claude-code) y habilita la función de análisis de Claude Code.

48 </Step>

49 

50 <Step title="Habilitar análisis de GitHub">

51 En la misma página, habilite el botón de alternancia "GitHub analytics".

52 </Step>

53 

54 <Step title="Autenticarse con GitHub">

55 Complete el flujo de autenticación de GitHub y seleccione qué organizaciones de GitHub incluir en el análisis.

56 </Step>

57</Steps>

58 

59Los datos generalmente aparecen dentro de 24 horas después de habilitar, con actualizaciones diarias. Si no aparecen datos, puede ver uno de estos mensajes:

60 

61* **"GitHub app required"**: instale la aplicación de GitHub para ver métricas de contribución

62* **"Data processing in progress"**: vuelva a verificar en unos días y confirme que la aplicación de GitHub está instalada si los datos no aparecen

63 

64Las métricas de contribución admiten GitHub Cloud y GitHub Enterprise Server.

65 

66### Revisar métricas de resumen

67 

68<Note>

69 Estas métricas son deliberadamente conservadoras y representan una subestimación del impacto real de Claude Code. Solo se cuentan las líneas y PRs donde hay alta confianza en la participación de Claude Code.

70</Note>

71 

72El panel muestra estas métricas de resumen en la parte superior:

73 

74* **PRs with CC**: recuento total de solicitudes de extracción fusionadas que contienen al menos una línea de código escrita con Claude Code

75* **Lines of code with CC**: líneas totales de código en todos los PRs fusionados que fueron escritas con asistencia de Claude Code. Solo se cuentan las "líneas efectivas": líneas con más de 3 caracteres después de la normalización, excluyendo líneas vacías y líneas con solo corchetes o puntuación trivial.

76* **PRs with Claude Code (%)**: porcentaje de todos los PRs fusionados que contienen código asistido por Claude Code

77* **Suggestion accept rate**: porcentaje de veces que los usuarios aceptan las sugerencias de edición de código de Claude Code, incluido el uso de herramientas Edit, Write y NotebookEdit

78* **Lines of code accepted**: líneas totales de código escritas por Claude Code que los usuarios han aceptado en sus sesiones. Esto excluye sugerencias rechazadas y no rastrea eliminaciones posteriores.

79 

80### Explorar los gráficos

81 

82El panel incluye varios gráficos para visualizar tendencias a lo largo del tiempo.

83 

84#### Rastrear adopción

85 

86El gráfico de Adopción muestra tendencias de uso diario:

87 

88* **users**: usuarios activos diarios

89* **sessions**: número de sesiones activas de Claude Code por día

90 

91#### Medir PRs por usuario

92 

93Este gráfico muestra la actividad de desarrolladores individuales a lo largo del tiempo:

94 

95* **PRs per user**: número total de PRs fusionados por día dividido por usuarios activos diarios

96* **users**: usuarios activos diarios

97 

98Utilice esto para comprender cómo cambia la productividad individual a medida que aumenta la adopción de Claude Code.

99 

100#### Ver desglose de solicitudes de extracción

101 

102El gráfico de Pull requests muestra un desglose diario de PRs fusionados:

103 

104* **PRs with CC**: solicitudes de extracción que contienen código asistido por Claude Code

105* **PRs without CC**: solicitudes de extracción sin código asistido por Claude Code

106 

107Cambie a la vista **Lines of code** para ver el mismo desglose por líneas de código en lugar de recuento de PR.

108 

109#### Encontrar principales contribuyentes

110 

111La Tabla de clasificación muestra los 10 principales usuarios clasificados por volumen de contribución. Alterne entre:

112 

113* **Pull requests**: muestra PRs con Claude Code vs Todos los PRs para cada usuario

114* **Lines of code**: muestra líneas con Claude Code vs Todas las líneas para cada usuario

115 

116Haga clic en **Export all users** para descargar datos de contribución completos para todos los usuarios como archivo CSV. La exportación incluye todos los usuarios, no solo los 10 principales mostrados.

117 

118### Atribución de PR

119 

120Cuando las métricas de contribución están habilitadas, Claude Code analiza las solicitudes de extracción fusionadas para determinar qué código fue escrito con asistencia de Claude Code. Esto se hace haciendo coincidir la actividad de sesión de Claude Code con el código en cada PR.

121 

122#### Criterios de etiquetado

123 

124Los PRs se etiquetan como "with Claude Code" si contienen al menos una línea de código escrita durante una sesión de Claude Code. El sistema utiliza coincidencia conservadora: solo el código donde hay alta confianza en la participación de Claude Code se cuenta como asistido.

125 

126#### Proceso de atribución

127 

128Cuando se fusiona una solicitud de extracción:

129 

1301. Se extraen las líneas agregadas del diff de PR

1312. Se identifican las sesiones de Claude Code que editaron archivos coincidentes dentro de una ventana de tiempo

1323. Las líneas de PR se comparan con la salida de Claude Code utilizando múltiples estrategias

1334. Se calculan métricas para líneas asistidas por IA y líneas totales

134 

135Antes de la comparación, las líneas se normalizan: se recorta el espacio en blanco, se contraen múltiples espacios, se estandarizan las comillas y el texto se convierte a minúsculas.

136 

137Las solicitudes de extracción fusionadas que contienen líneas asistidas por Claude Code se etiquetan como `claude-code-assisted` en GitHub.

138 

139#### Ventana de tiempo

140 

141Se consideran sesiones de 21 días antes a 2 días después de la fecha de fusión de PR para la coincidencia de atribución.

142 

143#### Archivos excluidos

144 

145Ciertos archivos se excluyen automáticamente del análisis porque se generan automáticamente:

146 

147* Archivos de bloqueo: package-lock.json, yarn.lock, Cargo.lock y similares

148* Código generado: salidas de Protobuf, artefactos de compilación, archivos minificados

149* Directorios de compilación: dist/, build/, node\_modules/, target/

150* Accesorios de prueba: instantáneas, cassettes, datos simulados

151* Líneas con más de 1.000 caracteres, que probablemente sean minificadas o generadas

152 

153#### Notas de atribución

154 

155Tenga en cuenta estos detalles adicionales al interpretar datos de atribución:

156 

157* El código sustancialmente reescrito por desarrolladores, con más del 20% de diferencia, no se atribuye a Claude Code

158* Las sesiones fuera de la ventana de 21 días no se consideran

159* El algoritmo no considera la rama de origen o destino de PR al realizar la atribución

160 

161### Obtener lo máximo de los análisis

162 

163Utilice métricas de contribución para demostrar ROI, identificar patrones de adopción y encontrar miembros del equipo que puedan ayudar a otros a comenzar.

164 

165#### Monitorear adopción

166 

167Rastreé el gráfico de Adopción y los recuentos de usuarios para identificar:

168 

169* Usuarios activos que pueden compartir mejores prácticas

170* Tendencias generales de adopción en su organización

171* Caídas en el uso que pueden indicar fricción o problemas

172 

173#### Medir ROI

174 

175Las métricas de contribución ayudan a responder "¿Vale la pena esta herramienta la inversión?" con datos de su propio código base:

176 

177* Rastreé cambios en PRs por usuario a lo largo del tiempo a medida que aumenta la adopción

178* Compare PRs y líneas de código enviadas con y sin Claude Code

179* Utilice junto con [métricas DORA](https://dora.dev/), velocidad de sprint u otros KPI de ingeniería para comprender cambios por adoptar Claude Code

180 

181#### Identificar usuarios avanzados

182 

183La Tabla de clasificación le ayuda a encontrar miembros del equipo con alta adopción de Claude Code que pueden:

184 

185* Compartir técnicas de prompting y flujos de trabajo con el equipo

186* Proporcionar comentarios sobre qué está funcionando bien

187* Ayudar a incorporar nuevos usuarios

188 

189#### Acceder a datos mediante programación

190 

191Para consultar estos datos a través de GitHub, busque PRs etiquetados con `claude-code-assisted`.

192 

193## Acceder a análisis para clientes de API

194 

195Los clientes de API que utilizan Claude Console pueden acceder a análisis en [platform.claude.com/claude-code](https://platform.claude.com/claude-code). Necesita el permiso UsageView para acceder al panel, que se otorga a los roles Developer, Billing, Admin, Owner y Primary Owner.

196 

197<Note>

198 Las métricas de contribución con integración de GitHub no están disponibles actualmente para clientes de API. El panel de Console muestra solo métricas de uso y gastos.

199</Note>

200 

201El panel de Console muestra:

202 

203* **Lines of code accepted**: líneas totales de código escritas por Claude Code que los usuarios han aceptado en sus sesiones. Esto excluye sugerencias rechazadas y no rastrea eliminaciones posteriores.

204* **Suggestion accept rate**: porcentaje de veces que los usuarios aceptan el uso de herramientas de edición de código, incluidas las herramientas Edit, Write y NotebookEdit.

205* **Activity**: usuarios activos diarios y sesiones mostradas en un gráfico.

206* **Spend**: costos diarios de API en dólares junto con el recuento de usuarios.

207 

208### Ver información del equipo

209 

210La tabla de información del equipo muestra métricas por usuario:

211 

212* **Members**: todos los usuarios que se han autenticado en Claude Code. Los usuarios de clave API se muestran por identificador de clave, los usuarios de OAuth se muestran por dirección de correo electrónico.

213* **Spend this month**: costos totales de API por usuario para el mes actual.

214* **Lines this month**: total por usuario de líneas de código aceptadas para el mes actual.

215 

216<Note>

217 Las cifras de gastos en el panel de Console son estimaciones para fines de análisis. Para costos reales, consulte su página de facturación.

218</Note>

219 

220## Recursos relacionados

221 

222* [Monitoring with OpenTelemetry](/es/monitoring-usage): exportar métricas y eventos en tiempo real a su pila de observabilidad

223* [Manage costs effectively](/es/costs): establecer límites de gastos y optimizar el uso de tokens

224* [Permissions](/es/permissions): configurar roles y permisos

authentication.md +155 −0 created

Details

1> ## Documentation Index

2> Fetch the complete documentation index at: https://code.claude.com/docs/llms.txt

3> Use this file to discover all available pages before exploring further.

4 

5# Autenticación

6 

7> Inicie sesión en Claude Code y configure la autenticación para individuos, equipos y organizaciones.

8 

9Claude Code admite múltiples métodos de autenticación según su configuración. Los usuarios individuales pueden iniciar sesión con una cuenta de Claude.ai, mientras que los equipos pueden usar Claude for Teams o Enterprise, la Claude Console, o un proveedor de nube como Amazon Bedrock, Google Vertex AI o Microsoft Foundry.

10 

11## Inicie sesión en Claude Code

12 

13Después de [instalar Claude Code](/es/setup#install-claude-code), ejecute `claude` en su terminal. En el primer lanzamiento, Claude Code abre una ventana del navegador para que inicie sesión.

14 

15Si el navegador no se abre automáticamente, presione `c` para copiar la URL de inicio de sesión al portapapeles y luego péguelo en su navegador.

16 

17Si su navegador muestra un código de inicio de sesión en lugar de redirigirse después de que inicie sesión, péguelo en el terminal en el símbolo del sistema `Paste code here if prompted`. Esto sucede cuando el navegador no puede alcanzar el servidor de devolución de llamada local de Claude Code, lo cual es común en WSL2, sesiones SSH y contenedores.

18 

19Puede autenticarse con cualquiera de estos tipos de cuenta:

20 

21* **Suscripción Claude Pro o Max**: inicie sesión con su cuenta de Claude.ai. Suscríbase en [claude.com/pricing](https://claude.com/pricing?utm_source=claude_code\&utm_medium=docs\&utm_content=authentication_pro_max).

22* **Claude for Teams o Enterprise**: inicie sesión con la cuenta de Claude.ai que su administrador de equipo le invitó a usar.

23* **Claude Console**: inicie sesión con sus credenciales de Console. Su administrador debe haberle [invitado](#claude-console-authentication) primero.

24* **Proveedores de nube**: si su organización usa [Amazon Bedrock](/es/amazon-bedrock), [Google Vertex AI](/es/google-vertex-ai) o [Microsoft Foundry](/es/microsoft-foundry), establezca las variables de entorno requeridas antes de ejecutar `claude`. No se necesita inicio de sesión en el navegador.

25 

26Para cerrar sesión y volver a autenticarse, escriba `/logout` en el símbolo del sistema de Claude Code.

27 

28Si tiene problemas para iniciar sesión, consulte [solución de problemas de autenticación](/es/troubleshoot-install#login-and-authentication).

29 

30## Configure la autenticación del equipo

31 

32Para equipos y organizaciones, puede configurar el acceso a Claude Code de una de estas formas:

33 

34* [Claude for Teams o Enterprise](#claude-for-teams-or-enterprise), recomendado para la mayoría de los equipos

35* [Claude Console](#claude-console-authentication)

36* [Amazon Bedrock](/es/amazon-bedrock)

37* [Google Vertex AI](/es/google-vertex-ai)

38* [Microsoft Foundry](/es/microsoft-foundry)

39 

40### Claude for Teams o Enterprise

41 

42[Claude for Teams](https://claude.com/pricing?utm_source=claude_code\&utm_medium=docs\&utm_content=authentication_teams#team-&-enterprise) y [Claude for Enterprise](https://anthropic.com/contact-sales?utm_source=claude_code\&utm_medium=docs\&utm_content=authentication_enterprise) proporcionan la mejor experiencia para organizaciones que usan Claude Code. Los miembros del equipo obtienen acceso tanto a Claude Code como a Claude en la web con facturación centralizada y gestión de equipos.

43 

44* **Claude for Teams**: plan de autoservicio con características de colaboración, herramientas de administración y gestión de facturación. Mejor para equipos más pequeños.

45* **Claude for Enterprise**: añade SSO, captura de dominio, permisos basados en roles, API de cumplimiento y configuración de políticas administradas para configuraciones de Claude Code en toda la organización. Mejor para organizaciones más grandes con requisitos de seguridad y cumplimiento.

46 

47<Steps>

48 <Step title="Suscribirse">

49 Suscríbase a [Claude for Teams](https://claude.com/pricing?utm_source=claude_code\&utm_medium=docs\&utm_content=authentication_teams_step#team-&-enterprise) o póngase en contacto con ventas para [Claude for Enterprise](https://anthropic.com/contact-sales?utm_source=claude_code\&utm_medium=docs\&utm_content=authentication_enterprise_step).

50 </Step>

51 

52 <Step title="Invitar a miembros del equipo">

53 Invite a miembros del equipo desde el panel de administración.

54 </Step>

55 

56 <Step title="Instalar e iniciar sesión">

57 Los miembros del equipo instalan Claude Code e inician sesión con sus cuentas de Claude.ai.

58 </Step>

59</Steps>

60 

61### Autenticación de Claude Console

62 

63Para organizaciones que prefieren facturación basada en API, puede configurar el acceso a través de Claude Console.

64 

65<Steps>

66 <Step title="Crear o usar una cuenta de Console">

67 Use su cuenta de Claude Console existente o cree una nueva.

68 </Step>

69 

70 <Step title="Agregar usuarios">

71 Puede agregar usuarios mediante cualquiera de estos métodos:

72 

73 * Invitar usuarios en masa desde dentro de Console: Settings -> Members -> Invite

74 * [Configurar SSO](https://support.claude.com/en/articles/13132885-setting-up-single-sign-on-sso)

75 </Step>

76 

77 <Step title="Asignar roles">

78 Al invitar usuarios, asigne uno de:

79 

80 * **Rol Claude Code**: los usuarios solo pueden crear claves API de Claude Code

81 * **Rol Developer**: los usuarios pueden crear cualquier tipo de clave API

82 </Step>

83 

84 <Step title="Los usuarios completan la configuración">

85 Cada usuario invitado necesita:

86 

87 * Aceptar la invitación de Console

88 * [Verificar requisitos del sistema](/es/setup#system-requirements)

89 * [Instalar Claude Code](/es/setup#install-claude-code)

90 * Iniciar sesión con credenciales de cuenta de Console

91 </Step>

92</Steps>

93 

94### Autenticación del proveedor de nube

95 

96Para equipos que usan Amazon Bedrock, Google Vertex AI o Microsoft Foundry:

97 

98<Steps>

99 <Step title="Seguir la configuración del proveedor">

100 Siga la [documentación de Bedrock](/es/amazon-bedrock), [documentación de Vertex](/es/google-vertex-ai) o [documentación de Microsoft Foundry](/es/microsoft-foundry).

101 </Step>

102 

103 <Step title="Distribuir configuración">

104 Distribuya las variables de entorno e instrucciones para generar credenciales de nube a sus usuarios. Lea más sobre cómo [administrar la configuración aquí](/es/settings).

105 </Step>

106 

107 <Step title="Instalar Claude Code">

108 Los usuarios pueden [instalar Claude Code](/es/setup#install-claude-code).

109 </Step>

110</Steps>

111 

112## Gestión de credenciales

113 

114Claude Code administra de forma segura sus credenciales de autenticación:

115 

116* **Ubicación de almacenamiento**: en macOS, las credenciales se almacenan en el Keychain de macOS cifrado. En Linux y Windows, las credenciales se almacenan en `~/.claude/.credentials.json`, o bajo `$CLAUDE_CONFIG_DIR` si esa variable está establecida. En Linux, el archivo se escribe con modo `0600`; en Windows, hereda los controles de acceso del directorio de su perfil de usuario.

117* **Tipos de autenticación admitidos**: credenciales de Claude.ai, credenciales de API de Claude, Azure Auth, Bedrock Auth y Vertex Auth.

118* **Scripts de credenciales personalizados**: la configuración [`apiKeyHelper`](/es/settings#available-settings) se puede configurar para ejecutar un script de shell que devuelva una clave API.

119* **Intervalos de actualización**: por defecto, `apiKeyHelper` se llama después de 5 minutos o en respuesta HTTP 401. Establezca la variable de entorno `CLAUDE_CODE_API_KEY_HELPER_TTL_MS` para intervalos de actualización personalizados.

120* **Aviso de helper lento**: si `apiKeyHelper` tarda más de 10 segundos en devolver una clave, Claude Code muestra un aviso de advertencia en la barra de símbolo del sistema mostrando el tiempo transcurrido. Si ve este aviso regularmente, verifique si su script de credenciales se puede optimizar.

121 

122`apiKeyHelper`, `ANTHROPIC_API_KEY` y `ANTHROPIC_AUTH_TOKEN` se aplican solo a sesiones de CLI de terminal. Claude Desktop y sesiones remotas usan OAuth exclusivamente y no llaman a `apiKeyHelper` ni leen variables de entorno de clave API.

123 

124### Precedencia de autenticación

125 

126Cuando hay múltiples credenciales presentes, Claude Code elige una en este orden:

127 

1281. Credenciales del proveedor de nube, cuando `CLAUDE_CODE_USE_BEDROCK`, `CLAUDE_CODE_USE_VERTEX` o `CLAUDE_CODE_USE_FOUNDRY` está establecido. Consulte [integraciones de terceros](/es/third-party-integrations) para la configuración.

1292. Variable de entorno `ANTHROPIC_AUTH_TOKEN`. Se envía como encabezado `Authorization: Bearer`. Use esto cuando enrute a través de una [puerta de enlace LLM o proxy](/es/llm-gateway) que se autentica con tokens de portador en lugar de claves API de Anthropic.

1303. Variable de entorno `ANTHROPIC_API_KEY`. Se envía como encabezado `X-Api-Key`. Use esto para acceso directo a la API de Anthropic con una clave de [Claude Console](https://platform.claude.com). En modo interactivo, se le solicita una vez que apruebe o rechace la clave, y su elección se recuerda. Para cambiarla más tarde, use el botón de alternancia "Use custom API key" en `/config`. En modo no interactivo (`-p`), la clave siempre se usa cuando está presente.

1314. Salida del script [`apiKeyHelper`](/es/settings#available-settings). Use esto para credenciales dinámicas o rotativas, como tokens de corta duración obtenidos de un almacén.

1325. Variable de entorno `CLAUDE_CODE_OAUTH_TOKEN`. Un token OAuth de larga duración generado por [`claude setup-token`](#generate-a-long-lived-token). Use esto para canalizaciones de CI y scripts donde el inicio de sesión del navegador no está disponible.

1336. Credenciales OAuth de suscripción de `/login`. Este es el predeterminado para usuarios de Claude Pro, Max, Team y Enterprise.

134 

135Si tiene una suscripción activa de Claude pero también tiene `ANTHROPIC_API_KEY` establecido en su entorno, la clave API tiene precedencia una vez aprobada. Esto puede causar fallos de autenticación si la clave pertenece a una organización deshabilitada o expirada. Ejecute `unset ANTHROPIC_API_KEY` para volver a su suscripción y verifique `/status` para confirmar qué método está activo.

136 

137[Claude Code en la Web](/es/claude-code-on-the-web) siempre usa sus credenciales de suscripción. `ANTHROPIC_API_KEY` y `ANTHROPIC_AUTH_TOKEN` en el entorno de sandbox no las anulan.

138 

139### Generar un token de larga duración

140 

141Para canalizaciones de CI, scripts u otros entornos donde el inicio de sesión interactivo del navegador no está disponible, genere un token OAuth de un año con `claude setup-token`:

142 

143```bash theme={null}

144claude setup-token

145```

146 

147El comando lo guía a través de la autorización OAuth e imprime un token en el terminal. No guarda el token en ningún lugar; cópielo y establézcalo como la variable de entorno `CLAUDE_CODE_OAUTH_TOKEN` donde desee autenticarse:

148 

149```bash theme={null}

150export CLAUDE_CODE_OAUTH_TOKEN=your-token

151```

152 

153Este token se autentica con su suscripción de Claude y requiere un plan Pro, Max, Team o Enterprise. Se limita solo a inferencia y no puede establecer sesiones de [Remote Control](/es/remote-control).

154 

155[Bare mode](/es/headless#start-faster-with-bare-mode) no lee `CLAUDE_CODE_OAUTH_TOKEN`. Si su script pasa `--bare`, autentíquese con `ANTHROPIC_API_KEY` o un `apiKeyHelper` en su lugar.

auto-mode-config.md +178 −0 created

Details

1> ## Documentation Index

2> Fetch the complete documentation index at: https://code.claude.com/docs/llms.txt

3> Use this file to discover all available pages before exploring further.

4 

5# Configurar el modo automático

6 

7> Indique al clasificador del modo automático qué repositorios, buckets y dominios confía su organización. Establezca el contexto del entorno, anule las reglas de bloqueo y permiso predeterminadas e inspeccione su configuración efectiva con los subcomandos de CLI del modo automático.

8 

9[El modo automático](/es/permission-modes#eliminate-prompts-with-auto-mode) permite que Claude Code se ejecute sin solicitudes de permiso al enrutar cada llamada de herramienta a través de un clasificador que bloquea cualquier cosa irreversible, destructiva o dirigida fuera de su entorno. Utilice el bloque de configuración `autoMode` para indicar a ese clasificador qué repositorios, buckets y dominios confía su organización, de modo que deje de bloquear operaciones internas rutinarias.

10 

11<Note>

12 El modo automático está disponible en los planes Max, Team, Enterprise y API a través de la API de Anthropic. No está disponible en Pro ni en Bedrock, Vertex o Foundry. Si Claude Code informa que el modo automático no está disponible para su cuenta, consulte los [requisitos completos](/es/permission-modes#eliminate-prompts-with-auto-mode), que también cubren los modelos compatibles y la habilitación de administrador en los planes Team y Enterprise.

13</Note>

14 

15De forma predeterminada, el clasificador solo confía en el directorio de trabajo y en los remotos configurados del repositorio actual. Las acciones como enviar a la organización de control de código fuente de su empresa o escribir en un bucket de nube del equipo se bloquean hasta que las agregue a `autoMode.environment`.

16 

17Para saber cómo habilitar el modo automático y qué bloquea de forma predeterminada, consulte [Modos de permiso](/es/permission-modes#eliminate-prompts-with-auto-mode). Esta página es la referencia de configuración.

18 

19Esta página cubre cómo:

20 

21* [Elegir dónde establecer reglas](#where-the-classifier-reads-configuration) en CLAUDE.md, configuración de usuario y configuración administrada

22* [Definir infraestructura de confianza](#define-trusted-infrastructure) con `autoMode.environment`

23* [Anular las reglas de bloqueo y permiso](#override-the-block-and-allow-rules) cuando los valores predeterminados no se ajustan a su canalización

24* [Inspeccionar su configuración efectiva](#inspect-the-defaults-and-your-effective-config) con los subcomandos `claude auto-mode`

25* [Revisar denegaciones](#review-denials) para saber qué agregar a continuación

26 

27## Where the classifier reads configuration

28 

29El clasificador lee el mismo contenido [CLAUDE.md](/es/memory) que carga Claude, por lo que una instrucción como "nunca force push" en el CLAUDE.md de su proyecto dirige tanto a Claude como al clasificador al mismo tiempo. Comience allí para convenciones de proyecto y reglas de comportamiento.

30 

31Para reglas que se aplican en todos los proyectos, como infraestructura de confianza o reglas de denegación en toda la organización, utilice el bloque de configuración `autoMode`. El clasificador lee `autoMode` de los siguientes ámbitos:

32 

33| Ámbito | Archivo | Usar para |

34| :------------------------------- | :-------------------------------------------------------- | :------------------------------------------------------------------- |

35| Un desarrollador | `~/.claude/settings.json` | Infraestructura de confianza personal |

36| Un proyecto, un desarrollador | `.claude/settings.local.json` | Buckets o servicios de confianza por proyecto, gitignored |

37| En toda la organización | [Configuración administrada](/es/server-managed-settings) | Infraestructura de confianza distribuida a todos los desarrolladores |

38| Bandera `--settings` o Agent SDK | JSON en línea | Anulaciones por invocación para automatización |

39 

40El clasificador no lee `autoMode` de la configuración de proyecto compartida en `.claude/settings.json`, por lo que un repositorio registrado no puede inyectar sus propias reglas de permiso.

41 

42Las entradas de cada ámbito se combinan. Un desarrollador puede extender `environment`, `allow` y `soft_deny` con entradas personales pero no puede eliminar entradas que proporciona la configuración administrada. Debido a que las reglas de permiso actúan como excepciones a las reglas de bloqueo dentro del clasificador, una entrada `allow` agregada por un desarrollador puede anular una entrada `soft_deny` de la organización: la combinación es aditiva, no un límite de política dura.

43 

44<Note>

45 El clasificador es una segunda puerta que se ejecuta después del [sistema de permisos](/es/permissions). Para acciones que nunca deben ejecutarse independientemente de la intención del usuario o la configuración del clasificador, utilice `permissions.deny` en la configuración administrada, que bloquea la acción antes de que se consulte el clasificador y no puede ser anulada.

46</Note>

47 

48## Definir infraestructura de confianza

49 

50Para la mayoría de las organizaciones, `autoMode.environment` es el único campo que necesita establecer. Indica al clasificador qué repositorios, buckets y dominios son de confianza: el clasificador lo utiliza para decidir qué significa "externo", por lo que cualquier destino no listado es un objetivo potencial de exfiltración.

51 

52La lista de entorno predeterminada confía en el repositorio de trabajo y sus remotos configurados. Para agregar sus propias entradas junto con ese valor predeterminado, incluya la cadena literal `"$defaults"` en la matriz. Las entradas predeterminadas se insertan en esa posición, por lo que sus entradas personalizadas pueden ir antes o después de ellas.

53 

54```json theme={null}

55{

56 "autoMode": {

57 "environment": [

58 "$defaults",

59 "Source control: github.example.com/acme-corp and all repos under it",

60 "Trusted cloud buckets: s3://acme-build-artifacts, gs://acme-ml-datasets",

61 "Trusted internal domains: *.corp.example.com, api.internal.example.com",

62 "Key internal services: Jenkins at ci.example.com, Artifactory at artifacts.example.com"

63 ]

64 }

65}

66```

67 

68Las entradas son prosa, no regex o patrones de herramientas. El clasificador las lee como reglas en lenguaje natural. Escríbalas como lo haría al describir su infraestructura a un nuevo ingeniero. Una sección de entorno exhaustiva cubre:

69 

70* **Organización**: el nombre de su empresa y para qué se utiliza principalmente Claude Code, como desarrollo de software, automatización de infraestructura o ingeniería de datos

71* **Control de código fuente**: cada organización de GitHub, GitLab o Bitbucket a la que sus desarrolladores envían

72* **Proveedores de nube y buckets de confianza**: nombres de buckets o prefijos que Claude debería poder leer y escribir

73* **Dominios internos de confianza**: nombres de host para API, paneles y servicios dentro de su red, como `*.internal.example.com`

74* **Servicios internos clave**: CI, registros de artefactos, índices de paquetes internos, herramientas de incidentes

75* **Contexto adicional**: restricciones de industria regulada, infraestructura multiinquilino o requisitos de cumplimiento que afecten lo que el clasificador debe tratar como riesgoso

76 

77Una plantilla de inicio útil: complete los campos entre corchetes y elimine las líneas que no se apliquen.

78 

79```json theme={null}

80{

81 "autoMode": {

82 "environment": [

83 "$defaults",

84 "Organization: {COMPANY_NAME}. Primary use: {PRIMARY_USE_CASE, e.g. software development, infrastructure automation}",

85 "Source control: {SOURCE_CONTROL, e.g. GitHub org github.example.com/acme-corp}",

86 "Cloud provider(s): {CLOUD_PROVIDERS, e.g. AWS, GCP, Azure}",

87 "Trusted cloud buckets: {TRUSTED_BUCKETS, e.g. s3://acme-builds, gs://acme-datasets}",

88 "Trusted internal domains: {TRUSTED_DOMAINS, e.g. *.internal.example.com, api.example.com}",

89 "Key internal services: {SERVICES, e.g. Jenkins at ci.example.com, Artifactory at artifacts.example.com}",

90 "Additional context: {EXTRA, e.g. regulated industry, multi-tenant infrastructure, compliance requirements}"

91 ]

92 }

93}

94```

95 

96Cuanto más contexto específico proporcione, mejor podrá el clasificador distinguir operaciones internas rutinarias de intentos de exfiltración.

97 

98No necesita completar todo de una vez. Un despliegue razonable: comience con los valores predeterminados y agregue su organización de control de código fuente y servicios internos clave, lo que resuelve los falsos positivos más comunes como enviar a sus propios repositorios. Agregue dominios de confianza y buckets de nube a continuación. Complete el resto a medida que surjan bloqueos.

99 

100## Anular las reglas de bloqueo y permiso

101 

102Dos campos adicionales le permiten reemplazar las listas de reglas integradas del clasificador: `autoMode.soft_deny` controla qué se bloquea, y `autoMode.allow` controla qué excepciones se aplican. Cada uno es una matriz de descripciones en prosa, leídas como reglas en lenguaje natural. No hay un campo `autoMode.deny`; para bloquear una acción de forma permanente independientemente de la intención, utilice [`permissions.deny`](/es/permissions), que se ejecuta antes del clasificador.

103 

104Dentro del clasificador, la precedencia funciona en tres niveles:

105 

106* Las reglas `soft_deny` bloquean primero

107* Las reglas `allow` luego anulan los bloqueos coincidentes como excepciones

108* La intención explícita del usuario anula ambas: si el mensaje del usuario describe directa y específicamente la acción exacta que Claude está a punto de tomar, el clasificador la permite incluso cuando una regla `soft_deny` coincide

109 

110Las solicitudes generales no cuentan como intención explícita. Pedirle a Claude que "limpie el repositorio" no autoriza force-push, pero pedirle que "force-push esta rama" sí.

111 

112Para flexibilizar, agregue a `allow` cuando el clasificador marca repetidamente un patrón rutinario que las excepciones predeterminadas no cubren. Para endurecer, agregue a `soft_deny` para riesgos específicos de su entorno que los valores predeterminados pierden. Para mantener las reglas integradas mientras agrega las suyas propias, incluya la cadena literal `"$defaults"` en la matriz. Las reglas predeterminadas se insertan en esa posición, por lo que sus reglas personalizadas pueden ir antes o después de ellas, y continúa heredando actualizaciones a medida que la lista integrada cambia en las versiones.

113 

114```json theme={null}

115{

116 "autoMode": {

117 "environment": [

118 "$defaults",

119 "Source control: github.example.com/acme-corp and all repos under it"

120 ],

121 "allow": [

122 "$defaults",

123 "Deploying to the staging namespace is allowed: staging is isolated from production and resets nightly",

124 "Writing to s3://acme-scratch/ is allowed: ephemeral bucket with a 7-day lifecycle policy"

125 ],

126 "soft_deny": [

127 "$defaults",

128 "Never run database migrations outside the migrations CLI, even against dev databases",

129 "Never modify files under infra/terraform/prod/: production infrastructure changes go through the review workflow"

130 ]

131 }

132}

133```

134 

135<Danger>

136 Establecer cualquiera de `environment`, `allow` o `soft_deny` sin `"$defaults"` reemplaza la lista predeterminada completa para esa sección. Si establece `soft_deny` con una sola entrada y omite `"$defaults"`, se descartan todas las reglas de bloqueo integradas: force push, exfiltración de datos, `curl | bash`, despliegues de producción y todas las demás reglas de bloqueo predeterminadas se permiten. Solo omita `"$defaults"` cuando tenga la intención de asumir la propiedad completa de la lista. En ese caso, ejecute `claude auto-mode defaults` para imprimir las reglas integradas, cópielas en su archivo de configuración, luego revise cada regla contra su propia canalización y tolerancia al riesgo.

137</Danger>

138 

139Cada sección se evalúa de forma independiente, por lo que establecer `environment` solo deja intactas las listas predeterminadas `allow` y `soft_deny`.

140 

141## Inspeccione los valores predeterminados y su configuración efectiva

142 

143Tres subcomandos de CLI lo ayudan a inspeccionar y validar su configuración.

144 

145Imprima las reglas `environment`, `allow` y `soft_deny` integradas como JSON:

146 

147```bash theme={null}

148claude auto-mode defaults

149```

150 

151Imprima lo que el clasificador realmente utiliza como JSON, con su configuración aplicada donde se establece y valores predeterminados en caso contrario:

152 

153```bash theme={null}

154claude auto-mode config

155```

156 

157Obtenga retroalimentación de IA sobre sus reglas `allow` y `soft_deny` personalizadas:

158 

159```bash theme={null}

160claude auto-mode critique

161```

162 

163Ejecute `claude auto-mode config` después de guardar su configuración para confirmar que las reglas efectivas son las que espera, con `"$defaults"` expandido en su lugar. Si ha escrito reglas personalizadas, `claude auto-mode critique` las revisa y marca entradas que son ambiguas, redundantes o probables que causen falsos positivos. Si necesita eliminar o reescribir una regla integrada en lugar de agregar una junto a ella, guarde la salida de `claude auto-mode defaults` en un archivo, edite las listas y pegue el resultado en su archivo de configuración en lugar de `"$defaults"`.

164 

165## Review denials

166 

167Cuando el modo automático deniega una llamada de herramienta, la denegación se registra en `/permissions` bajo la pestaña Denegados recientemente. Presione `r` en una acción denegada para marcarla para reintentar: cuando salga del diálogo, Claude Code envía un mensaje indicando al modelo que puede reintentar esa llamada de herramienta y reanuda la conversación.

168 

169Las denegaciones repetidas para el mismo destino generalmente significan que el clasificador carece de contexto. Agregue ese destino a `autoMode.environment`, luego ejecute `claude auto-mode config` para confirmar que surtió efecto.

170 

171Para reaccionar a las denegaciones mediante programación, utilice el [hook `PermissionDenied`](/es/hooks#permissiondenied).

172 

173## See also

174 

175* [Permission modes](/es/permission-modes#eliminate-prompts-with-auto-mode): qué es el modo automático, qué bloquea de forma predeterminada y cómo habilitarlo

176* [Managed settings](/es/server-managed-settings): implemente la configuración `autoMode` en toda su organización

177* [Permissions](/es/permissions): reglas de permiso, pregunta y denegación que se aplican antes de que se ejecute el clasificador

178* [Settings](/es/settings): la referencia de configuración completa, incluida la clave `autoMode`

best-practices.md +583 −0 created

Details

1> ## Documentation Index

2> Fetch the complete documentation index at: https://code.claude.com/docs/llms.txt

3> Use this file to discover all available pages before exploring further.

4 

5# Mejores prácticas para Claude Code

6 

7> Consejos y patrones para aprovechar al máximo Claude Code, desde configurar su entorno hasta escalar entre sesiones paralelas.

8 

9Claude Code es un entorno de codificación agencial. A diferencia de un chatbot que responde preguntas y espera, Claude Code puede leer sus archivos, ejecutar comandos, hacer cambios y trabajar autónomamente a través de problemas mientras usted observa, redirige o se aleja completamente.

10 

11Esto cambia cómo trabaja. En lugar de escribir código usted mismo y pedirle a Claude que lo revise, describe lo que desea y Claude descubre cómo construirlo. Claude explora, planifica e implementa.

12 

13Pero esta autonomía aún viene con una curva de aprendizaje. Claude trabaja dentro de ciertas restricciones que necesita entender.

14 

15Esta guía cubre patrones que han demostrado ser efectivos en los equipos internos de Anthropic y para ingenieros que usan Claude Code en varios códigos base, lenguajes y entornos. Para saber cómo funciona el bucle agencial bajo el capó, consulte [Cómo funciona Claude Code](/es/how-claude-code-works).

16 

17***

18 

19La mayoría de las mejores prácticas se basan en una restricción: la ventana de contexto de Claude se llena rápidamente y el rendimiento se degrada a medida que se llena.

20 

21La ventana de contexto de Claude contiene toda su conversación, incluido cada mensaje, cada archivo que Claude lee y cada salida de comando. Sin embargo, esto puede llenarse rápidamente. Una única sesión de depuración o exploración de código base podría generar y consumir decenas de miles de tokens.

22 

23Esto importa porque el rendimiento del LLM se degrada a medida que se llena el contexto. Cuando la ventana de contexto se está llenando, Claude puede comenzar a "olvidar" instrucciones anteriores o cometer más errores. La ventana de contexto es el recurso más importante a gestionar. Para ver cómo se llena una sesión en la práctica, [vea un recorrido interactivo](/es/context-window) de lo que se carga al inicio y cuánto cuesta cada lectura de archivo. Rastree el uso de contexto continuamente con una [línea de estado personalizada](/es/statusline), y consulte [Reducir el uso de tokens](/es/costs#reduce-token-usage) para estrategias sobre cómo reducir el uso de tokens.

24 

25***

26 

27## Dé a Claude una forma de verificar su trabajo

28 

29<Tip>

30 Incluya pruebas, capturas de pantalla o salidas esperadas para que Claude pueda verificarse a sí mismo. Esta es la cosa de mayor apalancamiento que puede hacer.

31</Tip>

32 

33Claude funciona dramáticamente mejor cuando puede verificar su propio trabajo, como ejecutar pruebas, comparar capturas de pantalla y validar salidas.

34 

35Sin criterios de éxito claros, podría producir algo que se vea bien pero que en realidad no funcione. Usted se convierte en el único bucle de retroalimentación, y cada error requiere su atención.

36 

37| Estrategia | Antes | Después |

38| ------------------------------------------ | ------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |

39| **Proporcionar criterios de verificación** | *"implementar una función que valide direcciones de correo electrónico"* | *"escribir una función validateEmail. casos de prueba de ejemplo: [user@example.com](mailto:user@example.com) es verdadero, inválido es falso, [user@.com](mailto:user@.com) es falso. ejecutar las pruebas después de implementar"* |

40| **Verificar cambios de UI visualmente** | *"hacer que el panel de control se vea mejor"* | *"\[pegar captura de pantalla] implementar este diseño. tomar una captura de pantalla del resultado y compararla con la original. listar diferencias y corregirlas"* |

41| **Abordar causas raíz, no síntomas** | *"la compilación está fallando"* | *"la compilación falla con este error: \[pegar error]. corregirlo y verificar que la compilación tenga éxito. abordar la causa raíz, no suprimir el error"* |

42 

43Los cambios de UI se pueden verificar usando la [extensión Claude en Chrome](/es/chrome). Abre nuevas pestañas en su navegador, prueba la UI e itera hasta que el código funcione.

44 

45Su verificación también puede ser un conjunto de pruebas, un linter o un comando Bash que verifique la salida. Invierta en hacer que su verificación sea sólida.

46 

47***

48 

49## Explore primero, luego planifique, luego codifique

50 

51<Tip>

52 Separe la investigación y la planificación de la implementación para evitar resolver el problema incorrecto.

53</Tip>

54 

55Dejar que Claude salte directamente a la codificación puede producir código que resuelve el problema incorrecto. Use [Plan Mode](/es/common-workflows#use-plan-mode-for-safe-code-analysis) para separar la exploración de la ejecución.

56 

57El flujo de trabajo recomendado tiene cuatro fases:

58 

59<Steps>

60 <Step title="Explorar">

61 Ingrese Plan Mode. Claude lee archivos y responde preguntas sin hacer cambios.

62 

63 ```txt claude (Plan Mode) theme={null}

64 read /src/auth and understand how we handle sessions and login.

65 also look at how we manage environment variables for secrets.

66 ```

67 </Step>

68 

69 <Step title="Planificar">

70 Pida a Claude que cree un plan de implementación detallado.

71 

72 ```txt claude (Plan Mode) theme={null}

73 I want to add Google OAuth. What files need to change?

74 What's the session flow? Create a plan.

75 ```

76 

77 Presione `Ctrl+G` para abrir el plan en su editor de texto para edición directa antes de que Claude continúe.

78 </Step>

79 

80 <Step title="Implementar">

81 Vuelva al Modo Normal y deje que Claude codifique, verificando contra su plan.

82 

83 ```txt claude (Normal Mode) theme={null}

84 implement the OAuth flow from your plan. write tests for the

85 callback handler, run the test suite and fix any failures.

86 ```

87 </Step>

88 

89 <Step title="Confirmar">

90 Pida a Claude que confirme con un mensaje descriptivo y cree un PR.

91 

92 ```txt claude (Normal Mode) theme={null}

93 commit with a descriptive message and open a PR

94 ```

95 </Step>

96</Steps>

97 

98<Callout>

99 Plan Mode es útil, pero también agrega sobrecarga.

100 

101 Para tareas donde el alcance es claro y la corrección es pequeña (como corregir un error tipográfico, agregar una línea de registro o renombrar una variable) pida a Claude que lo haga directamente.

102 

103 La planificación es más útil cuando no está seguro del enfoque, cuando el cambio modifica múltiples archivos o cuando no está familiarizado con el código que se está modificando. Si pudiera describir el diff en una oración, omita el plan.

104</Callout>

105 

106***

107 

108## Proporcione contexto específico en sus indicaciones

109 

110<Tip>

111 Cuanto más precisas sean sus instrucciones, menos correcciones necesitará.

112</Tip>

113 

114Claude puede inferir intención, pero no puede leer su mente. Haga referencia a archivos específicos, mencione restricciones y señale patrones de ejemplo.

115 

116| Estrategia | Antes | Después |

117| ---------------------------------------------------------------------------------------------------- | -------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

118| **Delimitar la tarea.** Especifique qué archivo, qué escenario y preferencias de prueba. | *"agregar pruebas para foo.py"* | *"escribir una prueba para foo.py cubriendo el caso extremo donde el usuario ha cerrado sesión. evitar mocks."* |

119| **Señalar fuentes.** Dirija a Claude a la fuente que puede responder una pregunta. | *"¿por qué ExecutionFactory tiene una API tan extraña?"* | *"revisar el historial de git de ExecutionFactory y resumir cómo su API llegó a ser así"* |

120| **Hacer referencia a patrones existentes.** Señale a Claude los patrones en su código base. | *"agregar un widget de calendario"* | *"ver cómo se implementan los widgets existentes en la página de inicio para entender los patrones. HotDogWidget.php es un buen ejemplo. seguir el patrón para implementar un nuevo widget de calendario que permita al usuario seleccionar un mes y paginar hacia adelante/atrás para elegir un año. construir desde cero sin bibliotecas que no sean las ya utilizadas en el código base."* |

121| **Describir el síntoma.** Proporcione el síntoma, la ubicación probable y qué significa "corregido". | *"corregir el error de inicio de sesión"* | *"los usuarios informan que el inicio de sesión falla después del agotamiento de la sesión. verificar el flujo de autenticación en src/auth/, especialmente la actualización de tokens. escribir una prueba fallida que reproduzca el problema, luego corregirlo"* |

122 

123Las indicaciones vagas pueden ser útiles cuando está explorando y puede permitirse corregir el curso. Una indicación como `"¿qué mejoraría en este archivo?"` puede revelar cosas en las que no habría pensado en preguntar.

124 

125### Proporcionar contenido enriquecido

126 

127<Tip>

128 Use `@` para hacer referencia a archivos, pegue capturas de pantalla/imágenes o canalice datos directamente.

129</Tip>

130 

131Puede proporcionar datos enriquecidos a Claude de varias maneras:

132 

133* **Haga referencia a archivos con `@`** en lugar de describir dónde vive el código. Claude lee el archivo antes de responder.

134* **Pegue imágenes directamente**. Copie/pegue o arrastre y suelte imágenes en la indicación.

135* **Proporcione URLs** para documentación y referencias de API. Use `/permissions` para permitir dominios de uso frecuente.

136* **Canalice datos** ejecutando `cat error.log | claude` para enviar contenidos de archivo directamente.

137* **Deje que Claude obtenga lo que necesita**. Diga a Claude que extraiga contexto por sí mismo usando comandos Bash, herramientas MCP o leyendo archivos.

138 

139***

140 

141## Configure su entorno

142 

143Algunos pasos de configuración hacen que Claude Code sea significativamente más efectivo en todas sus sesiones. Para una descripción general completa de las características de extensión y cuándo usar cada una, consulte [Extender Claude Code](/es/features-overview).

144 

145### Escriba un CLAUDE.md efectivo

146 

147<Tip>

148 Ejecute `/init` para generar un archivo CLAUDE.md inicial basado en la estructura de su proyecto actual, luego refine con el tiempo.

149</Tip>

150 

151CLAUDE.md es un archivo especial que Claude lee al inicio de cada conversación. Incluya comandos Bash, estilo de código y reglas de flujo de trabajo. Esto le da a Claude contexto persistente que no puede inferir solo del código.

152 

153El comando `/init` analiza su código base para detectar sistemas de compilación, marcos de prueba y patrones de código, dándole una base sólida para refinar.

154 

155No hay un formato requerido para archivos CLAUDE.md, pero manténgalo corto y legible por humanos. Por ejemplo:

156 

157```markdown CLAUDE.md theme={null}

158# Code style

159- Use ES modules (import/export) syntax, not CommonJS (require)

160- Destructure imports when possible (eg. import { foo } from 'bar')

161 

162# Workflow

163- Be sure to typecheck when you're done making a series of code changes

164- Prefer running single tests, and not the whole test suite, for performance

165```

166 

167CLAUDE.md se carga cada sesión, así que solo incluya cosas que se apliquen ampliamente. Para conocimiento de dominio o flujos de trabajo que solo son relevantes a veces, use [skills](/es/skills) en su lugar. Claude los carga bajo demanda sin inflar cada conversación.

168 

169Manténgalo conciso. Para cada línea, pregúntese: *"¿Causaría que Claude cometiera errores si elimino esto?"* Si no, elimínelo. Los archivos CLAUDE.md inflados hacen que Claude ignore sus instrucciones reales.

170 

171| ✅ Incluir | ❌ Excluir |

172| -------------------------------------------------------------------------- | ---------------------------------------------------------------- |

173| Comandos Bash que Claude no puede adivinar | Cualquier cosa que Claude pueda descubrir leyendo código |

174| Reglas de estilo de código que difieren de los valores predeterminados | Convenciones de lenguaje estándar que Claude ya conoce |

175| Instrucciones de prueba y ejecutores de prueba preferidos | Documentación detallada de API (enlace a documentos en su lugar) |

176| Etiqueta del repositorio (nomenclatura de rama, convenciones de PR) | Información que cambia frecuentemente |

177| Decisiones arquitectónicas específicas de su proyecto | Explicaciones largas o tutoriales |

178| Peculiaridades del entorno de desarrollo (variables de entorno requeridas) | Prácticas evidentes por sí solas como "escribir código limpio" |

179| Errores comunes o comportamientos no obvios | |

180 

181Si Claude sigue haciendo algo que no desea a pesar de tener una regla en su contra, el archivo probablemente sea demasiado largo y la regla se está perdiendo. Si Claude le hace preguntas que se responden en CLAUDE.md, la redacción podría ser ambigua. Trate CLAUDE.md como código: revíselo cuando las cosas salgan mal, elimine regularmente y pruebe cambios observando si el comportamiento de Claude realmente cambia.

182 

183Puede ajustar instrucciones agregando énfasis (por ejemplo, "IMPORTANTE" o "DEBE") para mejorar la adherencia. Verifique CLAUDE.md en git para que su equipo pueda contribuir. El archivo se compone en valor con el tiempo.

184 

185Los archivos CLAUDE.md pueden importar archivos adicionales usando la sintaxis `@path/to/import`:

186 

187```markdown CLAUDE.md theme={null}

188See @README.md for project overview and @package.json for available npm commands.

189 

190# Additional Instructions

191- Git workflow: @docs/git-instructions.md

192- Personal overrides: @~/.claude/my-project-instructions.md

193```

194 

195Puede colocar archivos CLAUDE.md en varias ubicaciones:

196 

197* **Carpeta de inicio (`~/.claude/CLAUDE.md`)**: se aplica a todas las sesiones de Claude

198* **Raíz del proyecto (`./CLAUDE.md`)**: verificar en git para compartir con su equipo

199* **Raíz del proyecto (`./CLAUDE.local.md`)**: notas personales específicas del proyecto; agregue este archivo a su `.gitignore` para que no se comparta con su equipo

200* **Directorios principales**: útil para monorepos donde tanto `root/CLAUDE.md` como `root/foo/CLAUDE.md` se extraen automáticamente

201* **Directorios secundarios**: Claude extrae archivos CLAUDE.md secundarios bajo demanda cuando trabaja con archivos en esos directorios

202 

203### Configurar permisos

204 

205<Tip>

206 Use [modo automático](/es/permission-modes#eliminate-prompts-with-auto-mode) para dejar que un clasificador maneje aprobaciones, `/permissions` para permitir comandos específicos, o `/sandbox` para aislamiento a nivel del SO. Cada uno reduce interrupciones mientras lo mantiene en control.

207</Tip>

208 

209De forma predeterminada, Claude Code solicita permiso para acciones que podrían modificar su sistema: escrituras de archivo, comandos Bash, herramientas MCP, etc. Esto es seguro pero tedioso. Después de la décima aprobación, realmente no está revisando, solo está haciendo clic. Hay tres formas de reducir estas interrupciones:

210 

211* **Modo automático**: un modelo clasificador separado revisa comandos y bloquea solo lo que se ve arriesgado: escalada de alcance, infraestructura desconocida o acciones impulsadas por contenido hostil. Mejor cuando confía en la dirección general de una tarea pero no desea hacer clic en cada paso

212* **Listas de permisos**: permitir herramientas específicas que sabe que son seguras, como `npm run lint` o `git commit`

213* **Sandboxing**: habilitar aislamiento a nivel del SO que restrinja el acceso al sistema de archivos y red, permitiendo que Claude trabaje más libremente dentro de límites definidos

214 

215Lea más sobre [modos de permiso](/es/permission-modes), [reglas de permiso](/es/permissions) y [sandboxing](/es/sandboxing).

216 

217### Usar herramientas CLI

218 

219<Tip>

220 Diga a Claude Code que use herramientas CLI como `gh`, `aws`, `gcloud` y `sentry-cli` cuando interactúe con servicios externos.

221</Tip>

222 

223Las herramientas CLI son la forma más eficiente en contexto de interactuar con servicios externos. Si usa GitHub, instale la CLI `gh`. Claude sabe cómo usarla para crear problemas, abrir solicitudes de extracción y leer comentarios. Sin `gh`, Claude aún puede usar la API de GitHub, pero las solicitudes no autenticadas a menudo alcanzan límites de velocidad.

224 

225Claude también es efectivo en aprender herramientas CLI que no conoce. Intente indicaciones como `Use 'foo-cli-tool --help' to learn about foo tool, then use it to solve A, B, C.`

226 

227### Conectar servidores MCP

228 

229<Tip>

230 Ejecute `claude mcp add` para conectar herramientas externas como Notion, Figma o su base de datos.

231</Tip>

232 

233Con [servidores MCP](/es/mcp), puede pedir a Claude que implemente características desde rastreadores de problemas, consulte bases de datos, analice datos de monitoreo, integre diseños de Figma y automatice flujos de trabajo.

234 

235### Configurar hooks

236 

237<Tip>

238 Use hooks para acciones que deben suceder cada vez sin excepciones.

239</Tip>

240 

241[Hooks](/es/hooks-guide) ejecutan scripts automáticamente en puntos específicos del flujo de trabajo de Claude. A diferencia de las instrucciones CLAUDE.md que son consultivas, los hooks son deterministas y garantizan que la acción suceda.

242 

243Claude puede escribir hooks para usted. Intente indicaciones como *"Write a hook that runs eslint after every file edit"* o *"Write a hook that blocks writes to the migrations folder."* Edite `.claude/settings.json` directamente para configurar hooks a mano, y ejecute `/hooks` para explorar lo que está configurado.

244 

245### Crear skills

246 

247<Tip>

248 Cree archivos `SKILL.md` en `.claude/skills/` para dar a Claude conocimiento de dominio y flujos de trabajo reutilizables.

249</Tip>

250 

251[Skills](/es/skills) extienden el conocimiento de Claude con información específica de su proyecto, equipo o dominio. Claude los aplica automáticamente cuando son relevantes, o puede invocarlos directamente con `/skill-name`.

252 

253Cree una skill agregando un directorio con un `SKILL.md` a `.claude/skills/`:

254 

255```markdown .claude/skills/api-conventions/SKILL.md theme={null}

256---

257name: api-conventions

258description: REST API design conventions for our services

259---

260# API Conventions

261- Use kebab-case for URL paths

262- Use camelCase for JSON properties

263- Always include pagination for list endpoints

264- Version APIs in the URL path (/v1/, /v2/)

265```

266 

267Las skills también pueden definir flujos de trabajo repetibles que invoca directamente:

268 

269```markdown .claude/skills/fix-issue/SKILL.md theme={null}

270---

271name: fix-issue

272description: Fix a GitHub issue

273disable-model-invocation: true

274---

275Analyze and fix the GitHub issue: $ARGUMENTS.

276 

2771. Use `gh issue view` to get the issue details

2782. Understand the problem described in the issue

2793. Search the codebase for relevant files

2804. Implement the necessary changes to fix the issue

2815. Write and run tests to verify the fix

2826. Ensure code passes linting and type checking

2837. Create a descriptive commit message

2848. Push and create a PR

285```

286 

287Ejecute `/fix-issue 1234` para invocarlo. Use `disable-model-invocation: true` para flujos de trabajo con efectos secundarios que desea activar manualmente.

288 

289### Crear subagents personalizados

290 

291<Tip>

292 Defina asistentes especializados en `.claude/agents/` que Claude pueda delegar para tareas aisladas.

293</Tip>

294 

295[Subagents](/es/sub-agents) se ejecutan en su propio contexto con su propio conjunto de herramientas permitidas. Son útiles para tareas que leen muchos archivos o necesitan enfoque especializado sin saturar su conversación principal.

296 

297```markdown .claude/agents/security-reviewer.md theme={null}

298---

299name: security-reviewer

300description: Reviews code for security vulnerabilities

301tools: Read, Grep, Glob, Bash

302model: opus

303---

304You are a senior security engineer. Review code for:

305- Injection vulnerabilities (SQL, XSS, command injection)

306- Authentication and authorization flaws

307- Secrets or credentials in code

308- Insecure data handling

309 

310Provide specific line references and suggested fixes.

311```

312 

313Diga a Claude que use subagents explícitamente: *"Use a subagent to review this code for security issues."*

314 

315### Instalar plugins

316 

317<Tip>

318 Ejecute `/plugin` para explorar el marketplace. Los plugins agregan skills, herramientas e integraciones sin configuración.

319</Tip>

320 

321[Plugins](/es/plugins) agrupan skills, hooks, subagents y servidores MCP en una única unidad instalable de la comunidad y Anthropic. Si trabaja con un lenguaje tipado, instale un [plugin de inteligencia de código](/es/discover-plugins#code-intelligence) para dar a Claude navegación de símbolos precisa y detección automática de errores después de ediciones.

322 

323Para orientación sobre cómo elegir entre skills, subagents, hooks y MCP, consulte [Extender Claude Code](/es/features-overview#match-features-to-your-goal).

324 

325***

326 

327## Comuníquese efectivamente

328 

329La forma en que se comunica con Claude Code impacta significativamente la calidad de los resultados.

330 

331### Haga preguntas sobre el código base

332 

333<Tip>

334 Haga a Claude preguntas que haría a un ingeniero senior.

335</Tip>

336 

337Al incorporarse a un nuevo código base, use Claude Code para aprender y explorar. Puede hacer a Claude el mismo tipo de preguntas que haría a otro ingeniero:

338 

339* ¿Cómo funciona el registro?

340* ¿Cómo hago un nuevo punto final de API?

341* ¿Qué hace `async move { ... }` en la línea 134 de `foo.rs`?

342* ¿Qué casos extremos maneja `CustomerOnboardingFlowImpl`?

343* ¿Por qué este código llama a `foo()` en lugar de `bar()` en la línea 333?

344 

345Usar Claude Code de esta manera es un flujo de trabajo de incorporación efectivo, mejorando el tiempo de rampa y reduciendo la carga en otros ingenieros. No se requiere indicación especial: haga preguntas directamente.

346 

347### Deje que Claude lo entreviste

348 

349<Tip>

350 Para características más grandes, deje que Claude lo entreviste primero. Comience con una indicación mínima y pida a Claude que lo entreviste usando la herramienta `AskUserQuestion`.

351</Tip>

352 

353Claude hace preguntas sobre cosas que podría no haber considerado, incluyendo implementación técnica, UI/UX, casos extremos y compensaciones.

354 

355```text theme={null}

356I want to build [brief description]. Interview me in detail using the AskUserQuestion tool.

357 

358Ask about technical implementation, UI/UX, edge cases, concerns, and tradeoffs. Don't ask obvious questions, dig into the hard parts I might not have considered.

359 

360Keep interviewing until we've covered everything, then write a complete spec to SPEC.md.

361```

362 

363Una vez que la especificación esté completa, inicie una sesión nueva para ejecutarla. La nueva sesión tiene contexto limpio enfocado completamente en la implementación, y tiene una especificación escrita para hacer referencia.

364 

365***

366 

367## Gestione su sesión

368 

369Las conversaciones son persistentes y reversibles. ¡Úselo a su favor!

370 

371### Corrija el curso temprano y a menudo

372 

373<Tip>

374 Corrija a Claude tan pronto como note que se desvía del camino.

375</Tip>

376 

377Los mejores resultados provienen de bucles de retroalimentación ajustados. Aunque Claude ocasionalmente resuelve problemas perfectamente en el primer intento, corregirlo rápidamente generalmente produce mejores soluciones más rápido.

378 

379* **`Esc`**: detener a Claude a mitad de acción con la tecla `Esc`. El contexto se preserva, para que pueda redirigir.

380* **`Esc + Esc` o `/rewind`**: presione `Esc` dos veces o ejecute `/rewind` para abrir el menú de rebobinado y restaurar la conversación anterior y el estado del código, o resumir desde un mensaje seleccionado.

381* **`"Undo that"`**: haga que Claude revierta sus cambios.

382* **`/clear`**: restablecer contexto entre tareas no relacionadas. Las sesiones largas con contexto irrelevante pueden reducir el rendimiento.

383 

384Si ha corregido a Claude más de dos veces en el mismo problema en una sesión, el contexto está saturado de enfoques fallidos. Ejecute `/clear` e inicie de nuevo con una indicación más específica que incorpore lo que aprendió. Una sesión limpia con una indicación mejor casi siempre supera una sesión larga con correcciones acumuladas.

385 

386### Gestione el contexto agresivamente

387 

388<Tip>

389 Ejecute `/clear` entre tareas no relacionadas para restablecer el contexto.

390</Tip>

391 

392Claude Code compacta automáticamente el historial de conversación cuando se acerca a los límites de contexto, lo que preserva código importante y decisiones mientras libera espacio.

393 

394Durante sesiones largas, la ventana de contexto de Claude puede llenarse con conversación irrelevante, contenidos de archivo y comandos. Esto puede reducir el rendimiento y a veces distraer a Claude.

395 

396* Use `/clear` frecuentemente entre tareas para restablecer completamente la ventana de contexto

397* Cuando se activa la compactación automática, Claude resume lo que más importa, incluyendo patrones de código, estados de archivo y decisiones clave

398* Para más control, ejecute `/compact <instructions>`, como `/compact Focus on the API changes`

399* Para compactar solo parte de la conversación, use `Esc + Esc` o `/rewind`, seleccione un punto de control de mensaje y elija **Summarize from here**. Esto condensa mensajes desde ese punto hacia adelante mientras mantiene el contexto anterior intacto.

400* Personalice el comportamiento de compactación en CLAUDE.md con instrucciones como `"When compacting, always preserve the full list of modified files and any test commands"` para asegurar que el contexto crítico sobreviva a la resumición

401* Para preguntas rápidas que no necesitan permanecer en contexto, use [`/btw`](/es/interactive-mode#side-questions-with-%2Fbtw). La respuesta aparece en una superposición descaritable y nunca entra en el historial de conversación, para que pueda verificar un detalle sin aumentar el contexto.

402 

403### Use subagents para investigación

404 

405<Tip>

406 Delegue investigación con `"use subagents to investigate X"`. Exploran en un contexto separado, manteniendo su conversación principal limpia para la implementación.

407</Tip>

408 

409Dado que el contexto es su restricción fundamental, los subagents son una de las herramientas más poderosas disponibles. Cuando Claude investiga un código base, lee muchos archivos, todos los cuales consumen su contexto. Los subagents se ejecutan en ventanas de contexto separadas e informan resúmenes:

410 

411```text theme={null}

412Use subagents to investigate how our authentication system handles token

413refresh, and whether we have any existing OAuth utilities I should reuse.

414```

415 

416El subagent explora el código base, lee archivos relevantes e informa hallazgos, todo sin saturar su conversación principal.

417 

418También puede usar subagents para verificación después de que Claude implemente algo:

419 

420```text theme={null}

421use a subagent to review this code for edge cases

422```

423 

424### Rebobine con puntos de control

425 

426<Tip>

427 Cada acción que Claude realiza crea un punto de control. Puede restaurar conversación, código o ambos a cualquier punto de control anterior.

428</Tip>

429 

430Claude automáticamente crea puntos de control antes de cambios. Presione Escape dos veces o ejecute `/rewind` para abrir el menú de rebobinado. Puede restaurar solo conversación, restaurar solo código, restaurar ambos o resumir desde un mensaje seleccionado. Consulte [Checkpointing](/es/checkpointing) para detalles.

431 

432En lugar de planificar cuidadosamente cada movimiento, puede decirle a Claude que intente algo arriesgado. Si no funciona, rebobine e intente un enfoque diferente. Los puntos de control persisten entre sesiones, para que pueda cerrar su terminal y aún rebobinar más tarde.

433 

434<Warning>

435 Los puntos de control solo rastrean cambios realizados *por Claude*, no procesos externos. Esto no es un reemplazo para git.

436</Warning>

437 

438### Reanudar conversaciones

439 

440<Tip>

441 Ejecute `claude --continue` para continuar donde lo dejó, o `--resume` para elegir entre sesiones recientes.

442</Tip>

443 

444Claude Code guarda conversaciones localmente. Cuando una tarea abarca múltiples sesiones, no tiene que re-explicar el contexto:

445 

446```bash theme={null}

447claude --continue # Resume the most recent conversation

448claude --resume # Select from recent conversations

449```

450 

451Use `/rename` para dar a las sesiones nombres descriptivos como `"oauth-migration"` o `"debugging-memory-leak"` para que pueda encontrarlas más tarde. Trate las sesiones como ramas: diferentes flujos de trabajo pueden tener contextos separados y persistentes.

452 

453***

454 

455## Automatice y escale

456 

457Una vez que sea efectivo con un Claude, multiplique su salida con sesiones paralelas, modo no interactivo y patrones de abanico.

458 

459Todo hasta ahora asume un humano, un Claude y una conversación. Pero Claude Code escala horizontalmente. Las técnicas en esta sección muestran cómo puede hacer más.

460 

461### Ejecutar modo no interactivo

462 

463<Tip>

464 Use `claude -p "prompt"` en CI, hooks previos a la confirmación o scripts. Agregue `--output-format stream-json` para salida JSON de transmisión.

465</Tip>

466 

467Con `claude -p "your prompt"`, puede ejecutar Claude de forma no interactiva, sin una sesión. El modo no interactivo es cómo integra Claude en canalizaciones de CI, hooks previos a la confirmación o cualquier flujo de trabajo automatizado. Los formatos de salida le permiten analizar resultados mediante programación: texto sin formato, JSON o JSON de transmisión.

468 

469```bash theme={null}

470# One-off queries

471claude -p "Explain what this project does"

472 

473# Structured output for scripts

474claude -p "List all API endpoints" --output-format json

475 

476# Streaming for real-time processing

477claude -p "Analyze this log file" --output-format stream-json

478```

479 

480### Ejecutar múltiples sesiones de Claude

481 

482<Tip>

483 Ejecute múltiples sesiones de Claude en paralelo para acelerar el desarrollo, ejecutar experimentos aislados o iniciar flujos de trabajo complejos.

484</Tip>

485 

486Hay tres formas principales de ejecutar sesiones paralelas:

487 

488* [Aplicación de escritorio Claude Code](/es/desktop#work-in-parallel-with-sessions): Gestione múltiples sesiones locales visualmente. Cada sesión obtiene su propio worktree aislado.

489* [Claude Code en la web](/es/claude-code-on-the-web): Ejecutar en la infraestructura en la nube segura de Anthropic en máquinas virtuales aisladas.

490* [Equipos de agentes](/es/agent-teams): Coordinación automatizada de múltiples sesiones con tareas compartidas, mensajería y un líder de equipo.

491 

492Más allá de paralelizar el trabajo, múltiples sesiones habilitan flujos de trabajo enfocados en la calidad. Un contexto nuevo mejora la revisión de código ya que Claude no estará sesgado hacia el código que acaba de escribir.

493 

494Por ejemplo, use un patrón Escritor/Revisor:

495 

496| Sesión A (Escritor) | Sesión B (Revisor) |

497| ----------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |

498| `Implement a rate limiter for our API endpoints` | |

499| | `Review the rate limiter implementation in @src/middleware/rateLimiter.ts. Look for edge cases, race conditions, and consistency with our existing middleware patterns.` |

500| `Here's the review feedback: [Session B output]. Address these issues.` | |

501 

502Puede hacer algo similar con pruebas: haga que un Claude escriba pruebas, luego otro escriba código para pasarlas.

503 

504### Abanico a través de archivos

505 

506<Tip>

507 Recorra tareas llamando a `claude -p` para cada una. Use `--allowedTools` para permisos de alcance para operaciones por lotes.

508</Tip>

509 

510Para migraciones o análisis grandes, puede distribuir trabajo entre muchas invocaciones paralelas de Claude:

511 

512<Steps>

513 <Step title="Generar una lista de tareas">

514 Haga que Claude enumere todos los archivos que necesitan migración (por ejemplo, `list all 2,000 Python files that need migrating`)

515 </Step>

516 

517 <Step title="Escribir un script para recorrer la lista">

518 ```bash theme={null}

519 for file in $(cat files.txt); do

520 claude -p "Migrate $file from React to Vue. Return OK or FAIL." \

521 --allowedTools "Edit,Bash(git commit *)"

522 done

523 ```

524 </Step>

525 

526 <Step title="Probar en algunos archivos, luego ejecutar a escala">

527 Refine su indicación basada en lo que sale mal con los primeros 2-3 archivos, luego ejecute en el conjunto completo. La bandera `--allowedTools` restringe lo que Claude puede hacer, lo que importa cuando está ejecutando desatendido.

528 </Step>

529</Steps>

530 

531También puede integrar Claude en canalizaciones de datos/procesamiento existentes:

532 

533```bash theme={null}

534claude -p "<your prompt>" --output-format json | your_command

535```

536 

537Use `--verbose` para depuración durante el desarrollo, y apáguelo en producción.

538 

539### Ejecutar autónomamente con modo automático

540 

541Para ejecución ininterrumpida con verificaciones de seguridad en segundo plano, use [modo automático](/es/permission-modes#eliminate-prompts-with-auto-mode). Un modelo clasificador revisa comandos antes de que se ejecuten, bloqueando escalada de alcance, infraestructura desconocida y acciones impulsadas por contenido hostil mientras permite que el trabajo rutinario continúe sin indicaciones.

542 

543```bash theme={null}

544claude --permission-mode auto -p "fix all lint errors"

545```

546 

547Para ejecuciones no interactivas con la bandera `-p`, el modo automático se cancela si el clasificador bloquea repetidamente acciones, ya que no hay usuario al que recurrir. Consulte [cuándo el modo automático se cancela](/es/permission-modes#when-auto-mode-falls-back) para umbrales.

548 

549***

550 

551## Evite patrones de falla comunes

552 

553Estos son errores comunes. Reconocerlos temprano ahorra tiempo:

554 

555* **La sesión de todo incluido.** Comienza con una tarea, luego pregunta a Claude algo no relacionado, luego vuelve a la primera tarea. El contexto está lleno de información irrelevante.

556 > **Solución**: `/clear` entre tareas no relacionadas.

557* **Corrección una y otra vez.** Claude hace algo mal, lo corrige, sigue siendo incorrecto, lo corrige de nuevo. El contexto está contaminado con enfoques fallidos.

558 > **Solución**: Después de dos correcciones fallidas, `/clear` y escriba una indicación inicial mejor incorporando lo que aprendió.

559* **El CLAUDE.md sobre especificado.** Si su CLAUDE.md es demasiado largo, Claude ignora la mitad porque las reglas importantes se pierden en el ruido.

560 > **Solución**: Elimine sin piedad. Si Claude ya hace algo correctamente sin la instrucción, elimínelo o conviértalo en un hook.

561* **La brecha de confianza-luego-verificación.** Claude produce una implementación que se ve plausible pero no maneja casos extremos.

562 > **Solución**: Siempre proporcione verificación (pruebas, scripts, capturas de pantalla). Si no puede verificarlo, no lo envíe.

563* **La exploración infinita.** Pide a Claude que "investigue" algo sin delimitarlo. Claude lee cientos de archivos, llenando el contexto.

564 > **Solución**: Delimite investigaciones estrechamente o use subagents para que la exploración no consuma su contexto principal.

565 

566***

567 

568## Desarrolle su intuición

569 

570Los patrones en esta guía no están grabados en piedra. Son puntos de partida que funcionan bien en general, pero podrían no ser óptimos para cada situación.

571 

572A veces *debería* dejar que el contexto se acumule porque está profundo en un problema complejo y el historial es valioso. A veces debería omitir la planificación y dejar que Claude lo descubra porque la tarea es exploratoria. A veces una indicación vaga es exactamente lo correcto porque desea ver cómo Claude interpreta el problema antes de limitarlo.

573 

574Preste atención a lo que funciona. Cuando Claude produce una salida excelente, note lo que hizo: la estructura de la indicación, el contexto que proporcionó, el modo en que estaba. Cuando Claude lucha, pregúntese por qué. ¿Fue el contexto demasiado ruidoso? ¿La indicación demasiado vaga? ¿La tarea demasiado grande para un pase?

575 

576Con el tiempo, desarrollará intuición que ninguna guía puede capturar. Sabrá cuándo ser específico y cuándo ser abierto, cuándo planificar y cuándo explorar, cuándo limpiar contexto y cuándo dejarlo acumular.

577 

578## Recursos relacionados

579 

580* [Cómo funciona Claude Code](/es/how-claude-code-works): el bucle agencial, herramientas y gestión de contexto

581* [Extender Claude Code](/es/features-overview): skills, hooks, MCP, subagents y plugins

582* [Flujos de trabajo comunes](/es/common-workflows): recetas paso a paso para depuración, pruebas, PRs y más

583* [CLAUDE.md](/es/memory): almacenar convenciones de proyecto y contexto persistente

champion-kit.md +195 −0 created

Details

1> ## Documentation Index

2> Fetch the complete documentation index at: https://code.claude.com/docs/llms.txt

3> Use this file to discover all available pages before exploring further.

4 

5# Kit de campeón

6 

7> Un manual para ingenieros que defienden Claude Code internamente: qué compartir, cómo responder preguntas y cómo aumentar la adopción en tu equipo.

8 

9Esta página es para ingenieros individuales que ya están usando Claude Code y quieren ayudar a su equipo a adoptarlo. Cubre qué compartir, cómo responder las preguntas que recibirá, un manual de treinta días y respuestas a preocupaciones comunes.

10 

11La adopción de una herramienta para desarrolladores rara vez ocurre debido a un anuncio de lanzamiento. Ocurre porque alguien en el equipo comienza a usar la herramienta bien, habla sobre ella abiertamente y facilita que otros la sigan. El trabajo que realiza como campeón tiene un efecto desproporcionado: cada ejemplo que comparte acorta la curva de aprendizaje para los ingenieros que vienen después de usted, y cada pregunta que responde en público convierte la experiencia de una persona en algo en lo que todo el equipo puede construir. Está actuando como un multiplicador para su equipo, no como un servicio de ayuda, y esta guía está estructurada para mantener el rol sostenible en esos términos.

12 

13## El rol de campeón

14 

15El rol consiste en tres comportamientos que se refuerzan mutuamente.

16 

17| Comportamiento | Cómo se ve en la práctica | Por qué importa |

18| ---------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

19| Comparta lo que descubre | Publique los prompts, capturas de pantalla y pequeñas victorias de su propio trabajo en los lugares donde su equipo ya lee, como un canal de ingeniería, un hilo de standup o una descripción de solicitud de extracción. | Los ejemplos extraídos de su propio código base son más persuasivos que cualquier documentación externa, porque los colegas pueden ver exactamente cómo se aplica la herramienta a los problemas que comparten con usted. |

20| Sea la persona a quien la gente pregunta | Cuando un colega pregunta cómo logró algo, responda con el prompt real que utilizó para que puedan aplicarlo directamente a su propia tarea. | Un ejemplo concreto y ejecutable elimina la brecha entre la curiosidad y un primer uso exitoso, que es donde se estancan la mayoría de los esfuerzos de adopción. |

21| Amplíe el círculo | Establezca un pequeño número de hábitos recurrentes y ligeros, como un canal dedicado o un hilo semanal, para que el impulso continúe incluso cuando su atención esté en otro lugar. | La adopción que depende de una sola persona es frágil. La adopción que es llevada por hábitos compartidos continúa componiéndose por sí sola. |

22 

23La mayoría de esto se ajusta naturalmente dentro del trabajo que ya está realizando. La diferencia es una pequeña cantidad de intención adicional sobre dónde se publican sus descubrimientos y cómo viajan sus respuestas.

24 

25### Cuánto debería costarle esto

26 

27Establezca expectativas con usted mismo y con su líder. Las actividades a continuación están diseñadas para caber dentro de una semana laboral normal, y el rol debe seguir siendo un multiplicador de su trabajo existente en lugar de una responsabilidad de soporte adicional.

28 

29| Actividad | Tiempo por semana | Orientación |

30| ------------------------------------------ | -------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- |

31| Publicar victorias y prompts | Aproximadamente 15 minutos | Capture estos en el momento con una captura de pantalla y una o dos oraciones; evite convertirlos en escritos formales. |

32| Responder preguntas en un canal compartido | Aproximadamente 20 minutos | Responda públicamente una vez, luego vincule a esa respuesta cuando la pregunta se repita. |

33| Alojar un hilo semanal de demostración | Aproximadamente 5 minutos | Usted publica el prompt de apertura; el equipo proporciona el contenido. |

34| Emparejamiento opcional o tutoriales | 0 a 30 minutos | Reserve esto para colegas que estén genuinamente bloqueados, y ofrezca el enlace [Quickstart](/es/quickstart) antes de programar tiempo. |

35 

36## Comparta lo que descubre

37 

38Su propia experiencia es el material más persuasivo que sus colegas encontrarán, porque es específico de la base de código, los flujos de trabajo y los problemas que todos comparten. La documentación le dice a la gente qué es posible; sus publicaciones les muestran qué está funcionando realmente en su entorno.

39 

40### Qué vale la pena compartir

41 

42Las publicaciones más útiles describen una técnica que un colega puede reutilizar mañana en lugar de un resultado que ya está completo. Las técnicas se componen a medida que se propagan a través de un equipo; las actualizaciones de estado no.

43 

44Ejemplos de técnicas reutilizables:

45 

46* "Aprendí que @-mencionar un directorio funciona. Lo señalé a `@src/components/` y pregunté cuáles carecían de pruebas, lo que reveló dos que había pasado por alto."

47* "Plan mode (`Shift+Tab`) muestra exactamente qué archivos se tocarán antes de cualquier edición, por lo que estoy cómodo usándolo en código compartido."

48* "Configuré un hook Stop para recibir una notificación de escritorio cuando se completa una tarea larga. La configuración está en el hilo."

49* "Ejecutar `/init` genera un `CLAUDE.md` desde el repositorio para que el asistente deje de preguntar sobre nuestras convenciones."

50 

51### Dónde compartirlo

52 

53Publique donde su equipo ya lee. El objetivo es colocar ejemplos en el camino del trabajo normal en lugar de crear un destino.

54 

55| Ubicación | Mejor para | Formato recomendado |

56| ----------------------------------------------- | ---------------------------------------------------------------------- | --------------------------------------------------------------------------------------------- |

57| Un canal `#claude-code` o de ingeniería general | Descubrimientos, prompts y momentos "hoy aprendí" | Una captura de pantalla acompañada de una o dos oraciones de contexto |

58| Descripciones de solicitudes de extracción | Demostrar el enfoque en código real que los revisores ya están leyendo | Una sola línea como "Claude y yo hicimos esta refactorización; feliz de explicar el enfoque." |

59| Standups o actualizaciones escritas semanales | Normalizar el uso con líderes y gerentes de nivel superior | Una oración describiendo un resultado concreto |

60| Wiki del equipo o documentación interna | Patrones duraderos, skills personalizados y ejemplos de `CLAUDE.md` | Una página corta, vinculada desde el tema del canal para que permanezca detectable |

61 

62### El formato que funciona

63 

64Una captura de pantalla acompañada de una sola línea de contexto, o una breve descripción antes y después, es generalmente el nivel de detalle correcto. Mantenga cada publicación lo suficientemente corta para que alguien que se desplace rápidamente aún absorba el punto. Una escritura larga tiende a guardarse para más tarde y olvidarse, mientras que una publicación corta con una captura de pantalla tiende a copiarse e intentarse.

65 

66Las publicaciones de ejemplo a continuación ilustran el tono y la longitud; adáptelas en lugar de copiarlas textualmente.

67 

68```text theme={null}

69Aprendí hoy que @-mencionar un directorio funciona. Lo señalé a

70@src/components/ y pregunté qué componentes carecían de pruebas, y

71reveló dos que había olvidado.

72```

73 

74```text theme={null}

75Configuré un hook Stop para recibir una notificación de escritorio cuando

76se completa una tarea larga. Comencé una refactorización, me alejé y fui

77notificado cuando terminó. La configuración está en el hilo.

78```

79 

80```text theme={null}

81Plan mode es la razón por la que estoy cómodo usando esto en código que

82importa. Presione Shift+Tab hasta que vea "plan"; establece exactamente

83qué archivos tiene la intención de tocar antes de cambiar nada.

84```

85 

86## Sea la persona a quien la gente pregunta

87 

88Una vez que haya compartido algunos ejemplos, las preguntas seguirán. Aquí es donde el rol de campeón tiene el mayor apalancamiento, porque una buena respuesta a una persona frecuentemente desbloquea a varios otros que están viendo el mismo canal.

89 

90### Responda con un prompt en lugar de una explicación

91 

92Cuando un colega pregunta cómo logró algo, la respuesta más útil es el prompt que realmente utilizó. Aprenderán más ejecutando ese prompt contra su propio problema que de cualquier descripción que pudiera escribir, y les da algo en lo que pueden actuar inmediatamente.

93 

94```text theme={null}

95Colega: ¿Cómo lograste encontrar esa condición de carrera?

96 

97Campeón: Pregunté, "La prueba en @tests/scheduler.test.ts es inestable,

98descubre por qué," y rastreó dos promesas sin unir en el programador.

99Intenta la misma redacción en tu prueba.

100```

101 

102### Señale la característica en lugar de la documentación

103 

104Una respuesta como "Intenta plan mode, presiona `Shift+Tab` hasta que lo veas" es más útil en el momento que un enlace a la documentación. Si la persona necesita más profundidad más tarde, la encontrará por su cuenta; ahora necesita la única cosa que los desbloquea.

105 

106### Preguntas que probablemente escuchará

107 

108| Pregunta | Respuesta sugerida | Recurso de seguimiento |

109| ------------------------------------------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------- |

110| "¿En qué debería intentarlo primero?" | Recomiende una tarea real pero contenida, idealmente un error o tarea que la persona ha estado posponiendo porque es tediosa en lugar de difícil. | [Common workflows](/es/common-workflows) |

111| "¿Cómo confío en que toque mi código?" | Introduzca plan mode: presionar `Shift+Tab` lo cicla, Claude propone exactamente qué tiene la intención de cambiar, y nada se modifica hasta que el usuario aprueba. | [Permissions](/es/permissions) |

112| "¿Vale la pena el esfuerzo de configuración?" | La instalación toma aproximadamente dos minutos, se ejecuta en la terminal y no requiere extensión IDE. Ejecutar `/init` una vez es suficiente para comenzar a trabajar. | [Quickstart](/es/quickstart) |

113| "Produjo un resultado incorrecto." | Anímelos a proporcionar el fallo a Claude. Pegar el mensaje de error o la prueba fallida es mucho más efectivo que reformular la solicitud original. | [Common workflows](/es/common-workflows) |

114| "No entiende las convenciones de nuestro código base." | Sugiera ejecutar `/init` para generar un archivo `CLAUDE.md`, luego agregue las convenciones del equipo, comandos de prueba y cualquier directorio que deba evitarse. | [Memory](/es/memory) |

115| "¿Es esto solo autocompletado?" | Ofrezca una breve demostración en la que Claude explique un archivo desconocido, rastree un error entre servicios o redacte un plan de migración. Estas tareas requieren razonamiento en todo el repositorio en lugar de completar una sola línea. | Una demostración en vivo de dos minutos |

116| "¿Qué hay sobre seguridad y manejo de datos?" | Remita esta pregunta a su administrador. La política de implementación y manejo de datos de su organización ya está configurada, y los campeones no deben improvisar esta respuesta. | [Security](/es/security) · [Data usage](/es/data-usage) |

117 

118## Amplíe el círculo

119 

120El objetivo no es construir un programa o poseer un lanzamiento. Es establecer un pequeño número de hábitos ligeros que permitan que el impulso continúe después de que haya dejado de impulsarlo activamente. Cuando las preguntas en el canal están siendo respondidas por personas que no sean usted, el rol ha cumplido su función.

121 

122### Patrones que tienden a funcionar

123 

124| Patrón | Cómo ejecutarlo | Esfuerzo requerido |

125| ---------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------- |

126| Un canal dedicado | Cree un canal `#claude-code` (o un hilo recurrente en uno existente), fije el enlace [Quickstart](/es/quickstart) y un ejemplo fuerte, y responda preguntas públicamente para que cada respuesta beneficie a todos los que están viendo. | Aproximadamente cinco minutos para configurar, luego ambiental |

127| Un hilo semanal de demostración | Cada viernes, publique "¿Con qué te ayudó Claude esta semana?" No se requiere preparación, diapositivas o reunión; capturas de pantalla y descripciones cortas son suficientes. | Aproximadamente dos minutos por semana |

128| Comparta un skill personalizado | Publique su archivo `.claude/skills/<name>/SKILL.md` más útil, por ejemplo un skill `/ship` que ejecuta pruebas y lint antes de confirmar, con una descripción de una línea. Debido a que los skills son Markdown simple, los colegas pueden adoptarlos inmediatamente. | Aproximadamente cinco minutos por skill |

129| Genere una guía de configuración desde su propio uso | Ejecute `/team-onboarding` en un proyecto en el que haya pasado tiempo real. Claude escanea sus sesiones recientes, comandos y servidores MCP, luego produce una guía que un nuevo compañero de equipo puede pegar como su primer mensaje para reproducir su configuración. Fíjela en el canal. | Aproximadamente dos minutos |

130| Emparéjese en una primera tarea | Ofrezca una única sesión de emparejamiento de quince minutos a cualquiera que esté comenzando. Un resultado exitoso en su propio código es más persuasivo que cualquier presentación. | Aproximadamente quince minutos por persona |

131| Identifique el próximo campeón | El colega que le hace más preguntas generalmente está listo para asumir este rol. Reenvíele esta página y divida las responsabilidades del canal entre ustedes. | Negligible |

132 

133### Manual de treinta días

134 

135Si un plan flexible es útil, la secuencia a continuación refleja lo que tiende a funcionar en la mayoría de los equipos. Ajuste libremente para adaptarse a su contexto.

136 

137<Steps>

138 <Step title="Semana 1: Sembrar el canal">

139 Cree el canal, fije el [Quickstart](/es/quickstart) y publique dos o tres de sus propios ejemplos con los prompts incluidos.

140 

141 **Señal de que está funcionando:** algunos colegas reaccionan o responden, y al menos una pregunta se hace en el canal.

142 </Step>

143 

144 <Step title="Semana 2: Comience el ritmo">

145 Comience el hilo semanal de demostración, responda cada pregunta públicamente y comparta un skill personalizado o un fragmento de `CLAUDE.md`.

146 

147 **Señal de que está funcionando:** alguien que no sea usted publica un ejemplo de su propio trabajo.

148 </Step>

149 

150 <Step title="Semana 3: Emparéjese y consolide">

151 Ofrezca dos o tres sesiones cortas de emparejamiento y consolide las preguntas y respuestas más comunes en un mensaje de preguntas frecuentes fijado.

152 

153 **Señal de que está funcionando:** ve uso repetido, con los mismos colegas regresando en lugar de intentar una vez y detenerse.

154 </Step>

155 

156 <Step title="Semana 4: Entregue">

157 Identifique un segundo campeón y comparta un breve resumen de qué está funcionando y qué no con su líder o administrador.

158 

159 **Señal de que está funcionando:** las preguntas en el canal están siendo respondidas por personas que no sean usted.

160 </Step>

161</Steps>

162 

163### Cuando alguien quiere profundizar

164 

165Usted es la introducción cálida en lugar del programa de incorporación. Cuando un colega se mueve más allá de "¿debería intentar esto?" hacia "¿cómo me vuelvo efectivo con esto?", señálelos a las páginas [Quickstart](/es/quickstart) y [Common workflows](/es/common-workflows). Contienen secciones cortas que cubren las características que son genuinamente útiles pero difíciles de descubrir por su cuenta.

166 

167## Responda a preocupaciones comunes

168 

169El escepticismo saludable es esperado; los ingenieros deben ser cautelosos con las herramientas que tocan su código. La respuesta más efectiva rara vez es argumentar el caso general. En su lugar, reconozca la preocupación, ofrezca un breve replanteamiento y proponga una demostración concreta en el código de la persona. La mayoría de las preocupaciones se resuelven con una sola experiencia exitosa.

170 

171| Preocupación | Respuesta sugerida | Evidencia a ofrecer |

172| ------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------ |

173| "Soy más rápido sin esto." | Eso probablemente es cierto para el código que la persona escribe rutinariamente. Sugiera intentarlo en el trabajo que tienden a evitar: archivos heredados, servicios desconocidos o andamiaje de pruebas, donde el apalancamiento es mayor. | Cronometrar una tarea tediosa de ambas formas y comparar. |

174| "No confío en que la IA toque el código de producción." | Acepte que ningún cambio debe aterrizar sin ser leído. Plan mode combinado con revisión de diff normal significa que nada se aplica que el ingeniero no haya inspeccionado, el mismo estándar que cualquier solicitud de extracción. | Demuestre plan mode en un archivo real. |

175| "Hará que los ingenieros junior sean más débiles." | Usado bien, es un explicador efectivo. Anime a los ingenieros junior a pedirle a Claude que explique un archivo y sus sitios de llamada antes de pedirle que cambie nada. | Ejecute "Explicar @file y dónde se llama desde" juntos. |

176| "Lo intenté una vez y alucinó." | Esto suele ser un problema de contexto en lugar de un problema de modelo. @-mencionar los archivos relevantes, ejecutar `/init` y proporcionar la salida de error real generalmente lo resuelve. | Vuelva a ejecutar su prompt original con el contexto `@` adecuado. |

177| "No tenemos tiempo para aprender otra herramienta." | Claude Code es un comando de terminal en lugar de una plataforma. Si no devuelve valor dentro de la primera sesión, es razonable dejarlo de lado. | Una instalación de dos minutos seguida de un error real. |

178 

179## Hoja de referencia rápida

180 

181Las técnicas a continuación son las que más confiablemente mueven a alguien de una primera prueba al uso diario. Fije esta tabla en un canal o compártala por su cuenta.

182 

183| Técnica | Cómo aplicarla |

184| ------------------------------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

185| Proporcione el contexto correcto | Use referencias `@file` o `@directory/`, o pegue la salida de error o registro directamente. Proporcionar contexto relevante es más efectivo que un prompt elaborado. |

186| Revise el plan antes de la edición | Presione `Shift+Tab` para entrar en plan mode. Claude describirá los cambios previstos para su aprobación antes de ejecutarlos. |

187| Enseñe su repositorio | Ejecute `/init` para generar un archivo `CLAUDE.md`, luego agregue sus convenciones, comandos de prueba y cualquier directorio que no deba modificarse. Ver [Memory](/es/memory). |

188| Reutilice un flujo de trabajo | Guarde un archivo `SKILL.md` en `.claude/skills/<name>/` para crear un skill `/name` que todo el equipo pueda usar. Ver [Skills](/es/skills). |

189| Manténgase informado durante tareas largas | Configure un hook Stop para recibir una notificación de escritorio cuando se completa una tarea de larga duración. Ver [Hooks](/es/hooks-guide). |

190| Recuperarse de un resultado incorrecto | En lugar de reformular la solicitud, pegue la prueba fallida o el seguimiento de pila a Claude y pídale que aborde esa falla específica. |

191| Mantenga las ediciones quirúrgicas | Pida un diff, o especifique "solo cambie X." Claude respeta el alcance cuando el alcance se indica. |

192 

193<Tip>

194 Claude Code se actualiza frecuentemente. Verifique los detalles específicos de la versión contra la [página de inicio de documentación](/es/overview) antes de distribuir este material internamente.

195</Tip>

channels.md +357 −0 created

Details

1> ## Documentation Index

2> Fetch the complete documentation index at: https://code.claude.com/docs/llms.txt

3> Use this file to discover all available pages before exploring further.

4 

5# Enviar eventos a una sesión en ejecución con channels

6 

7> Utilice channels para enviar mensajes, alertas y webhooks a su sesión de Claude Code desde un servidor MCP. Reenvíe resultados de CI, mensajes de chat y eventos de monitoreo para que Claude pueda reaccionar mientras está fuera.

8 

9<Note>

10 Los channels están en [vista previa de investigación](#research-preview) y requieren Claude Code v2.1.80 o posterior. Requieren inicio de sesión en claude.ai. La autenticación de consola y clave API no es compatible. Las organizaciones de Team y Enterprise deben [habilitarlos explícitamente](#enterprise-controls).

11</Note>

12 

13Un channel es un servidor MCP que envía eventos a su sesión de Claude Code en ejecución, para que Claude pueda reaccionar a cosas que suceden mientras no está en la terminal. Los channels pueden ser bidireccionales: Claude lee el evento y responde a través del mismo channel, como un puente de chat. Los eventos solo llegan mientras la sesión está abierta, por lo que para una configuración siempre activa, ejecuta Claude en un proceso de fondo o terminal persistente.

14 

15A diferencia de las integraciones que generan una sesión en la nube nueva o esperan a ser consultadas, el evento llega a la sesión que ya tiene abierta: vea [cómo se comparan los channels](#how-channels-compare).

16 

17Instala un channel como un plugin y lo configura con tus propias credenciales. Telegram, Discord e iMessage se incluyen en la vista previa de investigación.

18 

19Cuando Claude responde a través de un channel, ve el mensaje entrante en su terminal pero no el texto de respuesta. La terminal muestra la llamada de herramienta y una confirmación (como "enviado"), y la respuesta real aparece en la otra plataforma.

20 

21Esta página cubre:

22 

23* [Channels compatibles](#supported-channels): configuración de Telegram, Discord e iMessage

24* [Instalar y ejecutar un channel](#quickstart) con fakechat, una demostración de localhost

25* [Quién puede enviar mensajes](#security): listas de permitidos del remitente y cómo se empareja

26* [Habilitar channels para su organización](#enterprise-controls) en Team y Enterprise

27* [Cómo se comparan los channels](#how-channels-compare) con sesiones web, Slack, MCP y Control Remoto

28 

29Para crear su propio channel, consulte la [referencia de Channels](/es/channels-reference).

30 

31## Channels compatibles

32 

33Cada channel compatible es un plugin que requiere [Bun](https://bun.sh). Para una demostración práctica del flujo de plugins antes de conectar una plataforma real, pruebe el [inicio rápido de fakechat](#quickstart).

34 

35<Tabs>

36 <Tab title="Telegram">

37 Vea el [código fuente completo de Telegram](https://github.com/anthropics/claude-plugins-official/tree/main/external_plugins/telegram).

38 

39 <Steps>

40 <Step title="Crear un bot de Telegram">

41 Abra [BotFather](https://t.me/BotFather) en Telegram y envíe `/newbot`. Asígnele un nombre para mostrar y un nombre de usuario único que termine en `bot`. Copie el token que devuelve BotFather.

42 </Step>

43 

44 <Step title="Instalar el plugin">

45 En Claude Code, ejecute:

46 

47 ```

48 /plugin install telegram@claude-plugins-official

49 ```

50 

51 Si Claude Code informa que el plugin no se encuentra en ningún marketplace, su marketplace falta o está desactualizado. Ejecute `/plugin marketplace update claude-plugins-official` para actualizarlo, o `/plugin marketplace add anthropics/claude-plugins-official` si no lo ha agregado antes. Luego reintente la instalación.

52 

53 Después de instalar, ejecute `/reload-plugins` para activar el comando de configuración del plugin.

54 </Step>

55 

56 <Step title="Configurar su token">

57 Ejecute el comando de configuración con el token de BotFather:

58 

59 ```

60 /telegram:configure <token>

61 ```

62 

63 Esto lo guarda en `~/.claude/channels/telegram/.env`. También puede establecer `TELEGRAM_BOT_TOKEN` en su entorno de shell antes de lanzar Claude Code.

64 </Step>

65 

66 <Step title="Reiniciar con channels habilitados">

67 Salga de Claude Code y reinicie con la bandera de channel. Esto inicia el plugin de Telegram, que comienza a sondear mensajes de su bot:

68 

69 ```bash theme={null}

70 claude --channels plugin:telegram@claude-plugins-official

71 ```

72 </Step>

73 

74 <Step title="Emparejar su cuenta">

75 Abra Telegram y envíe cualquier mensaje a su bot. El bot responde con un código de emparejamiento.

76 

77 <Note>Si su bot no responde, asegúrese de que Claude Code se esté ejecutando con `--channels` del paso anterior. El bot solo puede responder mientras el channel está activo.</Note>

78 

79 De vuelta en Claude Code, ejecute:

80 

81 ```

82 /telegram:access pair <code>

83 ```

84 

85 Luego bloquee el acceso para que solo su cuenta pueda enviar mensajes:

86 

87 ```

88 /telegram:access policy allowlist

89 ```

90 </Step>

91 </Steps>

92 </Tab>

93 

94 <Tab title="Discord">

95 Vea el [código fuente completo de Discord](https://github.com/anthropics/claude-plugins-official/tree/main/external_plugins/discord).

96 

97 <Steps>

98 <Step title="Crear un bot de Discord">

99 Vaya al [Portal de Desarrolladores de Discord](https://discord.com/developers/applications), haga clic en **Nueva Aplicación** y asígnele un nombre. En la sección **Bot**, cree un nombre de usuario y luego haga clic en **Restablecer Token** y copie el token.

100 </Step>

101 

102 <Step title="Habilitar Intención de Contenido de Mensaje">

103 En la configuración de su bot, desplácese hasta **Intenciones de Puerta de Enlace Privilegiadas** y habilite **Intención de Contenido de Mensaje**.

104 </Step>

105 

106 <Step title="Invitar el bot a su servidor">

107 Vaya a **OAuth2 > Generador de URL**. Seleccione el alcance `bot` y habilite estos permisos:

108 

109 * Ver Canales

110 * Enviar Mensajes

111 * Enviar Mensajes en Hilos

112 * Leer Historial de Mensajes

113 * Adjuntar Archivos

114 * Agregar Reacciones

115 

116 Abra la URL generada para agregar el bot a su servidor.

117 </Step>

118 

119 <Step title="Instalar el plugin">

120 En Claude Code, ejecute:

121 

122 ```

123 /plugin install discord@claude-plugins-official

124 ```

125 

126 Si Claude Code informa que el plugin no se encuentra en ningún marketplace, su marketplace falta o está desactualizado. Ejecute `/plugin marketplace update claude-plugins-official` para actualizarlo, o `/plugin marketplace add anthropics/claude-plugins-official` si no lo ha agregado antes. Luego reintente la instalación.

127 

128 Después de instalar, ejecute `/reload-plugins` para activar el comando de configuración del plugin.

129 </Step>

130 

131 <Step title="Configurar su token">

132 Ejecute el comando de configuración con el token del bot que copió:

133 

134 ```

135 /discord:configure <token>

136 ```

137 

138 Esto lo guarda en `~/.claude/channels/discord/.env`. También puede establecer `DISCORD_BOT_TOKEN` en su entorno de shell antes de lanzar Claude Code.

139 </Step>

140 

141 <Step title="Reiniciar con channels habilitados">

142 Salga de Claude Code y reinicie con la bandera de channel. Esto conecta el plugin de Discord para que su bot pueda recibir y responder a mensajes:

143 

144 ```bash theme={null}

145 claude --channels plugin:discord@claude-plugins-official

146 ```

147 </Step>

148 

149 <Step title="Emparejar su cuenta">

150 Envíe un mensaje directo a su bot en Discord. El bot responde con un código de emparejamiento.

151 

152 <Note>Si su bot no responde, asegúrese de que Claude Code se esté ejecutando con `--channels` del paso anterior. El bot solo puede responder mientras el channel está activo.</Note>

153 

154 De vuelta en Claude Code, ejecute:

155 

156 ```

157 /discord:access pair <code>

158 ```

159 

160 Luego bloquee el acceso para que solo su cuenta pueda enviar mensajes:

161 

162 ```

163 /discord:access policy allowlist

164 ```

165 </Step>

166 </Steps>

167 </Tab>

168 

169 <Tab title="iMessage">

170 Vea el [código fuente completo de iMessage](https://github.com/anthropics/claude-plugins-official/tree/main/external_plugins/imessage).

171 

172 El channel de iMessage lee su base de datos de Mensajes directamente y envía respuestas a través de AppleScript. Requiere macOS y no necesita token de bot ni servicio externo.

173 

174 <Steps>

175 <Step title="Otorgar Acceso Completo al Disco">

176 La base de datos de Mensajes en `~/Library/Messages/chat.db` está protegida por macOS. La primera vez que el servidor la lee, macOS solicita acceso: haga clic en **Permitir**. El mensaje nombra cualquier aplicación que haya lanzado Bun, como Terminal, iTerm o su IDE.

177 

178 Si el mensaje no aparece o hizo clic en No Permitir, otorgue acceso manualmente en **Configuración del Sistema > Privacidad y Seguridad > Acceso Completo al Disco** y agregue su terminal. Sin esto, el servidor se cierra inmediatamente con `authorization denied`.

179 </Step>

180 

181 <Step title="Instalar el plugin">

182 En Claude Code, ejecute:

183 

184 ```

185 /plugin install imessage@claude-plugins-official

186 ```

187 

188 Si Claude Code informa que el plugin no se encuentra en ningún marketplace, su marketplace falta o está desactualizado. Ejecute `/plugin marketplace update claude-plugins-official` para actualizarlo, o `/plugin marketplace add anthropics/claude-plugins-official` si no lo ha agregado antes. Luego reintente la instalación.

189 </Step>

190 

191 <Step title="Reiniciar con channels habilitados">

192 Salga de Claude Code y reinicie con la bandera de channel:

193 

194 ```bash theme={null}

195 claude --channels plugin:imessage@claude-plugins-official

196 ```

197 </Step>

198 

199 <Step title="Envíese un mensaje a sí mismo">

200 Abra Mensajes en cualquier dispositivo conectado a su ID de Apple y envíese un mensaje a sí mismo. Llega a Claude inmediatamente: el auto-chat evita el control de acceso sin configuración.

201 

202 <Note>La primera respuesta que Claude envía activa un mensaje de Automatización de macOS preguntando si su terminal puede controlar Mensajes. Haga clic en **Aceptar**.</Note>

203 </Step>

204 

205 <Step title="Permitir otros remitentes">

206 De forma predeterminada, solo sus propios mensajes pasan. Para permitir que otro contacto llegue a Claude, agregue su identificador:

207 

208 ```

209 /imessage:access allow +15551234567

210 ```

211 

212 Los identificadores son números de teléfono en formato `+country` o correos electrónicos de ID de Apple como `user@example.com`.

213 </Step>

214 </Steps>

215 </Tab>

216</Tabs>

217 

218También puede [crear su propio channel](/es/channels-reference) para sistemas que aún no tienen un plugin.

219 

220## Inicio rápido

221 

222Fakechat es un channel de demostración oficialmente compatible que ejecuta una interfaz de chat en localhost, sin nada que autenticar y sin servicio externo que configurar.

223 

224Una vez que instale y habilite fakechat, puede escribir en el navegador y el mensaje llega a su sesión de Claude Code. Claude responde y la respuesta aparece de nuevo en el navegador. Después de haber probado la interfaz de fakechat, pruebe [Telegram](https://github.com/anthropics/claude-plugins-official/tree/main/external_plugins/telegram), [Discord](https://github.com/anthropics/claude-plugins-official/tree/main/external_plugins/discord) o [iMessage](https://github.com/anthropics/claude-plugins-official/tree/main/external_plugins/imessage).

225 

226Para probar la demostración de fakechat, necesitará:

227 

228* Claude Code [instalado y autenticado](/es/quickstart#step-1-install-claude-code) con una cuenta de claude.ai

229* [Bun](https://bun.sh) instalado. Los plugins de channel precompilados son scripts de Bun. Verifique con `bun --version`; si eso falla, [instale Bun](https://bun.sh/docs/installation).

230* **Usuarios de Team/Enterprise**: el administrador de su organización debe [habilitar channels](#enterprise-controls) en la configuración administrada

231 

232<Steps>

233 <Step title="Instalar el plugin de channel fakechat">

234 Inicie una sesión de Claude Code y ejecute el comando de instalación:

235 

236 ```text theme={null}

237 /plugin install fakechat@claude-plugins-official

238 ```

239 

240 Si Claude Code informa que el plugin no se encuentra en ningún marketplace, su marketplace falta o está desactualizado. Ejecute `/plugin marketplace update claude-plugins-official` para actualizarlo, o `/plugin marketplace add anthropics/claude-plugins-official` si no lo ha agregado antes. Luego reintente la instalación.

241 </Step>

242 

243 <Step title="Reiniciar con el channel habilitado">

244 Salga de Claude Code y reinicie con `--channels` y pase el plugin fakechat que instaló:

245 

246 ```bash theme={null}

247 claude --channels plugin:fakechat@claude-plugins-official

248 ```

249 

250 El servidor fakechat se inicia automáticamente.

251 

252 <Tip>

253 Puede pasar varios plugins a `--channels`, separados por espacios.

254 </Tip>

255 </Step>

256 

257 <Step title="Enviar un mensaje">

258 Abra la interfaz de fakechat en [http://localhost:8787](http://localhost:8787) y escriba un mensaje:

259 

260 ```text theme={null}

261 hey, what's in my working directory?

262 ```

263 

264 El mensaje llega a su sesión de Claude Code como un evento `<channel source="fakechat">`. Claude lo lee, hace el trabajo y llama a la herramienta `reply` de fakechat. La respuesta aparece en la interfaz de chat.

265 </Step>

266</Steps>

267 

268Si Claude encuentra un mensaje de permiso mientras está fuera de la terminal, la sesión se pausa hasta que responda. Los servidores de channel que declaran la [capacidad de retransmisión de permisos](/es/channels-reference#relay-permission-prompts) pueden reenviarle estos mensajes para que pueda aprobar o denegar de forma remota. Para uso desatendido, [`--dangerously-skip-permissions`](/es/permission-modes#skip-all-checks-with-bypasspermissions-mode) evita los mensajes por completo, pero solo úselo en entornos en los que confíe.

269 

270## Seguridad

271 

272Cada plugin de channel aprobado mantiene una lista de permitidos del remitente: solo los ID que ha agregado pueden enviar mensajes, y todos los demás se descartan silenciosamente.

273 

274Telegram y Discord inician la lista mediante emparejamiento:

275 

2761. Encuentre su bot en Telegram o Discord y envíele cualquier mensaje

2772. El bot responde con un código de emparejamiento

2783. En su sesión de Claude Code, apruebe el código cuando se le solicite

2794. Su ID de remitente se agrega a la lista de permitidos

280 

281iMessage funciona de manera diferente: enviarse un mensaje a sí mismo evita la puerta automáticamente, y agrega otros contactos por identificador con `/imessage:access allow`.

282 

283Además de eso, controla qué servidores están habilitados en cada sesión con `--channels`, y en planes de Team y Enterprise su organización controla la disponibilidad con [`channelsEnabled`](#enterprise-controls).

284 

285Estar en `.mcp.json` no es suficiente para enviar mensajes: un servidor también tiene que estar nombrado en `--channels`.

286 

287La lista de permitidos también controla la [retransmisión de permisos](/es/channels-reference#relay-permission-prompts) si el channel la declara. Cualquiera que pueda responder a través del channel puede aprobar o denegar el uso de herramientas en su sesión, por lo que solo agregue remitentes de lista de permitidos en los que confíe con esa autoridad.

288 

289## Controles empresariales

290 

291En planes de Team y Enterprise, los channels están deshabilitados de forma predeterminada. Los administradores controlan la disponibilidad a través de dos [configuraciones administradas](/es/settings) que los usuarios no pueden anular:

292 

293| Configuración | Propósito | Cuando no está configurado |

294| :---------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :--------------------------------------------- |

295| `channelsEnabled` | Interruptor maestro. Debe ser `true` para que cualquier channel entregue mensajes. Establézcalo a través del botón de alternancia de la [consola de administrador de claude.ai](https://claude.ai/admin-settings/claude-code) o directamente en la configuración administrada. Bloquea todos los channels incluida la bandera de desarrollo cuando está desactivado. | Channels bloqueados |

296| `allowedChannelPlugins` | Qué plugins pueden registrarse una vez que los channels están habilitados. Reemplaza la lista mantenida por Anthropic cuando se establece. Solo se aplica cuando `channelsEnabled` es `true`. | Se aplica la lista predeterminada de Anthropic |

297 

298Los usuarios de Pro y Max sin una organización omiten estas comprobaciones por completo: los channels están disponibles y los usuarios optan por participar por sesión con `--channels`.

299 

300### Habilitar channels para su organización

301 

302Los administradores pueden habilitar channels desde [**claude.ai → Configuración de administrador → Claude Code → Channels**](https://claude.ai/admin-settings/claude-code), o estableciendo `channelsEnabled` en `true` en la configuración administrada.

303 

304Una vez habilitado, los usuarios de su organización pueden usar `--channels` para optar por servidores de channel en sesiones individuales. Si la configuración está deshabilitada o no está establecida, el servidor MCP aún se conecta y sus herramientas funcionan, pero los mensajes de channel no llegarán. Un mensaje de advertencia de inicio le dice al usuario que un administrador habilite la configuración.

305 

306### Restringir qué plugins de channel pueden ejecutarse

307 

308De forma predeterminada, cualquier plugin en la lista de permitidos mantenida por Anthropic puede registrarse como un channel. Los administradores en planes de Team y Enterprise pueden reemplazar esa lista de permitidos con la suya propia estableciendo `allowedChannelPlugins` en la configuración administrada. Úselo para restringir qué plugins oficiales están permitidos, aprobar channels de su propio marketplace interno, o ambos. Cada entrada nombra un plugin y el marketplace del que proviene:

309 

310```json theme={null}

311{

312 "channelsEnabled": true,

313 "allowedChannelPlugins": [

314 { "marketplace": "claude-plugins-official", "plugin": "telegram" },

315 { "marketplace": "claude-plugins-official", "plugin": "discord" },

316 { "marketplace": "acme-corp-plugins", "plugin": "internal-alerts" }

317 ]

318}

319```

320 

321Cuando `allowedChannelPlugins` está establecido, reemplaza completamente la lista de permitidos de Anthropic: solo los plugins listados pueden registrarse. Déjelo sin establecer para volver a la lista de permitidos predeterminada de Anthropic. Una matriz vacía bloquea todos los plugins de channel de la lista de permitidos, pero `--dangerously-load-development-channels` aún puede omitirlo para pruebas locales. Para bloquear channels completamente incluida la bandera de desarrollo, déjelo sin establecer en su lugar.

322 

323Esta configuración requiere `channelsEnabled: true`. Si un usuario pasa un plugin a `--channels` que no está en su lista, Claude Code se inicia normalmente pero el channel no se registra, y el aviso de inicio explica que el plugin no está en la lista aprobada de la organización.

324 

325## Vista previa de investigación

326 

327Los channels son una característica de vista previa de investigación. La disponibilidad se está implementando gradualmente, y la sintaxis de la bandera `--channels` y el contrato de protocolo pueden cambiar según los comentarios.

328 

329Durante la vista previa, `--channels` solo acepta plugins de una lista de permitidos mantenida por Anthropic, o de la lista de permitidos de su organización si un administrador ha establecido [`allowedChannelPlugins`](#restrict-which-channel-plugins-can-run). Los plugins de channel en [claude-plugins-official](https://github.com/anthropics/claude-plugins-official/tree/main/external_plugins) son el conjunto aprobado predeterminado. Si pasa algo que no está en la lista de permitidos efectiva, Claude Code se inicia normalmente pero el channel no se registra, y el aviso de inicio le dice por qué.

330 

331Para probar un channel que está creando, use `--dangerously-load-development-channels`. Vea [Probar durante la vista previa de investigación](/es/channels-reference#test-during-the-research-preview) para obtener información sobre cómo probar channels personalizados que cree.

332 

333Informe de problemas o comentarios en el [repositorio de GitHub de Claude Code](https://github.com/anthropics/claude-code/issues).

334 

335## Cómo se comparan los channels

336 

337Varias características de Claude Code se conectan a sistemas fuera de la terminal, cada una adecuada para un tipo diferente de trabajo:

338 

339| Característica | Qué hace | Bueno para |

340| --------------------------------------------------- | ----------------------------------------------------------------------- | ------------------------------------------------------------------------ |

341| [Claude Code en la web](/es/claude-code-on-the-web) | Ejecuta tareas en una nueva sandbox en la nube, clonada desde GitHub | Delegar trabajo asincrónico independiente que verifica más tarde |

342| [Claude en Slack](/es/slack) | Genera una sesión web desde una mención `@Claude` en un canal o hilo | Iniciar tareas directamente desde el contexto de conversación del equipo |

343| [Servidor MCP](/es/mcp) estándar | Claude lo consulta durante una tarea; nada se envía a la sesión | Dar a Claude acceso bajo demanda para leer o consultar un sistema |

344| [Control Remoto](/es/remote-control) | Conduce su sesión local desde claude.ai o la aplicación móvil de Claude | Dirigir una sesión en progreso mientras está fuera de su escritorio |

345 

346Los channels cierran la brecha en esa lista al enviar eventos de fuentes que no son de Claude a su sesión local ya en ejecución.

347 

348* **Puente de chat**: pregúntele a Claude algo desde su teléfono a través de Telegram, Discord o iMessage, y la respuesta regresa en el mismo chat mientras el trabajo se ejecuta en su máquina contra sus archivos reales.

349* **[Receptor de webhook](/es/channels-reference#example-build-a-webhook-receiver)**: un webhook de CI, su rastreador de errores, una canalización de implementación u otro servicio externo llega donde Claude ya tiene sus archivos abiertos y recuerda lo que estaba depurando.

350 

351## Próximos pasos

352 

353Una vez que tenga un channel en ejecución, explore estas características relacionadas:

354 

355* [Crear su propio channel](/es/channels-reference) para sistemas que aún no tienen plugins

356* [Control Remoto](/es/remote-control) para conducir una sesión local desde su teléfono en lugar de reenviar eventos a ella

357* [Tareas programadas](/es/scheduled-tasks) para sondear en un temporizador en lugar de reaccionar a eventos enviados

channels-reference.md +749 −0 created

Details

1> ## Documentation Index

2> Fetch the complete documentation index at: https://code.claude.com/docs/llms.txt

3> Use this file to discover all available pages before exploring further.

4 

5# Referencia de canales

6 

7> Construye un servidor MCP que envíe webhooks, alertas y mensajes de chat a una sesión de Claude Code. Referencia para el contrato de canal: declaración de capacidad, eventos de notificación, herramientas de respuesta, compuerta de remitente y retransmisión de permisos.

8 

9<Note>

10 Los canales están en [vista previa de investigación](/es/channels#research-preview) y requieren Claude Code v2.1.80 o posterior. Requieren inicio de sesión en claude.ai. La autenticación de consola y clave API no es compatible. Las organizaciones de equipo y empresa deben [habilitarlos explícitamente](/es/channels#enterprise-controls).

11</Note>

12 

13Un canal es un servidor MCP que envía eventos a una sesión de Claude Code para que Claude pueda reaccionar a cosas que suceden fuera de la terminal.

14 

15Puedes construir un canal unidireccional o bidireccional. Los canales unidireccionales reenvían alertas, webhooks o eventos de monitoreo para que Claude actúe sobre ellos. Los canales bidireccionales como puentes de chat también [exponen una herramienta de respuesta](#expose-a-reply-tool) para que Claude pueda enviar mensajes de vuelta. Un canal con una ruta de remitente confiable también puede optar por [retransmitir solicitudes de permiso](#relay-permission-prompts) para que puedas aprobar o denegar el uso de herramientas de forma remota.

16 

17Esta página cubre:

18 

19* [Descripción general](#overview): cómo funcionan los canales

20* [Lo que necesitas](#what-you-need): requisitos y pasos generales

21* [Ejemplo: construir un receptor de webhook](#example-build-a-webhook-receiver): un tutorial unidireccional mínimo

22* [Opciones del servidor](#server-options): los campos del constructor

23* [Formato de notificación](#notification-format): la carga útil del evento

24* [Exponer una herramienta de respuesta](#expose-a-reply-tool): permitir que Claude envíe mensajes de vuelta

25* [Compuerta de mensajes entrantes](#gate-inbound-messages): comprobaciones de remitente para prevenir inyección de solicitudes

26* [Retransmitir solicitudes de permiso](#relay-permission-prompts): reenviar solicitudes de aprobación de herramientas a canales remotos

27 

28Para usar un canal existente en lugar de construir uno, consulta [Canales](/es/channels). Telegram, Discord, iMessage y fakechat se incluyen en la vista previa de investigación.

29 

30## Descripción general

31 

32Un canal es un servidor [MCP](https://modelcontextprotocol.io) que se ejecuta en la misma máquina que Claude Code. Claude Code lo genera como un subproceso y se comunica a través de stdio. Tu servidor de canal es el puente entre sistemas externos y la sesión de Claude Code:

33 

34* **Plataformas de chat** (Telegram, Discord): tu complemento se ejecuta localmente y sondea la API de la plataforma en busca de nuevos mensajes. Cuando alguien envía un mensaje directo a tu bot, el complemento recibe el mensaje y lo reenvía a Claude. Sin URL que exponer.

35* **Webhooks** (CI, monitoreo): tu servidor escucha en un puerto HTTP local. Los sistemas externos envían POST a ese puerto, y tu servidor envía la carga útil a Claude.

36 

37<img src="https://mintlify.s3.us-west-1.amazonaws.com/claude-code/es/images/channel-architecture.svg" alt="Diagrama de arquitectura que muestra sistemas externos conectándose a tu servidor de canal local, que se comunica con Claude Code a través de stdio" />

38 

39## Lo que necesitas

40 

41El único requisito difícil es el paquete [`@modelcontextprotocol/sdk`](https://www.npmjs.com/package/@modelcontextprotocol/sdk) y un tiempo de ejecución compatible con Node.js. [Bun](https://bun.sh), [Node](https://nodejs.org) y [Deno](https://deno.com) funcionan todos. Los complementos precompilados en la vista previa de investigación usan Bun, pero tu canal no tiene que hacerlo.

42 

43Tu servidor necesita:

44 

451. Declarar la capacidad `claude/channel` para que Claude Code registre un oyente de notificación

462. Emitir eventos `notifications/claude/channel` cuando algo suceda

473. Conectarse a través del [transporte stdio](https://modelcontextprotocol.io/docs/concepts/transports#standard-io) (Claude Code genera tu servidor como un subproceso)

48 

49Las secciones [Opciones del servidor](#server-options) y [Formato de notificación](#notification-format) cubren cada una de estas en detalle. Consulta [Ejemplo: construir un receptor de webhook](#example-build-a-webhook-receiver) para un tutorial completo.

50 

51Durante la vista previa de investigación, los canales personalizados no están en la [lista de aprobación](/es/channels#supported-channels). Usa `--dangerously-load-development-channels` para probar localmente. Consulta [Prueba durante la vista previa de investigación](#test-during-the-research-preview) para obtener detalles.

52 

53## Ejemplo: construir un receptor de webhook

54 

55Este tutorial construye un servidor de un solo archivo que escucha solicitudes HTTP y las reenvía a tu sesión de Claude Code. Al final, cualquier cosa que pueda enviar un POST HTTP, como una canalización de CI, una alerta de monitoreo o un comando `curl`, puede enviar eventos a Claude.

56 

57Este ejemplo usa [Bun](https://bun.sh) como tiempo de ejecución por su servidor HTTP integrado y soporte de TypeScript. Puedes usar [Node](https://nodejs.org) o [Deno](https://deno.com) en su lugar; el único requisito es el [SDK de MCP](https://www.npmjs.com/package/@modelcontextprotocol/sdk).

58 

59<Steps>

60 <Step title="Crear el proyecto">

61 Crea un nuevo directorio e instala el SDK de MCP:

62 

63 ```bash theme={null}

64 mkdir webhook-channel && cd webhook-channel

65 bun add @modelcontextprotocol/sdk

66 ```

67 </Step>

68 

69 <Step title="Escribir el servidor de canal">

70 Crea un archivo llamado `webhook.ts`. Este es tu servidor de canal completo: se conecta a Claude Code a través de stdio y escucha POSTs HTTP en el puerto 8788. Cuando llega una solicitud, envía el cuerpo a Claude como un evento de canal.

71 

72 ```ts title="webhook.ts" theme={null}

73 #!/usr/bin/env bun

74 import { Server } from '@modelcontextprotocol/sdk/server/index.js'

75 import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js'

76 

77 // Crear el servidor MCP y declararlo como un canal

78 const mcp = new Server(

79 { name: 'webhook', version: '0.0.1' },

80 {

81 // esta clave es lo que lo hace un canal — Claude Code registra un oyente para ella

82 capabilities: { experimental: { 'claude/channel': {} } },

83 // agregado al mensaje del sistema de Claude para que sepa cómo manejar estos eventos

84 instructions: 'Los eventos del canal webhook llegan como <channel source="webhook" ...>. Son unidireccionales: léelos y actúa, no se espera respuesta.',

85 },

86 )

87 

88 // Conectar a Claude Code a través de stdio (Claude Code genera este proceso)

89 await mcp.connect(new StdioServerTransport())

90 

91 // Iniciar un servidor HTTP que reenvíe cada POST a Claude

92 Bun.serve({

93 port: 8788, // cualquier puerto abierto funciona

94 // solo localhost: nada fuera de esta máquina puede hacer POST

95 hostname: '127.0.0.1',

96 async fetch(req) {

97 const body = await req.text()

98 await mcp.notification({

99 method: 'notifications/claude/channel',

100 params: {

101 content: body, // se convierte en el cuerpo de la etiqueta <channel>

102 // cada clave se convierte en un atributo de etiqueta, p. ej. <channel path="/" method="POST">

103 meta: { path: new URL(req.url).pathname, method: req.method },

104 },

105 })

106 return new Response('ok')

107 },

108 })

109 ```

110 

111 El archivo hace tres cosas en orden:

112 

113 * **Configuración del servidor**: crea el servidor MCP con `claude/channel` en sus capacidades, que es lo que le dice a Claude Code que esto es un canal. La cadena [`instructions`](#server-options) va al mensaje del sistema de Claude: dile a Claude qué eventos esperar, si debe responder y cómo enrutar las respuestas si debe hacerlo.

114 * **Conexión stdio**: se conecta a Claude Code a través de stdin/stdout. Esto es estándar para cualquier [servidor MCP](https://modelcontextprotocol.io/docs/concepts/transports#standard-io): Claude Code lo genera como un subproceso.

115 * **Oyente HTTP**: inicia un servidor web local en el puerto 8788. Cada cuerpo POST se reenvía a Claude como un evento de canal a través de `mcp.notification()`. El `content` se convierte en el cuerpo del evento, y cada entrada `meta` se convierte en un atributo en la etiqueta `<channel>`. El oyente necesita acceso a la instancia `mcp`, por lo que se ejecuta en el mismo proceso. Podrías dividirlo en módulos separados para un proyecto más grande.

116 </Step>

117 

118 <Step title="Registrar tu servidor con Claude Code">

119 Agrega el servidor a tu configuración de MCP para que Claude Code sepa cómo iniciarlo. Para un `.mcp.json` a nivel de proyecto en el mismo directorio, usa una ruta relativa. Para la configuración a nivel de usuario en `~/.claude.json`, usa la ruta absoluta completa para que el servidor se pueda encontrar desde cualquier proyecto:

120 

121 ```json title=".mcp.json" theme={null}

122 {

123 "mcpServers": {

124 "webhook": { "command": "bun", "args": ["./webhook.ts"] }

125 }

126 }

127 ```

128 

129 Claude Code lee tu configuración de MCP al iniciar y genera cada servidor como un subproceso.

130 </Step>

131 

132 <Step title="Probarlo">

133 Durante la vista previa de investigación, los canales personalizados no están en la lista de aprobación, así que inicia Claude Code con la bandera de desarrollo:

134 

135 ```bash theme={null}

136 claude --dangerously-load-development-channels server:webhook

137 ```

138 

139 Cuando Claude Code se inicia, lee tu configuración de MCP, genera tu `webhook.ts` como un subproceso, y el oyente HTTP se inicia automáticamente en el puerto que configuraste (8788 en este ejemplo). No necesitas ejecutar el servidor tú mismo.

140 

141 Si ves "bloqueado por política de organización", tu administrador de equipo o empresa necesita [habilitar canales](/es/channels#enterprise-controls) primero.

142 

143 En una terminal separada, simula un webhook enviando un POST HTTP con un mensaje a tu servidor. Este ejemplo envía una alerta de fallo de compilación al puerto 8788 (o el puerto que configuraste):

144 

145 ```bash theme={null}

146 curl -X POST localhost:8788 -d "build failed on main: https://ci.example.com/run/1234"

147 ```

148 

149 La carga útil llega a tu sesión de Claude Code como una etiqueta `<channel>`:

150 

151 ```text theme={null}

152 <channel source="webhook" path="/" method="POST">build failed on main: https://ci.example.com/run/1234</channel>

153 ```

154 

155 En tu terminal de Claude Code, verás que Claude recibe el mensaje y comienza a responder: leyendo archivos, ejecutando comandos o lo que sea que el mensaje requiera. Este es un canal unidireccional, por lo que Claude actúa en tu sesión pero no envía nada de vuelta a través del webhook. Para agregar respuestas, consulta [Exponer una herramienta de respuesta](#expose-a-reply-tool).

156 

157 Si el evento no llega, el diagnóstico depende de lo que `curl` devolvió:

158 

159 * **`curl` tiene éxito pero nada llega a Claude**: ejecuta `/mcp` en tu sesión para verificar el estado del servidor. "Falló al conectar" generalmente significa un error de dependencia o importación en tu archivo de servidor; consulta el registro de depuración en `~/.claude/debug/<session-id>.txt` para el seguimiento de stderr.

160 * **`curl` falla con "conexión rechazada"**: el puerto no está vinculado aún o un proceso antiguo de una ejecución anterior lo está manteniendo. `lsof -i :<port>` muestra qué está escuchando; `kill` el proceso antiguo antes de reiniciar tu sesión.

161 </Step>

162</Steps>

163 

164El [servidor fakechat](https://github.com/anthropics/claude-plugins-official/tree/main/external_plugins/fakechat) extiende este patrón con una interfaz web, archivos adjuntos y una herramienta de respuesta para chat bidireccional.

165 

166## Prueba durante la vista previa de investigación

167 

168Durante la vista previa de investigación, cada canal debe estar en la [lista de aprobación](/es/channels#research-preview) para registrarse. La bandera de desarrollo omite la lista de aprobación para entradas específicas después de un mensaje de confirmación. Este ejemplo muestra ambos tipos de entrada:

169 

170```bash theme={null}

171# Prueba de un complemento que estás desarrollando

172claude --dangerously-load-development-channels plugin:yourplugin@yourmarketplace

173 

174# Prueba de un servidor .mcp.json desnudo (sin envoltura de complemento aún)

175claude --dangerously-load-development-channels server:webhook

176```

177 

178El bypass es por entrada. Combinar esta bandera con `--channels` no extiende el bypass a las entradas `--channels`. Durante la vista previa de investigación, la lista de aprobación es curada por Anthropic, por lo que tu canal permanece en la bandera de desarrollo mientras lo construyes y pruebas.

179 

180<Note>

181 Esta bandera omite solo la lista de aprobación. La política de organización `channelsEnabled` aún se aplica. No la uses para ejecutar canales de fuentes no confiables.

182</Note>

183 

184## Opciones del servidor

185 

186Un canal establece estas opciones en el constructor [`Server`](https://modelcontextprotocol.io/docs/concepts/servers). Los campos `instructions` y `capabilities.tools` son [MCP estándar](https://modelcontextprotocol.io/docs/concepts/servers); `capabilities.experimental['claude/channel']` y `capabilities.experimental['claude/channel/permission']` son las adiciones específicas del canal:

187 

188| Campo | Tipo | Descripción |

189| :------------------------------------------------------- | :------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

190| `capabilities.experimental['claude/channel']` | `object` | Requerido. Siempre `{}`. La presencia registra el oyente de notificación. |

191| `capabilities.experimental['claude/channel/permission']` | `object` | Opcional. Siempre `{}`. Declara que este canal puede recibir solicitudes de retransmisión de permisos. Cuando se declara, Claude Code reenvía solicitudes de aprobación de herramientas a tu canal para que puedas aprobar o denegar de forma remota. Consulta [Retransmitir solicitudes de permiso](#relay-permission-prompts). |

192| `capabilities.tools` | `object` | Solo bidireccional. Siempre `{}`. Capacidad de herramienta MCP estándar. Consulta [Exponer una herramienta de respuesta](#expose-a-reply-tool). |

193| `instructions` | `string` | Recomendado. Agregado al mensaje del sistema de Claude. Dile a Claude qué eventos esperar, qué significan los atributos de la etiqueta `<channel>`, si debe responder y, si es así, qué herramienta usar y qué atributo pasar de vuelta (como `chat_id`). |

194 

195Para crear un canal unidireccional, omite `capabilities.tools`. Este ejemplo muestra una configuración bidireccional con la capacidad de canal, herramientas e instrucciones establecidas:

196 

197```ts theme={null}

198import { Server } from '@modelcontextprotocol/sdk/server/index.js'

199 

200const mcp = new Server(

201 { name: 'your-channel', version: '0.0.1' },

202 {

203 capabilities: {

204 experimental: { 'claude/channel': {} }, // registra el oyente de canal

205 tools: {}, // omite para canales unidireccionales

206 },

207 // agregado al mensaje del sistema de Claude para que sepa cómo manejar tus eventos

208 instructions: 'Los mensajes llegan como <channel source="your-channel" ...>. Responde con la herramienta de respuesta.',

209 },

210)

211```

212 

213Para enviar un evento, llama a `mcp.notification()` con el método `notifications/claude/channel`. Los parámetros están en la siguiente sección.

214 

215## Formato de notificación

216 

217Tu servidor emite `notifications/claude/channel` con dos parámetros:

218 

219| Campo | Tipo | Descripción |

220| :-------- | :----------------------- | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

221| `content` | `string` | El cuerpo del evento. Entregado como el cuerpo de la etiqueta `<channel>`. |

222| `meta` | `Record<string, string>` | Opcional. Cada entrada se convierte en un atributo en la etiqueta `<channel>` para el contexto de enrutamiento como ID de chat, nombre del remitente o severidad de alerta. Las claves deben ser identificadores: solo letras, dígitos y guiones bajos. Las claves que contienen guiones u otros caracteres se descartan silenciosamente. |

223 

224Tu servidor envía eventos llamando a `mcp.notification()` en la instancia `Server`. Este ejemplo envía una alerta de fallo de compilación con dos claves meta:

225 

226```ts theme={null}

227await mcp.notification({

228 method: 'notifications/claude/channel',

229 params: {

230 content: 'build failed on main: https://ci.example.com/run/1234',

231 meta: { severity: 'high', run_id: '1234' },

232 },

233})

234```

235 

236El evento llega en el contexto de Claude envuelto en una etiqueta `<channel>`. El atributo `source` se establece automáticamente desde el nombre configurado de tu servidor:

237 

238```text theme={null}

239<channel source="your-channel" severity="high" run_id="1234">

240build failed on main: https://ci.example.com/run/1234

241</channel>

242```

243 

244## Exponer una herramienta de respuesta

245 

246Si tu canal es bidireccional, como un puente de chat en lugar de un reenviador de alertas, expón una [herramienta MCP](https://modelcontextprotocol.io/docs/concepts/tools) estándar que Claude pueda llamar para enviar mensajes de vuelta. Nada sobre el registro de herramientas es específico del canal. Una herramienta de respuesta tiene tres componentes:

247 

2481. Una entrada `tools: {}` en las capacidades del constructor `Server` para que Claude Code descubra la herramienta

2492. Manejadores de herramientas que definen el esquema de la herramienta e implementan la lógica de envío

2503. Una cadena `instructions` en el constructor `Server` que le dice a Claude cuándo y cómo llamar a la herramienta

251 

252Para agregar estos al [receptor de webhook anterior](#example-build-a-webhook-receiver):

253 

254<Steps>

255 <Step title="Habilitar el descubrimiento de herramientas">

256 En tu constructor `Server` en `webhook.ts`, agrega `tools: {}` a las capacidades para que Claude Code sepa que tu servidor ofrece herramientas:

257 

258 ```ts theme={null}

259 capabilities: {

260 experimental: { 'claude/channel': {} },

261 tools: {}, // habilita el descubrimiento de herramientas

262 },

263 ```

264 </Step>

265 

266 <Step title="Registrar la herramienta de respuesta">

267 Agrega lo siguiente a `webhook.ts`. El `import` va en la parte superior del archivo con tus otras importaciones; los dos manejadores van entre el constructor `Server` y `mcp.connect()`. Esto registra una herramienta `reply` que Claude puede llamar con un `chat_id` y `text`:

268 

269 ```ts theme={null}

270 // Agrega este import en la parte superior de webhook.ts

271 import { ListToolsRequestSchema, CallToolRequestSchema } from '@modelcontextprotocol/sdk/types.js'

272 

273 // Claude consulta esto al iniciar para descubrir qué herramientas ofrece tu servidor

274 mcp.setRequestHandler(ListToolsRequestSchema, async () => ({

275 tools: [{

276 name: 'reply',

277 description: 'Enviar un mensaje de vuelta a través de este canal',

278 // inputSchema le dice a Claude qué argumentos pasar

279 inputSchema: {

280 type: 'object',

281 properties: {

282 chat_id: { type: 'string', description: 'La conversación en la que responder' },

283 text: { type: 'string', description: 'El mensaje a enviar' },

284 },

285 required: ['chat_id', 'text'],

286 },

287 }],

288 }))

289 

290 // Claude llama a esto cuando quiere invocar una herramienta

291 mcp.setRequestHandler(CallToolRequestSchema, async req => {

292 if (req.params.name === 'reply') {

293 const { chat_id, text } = req.params.arguments as { chat_id: string; text: string }

294 // send() es tu salida: POST a tu plataforma de chat, o para

295 // pruebas locales la transmisión SSE mostrada en el ejemplo completo a continuación.

296 send(`Reply to ${chat_id}: ${text}`)

297 return { content: [{ type: 'text', text: 'sent' }] }

298 }

299 throw new Error(`unknown tool: ${req.params.name}`)

300 })

301 ```

302 </Step>

303 

304 <Step title="Actualizar las instrucciones">

305 Actualiza la cadena `instructions` en tu constructor `Server` para que Claude sepa enrutar las respuestas de vuelta a través de la herramienta. Este ejemplo le dice a Claude que pase `chat_id` desde la etiqueta entrante:

306 

307 ```ts theme={null}

308 instructions: 'Los mensajes llegan como <channel source="webhook" chat_id="...">. Responde con la herramienta de respuesta, pasando el chat_id de la etiqueta.'

309 ```

310 </Step>

311</Steps>

312 

313Aquí está el `webhook.ts` completo con soporte bidireccional. Las respuestas salientes se transmiten a través de `GET /events` usando [Server-Sent Events](https://developer.mozilla.org/en-US/docs/Web/API/Server-sent_events) (SSE), por lo que `curl -N localhost:8788/events` puede verlas en vivo; el chat entrante llega en `POST /`:

314 

315```ts title="webhook.ts completo con herramienta de respuesta' expandable theme={null}

316#!/usr/bin/env bun

317import { Server } from '@modelcontextprotocol/sdk/server/index.js'

318import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js'

319import { ListToolsRequestSchema, CallToolRequestSchema } from '@modelcontextprotocol/sdk/types.js'

320 

321// --- Salida: escribir a cualquier oyente curl -N en /events ---

322// Un puente real haría POST a tu plataforma de chat en su lugar.

323const listeners = new Set<(chunk: string) => void>()

324function send(text: string) {

325 const chunk = text.split('\n').map(l => `data: ${l}\n`).join('') + '\n'

326 for (const emit of listeners) emit(chunk)

327}

328 

329const mcp = new Server(

330 { name: 'webhook', version: '0.0.1' },

331 {

332 capabilities: {

333 experimental: { 'claude/channel': {} },

334 tools: {},

335 },

336 instructions: 'Los mensajes llegan como <channel source="webhook" chat_id="...">. Responde con la herramienta de respuesta, pasando el chat_id de la etiqueta.',

337 },

338)

339 

340mcp.setRequestHandler(ListToolsRequestSchema, async () => ({

341 tools: [{

342 name: 'reply',

343 description: 'Enviar un mensaje de vuelta a través de este canal',

344 inputSchema: {

345 type: 'object',

346 properties: {

347 chat_id: { type: 'string', description: 'La conversación en la que responder' },

348 text: { type: 'string', description: 'El mensaje a enviar' },

349 },

350 required: ['chat_id', 'text'],

351 },

352 }],

353}))

354 

355mcp.setRequestHandler(CallToolRequestSchema, async req => {

356 if (req.params.name === 'reply') {

357 const { chat_id, text } = req.params.arguments as { chat_id: string; text: string }

358 send(`Reply to ${chat_id}: ${text}`)

359 return { content: [{ type: 'text', text: 'sent' }] }

360 }

361 throw new Error(`unknown tool: ${req.params.name}`)

362})

363 

364await mcp.connect(new StdioServerTransport())

365 

366let nextId = 1

367Bun.serve({

368 port: 8788,

369 hostname: '127.0.0.1',

370 idleTimeout: 0, // no cierres flujos SSE inactivos

371 async fetch(req) {

372 const url = new URL(req.url)

373 

374 // GET /events: flujo SSE para que curl -N pueda ver las respuestas de Claude en vivo

375 if (req.method === 'GET' && url.pathname === '/events') {

376 const stream = new ReadableStream({

377 start(ctrl) {

378 ctrl.enqueue(': connected\n\n') // para que curl muestre algo inmediatamente

379 const emit = (chunk: string) => ctrl.enqueue(chunk)

380 listeners.add(emit)

381 req.signal.addEventListener('abort', () => listeners.delete(emit))

382 },

383 })

384 return new Response(stream, {

385 headers: { 'Content-Type': 'text/event-stream', 'Cache-Control': 'no-cache' },

386 })

387 }

388 

389 // POST: reenviar a Claude como un evento de canal

390 const body = await req.text()

391 const chat_id = String(nextId++)

392 await mcp.notification({

393 method: 'notifications/claude/channel',

394 params: {

395 content: body,

396 meta: { chat_id, path: url.pathname, method: req.method },

397 },

398 })

399 return new Response('ok')

400 },

401})

402```

403 

404El [servidor fakechat](https://github.com/anthropics/claude-plugins-official/tree/main/external_plugins/fakechat) muestra un ejemplo más completo con archivos adjuntos y edición de mensajes.

405 

406## Compuerta de mensajes entrantes

407 

408Un canal sin compuerta es un vector de inyección de solicitudes. Cualquiera que pueda alcanzar tu punto final puede poner texto frente a Claude. Un canal que escucha una plataforma de chat o un punto final público necesita una comprobación de remitente real antes de emitir cualquier cosa.

409 

410Comprueba el remitente contra una lista de permitidos antes de llamar a `mcp.notification()`. Este ejemplo descarta cualquier mensaje de un remitente que no esté en el conjunto:

411 

412```ts theme={null}

413const allowed = new Set(loadAllowlist()) // desde tu access.json o equivalente

414 

415// dentro de tu manejador de mensajes, antes de emitir:

416if (!allowed.has(message.from.id)) { // remitente, no sala

417 return // descartar silenciosamente

418}

419await mcp.notification({ ... })

420```

421 

422Compuerta en la identidad del remitente, no en la identidad del chat o sala: `message.from.id` en el ejemplo, no `message.chat.id`. En chats grupales, estos difieren, y la compuerta en la sala permitiría que cualquiera en un grupo permitido inyecte mensajes en la sesión.

423 

424Los canales [Telegram](https://github.com/anthropics/claude-plugins-official/tree/main/external_plugins/telegram) y [Discord](https://github.com/anthropics/claude-plugins-official/tree/main/external_plugins/discord) se compuertan en una lista de permitidos de remitente de la misma manera. Inician la lista por emparejamiento: el usuario envía un mensaje directo al bot, el bot responde con un código de emparejamiento, el usuario lo aprueba en su sesión de Claude Code, y su ID de plataforma se agrega. Consulta cualquiera de las implementaciones para el flujo de emparejamiento completo. El canal [iMessage](https://github.com/anthropics/claude-plugins-official/tree/main/external_plugins/imessage) toma un enfoque diferente: detecta las propias direcciones del usuario desde la base de datos de Mensajes al iniciar y las deja pasar automáticamente, con otros remitentes agregados por identificador.

425 

426## Retransmitir solicitudes de permiso

427 

428<Note>

429 La retransmisión de permisos requiere Claude Code v2.1.81 o posterior. Las versiones anteriores ignoran la capacidad `claude/channel/permission`.

430</Note>

431 

432Cuando Claude llama a una herramienta que necesita aprobación, se abre el diálogo del terminal local y la sesión espera. Un canal bidireccional puede optar por recibir la misma solicitud en paralelo y retransmitirla a ti en otro dispositivo. Ambos permanecen activos: puedes responder en la terminal o en tu teléfono, y Claude Code aplica cualquiera que sea la respuesta que llegue primero y cierra la otra.

433 

434La retransmisión cubre aprobaciones de uso de herramientas como `Bash`, `Write` y `Edit`. Los diálogos de confianza del proyecto y consentimiento del servidor MCP no se retransmiten; esos solo aparecen en la terminal local.

435 

436### Cómo funciona la retransmisión

437 

438Cuando se abre una solicitud de permiso, el bucle de retransmisión tiene cuatro pasos:

439 

4401. Claude Code genera un ID de solicitud corto y notifica a tu servidor

4412. Tu servidor reenvía la solicitud y el ID a tu aplicación de chat

4423. El usuario remoto responde con un sí o no y ese ID

4434. Tu manejador entrante analiza la respuesta en un veredicto, y Claude Code lo aplica solo si el ID coincide con una solicitud abierta

444 

445El diálogo del terminal local permanece abierto durante todo esto. Si alguien en la terminal responde antes de que llegue el veredicto remoto, esa respuesta se aplica en su lugar y la solicitud remota pendiente se descarta.

446 

447<img src="https://mintlify.s3.us-west-1.amazonaws.com/claude-code/es/images/channel-permission-relay.svg" alt="Diagrama de secuencia: Claude Code envía una notificación permission_request al servidor de canal, el servidor formatea y envía la solicitud a la aplicación de chat, el humano responde con un veredicto, y el servidor analiza esa respuesta en una notificación de permiso de vuelta a Claude Code" />

448 

449### Campos de solicitud de permiso

450 

451La notificación saliente de Claude Code es `notifications/claude/channel/permission_request`. Como la [notificación de canal](#notification-format), el transporte es MCP estándar pero el método y esquema son extensiones de Claude Code. El objeto `params` tiene cuatro campos de cadena que tu servidor formatea en la solicitud saliente:

452 

453| Campo | Descripción |

454| --------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

455| `request_id` | Cinco letras minúsculas extraídas de `a`-`z` sin `l`, por lo que nunca se lee como `1` o `I` cuando se escribe en un teléfono. Inclúyelo en tu solicitud saliente para que pueda ser repetido en la respuesta. Claude Code solo acepta un veredicto que lleve un ID que emitió. El diálogo del terminal local no muestra este ID, por lo que tu manejador saliente es la única forma de aprenderlo. |

456| `tool_name` | Nombre de la herramienta que Claude quiere usar, por ejemplo `Bash` o `Write`. |

457| `description` | Resumen legible por humanos de lo que hace esta llamada de herramienta específica, el mismo texto que muestra el diálogo del terminal local. Para una llamada Bash esto es la descripción de Claude del comando, o el comando en sí si no se dio ninguno. |

458| `input_preview` | Los argumentos de la herramienta como una cadena JSON, truncada a 200 caracteres. Para Bash esto es el comando; para Write es la ruta del archivo y un prefijo del contenido. Omítelo de tu solicitud si solo tienes espacio para un mensaje de una línea. Tu servidor decide qué mostrar. |

459 

460El veredicto que tu servidor envía de vuelta es `notifications/claude/channel/permission` con dos campos: `request_id` repitiendo el ID anterior, y `behavior` establecido en `'allow'` o `'deny'`. Permitir deja que la llamada de herramienta continúe; denegar la rechaza, lo mismo que responder No en el diálogo local. Ningún veredicto afecta llamadas futuras.

461 

462### Agregar retransmisión a un puente de chat

463 

464Agregar retransmisión de permisos a un canal bidireccional requiere tres componentes:

465 

4661. Una entrada `claude/channel/permission: {}` bajo capacidades `experimental` en tu constructor `Server` para que Claude Code sepa que debe reenviar solicitudes

4672. Un manejador de notificación para `notifications/claude/channel/permission_request` que formatea la solicitud y la envía a través de tu API de plataforma

4683. Una comprobación en tu manejador de mensajes entrantes que reconozca `yes <id>` o `no <id>` y emita una notificación de veredicto `notifications/claude/channel/permission` en su lugar de reenviar el texto a Claude

469 

470Solo declara la capacidad si tu canal [autentica el remitente](#gate-inbound-messages), porque cualquiera que pueda responder a través de tu canal puede aprobar o denegar el uso de herramientas en tu sesión.

471 

472Para agregar estos a un puente de chat bidireccional como el ensamblado en [Exponer una herramienta de respuesta](#expose-a-reply-tool):

473 

474<Steps>

475 <Step title="Declarar la capacidad de permiso">

476 En tu constructor `Server`, agrega `claude/channel/permission: {}` junto a `claude/channel` bajo `experimental`:

477 

478 ```ts theme={null}

479 capabilities: {

480 experimental: {

481 'claude/channel': {},

482 'claude/channel/permission': {}, // optar por retransmisión de permisos

483 },

484 tools: {},

485 },

486 ```

487 </Step>

488 

489 <Step title="Manejar la solicitud entrante">

490 Registra un manejador de notificación entre tu constructor `Server` y `mcp.connect()`. Claude Code lo llama con los [cuatro campos de solicitud](#permission-request-fields) cuando se abre un diálogo de permiso. Tu manejador formatea la solicitud para tu plataforma e incluye instrucciones para responder con el ID:

491 

492 ```ts theme={null}

493 import { z } from 'zod'

494 

495 // setNotificationHandler enruta por z.literal en el campo method,

496 // por lo que este esquema es tanto el validador como la clave de envío

497 const PermissionRequestSchema = z.object({

498 method: z.literal('notifications/claude/channel/permission_request'),

499 params: z.object({

500 request_id: z.string(), // cinco letras minúsculas, incluir verbatim en tu solicitud

501 tool_name: z.string(), // p. ej. "Bash", "Write"

502 description: z.string(), // resumen legible por humanos de esta llamada

503 input_preview: z.string(), // argumentos de herramienta como JSON, truncado a ~200 caracteres

504 }),

505 })

506 

507 mcp.setNotificationHandler(PermissionRequestSchema, async ({ params }) => {

508 // send() es tu salida: POST a tu plataforma de chat, o para

509 // pruebas locales la transmisión SSE mostrada en el ejemplo completo a continuación.

510 send(

511 `Claude wants to run ${params.tool_name}: ${params.description}\n\n` +

512 // el ID en la instrucción es lo que tu manejador entrante analiza en el Paso 3

513 `Reply "yes ${params.request_id}" or "no ${params.request_id}"`,

514 )

515 })

516 ```

517 </Step>

518 

519 <Step title="Interceptar el veredicto en tu manejador entrante">

520 Tu manejador entrante es el bucle o devolución de llamada que recibe mensajes de tu plataforma: el mismo lugar donde [compuertas en remitente](#gate-inbound-messages) y emites `notifications/claude/channel` para reenviar chat a Claude. Agrega una comprobación antes de la llamada de reenvío de chat que reconozca el formato de veredicto y emita la notificación de permiso en su lugar.

521 

522 La expresión regular coincide con el formato de ID que genera Claude Code: cinco letras, nunca `l`. La bandera `/i` tolera la corrección automática del teléfono capitalizando la respuesta; minúscula el ID capturado antes de enviarlo de vuelta.

523 

524 ```ts theme={null}

525 // coincide con "y abcde", "yes abcde", "n abcde", "no abcde"

526 // [a-km-z] es el alfabeto de ID que usa Claude Code (minúscula, omite 'l')

527 // /i tolera la corrección automática del teléfono; minúscula la captura antes de enviar

528 const PERMISSION_REPLY_RE = /^\s*(y|yes|n|no)\s+([a-km-z]{5})\s*$/i

529 

530 async function onInbound(message: PlatformMessage) {

531 if (!allowed.has(message.from.id)) return // compuerta en remitente primero

532 

533 const m = PERMISSION_REPLY_RE.exec(message.text)

534 if (m) {

535 // m[1] es la palabra de veredicto, m[2] es el ID de solicitud

536 // emitir la notificación de veredicto de vuelta a Claude Code en lugar de chat

537 await mcp.notification({

538 method: 'notifications/claude/channel/permission',

539 params: {

540 request_id: m[2].toLowerCase(), // normalizar en caso de autocorrect caps

541 behavior: m[1].toLowerCase().startsWith('y') ? 'allow' : 'deny',

542 },

543 })

544 return // manejado como veredicto, no también reenviar como chat

545 }

546 

547 // no coincidió con formato de veredicto: caer a través de la ruta de chat normal

548 await mcp.notification({

549 method: 'notifications/claude/channel',

550 params: { content: message.text, meta: { chat_id: String(message.chat.id) } },

551 })

552 }

553 ```

554 </Step>

555</Steps>

556 

557Claude Code también mantiene abierto el diálogo del terminal local, por lo que puedes responder en cualquier lugar, y la primera respuesta que llegue se aplica. Una respuesta remota que no coincida exactamente con el formato esperado falla de una de dos maneras, y en ambos casos el diálogo permanece abierto:

558 

559* **Formato diferente**: la expresión regular de tu manejador entrante no coincide, por lo que texto como `approve it` o `yes` sin un ID cae a través como un mensaje normal a Claude.

560* **Formato correcto, ID incorrecto**: tu servidor emite un veredicto, pero Claude Code no encuentra ninguna solicitud abierta con ese ID y lo descarta silenciosamente.

561 

562### Ejemplo completo

563 

564El `webhook.ts` ensamblado a continuación combina las tres extensiones de esta página: la herramienta de respuesta, la compuerta de remitente y la retransmisión de permisos. Si estás comenzando aquí, también necesitarás la [configuración del proyecto y entrada `.mcp.json`](#example-build-a-webhook-receiver) del tutorial inicial.

565 

566Para hacer ambas direcciones comprobables desde curl, el oyente HTTP sirve dos rutas:

567 

568* **`GET /events`**: mantiene abierto un flujo SSE y envía cada mensaje saliente como una línea `data:`, por lo que `curl -N` puede ver las respuestas de Claude y cualquier solicitud de permiso llegar en vivo.

569* **`POST /`**: el lado entrante, el mismo manejador que antes, ahora con la comprobación de formato de veredicto insertada antes de la rama de reenvío de chat.

570 

571```ts title="webhook.ts completo con retransmisión de permisos' expandable theme={null}

572#!/usr/bin/env bun

573import { Server } from '@modelcontextprotocol/sdk/server/index.js'

574import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js'

575import { ListToolsRequestSchema, CallToolRequestSchema } from '@modelcontextprotocol/sdk/types.js'

576import { z } from 'zod'

577 

578// --- Salida: escribir a cualquier oyente curl -N en /events ---

579// Un puente real haría POST a tu plataforma de chat en su lugar.

580const listeners = new Set<(chunk: string) => void>()

581function send(text: string) {

582 const chunk = text.split('\n').map(l => `data: ${l}\n`).join('') + '\n'

583 for (const emit of listeners) emit(chunk)

584}

585 

586// Lista de permitidos de remitente. Para el tutorial local confiamos en el valor de encabezado único X-Sender

587// "dev"; un puente real verificaría el ID de usuario de la plataforma.

588const allowed = new Set(['dev'])

589 

590const mcp = new Server(

591 { name: 'webhook', version: '0.0.1' },

592 {

593 capabilities: {

594 experimental: {

595 'claude/channel': {},

596 'claude/channel/permission': {}, // optar por retransmisión de permisos

597 },

598 tools: {},

599 },

600 instructions:

601 'Los mensajes llegan como <channel source="webhook" chat_id="...">. ' +

602 'Responde con la herramienta de respuesta, pasando el chat_id de la etiqueta.',

603 },

604)

605 

606// --- herramienta de respuesta: Claude llama a esto para enviar un mensaje de vuelta ---

607mcp.setRequestHandler(ListToolsRequestSchema, async () => ({

608 tools: [{

609 name: 'reply',

610 description: 'Enviar un mensaje de vuelta a través de este canal',

611 inputSchema: {

612 type: 'object',

613 properties: {

614 chat_id: { type: 'string', description: 'La conversación en la que responder' },

615 text: { type: 'string', description: 'El mensaje a enviar' },

616 },

617 required: ['chat_id', 'text'],

618 },

619 }],

620}))

621 

622mcp.setRequestHandler(CallToolRequestSchema, async req => {

623 if (req.params.name === 'reply') {

624 const { chat_id, text } = req.params.arguments as { chat_id: string; text: string }

625 send(`Reply to ${chat_id}: ${text}`)

626 return { content: [{ type: 'text', text: 'sent' }] }

627 }

628 throw new Error(`unknown tool: ${req.params.name}`)

629})

630 

631// --- retransmisión de permisos: Claude Code (no Claude) llama a esto cuando se abre un diálogo

632const PermissionRequestSchema = z.object({

633 method: z.literal('notifications/claude/channel/permission_request'),

634 params: z.object({

635 request_id: z.string(),

636 tool_name: z.string(),

637 description: z.string(),

638 input_preview: z.string(),

639 }),

640})

641 

642mcp.setNotificationHandler(PermissionRequestSchema, async ({ params }) => {

643 send(

644 `Claude wants to run ${params.tool_name}: ${params.description}\n\n` +

645 `Reply "yes ${params.request_id}" or "no ${params.request_id}"`,

646 )

647})

648 

649await mcp.connect(new StdioServerTransport())

650 

651// --- HTTP en :8788: GET /events transmite salida, POST enruta entrada ---

652const PERMISSION_REPLY_RE = /^\s*(y|yes|n|no)\s+([a-km-z]{5})\s*$/i

653let nextId = 1

654 

655Bun.serve({

656 port: 8788,

657 hostname: '127.0.0.1',

658 idleTimeout: 0, // no cierres flujos SSE inactivos

659 async fetch(req) {

660 const url = new URL(req.url)

661 

662 // GET /events: flujo SSE para que curl -N pueda ver respuestas y solicitudes en vivo

663 if (req.method === 'GET' && url.pathname === '/events') {

664 const stream = new ReadableStream({

665 start(ctrl) {

666 ctrl.enqueue(': connected\n\n') // para que curl muestre algo inmediatamente

667 const emit = (chunk: string) => ctrl.enqueue(chunk)

668 listeners.add(emit)

669 req.signal.addEventListener('abort', () => listeners.delete(emit))

670 },

671 })

672 return new Response(stream, {

673 headers: { 'Content-Type': 'text/event-stream', 'Cache-Control': 'no-cache' },

674 })

675 }

676 

677 // todo lo demás es entrada: compuerta en remitente primero

678 const body = await req.text()

679 const sender = req.headers.get('X-Sender') ?? ''

680 if (!allowed.has(sender)) return new Response('forbidden', { status: 403 })

681 

682 // comprueba el formato de veredicto antes de tratar como chat

683 const m = PERMISSION_REPLY_RE.exec(body)

684 if (m) {

685 await mcp.notification({

686 method: 'notifications/claude/channel/permission',

687 params: {

688 request_id: m[2].toLowerCase(),

689 behavior: m[1].toLowerCase().startsWith('y') ? 'allow' : 'deny',

690 },

691 })

692 return new Response('verdict recorded')

693 }

694 

695 // chat normal: reenviar a Claude como un evento de canal

696 const chat_id = String(nextId++)

697 await mcp.notification({

698 method: 'notifications/claude/channel',

699 params: { content: body, meta: { chat_id, path: url.pathname } },

700 })

701 return new Response('ok')

702 },

703})

704```

705 

706Prueba la ruta de veredicto en tres terminales. La primera es tu sesión de Claude Code, iniciada con la [bandera de desarrollo](#test-during-the-research-preview) para que genere `webhook.ts`:

707 

708```bash theme={null}

709claude --dangerously-load-development-channels server:webhook

710```

711 

712En la segunda, transmite el lado saliente para que puedas ver las respuestas de Claude y cualquier solicitud de permiso llegar en vivo:

713 

714```bash theme={null}

715curl -N localhost:8788/events

716```

717 

718En la tercera, envía un mensaje que hará que Claude intente ejecutar un comando:

719 

720```bash theme={null}

721curl -d "list the files in this directory" -H "X-Sender: dev" localhost:8788

722```

723 

724El diálogo de permiso local se abre en tu terminal de Claude Code. Un momento después la solicitud aparece en el flujo `/events`, incluyendo el ID de cinco letras. Apruébalo desde el lado remoto:

725 

726```bash theme={null}

727curl -d "yes <id>" -H "X-Sender: dev" localhost:8788

728```

729 

730El diálogo local se cierra y la herramienta se ejecuta. La respuesta de Claude vuelve a través de la herramienta `reply` y también llega al flujo.

731 

732Las tres piezas específicas del canal en este archivo:

733 

734* **Capacidades** en el constructor `Server`: `claude/channel` registra el oyente de notificación, `claude/channel/permission` opta por retransmisión de permisos, `tools` permite que Claude descubra la herramienta de respuesta.

735* **Rutas salientes**: el manejador de la herramienta `reply` es lo que Claude llama para respuestas conversacionales; el manejador de notificación `PermissionRequestSchema` es lo que Claude Code llama cuando se abre un diálogo de permiso. Ambos llaman a `send()` para transmitir a través de `/events`, pero se activan por diferentes partes del sistema.

736* **Manejador HTTP**: `GET /events` mantiene abierto un flujo SSE para que curl pueda ver la salida en vivo; `POST` es entrada, compuerta en el encabezado `X-Sender`. Un cuerpo `yes <id>` o `no <id>` va a Claude Code como una notificación de veredicto y nunca llega a Claude; cualquier otra cosa se reenvía a Claude como un evento de canal.

737 

738## Empaquetar como un complemento

739 

740Para hacer tu canal instalable y compartible, envuélvelo en un [complemento](/es/plugins) y publícalo en un [mercado](/es/plugin-marketplaces). Los usuarios lo instalan con `/plugin install`, luego lo habilitan por sesión con `--channels plugin:<name>@<marketplace>`.

741 

742Un canal publicado en tu propio mercado aún necesita `--dangerously-load-development-channels` para ejecutarse, ya que no está en la [lista de aprobación](/es/channels#supported-channels). Para que se agregue, [envíalo al mercado oficial](/es/plugins#submit-your-plugin-to-the-official-marketplace). Los complementos de canal pasan por revisión de seguridad antes de ser aprobados. En planes de equipo y empresa, un administrador puede incluir tu complemento en la lista [`allowedChannelPlugins`](/es/channels#restrict-which-channel-plugins-can-run) de la organización, que reemplaza la lista de aprobación predeterminada de Anthropic.

743 

744## Ver también

745 

746* [Canales](/es/channels) para instalar y usar Telegram, Discord, iMessage o la demostración fakechat, y para habilitar canales para una organización de equipo o empresa

747* [Implementaciones de canal de trabajo](https://github.com/anthropics/claude-plugins-official/tree/main/external_plugins) para código de servidor completo con flujos de emparejamiento, herramientas de respuesta y archivos adjuntos

748* [MCP](/es/mcp) para el protocolo subyacente que implementan los servidores de canal

749* [Complementos](/es/plugins) para empaquetar tu canal para que los usuarios puedan instalarlo con `/plugin install`

checkpointing.md +89 −0 created

Details

1> ## Documentation Index

2> Fetch the complete documentation index at: https://code.claude.com/docs/llms.txt

3> Use this file to discover all available pages before exploring further.

4 

5# Checkpointing

6 

7> Realiza un seguimiento, revierte y resume las ediciones y conversaciones de Claude para gestionar el estado de la sesión.

8 

9Claude Code realiza un seguimiento automático de las ediciones de archivos de Claude mientras trabaja, permitiéndole deshacer rápidamente cambios y revertir a estados anteriores si algo se sale de control.

10 

11## Cómo funciona el checkpointing

12 

13Mientras trabaja con Claude, el checkpointing captura automáticamente el estado de su código antes de cada edición. Esta red de seguridad le permite realizar tareas ambiciosas y a gran escala sabiendo que siempre puede volver a un estado de código anterior.

14 

15### Seguimiento automático

16 

17Claude Code realiza un seguimiento de todos los cambios realizados por sus herramientas de edición de archivos:

18 

19* Cada solicitud del usuario crea un nuevo checkpoint

20* Los checkpoints persisten entre sesiones, por lo que puede acceder a ellos en conversaciones reanudadas

21* Se limpian automáticamente junto con las sesiones después de 30 días (configurable)

22 

23### Revertir y resumir

24 

25Presione `Esc` dos veces (`Esc` + `Esc`) o use el comando `/rewind` para abrir el menú de rewind. Una lista desplazable muestra cada una de sus solicitudes de la sesión. Seleccione el punto en el que desea actuar y luego elija una acción:

26 

27* **Restaurar código y conversación**: revierte tanto el código como la conversación a ese punto

28* **Restaurar conversación**: revierte a ese mensaje mientras mantiene el código actual

29* **Restaurar código**: revierte los cambios de archivo mientras mantiene la conversación

30* **Resumir desde aquí**: comprime la conversación desde este punto en adelante en un resumen, liberando espacio de context window

31* **Cancelar**: regresa a la lista de mensajes sin hacer cambios

32 

33Después de restaurar la conversación o resumir, la solicitud original del mensaje seleccionado se restaura en el campo de entrada para que pueda reenviarlo o editarlo.

34 

35#### Restaurar vs. resumir

36 

37Las tres opciones de restauración revierten el estado: deshacen cambios de código, historial de conversación, o ambos. "Resumir desde aquí" funciona de manera diferente:

38 

39* Los mensajes anteriores al mensaje seleccionado permanecen intactos

40* El mensaje seleccionado y todos los mensajes posteriores se reemplazan con un resumen compacto generado por IA

41* No se cambian archivos en el disco

42* Los mensajes originales se conservan en la transcripción de la sesión, por lo que Claude puede hacer referencia a los detalles si es necesario

43 

44Esto es similar a `/compact`, pero dirigido: en lugar de resumir toda la conversación, mantiene el contexto inicial en detalle completo y solo comprime las partes que están usando espacio. Puede escribir instrucciones opcionales para guiar en qué se enfoca el resumen.

45 

46<Note>

47 Resumir lo mantiene en la misma sesión y comprime el contexto. Si desea ramificarse e intentar un enfoque diferente mientras preserva la sesión original intacta, use [fork](/es/how-claude-code-works#resume-or-fork-sessions) en su lugar (`claude --continue --fork-session`).

48</Note>

49 

50## Casos de uso comunes

51 

52Los checkpoints son particularmente útiles cuando:

53 

54* **Explorar alternativas**: pruebe diferentes enfoques de implementación sin perder su punto de partida

55* **Recuperarse de errores**: deshaga rápidamente cambios que introdujeron errores o rompieron la funcionalidad

56* **Iterar en características**: experimente con variaciones sabiendo que puede revertir a estados que funcionan

57* **Liberar espacio de contexto**: resuma una sesión de depuración detallada desde el punto medio en adelante, manteniendo sus instrucciones iniciales intactas

58 

59## Limitaciones

60 

61### Los cambios de comandos Bash no se rastrean

62 

63El checkpointing no rastrea archivos modificados por comandos bash. Por ejemplo, si Claude Code ejecuta:

64 

65```bash theme={null}

66rm file.txt

67mv old.txt new.txt

68cp source.txt dest.txt

69```

70 

71Estas modificaciones de archivo no se pueden deshacer a través de rewind. Solo se rastrean las ediciones de archivo directo realizadas a través de las herramientas de edición de archivos de Claude.

72 

73### Los cambios externos no se rastrean

74 

75El checkpointing solo rastrea archivos que han sido editados dentro de la sesión actual. Los cambios manuales que realiza en archivos fuera de Claude Code y las ediciones de otras sesiones concurrentes normalmente no se capturan, a menos que modifiquen los mismos archivos que la sesión actual.

76 

77### No es un reemplazo para el control de versiones

78 

79Los checkpoints están diseñados para recuperación rápida a nivel de sesión. Para historial de versiones permanente y colaboración:

80 

81* Continúe usando control de versiones (por ejemplo, Git) para commits, ramas e historial a largo plazo

82* Los checkpoints complementan pero no reemplazan el control de versiones adecuado

83* Piense en los checkpoints como "deshacer local" y Git como "historial permanente"

84 

85## Ver también

86 

87* [Modo interactivo](/es/interactive-mode) - Atajos de teclado y controles de sesión

88* [Comandos integrados](/es/commands) - Acceso a checkpoints usando `/rewind`

89* [Referencia de CLI](/es/cli-reference) - Opciones de línea de comandos

chrome.md +231 −0 created

Details

1> ## Documentation Index

2> Fetch the complete documentation index at: https://code.claude.com/docs/llms.txt

3> Use this file to discover all available pages before exploring further.

4 

5# Usar Claude Code con Chrome (beta)

6 

7> Conecta Claude Code a tu navegador Chrome para probar aplicaciones web, depurar con registros de consola, automatizar el relleno de formularios y extraer datos de páginas web.

8 

9Claude Code se integra con la [extensión del navegador Claude en Chrome](https://chromewebstore.google.com/detail/claude/fcoeoabgfenejglbffodgkkbkcdhcgfn) para brindarte capacidades de automatización del navegador desde la CLI o la [extensión de VS Code](/es/vs-code#automate-browser-tasks-with-chrome). Construye tu código, luego prueba y depura en el navegador sin cambiar de contexto.

10 

11Claude abre nuevas pestañas para tareas del navegador y comparte el estado de inicio de sesión de tu navegador, por lo que puede acceder a cualquier sitio en el que ya hayas iniciado sesión. Las acciones del navegador se ejecutan en una ventana de Chrome visible en tiempo real. Cuando Claude encuentra una página de inicio de sesión o CAPTCHA, se detiene y te pide que lo manejes manualmente.

12 

13<Note>

14 La integración de Chrome está en beta y actualmente funciona con Google Chrome y Microsoft Edge. Aún no es compatible con Brave, Arc u otros navegadores basados en Chromium. WSL (Subsistema de Windows para Linux) tampoco es compatible.

15</Note>

16 

17## Capacidades

18 

19Con Chrome conectado, puedes encadenar acciones del navegador con tareas de codificación en un único flujo de trabajo:

20 

21* **Depuración en vivo**: lee errores de consola y estado del DOM directamente, luego corrige el código que los causó

22* **Verificación de diseño**: construye una interfaz de usuario a partir de un mock de Figma, luego ábrelo en el navegador para verificar que coincida

23* **Prueba de aplicaciones web**: prueba la validación de formularios, verifica regresiones visuales o verifica flujos de usuario

24* **Aplicaciones web autenticadas**: interactúa con Google Docs, Gmail, Notion o cualquier aplicación en la que hayas iniciado sesión sin conectores de API

25* **Extracción de datos**: extrae información estructurada de páginas web y guárdala localmente

26* **Automatización de tareas**: automatiza tareas repetitivas del navegador como entrada de datos, relleno de formularios o flujos de trabajo multisitio

27* **Grabación de sesión**: graba interacciones del navegador como GIF para documentar o compartir lo que sucedió

28 

29## Requisitos previos

30 

31Antes de usar Claude Code con Chrome, necesitas:

32 

33* Navegador [Google Chrome](https://www.google.com/chrome/) o [Microsoft Edge](https://www.microsoft.com/edge)

34* Extensión [Claude en Chrome](https://chromewebstore.google.com/detail/claude/fcoeoabgfenejglbffodgkkbkcdhcgfn) versión 1.0.36 o superior, disponible en la Chrome Web Store para ambos navegadores

35* [Claude Code](/es/quickstart#step-1-install-claude-code) versión 2.0.73 o superior

36* Un plan directo de Anthropic (Pro, Max, Team o Enterprise)

37 

38<Note>

39 La integración de Chrome no está disponible a través de proveedores de terceros como Amazon Bedrock, Google Cloud Vertex AI o Microsoft Foundry. Si accedes a Claude exclusivamente a través de un proveedor de terceros, necesitas una cuenta separada de claude.ai para usar esta función.

40</Note>

41 

42## Comenzar en la CLI

43 

44<Steps>

45 <Step title="Lanzar Claude Code con Chrome">

46 Inicia Claude Code con la bandera `--chrome`:

47 

48 ```bash theme={null}

49 claude --chrome

50 ```

51 

52 También puedes habilitar Chrome dentro de una sesión existente ejecutando `/chrome`.

53 </Step>

54 

55 <Step title="Pídele a Claude que use el navegador">

56 Este ejemplo navega a una página, interactúa con ella e informa lo que encuentra, todo desde tu terminal o editor:

57 

58 ```text theme={null}

59 Go to code.claude.com/docs, click on the search box,

60 type "hooks", and tell me what results appear

61 ```

62 </Step>

63</Steps>

64 

65Ejecuta `/chrome` en cualquier momento para verificar el estado de la conexión, administrar permisos o reconectar la extensión.

66 

67Para VS Code, consulta [automatización del navegador en VS Code](/es/vs-code#automate-browser-tasks-with-chrome).

68 

69### Habilitar Chrome de forma predeterminada

70 

71Para evitar pasar `--chrome` en cada sesión, ejecuta `/chrome` y selecciona "Habilitado de forma predeterminada".

72 

73En la [extensión de VS Code](/es/vs-code#automate-browser-tasks-with-chrome), Chrome está disponible siempre que la extensión de Chrome esté instalada. No se necesita ninguna bandera adicional.

74 

75<Note>

76 Habilitar Chrome de forma predeterminada en la CLI aumenta el uso del contexto ya que las herramientas del navegador siempre se cargan. Si notas un aumento en el consumo de contexto, deshabilita esta configuración y usa `--chrome` solo cuando sea necesario.

77</Note>

78 

79### Administrar permisos del sitio

80 

81Los permisos a nivel de sitio se heredan de la extensión de Chrome. Administra los permisos en la configuración de la extensión de Chrome para controlar qué sitios puede examinar, hacer clic e introducir texto Claude.

82 

83## Flujos de trabajo de ejemplo

84 

85Estos ejemplos muestran formas comunes de combinar acciones del navegador con tareas de codificación. Ejecuta `/mcp` y selecciona `claude-in-chrome` para ver la lista completa de herramientas del navegador disponibles.

86 

87### Probar una aplicación web local

88 

89Al desarrollar una aplicación web, pídele a Claude que verifique que tus cambios funcionen correctamente:

90 

91```text theme={null}

92I just updated the login form validation. Can you open localhost:3000,

93try submitting the form with invalid data, and check if the error

94messages appear correctly?

95```

96 

97Claude navega a tu servidor local, interactúa con el formulario e informa lo que observa.

98 

99### Depurar con registros de consola

100 

101Claude puede leer la salida de la consola para ayudar a diagnosticar problemas. Dile a Claude qué patrones buscar en lugar de pedirle toda la salida de la consola, ya que los registros pueden ser detallados:

102 

103```text theme={null}

104Open the dashboard page and check the console for any errors when

105the page loads.

106```

107 

108Claude lee los mensajes de la consola y puede filtrar patrones específicos o tipos de error.

109 

110### Automatizar el relleno de formularios

111 

112Acelera tareas repetitivas de entrada de datos:

113 

114```text theme={null}

115I have a spreadsheet of customer contacts in contacts.csv. For each row,

116go to the CRM at crm.example.com, click "Add Contact", and fill in the

117name, email, and phone fields.

118```

119 

120Claude lee tu archivo local, navega por la interfaz web e introduce los datos para cada registro.

121 

122### Redactar contenido en Google Docs

123 

124Usa Claude para escribir directamente en tus documentos sin configuración de API:

125 

126```text theme={null}

127Draft a project update based on the recent commits and add it to my

128Google Doc at docs.google.com/document/d/abc123

129```

130 

131Claude abre el documento, hace clic en el editor e introduce el contenido. Esto funciona con cualquier aplicación web en la que hayas iniciado sesión: Gmail, Notion, Sheets y más.

132 

133### Extraer datos de páginas web

134 

135Extrae información estructurada de sitios web:

136 

137```text theme={null}

138Go to the product listings page and extract the name, price, and

139availability for each item. Save the results as a CSV file.

140```

141 

142Claude navega a la página, lee el contenido y compila los datos en un formato estructurado.

143 

144### Ejecutar flujos de trabajo multisitio

145 

146Coordina tareas en múltiples sitios web:

147 

148```text theme={null}

149Check my calendar for meetings tomorrow, then for each meeting with

150an external attendee, look up their company website and add a note

151about what they do.

152```

153 

154Claude trabaja en pestañas para recopilar información y completar el flujo de trabajo.

155 

156### Grabar un GIF de demostración

157 

158Crea grabaciones compartibles de interacciones del navegador:

159 

160```text theme={null}

161Record a GIF showing how to complete the checkout flow, from adding

162an item to the cart through to the confirmation page.

163```

164 

165Claude graba la secuencia de interacción y la guarda como un archivo GIF.

166 

167## Solución de problemas

168 

169### Extensión no detectada

170 

171Si Claude Code muestra "Extensión de Chrome no detectada":

172 

1731. Verifica que la extensión de Chrome esté instalada y habilitada en `chrome://extensions`

1742. Verifica que Claude Code esté actualizado ejecutando `claude --version`

1753. Comprueba que Chrome se está ejecutando

1764. Ejecuta `/chrome` y selecciona "Reconectar extensión" para restablecer la conexión

1775. Si el problema persiste, reinicia tanto Claude Code como Chrome

178 

179La primera vez que habilitas la integración de Chrome, Claude Code instala un archivo de configuración del host de mensajería nativa. Chrome lee este archivo al iniciarse, por lo que si la extensión no se detecta en tu primer intento, reinicia Chrome para recoger la nueva configuración.

180 

181Si la conexión aún falla, verifica que el archivo de configuración del host exista en:

182 

183Para Chrome:

184 

185* **macOS**: `~/Library/Application Support/Google/Chrome/NativeMessagingHosts/com.anthropic.claude_code_browser_extension.json`

186* **Linux**: `~/.config/google-chrome/NativeMessagingHosts/com.anthropic.claude_code_browser_extension.json`

187* **Windows**: comprueba `HKCU\Software\Google\Chrome\NativeMessagingHosts\` en el Registro de Windows

188 

189Para Edge:

190 

191* **macOS**: `~/Library/Application Support/Microsoft Edge/NativeMessagingHosts/com.anthropic.claude_code_browser_extension.json`

192* **Linux**: `~/.config/microsoft-edge/NativeMessagingHosts/com.anthropic.claude_code_browser_extension.json`

193* **Windows**: comprueba `HKCU\Software\Microsoft\Edge\NativeMessagingHosts\` en el Registro de Windows

194 

195### El navegador no responde

196 

197Si los comandos del navegador de Claude dejan de funcionar:

198 

1991. Comprueba si un cuadro de diálogo modal (alerta, confirmación, solicitud) está bloqueando la página. Los cuadros de diálogo de JavaScript bloquean eventos del navegador e impiden que Claude reciba comandos. Descarta el cuadro de diálogo manualmente, luego dile a Claude que continúe.

2002. Pídele a Claude que cree una nueva pestaña e intente de nuevo

2013. Reinicia la extensión de Chrome deshabilitándola y volviéndola a habilitar en `chrome://extensions`

202 

203### La conexión se cae durante sesiones largas

204 

205El trabajador de servicio de la extensión de Chrome puede quedarse inactivo durante sesiones extendidas, lo que rompe la conexión. Si las herramientas del navegador dejan de funcionar después de un período de inactividad, ejecuta `/chrome` y selecciona "Reconectar extensión".

206 

207### Problemas específicos de Windows

208 

209En Windows, puedes encontrar:

210 

211* **Conflictos de tuberías nombradas (EADDRINUSE)**: si otro proceso está usando la misma tubería nombrada, reinicia Claude Code. Cierra cualquier otra sesión de Claude Code que pueda estar usando Chrome.

212* **Errores del host de mensajería nativa**: si el host de mensajería nativa falla al iniciarse, intenta reinstalar Claude Code para regenerar la configuración del host.

213 

214### Mensajes de error comunes

215 

216Estos son los errores más frecuentes y cómo resolverlos:

217 

218| Error | Causa | Solución |

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

220| "La extensión del navegador no está conectada" | El host de mensajería nativa no puede alcanzar la extensión | Reinicia Chrome y Claude Code, luego ejecuta `/chrome` para reconectar |

221| "Extensión no detectada" | La extensión de Chrome no está instalada o está deshabilitada | Instala o habilita la extensión en `chrome://extensions` |

222| "No hay pestaña disponible" | Claude intentó actuar antes de que una pestaña estuviera lista | Pídele a Claude que cree una nueva pestaña e intente de nuevo |

223| "El extremo receptor no existe" | El trabajador de servicio de la extensión se quedó inactivo | Ejecuta `/chrome` y selecciona "Reconectar extensión" |

224 

225## Ver también

226 

227* [Usar Claude Code en VS Code](/es/vs-code#automate-browser-tasks-with-chrome): automatización del navegador en la extensión de VS Code

228* [Referencia de CLI](/es/cli-reference): banderas de línea de comandos incluyendo `--chrome`

229* [Flujos de trabajo comunes](/es/common-workflows): más formas de usar Claude Code

230* [Datos y privacidad](/es/data-usage): cómo Claude Code maneja tus datos

231* [Comenzar con Claude en Chrome](https://support.claude.com/en/articles/12012173-getting-started-with-claude-in-chrome): documentación completa para la extensión de Chrome, incluyendo atajos de teclado, programación y permisos

claude-code-on-the-web.md +773 −0 created

Details

1> ## Documentation Index

2> Fetch the complete documentation index at: https://code.claude.com/docs/llms.txt

3> Use this file to discover all available pages before exploring further.

4 

5# Usar Claude Code en la web

6 

7> Configura entornos en la nube, scripts de configuración, acceso a la red y Docker en el sandbox de Anthropic. Mueve sesiones entre web y terminal con `--remote` y `--teleport`.

8 

9<Note>

10 Claude Code en la web está en vista previa de investigación para usuarios Pro, Max y Team, y para usuarios Enterprise con asientos premium o asientos Chat + Claude Code.

11</Note>

12 

13Claude Code en la web ejecuta tareas en infraestructura en la nube administrada por Anthropic en [claude.ai/code](https://claude.ai/code). Las sesiones persisten incluso si cierra su navegador, y puede monitorearlas desde la aplicación móvil Claude.

14 

15<Tip>

16 ¿Nuevo en Claude Code en la web? Comience con [Primeros pasos](/es/web-quickstart) para conectar su cuenta de GitHub y enviar su primera tarea.

17</Tip>

18 

19Esta página cubre:

20 

21* [Opciones de autenticación de GitHub](#github-authentication-options): dos formas de conectar GitHub

22* [El entorno en la nube](#the-cloud-environment): qué configuración se transfiere, qué herramientas están instaladas y cómo configurar entornos

23* [Scripts de configuración](#setup-scripts) y gestión de dependencias

24* [Acceso a la red](#network-access): niveles, proxies y la lista de permitidos predeterminada

25* [Mover tareas entre web y terminal](#move-tasks-between-web-and-terminal) con `--remote` y `--teleport`

26* [Trabajar con sesiones](#work-with-sessions): revisar, compartir, archivar, eliminar

27* [Correcciones automáticas de solicitudes de extracción](#auto-fix-pull-requests): responder automáticamente a fallos de CI y comentarios de revisión

28* [Seguridad y aislamiento](#security-and-isolation): cómo se aíslan las sesiones

29* [Limitaciones](#limitations): límites de velocidad y restricciones de plataforma

30 

31## Opciones de autenticación de GitHub

32 

33Las sesiones en la nube necesitan acceso a sus repositorios de GitHub para clonar código e insertar ramas. Puede otorgar acceso de dos formas:

34 

35| Método | Cómo funciona | Mejor para |

36| :--------------- | :--------------------------------------------------------------------------------------------------------------------------------------------------------- | :-------------------------------------------------------- |

37| **GitHub App** | Instale la aplicación Claude GitHub en repositorios específicos durante la [incorporación web](/es/web-quickstart). El acceso se limita por repositorio. | Equipos que desean autorización explícita por repositorio |

38| **`/web-setup`** | Ejecute `/web-setup` en su terminal para sincronizar su token local de CLI `gh` a su cuenta Claude. El acceso coincide con lo que su token `gh` puede ver. | Desarrolladores individuales que ya usan `gh` |

39 

40Cualquiera de los dos métodos funciona. [`/schedule`](/es/routines) verifica cualquiera de las dos formas de acceso y le solicita que ejecute `/web-setup` si ninguna está configurada. Consulte [Conectar desde su terminal](/es/web-quickstart#connect-from-your-terminal) para el tutorial de `/web-setup`.

41 

42La aplicación GitHub es necesaria para [Correcciones automáticas](#auto-fix-pull-requests), que usa la aplicación para recibir webhooks de PR. Si se conecta con `/web-setup` y luego desea correcciones automáticas, instale la aplicación en esos repositorios.

43 

44Los administradores de Team y Enterprise pueden deshabilitar `/web-setup` con el interruptor de configuración web rápida en [claude.ai/admin-settings/claude-code](https://claude.ai/admin-settings/claude-code).

45 

46<Note>

47 Las organizaciones con [Retención de datos cero](/es/zero-data-retention) habilitada no pueden usar `/web-setup` u otras características de sesión en la nube.

48</Note>

49 

50## El entorno en la nube

51 

52Cada sesión se ejecuta en una VM nueva administrada por Anthropic con su repositorio clonado. Esta sección cubre qué está disponible cuando comienza una sesión y cómo personalizarlo.

53 

54### Qué está disponible en sesiones en la nube

55 

56Las sesiones en la nube comienzan desde un clon nuevo de su repositorio. Cualquier cosa comprometida con el repositorio está disponible. Cualquier cosa que haya instalado o configurado solo en su propia máquina no lo está.

57 

58| | Disponible en sesiones en la nube | Por qué |

59| :--------------------------------------------------------------------------- | :-------------------------------- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------- |

60| Su `CLAUDE.md` del repositorio | Sí | Parte del clon |

61| Sus hooks `.claude/settings.json` del repositorio | Sí | Parte del clon |

62| Sus servidores MCP `.mcp.json` del repositorio | Sí | Parte del clon |

63| Su `.claude/rules/` del repositorio | Sí | Parte del clon |

64| Su `.claude/skills/`, `.claude/agents/`, `.claude/commands/` del repositorio | Sí | Parte del clon |

65| Plugins declarados en `.claude/settings.json` | Sí | Instalados al inicio de la sesión desde el [marketplace](/es/plugin-marketplaces) que declaró. Requiere acceso a la red para llegar a la fuente del marketplace |

66| Su `~/.claude/CLAUDE.md` de usuario | No | Vive en su máquina, no en el repositorio |

67| Plugins habilitados solo en su configuración de usuario | No | El `enabledPlugins` con alcance de usuario vive en `~/.claude/settings.json`. Declárelos en el `.claude/settings.json` del repositorio en su lugar |

68| Servidores MCP que agregó con `claude mcp add` | No | Esos escriben en su configuración de usuario local, no en el repositorio. Declare el servidor en [`.mcp.json`](/es/mcp#project-scope) en su lugar |

69| Tokens de API estáticos y credenciales | No | Aún no existe un almacén de secretos dedicado. Vea a continuación |

70| Autenticación interactiva como AWS SSO | No | No compatible. SSO requiere inicio de sesión basado en navegador que no puede ejecutarse en una sesión en la nube |

71 

72Para que la configuración esté disponible en sesiones en la nube, comprométala en el repositorio. Aún no hay un almacén de secretos dedicado disponible. Tanto las variables de entorno como los scripts de configuración se almacenan en la configuración del entorno, visible para cualquiera que pueda editar ese entorno. Si necesita secretos en una sesión en la nube, agréguelos como variables de entorno con esa visibilidad en mente.

73 

74### Herramientas instaladas

75 

76Las sesiones en la nube vienen con tiempos de ejecución de lenguaje comunes, herramientas de compilación y bases de datos preinstaladas. La tabla a continuación resume lo que se incluye por categoría.

77 

78| Categoría | Incluido |

79| :----------------- | :----------------------------------------------------------------------------- |

80| **Python** | Python 3.x con pip, poetry, uv, black, mypy, pytest, ruff |

81| **Node.js** | 20, 21 y 22 vía nvm, con npm, yarn, pnpm, bun¹, eslint, prettier, chromedriver |

82| **Ruby** | 3.1, 3.2, 3.3 con gem, bundler, rbenv |

83| **PHP** | 8.4 con Composer |

84| **Java** | OpenJDK 21 con Maven y Gradle |

85| **Go** | última versión estable con soporte de módulos |

86| **Rust** | rustc y cargo |

87| **C/C++** | GCC, Clang, cmake, ninja, conan |

88| **Docker** | docker, dockerd, docker compose |

89| **Bases de datos** | PostgreSQL 16, Redis 7.0 |

90| **Utilidades** | git, jq, yq, ripgrep, tmux, vim, nano |

91 

92¹ Bun está instalado pero tiene [problemas de compatibilidad de proxy](#install-dependencies-with-a-sessionstart-hook) conocidos para obtención de paquetes.

93 

94Para versiones exactas, pida a Claude que ejecute `check-tools` en una sesión en la nube. Este comando solo existe en sesiones en la nube.

95 

96### Trabajar con problemas y solicitudes de extracción de GitHub

97 

98Las sesiones en la nube incluyen herramientas de GitHub integradas que permiten a Claude leer problemas, listar solicitudes de extracción, obtener diffs y publicar comentarios sin ninguna configuración. Estas herramientas se autentican a través del [proxy de GitHub](#github-proxy) usando cualquier método que configuró en [Opciones de autenticación de GitHub](#github-authentication-options), por lo que su token nunca entra en el contenedor.

99 

100La CLI `gh` no está preinstalada. Si necesita un comando `gh` que las herramientas integradas no cubran, como `gh release` o `gh workflow run`, instálelo y auténtiquese usted mismo:

101 

102<Steps>

103 <Step title="Instale gh en su script de configuración">

104 Agregue `apt update && apt install -y gh` a su [script de configuración](#setup-scripts).

105 </Step>

106 

107 <Step title="Proporcione un token">

108 Agregue una variable de entorno `GH_TOKEN` a su [configuración de entorno](#configure-your-environment) con un token de acceso personal de GitHub. `gh` lee `GH_TOKEN` automáticamente, por lo que no se necesita un paso `gh auth login`.

109 </Step>

110</Steps>

111 

112### Vincule artefactos de vuelta a la sesión

113 

114Cada sesión en la nube tiene una URL de transcripción en claude.ai, y la sesión puede leer su propio ID desde la variable de entorno `CLAUDE_CODE_REMOTE_SESSION_ID`. Use esto para poner un enlace rastreable en cuerpos de PR, mensajes de confirmación, publicaciones de Slack o informes generados para que un revisor pueda abrir la ejecución que los produjo.

115 

116Pida a Claude que construya el enlace desde la variable de entorno. El siguiente comando imprime la URL:

117 

118```bash theme={null}

119echo "https://claude.ai/code/${CLAUDE_CODE_REMOTE_SESSION_ID}"

120```

121 

122### Ejecute pruebas, inicie servicios y agregue paquetes

123 

124Claude ejecuta pruebas como parte del trabajo en una tarea. Pídalo en su solicitud, como "corregir las pruebas fallidas en `tests/`" o "ejecutar pytest después de cada cambio". Los ejecutores de pruebas como pytest, jest y cargo test funcionan de inmediato ya que están preinstalados.

125 

126PostgreSQL y Redis están preinstalados pero no se ejecutan de forma predeterminada. Pida a Claude que inicie cada uno durante la sesión:

127 

128```bash theme={null}

129service postgresql start

130```

131 

132```bash theme={null}

133service redis-server start

134```

135 

136Docker está disponible para ejecutar servicios en contenedores. Pida a Claude que ejecute `docker compose up` para iniciar los servicios de su proyecto. El acceso a la red para extraer imágenes sigue el [nivel de acceso](#access-levels) de su entorno, y los [Valores predeterminados confiables](#default-allowed-domains) incluyen Docker Hub y otros registros comunes.

137 

138Si sus imágenes son grandes o lentas de extraer, agregue `docker compose pull` o `docker compose build` a su [script de configuración](#setup-scripts). Las imágenes extraídas se guardan en el [entorno en caché](#environment-caching), por lo que cada nueva sesión las tiene en el disco. El caché almacena solo archivos, no procesos en ejecución, por lo que Claude aún inicia los contenedores cada sesión.

139 

140Para agregar paquetes que no están preinstalados, use un [script de configuración](#setup-scripts). La salida del script se [almacena en caché](#environment-caching), por lo que los paquetes que instale allí están disponibles al inicio de cada sesión sin reinstalar cada vez. También puede pedir a Claude que instale paquetes durante la sesión, pero esas instalaciones no persisten entre sesiones.

141 

142### Límites de recursos

143 

144Las sesiones en la nube se ejecutan con límites de recursos aproximados que pueden cambiar con el tiempo:

145 

146* 4 vCPUs

147* 16 GB de RAM

148* 30 GB de disco

149 

150Las tareas que requieren significativamente más memoria, como trabajos de compilación grandes o pruebas que consumen mucha memoria, pueden fallar o ser terminadas. Para cargas de trabajo más allá de estos límites, use [Control Remoto](/es/remote-control) para ejecutar Claude Code en su propio hardware.

151 

152### Configure su entorno

153 

154Los entornos controlan [acceso a la red](#network-access), variables de entorno y el [script de configuración](#setup-scripts) que se ejecuta antes de que comience una sesión. Consulte [Herramientas instaladas](#installed-tools) para ver qué está disponible sin ninguna configuración. Puede administrar entornos desde la interfaz web o desde la terminal:

155 

156| Acción | Cómo |

157| :------------------------------------------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

158| Agregar un entorno | Seleccione el entorno actual para abrir el selector, luego seleccione **Agregar entorno**. El diálogo incluye nombre, nivel de acceso a la red, variables de entorno y script de configuración. |

159| Editar un entorno | Seleccione el icono de configuración a la derecha del nombre del entorno. |

160| Archivar un entorno | Abra el entorno para editar y seleccione **Archivar**. Los entornos archivados se ocultan del selector pero las sesiones existentes continúan ejecutándose. |

161| Establecer el predeterminado para `--remote` | Ejecute `/remote-env` en su terminal. Si tiene un único entorno, este comando muestra su configuración actual. `/remote-env` solo selecciona el predeterminado; agregue, edite y archive entornos desde la interfaz web. |

162 

163Las variables de entorno usan formato `.env` con un par `KEY=value` por línea. No envuelva valores entre comillas, ya que las comillas se almacenan como parte del valor.

164 

165```text theme={null}

166NODE_ENV=development

167LOG_LEVEL=debug

168DATABASE_URL=postgres://localhost:5432/myapp

169```

170 

171## Scripts de configuración

172 

173Un script de configuración es un script Bash que se ejecuta cuando comienza una nueva sesión en la nube, antes de que se lance Claude Code. Use scripts de configuración para instalar dependencias, configurar herramientas o obtener cualquier cosa que la sesión necesite que no esté preinstalada.

174 

175Los scripts se ejecutan como root en Ubuntu 24.04, por lo que `apt install` y la mayoría de los administradores de paquetes de lenguaje funcionan.

176 

177Para agregar un script de configuración, abra el diálogo de configuración del entorno e ingrese su script en el campo **Script de configuración**.

178 

179Este ejemplo instala la CLI `gh`, que no está preinstalada:

180 

181```bash theme={null}

182#!/bin/bash

183apt update && apt install -y gh

184```

185 

186Si el script sale con un código distinto de cero, la sesión no se inicia. Agregue `|| true` a comandos no críticos para evitar bloquear la sesión en una instalación intermitente fallida.

187 

188<Note>

189 Los scripts de configuración que instalan paquetes necesitan acceso a la red para llegar a los registros. El acceso a la red predeterminado **Confiable** permite conexiones a [dominios comunes en la lista de permitidos](#default-allowed-domains) incluyendo npm, PyPI, RubyGems y crates.io. Los scripts fallarán al instalar paquetes si su entorno usa acceso a la red **Ninguno**.

190</Note>

191 

192### Almacenamiento en caché del entorno

193 

194El script de configuración se ejecuta la primera vez que inicia una sesión en un entorno. Después de que se completa, Anthropic toma una instantánea del sistema de archivos y reutiliza esa instantánea como punto de partida para sesiones posteriores. Las nuevas sesiones comienzan con sus dependencias, herramientas e imágenes de Docker ya en el disco, y se omite el paso del script de configuración. Esto mantiene el inicio rápido incluso cuando el script instala cadenas de herramientas grandes o extrae imágenes de contenedor.

195 

196El caché captura archivos, no procesos en ejecución. Cualquier cosa que el script de configuración escriba en el disco se transfiere. Los servicios o contenedores que inicia no, por lo que inicie esos por sesión pidiendo a Claude o con un [hook SessionStart](#setup-scripts-vs-sessionstart-hooks).

197 

198El script de configuración se ejecuta nuevamente para reconstruir el caché cuando cambia el script de configuración del entorno o los hosts de red permitidos, y cuando el caché alcanza su vencimiento después de aproximadamente siete días. Reanudar una sesión existente nunca vuelve a ejecutar el script de configuración.

199 

200No necesita habilitar el almacenamiento en caché ni administrar instantáneas usted mismo.

201 

202### Scripts de configuración vs. hooks SessionStart

203 

204Use un script de configuración para instalar cosas que la nube necesita pero su portátil ya tiene, como un tiempo de ejecución de lenguaje o herramienta CLI. Use un [hook SessionStart](/es/hooks#sessionstart) para la configuración del proyecto que debe ejecutarse en todas partes, nube y local, como `npm install`.

205 

206Ambos se ejecutan al inicio de una sesión, pero pertenecen a diferentes lugares:

207 

208| | Scripts de configuración | Hooks SessionStart |

209| -------------- | ---------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------- |

210| Adjunto a | El entorno en la nube | Su repositorio |

211| Configurado en | Interfaz de usuario del entorno en la nube | `.claude/settings.json` en su repositorio |

212| Se ejecuta | Antes de que se lance Claude Code, cuando no hay [entorno en caché](#environment-caching) disponible | Después de que se lance Claude Code, en cada sesión incluyendo reanudadas |

213| Alcance | Solo entornos en la nube | Tanto local como nube |

214 

215Los hooks SessionStart también se pueden definir en su `~/.claude/settings.json` a nivel de usuario localmente, pero la configuración a nivel de usuario no se transfiere a sesiones en la nube. En la nube, solo se ejecutan los hooks comprometidos con el repositorio.

216 

217### Instale dependencias con un hook SessionStart

218 

219Para instalar dependencias solo en sesiones en la nube, agregue un hook SessionStart a su `.claude/settings.json` del repositorio:

220 

221```json theme={null}

222{

223 "hooks": {

224 "SessionStart": [

225 {

226 "matcher": "startup|resume",

227 "hooks": [

228 {

229 "type": "command",

230 "command": "\"$CLAUDE_PROJECT_DIR\"/scripts/install_pkgs.sh"

231 }

232 ]

233 }

234 ]

235 }

236}

237```

238 

239Cree el script en `scripts/install_pkgs.sh` y hágalo ejecutable con `chmod +x`. La variable de entorno `CLAUDE_CODE_REMOTE` se establece en `true` en sesiones en la nube, por lo que puede usarla para omitir la ejecución local:

240 

241```bash theme={null}

242#!/bin/bash

243 

244if [ "$CLAUDE_CODE_REMOTE" != "true" ]; then

245 exit 0

246fi

247 

248npm install

249pip install -r requirements.txt

250exit 0

251```

252 

253Los hooks SessionStart tienen algunas limitaciones en sesiones en la nube:

254 

255* **Sin alcance solo en la nube**: los hooks se ejecutan en sesiones locales y en la nube. Para omitir la ejecución local, verifique la variable de entorno `CLAUDE_CODE_REMOTE` como se muestra arriba.

256* **Requiere acceso a la red**: los comandos de instalación necesitan llegar a los registros de paquetes. Si su entorno usa acceso a la red **Ninguno**, estos hooks fallan. La [lista de permitidos predeterminada](#default-allowed-domains) bajo **Confiable** cubre npm, PyPI, RubyGems y crates.io.

257* **Compatibilidad de proxy**: todo el tráfico saliente pasa a través de un [proxy de seguridad](#security-proxy). Algunos administradores de paquetes no funcionan correctamente con este proxy. Bun es un ejemplo conocido.

258* **Agrega latencia de inicio**: los hooks se ejecutan cada vez que comienza o se reanuda una sesión, a diferencia de los scripts de configuración que se benefician del [almacenamiento en caché del entorno](#environment-caching). Mantenga los scripts de instalación rápidos verificando si las dependencias ya están presentes antes de reinstalar.

259 

260Para persistir variables de entorno para comandos Bash posteriores, escriba en el archivo en `$CLAUDE_ENV_FILE`. Consulte [hooks SessionStart](/es/hooks#sessionstart) para obtener detalles.

261 

262Reemplazar la imagen base con su propia imagen Docker aún no es compatible. Use un script de configuración para instalar lo que necesita en la [imagen proporcionada](#installed-tools), o ejecute su imagen como un contenedor junto a Claude con `docker compose`.

263 

264## Acceso a la red

265 

266El acceso a la red controla las conexiones salientes desde el entorno en la nube. Cada entorno especifica un nivel de acceso, y puede extenderlo con dominios permitidos personalizados. El predeterminado es **Confiable**, que permite registros de paquetes y otros [dominios en la lista de permitidos](#default-allowed-domains).

267 

268### Niveles de acceso

269 

270Elija un nivel de acceso cuando cree o edite un entorno:

271 

272| Nivel | Conexiones salientes |

273| :---------------- | :------------------------------------------------------------------------------------------------------------------ |

274| **Ninguno** | Sin acceso a la red saliente |

275| **Confiable** | [Dominios en la lista de permitidos](#default-allowed-domains) solo: registros de paquetes, GitHub, SDKs en la nube |

276| **Completo** | Cualquier dominio |

277| **Personalizado** | Su propia lista de permitidos, opcionalmente incluyendo los predeterminados |

278 

279Las operaciones de GitHub usan un [proxy separado](#github-proxy) que es independiente de esta configuración.

280 

281### Permita dominios específicos

282 

283Para permitir dominios que no están en la lista Confiable, seleccione **Personalizado** en la configuración de acceso a la red del entorno. Aparece un campo **Dominios permitidos**. Ingrese un dominio por línea:

284 

285```text theme={null}

286api.example.com

287*.internal.example.com

288registry.example.com

289```

290 

291Use `*.` para coincidencia de subdominio comodín. Marque **También incluir lista predeterminada de administradores de paquetes comunes** para mantener los [dominios Confiables](#default-allowed-domains) junto con sus entradas personalizadas, o déjelo sin marcar para permitir solo lo que enumera.

292 

293### Proxy de GitHub

294 

295Por seguridad, todas las operaciones de GitHub pasan a través de un servicio de proxy dedicado que maneja de forma transparente todas las interacciones de git. Dentro del sandbox, el cliente de git se autentica usando una credencial de alcance personalizada. Este proxy:

296 

297* Gestiona la autenticación de GitHub de forma segura: el cliente de git usa una credencial de alcance dentro del sandbox, que el proxy verifica y traduce a su token de autenticación real de GitHub

298* Restringe las operaciones de inserción de git a la rama de trabajo actual por seguridad

299* Permite operaciones de clonación, obtención y PR mientras mantiene límites de seguridad

300 

301### Proxy de seguridad

302 

303Los entornos se ejecutan detrás de un proxy de red HTTP/HTTPS para propósitos de seguridad y prevención de abuso. Todo el tráfico de Internet saliente pasa a través de este proxy, que proporciona:

304 

305* Protección contra solicitudes maliciosas

306* Limitación de velocidad y prevención de abuso

307* Filtrado de contenido para mayor seguridad

308 

309### Dominios permitidos predeterminados

310 

311Cuando se usa acceso a la red **Confiable**, los siguientes dominios están permitidos de forma predeterminada. Los dominios marcados con `*` indican coincidencia de subdominio comodín, por lo que `*.gcr.io` permite cualquier subdominio de `gcr.io`.

312 

313<AccordionGroup>

314 <Accordion title="Servicios Anthropic">

315 * api.anthropic.com

316 * statsig.anthropic.com

317 * docs.claude.com

318 * platform.claude.com

319 * code.claude.com

320 * claude.ai

321 </Accordion>

322 

323 <Accordion title="Control de versiones">

324 * github.com

325 * [www.github.com](http://www.github.com)

326 * api.github.com

327 * npm.pkg.github.com

328 * raw\.githubusercontent.com

329 * pkg-npm.githubusercontent.com

330 * objects.githubusercontent.com

331 * release-assets.githubusercontent.com

332 * codeload.github.com

333 * avatars.githubusercontent.com

334 * camo.githubusercontent.com

335 * gist.github.com

336 * gitlab.com

337 * [www.gitlab.com](http://www.gitlab.com)

338 * registry.gitlab.com

339 * bitbucket.org

340 * [www.bitbucket.org](http://www.bitbucket.org)

341 * api.bitbucket.org

342 </Accordion>

343 

344 <Accordion title="Registros de contenedores">

345 * registry-1.docker.io

346 * auth.docker.io

347 * index.docker.io

348 * hub.docker.com

349 * [www.docker.com](http://www.docker.com)

350 * production.cloudflare.docker.com

351 * download.docker.com

352 * gcr.io

353 * \*.gcr.io

354 * ghcr.io

355 * mcr.microsoft.com

356 * \*.data.mcr.microsoft.com

357 * public.ecr.aws

358 </Accordion>

359 

360 <Accordion title="Plataformas en la nube">

361 * cloud.google.com

362 * accounts.google.com

363 * gcloud.google.com

364 * \*.googleapis.com

365 * storage.googleapis.com

366 * compute.googleapis.com

367 * container.googleapis.com

368 * azure.com

369 * portal.azure.com

370 * microsoft.com

371 * [www.microsoft.com](http://www.microsoft.com)

372 * \*.microsoftonline.com

373 * packages.microsoft.com

374 * dotnet.microsoft.com

375 * dot.net

376 * visualstudio.com

377 * dev.azure.com

378 * \*.amazonaws.com

379 * \*.api.aws

380 * oracle.com

381 * [www.oracle.com](http://www.oracle.com)

382 * java.com

383 * [www.java.com](http://www.java.com)

384 * java.net

385 * [www.java.net](http://www.java.net)

386 * download.oracle.com

387 * yum.oracle.com

388 </Accordion>

389 

390 <Accordion title="Administradores de paquetes JavaScript y Node">

391 * registry.npmjs.org

392 * [www.npmjs.com](http://www.npmjs.com)

393 * [www.npmjs.org](http://www.npmjs.org)

394 * npmjs.com

395 * npmjs.org

396 * yarnpkg.com

397 * registry.yarnpkg.com

398 </Accordion>

399 

400 <Accordion title="Administradores de paquetes Python">

401 * pypi.org

402 * [www.pypi.org](http://www.pypi.org)

403 * files.pythonhosted.org

404 * pythonhosted.org

405 * test.pypi.org

406 * pypi.python.org

407 * pypa.io

408 * [www.pypa.io](http://www.pypa.io)

409 </Accordion>

410 

411 <Accordion title="Administradores de paquetes Ruby">

412 * rubygems.org

413 * [www.rubygems.org](http://www.rubygems.org)

414 * api.rubygems.org

415 * index.rubygems.org

416 * ruby-lang.org

417 * [www.ruby-lang.org](http://www.ruby-lang.org)

418 * rubyforge.org

419 * [www.rubyforge.org](http://www.rubyforge.org)

420 * rubyonrails.org

421 * [www.rubyonrails.org](http://www.rubyonrails.org)

422 * rvm.io

423 * get.rvm.io

424 </Accordion>

425 

426 <Accordion title="Administradores de paquetes Rust">

427 * crates.io

428 * [www.crates.io](http://www.crates.io)

429 * index.crates.io

430 * static.crates.io

431 * rustup.rs

432 * static.rust-lang.org

433 * [www.rust-lang.org](http://www.rust-lang.org)

434 </Accordion>

435 

436 <Accordion title="Administradores de paquetes Go">

437 * proxy.golang.org

438 * sum.golang.org

439 * index.golang.org

440 * golang.org

441 * [www.golang.org](http://www.golang.org)

442 * goproxy.io

443 * pkg.go.dev

444 </Accordion>

445 

446 <Accordion title="Administradores de paquetes JVM">

447 * maven.org

448 * repo.maven.org

449 * central.maven.org

450 * repo1.maven.org

451 * repo.maven.apache.org

452 * jcenter.bintray.com

453 * gradle.org

454 * [www.gradle.org](http://www.gradle.org)

455 * services.gradle.org

456 * plugins.gradle.org

457 * kotlinlang.org

458 * [www.kotlinlang.org](http://www.kotlinlang.org)

459 * spring.io

460 * repo.spring.io

461 </Accordion>

462 

463 <Accordion title="Otros administradores de paquetes">

464 * packagist.org (PHP Composer)

465 * [www.packagist.org](http://www.packagist.org)

466 * repo.packagist.org

467 * nuget.org (.NET NuGet)

468 * [www.nuget.org](http://www.nuget.org)

469 * api.nuget.org

470 * pub.dev (Dart/Flutter)

471 * api.pub.dev

472 * hex.pm (Elixir/Erlang)

473 * [www.hex.pm](http://www.hex.pm)

474 * cpan.org (Perl CPAN)

475 * [www.cpan.org](http://www.cpan.org)

476 * metacpan.org

477 * [www.metacpan.org](http://www.metacpan.org)

478 * api.metacpan.org

479 * cocoapods.org (iOS/macOS)

480 * [www.cocoapods.org](http://www.cocoapods.org)

481 * cdn.cocoapods.org

482 * haskell.org

483 * [www.haskell.org](http://www.haskell.org)

484 * hackage.haskell.org

485 * swift.org

486 * [www.swift.org](http://www.swift.org)

487 </Accordion>

488 

489 <Accordion title="Distribuciones de Linux">

490 * archive.ubuntu.com

491 * security.ubuntu.com

492 * ubuntu.com

493 * [www.ubuntu.com](http://www.ubuntu.com)

494 * \*.ubuntu.com

495 * ppa.launchpad.net

496 * launchpad.net

497 * [www.launchpad.net](http://www.launchpad.net)

498 * \*.nixos.org

499 </Accordion>

500 

501 <Accordion title="Herramientas de desarrollo y plataformas">

502 * dl.k8s.io (Kubernetes)

503 * pkgs.k8s.io

504 * k8s.io

505 * [www.k8s.io](http://www.k8s.io)

506 * releases.hashicorp.com (HashiCorp)

507 * apt.releases.hashicorp.com

508 * rpm.releases.hashicorp.com

509 * archive.releases.hashicorp.com

510 * hashicorp.com

511 * [www.hashicorp.com](http://www.hashicorp.com)

512 * repo.anaconda.com (Anaconda/Conda)

513 * conda.anaconda.org

514 * anaconda.org

515 * [www.anaconda.com](http://www.anaconda.com)

516 * anaconda.com

517 * continuum.io

518 * apache.org (Apache)

519 * [www.apache.org](http://www.apache.org)

520 * archive.apache.org

521 * downloads.apache.org

522 * eclipse.org (Eclipse)

523 * [www.eclipse.org](http://www.eclipse.org)

524 * download.eclipse.org

525 * nodejs.org (Node.js)

526 * [www.nodejs.org](http://www.nodejs.org)

527 * developer.apple.com

528 * developer.android.com

529 * pkg.stainless.com

530 * binaries.prisma.sh

531 </Accordion>

532 

533 <Accordion title="Servicios en la nube y monitoreo">

534 * statsig.com

535 * [www.statsig.com](http://www.statsig.com)

536 * api.statsig.com

537 * sentry.io

538 * \*.sentry.io

539 * downloads.sentry-cdn.com

540 * http-intake.logs.datadoghq.com

541 * \*.datadoghq.com

542 * \*.datadoghq.eu

543 * api.honeycomb.io

544 </Accordion>

545 

546 <Accordion title="Entrega de contenido y espejos">

547 * sourceforge.net

548 * \*.sourceforge.net

549 * packagecloud.io

550 * \*.packagecloud.io

551 * fonts.googleapis.com

552 * fonts.gstatic.com

553 </Accordion>

554 

555 <Accordion title="Esquema y configuración">

556 * json-schema.org

557 * [www.json-schema.org](http://www.json-schema.org)

558 * json.schemastore.org

559 * [www.schemastore.org](http://www.schemastore.org)

560 </Accordion>

561 

562 <Accordion title="Protocolo de contexto de modelo">

563 * \*.modelcontextprotocol.io

564 </Accordion>

565</AccordionGroup>

566 

567## Mover tareas entre web y terminal

568 

569Estos flujos de trabajo requieren la [CLI de Claude Code](/es/quickstart) conectada a la misma cuenta de claude.ai. Puede iniciar nuevas sesiones en la nube desde su terminal, o extraer sesiones en la nube en su terminal para continuar localmente. Las sesiones en la nube persisten incluso si cierra su portátil, y puede monitorearlas desde cualquier lugar, incluyendo la aplicación móvil Claude.

570 

571<Note>

572 Desde la CLI, la transferencia de sesión es unidireccional: puede extraer sesiones en la nube en su terminal con `--teleport`, pero no puede insertar una sesión de terminal existente en la web. La bandera `--remote` crea una nueva sesión en la nube para su repositorio actual. La [aplicación de escritorio](/es/desktop#continue-in-another-surface) proporciona un menú Continuar en que puede enviar una sesión local a la web.

573</Note>

574 

575### De terminal a web

576 

577Inicie una sesión en la nube desde la línea de comandos con la bandera `--remote`:

578 

579```bash theme={null}

580claude --remote "Fix the authentication bug in src/auth/login.ts"

581```

582 

583Esto crea una nueva sesión en la nube en claude.ai. La sesión clona el remoto de GitHub de su directorio actual en su rama actual, por lo que inserte primero si tiene confirmaciones locales, ya que la VM clona desde GitHub en lugar de su máquina. `--remote` funciona con un único repositorio a la vez. La tarea se ejecuta en la nube mientras continúa trabajando localmente.

584 

585<Note>

586 `--remote` crea sesiones en la nube. `--remote-control` no está relacionado: expone una sesión de CLI local para monitoreo desde la web. Consulte [Control Remoto](/es/remote-control).

587</Note>

588 

589Use `/tasks` en la CLI de Claude Code para verificar el progreso, o abra la sesión en claude.ai o la aplicación móvil Claude para interactuar directamente. Desde allí puede dirigir Claude, proporcionar retroalimentación o responder preguntas como en cualquier otra conversación.

590 

591#### Consejos para tareas en la nube

592 

593**Planifique localmente, ejecute remotamente**: para tareas complejas, inicie Claude en modo de plan para colaborar en el enfoque, luego envíe el trabajo a la nube:

594 

595```bash theme={null}

596claude --permission-mode plan

597```

598 

599En modo de plan, Claude lee archivos, ejecuta comandos para explorar y propone un plan sin editar código fuente. Una vez que esté satisfecho, guarde el plan en el repositorio, comprométalo e insértelo para que la VM en la nube pueda clonarlo. Luego inicie una sesión en la nube para ejecución autónoma:

600 

601```bash theme={null}

602claude --remote "Execute the migration plan in docs/migration-plan.md"

603```

604 

605Este patrón le da control sobre la estrategia mientras permite que Claude ejecute de forma autónoma en la nube.

606 

607**Planifique en la nube con ultraplan**: para redactar y revisar el plan en una sesión web, use [ultraplan](/es/ultraplan). Claude genera el plan en Claude Code en la web mientras continúa trabajando, luego comenta sobre secciones en su navegador y elige ejecutar remotamente o enviar el plan de vuelta a su terminal.

608 

609**Ejecute tareas en paralelo**: cada comando `--remote` crea su propia sesión en la nube que se ejecuta de forma independiente. Puede iniciar múltiples tareas y todas se ejecutarán simultáneamente en sesiones separadas:

610 

611```bash theme={null}

612claude --remote "Fix the flaky test in auth.spec.ts"

613claude --remote "Update the API documentation"

614claude --remote "Refactor the logger to use structured output"

615```

616 

617Monitoree todas las sesiones con `/tasks` en la CLI de Claude Code. Cuando una sesión se completa, puede crear una PR desde la interfaz web o [teleportar](#from-web-to-terminal) la sesión a su terminal para continuar trabajando.

618 

619#### Envíe repositorios locales sin GitHub

620 

621Cuando ejecuta `claude --remote` desde un repositorio que no está conectado a GitHub, Claude Code agrupa su repositorio local y lo carga directamente a la sesión en la nube. El paquete incluye su historial de repositorio completo en todas las ramas, más cualquier cambio sin confirmar en archivos rastreados.

622 

623Este respaldo se activa automáticamente cuando el acceso a GitHub no está disponible. Para forzarlo incluso cuando GitHub está conectado, establezca `CCR_FORCE_BUNDLE=1`:

624 

625```bash theme={null}

626CCR_FORCE_BUNDLE=1 claude --remote "Run the test suite and fix any failures"

627```

628 

629Los repositorios agrupados deben cumplir estos límites:

630 

631* El directorio debe ser un repositorio de git con al menos una confirmación

632* El repositorio agrupado debe ser menor de 100 MB. Los repositorios más grandes se replieguen a agrupar solo la rama actual, luego a una instantánea única comprimida del árbol de trabajo, y fallan solo si la instantánea aún es demasiado grande

633* Los archivos sin rastrear no se incluyen; ejecute `git add` en archivos que desea que la sesión en la nube vea

634* Las sesiones creadas desde un paquete no pueden insertar de vuelta a un remoto a menos que también tenga [autenticación de GitHub](#github-authentication-options) configurada

635 

636### De web a terminal

637 

638Extraiga una sesión en la nube en su terminal usando cualquiera de estos:

639 

640* **Usando `--teleport`**: desde la línea de comandos, ejecute `claude --teleport` para un selector de sesión interactivo, o `claude --teleport <session-id>` para reanudar una sesión específica directamente. Si tiene cambios sin confirmar, se le pedirá que los guarde primero.

641* **Usando `/teleport`**: dentro de una sesión de CLI existente, ejecute `/teleport` (o `/tp`) para abrir el mismo selector de sesión sin reiniciar Claude Code.

642* **Desde `/tasks`**: ejecute `/tasks` para ver sus sesiones de fondo, luego presione `t` para teleportarse a una

643* **Desde la interfaz web**: seleccione **Abrir en CLI** para copiar un comando que puede pegar en su terminal

644 

645Cuando teleporta una sesión, Claude verifica que esté en el repositorio correcto, obtiene y verifica la rama de la sesión en la nube, y carga el historial de conversación completo en su terminal.

646 

647`--teleport` es distinto de `--resume`. `--resume` reabre una conversación del historial local de esta máquina y no enumera sesiones en la nube; `--teleport` extrae una sesión en la nube y su rama.

648 

649#### Requisitos de teleportación

650 

651Teleport verifica estos requisitos antes de reanudar una sesión. Si algún requisito no se cumple, verá un error o se le pedirá que resuelva el problema.

652 

653| Requisito | Detalles |

654| -------------------- | ----------------------------------------------------------------------------------------------------------------------- |

655| Estado de git limpio | Su directorio de trabajo no debe tener cambios sin confirmar. Teleport le pide que guarde los cambios si es necesario. |

656| Repositorio correcto | Debe ejecutar `--teleport` desde una desprotección del mismo repositorio, no desde una bifurcación. |

657| Rama disponible | La rama de la sesión en la nube debe haber sido insertada en el remoto. Teleport la obtiene y verifica automáticamente. |

658| Misma cuenta | Debe estar autenticado en la misma cuenta de claude.ai utilizada en la sesión en la nube. |

659 

660#### `--teleport` no está disponible

661 

662Teleport requiere autenticación de suscripción de claude.ai. Si está autenticado a través de clave de API, Bedrock, Vertex AI o Microsoft Foundry, ejecute `/login` para iniciar sesión con su cuenta de claude.ai en su lugar. Si ya está conectado a través de claude.ai y `--teleport` aún no está disponible, su organización puede haber deshabilitado sesiones en la nube.

663 

664## Trabajar con sesiones

665 

666Las sesiones aparecen en la barra lateral en claude.ai/code. Desde allí puede revisar cambios, compartir con compañeros de equipo, archivar trabajo terminado o eliminar sesiones permanentemente.

667 

668### Administrar contexto

669 

670Las sesiones en la nube admiten [comandos integrados](/es/commands) que producen salida de texto. Los comandos que abren un selector de terminal interactivo, como `/model` o `/config`, no están disponibles.

671 

672Para administración de contexto específicamente:

673 

674| Comando | Funciona en sesiones en la nube | Notas |

675| :--------- | :------------------------------ | :---------------------------------------------------------------------------------------------------------------------------- |

676| `/compact` | Sí | Resume la conversación para liberar contexto. Acepta instrucciones de enfoque opcionales como `/compact keep the test output` |

677| `/context` | Sí | Muestra qué está actualmente en la ventana de contexto |

678| `/clear` | No | Inicie una nueva sesión desde la barra lateral en su lugar |

679 

680La compactación automática se ejecuta automáticamente cuando la ventana de contexto se acerca a la capacidad, igual que en la CLI. Para activarla antes, establezca [`CLAUDE_AUTOCOMPACT_PCT_OVERRIDE`](/es/env-vars) en sus [variables de entorno](#configure-your-environment). Por ejemplo, `CLAUDE_AUTOCOMPACT_PCT_OVERRIDE=70` compacta al 70% de capacidad en lugar del predeterminado \~95%. Para cambiar el tamaño de ventana efectivo para cálculos de compactación, use [`CLAUDE_CODE_AUTO_COMPACT_WINDOW`](/es/env-vars).

681 

682Los [subagentes](/es/sub-agents) funcionan de la misma manera que lo hacen localmente. Claude puede generarlos con la herramienta Task para descargar investigación o trabajo paralelo en una ventana de contexto separada, manteniendo la conversación principal más ligera. Los subagentes definidos en su `.claude/agents/` del repositorio se recogen automáticamente. Los [equipos de agentes](/es/agent-teams) están deshabilitados de forma predeterminada pero se pueden habilitar agregando `CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS=1` a sus [variables de entorno](#configure-your-environment).

683 

684### Revisar cambios

685 

686Cada sesión muestra un indicador de diferencias con líneas agregadas y eliminadas, como `+42 -18`. Selecciónelo para abrir la vista de diferencias, deje comentarios en línea en líneas específicas y envíelos a Claude con su siguiente mensaje. Consulte [Revisar e iterar](/es/web-quickstart#review-and-iterate) para el tutorial completo incluyendo creación de PR. Para que Claude monitoree la PR para fallos de CI y comentarios de revisión automáticamente, consulte [Correcciones automáticas de solicitudes de extracción](#auto-fix-pull-requests).

687 

688### Compartir sesiones

689 

690Para compartir una sesión, alterne su visibilidad según los tipos de cuenta a continuación. Después de eso, comparta el enlace de sesión tal como está. Los destinatarios ven el estado más reciente cuando abren el enlace, pero su vista no se actualiza en tiempo real.

691 

692#### Compartir desde una cuenta Enterprise o Team

693 

694Para cuentas Enterprise y Team, las dos opciones de visibilidad son **Privada** y **Team**. La visibilidad de Team hace que la sesión sea visible para otros miembros de su organización de claude.ai. La verificación de acceso al repositorio está habilitada de forma predeterminada, según la cuenta de GitHub conectada a la cuenta del destinatario. El nombre para mostrar de su cuenta es visible para todos los destinatarios con acceso. Las sesiones de [Claude en Slack](/es/slack) se comparten automáticamente con visibilidad de Team.

695 

696#### Compartir desde una cuenta Max o Pro

697 

698Para cuentas Max y Pro, las dos opciones de visibilidad son **Privada** y **Pública**. La visibilidad pública hace que la sesión sea visible para cualquier usuario que haya iniciado sesión en claude.ai.

699 

700Verifique su sesión para contenido sensible antes de compartir. Las sesiones pueden contener código y credenciales de repositorios privados de GitHub. La verificación de acceso al repositorio no está habilitada de forma predeterminada.

701 

702Para requerir que los destinatarios tengan acceso al repositorio, o para ocultar su nombre de sesiones compartidas, vaya a Configuración > Claude Code > Configuración de uso compartido.

703 

704### Archivar sesiones

705 

706Puede archivar sesiones para mantener su lista de sesiones organizada. Las sesiones archivadas se ocultan de la lista de sesiones predeterminada pero se pueden ver filtrando sesiones archivadas.

707 

708Para archivar una sesión, pase el cursor sobre la sesión en la barra lateral y seleccione el icono de archivo.

709 

710### Eliminar sesiones

711 

712Eliminar una sesión elimina permanentemente la sesión y sus datos. Esta acción no se puede deshacer. Puede eliminar una sesión de dos formas:

713 

714* **Desde la barra lateral**: filtre sesiones archivadas, luego pase el cursor sobre la sesión que desea eliminar y seleccione el icono de eliminar

715* **Desde el menú de sesión**: abra una sesión, seleccione el menú desplegable junto al título de la sesión y seleccione **Eliminar**

716 

717Se le pedirá que confirme antes de que se elimine una sesión.

718 

719## Correcciones automáticas de solicitudes de extracción

720 

721Claude puede observar una solicitud de extracción y responder automáticamente a fallos de CI y comentarios de revisión. Claude se suscribe a la actividad de GitHub en la PR, y cuando falla una verificación o un revisor deja un comentario, Claude investiga e inserta una corrección si es clara.

722 

723<Note>

724 Las correcciones automáticas requieren que la aplicación Claude GitHub esté instalada en su repositorio. Si aún no lo ha hecho, instálela desde la [página de la aplicación GitHub](https://github.com/apps/claude) o cuando se le solicite durante la [configuración](/es/web-quickstart#connect-github-and-create-an-environment).

725</Note>

726 

727Hay algunas formas de activar correcciones automáticas dependiendo de dónde provenga la PR y qué dispositivo esté usando:

728 

729* **PRs creadas en Claude Code en la web**: abra la barra de estado de CI y seleccione **Correcciones automáticas**

730* **Desde su terminal**: ejecute [`/autofix-pr`](/es/commands) mientras está en la rama de la PR. Claude Code detecta la PR abierta con `gh`, genera una sesión web y activa correcciones automáticas en un paso

731* **Desde la aplicación móvil**: dígale a Claude que corrija automáticamente la PR, por ejemplo "observa esta PR y corrige cualquier fallo de CI o comentario de revisión"

732* **Cualquier PR existente**: pegue la URL de la PR en una sesión y dígale a Claude que la corrija automáticamente

733 

734### Cómo Claude responde a la actividad de PR

735 

736Cuando las correcciones automáticas están activas, Claude recibe eventos de GitHub para la PR incluyendo nuevos comentarios de revisión y fallos de verificación de CI. Para cada evento, Claude investiga y decide cómo proceder:

737 

738* **Correcciones claras**: si Claude está seguro de una corrección y no entra en conflicto con instrucciones anteriores, Claude realiza el cambio, lo inserta y explica qué se hizo en la sesión

739* **Solicitudes ambiguas**: si el comentario de un revisor podría interpretarse de múltiples formas o implica algo arquitectónicamente significativo, Claude le pregunta antes de actuar

740* **Eventos duplicados o sin acción**: si un evento es un duplicado o no requiere cambio, Claude lo anota en la sesión y continúa

741 

742Claude puede responder a hilos de comentarios de revisión en GitHub como parte de resolverlos. Estas respuestas se publican usando su cuenta de GitHub, por lo que aparecen bajo su nombre de usuario, pero cada respuesta está etiquetada como proveniente de Claude Code para que los revisores sepan que fue escrita por el agente y no por usted directamente.

743 

744<Warning>

745 Si su repositorio utiliza automatización activada por comentarios como Atlantis, Terraform Cloud o GitHub Actions personalizadas que se ejecutan en eventos `issue_comment`, tenga en cuenta que Claude puede responder en su nombre, lo que puede activar esos flujos de trabajo. Revise la automatización de su repositorio antes de habilitar correcciones automáticas y considere deshabilitar correcciones automáticas para repositorios donde un comentario de PR puede implementar infraestructura o ejecutar operaciones privilegiadas.

746</Warning>

747 

748## Seguridad y aislamiento

749 

750Cada sesión en la nube se separa de su máquina y de otras sesiones a través de varias capas:

751 

752* **Máquinas virtuales aisladas**: cada sesión se ejecuta en una VM aislada administrada por Anthropic

753* **Controles de acceso a la red**: el acceso a la red se limita de forma predeterminada y puede deshabilitarse. Cuando se ejecuta con acceso a la red deshabilitado, Claude Code aún puede comunicarse con la API de Anthropic, lo que puede permitir que los datos salgan de la VM.

754* **Protección de credenciales**: las credenciales sensibles como credenciales de git o claves de firma nunca están dentro del sandbox con Claude Code. La autenticación se maneja a través de un proxy seguro usando credenciales de alcance.

755* **Análisis seguro**: el código se analiza y modifica dentro de VMs aisladas antes de crear PRs

756 

757## Limitaciones

758 

759Antes de confiar en sesiones en la nube para un flujo de trabajo, tenga en cuenta estas restricciones:

760 

761* **Límites de velocidad**: Claude Code en la web comparte límites de velocidad con todo otro uso de Claude y Claude Code dentro de su cuenta. Ejecutar múltiples tareas en paralelo consume más límites de velocidad proporcionalmente. No hay cargo de computación separado para la VM en la nube.

762* **Autenticación de repositorio**: solo puede mover sesiones de web a local cuando está autenticado en la misma cuenta

763* **Restricciones de plataforma**: la clonación de repositorio y la creación de solicitudes de extracción requieren GitHub. Las instancias de [GitHub Enterprise Server](/es/github-enterprise-server) autohospedadas son compatibles con planes de Team y Enterprise. GitLab, Bitbucket y otros repositorios que no sean GitHub se pueden enviar a sesiones en la nube como un [paquete local](#send-local-repositories-without-github), pero la sesión no puede insertar resultados de vuelta al remoto

764 

765## Recursos relacionados

766 

767* [Ultraplan](/es/ultraplan): redacte un plan en una sesión en la nube y revíselo en su navegador

768* [Ultrareview](/es/ultrareview): ejecute una revisión de código profunda de múltiples agentes en un sandbox en la nube

769* [Routines](/es/routines): automatice el trabajo en un cronograma, a través de llamada de API o en respuesta a eventos de GitHub

770* [Configuración de hooks](/es/hooks): ejecute scripts en eventos del ciclo de vida de la sesión

771* [Referencia de configuración](/es/settings): todas las opciones de configuración

772* [Seguridad](/es/security): garantías de aislamiento y manejo de datos

773* [Uso de datos](/es/data-usage): qué retiene Anthropic de sesiones en la nube

claude-directory.md +1583 −0 created

Details

1> ## Documentation Index

2> Fetch the complete documentation index at: https://code.claude.com/docs/llms.txt

3> Use this file to discover all available pages before exploring further.

4 

5# Explorar el directorio .claude

6 

7> Dónde Claude Code lee CLAUDE.md, settings.json, hooks, skills, commands, subagents, rules y auto memory. Explore el directorio .claude en su proyecto y ~/.claude en su directorio de inicio.

8 

9export const ClaudeExplorer = () => {

10 const A = useMemo(() => ({href, children}) => <a href={href} style={{

11 color: 'var(--ce-accent)',

12 textDecoration: 'none',

13 borderBottom: '1px dotted var(--ce-accent)'

14 }}>{children}</a>, []);

15 const C = useMemo(() => ({children}) => <code style={{

16 fontFamily: 'var(--ce-mono)',

17 fontSize: '0.92em',

18 padding: '1px 4px',

19 borderRadius: '3px',

20 background: 'var(--ce-surface)',

21 border: '0.5px solid var(--ce-border-subtle)'

22 }}>{children}</code>, []);

23 const commandsNote = useMemo(() => <>Commands and skills are now the same mechanism. For new workflows, use <A href="/en/skills">skills/</A> instead: same <C>/name</C> invocation, plus you can bundle supporting files.</>, []);

24 const FILE_TREE = useMemo(() => ({

25 project: {

26 label: 'your-project/',

27 children: [{

28 id: 'claude-md',

29 label: 'CLAUDE.md',

30 type: 'file',

31 icon: 'md',

32 color: '#6A9BCC',

33 badge: 'committed',

34 oneLiner: 'Project instructions Claude reads every session',

35 when: 'Loaded into context at the start of every session',

36 description: 'Project-specific instructions that shape how Claude works in this repository. Put your conventions, common commands, and architectural context here so Claude operates with the same assumptions your team does.',

37 tips: ['Target under 200 lines. Longer files still load in full but may reduce adherence', <>CLAUDE.md loads into every session. If something only matters for specific tasks, move it to a <A href="/en/skills">skill</A> or a path-scoped <A href="/en/memory#organize-rules-with-claude/rules/">rule</A> so it loads only when needed</>, 'List the commands you run most, like build, test, and format, so Claude knows them without you spelling them out each time', <>Run <C>/memory</C> to open and edit CLAUDE.md from within a session</>, <>Also works at <C>.claude/CLAUDE.md</C> if you prefer to keep the project root clean</>],

38 exampleIntro: 'This example is for a TypeScript and React project. It lists the build and test commands, the framework conventions Claude should follow, and project-specific rules like export style and file layout.',

39 example: `# Project conventions

40 

41## Commands

42- Build: \`npm run build\`

43- Test: \`npm test\`

44- Lint: \`npm run lint\`

45 

46## Stack

47- TypeScript with strict mode

48- React 19, functional components only

49 

50## Rules

51- Named exports, never default exports

52- Tests live next to source: \`foo.ts\` -> \`foo.test.ts\`

53- All API routes return \`{ data, error }\` shape`,

54 docsLink: '/en/memory'

55 }, {

56 id: 'mcp-json',

57 label: '.mcp.json',

58 type: 'file',

59 icon: 'json',

60 color: '#9B7BC4',

61 badge: 'committed',

62 oneLiner: 'Project-scoped MCP servers, shared with your team',

63 when: <>Servers connect when the session begins. Tool schemas are deferred by default and load on demand via <A href="/en/mcp#scale-with-mcp-tool-search">tool search</A></>,

64 description: <>Configures Model Context Protocol (MCP) servers that give Claude access to external tools: databases, APIs, browsers, and more. This file holds the project-scoped servers your whole team uses. Personal servers you want to keep to yourself go in <C>~/.claude.json</C> instead.</>,

65 tips: [<>Use environment variable references for secrets: <C>{'${GITHUB_TOKEN}'}</C></>, <>Lives at the project root, not inside <C>.claude/</C></>, <>For servers only you need, run <C>claude mcp add --scope user</C>. This writes to <C>~/.claude.json</C> instead of <C>.mcp.json</C></>],

66 exampleIntro: <>This example configures the GitHub MCP server so Claude can read issues and open pull requests. The <C>{'${GITHUB_TOKEN}'}</C> reference is read from your shell environment when Claude Code starts the server, so the token never lands in the file.</>,

67 example: `{

68 "mcpServers": {

69 "github": {

70 "command": "npx",

71 "args": ["-y", "@modelcontextprotocol/server-github"],

72 "env": {

73 "GITHUB_TOKEN": "\${GITHUB_TOKEN}"

74 }

75 }

76 }

77}`,

78 docsLink: '/en/mcp'

79 }, {

80 id: 'worktreeinclude',

81 label: '.worktreeinclude',

82 type: 'file',

83 icon: 'md',

84 color: '#8FA876',

85 badge: 'committed',

86 oneLiner: 'Gitignored files to copy into new worktrees',

87 when: <>Read when Claude creates a git worktree via <C>--worktree</C>, the <C>EnterWorktree</C> tool, or subagent <C>isolation: worktree</C></>,

88 description: <>Lists gitignored files to copy from your main repository into each new worktree. Worktrees are fresh checkouts, so untracked files like <C>.env</C> are missing by default. Patterns here use <C>.gitignore</C> syntax. Only files that match a pattern and are also gitignored get copied, so tracked files are never duplicated.</>,

89 tips: [<>Lives at the project root, not inside <C>.claude/</C></>, <>Git-only: if you configure a <A href="/en/hooks#worktreecreate">WorktreeCreate hook</A> for a different VCS, this file is not read. Copy files inside your hook script instead</>, <>Also applies to parallel sessions in the <A href="/en/desktop#work-in-parallel-with-sessions">desktop app</A></>],

90 exampleIntro: 'This example copies your local environment files and a secrets config into every worktree Claude creates. Comments start with # and blank lines are ignored, same as .gitignore.',

91 example: `# Local environment

92.env

93.env.local

94 

95# API credentials

96config/secrets.json`,

97 docsLink: '/en/worktrees#copy-gitignored-files-into-worktrees'

98 }, {

99 id: 'dot-claude',

100 label: '.claude/',

101 type: 'folder',

102 icon: 'folder',

103 color: 'var(--ce-accent)',

104 oneLiner: 'Project-level configuration, rules, and extensions',

105 description: 'Everything Claude Code reads that is specific to this project. If you use git, commit most files here so your team shares them; a few, like settings.local.json, are automatically gitignored. Each file badge shows which.',

106 children: [{

107 id: 'settings-json',

108 label: 'settings.json',

109 type: 'file',

110 icon: 'json',

111 color: 'var(--ce-text-3)',

112 badge: 'committed',

113 oneLiner: 'Permissions, hooks, and configuration',

114 when: <>Overrides global <C>~/.claude/settings.json</C>. Local settings, CLI flags, and managed settings override this</>,

115 description: 'Settings that Claude Code applies directly. Permissions control which commands and tools Claude can use; hooks run your scripts at specific points in a session. Unlike CLAUDE.md, which Claude reads as guidance, these are enforced whether Claude follows them or not.',

116 contains: [<><A href="/en/permissions">permissions</A>: allow, deny, or prompt before Claude uses specific tools or commands</>, <><A href="/en/hooks">hooks</A>: run your own scripts on events like before a tool call or after a file edit</>, <><A href="/en/statusline">statusLine</A>: customize the line shown at the bottom while Claude works</>, <><A href="/en/settings#available-settings">model</A>: pick a default model for this project</>, <><A href="/en/settings#environment-variables">env</A>: environment variables set in every session</>, <><A href="/en/output-styles">outputStyle</A>: select a custom system-prompt style from output-styles/</>],

117 tips: [<>Bash permission patterns support wildcards: <C>Bash(npm test *)</C> matches any command starting with <C>npm test</C></>, <>Array settings like <C>permissions.allow</C> combine across all scopes; scalar settings like <C>model</C> use the most specific value</>],

118 exampleIntro: <>This example allows <C>npm test</C> and <C>npm run</C> commands without prompting, blocks <C>rm -rf</C>, and runs Prettier on files after Claude edits or writes them.</>,

119 example: `{

120 "permissions": {

121 "allow": [

122 "Bash(npm test *)",

123 "Bash(npm run *)"

124 ],

125 "deny": [

126 "Bash(rm -rf *)"

127 ]

128 },

129 "hooks": {

130 "PostToolUse": [{

131 "matcher": "Edit|Write",

132 "hooks": [{

133 "type": "command",

134 "command": "jq -r '.tool_input.file_path' | xargs npx prettier --write"

135 }]

136 }]

137 }

138}`,

139 docsLink: '/en/settings'

140 }, {

141 id: 'settings-local-json',

142 label: 'settings.local.json',

143 type: 'file',

144 icon: 'json',

145 color: 'var(--ce-text-3)',

146 badge: 'gitignored',

147 oneLiner: 'Your personal settings overrides for this project',

148 when: 'Highest of the user-editable settings files; CLI flags and managed settings still take precedence',

149 description: 'Personal settings that take precedence over the project defaults. Same JSON format as settings.json, but not committed. Use this when you need different permissions or defaults than the team config.',

150 tips: [<>Same schema as settings.json. Array settings like <C>permissions.allow</C> combine across scopes; scalar settings like <C>model</C> use the local value</>, <>Claude Code adds this file to <C>~/.config/git/ignore</C> the first time it writes one. If you use a custom <C>core.excludesFile</C>, add the pattern there too. To share the ignore rule with your team, also add it to the project <C>.gitignore</C></>],

151 exampleIntro: 'This example adds Docker permissions on top of whatever the team settings.json allows.',

152 example: `{

153 "permissions": {

154 "allow": [

155 "Bash(docker *)"

156 ]

157 }

158}`,

159 docsLink: '/en/settings'

160 }, {

161 id: 'rules',

162 label: 'rules/',

163 type: 'folder',

164 icon: 'folder',

165 color: '#9B7BC4',

166 oneLiner: 'Topic-scoped instructions, optionally gated by file paths',

167 when: <>Rules without <C>paths:</C> load at session start. Rules with <C>paths:</C> load when a matching file enters context</>,

168 description: [<>Project instructions split into topic files that can load conditionally based on file paths. A rule without <C>paths:</C> frontmatter loads at session start like CLAUDE.md; a rule with <C>paths:</C> loads only when Claude reads a matching file.</>, <>Like CLAUDE.md, rules are guidance Claude reads, not configuration Claude Code enforces. For guaranteed behavior use <A href="/en/hooks">hooks</A> or <A href="/en/permissions">permissions</A>.</>],

169 tips: [<>Use <C>paths:</C> frontmatter with globs to scope rules to directories or file types</>, <>Subdirectories work: <C>.claude/rules/frontend/react.md</C> is discovered automatically</>, 'When CLAUDE.md approaches 200 lines, start splitting into rules'],

170 docsLink: '/en/memory#organize-rules-with-claude/rules/',

171 children: [{

172 id: 'rule-testing',

173 label: 'testing.md',

174 type: 'file',

175 icon: 'md',

176 color: '#9B7BC4',

177 badge: 'committed',

178 oneLiner: 'Test conventions scoped to test files',

179 when: <>Loaded when Claude reads a file matching the <C>paths:</C> globs below</>,

180 description: <>An example rule that only loads when Claude is working on test files. The <C>paths:</C> globs in the frontmatter define which files trigger it; here, anything ending in .test.ts or .test.tsx. For other files, this rule is not loaded into context.</>,

181 example: `---

182paths:

183 - "**/*.test.ts"

184 - "**/*.test.tsx"

185---

186 

187# Testing Rules

188 

189- Use descriptive test names: "should [expected] when [condition]"

190- Mock external dependencies, not internal modules

191- Clean up side effects in afterEach`

192 }, {

193 id: 'rule-api',

194 label: 'api-design.md',

195 type: 'file',

196 icon: 'md',

197 color: '#9B7BC4',

198 badge: 'committed',

199 oneLiner: 'API conventions scoped to backend code',

200 when: <>Loaded when Claude reads a file matching the <C>paths:</C> glob below</>,

201 description: <>A second example showing a rule scoped to backend code. The <C>paths:</C> glob matches files under src/api/, so these conventions load only when Claude is editing API routes.</>,

202 example: `---

203paths:

204 - "src/api/**/*.ts"

205---

206 

207# API Design Rules

208 

209- All endpoints must validate input with Zod schemas

210- Return shape: { data: T } | { error: string }

211- Rate limit all public endpoints`

212 }]

213 }, {

214 id: 'skills',

215 label: 'skills/',

216 type: 'folder',

217 icon: 'folder',

218 color: '#D4A843',

219 oneLiner: 'Reusable prompts you or Claude invoke by name',

220 when: <>Invoked with <C>/skill-name</C> or when Claude matches the task to a skill</>,

221 description: <>Each skill is a folder with a SKILL.md file plus any supporting files it needs. By default, both you and Claude can invoke a skill. Use frontmatter to control that: <C>disable-model-invocation: true</C> for user-only workflows like <C>/deploy</C>, or <C>user-invocable: false</C> to hide from the <C>/</C> menu while Claude can still invoke it.</>,

222 tips: [<>Skills accept arguments: <C>/deploy staging</C> passes "staging" as <C>$ARGUMENTS</C>. Use <C>$0</C>, <C>$1</C>, and so on for positional access</>, <>The <C>description</C> frontmatter determines when Claude auto-invokes the skill</>, 'Bundle reference docs alongside SKILL.md. Claude knows the skill directory path and can read supporting files when you mention them'],

223 docsLink: '/en/skills',

224 children: [{

225 id: 'skill-review',

226 label: 'security-review/',

227 type: 'folder',

228 icon: 'folder',

229 color: '#D4A843',

230 oneLiner: 'A skill bundling SKILL.md with supporting files',

231 children: [{

232 id: 'skill-review-md',

233 label: 'SKILL.md',

234 type: 'file',

235 icon: 'md',

236 color: '#D4A843',

237 badge: 'committed',

238 oneLiner: 'Entrypoint: trigger, invocability, instructions',

239 when: <>User types <C>/security-review &lt;target&gt;</C>; Claude cannot auto-invoke this skill</>,

240 description: [<>This skill uses <C>disable-model-invocation: true</C> so only you can trigger it; Claude never invokes it on its own.</>, <>The <C>!`...`</C> line runs a shell command and injects its output into the prompt. <C>$ARGUMENTS</C> substitutes whatever you typed after the skill name. Claude sees the skill directory path, so mentioning a bundled file like checklist.md lets Claude read it.</>],

241 example: `---

242description: Reviews code changes for security vulnerabilities, authentication gaps, and injection risks

243disable-model-invocation: true

244argument-hint: <branch-or-path>

245---

246 

247## Diff to review

248 

249!\`git diff $ARGUMENTS\`

250 

251Audit the changes above for:

252 

2531. Injection vulnerabilities (SQL, XSS, command)

2542. Authentication and authorization gaps

2553. Hardcoded secrets or credentials

256 

257Use checklist.md in this skill directory for the full review checklist.

258 

259Report findings with severity ratings and remediation steps.`

260 }, {

261 id: 'skill-checklist',

262 label: 'checklist.md',

263 type: 'file',

264 icon: 'md',

265 color: '#D4A843',

266 badge: 'committed',

267 oneLiner: 'Supporting file bundled with the skill',

268 when: 'Claude reads it on demand while running the skill',

269 description: <>Skills can bundle any supporting files: reference docs, templates, scripts. The skill directory path is prepended to SKILL.md, so Claude can read bundled files by name. For scripts in bash injection commands, use the <C>{'${CLAUDE_SKILL_DIR}'}</C> placeholder.</>,

270 example: `# Security Review Checklist

271 

272## Input Validation

273- [ ] All user input sanitized before DB queries

274- [ ] File upload MIME types validated

275- [ ] Path traversal prevented on file operations

276 

277## Authentication

278- [ ] JWT tokens expire after 24 hours

279- [ ] API keys stored in environment variables

280- [ ] Passwords hashed with bcrypt or argon2`

281 }]

282 }]

283 }, {

284 id: 'commands',

285 label: 'commands/',

286 type: 'folder',

287 icon: 'folder',

288 color: '#788C5D',

289 oneLiner: <>Single-file prompts invoked with <C>/name</C></>,

290 note: commandsNote,

291 when: <>User types <C>/command-name</C></>,

292 description: <>A file at <C>commands/deploy.md</C> creates <C>/deploy</C> the same way a skill at <C>skills/deploy/SKILL.md</C> does, and both can be auto-invoked by Claude. Skills use a directory with SKILL.md, letting you bundle reference docs, templates, or scripts alongside the prompt.</>,

293 tips: [<>Use <C>$ARGUMENTS</C> in the file to accept parameters: <C>/fix-issue 123</C></>, 'If a skill and command share a name, the skill takes precedence', 'New commands should usually be skills instead; commands remain supported'],

294 docsLink: '/en/skills',

295 children: [{

296 id: 'cmd-example',

297 label: 'fix-issue.md',

298 type: 'file',

299 icon: 'md',

300 color: '#788C5D',

301 badge: 'committed',

302 oneLiner: <>Invoked as <C>/fix-issue &lt;number&gt;</C></>,

303 note: commandsNote,

304 description: [<>An example command for fixing a GitHub issue. Type <C>/fix-issue 123</C> and the <C>!`...`</C> line runs <C>gh issue view 123</C> in your shell, injecting the output into the prompt before Claude sees it.</>, <><C>$ARGUMENTS</C> substitutes whatever you typed after the command name. For positional access, use <C>$0</C> <C>$1</C> and so on.</>],

305 example: `---

306argument-hint: <issue-number>

307---

308 

309!\`gh issue view $ARGUMENTS\`

310 

311Investigate and fix the issue above.

312 

3131. Trace the bug to its root cause

3142. Implement the fix

3153. Write or update tests

3164. Summarize what you changed and why`

317 }]

318 }, {

319 id: 'output-styles',

320 label: 'output-styles/',

321 type: 'folder',

322 icon: 'folder',

323 color: '#5AA7A7',

324 oneLiner: 'Project-scoped output styles, if your team shares any',

325 when: 'Applied at session start when selected via the outputStyle setting',

326 description: <>Output styles are usually personal, so most live in <C>~/.claude/output-styles/</C>. Put one here if your team shares a style, like a review mode everyone uses. See <A href="#ce-global-output-styles">the Global tab</A> for the full explanation and example.</>,

327 docsLink: '/en/output-styles',

328 children: []

329 }, {

330 id: 'agents',

331 label: 'agents/',

332 type: 'folder',

333 icon: 'folder',

334 color: '#C46686',

335 oneLiner: 'Specialized subagents with their own context window',

336 when: 'Runs in its own context window when you or Claude invoke it',

337 description: 'Each markdown file defines a subagent with its own system prompt, tool access, and optionally its own model. Subagents run in a fresh context window, keeping the main conversation clean. Useful for parallel work or isolated tasks.',

338 tips: ['Each agent gets a fresh context window, separate from your main session', <>Restrict tool access per agent with the <C>tools:</C> frontmatter field</>, 'Type @ and pick an agent from the autocomplete to delegate directly'],

339 docsLink: '/en/sub-agents',

340 children: [{

341 id: 'agent-reviewer',

342 label: 'code-reviewer.md',

343 type: 'file',

344 icon: 'md',

345 color: '#C46686',

346 badge: 'committed',

347 oneLiner: 'Subagent for isolated code review',

348 when: 'Claude spawns it for review tasks, or you @-mention it from the autocomplete',

349 description: <>An example subagent restricted to read-only tools. The <C>description</C> frontmatter tells Claude when to delegate to it automatically; <C>tools:</C> limits it to Read, Grep, and Glob so it can inspect code but never edit. The body becomes the subagent's system prompt.</>,

350 example: `---

351name: code-reviewer

352description: Reviews code for correctness, security, and maintainability

353tools: Read, Grep, Glob

354---

355 

356You are a senior code reviewer. Review for:

357 

3581. Correctness: logic errors, edge cases, null handling

3592. Security: injection, auth bypass, data exposure

3603. Maintainability: naming, complexity, duplication

361 

362Every finding must include a concrete fix.`

363 }]

364 }, {

365 id: 'agent-memory',

366 label: 'agent-memory/',

367 type: 'folder',

368 icon: 'folder',

369 color: '#C46686',

370 badge: 'committed',

371 autogen: true,

372 oneLiner: 'Subagent persistent memory, separate from your main session auto memory',

373 when: 'First 200 lines (capped at 25KB) of MEMORY.md loaded into the subagent system prompt when it runs',

374 description: <>Subagents with <C>memory: project</C> in their frontmatter get a dedicated memory directory here. This is distinct from your <A href="/en/memory#auto-memory">main session auto memory</A> at <C>~/.claude/projects/</C>: each subagent reads and writes its own MEMORY.md, not yours.</>,

375 tips: [<>Only created for subagents that set the <C>memory:</C> frontmatter field</>, <>This directory holds project-scoped subagent memory, meant to be shared with your team. To keep memory out of version control use <C>memory: local</C>, which writes to <C>.claude/agent-memory-local/</C> instead. For cross-project memory use <C>memory: user</C>, which writes to <C>~/.claude/agent-memory/</C></>, <>The main session auto memory is a different feature; see <C>~/.claude/projects/</C> in the Global tab</>],

376 docsLink: '/en/sub-agents#enable-persistent-memory',

377 children: [{

378 id: 'agent-memory-sub',

379 label: '<agent-name>/',

380 type: 'folder',

381 icon: 'folder',

382 color: '#C46686',

383 autogen: true,

384 children: [{

385 id: 'agent-memory-md',

386 label: 'MEMORY.md',

387 type: 'file',

388 icon: 'md',

389 color: '#C46686',

390 badge: 'committed',

391 autogen: true,

392 oneLiner: 'The subagent writes and maintains this file automatically',

393 when: 'Loaded into the subagent system prompt when the subagent starts',

394 description: <>Works the same as your <A href="/en/memory#auto-memory">main auto memory</A>: the subagent creates and updates this file itself. You do not write it. The subagent reads it at the start of each task and writes back what it learns.</>,

395 example: `# code-reviewer memory

396 

397## Patterns seen

398- Project uses custom Result<T, E> type, not exceptions

399- Auth middleware expects Bearer token in Authorization header

400- Tests use factory functions in test/factories/

401 

402## Recurring issues

403- Missing null checks on API responses (src/api/*)

404- Unhandled promise rejections in background jobs`

405 }]

406 }]

407 }]

408 }]

409 },

410 global: {

411 label: '~/',

412 children: [{

413 id: 'claude-json',

414 label: '.claude.json',

415 type: 'file',

416 icon: 'json',

417 color: 'var(--ce-text-3)',

418 badge: 'local',

419 oneLiner: 'App state and UI preferences',

420 when: <>Read at session start for your preferences and MCP servers. Claude Code writes back to it when you change settings in <C>/config</C> or approve trust prompts</>,

421 description: <>Holds state that does not belong in settings.json: theme, OAuth session, per-project trust decisions, your personal MCP servers, and UI toggles. Mostly managed through <C>/config</C> rather than editing directly.</>,

422 tips: [<>IDE toggles like <C>autoConnectIde</C> and <C>externalEditorContext</C> live here, not in settings.json</>, <>The <C>projects</C> key tracks per-project state like trust-dialog acceptance and last-session metrics. Permission rules you approve in-session go to <C>.claude/settings.local.json</C> instead</>, <>MCP servers here are yours only: user scope applies across all projects, local scope is per-project but not committed. Team-shared servers go in <C>.mcp.json</C> at the project root instead</>],

423 example: `{

424 "autoConnectIde": true,

425 "externalEditorContext": true,

426 "mcpServers": {

427 "my-tools": {

428 "command": "npx",

429 "args": ["-y", "@example/mcp-server"]

430 }

431 }

432}`,

433 docsLink: '/en/settings#global-config-settings'

434 }, {

435 id: 'global-dot-claude',

436 label: '.claude/',

437 type: 'folder',

438 icon: 'folder',

439 color: 'var(--ce-accent)',

440 oneLiner: 'Your personal configuration across all projects',

441 description: 'The global counterpart to your project .claude/ directory. Files here apply to every project you work in and are never committed to any repository.',

442 children: [{

443 id: 'global-claude-md',

444 label: 'CLAUDE.md',

445 type: 'file',

446 icon: 'md',

447 color: '#6A9BCC',

448 badge: 'local',

449 oneLiner: 'Personal preferences across every project',

450 when: 'Loaded at the start of every session, in every project',

451 description: 'Your global instruction file. Loaded alongside the project CLAUDE.md at session start, so both are in context together. When instructions conflict, project-level instructions take priority. Keep this to preferences that apply everywhere: response style, commit format, personal conventions.',

452 tips: ['Keep it short since it loads into context for every project, alongside that project\'s own CLAUDE.md', 'Good for response style, commit format, and personal conventions'],

453 example: `# Global preferences

454 

455- Keep explanations concise

456- Use conventional commit format

457- Show the terminal command to verify changes

458- Prefer composition over inheritance`,

459 docsLink: '/en/memory'

460 }, {

461 id: 'global-settings',

462 label: 'settings.json',

463 type: 'file',

464 icon: 'json',

465 color: 'var(--ce-text-3)',

466 badge: 'local',

467 oneLiner: 'Default settings for all projects',

468 when: 'Your defaults. Project and local settings.json override any keys you also set there',

469 description: [<>Same keys as project <C>settings.json</C>: permissions, hooks, model, environment variables, and the rest. Put settings here that you want in every project, like permissions you always allow, a preferred model, or a notification hook that runs regardless of which project you're in.</>, <>Settings follow a precedence order: project <C>settings.json</C> overrides any matching keys you set here. This is different from CLAUDE.md, where global and project files are both loaded into context rather than merged key by key.</>],

470 example: `{

471 "permissions": {

472 "allow": [

473 "Bash(git log *)",

474 "Bash(git diff *)"

475 ]

476 }

477}`,

478 docsLink: '/en/settings'

479 }, {

480 id: 'keybindings',

481 label: 'keybindings.json',

482 type: 'file',

483 icon: 'json',

484 color: 'var(--ce-text-3)',

485 badge: 'local',

486 oneLiner: 'Custom keyboard shortcuts',

487 when: 'Read at session start and hot-reloaded when you edit the file',

488 description: <>Rebind keyboard shortcuts in the interactive CLI. Run <C>/keybindings</C> to create or open this file with a schema reference. Ctrl+C, Ctrl+D, Ctrl+M, and Caps Lock are reserved and cannot be rebound.</>,

489 exampleIntro: <>This example binds <C>Ctrl+E</C> to open your external editor and unbinds <C>Ctrl+U</C> by setting it to <C>null</C>. The <C>context</C> field scopes bindings to a specific part of the CLI, here the main chat input.</>,

490 example: `{

491 "$schema": "https://www.schemastore.org/claude-code-keybindings.json",

492 "$docs": "https://code.claude.com/docs/en/keybindings",

493 "bindings": [

494 {

495 "context": "Chat",

496 "bindings": {

497 "ctrl+e": "chat:externalEditor",

498 "ctrl+u": null

499 }

500 }

501 ]

502}`,

503 docsLink: '/en/keybindings'

504 }, {

505 id: 'themes',

506 label: 'themes/',

507 type: 'folder',

508 icon: 'folder',

509 color: '#5AA7A7',

510 oneLiner: 'Custom color themes',

511 when: <>Read at session start and hot-reloaded when files change. Listed in <C>/theme</C></>,

512 description: <>Each <C>.json</C> file defines a custom color theme: a built-in <C>base</C> preset plus an <C>overrides</C> map of color tokens. Create one interactively with <C>/theme</C> or write the JSON by hand. Selecting a custom theme stores <C>custom:&lt;slug&gt;</C> as your theme preference.</>,

513 example: `{

514 "name": "Dracula",

515 "base": "dark",

516 "overrides": {

517 "claude": "#bd93f9",

518 "error": "#ff5555",

519 "success": "#50fa7b"

520 }

521}`,

522 docsLink: '/en/terminal-config#create-a-custom-theme',

523 children: []

524 }, {

525 id: 'global-projects',

526 label: 'projects/',

527 type: 'folder',

528 icon: 'folder',

529 color: '#E8A45C',

530 autogen: true,

531 oneLiner: "Auto memory: Claude's notes to itself, per project",

532 when: 'MEMORY.md loaded at session start; topic files read on demand',

533 description: 'Auto memory lets Claude accumulate knowledge across sessions without you writing anything. Claude saves notes as it works: build commands, debugging insights, architecture notes. Each project gets its own memory directory keyed by the repository path.',

534 tips: [<>On by default. Toggle with <C>/memory</C> or <C>autoMemoryEnabled</C> in settings</>, 'MEMORY.md is the index loaded each session. The first 200 lines, or 25KB, whichever comes first, are read', 'Topic files like debugging.md are read on demand, not at startup', 'These are plain markdown. Edit or delete them anytime'],

535 docsLink: '/en/memory#auto-memory',

536 children: [{

537 id: 'memory-dir',

538 label: '<project>/memory/',

539 type: 'folder',

540 icon: 'folder',

541 color: '#E8A45C',

542 autogen: true,

543 oneLiner: "Claude's accumulated knowledge for one project",

544 children: [{

545 id: 'memory-md',

546 label: 'MEMORY.md',

547 type: 'file',

548 icon: 'md',

549 color: '#E8A45C',

550 badge: 'local',

551 autogen: true,

552 oneLiner: 'Claude writes and maintains this file automatically',

553 when: 'First 200 lines (capped at 25KB) loaded at session start',

554 description: 'Claude creates and updates this file as it works; you do not write it yourself. It acts as an index that Claude reads at the start of every session, pointing to topic files for detail. You can edit or delete it, but Claude will keep updating it.',

555 example: `# Memory Index

556 

557## Project

558- [build-and-test.md](build-and-test.md): npm run build (~45s), Vitest, dev server on 3001

559- [architecture.md](architecture.md): API client singleton, refresh-token auth

560 

561## Reference

562- [debugging.md](debugging.md): auth token rotation and DB connection troubleshooting`,

563 docsLink: '/en/memory'

564 }, {

565 id: 'memory-topic',

566 label: 'debugging.md',

567 type: 'file',

568 icon: 'md',

569 color: '#E8A45C',

570 badge: 'local',

571 autogen: true,

572 oneLiner: 'Topic notes Claude writes when MEMORY.md gets long',

573 when: 'Claude reads this when a related task comes up',

574 description: 'An example of a topic file Claude creates when MEMORY.md grows too long. Claude picks the filename based on what it splits out: debugging.md, architecture.md, build-commands.md, or similar. You never create these yourself. Claude reads a topic file back only when the current task relates to it.',

575 example: `---

576name: Debugging patterns

577description: Auth token rotation and database connection troubleshooting for this project

578type: reference

579---

580 

581## Auth Token Issues

582- Refresh token rotation: old token invalidated immediately

583- If 401 after refresh: check clock skew between client and server

584 

585## Database Connection Drops

586- Connection pool: max 10 in dev, 50 in prod

587- Always check \`docker compose ps\` first`

588 }]

589 }]

590 }, {

591 id: 'global-rules',

592 label: 'rules/',

593 type: 'folder',

594 icon: 'folder',

595 color: '#9B7BC4',

596 oneLiner: 'User-level rules that apply to every project',

597 when: <>Rules without <C>paths:</C> load at session start. Rules with <C>paths:</C> load when a matching file enters context</>,

598 description: 'Same as project .claude/rules/ but applies everywhere. Use this for conventions you want across all your work, like personal code style or commit message format.',

599 docsLink: '/en/memory#organize-rules-with-claude/rules/',

600 children: []

601 }, {

602 id: 'global-skills',

603 label: 'skills/',

604 type: 'folder',

605 icon: 'folder',

606 color: '#D4A843',

607 oneLiner: 'Personal skills available in every project',

608 when: <>Invoked with <C>/skill-name</C> in any project</>,

609 description: 'Skills you built for yourself that work everywhere. Same structure as project skills: each is a folder with SKILL.md, scoped to your user account instead of a single project.',

610 docsLink: '/en/skills',

611 children: []

612 }, {

613 id: 'global-commands',

614 label: 'commands/',

615 type: 'folder',

616 icon: 'folder',

617 color: '#788C5D',

618 oneLiner: 'Personal single-file commands available in every project',

619 note: commandsNote,

620 when: <>User types <C>/command-name</C> in any project</>,

621 description: 'Same as project commands/ but scoped to your user account. Each markdown file becomes a command available everywhere.',

622 docsLink: '/en/skills',

623 children: []

624 }, {

625 id: 'global-output-styles',

626 label: 'output-styles/',

627 type: 'folder',

628 icon: 'folder',

629 color: '#5AA7A7',

630 oneLiner: 'Custom system-prompt sections that adjust how Claude works',

631 when: 'Applied at session start when selected via the outputStyle setting',

632 description: [<>Each markdown file defines an output style: a section appended to the system prompt that, by default, also drops the built-in software-engineering task instructions. Use this to adapt Claude Code for uses beyond coding, or to add teaching or review modes.</>, <>Select a built-in or custom style with <C>/config</C> or the <C>outputStyle</C> key in settings. Styles here are available in every project; project-level styles with the same name take precedence.</>],

633 tips: ['Built-in styles Explanatory and Learning are included with Claude Code; custom styles go here', <>Set <C>keep-coding-instructions: true</C> in frontmatter to keep the default task instructions alongside your additions</>, 'Changes take effect on the next session since the system prompt is fixed at startup for caching'],

634 docsLink: '/en/output-styles',

635 children: [{

636 id: 'output-style-example',

637 label: 'teaching.md',

638 type: 'file',

639 icon: 'md',

640 color: '#5AA7A7',

641 badge: 'local',

642 oneLiner: 'Example style that adds explanations and leaves small changes for you',

643 when: <>Active when <C>outputStyle</C> in settings is set to <C>teaching</C></>,

644 description: <>This style appends instructions to the system prompt: Claude adds a "Why this approach" note after each task and leaves TODO(human) markers for changes under 10 lines instead of writing them itself. Select it by setting <C>outputStyle</C> to the filename without .md, or to the <C>name</C> field if you set one in frontmatter.</>,

645 example: `---

646description: Explains reasoning and asks you to implement small pieces

647keep-coding-instructions: true

648---

649 

650After completing each task, add a brief "Why this approach" note

651explaining the key design decision.

652 

653When a change is under 10 lines, ask the user to implement it

654themselves by leaving a TODO(human) marker instead of writing it.`

655 }]

656 }, {

657 id: 'global-agents',

658 label: 'agents/',

659 type: 'folder',

660 icon: 'folder',

661 color: '#C46686',

662 oneLiner: 'Personal subagents available in every project',

663 when: 'Claude delegates or you @-mention in any project',

664 description: 'Subagents defined here are available across all your projects. Same format as project agents.',

665 docsLink: '/en/sub-agents',

666 children: []

667 }, {

668 id: 'global-agent-memory',

669 label: 'agent-memory/',

670 type: 'folder',

671 icon: 'folder',

672 color: '#C46686',

673 autogen: true,

674 oneLiner: <>Persistent memory for subagents with <C>memory: user</C></>,

675 when: 'Loaded into the subagent system prompt when the subagent starts',

676 description: <>Subagents with <C>memory: user</C> in their frontmatter store knowledge here that persists across all projects. For project-scoped subagent memory, see <C>.claude/agent-memory/</C> instead.</>,

677 docsLink: '/en/sub-agents#enable-persistent-memory',

678 children: []

679 }]

680 }]

681 }

682 }), []);

683 const BADGE_STYLES = useMemo(() => ({

684 committed: {

685 bg: 'rgba(85,138,66,0.08)',

686 color: 'var(--ce-badge-committed)',

687 border: 'rgba(85,138,66,0.15)',

688 label: 'committed'

689 },

690 gitignored: {

691 bg: 'rgba(217,119,87,0.06)',

692 color: 'var(--ce-badge-gitignored)',

693 border: 'rgba(217,119,87,0.15)',

694 label: 'gitignored'

695 },

696 local: {

697 bg: 'rgba(115,114,108,0.06)',

698 color: 'var(--ce-badge-local)',

699 border: 'rgba(115,114,108,0.12)',

700 label: 'local only'

701 },

702 autogen: {

703 bg: 'rgba(232,164,92,0.1)',

704 color: 'var(--ce-badge-autogen)',

705 border: 'rgba(232,164,92,0.2)',

706 label: 'Claude writes'

707 }

708 }), []);

709 const allNodes = useMemo(() => {

710 const flatten = (nodes, acc, path, parentId) => {

711 for (const node of nodes) {

712 const nextPath = [...path, node.label];

713 acc[node.id] = {

714 ...node,

715 path: nextPath,

716 parentId

717 };

718 if (node.children) flatten(node.children, acc, nextPath, node.id);

719 }

720 return acc;

721 };

722 const project = flatten(FILE_TREE.project.children, {}, [FILE_TREE.project.label]);

723 const global = flatten(FILE_TREE.global.children, {}, [FILE_TREE.global.label]);

724 for (const id in project) project[id].root = 'project';

725 for (const id in global) global[id].root = 'global';

726 return {

727 ...project,

728 ...global

729 };

730 }, [FILE_TREE]);

731 const allFolderIds = useMemo(() => Object.keys(allNodes).filter(id => allNodes[id].type === 'folder'), [allNodes]);

732 const DEFAULT_EXPANDED = ['dot-claude', 'rules', 'skills', 'skill-review', 'commands', 'agents', 'agent-memory', 'agent-memory-sub', 'global-dot-claude', 'global-output-styles', 'global-projects', 'memory-dir'];

733 const [mounted, setMounted] = useState(false);

734 const [activeRoot, setActiveRoot] = useState('project');

735 const [selectedId, setSelectedId] = useState('claude-md');

736 const [expandedFolders, setExpandedFolders] = useState(() => new Set(DEFAULT_EXPANDED));

737 const [forceMobile, setForceMobile] = useState(false);

738 const [copiedId, setCopiedId] = useState(null);

739 const [isFullscreen, setIsFullscreen] = useState(false);

740 const copyTimeoutRef = useRef(null);

741 const rootRef = useRef(null);

742 useEffect(() => {

743 setMounted(true);

744 const applyHash = scroll => {

745 const hash = window.location.hash.slice(1);

746 if (!hash.startsWith('ce-')) return;

747 const id = hash.slice(3);

748 const node = allNodes[id];

749 if (!node) return;

750 setActiveRoot(node.root);

751 setSelectedId(id);

752 setExpandedFolders(new Set(allFolderIds));

753 if (scroll && rootRef.current) rootRef.current.scrollIntoView({

754 behavior: 'smooth',

755 block: 'start'

756 });

757 };

758 applyHash(false);

759 const onHashChange = () => applyHash(true);

760 const onFsChange = () => setIsFullscreen(!!document.fullscreenElement);

761 window.addEventListener('hashchange', onHashChange);

762 document.addEventListener('fullscreenchange', onFsChange);

763 return () => {

764 if (copyTimeoutRef.current) clearTimeout(copyTimeoutRef.current);

765 window.removeEventListener('hashchange', onHashChange);

766 document.removeEventListener('fullscreenchange', onFsChange);

767 };

768 }, []);

769 useEffect(() => {

770 if (!mounted || !rootRef.current) return;

771 const hash = window.location.hash.slice(1);

772 if (hash.startsWith('ce-') && allNodes[hash.slice(3)]) {

773 rootRef.current.scrollIntoView({

774 behavior: 'smooth',

775 block: 'start'

776 });

777 }

778 }, [mounted]);

779 if (!mounted) return null;

780 const selected = allNodes[selectedId];

781 const tree = FILE_TREE[activeRoot];

782 const isCopied = copiedId === selected.id;

783 const toggleFolder = id => {

784 const next = new Set(expandedFolders);

785 next.has(id) ? next.delete(id) : next.add(id);

786 setExpandedFolders(next);

787 };

788 const switchRoot = root => {

789 if (root === activeRoot) return;

790 setActiveRoot(root);

791 const firstId = FILE_TREE[root].children[0].id;

792 setSelectedId(firstId);

793 try {

794 history.replaceState(null, '', '#ce-' + firstId);

795 } catch (e) {}

796 };

797 const toggleFullscreen = () => {

798 if (!rootRef.current) return;

799 if (document.fullscreenElement) document.exitFullscreen(); else rootRef.current.requestFullscreen().catch(() => {});

800 };

801 const selectNode = n => {

802 setSelectedId(n.id);

803 if (n.type === 'folder' && !expandedFolders.has(n.id)) toggleFolder(n.id);

804 try {

805 history.replaceState(null, '', '#ce-' + n.id);

806 } catch (e) {}

807 };

808 const iconBtn = {

809 width: 28,

810 flexShrink: 0,

811 borderRadius: '6px',

812 border: 'none',

813 cursor: 'pointer',

814 background: 'transparent',

815 color: 'var(--ce-text-4)',

816 display: 'flex',

817 alignItems: 'center',

818 justifyContent: 'center'

819 };

820 const visibleFolderIds = allFolderIds.filter(id => allNodes[id].root === activeRoot);

821 const allExpanded = visibleFolderIds.every(id => expandedFolders.has(id));

822 const toggleAllFolders = () => {

823 const next = new Set(expandedFolders);

824 visibleFolderIds.forEach(id => allExpanded ? next.delete(id) : next.add(id));

825 setExpandedFolders(next);

826 };

827 const onTreeKeyDown = e => {

828 if (!['ArrowDown', 'ArrowUp', 'ArrowRight', 'ArrowLeft'].includes(e.key)) return;

829 const visible = [];

830 const walk = nodes => {

831 for (const n of nodes) {

832 visible.push(n.id);

833 if (n.children && expandedFolders.has(n.id)) walk(n.children);

834 }

835 };

836 walk(tree.children);

837 const i = visible.indexOf(selectedId);

838 if (i === -1) return;

839 e.preventDefault();

840 if (e.key === 'ArrowDown' && i < visible.length - 1) selectNode(allNodes[visible[i + 1]]); else if (e.key === 'ArrowUp' && i > 0) selectNode(allNodes[visible[i - 1]]); else if (e.key === 'ArrowRight' && selected.type === 'folder') {

841 if (!expandedFolders.has(selectedId)) toggleFolder(selectedId); else if (selected.children && selected.children.length) selectNode(allNodes[selected.children[0].id]);

842 } else if (e.key === 'ArrowLeft') {

843 if (selected.type === 'folder' && expandedFolders.has(selectedId)) toggleFolder(selectedId); else if (selected.parentId) selectNode(allNodes[selected.parentId]);

844 }

845 };

846 const copyExample = (id, text) => {

847 const done = () => {

848 setCopiedId(id);

849 if (copyTimeoutRef.current) clearTimeout(copyTimeoutRef.current);

850 copyTimeoutRef.current = setTimeout(() => setCopiedId(null), 2000);

851 };

852 const fallback = () => {

853 const ta = document.createElement('textarea');

854 ta.value = text;

855 ta.style.position = 'fixed';

856 ta.style.opacity = '0';

857 document.body.appendChild(ta);

858 ta.select();

859 try {

860 if (document.execCommand('copy')) done();

861 } catch (e) {}

862 document.body.removeChild(ta);

863 };

864 if (navigator.clipboard) {

865 navigator.clipboard.writeText(text).then(done, fallback);

866 } else {

867 fallback();

868 }

869 };

870 const renderIcon = (icon, color, size) => {

871 const sz = size || 14;

872 if (icon === 'folder') {

873 return <svg width={sz} height={sz} viewBox="0 0 14 14" fill="none">

874 <path d="M1.5 3.5a1 1 0 0 1 1-1h2.6l1 1.2h5.4a1 1 0 0 1 1 1v5.8a1 1 0 0 1-1 1h-9a1 1 0 0 1-1-1V3.5z" fill={color} fillOpacity="0.15" stroke={color} strokeWidth="1" />

875 </svg>;

876 }

877 if (icon === 'json') {

878 return <svg width={sz} height={sz} viewBox="0 0 14 14" fill="none">

879 <rect x="2" y="1.5" width="10" height="11" rx="1.5" fill={color} fillOpacity="0.15" stroke={color} strokeWidth="1" />

880 <text x="7" y="9" fontSize="6" fontFamily="monospace" fill={color} textAnchor="middle" fontWeight="700">{'{}'}</text>

881 </svg>;

882 }

883 return <svg width={sz} height={sz} viewBox="0 0 14 14" fill="none">

884 <rect x="2" y="1.5" width="10" height="11" rx="1.5" fill={color} fillOpacity="0.15" stroke={color} strokeWidth="1" />

885 <line x1="4.5" y1="5" x2="9.5" y2="5" stroke={color} strokeWidth="1" />

886 <line x1="4.5" y1="7" x2="9.5" y2="7" stroke={color} strokeWidth="1" />

887 <line x1="4.5" y1="9" x2="8" y2="9" stroke={color} strokeWidth="1" />

888 </svg>;

889 };

890 const renderNode = (node, depth) => {

891 const isFolder = node.type === 'folder';

892 const isExpanded = expandedFolders.has(node.id);

893 const isSelected = selectedId === node.id;

894 return <div key={node.id}>

895 <button role="treeitem" tabIndex={-1} onClick={() => selectNode(node)} aria-selected={isSelected} aria-expanded={isFolder ? isExpanded : undefined} style={{

896 display: 'flex',

897 alignItems: 'center',

898 gap: '5px',

899 width: '100%',

900 padding: `4px 8px 4px ${8 + depth * 16}px`,

901 background: isSelected ? 'var(--ce-accent-bg)' : 'transparent',

902 borderTop: 'none',

903 borderRight: 'none',

904 borderBottom: 'none',

905 borderLeft: isSelected ? '2px solid var(--ce-accent)' : '2px solid transparent',

906 outline: 'none',

907 cursor: 'pointer',

908 textAlign: 'left',

909 fontFamily: 'var(--ce-mono)',

910 fontSize: '13.5px',

911 color: isSelected ? 'var(--ce-accent)' : 'var(--ce-text-2)',

912 fontWeight: isSelected ? 550 : 400,

913 transition: 'all 0.1s'

914 }}>

915 {isFolder ? <span onClick={e => {

916 e.stopPropagation();

917 toggleFolder(node.id);

918 }} style={{

919 fontSize: '14px',

920 color: 'var(--ce-text-4)',

921 width: '20px',

922 height: '20px',

923 display: 'inline-flex',

924 alignItems: 'center',

925 justifyContent: 'center',

926 cursor: 'pointer',

927 borderRadius: '4px',

928 marginLeft: '-6px',

929 flexShrink: 0

930 }} onMouseEnter={e => {

931 e.currentTarget.style.background = 'var(--ce-arrow-hover)';

932 e.currentTarget.style.color = 'var(--ce-text-2)';

933 }} onMouseLeave={e => {

934 e.currentTarget.style.background = 'transparent';

935 e.currentTarget.style.color = 'var(--ce-text-4)';

936 }}>{isExpanded ? '▾' : '▸'}</span> : <span style={{

937 width: '14px',

938 flexShrink: 0

939 }} />}

940 {renderIcon(node.icon, node.color)}

941 <span style={{

942 flex: 1,

943 overflow: 'hidden',

944 textOverflow: 'ellipsis',

945 whiteSpace: 'nowrap'

946 }}>{node.label}</span>

947 {node.badge && BADGE_STYLES[node.badge] && <span title={BADGE_STYLES[node.badge].label} style={{

948 width: 6,

949 height: 6,

950 borderRadius: '50%',

951 background: BADGE_STYLES[node.badge].color,

952 flexShrink: 0,

953 opacity: 0.7

954 }} />}

955 </button>

956 {isFolder && isExpanded && node.children && <div role="group">{node.children.map(child => renderNode(child, depth + 1))}</div>}

957 </div>;

958 };

959 return <>

960 <style>{`

961 .ce-root {

962 --ce-mono: var(--font-mono, ui-monospace, monospace);

963 --ce-accent: #D97757;

964 --ce-accent-bg: rgba(217,119,87,0.06);

965 --ce-accent-border: rgba(217,119,87,0.12);

966 --ce-bg: #fff;

967 --ce-surface: #FAFAF7;

968 --ce-surface-hover: #F0EEE6;

969 --ce-border: #E8E6DC;

970 --ce-border-subtle: #F0EEE6;

971 --ce-text: #141413;

972 --ce-text-2: #5E5D59;

973 --ce-text-3: #73726C;

974 --ce-text-4: #9C9A92;

975 --ce-text-5: #B8B6AE;

976 --ce-sep: #D1CFC5;

977 --ce-code-header: #F5F4ED;

978 --ce-code-bg: #1A1918;

979 --ce-arrow-hover: rgba(0,0,0,0.08);

980 --ce-badge-committed: #3d6b2e;

981 --ce-badge-gitignored: #b85c3a;

982 --ce-badge-local: #5e5d59;

983 --ce-badge-autogen: #b07520;

984 --ce-when-text: #4a7fb5;

985 }

986 .dark .ce-root {

987 --ce-bg: #1a1918;

988 --ce-surface: #232221;

989 --ce-surface-hover: #2e2d2b;

990 --ce-border: #3a3936;

991 --ce-border-subtle: #2e2d2b;

992 --ce-text: #e8e6dc;

993 --ce-text-2: #c4c2b8;

994 --ce-text-3: #9c9a92;

995 --ce-text-4: #73726c;

996 --ce-text-5: #5e5d59;

997 --ce-sep: #4a4946;

998 --ce-code-header: #2e2d2b;

999 --ce-code-bg: #0d0d0c;

1000 --ce-arrow-hover: rgba(255,255,255,0.08);

1001 --ce-badge-committed: #6fa85c;

1002 --ce-badge-gitignored: #e08a60;

1003 --ce-badge-local: #9c9a92;

1004 --ce-badge-autogen: #e8a45c;

1005 --ce-when-text: #8bb4e0;

1006 }

1007 .ce-mobile-fallback { display: none; border: 1px solid rgba(0,0,0,0.1); background: rgba(0,0,0,0.03); }

1008 .dark .ce-mobile-fallback { border-color: rgba(255,255,255,0.15); background: rgba(255,255,255,0.04); }

1009 @media (max-width: 700px) {

1010 .ce-root:not(.ce-force) { display: none !important; }

1011 .ce-mobile-fallback { display: block; }

1012 }

1013 `}</style>

1014 {!forceMobile && <div className="ce-mobile-fallback" style={{

1015 padding: '14px 16px',

1016 borderRadius: '8px',

1017 fontSize: '14px'

1018 }}>

1019 The interactive explorer works best on a larger screen. See the <a href="#file-reference" style={{

1020 color: '#D97757'

1021 }}>file reference table</a> below, or <button onClick={() => setForceMobile(true)} style={{

1022 border: 'none',

1023 background: 'none',

1024 padding: 0,

1025 color: '#D97757',

1026 textDecoration: 'underline',

1027 cursor: 'pointer',

1028 font: 'inherit'

1029 }}>show the explorer anyway</button>.

1030 </div>}

1031 <div ref={rootRef} className={forceMobile ? 'ce-root ce-force' : 'ce-root'} style={{

1032 borderRadius: isFullscreen ? 0 : '12px',

1033 border: '1px solid var(--ce-border)',

1034 background: 'var(--ce-bg)',

1035 display: 'flex',

1036 alignItems: 'stretch',

1037 overflow: 'hidden',

1038 fontFamily: 'var(--font-sans, -apple-system, sans-serif)',

1039 ...isFullscreen && ({

1040 height: '100vh'

1041 })

1042 }}>

1043 {}

1044 <div style={{

1045 width: 'min(240px, 35%)',

1046 minWidth: '180px',

1047 flexShrink: 0,

1048 borderRight: '1px solid var(--ce-border-subtle)',

1049 background: 'var(--ce-surface)',

1050 display: 'flex',

1051 flexDirection: 'column'

1052 }}>

1053 <div style={{

1054 padding: '8px 8px 4px',

1055 borderBottom: '1px solid var(--ce-border-subtle)',

1056 display: 'flex',

1057 gap: '4px'

1058 }}>

1059 {['project', 'global'].map(root => <button key={root} onClick={() => switchRoot(root)} style={{

1060 flex: 1,

1061 padding: '6px 0',

1062 borderRadius: '6px',

1063 border: 'none',

1064 cursor: 'pointer',

1065 fontFamily: 'var(--ce-mono)',

1066 fontSize: '11.5px',

1067 background: activeRoot === root ? 'var(--ce-accent-bg)' : 'transparent',

1068 color: activeRoot === root ? 'var(--ce-accent)' : 'var(--ce-text-4)',

1069 fontWeight: activeRoot === root ? 600 : 430

1070 }}>

1071 {root === 'project' ? 'Project' : 'Global (~/)'}

1072 </button>)}

1073 <button onClick={toggleAllFolders} title={allExpanded ? 'Collapse all' : 'Expand all'} style={{

1074 ...iconBtn,

1075 fontSize: 11

1076 }}>

1077 {allExpanded ? '⊟' : '⊞'}

1078 </button>

1079 <button onClick={toggleFullscreen} title={isFullscreen ? 'Exit fullscreen' : 'Fullscreen'} style={{

1080 ...iconBtn,

1081 fontSize: 13

1082 }}>

1083 {isFullscreen ? '⤡' : '⛶'}

1084 </button>

1085 </div>

1086 <div role="tree" aria-label="Configuration files" tabIndex={0} onKeyDown={onTreeKeyDown} style={{

1087 padding: '6px 0',

1088 overflowY: 'auto',

1089 flex: 1,

1090 outline: 'none'

1091 }}>

1092 {tree.children.map(node => renderNode(node, 0))}

1093 </div>

1094 </div>

1095 

1096 {}

1097 <div style={{

1098 flex: 1,

1099 minWidth: 0,

1100 padding: '20px 24px',

1101 minHeight: '400px',

1102 overflowY: 'auto'

1103 }}>

1104 <span aria-live="polite" style={{

1105 position: 'absolute',

1106 width: 1,

1107 height: 1,

1108 overflow: 'hidden',

1109 clip: 'rect(0 0 0 0)'

1110 }}>{selected.label} selected</span>

1111 {}

1112 <div style={{

1113 fontFamily: 'var(--ce-mono)',

1114 fontSize: '11px',

1115 color: 'var(--ce-text-4)',

1116 marginBottom: '10px',

1117 cursor: 'default'

1118 }}>

1119 {selected.path.map((seg, i) => <span key={i}>

1120 <span style={{

1121 color: i === selected.path.length - 1 ? 'var(--ce-accent)' : 'var(--ce-text-4)'

1122 }}>{seg.replace(/\/$/, '')}</span>

1123 {i < selected.path.length - 1 && <span style={{

1124 color: 'var(--ce-sep)'

1125 }}> / </span>}

1126 </span>)}

1127 </div>

1128 

1129 {}

1130 <div style={{

1131 display: 'flex',

1132 alignItems: 'flex-start',

1133 gap: '10px',

1134 marginBottom: '10px'

1135 }}>

1136 <span style={{

1137 flexShrink: 0,

1138 display: 'flex'

1139 }}>{renderIcon(selected.icon, selected.color, 24)}</span>

1140 <div style={{

1141 flex: 1,

1142 minWidth: 0

1143 }}>

1144 <div style={{

1145 fontSize: '22px',

1146 fontWeight: 600,

1147 color: 'var(--ce-text)',

1148 letterSpacing: '-0.3px',

1149 lineHeight: '26px'

1150 }}>{selected.label}</div>

1151 {selected.oneLiner && <div style={{

1152 fontSize: '15px',

1153 color: 'var(--ce-text-3)',

1154 marginTop: '3px'

1155 }}>{selected.oneLiner}</div>}

1156 </div>

1157 <div style={{

1158 display: 'flex',

1159 gap: '4px',

1160 flexShrink: 0

1161 }}>

1162 {[selected.autogen && 'autogen', selected.badge].filter(Boolean).map(k => {

1163 const s = BADGE_STYLES[k];

1164 if (!s) return null;

1165 return <span key={k} style={{

1166 fontFamily: 'var(--ce-mono)',

1167 fontSize: '10px',

1168 fontWeight: 600,

1169 textTransform: 'uppercase',

1170 letterSpacing: '0.3px',

1171 padding: '2px 6px',

1172 borderRadius: '4px',

1173 background: s.bg,

1174 color: s.color,

1175 border: `0.5px solid ${s.border}`

1176 }}>{s.label}</span>;

1177 })}

1178 </div>

1179 </div>

1180 

1181 {}

1182 {selected.note && <div style={{

1183 padding: '10px 12px',

1184 borderRadius: '8px',

1185 marginBottom: '14px',

1186 background: 'rgba(217,119,87,0.06)',

1187 border: '1px solid rgba(217,119,87,0.2)',

1188 borderLeft: '3px solid var(--ce-accent)',

1189 fontSize: '15px',

1190 color: 'var(--ce-text-2)',

1191 lineHeight: 1.6

1192 }}>

1193 {selected.note}

1194 </div>}

1195 

1196 {}

1197 {selected.when && <div style={{

1198 padding: '8px 12px',

1199 borderRadius: '6px',

1200 background: 'rgba(106,155,204,0.06)',

1201 border: '0.5px solid rgba(106,155,204,0.12)',

1202 fontSize: '15px',

1203 color: 'var(--ce-when-text)',

1204 marginBottom: '16px'

1205 }}>

1206 <div style={{

1207 fontSize: '10px',

1208 fontWeight: 700,

1209 textTransform: 'uppercase',

1210 letterSpacing: '0.4px',

1211 opacity: 0.65,

1212 marginBottom: '3px'

1213 }}>When it loads</div>

1214 <div style={{

1215 fontWeight: 500

1216 }}>{selected.when}</div>

1217 </div>}

1218 

1219 {}

1220 {selected.description && <div style={{

1221 fontSize: '16px',

1222 color: 'var(--ce-text-2)',

1223 lineHeight: 1.65,

1224 marginBottom: '16px'

1225 }}>

1226 {Array.isArray(selected.description) ? selected.description.map((para, i) => <div key={i} style={{

1227 marginBottom: i < selected.description.length - 1 ? '12px' : 0

1228 }}>{para}</div>) : selected.description}

1229 </div>}

1230 

1231 {}

1232 {selected.contains && selected.contains.length > 0 && <div style={{

1233 marginBottom: '16px'

1234 }}>

1235 <div style={{

1236 fontSize: '11px',

1237 fontWeight: 700,

1238 color: 'var(--ce-text-4)',

1239 textTransform: 'uppercase',

1240 letterSpacing: '0.4px',

1241 marginBottom: '8px'

1242 }}>Common keys</div>

1243 {selected.contains.map((item, i) => <div key={i} style={{

1244 display: 'flex',

1245 gap: '7px',

1246 fontSize: '15px',

1247 color: 'var(--ce-text-2)',

1248 lineHeight: 1.5,

1249 marginBottom: '5px'

1250 }}>

1251 <span style={{

1252 fontSize: '7px',

1253 color: 'var(--ce-text-4)',

1254 marginTop: '6px'

1255 }}>●</span>

1256 <span>{item}</span>

1257 </div>)}

1258 </div>}

1259 

1260 {}

1261 {selected.tips && selected.tips.length > 0 && <div style={{

1262 padding: '12px 14px',

1263 borderRadius: '8px',

1264 background: 'var(--ce-surface)',

1265 border: '1px solid var(--ce-border-subtle)',

1266 marginBottom: '16px'

1267 }}>

1268 <div style={{

1269 fontSize: '11px',

1270 fontWeight: 700,

1271 color: 'var(--ce-accent)',

1272 textTransform: 'uppercase',

1273 letterSpacing: '0.4px',

1274 marginBottom: '6px'

1275 }}>Tips</div>

1276 {selected.tips.map((tip, i) => <div key={i} style={{

1277 display: 'flex',

1278 gap: '7px',

1279 fontSize: '14.5px',

1280 color: 'var(--ce-text-2)',

1281 marginBottom: i < selected.tips.length - 1 ? '5px' : 0

1282 }}>

1283 <span style={{

1284 fontSize: '7px',

1285 color: 'var(--ce-accent)',

1286 marginTop: '6px'

1287 }}>●</span>

1288 <span>{tip}</span>

1289 </div>)}

1290 </div>}

1291 

1292 {}

1293 {selected.example && <div style={{

1294 marginBottom: '16px'

1295 }}>

1296 {selected.exampleIntro && <div style={{

1297 fontSize: '15px',

1298 color: 'var(--ce-text-2)',

1299 lineHeight: 1.6,

1300 marginBottom: '10px'

1301 }}>

1302 {selected.exampleIntro}

1303 </div>}

1304 <div style={{

1305 display: 'flex',

1306 justifyContent: 'space-between',

1307 alignItems: 'center',

1308 padding: '6px 10px',

1309 background: 'var(--ce-code-header)',

1310 border: '1px solid var(--ce-border)',

1311 borderRadius: '8px 8px 0 0'

1312 }}>

1313 <span style={{

1314 fontFamily: 'var(--ce-mono)',

1315 fontSize: '11px',

1316 fontWeight: 600,

1317 color: 'var(--ce-text-3)'

1318 }}>{selected.label}</span>

1319 <button onClick={() => copyExample(selected.id, selected.example)} style={{

1320 padding: '3px 8px',

1321 borderRadius: '4px',

1322 fontSize: '11px',

1323 fontWeight: 600,

1324 cursor: 'pointer',

1325 transition: 'all 0.15s',

1326 background: isCopied ? 'rgba(85,138,66,0.08)' : 'var(--ce-code-header)',

1327 border: isCopied ? '0.5px solid rgba(85,138,66,0.2)' : '0.5px solid var(--ce-border)',

1328 color: isCopied ? '#558A42' : 'var(--ce-text-3)'

1329 }}>

1330 {isCopied ? '✓ Copied' : 'Copy'}

1331 </button>

1332 </div>

1333 <pre style={{

1334 margin: 0,

1335 padding: '12px 14px',

1336 background: 'var(--ce-code-bg)',

1337 color: '#E8E6DC',

1338 fontFamily: 'var(--ce-mono)',

1339 fontSize: '13px',

1340 lineHeight: 1.65,

1341 borderRadius: '0 0 8px 8px',

1342 overflowX: 'auto',

1343 whiteSpace: 'pre'

1344 }}>{selected.example}</pre>

1345 </div>}

1346 

1347 {}

1348 {selected.docsLink && <a href={selected.docsLink} style={{

1349 display: 'inline-flex',

1350 padding: '5px 12px',

1351 borderRadius: '6px',

1352 background: 'var(--ce-accent-bg)',

1353 border: '1px solid var(--ce-accent-border)',

1354 color: 'var(--ce-accent)',

1355 fontSize: '12px',

1356 fontWeight: 600,

1357 textDecoration: 'none'

1358 }}>Full docs →</a>}

1359 

1360 {}

1361 {selected.children && selected.children.length > 0 && <div style={{

1362 marginTop: '20px'

1363 }}>

1364 <div style={{

1365 fontSize: '11px',

1366 fontWeight: 700,

1367 color: 'var(--ce-text-4)',

1368 textTransform: 'uppercase',

1369 letterSpacing: '0.4px',

1370 marginBottom: '8px'

1371 }}>Contents</div>

1372 <div style={{

1373 display: 'flex',

1374 flexDirection: 'column',

1375 gap: '4px'

1376 }}>

1377 {selected.children.map(child => <button key={child.id} onClick={() => selectNode(child)} style={{

1378 display: 'flex',

1379 alignItems: 'center',

1380 gap: '8px',

1381 padding: '6px 8px',

1382 width: '100%',

1383 background: 'var(--ce-surface)',

1384 borderRadius: '6px',

1385 border: 'none',

1386 cursor: 'pointer',

1387 textAlign: 'left',

1388 transition: 'background 0.1s'

1389 }} onMouseEnter={e => e.currentTarget.style.background = 'var(--ce-surface-hover)'} onMouseLeave={e => e.currentTarget.style.background = 'var(--ce-surface)'}>

1390 {renderIcon(child.icon, child.color, 13)}

1391 <span style={{

1392 fontFamily: 'var(--ce-mono)',

1393 fontSize: '12px',

1394 color: 'var(--ce-text-2)'

1395 }}>{child.label}</span>

1396 {child.oneLiner && <span style={{

1397 fontSize: '11px',

1398 color: 'var(--ce-text-4)',

1399 overflow: 'hidden',

1400 textOverflow: 'ellipsis',

1401 whiteSpace: 'nowrap'

1402 }}>{child.oneLiner}</span>}

1403 </button>)}

1404 </div>

1405 </div>}

1406 </div>

1407 </div>

1408 </>;

1409};

1410 

1411Claude Code lee instrucciones, configuración, skills, subagents y memoria desde su directorio de proyecto y desde `~/.claude` en su directorio de inicio. Confirme archivos de proyecto en git para compartirlos con su equipo; los archivos en `~/.claude` son configuración personal que se aplica en todos sus proyectos.

1412 

1413En Windows, `~/.claude` se resuelve a `%USERPROFILE%\.claude`. Si establece [`CLAUDE_CONFIG_DIR`](/es/env-vars), cada ruta `~/.claude` en esta página vive bajo ese directorio en su lugar.

1414 

1415La mayoría de los usuarios solo editan `CLAUDE.md` y `settings.json`. El resto del directorio es opcional: agregue skills, rules o subagents según sea necesario.

1416 

1417## Explorar el directorio

1418 

1419Haga clic en los archivos del árbol para ver qué hace cada uno, cuándo se carga y un ejemplo.

1420 

1421<ClaudeExplorer />

1422 

1423## Lo que no se muestra

1424 

1425El explorador cubre archivos que usted crea y edita. Algunos archivos relacionados viven en otros lugares:

1426 

1427| Archivo | Ubicación | Propósito |

1428| ----------------------- | ------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

1429| `managed-settings.json` | Nivel del sistema, varía según el SO | Configuración impuesta por la empresa que no puede anular. Consulte [configuración administrada por servidor](/es/server-managed-settings). |

1430| `CLAUDE.local.md` | Raíz del proyecto | Sus preferencias privadas para este proyecto, cargadas junto con CLAUDE.md. Créelo manualmente y agréguelo a `.gitignore`. |

1431| Plugins instalados | `~/.claude/plugins` | Mercados clonados, versiones de plugins instaladas y datos por plugin, administrados por comandos `claude plugin`. Las versiones huérfanas se eliminan 7 días después de una actualización o desinstalación de plugin. Consulte [almacenamiento en caché de plugins](/es/plugins-reference#plugin-caching-and-file-resolution). |

1432 

1433`~/.claude` también contiene datos que Claude Code escribe mientras trabaja: transcripciones, historial de prompts, instantáneas de archivos, cachés y registros. Consulte [datos de aplicación](#application-data) a continuación.

1434 

1435## Elegir el archivo correcto

1436 

1437Diferentes tipos de personalización viven en diferentes archivos. Use esta tabla para encontrar dónde pertenece un cambio.

1438 

1439| Usted quiere | Editar | Alcance | Referencia |

1440| :------------------------------------------------------------- | :-------------------------------------- | :---------------- | :------------------------------------------------- |

1441| Dar a Claude contexto del proyecto y convenciones | `CLAUDE.md` | proyecto o global | [Memory](/es/memory) |

1442| Permitir o bloquear llamadas de herramientas específicas | `settings.json` `permissions` o `hooks` | proyecto o global | [Permissions](/es/permissions), [Hooks](/es/hooks) |

1443| Ejecutar un script antes o después de llamadas de herramientas | `settings.json` `hooks` | proyecto o global | [Hooks](/es/hooks) |

1444| Establecer variables de entorno para la sesión | `settings.json` `env` | proyecto o global | [Settings](/es/settings#available-settings) |

1445| Mantener anulaciones personales fuera de git | `settings.local.json` | solo proyecto | [Settings scopes](/es/settings#settings-files) |

1446| Agregar un prompt o capacidad que invoque con `/name` | `skills/<name>/SKILL.md` | proyecto o global | [Skills](/es/skills) |

1447| Definir un subagent especializado con sus propias herramientas | `agents/*.md` | proyecto o global | [Subagents](/es/sub-agents) |

1448| Conectar herramientas externas sobre MCP | `.mcp.json` | solo proyecto | [MCP](/es/mcp) |

1449| Cambiar cómo Claude formatea respuestas | `output-styles/*.md` | proyecto o global | [Output styles](/es/output-styles) |

1450 

1451## Referencia de archivos

1452 

1453Esta tabla enumera todos los archivos que cubre el explorador. Los archivos de alcance de proyecto viven en su repositorio bajo `.claude/` (o en la raíz para `CLAUDE.md`, `.mcp.json` y `.worktreeinclude`). Los archivos de alcance global viven en `~/.claude/` y se aplican en todos los proyectos.

1454 

1455<Note>

1456 Varias cosas pueden anular lo que pone en estos archivos:

1457 

1458 * [Configuración administrada](/es/server-managed-settings) implementada por su organización tiene prioridad sobre todo

1459 * Las banderas CLI como `--permission-mode` o `--settings` anulan `settings.json` para esa sesión

1460 * Algunas variables de entorno tienen prioridad sobre su configuración equivalente, pero esto varía: consulte la [referencia de variables de entorno](/es/env-vars) para cada una

1461 

1462 Consulte [precedencia de configuración](/es/settings#settings-precedence) para el orden completo.

1463</Note>

1464 

1465Haga clic en un nombre de archivo para abrir ese nodo en el explorador anterior.

1466 

1467| Archivo | Alcance | Confirmar | Qué hace | Referencia |

1468| --------------------------------------------------- | ----------------- | --------- | ----------------------------------------------------------------------------- | -------------------------------------------------------------------- |

1469| [`CLAUDE.md`](#ce-claude-md) | Proyecto y global | ✓ | Instrucciones cargadas cada sesión | [Memory](/es/memory) |

1470| [`rules/*.md`](#ce-rules) | Proyecto y global | ✓ | Instrucciones con alcance de tema, opcionalmente con puerta de ruta | [Rules](/es/memory#organize-rules-with-claude/rules/) |

1471| [`settings.json`](#ce-settings-json) | Proyecto y global | ✓ | Permisos, hooks, variables de entorno, valores predeterminados de modelo | [Settings](/es/settings) |

1472| [`settings.local.json`](#ce-settings-local-json) | Solo proyecto | | Sus anulaciones personales, auto-gitignored | [Settings scopes](/es/settings#settings-files) |

1473| [`.mcp.json`](#ce-mcp-json) | Solo proyecto | ✓ | Servidores MCP compartidos por el equipo | [MCP scopes](/es/mcp#mcp-installation-scopes) |

1474| [`.worktreeinclude`](#ce-worktreeinclude) | Solo proyecto | ✓ | Archivos ignorados por Git para copiar en nuevos worktrees | [Worktrees](/es/common-workflows#copy-gitignored-files-to-worktrees) |

1475| [`skills/<name>/SKILL.md`](#ce-skills) | Proyecto y global | ✓ | Prompts reutilizables invocados con `/name` o auto-invocados | [Skills](/es/skills) |

1476| [`commands/*.md`](#ce-commands) | Proyecto y global | ✓ | Prompts de archivo único; mismo mecanismo que skills | [Skills](/es/skills) |

1477| [`output-styles/*.md`](#ce-output-styles) | Proyecto y global | ✓ | Secciones de prompt del sistema personalizadas | [Output styles](/es/output-styles) |

1478| [`agents/*.md`](#ce-agents) | Proyecto y global | ✓ | Definiciones de subagents con su propio prompt y herramientas | [Subagents](/es/sub-agents) |

1479| [`agent-memory/<name>/`](#ce-agent-memory) | Proyecto y global | ✓ | Memoria persistente para subagents | [Persistent memory](/es/sub-agents#enable-persistent-memory) |

1480| [`~/.claude.json`](#ce-claude-json) | Solo global | | Estado de la aplicación, OAuth, alternancias de UI, servidores MCP personales | [Global config](/es/settings#global-config-settings) |

1481| [`projects/<project>/memory/`](#ce-global-projects) | Solo global | | Auto memory: notas de Claude para sí mismo entre sesiones | [Auto memory](/es/memory#auto-memory) |

1482| [`keybindings.json`](#ce-keybindings) | Solo global | | Atajos de teclado personalizados | [Keybindings](/es/keybindings) |

1483| [`themes/*.json`](#ce-themes) | Solo global | | Temas de color personalizados | [Custom themes](/es/terminal-config#create-a-custom-theme) |

1484 

1485## Solucionar problemas de configuración

1486 

1487Si una configuración, hook o archivo no está surtiendo efecto, consulte [Depurar su configuración](/es/debug-your-config) para los comandos de inspección y una tabla de búsqueda por síntoma.

1488 

1489## Datos de aplicación

1490 

1491Más allá de la configuración que usted crea, `~/.claude` contiene datos que Claude Code escribe durante las sesiones. Estos archivos son texto sin formato. Cualquier cosa que pase a través de una herramienta aterriza en una transcripción en disco: contenidos de archivos, salida de comandos, texto pegado.

1492 

1493### Limpiados automáticamente

1494 

1495Los archivos en las rutas a continuación se eliminan al inicio una vez que tienen más de [`cleanupPeriodDays`](/es/settings#available-settings). El valor predeterminado es 30 días.

1496 

1497| Ruta bajo `~/.claude/` | Contenidos |

1498| -------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------- |

1499| `projects/<project>/<session>.jsonl` | Transcripción de conversación completa: cada mensaje, llamada de herramienta y resultado de herramienta |

1500| `projects/<project>/<session>/tool-results/` | Salidas de herramientas grandes derramadas en archivos separados |

1501| `file-history/<session>/` | Instantáneas previas a la edición de archivos que Claude cambió, utilizadas para [restauración de checkpoint](/es/checkpointing) |

1502| `plans/` | Archivos de plan escritos durante [plan mode](/es/permission-modes#analyze-before-you-edit-with-plan-mode) |

1503| `debug/` | Registros de depuración por sesión, escritos solo cuando comienza con `--debug` o ejecuta `/debug` |

1504| `paste-cache/`, `image-cache/` | Contenidos de pastes grandes e imágenes adjuntas |

1505| `session-env/` | Metadatos de entorno por sesión |

1506| `tasks/` | Listas de tareas por sesión escritas por las herramientas de tareas |

1507| `shell-snapshots/` | Entorno de shell capturado utilizado por la herramienta Bash. Se elimina al salir correctamente. El barrido borra cualquiera dejado después de un bloqueo. |

1508| `backups/` | Copias con marca de tiempo de `~/.claude.json` tomadas antes de migraciones de configuración |

1509 

1510### Mantenidos hasta que los elimine

1511 

1512Las siguientes rutas no están cubiertas por la limpieza automática y persisten indefinidamente.

1513 

1514| Ruta bajo `~/.claude/` | Contenidos |

1515| ---------------------- | ------------------------------------------------------------------------------------------------------------------------ |

1516| `history.jsonl` | Cada prompt que ha escrito, con marca de tiempo y ruta del proyecto. Utilizado para recuperación de flecha hacia arriba. |

1517| `stats-cache.json` | Conteos de tokens y costos agregados mostrados por `/usage` |

1518| `todos/` | Listas de tareas heredadas por sesión. Ya no se escriben en versiones actuales; seguro de eliminar. |

1519 

1520Otros archivos de caché pequeños y archivos de bloqueo aparecen dependiendo de qué características use y son seguros de eliminar.

1521 

1522### Almacenamiento de texto sin formato

1523 

1524Las transcripciones e historial no están encriptados en reposo. Los permisos de archivo del SO son la única protección. Si una herramienta lee un archivo `.env` o un comando imprime una credencial, ese valor se escribe en `projects/<project>/<session>.jsonl`. Para reducir la exposición:

1525 

1526* Reduzca `cleanupPeriodDays` para acortar cuánto tiempo se mantienen las transcripciones

1527* Establezca la variable de entorno [`CLAUDE_CODE_SKIP_PROMPT_HISTORY`](/es/env-vars) para omitir la escritura de transcripciones e historial de prompts en cualquier modo. En modo no interactivo, puede pasar `--no-session-persistence` junto con `-p`, o establecer `persistSession: false` en el Agent SDK.

1528* Use [reglas de permisos](/es/permissions) para denegar lecturas de archivos de credenciales

1529 

1530### Borrar datos locales

1531 

1532Ejecute `claude project purge` para eliminar el estado que Claude Code mantiene para un proyecto:

1533 

1534* Transcripciones y memoria automática bajo `projects/`

1535* Entradas por sesión de `tasks/`, `debug/` y `file-history/`

1536* Líneas de prompt coincidentes en `history.jsonl`

1537* La entrada del proyecto en `~/.claude.json`

1538 

1539El comando imprime el plan de eliminación completo y solicita confirmación antes de eliminar cualquier cosa.

1540 

1541Obtenga una vista previa del plan sin eliminar nada:

1542 

1543```bash theme={null}

1544claude project purge ~/work/my-repo --dry-run

1545```

1546 

1547Elimine con un único mensaje de confirmación:

1548 

1549```bash theme={null}

1550claude project purge ~/work/my-repo

1551```

1552 

1553Omita la ruta para elegir un proyecto de una lista interactiva.

1554 

1555Omita el mensaje de confirmación para usar en scripts:

1556 

1557```bash theme={null}

1558claude project purge ~/work/my-repo --yes

1559```

1560 

1561Pase `--all` en lugar de una ruta para purgar el estado de cada proyecto a la vez, lo que elimina `history.jsonl` directamente en lugar de filtrarlo. Pase `-i` para recorrer el plan de eliminación un elemento a la vez.

1562 

1563El comando deja `shell-snapshots/` y `backups/` solos porque no están limitados al proyecto, y advierte sobre ellos en la salida del plan. Sale con estado 1 si ningún estado coincide con la ruta dada.

1564 

1565También puede eliminar cualquiera de las rutas de datos de aplicación anteriores manualmente. Las nuevas sesiones no se ven afectadas. La tabla a continuación muestra qué pierde para sesiones pasadas.

1566 

1567| Eliminar | Pierde |

1568| -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------ |

1569| `~/.claude/projects/` | Reanudar, continuar y rebobinar para sesiones pasadas |

1570| `~/.claude/history.jsonl` | Recuperación de prompt de flecha hacia arriba |

1571| `~/.claude/file-history/` | Restauración de checkpoint para sesiones pasadas |

1572| `~/.claude/stats-cache.json` | Totales históricos mostrados por `/usage` |

1573| `~/.claude/debug/`, `~/.claude/plans/`, `~/.claude/paste-cache/`, `~/.claude/image-cache/`, `~/.claude/session-env/`, `~/.claude/tasks/`, `~/.claude/shell-snapshots/`, `~/.claude/backups/` | Nada orientado al usuario |

1574| `~/.claude/todos/` | Nada. Directorio heredado no escrito por versiones actuales. |

1575 

1576No elimine `~/.claude.json`, `~/.claude/settings.json` o `~/.claude/plugins/`: esos contienen su autenticación, preferencias y plugins instalados.

1577 

1578## Recursos relacionados

1579 

1580* [Manage Claude's memory](/es/memory): escriba y organice CLAUDE.md, rules y auto memory

1581* [Configure settings](/es/settings): establezca permisos, hooks, variables de entorno y valores predeterminados de modelo

1582* [Create skills](/es/skills): construya prompts y flujos de trabajo reutilizables

1583* [Configure subagents](/es/sub-agents): defina agentes especializados con su propio contexto

cli-reference.md +129 −0 created

Details

1> ## Documentation Index

2> Fetch the complete documentation index at: https://code.claude.com/docs/llms.txt

3> Use this file to discover all available pages before exploring further.

4 

5# Referencia de CLI

6 

7> Referencia completa de la interfaz de línea de comandos de Claude Code, incluyendo comandos y banderas.

8 

9## Comandos CLI

10 

11Puede iniciar sesiones, canalizar contenido, reanudar conversaciones y administrar actualizaciones con estos comandos:

12 

13| Comando | Descripción | Ejemplo |

14| :------------------------------ | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :---------------------------------------------------------- |

15| `claude` | Iniciar sesión interactiva | `claude` |

16| `claude "query"` | Iniciar sesión interactiva con indicación inicial | `claude "explain this project"` |

17| `claude -p "query"` | Consultar a través de SDK, luego salir | `claude -p "explain this function"` |

18| `cat file \| claude -p "query"` | Procesar contenido canalizado | `cat logs.txt \| claude -p "explain"` |

19| `claude -c` | Continuar la conversación más reciente en el directorio actual | `claude -c` |

20| `claude -c -p "query"` | Continuar a través de SDK | `claude -c -p "Check for type errors"` |

21| `claude -r "<session>" "query"` | Reanudar sesión por ID o nombre | `claude -r "auth-refactor" "Finish this PR"` |

22| `claude update` | Actualizar a la versión más reciente | `claude update` |

23| `claude install [version]` | Instalar o reinstalar el binario nativo. Acepta una versión como `2.1.118`, o `stable` o `latest`. Consulte [Instalar una versión específica](/es/setup#install-a-specific-version) | `claude install stable` |

24| `claude auth login` | Inicie sesión en su cuenta de Anthropic. Use `--email` para rellenar previamente su dirección de correo electrónico, `--sso` para forzar la autenticación SSO y `--console` para iniciar sesión con Anthropic Console para facturación de uso de API en lugar de una suscripción a Claude | `claude auth login --console` |

25| `claude auth logout` | Cerrar sesión en su cuenta de Anthropic | `claude auth logout` |

26| `claude auth status` | Mostrar estado de autenticación como JSON. Use `--text` para salida legible por humanos. Sale con código 0 si ha iniciado sesión, 1 si no | `claude auth status` |

27| `claude agents` | Listar todos los [subagents](/es/sub-agents) configurados, agrupados por fuente | `claude agents` |

28| `claude auto-mode defaults` | Imprimir las reglas del clasificador de [auto mode](/es/permission-modes#eliminate-prompts-with-auto-mode) integradas como JSON. Use `claude auto-mode config` para ver su configuración efectiva con la configuración aplicada | `claude auto-mode defaults > rules.json` |

29| `claude mcp` | Configurar servidores Model Context Protocol (MCP) | Consulte la [documentación de Claude Code MCP](/es/mcp). |

30| `claude plugin` | Administrar Claude Code [plugins](/es/plugins). Alias: `claude plugins`. Consulte [referencia de plugins](/es/plugins-reference#cli-commands-reference) para subcomandos | `claude plugin install code-review@claude-plugins-official` |

31| `claude project purge [path]` | Eliminar todo el estado local de Claude Code para un proyecto: transcripciones, listas de tareas, registros de depuración, historial de edición de archivos, líneas de historial de indicaciones y la entrada del proyecto en `~/.claude.json`. Omita `[path]` para elegir de una lista interactiva. Banderas: `--dry-run` para vista previa, `-y`/`--yes` para omitir confirmación, `-i`/`--interactive` para confirmar cada elemento, `--all` para cada proyecto. Consulte [Borrar datos locales](/es/claude-directory#clear-local-data) | `claude project purge ~/work/repo --dry-run` |

32| `claude remote-control` | Iniciar un servidor de [Remote Control](/es/remote-control) para controlar Claude Code desde Claude.ai o la aplicación Claude. Se ejecuta en modo servidor (sin sesión interactiva local). Consulte [Banderas de modo servidor](/es/remote-control#start-a-remote-control-session) | `claude remote-control --name "My Project"` |

33| `claude setup-token` | Generar un token OAuth de larga duración para CI y scripts. Imprime el token en la terminal sin guardarlo. Requiere una suscripción a Claude. Consulte [Generar un token de larga duración](/es/authentication#generate-a-long-lived-token) | `claude setup-token` |

34| `claude ultrareview [target]` | Ejecutar [ultrareview](/es/ultrareview#run-ultrareview-non-interactively) de forma no interactiva. Imprime los hallazgos en stdout y sale con 0 en caso de éxito o 1 en caso de fallo. Use `--json` para la carga útil sin procesar y `--timeout <minutes>` para anular el valor predeterminado de 30 minutos | `claude ultrareview 1234 --json` |

35 

36Si escribe mal un subcomando, Claude Code sugiere la coincidencia más cercana y sale sin iniciar una sesión. Por ejemplo, `claude udpate` imprime `Did you mean claude update?`.

37 

38## Banderas CLI

39 

40Personalice el comportamiento de Claude Code con estas banderas de línea de comandos. `claude --help` no enumera todas las banderas, por lo que la ausencia de una bandera en `--help` no significa que no esté disponible.

41 

42| Bandera | Descripción | Ejemplo |

43| :---------------------------------------------- | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :------------------------------------------------------------------------------------------------- |

44| `--add-dir` | Agregar directorios de trabajo adicionales para que Claude lea y edite archivos. Otorga acceso a archivos; la mayoría de la configuración de `.claude/` [no se descubre](/es/permissions#additional-directories-grant-file-access-not-configuration) desde estos directorios. Valida que cada ruta exista como directorio | `claude --add-dir ../apps ../lib` |

45| `--agent` | Especificar un agente para la sesión actual (anula la configuración `agent`) | `claude --agent my-custom-agent` |

46| `--agents` | Definir subagents personalizados dinámicamente a través de JSON. Utiliza los mismos nombres de campo que el [frontmatter](/es/sub-agents#supported-frontmatter-fields) de subagent, más un campo `prompt` para las instrucciones del agente | `claude --agents '{"reviewer":{"description":"Reviews code","prompt":"You are a code reviewer"}}'` |

47| `--allow-dangerously-skip-permissions` | Agregar `bypassPermissions` al ciclo de modo `Shift+Tab` sin comenzar en él. Permite comenzar en un modo diferente como `plan` y cambiar a `bypassPermissions` más tarde. Consulte [modos de permiso](/es/permission-modes#skip-all-checks-with-bypasspermissions-mode) | `claude --permission-mode plan --allow-dangerously-skip-permissions` |

48| `--allowedTools` | Herramientas que se ejecutan sin solicitar permiso. Consulte [sintaxis de regla de permiso](/es/settings#permission-rule-syntax) para coincidencia de patrones. Para restringir qué herramientas están disponibles, use `--tools` en su lugar | `"Bash(git log *)" "Bash(git diff *)" "Read"` |

49| `--append-system-prompt` | Agregar texto personalizado al final del indicador del sistema predeterminado | `claude --append-system-prompt "Always use TypeScript"` |

50| `--append-system-prompt-file` | Cargar texto de indicación del sistema adicional desde un archivo y agregar al indicador predeterminado | `claude --append-system-prompt-file ./extra-rules.txt` |

51| `--bare` | Modo mínimo: omitir el descubrimiento automático de hooks, skills, plugins, servidores MCP, memoria automática y CLAUDE.md para que las llamadas con script se inicien más rápido. Claude tiene acceso a herramientas Bash, lectura de archivos y edición de archivos. Establece [`CLAUDE_CODE_SIMPLE`](/es/env-vars). Consulte [bare mode](/es/headless#start-faster-with-bare-mode) | `claude --bare -p "query"` |

52| `--betas` | Encabezados beta para incluir en solicitudes de API (solo usuarios con clave API) | `claude --betas interleaved-thinking` |

53| `--channels` | (Vista previa de investigación) Servidores MCP cuyas notificaciones de [channel](/es/channels) Claude debe escuchar en esta sesión. Lista separada por espacios de entradas `plugin:<name>@<marketplace>`. Requiere autenticación de Claude.ai | `claude --channels plugin:my-notifier@my-marketplace` |

54| `--chrome` | Habilitar [integración del navegador Chrome](/es/chrome) para automatización web y pruebas | `claude --chrome` |

55| `--continue`, `-c` | Cargar la conversación más reciente en el directorio actual. Incluye sesiones que agregaron este directorio con `/add-dir` | `claude --continue` |

56| `--dangerously-load-development-channels` | Habilitar [channels](/es/channels-reference#test-during-the-research-preview) que no están en la lista de permitidos aprobada, para desarrollo local. Acepta entradas `plugin:<name>@<marketplace>` y `server:<name>`. Solicita confirmación | `claude --dangerously-load-development-channels server:webhook` |

57| `--dangerously-skip-permissions` | Omitir indicadores de permiso. Equivalente a `--permission-mode bypassPermissions`. Consulte [modos de permiso](/es/permission-modes#skip-all-checks-with-bypasspermissions-mode) para ver qué hace y no hace esto | `claude --dangerously-skip-permissions` |

58| `--debug` | Habilitar modo de depuración con filtrado de categoría opcional (por ejemplo, `"api,hooks"` o `"!statsig,!file"`) | `claude --debug "api,mcp"` |

59| `--debug-file <path>` | Escribir registros de depuración en una ruta de archivo específica. Habilita implícitamente el modo de depuración. Tiene prioridad sobre `CLAUDE_CODE_DEBUG_LOGS_DIR` | `claude --debug-file /tmp/claude-debug.log` |

60| `--disable-slash-commands` | Deshabilitar todas las skills y comandos para esta sesión | `claude --disable-slash-commands` |

61| `--disallowedTools` | Herramientas que se eliminan del contexto del modelo y no se pueden usar | `"Bash(git log *)" "Bash(git diff *)" "Edit"` |

62| `--effort` | Establecer el [nivel de esfuerzo](/es/model-config#adjust-effort-level) para la sesión actual. Opciones: `low`, `medium`, `high`, `xhigh`, `max`; los niveles disponibles dependen del modelo. Con alcance de sesión y no persiste en la configuración | `claude --effort high` |

63| `--enable-auto-mode` | {/* max-version: 2.1.110 */}Eliminado en v2.1.111. Auto mode ahora está en el ciclo `Shift+Tab` de forma predeterminada; use `--permission-mode auto` para comenzar en él | `claude --permission-mode auto` |

64| `--exclude-dynamic-system-prompt-sections` | Mover secciones por máquina del indicador del sistema (directorio de trabajo, información del entorno, rutas de memoria, estado de git) al primer mensaje del usuario. Mejora la reutilización de caché de indicación en diferentes usuarios y máquinas que ejecutan la misma tarea. Solo se aplica con el indicador del sistema predeterminado; se ignora cuando se establece `--system-prompt` o `--system-prompt-file`. Use con `-p` para cargas de trabajo con script y múltiples usuarios | `claude -p --exclude-dynamic-system-prompt-sections "query"` |

65| `--fallback-model` | Habilitar fallback automático al modelo especificado cuando el modelo predeterminado está sobrecargado (solo modo impresión) | `claude -p --fallback-model sonnet "query"` |

66| `--fork-session` | Al reanudar, crear un nuevo ID de sesión en lugar de reutilizar el original (usar con `--resume` o `--continue`) | `claude --resume abc123 --fork-session` |

67| `--from-pr` | Reanudar sesiones vinculadas a una solicitud de extracción específica. Acepta un número de PR, una URL de PR de GitHub o GitHub Enterprise, una URL de solicitud de fusión de GitLab o una URL de solicitud de extracción de Bitbucket. Las sesiones se vinculan automáticamente cuando Claude crea la solicitud de extracción | `claude --from-pr 123` |

68| `--ide` | Conectarse automáticamente al IDE al iniciar si exactamente un IDE válido está disponible | `claude --ide` |

69| `--init` | Ejecutar [Setup hooks](/es/hooks#setup) con el matcher `init` antes de la sesión (solo modo impresión) | `claude -p --init "query"` |

70| `--init-only` | Ejecutar hooks de [Setup](/es/hooks#setup) y `SessionStart`, luego salir sin iniciar una conversación | `claude --init-only` |

71| `--include-hook-events` | Incluir todos los eventos del ciclo de vida del hook en el flujo de salida. Requiere `--output-format stream-json` | `claude -p --output-format stream-json --include-hook-events "query"` |

72| `--include-partial-messages` | Incluir eventos de transmisión parcial en la salida. Requiere `--print` y `--output-format stream-json` | `claude -p --output-format stream-json --include-partial-messages "query"` |

73| `--input-format` | Especificar formato de entrada para modo impresión (opciones: `text`, `stream-json`) | `claude -p --output-format json --input-format stream-json` |

74| `--json-schema` | Obtener salida JSON validada que coincida con un JSON Schema después de que el agente complete su flujo de trabajo (solo modo impresión, consulte [salidas estructuradas](/es/agent-sdk/structured-outputs)) | `claude -p --json-schema '{"type":"object","properties":{...}}' "query"` |

75| `--maintenance` | Ejecutar [Setup hooks](/es/hooks#setup) con el matcher `maintenance` antes de la sesión (solo modo impresión) | `claude -p --maintenance "query"` |

76| `--max-budget-usd` | Cantidad máxima en dólares a gastar en llamadas API antes de detener (solo modo impresión) | `claude -p --max-budget-usd 5.00 "query"` |

77| `--max-turns` | Limitar el número de turnos de agente (solo modo impresión). Sale con un error cuando se alcanza el límite. Sin límite por defecto | `claude -p --max-turns 3 "query"` |

78| `--mcp-config` | Cargar servidores MCP desde archivos JSON o cadenas (separados por espacios) | `claude --mcp-config ./mcp.json` |

79| `--model` | Establece el modelo para la sesión actual con un alias para el modelo más reciente (`sonnet` u `opus`) o el nombre completo de un modelo | `claude --model claude-sonnet-4-6` |

80| `--name`, `-n` | Establecer un nombre para mostrar para la sesión, que se muestra en `/resume` y en el título de la terminal. Puede reanudar una sesión nombrada con `claude --resume <name>`. <br /><br />[`/rename`](/es/commands) cambia el nombre durante la sesión y también lo muestra en la barra de indicación | `claude -n "my-feature-work"` |

81| `--no-chrome` | Deshabilitar [integración del navegador Chrome](/es/chrome) para esta sesión | `claude --no-chrome` |

82| `--no-session-persistence` | Deshabilitar la persistencia de sesión para que las sesiones no se guarden en disco y no se puedan reanudar (solo modo impresión) | `claude -p --no-session-persistence "query"` |

83| `--output-format` | Especificar formato de salida para modo impresión (opciones: `text`, `json`, `stream-json`) | `claude -p "query" --output-format json` |

84| `--permission-mode` | Comenzar en un [modo de permiso](/es/permission-modes) especificado. Acepta `default`, `acceptEdits`, `plan`, `auto`, `dontAsk` o `bypassPermissions`. Anula `defaultMode` de archivos de configuración | `claude --permission-mode plan` |

85| `--permission-prompt-tool` | Especificar una herramienta MCP para manejar indicadores de permiso en modo no interactivo | `claude -p --permission-prompt-tool mcp_auth_tool "query"` |

86| `--plugin-dir` | Cargar plugins desde un directorio solo para esta sesión. Cada bandera toma una ruta. Repita la bandera para múltiples directorios: `--plugin-dir A --plugin-dir B` | `claude --plugin-dir ./my-plugins` |

87| `--print`, `-p` | Imprimir respuesta sin modo interactivo (consulte [documentación de Agent SDK](/es/agent-sdk/overview) para detalles de uso programático) | `claude -p "query"` |

88| `--remote` | Crear una nueva [sesión web](/es/claude-code-on-the-web) en claude.ai con la descripción de tarea proporcionada | `claude --remote "Fix the login bug"` |

89| `--remote-control`, `--rc` | Iniciar una sesión interactiva con [Remote Control](/es/remote-control#start-a-remote-control-session) habilitado para que también pueda controlarlo desde claude.ai o la aplicación Claude. Opcionalmente pase un nombre para la sesión | `claude --remote-control "My Project"` |

90| `--remote-control-session-name-prefix <prefix>` | Prefijo para nombres de sesión de [Remote Control](/es/remote-control) generados automáticamente cuando no se establece un nombre explícito. Por defecto es el nombre de host de su máquina, produciendo nombres como `myhost-graceful-unicorn`. Establezca `CLAUDE_REMOTE_CONTROL_SESSION_NAME_PREFIX` para el mismo efecto | `claude remote-control --remote-control-session-name-prefix dev-box` |

91| `--replay-user-messages` | Re-emitir mensajes de usuario desde stdin de vuelta en stdout para reconocimiento. Requiere `--input-format stream-json` y `--output-format stream-json` | `claude -p --input-format stream-json --output-format stream-json --replay-user-messages` |

92| `--resume`, `-r` | Reanudar una sesión específica por ID o nombre, o mostrar un selector interactivo para elegir una sesión. Incluye sesiones que agregaron este directorio con `/add-dir` | `claude --resume auth-refactor` |

93| `--session-id` | Usar un ID de sesión específico para la conversación (debe ser un UUID válido) | `claude --session-id "550e8400-e29b-41d4-a716-446655440000"` |

94| `--setting-sources` | Lista separada por comas de fuentes de configuración a cargar (`user`, `project`, `local`) | `claude --setting-sources user,project` |

95| `--settings` | Ruta a un archivo JSON de configuración o una cadena JSON para cargar configuración adicional desde | `claude --settings ./settings.json` |

96| `--strict-mcp-config` | Usar solo servidores MCP de `--mcp-config`, ignorando todas las demás configuraciones de MCP | `claude --strict-mcp-config --mcp-config ./mcp.json` |

97| `--system-prompt` | Reemplazar todo el indicador del sistema con texto personalizado | `claude --system-prompt "You are a Python expert"` |

98| `--system-prompt-file` | Cargar indicación del sistema desde un archivo, reemplazando el indicador predeterminado | `claude --system-prompt-file ./custom-prompt.txt` |

99| `--teleport` | Reanudar una [sesión web](/es/claude-code-on-the-web) en su terminal local | `claude --teleport` |

100| `--teammate-mode` | Establecer cómo se muestran los compañeros de [equipo de agente](/es/agent-teams): `auto` (predeterminado), `in-process` o `tmux`. Consulte [Elegir un modo de visualización](/es/agent-teams#choose-a-display-mode) | `claude --teammate-mode in-process` |

101| `--tmux` | Crear una sesión tmux para el worktree. Requiere `--worktree`. Utiliza paneles nativos de iTerm2 cuando están disponibles; pase `--tmux=classic` para tmux tradicional | `claude -w feature-auth --tmux` |

102| `--tools` | Restringir qué herramientas integradas puede usar Claude. Use `""` para deshabilitar todas, `"default"` para todas, o nombres de herramientas como `"Bash,Edit,Read"` | `claude --tools "Bash,Edit,Read"` |

103| `--verbose` | Habilitar registro detallado, muestra salida completa turno por turno | `claude --verbose` |

104| `--version`, `-v` | Mostrar el número de versión | `claude -v` |

105| `--worktree`, `-w` | Iniciar Claude en un [git worktree](/es/common-workflows#run-parallel-claude-code-sessions-with-git-worktrees) aislado en `<repo>/.claude/worktrees/<name>`. Si no se proporciona un nombre, se genera automáticamente | `claude -w feature-auth` |

106 

107### Banderas de indicación del sistema

108 

109Claude Code proporciona cuatro banderas para personalizar el indicador del sistema. Las cuatro funcionan tanto en modo interactivo como no interactivo.

110 

111| Bandera | Comportamiento | Ejemplo |

112| :---------------------------- | :------------------------------------------------------- | :------------------------------------------------------ |

113| `--system-prompt` | Reemplaza todo el indicador predeterminado | `claude --system-prompt "You are a Python expert"` |

114| `--system-prompt-file` | Reemplaza con contenido del archivo | `claude --system-prompt-file ./prompts/review.txt` |

115| `--append-system-prompt` | Agrega al indicador predeterminado | `claude --append-system-prompt "Always use TypeScript"` |

116| `--append-system-prompt-file` | Agrega contenido del archivo al indicador predeterminado | `claude --append-system-prompt-file ./style-rules.txt` |

117 

118`--system-prompt` y `--system-prompt-file` son mutuamente excluyentes. Las banderas de adición se pueden combinar con cualquiera de las banderas de reemplazo.

119 

120Para la mayoría de los casos de uso, use una bandera de adición. Agregar preserva las capacidades integradas de Claude Code mientras agrega sus requisitos. Use una bandera de reemplazo solo cuando necesite control completo sobre el indicador del sistema.

121 

122## Ver también

123 

124* [Extensión de Chrome](/es/chrome) - Automatización de navegador y pruebas web

125* [Modo interactivo](/es/interactive-mode) - Atajos de teclado, modos de entrada y características interactivas

126* [Guía de inicio rápido](/es/quickstart) - Introducción a Claude Code

127* [Flujos de trabajo comunes](/es/common-workflows) - Flujos de trabajo avanzados y patrones

128* [Configuración](/es/settings) - Opciones de configuración

129* [Documentación de Agent SDK](/es/agent-sdk/overview) - Uso programático e integraciones

code-review.md +279 −0 created

Details

1> ## Documentation Index

2> Fetch the complete documentation index at: https://code.claude.com/docs/llms.txt

3> Use this file to discover all available pages before exploring further.

4 

5# Code Review

6 

7> Configure revisiones automatizadas de PR que detecten errores lógicos, vulnerabilidades de seguridad y regresiones mediante análisis multiagente de su base de código completa

8 

9<Note>

10 Code Review está en vista previa de investigación, disponible para suscripciones de [Team y Enterprise](https://claude.ai/admin-settings/claude-code). No está disponible para organizaciones con [Zero Data Retention](/es/zero-data-retention) habilitado.

11</Note>

12 

13Code Review analiza sus solicitudes de extracción de GitHub y publica hallazgos como comentarios en línea en las líneas de código donde encontró problemas. Una flota de agentes especializados examina los cambios de código en el contexto de su base de código completa, buscando errores lógicos, vulnerabilidades de seguridad, casos límite rotos y regresiones sutiles.

14 

15Los hallazgos se etiquetan por severidad y no aprueban ni bloquean su PR, por lo que los flujos de trabajo de revisión existentes permanecen intactos. Puede ajustar lo que Claude marca agregando un archivo `CLAUDE.md` o `REVIEW.md` a su repositorio.

16 

17Para ejecutar Claude en su propia infraestructura de CI en lugar de este servicio administrado, consulte [GitHub Actions](/es/github-actions) o [GitLab CI/CD](/es/gitlab-ci-cd). Para repositorios en una instancia de GitHub autohospedada, consulte [GitHub Enterprise Server](/es/github-enterprise-server).

18 

19Esta página cubre:

20 

21* [Cómo funcionan las revisiones](#how-reviews-work)

22* [Configuración](#set-up-code-review)

23* [Disparar revisiones manualmente](#manually-trigger-reviews) con `@claude review` y `@claude review once`

24* [Personalizar revisiones](#customize-reviews) con `CLAUDE.md` y `REVIEW.md`

25* [Precios](#pricing)

26* [Solución de problemas](#troubleshooting) ejecuciones fallidas y comentarios faltantes

27 

28## Cómo funcionan las revisiones

29 

30Una vez que un administrador [habilita Code Review](#set-up-code-review) para su organización, las revisiones se activan cuando se abre un PR, en cada push, o cuando se solicita manualmente, según el comportamiento configurado del repositorio. Comentar `@claude review` [inicia revisiones en un PR](#manually-trigger-reviews) en cualquier modo.

31 

32Cuando se ejecuta una revisión, múltiples agentes analizan el diff y el código circundante en paralelo en la infraestructura de Anthropic. Cada agente busca una clase diferente de problema, luego un paso de verificación verifica los candidatos contra el comportamiento real del código para filtrar falsos positivos. Los resultados se desduplican, se clasifican por severidad y se publican como comentarios en línea en las líneas específicas donde se encontraron problemas, con un resumen en el cuerpo de la revisión. Si no se encuentran problemas, Claude publica un breve comentario de confirmación en el PR.

33 

34Las revisiones se escalan en costo con el tamaño y la complejidad del PR, completándose en un promedio de 20 minutos. Los administradores pueden monitorear la actividad de revisión y el gasto a través del [panel de análisis](#view-usage).

35 

36### Niveles de severidad

37 

38Cada hallazgo se etiqueta con un nivel de severidad:

39 

40| Marcador | Severidad | Significado |

41| :------- | :----------- | :--------------------------------------------------------------------------- |

42| 🔴 | Importante | Un error que debe corregirse antes de fusionar |

43| 🟡 | Nit | Un problema menor, vale la pena corregir pero no bloqueante |

44| 🟣 | Preexistente | Un error que existe en la base de código pero no fue introducido por este PR |

45 

46Los hallazgos incluyen una sección de razonamiento extendido contraíble que puede expandir para entender por qué Claude marcó el problema y cómo verificó el problema.

47 

48### Calificar y responder a hallazgos

49 

50Cada comentario de revisión de Claude llega con 👍 y 👎 ya adjuntos para que ambos botones aparezcan en la interfaz de usuario de GitHub para calificación de un clic. Haga clic en 👍 si el hallazgo fue útil o 👎 si fue incorrecto o ruidoso. Anthropic recopila conteos de reacciones después de que se fusiona el PR y los utiliza para ajustar el revisor. Las reacciones no activan una re-revisión ni cambian nada en el PR.

51 

52Responder a un comentario en línea no solicita a Claude que responda o actualice el PR. Para actuar sobre un hallazgo, corrija el código y haga push. Si el PR está suscrito a revisiones activadas por push, la siguiente ejecución resuelve el hilo cuando se corrige el problema. Para solicitar una revisión nueva sin hacer push, comente `@claude review once` como un [comentario de PR de nivel superior](#manually-trigger-reviews).

53 

54### Salida de ejecución de verificación

55 

56Más allá de los comentarios de revisión en línea, cada revisión completa la ejecución de verificación **Claude Code Review** que aparece junto a sus verificaciones de CI. Expanda su enlace **Details** para ver un resumen de cada hallazgo en un solo lugar, ordenado por severidad:

57 

58| Severidad | Archivo:Línea | Problema |

59| ------------- | ------------------------- | ------------------------------------------------------------------------------------------------------- |

60| 🔴 Importante | `src/auth/session.ts:142` | La actualización de token corre una carrera con el cierre de sesión, dejando sesiones obsoletas activas |

61| 🟡 Nit | `src/auth/session.ts:88` | `parseExpiry` devuelve silenciosamente 0 en entrada malformada |

62 

63Cada hallazgo también aparece como una anotación en la pestaña **Files changed**, marcado directamente en las líneas de diff relevantes. Los hallazgos importantes se representan con un marcador rojo, los nits con una advertencia amarilla y los errores preexistentes con un aviso gris. Las anotaciones y la tabla de severidad se escriben en la ejecución de verificación independientemente de los comentarios de revisión en línea, por lo que permanecen disponibles incluso si GitHub rechaza un comentario en línea en una línea que se movió.

64 

65La ejecución de verificación siempre se completa con una conclusión neutral para que nunca bloquee la fusión a través de reglas de protección de rama. Si desea bloquear fusiones en hallazgos de Code Review, lea el desglose de severidad de la salida de ejecución de verificación en su propio CI. La última línea del texto de Details es un comentario legible por máquina que su flujo de trabajo puede analizar con `gh` y jq:

66 

67```bash theme={null}

68gh api repos/OWNER/REPO/check-runs/CHECK_RUN_ID \

69 --jq '.output.text | split("bughunter-severity: ")[1] | split(" -->")[0] | fromjson'

70```

71 

72Esto devuelve un objeto JSON con conteos por severidad, por ejemplo `{"normal": 2, "nit": 1, "pre_existing": 0}`. La clave `normal` contiene el conteo de hallazgos Importantes; un valor distinto de cero significa que Claude encontró al menos un error que vale la pena corregir antes de fusionar.

73 

74### Qué verifica Code Review

75 

76Por defecto, Code Review se enfoca en la corrección: errores que romperían la producción, no preferencias de formato o cobertura de pruebas faltante. Puede expandir lo que verifica [agregando archivos de orientación](#customize-reviews) a su repositorio.

77 

78## Configurar Code Review

79 

80Un administrador habilita Code Review una vez para la organización y selecciona qué repositorios incluir.

81 

82<Steps>

83 <Step title="Abrir configuración de administrador de Claude Code">

84 Vaya a [claude.ai/admin-settings/claude-code](https://claude.ai/admin-settings/claude-code) y encuentre la sección Code Review. Necesita acceso de administrador a su organización de Claude y permiso para instalar GitHub Apps en su organización de GitHub.

85 </Step>

86 

87 <Step title="Iniciar configuración">

88 Haga clic en **Setup**. Esto inicia el flujo de instalación de GitHub App.

89 </Step>

90 

91 <Step title="Instalar la Claude GitHub App">

92 Siga las indicaciones para instalar la Claude GitHub App en su organización de GitHub. La aplicación solicita estos permisos de repositorio:

93 

94 * **Contents**: lectura y escritura

95 * **Issues**: lectura y escritura

96 * **Pull requests**: lectura y escritura

97 

98 Code Review utiliza acceso de lectura a contenidos y acceso de escritura a solicitudes de extracción. El conjunto de permisos más amplio también admite [GitHub Actions](/es/github-actions) si lo habilita más adelante.

99 </Step>

100 

101 <Step title="Seleccionar repositorios">

102 Elija qué repositorios habilitar para Code Review. Si no ve un repositorio, asegúrese de haber dado a la Claude GitHub App acceso a él durante la instalación. Puede agregar más repositorios más adelante.

103 </Step>

104 

105 <Step title="Establecer disparadores de revisión por repositorio">

106 Después de que se complete la configuración, la sección Code Review muestra sus repositorios en una tabla. Para cada repositorio, use el menú desplegable **Review Behavior** para elegir cuándo se ejecutan las revisiones:

107 

108 * **Once after PR creation**: la revisión se ejecuta una vez cuando se abre un PR o se marca como listo para revisión

109 * **After every push**: la revisión se ejecuta en cada push a la rama del PR, detectando nuevos problemas a medida que el PR evoluciona y resolviendo automáticamente los hilos cuando corrige problemas marcados

110 * **Manual**: las revisiones comienzan solo cuando alguien [comenta `@claude review` o `@claude review once` en un PR](#manually-trigger-reviews); `@claude review` también suscribe el PR a revisiones en push posteriores

111 

112 Revisar en cada push ejecuta la mayoría de revisiones y cuesta más. El modo manual es útil para repositorios de alto tráfico donde desea optar por revisión en PR específicos, o para comenzar a revisar sus PR solo cuando estén listos.

113 </Step>

114</Steps>

115 

116La tabla de repositorios también muestra el costo promedio por revisión para cada repositorio basado en la actividad reciente. Use el menú de acciones de fila para activar o desactivar Code Review por repositorio, o para eliminar un repositorio por completo.

117 

118Para verificar la configuración, abra un PR de prueba. Si eligió un disparador automático, aparece una ejecución de verificación llamada **Claude Code Review** dentro de unos minutos. Si eligió Manual, comente `@claude review` en el PR para iniciar la primera revisión. Si no aparece ninguna ejecución de verificación, confirme que el repositorio esté listado en su configuración de administrador y que la Claude GitHub App tenga acceso a él.

119 

120## Disparar revisiones manualmente

121 

122Dos comandos de comentario inician una revisión bajo demanda. Ambos funcionan independientemente del disparador configurado del repositorio, por lo que puede usarlos para optar por PR específicos en revisión en modo Manual o para obtener una re-revisión inmediata en otros modos.

123 

124| Comando | Lo que hace |

125| :-------------------- | :------------------------------------------------------------------------------- |

126| `@claude review` | Inicia una revisión y suscribe el PR a revisiones activadas por push en adelante |

127| `@claude review once` | Inicia una única revisión sin suscribir el PR a push futuros |

128 

129Use `@claude review once` cuando desee comentarios sobre el estado actual de un PR pero no desee que cada push posterior incurra en una revisión. Esto es útil para PR de larga duración con push frecuentes, o cuando desea una segunda opinión única sin cambiar el comportamiento de revisión del PR.

130 

131Para que cualquiera de los comandos active una revisión:

132 

133* Publíquelo como un comentario de PR de nivel superior, no un comentario en línea en una línea de diff

134* Ponga el comando al inicio del comentario, con `once` en la misma línea si está usando la forma de un solo disparo

135* Debe tener acceso de propietario, miembro o colaborador al repositorio

136* El PR debe estar abierto

137 

138A diferencia de los disparadores automáticos, los disparadores manuales se ejecutan en PR de borrador, ya que una solicitud explícita señala que desea la revisión ahora independientemente del estado de borrador.

139 

140Si una revisión ya se está ejecutando en ese PR, la solicitud se pone en cola hasta que se complete la revisión en progreso. Puede monitorear el progreso a través de la ejecución de verificación en el PR.

141 

142## Personalizar revisiones

143 

144Code Review lee dos archivos de su repositorio para guiar lo que marca. Difieren en cuán fuertemente influyen en la revisión:

145 

146* **`CLAUDE.md`**: instrucciones de proyecto compartidas que Claude Code utiliza para todas las tareas, no solo revisiones. Code Review lo lee como contexto de proyecto e marca las violaciones recién introducidas como nits.

147* **`REVIEW.md`**: instrucciones solo de revisión, inyectadas directamente en cada agente en la canalización de revisión como prioridad más alta. Úselo para cambiar lo que se marca, con qué severidad y cómo se reportan los hallazgos.

148 

149### CLAUDE.md

150 

151Code Review lee sus archivos `CLAUDE.md` del repositorio y trata las violaciones recién introducidas como hallazgos de [nivel nit](#severity-levels). Esto funciona bidireccionalamente: si su PR cambia el código de una manera que hace que una declaración `CLAUDE.md` esté desactualizada, Claude marca que los documentos necesitan actualización también.

152 

153Claude lee archivos `CLAUDE.md` en cada nivel de su jerarquía de directorios, por lo que las reglas en el `CLAUDE.md` de un subdirectorio se aplican solo a archivos bajo esa ruta. Consulte la [documentación de memoria](/es/memory) para obtener más información sobre cómo funciona `CLAUDE.md`.

154 

155Para orientación específica de revisión que no desea aplicar a sesiones generales de Claude Code, use [`REVIEW.md`](#review-md) en su lugar.

156 

157### REVIEW\.md

158 

159`REVIEW.md` es un archivo en la raíz de su repositorio que anula cómo se comporta Code Review en su repositorio. Su contenido se inyecta en el prompt del sistema de cada agente en la canalización de revisión como el bloque de instrucción de prioridad más alta, tomando precedencia sobre la orientación de revisión predeterminada.

160 

161Porque se pega textualmente, `REVIEW.md` es instrucciones simples: la [sintaxis de importación `@`](/es/memory#import-additional-files) no se expande, y los archivos referenciados no se leen en el prompt. Ponga las reglas que desea aplicar directamente en el archivo.

162 

163#### Qué puede ajustar

164 

165`REVIEW.md` es markdown de forma libre, por lo que cualquier cosa que pueda expresar como una instrucción de revisión está en el alcance. Los patrones a continuación tienen el mayor impacto en la práctica.

166 

167**Severidad**: redefina qué significa 🔴 Importante para su repositorio. La calibración predeterminada se dirige al código de producción; un repositorio de documentos, un repositorio de configuración, o un prototipo podría querer una definición mucho más estrecha. Indique explícitamente qué clases de hallazgo son Importantes y cuáles son Nit como máximo. También puede escalar en la otra dirección, por ejemplo tratando cualquier violación de `CLAUDE.md` como Importante en lugar del nit predeterminado.

168 

169**Volumen de nit**: limite cuántos comentarios 🟡 Nit publica una única revisión. La prosa y los archivos de configuración pueden pulirse para siempre. Un límite como "reportar como máximo cinco nits, mencionar el resto como un conteo en el resumen" mantiene las revisiones accionables.

170 

171**Reglas de omisión**: enumere rutas, patrones de rama y categorías de hallazgo donde Claude no debe publicar hallazgos. Los candidatos comunes son código generado, archivos de bloqueo, dependencias vendidas y ramas creadas por máquinas, junto con cualquier cosa que su CI ya aplique como linting o verificación ortográfica. Para rutas que justifiquen alguna revisión pero no escrutinio completo, establezca una barra más alta en lugar de omitir completamente: "en `scripts/`, solo reportar si está cerca de cierto y es severo."

172 

173**Verificaciones específicas del repositorio**: agregue reglas que desea marcar en cada PR, como "las nuevas rutas de API deben tener una prueba de integración." Porque `REVIEW.md` se inyecta como prioridad más alta, estas se aterrizan más confiablemente que las mismas reglas en un `CLAUDE.md` largo.

174 

175**Barra de verificación**: requiera evidencia antes de que se publique una clase de hallazgo. Por ejemplo, "las afirmaciones de comportamiento necesitan una cita `file:line` en la fuente, no una inferencia de nombres" reduce falsos positivos que de otro modo costarían al autor un viaje de ida y vuelta.

176 

177**Convergencia de re-revisión**: dígale a Claude cómo comportarse cuando un PR ya ha sido revisado. Una regla como "después de la primera revisión, suprima nits nuevos y publique hallazgos Importantes solo" detiene una corrección de una línea de alcanzar la ronda siete solo por estilo.

178 

179**Forma de resumen**: pida que el cuerpo de revisión se abra con un conteo de una línea como `2 factual, 4 style`, y que comience con "no hay problemas factuales" cuando ese sea el caso. El autor quiere saber la forma del trabajo antes de los detalles.

180 

181#### Ejemplo

182 

183Este `REVIEW.md` recalibra la severidad para un servicio backend, limita nits, omite archivos generados y agrega verificaciones específicas del repositorio.

184 

185```markdown theme={null}

186# Instrucciones de revisión

187 

188## Qué significa Importante aquí

189 

190Reserve Importante para hallazgos que romperían el comportamiento, filtrarían datos,

191o bloquearían un retroceso: lógica incorrecta, consultas de base de datos sin alcance, PII

192en registros o mensajes de error, y migraciones que no son compatibles hacia atrás.

193El estilo, nombres y sugerencias de refactorización son Nit como máximo.

194 

195## Limitar los nits

196 

197Reportar como máximo cinco Nits por revisión. Si encontró más, diga "más N

198elementos similares" en el resumen en lugar de publicarlos en línea. Si

199todo lo que encontró es un Nit, comience el resumen con "Sin problemas bloqueantes."

200 

201## No reportar

202 

203- Cualquier cosa que CI ya aplique: lint, formato, errores de tipo

204- Archivos generados bajo `src/gen/` y cualquier archivo `*.lock`

205- Código solo de prueba que intencionalmente viola reglas de producción

206 

207## Siempre verificar

208 

209- Las nuevas rutas de API tienen una prueba de integración

210- Las líneas de registro no incluyen direcciones de correo electrónico, IDs de usuario o cuerpos de solicitud

211- Las consultas de base de datos están limitadas al inquilino del llamador

212```

213 

214#### Mantenerlo enfocado

215 

216La longitud tiene un costo: un `REVIEW.md` largo diluye las reglas que más importan. Manténgalo en instrucciones que cambien el comportamiento de revisión, y deje el contexto general del proyecto en `CLAUDE.md`.

217 

218## Ver uso

219 

220Vaya a [claude.ai/analytics/code-review](https://claude.ai/analytics/code-review) para ver la actividad de Code Review en toda su organización. El panel muestra:

221 

222| Sección | Lo que muestra |

223| :------------------- | :-------------------------------------------------------------------------------------------------------------- |

224| PRs reviewed | Conteo diario de solicitudes de extracción revisadas durante el rango de tiempo seleccionado |

225| Cost weekly | Gasto semanal en Code Review |

226| Feedback | Conteo de comentarios de revisión que se resolvieron automáticamente porque un desarrollador abordó el problema |

227| Repository breakdown | Conteos por repositorio de PR revisados y comentarios resueltos |

228 

229La tabla de repositorios en la configuración de administrador también muestra el costo promedio por revisión para cada repositorio. Las cifras de costo del panel son estimaciones para monitorear la actividad; para gasto preciso en factura, consulte su factura de Anthropic.

230 

231## Precios

232 

233Code Review se factura según el uso de tokens. Cada revisión promedia \$15-25 en costo, escalando con el tamaño del PR, la complejidad de la base de código y cuántos problemas requieren verificación. El uso de Code Review se factura por separado a través de [extra usage](https://support.claude.com/en/articles/12429409-extra-usage-for-paid-claude-plans) y no cuenta contra el uso incluido de su plan.

234 

235El disparador de revisión que elija afecta el costo total:

236 

237* **Once after PR creation**: se ejecuta una vez por PR

238* **After every push**: se ejecuta en cada push, multiplicando el costo por el número de push

239* **Manual**: sin revisiones hasta que alguien comente `@claude review` en un PR

240 

241En cualquier modo, comentar `@claude review` [opta el PR en revisiones activadas por push](#manually-trigger-reviews), por lo que se acumula costo adicional por push después de ese comentario. Para ejecutar una única revisión sin suscribirse a push futuros, comente `@claude review once` en su lugar.

242 

243Los costos aparecen en su factura de Anthropic independientemente de si su organización usa Amazon Bedrock o Google Vertex AI para otras características de Claude Code. Para establecer un límite de gasto mensual para Code Review, vaya a [claude.ai/admin-settings/usage](https://claude.ai/admin-settings/usage) y configure el límite para el servicio Claude Code Review.

244 

245Monitoree el gasto a través del gráfico de costo semanal en [analytics](#view-usage) o la columna de costo promedio por repositorio en la configuración de administrador.

246 

247## Solución de problemas

248 

249Las ejecuciones de revisión son de mejor esfuerzo. Una ejecución fallida nunca bloquea su PR, pero tampoco se reintenta por sí sola. Esta sección cubre cómo recuperarse de una ejecución fallida y dónde buscar cuando la ejecución de verificación reporta problemas que no puede encontrar.

250 

251### Reactivar una revisión fallida o agotada por tiempo

252 

253Cuando la infraestructura de revisión golpea un error interno o excede su límite de tiempo, la ejecución de verificación se completa con un título de **Code review encountered an error** o **Code review timed out**. La conclusión sigue siendo neutral, por lo que nada bloquea su fusión, pero no se publican hallazgos.

254 

255Para ejecutar la revisión nuevamente, comente `@claude review once` en el PR. Esto inicia una revisión nueva sin suscribir el PR a push futuros. Si el PR ya está suscrito a revisiones activadas por push, hacer push de un nuevo commit también inicia una nueva revisión.

256 

257El botón **Re-run** en la pestaña Checks de GitHub no reactiva Code Review. Use el comando de comentario o un nuevo push en su lugar.

258 

259### La revisión no se ejecutó y el PR muestra un mensaje de límite de gasto

260 

261Cuando se alcanza el límite de gasto mensual de su organización, Code Review publica un único comentario en el PR explicando que la revisión fue omitida. Las revisiones se reanudan automáticamente al inicio del próximo período de facturación, o inmediatamente cuando un administrador aumenta el límite en [claude.ai/admin-settings/usage](https://claude.ai/admin-settings/usage).

262 

263### Encontrar problemas que no se muestran como comentarios en línea

264 

265Si el título de la ejecución de verificación dice que se encontraron problemas pero no ve comentarios de revisión en línea en el diff, busque en estas otras ubicaciones donde se muestran los hallazgos:

266 

267* **Check run Details**: haga clic en **Details** junto a la verificación Claude Code Review en la pestaña Checks. La tabla de severidad enumera cada hallazgo con su archivo, línea y resumen independientemente de si el comentario en línea fue aceptado.

268* **Files changed annotations**: abra la pestaña **Files changed** en el PR. Los hallazgos se representan como anotaciones adjuntas directamente a las líneas de diff, separadas de los comentarios de revisión.

269* **Review body**: si hizo push al PR mientras se ejecutaba una revisión, algunos hallazgos pueden hacer referencia a líneas que ya no existen en el diff actual. Esos aparecen bajo un encabezado **Additional findings** en el texto del cuerpo de revisión en lugar de como comentarios en línea.

270 

271## Recursos relacionados

272 

273Code Review está diseñado para funcionar junto con el resto de Claude Code. Si desea ejecutar revisiones localmente antes de abrir un PR, necesita una configuración autohospedada, o desea profundizar en cómo `CLAUDE.md` forma el comportamiento de Claude en todas las herramientas, estas páginas son buenos siguientes pasos:

274 

275* [Plugins](/es/discover-plugins): explore el mercado de plugins, incluido un plugin `code-review` para ejecutar revisiones bajo demanda localmente antes de hacer push

276* [GitHub Actions](/es/github-actions): ejecute Claude en sus propios flujos de trabajo de GitHub Actions para automatización personalizada más allá de la revisión de código

277* [GitLab CI/CD](/es/gitlab-ci-cd): integración de Claude autohospedada para canalizaciones de GitLab

278* [Memory](/es/memory): cómo funcionan los archivos `CLAUDE.md` en Claude Code

279* [Analytics](/es/analytics): rastrear el uso de Claude Code más allá de la revisión de código

commands.md +113 −0 created

Details

1> ## Documentation Index

2> Fetch the complete documentation index at: https://code.claude.com/docs/llms.txt

3> Use this file to discover all available pages before exploring further.

4 

5# Comandos

6 

7> Referencia completa de los comandos disponibles en Claude Code, incluidos comandos integrados y skills agrupados.

8 

9Los comandos controlan Claude Code desde dentro de una sesión. Proporcionan una forma rápida de cambiar modelos, administrar permisos, limpiar contexto, ejecutar un flujo de trabajo y más.

10 

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

12 

13La tabla siguiente enumera todos los comandos incluidos en Claude Code. Las entradas marcadas como **[Skill](/es/skills#bundled-skills)** son skills agrupados. Utilizan el mismo mecanismo que los skills que escribe usted mismo: un prompt entregado a Claude, que Claude también puede invocar automáticamente cuando sea relevante. Todo lo demás es un comando integrado cuyo comportamiento está codificado en la CLI. Para agregar sus propios comandos, consulte [skills](/es/skills).

14 

15No todos los comandos aparecen para todos los usuarios. La disponibilidad depende de su plataforma, plan y entorno. Por ejemplo, `/desktop` solo aparece en macOS y Windows, y `/upgrade` solo aparece en planes Pro y Max.

16 

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

18 

19| Comando | Propósito |

20| :---------------------------------------------- | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

21| `/add-dir <path>` | Agregar un directorio de trabajo para acceso a archivos durante la sesión actual. 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` |

22| `/agents` | Administrar configuraciones de [agent](/es/sub-agents) |

23| `/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#who-can-use-claude-code-on-the-web) |

24| `/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 agente de fondo por unidad en un [git worktree](/es/common-workflows#run-parallel-claude-code-sessions-with-git-worktrees) aislado. Cada agente 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` |

25| `/branch [name]` | Crear una rama de la conversación actual en este punto. Lo cambia a la rama y preserva la original, a la que puede volver con `/resume`. Alias: `/fork`. Cuando [`CLAUDE_CODE_FORK_SUBAGENT`](/es/env-vars) está establecido, `/fork` en su lugar genera un [subagente bifurcado](/es/sub-agents#fork-the-current-conversation) y ya no es un alias para este comando |

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

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

28| `/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 |

29| `/clear` | Iniciar una nueva conversación con contexto vacío. La conversación anterior permanece disponible en `/resume`. Para liberar contexto mientras continúa la misma conversación, use `/compact` en su lugar. Alias: `/reset`, `/new` |

30| `/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. Cuando [Remote Control](/es/remote-control) está conectado, el color se sincroniza con claude.ai/code |

31| `/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) |

32| `/config` | Abrir la interfaz de [Settings](/es/settings) para ajustar tema, modelo, [estilo de salida](/es/output-styles) y otras preferencias. Alias: `/settings` |

33| `/context` | 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 |

34| `/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 |

35| `/cost` | Alias para `/usage` |

36| `/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 |

37| `/desktop` | Continuar la sesión actual en la aplicación Claude Code Desktop. Solo macOS y Windows. Alias: `/app` |

38| `/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 |

39| `/doctor` | Diagnosticar y verificar su instalación y configuración de Claude Code. Los resultados se muestran con iconos de estado. Presione `f` para que Claude corrija cualquier problema reportado |

40| `/effort [level\|auto]` | Establecer el [nivel de esfuerzo](/es/model-config#adjust-effort-level) del modelo. Acepta `low`, `medium`, `high`, `xhigh` o `max`; los niveles disponibles dependen del modelo y `max` es solo para sesión. `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 |

41| `/exit` | Salir de la CLI. Alias: `/quit` |

42| `/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 |

43| `/extra-usage` | Configurar uso extra para continuar trabajando cuando se alcanzan los límites de velocidad |

44| `/fast [on\|off]` | Alternar [fast mode](/es/fast-mode) activado o desactivado |

45| `/feedback [report]` | Enviar comentarios sobre Claude Code. Alias: `/bug` |

46| `/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 |

47| `/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. La selección persiste entre sesiones. Solo disponible en [renderizado de pantalla completa](/es/fullscreen) |

48| `/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) |

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

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

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

52| `/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 |

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

54| `/install-github-app` | Configurar la aplicación [Claude GitHub Actions](/es/github-actions) para un repositorio. Lo guía a través de la selección de un repositorio y la configuración de la integración |

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

56| `/keybindings` | Abrir o crear su archivo de configuración de atajos de teclado |

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

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

59| `/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 Claude ejecuta una verificación de mantenimiento autónoma, o el prompt en `.claude/loop.md` si está presente. Ejemplo: `/loop 5m check if the deploy finished`. Consulte [Ejecutar prompts en un horario](/es/scheduled-tasks). Alias: `/proactive` |

60| `/mcp` | Administrar conexiones de servidores MCP y autenticación OAuth |

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

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

63| `/model [model]` | Seleccionar o cambiar el modelo de IA. 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 que 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 |

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

65| `/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` |

66| `/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` |

67| `/plugin` | Administrar [plugins](/es/plugins) de Claude Code |

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

69| `/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` |

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

71| `/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 |

72| `/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 |

73| `/reload-plugins` | 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 |

74| `/remote-control` | Hacer que esta sesión esté disponible para [remote control](/es/remote-control) desde claude.ai. Alias: `/rc` |

75| `/remote-env` | Configurar el entorno remoto predeterminado para [sesiones web iniciadas con `--remote`](/es/claude-code-on-the-web#configure-your-environment) |

76| `/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 |

77| `/resume [session]` | Reanudar una conversación por ID o nombre, o abrir el selector de sesión. Alias: `/continue` |

78| `/review [PR]` | Revisar una solicitud de extracción localmente en su sesión actual. Para una revisión más profunda basada en la nube, consulte [`/ultrareview`](/es/ultrareview) |

79| `/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` |

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

81| `/schedule [description]` | Crear, actualizar, listar o ejecutar [routines](/es/routines). Claude lo guía a través de la configuración de manera conversacional. Alias: `/routines` |

82| `/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 |

83| `/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 |

84| `/setup-vertex` | Configurar autenticación de [Google Vertex AI](/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 Vertex AI por primera vez también pueden acceder a este asistente desde la pantalla de inicio de sesión |

85| `/simplify [focus]` | **[Skill](/es/skills#bundled-skills).** Revisar sus archivos recientemente modificados para problemas de reutilización de código, calidad y eficiencia, luego corregirlos. Genera tres agentes de revisión en paralelo, agrega sus hallazgos y aplica correcciones. Pase texto para enfocarse en preocupaciones específicas: `/simplify focus on memory efficiency` |

86| `/skills` | Listar [skills](/es/skills) disponibles. Presione `t` para ordenar por recuento de tokens |

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

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

89| `/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 |

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

91| `/tasks` | Listar y administrar tareas de fondo. También disponible como `/bashes` |

92| `/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 |

93| `/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 |

94| `/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, Windsurf, Alacritty o Zed |

95| `/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 |

96| `/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 |

97| `/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 |

98| `/ultrareview [PR]` | Ejecutar una revisión de código profunda y multiagente en una sandbox en la nube con [ultrareview](/es/ultrareview). Incluye 3 ejecuciones gratuitas en Pro y Max hasta el 5 de mayo de 2026, luego requiere [extra usage](https://support.claude.com/en/articles/12429409-extra-usage-for-paid-claude-plans) |

99| `/upgrade` | Abrir la página de actualización para cambiar a un nivel de plan superior |

100| `/usage` | Mostrar costo de sesión, límites de uso del plan y estadísticas de actividad. Consulte la [guía de seguimiento de costos](/es/costs#using-the-%2Fusage-command) para detalles específicos de la suscripción. `/cost` y `/stats` son alias |

101| `/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 |

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

103| `/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 |

104 

105## MCP prompts

106 

107Los 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.

108 

109## Ver también

110 

111* [Skills](/es/skills): crear sus propios comandos

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

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

common-workflows.md +1030 −0 created

Details

1> ## Documentation Index

2> Fetch the complete documentation index at: https://code.claude.com/docs/llms.txt

3> Use this file to discover all available pages before exploring further.

4 

5# Flujos de trabajo comunes

6 

7> Guías paso a paso para explorar bases de código, corregir errores, refactorizar, probar y otras tareas cotidianas con Claude Code.

8 

9Esta página cubre flujos de trabajo prácticos para el desarrollo cotidiano: explorar código desconocido, depuración, refactorización, escritura de pruebas, creación de solicitudes de extracción y gestión de sesiones. Cada sección incluye ejemplos de indicaciones que puede adaptar a sus propios proyectos. Para patrones y consejos de nivel superior, consulte [Mejores prácticas](/es/best-practices).

10 

11## Comprender nuevas bases de código

12 

13### Obtener una descripción general rápida de la base de código

14 

15Supongamos que acaba de unirse a un nuevo proyecto y necesita comprender su estructura rápidamente.

16 

17<Steps>

18 <Step title="Navegue al directorio raíz del proyecto">

19 ```bash theme={null}

20 cd /path/to/project

21 ```

22 </Step>

23 

24 <Step title="Inicie Claude Code">

25 ```bash theme={null}

26 claude

27 ```

28 </Step>

29 

30 <Step title="Solicite una descripción general de alto nivel">

31 ```text theme={null}

32 dame una descripción general de esta base de código

33 ```

34 </Step>

35 

36 <Step title="Profundice en componentes específicos">

37 ```text theme={null}

38 explica los patrones de arquitectura principales utilizados aquí

39 ```

40 

41 ```text theme={null}

42 ¿cuáles son los modelos de datos clave?

43 ```

44 

45 ```text theme={null}

46 ¿cómo se maneja la autenticación?

47 ```

48 </Step>

49</Steps>

50 

51<Tip>

52 Consejos:

53 

54 * Comience con preguntas amplias, luego reduzca a áreas específicas

55 * Pregunte sobre convenciones de codificación y patrones utilizados en el proyecto

56 * Solicite un glosario de términos específicos del proyecto

57</Tip>

58 

59### Encontrar código relevante

60 

61Supongamos que necesita localizar código relacionado con una característica o funcionalidad específica.

62 

63<Steps>

64 <Step title="Pida a Claude que encuentre archivos relevantes">

65 ```text theme={null}

66 encuentra los archivos que manejan la autenticación de usuarios

67 ```

68 </Step>

69 

70 <Step title="Obtenga contexto sobre cómo interactúan los componentes">

71 ```text theme={null}

72 ¿cómo funcionan juntos estos archivos de autenticación?

73 ```

74 </Step>

75 

76 <Step title="Comprenda el flujo de ejecución">

77 ```text theme={null}

78 rastrear el proceso de inicio de sesión de front-end a base de datos

79 ```

80 </Step>

81</Steps>

82 

83<Tip>

84 Consejos:

85 

86 * Sea específico sobre lo que está buscando

87 * Utilice el lenguaje del dominio del proyecto

88 * Instale un [plugin de inteligencia de código](/es/discover-plugins#code-intelligence) para su lenguaje para dar a Claude una navegación precisa de "ir a definición" y "buscar referencias"

89</Tip>

90 

91***

92 

93## Corregir errores de manera eficiente

94 

95Supongamos que ha encontrado un mensaje de error y necesita encontrar y corregir su origen.

96 

97<Steps>

98 <Step title="Comparta el error con Claude">

99 ```text theme={null}

100 estoy viendo un error cuando ejecuto npm test

101 ```

102 </Step>

103 

104 <Step title="Solicite recomendaciones de corrección">

105 ```text theme={null}

106 sugiere algunas formas de corregir el @ts-ignore en user.ts

107 ```

108 </Step>

109 

110 <Step title="Aplique la corrección">

111 ```text theme={null}

112 actualiza user.ts para agregar la verificación nula que sugeriste

113 ```

114 </Step>

115</Steps>

116 

117<Tip>

118 Consejos:

119 

120 * Dígale a Claude el comando para reproducir el problema y obtener un seguimiento de pila

121 * Mencione cualquier paso para reproducir el error

122 * Hágale saber a Claude si el error es intermitente o consistente

123</Tip>

124 

125***

126 

127## Refactorizar código

128 

129Supongamos que necesita actualizar código antiguo para utilizar patrones y prácticas modernas.

130 

131<Steps>

132 <Step title="Identifique código heredado para refactorización">

133 ```text theme={null}

134 encuentra el uso de API obsoleta en nuestra base de código

135 ```

136 </Step>

137 

138 <Step title="Obtenga recomendaciones de refactorización">

139 ```text theme={null}

140 sugiere cómo refactorizar utils.js para usar características modernas de JavaScript

141 ```

142 </Step>

143 

144 <Step title="Aplique los cambios de manera segura">

145 ```text theme={null}

146 refactoriza utils.js para usar características de ES2024 manteniendo el mismo comportamiento

147 ```

148 </Step>

149 

150 <Step title="Verifique la refactorización">

151 ```text theme={null}

152 ejecuta pruebas para el código refactorizado

153 ```

154 </Step>

155</Steps>

156 

157<Tip>

158 Consejos:

159 

160 * Pida a Claude que explique los beneficios del enfoque moderno

161 * Solicite que los cambios mantengan la compatibilidad hacia atrás cuando sea necesario

162 * Realice la refactorización en incrementos pequeños y comprobables

163</Tip>

164 

165***

166 

167## Usar subagentes especializados

168 

169Supongamos que desea utilizar subagentes de IA especializados para manejar tareas específicas de manera más efectiva.

170 

171<Steps>

172 <Step title="Ver subagentes disponibles">

173 ```text theme={null}

174 /agents

175 ```

176 

177 Esto muestra todos los subagentes disponibles y le permite crear otros nuevos.

178 </Step>

179 

180 <Step title="Usar subagentes automáticamente">

181 Claude Code delega automáticamente tareas apropiadas a subagentes especializados:

182 

183 ```text theme={null}

184 revisa mis cambios de código recientes para problemas de seguridad

185 ```

186 

187 ```text theme={null}

188 ejecuta todas las pruebas y corrige cualquier fallo

189 ```

190 </Step>

191 

192 <Step title="Solicitar explícitamente subagentes específicos">

193 ```text theme={null}

194 usa el subagente code-reviewer para verificar el módulo de autenticación

195 ```

196 

197 ```text theme={null}

198 haz que el subagente debugger investigue por qué los usuarios no pueden iniciar sesión

199 ```

200 </Step>

201 

202 <Step title="Crear subagentes personalizados para su flujo de trabajo">

203 ```text theme={null}

204 /agents

205 ```

206 

207 Luego seleccione "Crear nuevo subagente" y siga las indicaciones para definir:

208 

209 * Un identificador único que describa el propósito del subagente (por ejemplo, `code-reviewer`, `api-designer`).

210 * Cuándo Claude debe usar este agente

211 * Qué herramientas puede acceder

212 * Un indicador del sistema que describa el rol y comportamiento del agente

213 </Step>

214</Steps>

215 

216<Tip>

217 Consejos:

218 

219 * Cree subagentes específicos del proyecto en `.claude/agents/` para compartir en equipo

220 * Utilice campos `description` descriptivos para habilitar la delegación automática

221 * Limite el acceso a herramientas a lo que cada subagente realmente necesita

222 * Consulte la [documentación de subagentes](/es/sub-agents) para ejemplos detallados

223</Tip>

224 

225***

226 

227## Usar Plan Mode para análisis seguro de código

228 

229Plan Mode instruye a Claude para crear un plan analizando la base de código con operaciones de solo lectura, perfecto para explorar bases de código, planificar cambios complejos o revisar código de manera segura. En Plan Mode, Claude utiliza [`AskUserQuestion`](/es/tools-reference) para recopilar requisitos y aclarar sus objetivos antes de proponer un plan.

230 

231### Cuándo usar Plan Mode

232 

233* **Implementación de múltiples pasos**: Cuando su característica requiere hacer ediciones en muchos archivos

234* **Exploración de código**: Cuando desea investigar la base de código a fondo antes de cambiar nada

235* **Desarrollo interactivo**: Cuando desea iterar en la dirección con Claude

236 

237### Cómo usar Plan Mode

238 

239**Activar Plan Mode durante una sesión**

240 

241Puede cambiar a Plan Mode durante una sesión usando **Shift+Tab** para ciclar a través de modos de permiso.

242 

243Si está en Normal Mode, **Shift+Tab** primero cambia a Auto-Accept Mode, indicado por `⏵⏵ accept edits on` en la parte inferior de la terminal. Un **Shift+Tab** posterior cambiará a Plan Mode, indicado por `⏸ plan mode on`.

244 

245**Iniciar una nueva sesión en Plan Mode**

246 

247Para iniciar una nueva sesión en Plan Mode, use la bandera `--permission-mode plan`:

248 

249```bash theme={null}

250claude --permission-mode plan

251```

252 

253**Ejecutar consultas "sin interfaz" en Plan Mode**

254 

255También puede ejecutar una consulta en Plan Mode directamente con `-p` (es decir, en ["modo sin interfaz"](/es/headless)):

256 

257```bash theme={null}

258claude --permission-mode plan -p "Analiza el sistema de autenticación y sugiere mejoras"

259```

260 

261### Ejemplo: Planificar una refactorización compleja

262 

263```bash theme={null}

264claude --permission-mode plan

265```

266 

267```text theme={null}

268Necesito refactorizar nuestro sistema de autenticación para usar OAuth2. Crea un plan de migración detallado.

269```

270 

271Claude analiza la implementación actual y crea un plan integral. Refine con seguimientos:

272 

273```text theme={null}

274¿Qué hay sobre la compatibilidad hacia atrás?

275```

276 

277```text theme={null}

278¿Cómo deberíamos manejar la migración de la base de datos?

279```

280 

281<Tip>Presione `Ctrl+G` para abrir el plan en su editor de texto predeterminado, donde puede editarlo directamente antes de que Claude continúe.</Tip>

282 

283Cuando acepta un plan, Claude automáticamente nombra la sesión a partir del contenido del plan. El nombre aparece en la barra de indicación y en el selector de sesión. Si ya ha establecido un nombre con `--name` o `/rename`, aceptar un plan no lo sobrescribirá.

284 

285### Configurar Plan Mode como predeterminado

286 

287```json theme={null}

288// .claude/settings.json

289{

290 "permissions": {

291 "defaultMode": "plan"

292 }

293}

294```

295 

296Consulte la [documentación de configuración](/es/settings#available-settings) para más opciones de configuración.

297 

298***

299 

300## Trabajar con pruebas

301 

302Supongamos que necesita agregar pruebas para código no cubierto.

303 

304<Steps>

305 <Step title="Identifique código no probado">

306 ```text theme={null}

307 encuentra funciones en NotificationsService.swift que no están cubiertas por pruebas

308 ```

309 </Step>

310 

311 <Step title="Genere andamiaje de prueba">

312 ```text theme={null}

313 agrega pruebas para el servicio de notificaciones

314 ```

315 </Step>

316 

317 <Step title="Agregue casos de prueba significativos">

318 ```text theme={null}

319 agrega casos de prueba para condiciones de borde en el servicio de notificaciones

320 ```

321 </Step>

322 

323 <Step title="Ejecute y verifique las pruebas">

324 ```text theme={null}

325 ejecuta las nuevas pruebas y corrige cualquier fallo

326 ```

327 </Step>

328</Steps>

329 

330Claude puede generar pruebas que sigan los patrones y convenciones existentes de su proyecto. Al solicitar pruebas, sea específico sobre qué comportamiento desea verificar. Claude examina sus archivos de prueba existentes para coincidir con el estilo, marcos y patrones de afirmación ya en uso.

331 

332Para una cobertura integral, pida a Claude que identifique casos extremos que podría haber perdido. Claude puede analizar sus rutas de código y sugerir pruebas para condiciones de error, valores límite e entradas inesperadas que son fáciles de pasar por alto.

333 

334***

335 

336## Crear solicitudes de extracción

337 

338Puede crear solicitudes de extracción pidiendo a Claude directamente ("crear una pr para mis cambios"), o guiar a Claude a través de ella paso a paso:

339 

340<Steps>

341 <Step title="Resuma sus cambios">

342 ```text theme={null}

343 resume los cambios que he hecho en el módulo de autenticación

344 ```

345 </Step>

346 

347 <Step title="Genere una solicitud de extracción">

348 ```text theme={null}

349 crear una pr

350 ```

351 </Step>

352 

353 <Step title="Revise y refine">

354 ```text theme={null}

355 mejora la descripción de la PR con más contexto sobre las mejoras de seguridad

356 ```

357 </Step>

358</Steps>

359 

360Cuando crea una PR usando `gh pr create`, la sesión se vincula automáticamente a esa PR. Puede reanudarla más tarde con `claude --from-pr <number>`.

361 

362<Tip>

363 Revise la PR generada por Claude antes de enviarla y pida a Claude que destaque los riesgos potenciales o consideraciones.

364</Tip>

365 

366## Manejar documentación

367 

368Supongamos que necesita agregar o actualizar documentación para su código.

369 

370<Steps>

371 <Step title="Identifique código sin documentar">

372 ```text theme={null}

373 encuentra funciones sin comentarios JSDoc adecuados en el módulo de autenticación

374 ```

375 </Step>

376 

377 <Step title="Genere documentación">

378 ```text theme={null}

379 agrega comentarios JSDoc a las funciones sin documentar en auth.js

380 ```

381 </Step>

382 

383 <Step title="Revise y mejore">

384 ```text theme={null}

385 mejora la documentación generada con más contexto y ejemplos

386 ```

387 </Step>

388 

389 <Step title="Verifique la documentación">

390 ```text theme={null}

391 verifica si la documentación sigue nuestros estándares de proyecto

392 ```

393 </Step>

394</Steps>

395 

396<Tip>

397 Consejos:

398 

399 * Especifique el estilo de documentación que desea (JSDoc, docstrings, etc.)

400 * Solicite ejemplos en la documentación

401 * Solicite documentación para API públicas, interfaces y lógica compleja

402</Tip>

403 

404***

405 

406## Trabajar en notas y carpetas que no son código

407 

408Claude Code funciona en cualquier directorio. Ejecútelo dentro de una bóveda de notas, una carpeta de documentación o cualquier colección de archivos markdown para buscar, editar y reorganizar contenido de la misma manera que lo haría con código.

409 

410El directorio `.claude/` y `CLAUDE.md` se encuentran junto a los directorios de configuración de otras herramientas sin conflicto. Claude lee archivos nuevos en cada llamada de herramienta, por lo que ve las ediciones que realiza en otra aplicación la próxima vez que lee ese archivo.

411 

412***

413 

414## Trabajar con imágenes

415 

416Supongamos que necesita trabajar con imágenes en su base de código y desea la ayuda de Claude para analizar el contenido de la imagen.

417 

418<Steps>

419 <Step title="Agregue una imagen a la conversación">

420 Puede usar cualquiera de estos métodos:

421 

422 1. Arrastre y suelte una imagen en la ventana de Claude Code

423 2. Copie una imagen y péguela en la CLI con ctrl+v (No use cmd+v)

424 3. Proporcione una ruta de imagen a Claude. Por ejemplo, "Analiza esta imagen: /path/to/your/image.png"

425 </Step>

426 

427 <Step title="Pida a Claude que analice la imagen">

428 ```text theme={null}

429 ¿Qué muestra esta imagen?

430 ```

431 

432 ```text theme={null}

433 Describe los elementos de la interfaz de usuario en esta captura de pantalla

434 ```

435 

436 ```text theme={null}

437 ¿Hay algún elemento problemático en este diagrama?

438 ```

439 </Step>

440 

441 <Step title="Usar imágenes para contexto">

442 ```text theme={null}

443 Aquí hay una captura de pantalla del error. ¿Qué lo está causando?

444 ```

445 

446 ```text theme={null}

447 Este es nuestro esquema de base de datos actual. ¿Cómo deberíamos modificarlo para la nueva característica?

448 ```

449 </Step>

450 

451 <Step title="Obtenga sugerencias de código del contenido visual">

452 ```text theme={null}

453 Generar CSS para coincidir con este mockup de diseño

454 ```

455 

456 ```text theme={null}

457 ¿Qué estructura HTML recrearía este componente?

458 ```

459 </Step>

460</Steps>

461 

462<Tip>

463 Consejos:

464 

465 * Use imágenes cuando las descripciones de texto serían poco claras o engorrosas

466 * Incluya capturas de pantalla de errores, diseños de interfaz de usuario o diagramas para mejor contexto

467 * Puede trabajar con múltiples imágenes en una conversación

468 * El análisis de imágenes funciona con diagramas, capturas de pantalla, mockups y más

469 * Cuando Claude hace referencia a imágenes (por ejemplo, `[Image #1]`), `Cmd+Click` (Mac) o `Ctrl+Click` (Windows/Linux) el enlace para abrir la imagen en su visor predeterminado

470</Tip>

471 

472***

473 

474## Archivos y directorios de referencia

475 

476Use @ para incluir rápidamente archivos o directorios sin esperar a que Claude los lea.

477 

478<Steps>

479 <Step title="Haga referencia a un archivo único">

480 ```text theme={null}

481 Explica la lógica en @src/utils/auth.js

482 ```

483 

484 Esto incluye el contenido completo del archivo en la conversación.

485 </Step>

486 

487 <Step title="Haga referencia a un directorio">

488 ```text theme={null}

489 ¿Cuál es la estructura de @src/components?

490 ```

491 

492 Esto proporciona un listado de directorio con información de archivo.

493 </Step>

494 

495 <Step title="Haga referencia a recursos MCP">

496 ```text theme={null}

497 Muéstrame los datos de @github:repos/owner/repo/issues

498 ```

499 

500 Esto obtiene datos de servidores MCP conectados usando el formato @server:resource. Consulte [recursos MCP](/es/mcp#use-mcp-resources) para más detalles.

501 </Step>

502</Steps>

503 

504<Tip>

505 Consejos:

506 

507 * Las rutas de archivo pueden ser relativas o absolutas

508 * Las referencias de archivo @ agregan `CLAUDE.md` en el directorio del archivo y directorios principales al contexto

509 * Las referencias de directorio muestran listados de archivos, no contenidos

510 * Puede hacer referencia a múltiples archivos en un solo mensaje (por ejemplo, "@file1.js y @file2.js")

511</Tip>

512 

513***

514 

515## Usar pensamiento extendido (Thinking Mode)

516 

517[El pensamiento extendido](https://platform.claude.com/docs/es/build-with-claude/extended-thinking) está habilitado de forma predeterminada, dando a Claude espacio para razonar a través de problemas complejos paso a paso antes de responder. Este razonamiento es visible en modo detallado, que puede alternar con `Ctrl+O`. Durante el pensamiento extendido, el indicador de progreso muestra sugerencias de progreso en línea como "aún pensando" y "casi terminado de pensar" para indicar que Claude está trabajando activamente.

518 

519Además, [los modelos que admiten esfuerzo](/es/model-config#adjust-effort-level) utilizan razonamiento adaptativo: en lugar de un presupuesto de token de pensamiento fijo, el modelo decide dinámicamente si y cuánto pensar basándose en su configuración de nivel de esfuerzo y la tarea en cuestión. El razonamiento adaptativo permite a Claude responder más rápido a indicaciones rutinarias y reservar un pensamiento más profundo para pasos que se benefician de él.

520 

521El pensamiento extendido es particularmente valioso para decisiones arquitectónicas complejas, errores desafiantes, planificación de implementación de múltiples pasos y evaluación de compensaciones entre diferentes enfoques.

522 

523<Note>

524 Frases como "think", "think hard" y "think more" se interpretan como instrucciones de indicación regulares y no asignan tokens de pensamiento.

525</Note>

526 

527### Configurar Thinking Mode

528 

529El pensamiento está habilitado de forma predeterminada, pero puede ajustarlo o deshabilitarlo.

530 

531| Alcance | Cómo configurar | Detalles |

532| ------------------------------- | ---------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |

533| **Nivel de esfuerzo** | Ejecute `/effort`, ajuste en `/model`, o establezca [`CLAUDE_CODE_EFFORT_LEVEL`](/es/env-vars) | Control de profundidad de pensamiento en [modelos compatibles](/es/model-config#adjust-effort-level) |

534| **Palabra clave `ultrathink`** | Incluya "ultrathink" en cualquier lugar de su indicación | Agrega una instrucción en contexto indicando al modelo que razone más en ese turno. No cambia el nivel de esfuerzo en sí; consulte [Ajustar nivel de esfuerzo](/es/model-config#adjust-effort-level) para eso |

535| **Atajo de alternancia** | Presione `Option+T` (macOS) o `Alt+T` (Windows/Linux) | Alterne el pensamiento activado/desactivado para la sesión actual (todos los modelos). Puede requerir [configuración de terminal](/es/terminal-config) para habilitar atajos de teclado de opción |

536| **Predeterminado global** | Use `/config` para alternar Thinking Mode | Establece su predeterminado en todos los proyectos (todos los modelos).<br />Guardado como `alwaysThinkingEnabled` en `~/.claude/settings.json` |

537| **Presupuesto de token límite** | Establezca la variable de entorno [`MAX_THINKING_TOKENS`](/es/env-vars) | Limite el presupuesto de pensamiento a un número específico de tokens. En modelos con razonamiento adaptativo, solo `0` se aplica a menos que se deshabilite el razonamiento adaptativo. Ejemplo: `export MAX_THINKING_TOKENS=10000` |

538 

539Para ver el proceso de pensamiento de Claude, presione `Ctrl+O` para alternar el modo detallado y ver el razonamiento interno mostrado como texto gris en cursiva.

540 

541### Cómo funciona el pensamiento extendido

542 

543El pensamiento extendido controla cuánto razonamiento interno realiza Claude antes de responder. Más pensamiento proporciona más espacio para explorar soluciones, analizar casos extremos y autocorregir errores.

544 

545En [modelos que admiten esfuerzo](/es/model-config#adjust-effort-level), el pensamiento utiliza razonamiento adaptativo: el modelo asigna dinámicamente tokens de pensamiento basados en el nivel de esfuerzo que selecciona. Esta es la forma recomendada de ajustar la compensación entre velocidad y profundidad de razonamiento. Si desea que Claude piense más o menos de lo que su nivel de esfuerzo produciría de otra manera, también puede decirlo directamente en su indicación o en `CLAUDE.md`.

546 

547Con modelos más antiguos, el pensamiento utiliza un presupuesto fijo de tokens extraído de su asignación de salida. El presupuesto varía según el modelo; consulte [`MAX_THINKING_TOKENS`](/es/env-vars) para los límites por modelo. Puede limitar el presupuesto con esa variable de entorno, o deshabilitar el pensamiento completamente a través de `/config` o el alternador `Option+T`/`Alt+T`.

548 

549En modelos con razonamiento adaptativo, `MAX_THINKING_TOKENS` solo se aplica cuando se establece en `0` para deshabilitar el pensamiento, o cuando `CLAUDE_CODE_DISABLE_ADAPTIVE_THINKING=1` revierte el modelo al presupuesto fijo. `CLAUDE_CODE_DISABLE_ADAPTIVE_THINKING` se aplica solo a Opus 4.6 y Sonnet 4.6. Opus 4.7 siempre utiliza razonamiento adaptativo y no admite un presupuesto de pensamiento fijo. Consulte [variables de entorno](/es/env-vars).

550 

551<Warning>

552 Se le cobra por todos los tokens de pensamiento utilizados incluso cuando los resúmenes de pensamiento se redactan. En modo interactivo, el pensamiento aparece como un resumen contraído de forma predeterminada. Establezca `showThinkingSummaries: true` en `settings.json` para mostrar resúmenes completos.

553</Warning>

554 

555***

556 

557## Reanudar conversaciones anteriores

558 

559Cuando inicia Claude Code, puede reanudar una sesión anterior:

560 

561* `claude --continue` continúa la conversación más reciente en el directorio actual

562* `claude --resume` abre un selector de conversación o reanuda por nombre

563* `claude --from-pr 123` reanuda sesiones vinculadas a una solicitud de extracción específica

564 

565Desde dentro de una sesión activa, use `/resume` para cambiar a una conversación diferente.

566 

567Cuando la sesión seleccionada es antigua y lo suficientemente grande como para que releerla consumiría una parte sustancial de sus límites de uso, `--resume`, `--continue` y `/resume` ofrecen reanudar desde un resumen en lugar de cargar la transcripción completa. Este mensaje no está disponible en Amazon Bedrock, Google Cloud Vertex AI o Microsoft Foundry.

568 

569Las sesiones se almacenan por directorio de proyecto. De forma predeterminada, el selector `/resume` muestra sesiones interactivas del worktree actual, con atajos de teclado para ampliar la lista a otros worktrees o proyectos, buscar, obtener una vista previa y renombrar. Consulte [Usar el selector de sesión](#use-the-session-picker) a continuación para la referencia completa de atajos.

570 

571Cuando selecciona una sesión de otro worktree del mismo repositorio, Claude Code la reanuda directamente sin requerir que cambie de directorio primero. Seleccionar una sesión de un proyecto no relacionado copia un comando `cd` y reanuda a su portapapeles en su lugar.

572 

573Reanudar por nombre se resuelve en el repositorio actual y sus worktrees. Tanto `claude --resume <name>` como `/resume <name>` buscan una coincidencia exacta y la reanudan directamente, incluso si la sesión vive en un worktree diferente.

574 

575Cuando el nombre es ambiguo, `claude --resume <name>` abre el selector con el nombre rellenado previamente como término de búsqueda. `/resume <name>` desde dentro de una sesión reporta un error en su lugar, así que ejecute `/resume` sin argumento para abrir el selector y elegir.

576 

577Las sesiones creadas por `claude -p` o invocaciones de SDK no aparecen en el selector, pero aún puede reanudar una pasando su ID de sesión directamente a `claude --resume <session-id>`.

578 

579### Nombrar sus sesiones

580 

581Dé a las sesiones nombres descriptivos para encontrarlas más tarde. Esta es una mejor práctica cuando se trabaja en múltiples tareas o características.

582 

583<Steps>

584 <Step title="Nombre la sesión">

585 Nombre una sesión al inicio con `-n`:

586 

587 ```bash theme={null}

588 claude -n auth-refactor

589 ```

590 

591 O use `/rename` durante una sesión, que también muestra el nombre en la barra de indicación:

592 

593 ```text theme={null}

594 /rename auth-refactor

595 ```

596 

597 También puede renombrar cualquier sesión desde el selector: ejecute `/resume`, navegue a una sesión y presione `Ctrl+R`.

598 </Step>

599 

600 <Step title="Reanude por nombre más tarde">

601 Desde la línea de comandos:

602 

603 ```bash theme={null}

604 claude --resume auth-refactor

605 ```

606 

607 O desde dentro de una sesión activa:

608 

609 ```text theme={null}

610 /resume auth-refactor

611 ```

612 </Step>

613</Steps>

614 

615### Usar el selector de sesión

616 

617El comando `/resume` (o `claude --resume` sin argumentos) abre un selector de sesión interactivo con estas características:

618 

619**Atajos de teclado en el selector:**

620 

621| Atajo | Acción |

622| :----------------------------------------------------- | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

623| `↑` / `↓` | Navegue entre sesiones |

624| `→` / `←` | Expandir o contraer sesiones agrupadas |

625| `Enter` | Seleccione y reanude la sesión resaltada |

626| `Space` | Vista previa del contenido de la sesión. `Ctrl+V` también funciona en terminales que no lo capturan como pegado |

627| `Ctrl+R` | Renombre la sesión resaltada |

628| `/` o cualquier carácter imprimible que no sea `Space` | Ingrese al modo de búsqueda y filtre sesiones |

629| `Ctrl+A` | Muestre sesiones de todos los proyectos en esta máquina. Presione de nuevo para restaurar el repositorio actual |

630| `Ctrl+W` | Muestre sesiones de todos los worktrees del repositorio actual. Presione de nuevo para restaurar el worktree actual. Solo se muestra en repositorios con múltiples worktrees |

631| `Ctrl+B` | Filtre a sesiones de su rama de git actual. Presione de nuevo para mostrar sesiones de todas las ramas |

632| `Esc` | Salga del selector o modo de búsqueda |

633 

634**Organización de sesiones:**

635 

636El selector muestra sesiones con metadatos útiles:

637 

638* Nombre de sesión si se establece, de lo contrario el resumen de conversación o la primera indicación del usuario

639* Tiempo transcurrido desde la última actividad

640* Recuento de mensajes

641* Rama de Git (si aplica)

642* Ruta del proyecto, mostrada después de ampliar a todos los proyectos con `Ctrl+A`

643 

644Las sesiones bifurcadas (creadas con `/branch`, `/rewind`, o `--fork-session`) se agrupan bajo su sesión raíz, lo que facilita encontrar conversaciones relacionadas.

645 

646<Tip>

647 Consejos:

648 

649 * **Nombre sesiones temprano**: Use `/rename` cuando comience a trabajar en una tarea distinta: es mucho más fácil encontrar "payment-integration" que "explain this function" más tarde

650 * Use `--continue` para acceso rápido a su conversación más reciente en el directorio actual

651 * Use `--resume session-name` cuando sepa qué sesión necesita

652 * Use `--resume` (sin nombre) cuando necesite examinar y seleccionar

653 * Para scripts, use `claude --continue --print "prompt"` para reanudar en modo no interactivo

654 * Presione `Space` en el selector para obtener una vista previa de una sesión antes de reanudarla

655 * La conversación reanudada comienza con el mismo modelo y configuración que el original

656 

657 Cómo funciona:

658 

659 1. **Almacenamiento de conversación**: Todas las conversaciones se guardan automáticamente localmente con su historial de mensajes completo

660 2. **Deserialización de mensajes**: Al reanudar, se restaura el historial de mensajes completo para mantener el contexto

661 3. **Estado de herramienta**: El uso de herramientas y los resultados de la conversación anterior se conservan

662 4. **Restauración de contexto**: La conversación se reanuda con todo el contexto anterior intacto

663</Tip>

664 

665***

666 

667## Ejecutar sesiones paralelas de Claude Code con Git worktrees

668 

669Cuando trabaja en múltiples tareas a la vez, necesita que cada sesión de Claude tenga su propia copia de la base de código para que los cambios no choquen. Los worktrees de Git resuelven esto creando directorios de trabajo separados que cada uno tiene sus propios archivos y rama, mientras comparten el mismo historial de repositorio y conexiones remotas. Esto significa que puede tener a Claude trabajando en una característica en un worktree mientras corrige un error en otro, sin que ninguna sesión interfiera con la otra.

670 

671Use la bandera `--worktree` (`-w`) para crear un worktree aislado e iniciar Claude en él. El valor que pasa se convierte en el nombre del directorio worktree y el nombre de la rama:

672 

673```bash theme={null}

674# Inicie Claude en un worktree llamado "feature-auth"

675# Crea .claude/worktrees/feature-auth/ con una nueva rama

676claude --worktree feature-auth

677 

678# Inicie otra sesión en un worktree separado

679claude --worktree bugfix-123

680```

681 

682Si omite el nombre, Claude genera uno automáticamente:

683 

684```bash theme={null}

685# Auto-genera un nombre como "bright-running-fox"

686claude --worktree

687```

688 

689Los worktrees se crean en `<repo>/.claude/worktrees/<name>` y se ramifican desde la rama remota predeterminada, que es donde `origin/HEAD` apunta. La rama worktree se nombra `worktree-<name>`.

690 

691La rama base no es configurable a través de una bandera o configuración de Claude Code. `origin/HEAD` es una referencia almacenada en su directorio `.git` local que Git estableció una vez cuando clonó. Si la rama predeterminada del repositorio cambia más tarde en GitHub o GitLab, su `origin/HEAD` local sigue apuntando al anterior, y los worktrees se ramificarán desde allí. Para resincronizar su referencia local con lo que el remoto actualmente considera su predeterminado:

692 

693```bash theme={null}

694git remote set-head origin -a

695```

696 

697Este es un comando Git estándar que solo actualiza su directorio `.git` local. Nada en el servidor remoto cambia. Si desea que los worktrees se basen en una rama específica en lugar del predeterminado del remoto, establézcalo explícitamente con `git remote set-head origin your-branch-name`.

698 

699Para control total sobre cómo se crean los worktrees, incluida la elección de una base diferente por invocación, configure un [hook WorktreeCreate](/es/hooks#worktreecreate). El hook reemplaza completamente la lógica predeterminada de `git worktree` de Claude Code, para que pueda obtener y ramificar desde cualquier ref que necesite.

700 

701También puede pedir a Claude que "trabaje en un worktree" o "inicie un worktree" durante una sesión, y lo creará automáticamente.

702 

703### Worktrees de subagente

704 

705Los subagentes también pueden usar aislamiento de worktree para trabajar en paralelo sin conflictos. Pida a Claude que "use worktrees para sus agentes" o configúrelo en un [subagente personalizado](/es/sub-agents#supported-frontmatter-fields) agregando `isolation: worktree` al frontmatter del agente. Cada subagente obtiene su propio worktree que se limpia automáticamente cuando el subagente termina sin cambios.

706 

707### Limpieza de worktree

708 

709Cuando sale de una sesión de worktree, Claude maneja la limpieza según si realizó cambios:

710 

711* **Sin cambios**: el worktree y su rama se eliminan automáticamente

712* **Cambios o commits existen**: Claude le solicita que mantenga o elimine el worktree. Mantener preserva el directorio y la rama para que pueda regresar más tarde. Eliminar elimina el directorio worktree y su rama, descartando todos los cambios sin confirmar y commits

713 

714Los worktrees de subagente huérfanos por un bloqueo o una ejecución paralela interrumpida se eliminan automáticamente al inicio una vez que son más antiguos que su configuración [`cleanupPeriodDays`](/es/settings#available-settings), siempre que no tengan cambios sin confirmar, archivos sin seguimiento y commits sin enviar. Los worktrees que crea con `--worktree` nunca se eliminan por este barrido.

715 

716Para limpiar worktrees fuera de una sesión de Claude, use [gestión manual de worktree](#manage-worktrees-manually).

717 

718<Tip>

719 Agregue `.claude/worktrees/` a su `.gitignore` para evitar que el contenido del worktree aparezca como archivos sin seguimiento en su repositorio principal.

720</Tip>

721 

722### Copiar archivos ignorados por git a worktrees

723 

724Los worktrees de Git son descargas nuevas, por lo que no incluyen archivos sin seguimiento como `.env` o `.env.local` de su repositorio principal. Para copiar automáticamente estos archivos cuando Claude crea un worktree, agregue un archivo `.worktreeinclude` a la raíz de su proyecto.

725 

726El archivo utiliza la sintaxis `.gitignore` para enumerar qué archivos copiar. Solo los archivos que coinciden con un patrón y también están ignorados por git se copian, por lo que los archivos rastreados nunca se duplican.

727 

728```text .worktreeinclude theme={null}

729.env

730.env.local

731config/secrets.json

732```

733 

734Esto se aplica a worktrees creados con `--worktree`, worktrees de subagente y sesiones paralelas en la [aplicación de escritorio](/es/desktop#work-in-parallel-with-sessions).

735 

736### Gestionar worktrees manualmente

737 

738Para más control sobre la ubicación del worktree y la configuración de rama, cree worktrees con Git directamente. Esto es útil cuando necesita verificar una rama existente específica o colocar el worktree fuera del repositorio.

739 

740```bash theme={null}

741# Crear un worktree con una nueva rama

742git worktree add ../project-feature-a -b feature-a

743 

744# Crear un worktree con una rama existente

745git worktree add ../project-bugfix bugfix-123

746 

747# Inicie Claude en el worktree

748cd ../project-feature-a && claude

749 

750# Limpiar cuando termine

751git worktree list

752git worktree remove ../project-feature-a

753```

754 

755Obtenga más información en la [documentación oficial de Git worktree](https://git-scm.com/docs/git-worktree).

756 

757<Tip>

758 Recuerde inicializar su entorno de desarrollo en cada nuevo worktree de acuerdo con la configuración de su proyecto. Dependiendo de su pila, esto podría incluir ejecutar instalación de dependencias (`npm install`, `yarn`), configurar entornos virtuales o seguir el proceso de configuración estándar de su proyecto.

759</Tip>

760 

761### Control de versiones no git

762 

763El aislamiento de worktree funciona con git de forma predeterminada. Para otros sistemas de control de versiones como SVN, Perforce o Mercurial, configure [hooks WorktreeCreate y WorktreeRemove](/es/hooks#worktreecreate) para proporcionar lógica personalizada de creación y limpieza de worktree. Cuando se configura, estos hooks reemplazan el comportamiento predeterminado de git cuando usa `--worktree`, por lo que [`.worktreeinclude`](#copy-gitignored-files-to-worktrees) no se procesa. Copie cualquier archivo de configuración local dentro de su script de hook en su lugar.

764 

765Para la coordinación automatizada de sesiones paralelas con tareas compartidas y mensajería, consulte [equipos de agentes](/es/agent-teams).

766 

767***

768 

769## Reciba notificaciones cuando Claude necesite su atención

770 

771Cuando inicia una tarea de larga duración y cambia a otra ventana, puede configurar notificaciones de escritorio para saber cuándo Claude termina o necesita su entrada. Esto utiliza el evento de hook `Notification` [hook event](/es/hooks-guide#get-notified-when-claude-needs-input), que se activa cada vez que Claude está esperando permiso, inactivo y listo para una nueva indicación, o completando autenticación.

772 

773<Steps>

774 <Step title="Agregue el hook a su configuración">

775 Abra `~/.claude/settings.json` y agregue un hook `Notification` que llame al comando de notificación nativa de su plataforma:

776 

777 <Tabs>

778 <Tab title="macOS">

779 ```json theme={null}

780 {

781 "hooks": {

782 "Notification": [

783 {

784 "matcher": "",

785 "hooks": [

786 {

787 "type": "command",

788 "command": "osascript -e 'display notification \"Claude Code needs your attention\" with title \"Claude Code\"'"

789 }

790 ]

791 }

792 ]

793 }

794 }

795 ```

796 </Tab>

797 

798 <Tab title="Linux">

799 ```json theme={null}

800 {

801 "hooks": {

802 "Notification": [

803 {

804 "matcher": "",

805 "hooks": [

806 {

807 "type": "command",

808 "command": "notify-send 'Claude Code' 'Claude Code needs your attention'"

809 }

810 ]

811 }

812 ]

813 }

814 }

815 ```

816 </Tab>

817 

818 <Tab title="Windows">

819 ```json theme={null}

820 {

821 "hooks": {

822 "Notification": [

823 {

824 "matcher": "",

825 "hooks": [

826 {

827 "type": "command",

828 "command": "powershell.exe -Command \"[System.Reflection.Assembly]::LoadWithPartialName('System.Windows.Forms'); [System.Windows.Forms.MessageBox]::Show('Claude Code needs your attention', 'Claude Code')\""

829 }

830 ]

831 }

832 ]

833 }

834 }

835 ```

836 </Tab>

837 </Tabs>

838 

839 Si su archivo de configuración ya tiene una clave `hooks`, combine la entrada `Notification` en ella en lugar de sobrescribir. También puede pedir a Claude que escriba el hook por usted describiendo lo que desea en la CLI.

840 </Step>

841 

842 <Step title="Opcionalmente, reduzca el matcher">

843 De forma predeterminada, el hook se activa en todos los tipos de notificación. Para activarse solo para eventos específicos, establezca el campo `matcher` en uno de estos valores:

844 

845 | Matcher | Se activa cuando |

846 | :--------------------- | :---------------------------------------------------------- |

847 | `permission_prompt` | Claude necesita que apruebe un uso de herramienta |

848 | `idle_prompt` | Claude está hecho y esperando su próxima indicación |

849 | `auth_success` | La autenticación se completa |

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

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

852 | `elicitation_response` | Una respuesta de elicitación de MCP se devuelve al servidor |

853 </Step>

854 

855 <Step title="Verifique el hook">

856 Escriba `/hooks` y seleccione `Notification` para confirmar que el hook aparece. Seleccionarlo muestra el comando que se ejecutará. Para probarlo de extremo a extremo, pida a Claude que ejecute un comando que requiera permiso y cambie de la terminal, o pida a Claude que active una notificación directamente.

857 </Step>

858</Steps>

859 

860Para el esquema de evento completo y tipos de notificación, consulte la [referencia de Notification](/es/hooks#notification).

861 

862***

863 

864## Usar Claude como una utilidad de estilo unix

865 

866### Agregue Claude a su proceso de verificación

867 

868Supongamos que desea usar Claude Code como un linter o revisor de código.

869 

870**Agregue Claude a su script de compilación:**

871 

872```json theme={null}

873// package.json

874{

875 ...

876 "scripts": {

877 ...

878 "lint:claude": "claude -p 'you are a linter. please look at the changes vs. main and report any issues related to typos. report the filename and line number on one line, and a description of the issue on the second line. do not return any other text.'"

879 }

880}

881```

882 

883<Tip>

884 Consejos:

885 

886 * Use Claude para revisión de código automatizada en su canalización CI/CD

887 * Personalice la indicación para verificar problemas específicos relevantes para su proyecto

888 * Considere crear múltiples scripts para diferentes tipos de verificación

889</Tip>

890 

891### Canalizar entrada, canalizar salida

892 

893Supongamos que desea canalizar datos a Claude y obtener datos en un formato estructurado.

894 

895**Canalizar datos a través de Claude:**

896 

897```bash theme={null}

898cat build-error.txt | claude -p 'concisely explain the root cause of this build error' > output.txt

899```

900 

901<Tip>

902 Consejos:

903 

904 * Use tuberías para integrar Claude en scripts de shell existentes

905 * Combine con otras herramientas Unix para flujos de trabajo poderosos

906 * Considere usar `--output-format` para salida estructurada

907</Tip>

908 

909### Controlar el formato de salida

910 

911Supongamos que necesita la salida de Claude en un formato específico, especialmente cuando integra Claude Code en scripts u otras herramientas.

912 

913<Steps>

914 <Step title="Usar formato de texto (predeterminado)">

915 ```bash theme={null}

916 cat data.txt | claude -p 'summarize this data' --output-format text > summary.txt

917 ```

918 

919 Esto genera solo la respuesta de texto sin formato de Claude (comportamiento predeterminado).

920 </Step>

921 

922 <Step title="Usar formato JSON">

923 ```bash theme={null}

924 cat code.py | claude -p 'analyze this code for bugs' --output-format json > analysis.json

925 ```

926 

927 Esto genera una matriz JSON de mensajes con metadatos incluidos costo y duración.

928 </Step>

929 

930 <Step title="Usar formato JSON de transmisión">

931 ```bash theme={null}

932 cat log.txt | claude -p 'parse this log file for errors' --output-format stream-json

933 ```

934 

935 Esto genera una serie de objetos JSON en tiempo real mientras Claude procesa la solicitud. Cada mensaje es un objeto JSON válido, pero la salida completa no es JSON válido si se concatena.

936 </Step>

937</Steps>

938 

939<Tip>

940 Consejos:

941 

942 * Use `--output-format text` para integraciones simples donde solo necesita la respuesta de Claude

943 * Use `--output-format json` cuando necesite el registro de conversación completo

944 * Use `--output-format stream-json` para salida en tiempo real de cada turno de conversación

945</Tip>

946 

947***

948 

949## Ejecutar Claude en un horario

950 

951Supongamos que desea que Claude maneje una tarea automáticamente de forma recurrente, como revisar PRs abiertas cada mañana, auditar dependencias semanalmente o verificar fallas de CI durante la noche.

952 

953Elija una opción de programación según dónde desee que se ejecute la tarea:

954 

955| Opción | Dónde se ejecuta | Mejor para |

956| :-------------------------------------------------------------- | :-------------------------------------------------- | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

957| [Routines](/es/routines) | Infraestructura administrada por Anthropic | Tareas que deben ejecutarse incluso cuando su computadora está apagada. También puede activarse en llamadas API o eventos de GitHub además de un horario. Configure en [claude.ai/code/routines](https://claude.ai/code/routines). |

958| [Tareas programadas de escritorio](/es/desktop-scheduled-tasks) | Su máquina, a través de la aplicación de escritorio | Tareas que necesitan acceso directo a archivos locales, herramientas o cambios sin confirmar. |

959| [GitHub Actions](/es/github-actions) | Su canalización de CI | Tareas vinculadas a eventos de repositorio como PRs abiertos, o horarios cron que deben vivir junto con su configuración de flujo de trabajo. |

960| [`/loop`](/es/scheduled-tasks) | La sesión CLI actual | Sondeo rápido mientras una sesión está abierta. Las tareas se cancelan cuando comienza una nueva conversación; `--resume` y `--continue` restauran las no expiradas. |

961 

962<Tip>

963 Al escribir indicaciones para tareas programadas, sea explícito sobre qué se ve como éxito y qué hacer con los resultados. La tarea se ejecuta de forma autónoma, por lo que no puede hacer preguntas aclaratorias. Por ejemplo: "Revise PRs abiertas etiquetadas con `needs-review`, deje comentarios en línea sobre cualquier problema y publique un resumen en el canal `#eng-reviews` de Slack."

964</Tip>

965 

966***

967 

968## Pregunte a Claude sobre sus capacidades

969 

970Claude tiene acceso integrado a su documentación y puede responder preguntas sobre sus propias características y limitaciones.

971 

972### Preguntas de ejemplo

973 

974```text theme={null}

975¿puede Claude Code crear solicitudes de extracción?

976```

977 

978```text theme={null}

979¿cómo maneja Claude Code los permisos?

980```

981 

982```text theme={null}

983¿qué skills están disponibles?

984```

985 

986```text theme={null}

987¿cómo uso MCP con Claude Code?

988```

989 

990```text theme={null}

991¿cómo configuro Claude Code para Amazon Bedrock?

992```

993 

994```text theme={null}

995¿cuáles son las limitaciones de Claude Code?

996```

997 

998<Note>

999 Claude proporciona respuestas basadas en documentación a estas preguntas. Para demostraciones prácticas, ejecute `/powerup` para lecciones interactivas con demostraciones animadas, o consulte las secciones de flujo de trabajo específicas anteriores.

1000</Note>

1001 

1002<Tip>

1003 Consejos:

1004 

1005 * Claude siempre tiene acceso a la documentación más reciente de Claude Code, independientemente de la versión que esté utilizando

1006 * Haga preguntas específicas para obtener respuestas detalladas

1007 * Claude puede explicar características complejas como integración MCP, configuraciones empresariales y flujos de trabajo avanzados

1008</Tip>

1009 

1010***

1011 

1012## Próximos pasos

1013 

1014<CardGroup cols={2}>

1015 <Card title="Mejores prácticas" icon="lightbulb" href="/es/best-practices">

1016 Patrones para obtener lo máximo de Claude Code

1017 </Card>

1018 

1019 <Card title="Cómo funciona Claude Code" icon="gear" href="/es/how-claude-code-works">

1020 Comprenda el bucle agente y la gestión de contexto

1021 </Card>

1022 

1023 <Card title="Extender Claude Code" icon="puzzle-piece" href="/es/features-overview">

1024 Agregue skills, hooks, MCP, subagentes y plugins

1025 </Card>

1026 

1027 <Card title="Implementación de referencia" icon="code" href="https://github.com/anthropics/claude-code/tree/main/.devcontainer">

1028 Clone la implementación de referencia del contenedor de desarrollo

1029 </Card>

1030</CardGroup>

communications-kit.md +520 −0 created

Details

1> ## Documentation Index

2> Fetch the complete documentation index at: https://code.claude.com/docs/llms.txt

3> Use this file to discover all available pages before exploring further.

4 

5# Kit de comunicaciones

6 

7> Anuncios de lanzamiento, mensajes de campaña de goteo y respuestas de preguntas frecuentes para implementar Claude Code en su organización de ingeniería.

8 

9Esta página es para administradores y líderes de ingeniería que implementan Claude Code en un equipo. Proporciona anuncios de lanzamiento listos para copiar, una campaña de goteo de consejos y trucos, y respuestas de una línea para las preguntas que le harán con más frecuencia.

10 

11<Note>

12 Trate todo aquí como borrador, no como copia final. Reescriba cada mensaje con la voz de su organización, cambie las tareas de ejemplo por errores y módulos reales de su propio código, y reemplace los `[marcadores de posición entre corchetes]` antes de enviar. Los anuncios que impulsan la adopción son los que parecen escritos por alguien de su empresa.

13</Note>

14 

15## Comunicaciones de lanzamiento

16 

17Un anuncio en dos formatos, más dos variantes opcionales. Elija el que mejor se ajuste a su implementación y reescriba a partir de ahí.

18 

19### Antes de enviar

20 

21Trabaje en esta lista de verificación antes de que salga el anuncio. Cada elemento cierra una brecha que de otro modo se convierte en un hilo de soporte en el día del lanzamiento.

22 

23| Elemento | Por qué importa |

24| ----------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------- |

25| Canal `#claude-code` creado y vinculado en el mensaje | Proporciona un lugar donde las preguntas pueden llegar |

26| Comando de instalación probado en al menos una máquina en su entorno | Detecta problemas de proxy o firewall antes de que todos los golpeen a la vez |

27| Enlace de seguridad y manejo de datos listo ([Uso de datos](/es/data-usage) o su equivalente interno) | "¿Dónde va mi código?" será la primera respuesta |

28| Una tarea concreta elegida, un error real o archivo en su código | Los ejemplos genéricos no convierten; "arreglar la prueba inestable en `auth_test.go`" sí |

29| Un propietario nombrado para el canal durante las primeras 48 horas | Las preguntas sin respuesta en el día del lanzamiento matan el impulso |

30| Un patrocinador de la suite C alineado para enviar o co-firmar el anuncio | Los lanzamientos enviados por ejecutivos ven consistentemente una adopción más alta en la primera semana que los enviados por administradores |

31 

32### El anuncio

33 

34Use esto como su mensaje de implementación estándar en toda la organización. Cubre qué es Claude Code, proporciona una ruta de instalación de dos minutos, ofrece a los lectores una tarea concreta para probar y responde "¿dónde va mi código?" antes de que alguien tenga que preguntar.

35 

36<Tabs>

37 <Tab title="Correo electrónico">

38 ```text theme={null}

39 Asunto: Claude Code está activo para [Ingeniería / su equipo]

40 

41 Equipo,

42 

43 A partir de hoy tiene acceso a Claude Code, un agente de codificación de IA que se ejecuta en

44 su terminal, lee su código real y trabaja en tareas reales de principio a fin: depuración, refactores, pruebas, PRs. No es autocompletado y no es

45 una ventana de chat. Edita archivos, ejecuta sus comandos y pide permiso

46 antes de hacer algo arriesgado.

47 

48 Comience en dos minutos:

49 

50 curl -fsSL https://claude.ai/install.sh | bash

51 cd <su-repositorio>

52 claude

53 

54 Luego ejecute /init una vez. Claude lee su proyecto y escribe un CLAUDE.md con

55 sus comandos de compilación y convenciones, para que deje de re-explicar lo básico.

56 

57 Luego intente uno de estos en el repositorio en el que ya está:

58 

59 - "La prueba en [archivo] es inestable. Averigua por qué y arréglalo"

60 - "Camina conmigo a través de cómo [módulo] maneja [X]"

61 - "Mira mi diferencia de trabajo y dime qué es arriesgado antes de que lo envíe"

62 

63 Dónde va su código: Claude Code se ejecuta en su terminal y habla directamente

64 con la API de Anthropic, sin servidores de terceros en el medio. Pide permiso antes de

65 editar archivos o ejecutar comandos. Bajo nuestro acuerdo Enterprise, Anthropic

66 no utiliza su código o indicaciones para entrenar sus modelos.

67 Detalles: https://code.claude.com/docs/es/data-usage

68 https://code.claude.com/docs/es/security

69 

70 Dónde ir con preguntas: #claude-code. [Nombre del propietario] lo está monitoreando

71 esta semana.

72 

73 - [Nombre]

74 

75 P.D. ¿Prefiere su editor? Hay una extensión de VS Code y un complemento de JetBrains.

76 El mismo agente, sin terminal requerida.

77 ```

78 </Tab>

79 

80 <Tab title="Slack o Teams">

81 ```markdown theme={null}

82 🚀 *Claude Code está activo para [equipo]*

83 

84 Agente de codificación de IA, se ejecuta en su terminal, lee su repositorio, hace trabajo real:

85 errores, refactores, pruebas, PRs. Pide permiso antes de tocar cualquier cosa.

86 

87 `curl -fsSL https://claude.ai/install.sh | bash` → `cd su-repositorio` → `claude`

88 

89 *Primera cosa a probar* → ejecute `/init`, luego: "la prueba en [archivo] es inestable,

90 averigua por qué y arréglalo."

91 

92 🔒 Se ejecuta en su terminal, habla solo con la API de Anthropic. Bajo nuestro

93 plan Enterprise su código e indicaciones no se utilizan para entrenar modelos.

94 Uso de datos → https://code.claude.com/docs/es/data-usage

95 

96 📚 Inicio rápido · VS Code · Curso gratuito de 1 hora

97 https://code.claude.com/docs/es/quickstart

98 https://code.claude.com/docs/es/vs-code

99 https://anthropic.skilljar.com/claude-code-in-action

100 

101 Preguntas → este hilo. [Propietario] está a cargo.

102 ```

103 </Tab>

104</Tabs>

105 

106### Variante de patrocinador ejecutivo

107 

108Envíe esto desde su ejecutivo patrocinador, como el CTO, CIO o SVP de Ingeniería, bajo su nombre y desde su cuenta. Los lanzamientos que salen bajo el nombre de un ejecutivo ven consistentemente tasas de apertura más altas y activación más rápida en la primera semana que el mismo mensaje de un administrador o equipo de herramientas. Señala una prioridad de la empresa en lugar de un experimento opcional.

109 

110Esta versión se reduce deliberadamente a una solicitud: instálelo y ejecútelo en una tarea real. El trabajo del ejecutivo es hacer que la solicitud llegue; el anuncio estándar y `#claude-code` manejan el cómo.

111 

112<Tabs>

113 <Tab title="Correo electrónico">

114 ```text theme={null}

115 Asunto: Una cosa que me gustaría que cada ingeniero probara esta semana

116 

117 Equipo,

118 

119 Hemos activado Claude Code para toda la ingeniería. Es un agente de IA

120 que funciona directamente en su terminal, en su código real, y los

121 resultados tempranos de los equipos que ya lo usan son lo suficientemente sólidos como para que quiera

122 que todos lo usen esta semana.

123 

124 Le pido diez minutos:

125 

126 curl -fsSL https://claude.ai/install.sh | bash

127 cd <su-repositorio>

128 claude

129 

130 Luego dele una tarea real: el error que ha estado postergando, o "camina conmigo

131 a través de cómo funciona [módulo]."

132 

133 Esa es toda la solicitud. [Nombre del propietario] y el equipo están en #claude-code para

134 cualquier cosa que encuentre en el camino.

135 

136 - [Nombre del ejecutivo]

137 [Título]

138 ```

139 </Tab>

140 

141 <Tab title="Slack o Teams">

142 ```markdown theme={null}

143 📣 *De [Nombre del ejecutivo]: una cosa a probar esta semana*

144 

145 Hemos activado *Claude Code* para toda la ingeniería. Los resultados tempranos son

146 lo suficientemente sólidos como para que le pida a todos que le dediquen diez minutos en trabajo real esta semana.

147 

148 `curl -fsSL https://claude.ai/install.sh | bash` → `cd su-repositorio` →

149 `claude` → dele una tarea real.

150 

151 Eso es todo. Preguntas → #claude-code.

152 ```

153 </Tab>

154</Tabs>

155 

156### Variante de grupo piloto

157 

158Use para una implementación por fases. Envíe solo a la cohorte piloto.

159 

160```text theme={null}

161Asunto: Está en el piloto de Claude Code

162 

163[Nombre / equipo],

164 

165Está en la primera ola de Claude Code en [empresa]. Elegimos este grupo

166porque lo pondrá en problemas reales y nos dirá la verdad al respecto.

167 

168La solicitud: úselo en al menos una tarea real esta semana, luego deje una nota en

169#claude-code-pilot cubriendo qué funcionó, qué fue molesto y qué

170lo sorprendió. Esa retroalimentación decide cómo lo implementamos para todos los demás.

171 

172[Continúe con "Comience en dos minutos" del anuncio estándar]

173 

174Una cosa extra para pilotos: en su primer cambio de múltiples archivos, presione Shift+Tab

175hasta que vea "plan". Claude establecerá exactamente qué intenta hacer

176antes de tocar un archivo. Es la forma más rápida de calibrar cuánto

177confiar en él.

178```

179 

180### DM de reclutamiento de campeones

181 

182Después del lanzamiento, envíe un DM a las dos o tres personas más activas en `#claude-code`.

183 

184```text theme={null}

185Hola [nombre], tus publicaciones en #claude-code están haciendo más por la adopción que mi

186anuncio. Un par de personas me dijeron que tu [hilo / captura de pantalla]

187fue la razón por la que realmente lo intentaron.

188 

189¿Quieres hacer eso semi-oficial? Poco esfuerzo: principalmente sigue publicando lo que

190estás publicando, más primer acceso a nuevas características y una línea directa al

191equipo de Anthropic. Puedo compartir un pequeño manual si estás dentro.

192```

193 

194## Campaña de consejos y trucos

195 

196Mensajes de Slack o Teams listos para pegar diseñados para impulsar la activación de características después del lanzamiento. Cada uno sigue el mismo patrón: un gancho, la recompensa, un indicador "pruébalo ahora" y un enlace de documentación. Distribúyalos uno o dos a la semana en `#claude-code`, o elija los pocos que coincidan con las brechas de su equipo. Se mantienen solos sin orden requerido.

197 

198Copie el cuerpo del mensaje de cada bloque directamente en Slack o Teams. Reemplace `[marcadores de posición entre corchetes]` antes de enviar.

199 

200### Comenzar

201 

202**Elegir el modelo correcto**

203 

204```markdown theme={null}

205🎯 *Consejo: Haga coincidir el modelo con el momento*

206 

207Usar Opus para arreglar una falta de ortografía quema computación. Usar Haiku para un refactor

208de 12 archivos es pedir un re-hacer.

209 

210Claude Code se ejecuta en los mismos modelos que la aplicación Claude, y puede cambiar

211a mitad de sesión. *Sonnet* es el caballo de batalla predeterminado para trabajo de características cotidianas,

212errores, pruebas y revisiones. Recurra a *Opus* en refactores grandes, depuración complicada,

213o cualquier cosa de alto riesgo. Baje a *Haiku* para preguntas rápidas,

214formato y ediciones mecánicas donde la velocidad gana.

215 

216*Pruébalo ahora:* escribe `/model` y elige Sonnet si aún no lo has hecho. Es

217el predeterminado correcto para la mayoría de tareas.

218 

219📖 Configuración de modelo → https://code.claude.com/docs/es/model-config

220```

221 

222| Modelo | Mejor para |

223| ------ | ------------------------------------------------------------------------------------------------------------------------------------- |

224| Opus | Refactores a gran escala, depuración compleja, decisiones de arquitectura, cambios de alto riesgo |

225| Sonnet | Trabajo de características cotidianas, corrección de errores, pruebas, documentación, revisión de código. Predeterminado recomendado. |

226| Haiku | Preguntas rápidas, formato, ediciones mecánicas, iteración rápida |

227 

228**Victorias rápidas para probar primero**

229 

230```markdown theme={null}

231🚀 *Consejo: Tres cosas a probar en tus primeros 10 minutos*

232 

233¿Instaló Claude Code pero no está seguro de qué preguntarle realmente? Comience con lo

234que lo ha estado molestando toda la semana.

235 

236 - Arregla algo molesto: "la prueba en [archivo] es inestable, averigua por qué"

237 - Oriéntate en código que no escribiste: "camina conmigo a través de cómo funciona [módulo]"

238 - Verifica la cordura antes de enviar: "mira mi diferencia de trabajo y dime qué

239 se ve arriesgado"

240 

241Ninguno de estos necesita configuración. Solo `cd` en su repositorio y ejecute `claude`.

242 

243*Pruébalo ahora:* elige el error que has estado evitando y pega el mensaje de error.

244 

245📖 Inicio rápido → https://code.claude.com/docs/es/quickstart

246```

247 

248### Memoria del proyecto

249 

250**`/init` y CLAUDE.md**

251 

252```markdown theme={null}

253📁 *Consejo: Deja de re-explicar tu repositorio cada sesión*

254 

255¿Diciéndole a Claude "usamos pnpm, no npm" por quinta vez? Hay una

256solución única.

257 

258Ejecute `/init` una vez por repositorio. Claude lee la estructura de su proyecto y escribe un

259archivo CLAUDE.md con sus comandos de compilación, arquitectura y convenciones.

260Cada sesión futura en ese repositorio comienza desde este archivo automáticamente. Manténgalo

261bajo dos pantallas. Es una hoja de trucos, no documentación.

262 

263*Pruébalo ahora:* abre tu repositorio principal, ejecuta `claude`, escribe `/init`. Treinta

264segundos, se amortiza en cada sesión después.

265 

266📖 CLAUDE.md y memoria del proyecto → https://code.claude.com/docs/es/memory

267```

268 

269**Referencias @**

270 

271```markdown theme={null}

272📎 *Consejo: Deja de pegar contenidos de archivos en el chat*

273 

274¿Copiar 200 líneas de un componente en tu indicación para que Claude pueda "verlo"?

275No tienes que hacerlo.

276 

277Escribe `@` luego una ruta de archivo. Claude extrae el archivo directamente al contexto.

278También funciona para directorios completos.

279 

280> los estilos en @src/components/Button.tsx se ven mal, verifica contra

281> @docs/design-system.md

282 

283*Pruébalo ahora:* escribe `@` luego Tab. El autocompletado te muestra cada archivo al alcance.

284 

285📖 Referenciación de archivos → https://code.claude.com/docs/es/common-workflows

286```

287 

288### Control y seguridad

289 

290**Modos de permiso**

291 

292```markdown theme={null}

293🛡️ *Consejo: Una pulsación de tecla entre "mirar pero no tocar" y "simplemente hazlo"*

294 

295A veces quieres que Claude pregunte antes de cada edición. A veces solo quieres

296que lo envíe. No deberías tener que elegir uno para siempre.

297 

298*Shift+Tab* cicla a través de cuánta libertad obtiene Claude: *default* pregunta antes de

299cosas arriesgadas, *acceptEdits* permite que las ediciones de archivos y comandos comunes del sistema de archivos

300fluyan mientras aún verifica antes de otros comandos de shell, y *plan*

301propone cambios para tu aprobación antes de que se toque nada. El modo plan es

302el constructor de confianza, así que comienza allí para cualquier cosa que toque múltiples archivos.

303 

304*Pruébalo ahora:* en tu próximo refactor, presiona Shift+Tab hasta que veas "plan",

305luego describe el cambio. Obtendrás una propuesta completa antes de que un solo archivo se mueva.

306 

307📖 Modos de permiso → https://code.claude.com/docs/es/permissions

308```

309 

310**Checkpointing y `/rewind`**

311 

312```markdown theme={null}

313⏪ *Consejo: Hay un botón de deshacer para toda la conversación*

314 

315Claude fue por el camino equivocado hace tres turnos y ahora estás desenredándolo?

316No tienes que arreglarlo hacia adelante.

317 

318`/rewind` retrocede a un punto anterior en la conversación, incluidos los

319cambios de archivo que Claude hizo en el camino. El checkpointing es automático; no

320configuras nada.

321 

322*Pruébalo ahora:* presiona *Esc* dos veces para abrir el menú de retroceso, o escribe `/rewind`.

323Elige el punto antes de que las cosas se salieran del camino.

324 

325📖 Checkpointing → https://code.claude.com/docs/es/checkpointing

326```

327 

328### Conecta tus herramientas

329 

330**Conectores MCP**

331 

332```markdown theme={null}

333🔌 *Consejo: Deja que Claude lea tu rastreador de problemas para que no tengas que pegar tickets*

334 

335Copiar y pegar tickets de Jira en la terminal se siente como un paso atrás.

336Lo es.

337 

338Un archivo de configuración (`.mcp.json` en la raíz de tu proyecto) conecta Claude a GitHub,

339Jira, Linear, o cualquier rastreador que uses. Luego "¿cuál es el problema de mayor prioridad

340asignado a mí?" y "adelante y arréglalo" suceden en la misma

341conversación.

342 

343*Pruébalo ahora:* pregúntale a Claude "configura un conector MCP para [GitHub/Jira/Linear]

344en este repositorio". Escribirá la configuración para ti.

345 

346📖 Conectores MCP → https://code.claude.com/docs/es/mcp

347```

348 

349### Automatiza tus flujos de trabajo

350 

351**Skills**

352 

353```markdown theme={null}

354⚡ *Consejo: Convierte ese indicador que sigues reescribiendo en un comando*

355 

356¿Escribiste "resumir en qué trabajé hoy desde git log, formatearlo para standup"

357tres veces esta semana? Ese es un comando de barra inclinada esperando suceder.

358 

359Un archivo SKILL.md en `.claude/skills/<nombre>/` se convierte en un indicador reutilizable; escribe

360`/nombre` para ejecutarlo. Haz uno la segunda vez que escribas un indicador de múltiples pasos

361que hayas escrito antes. Camino más fácil: pídele a Claude que lo haga por ti.

362 

363*Pruébalo ahora:* escribe "hazme un skill /standup que resuma en qué trabajé

364hoy desde git log", luego ejecuta `/standup` mañana por la mañana.

365 

366📖 Skills → https://code.claude.com/docs/es/skills

367```

368 

369**Hooks**

370 

371```markdown theme={null}

372🔔 *Consejo: Recibe una notificación cuando tu refactor termine*

373 

374¿Sentado en tu escritorio viendo a Claude trabajar en una tarea larga? Tienes

375cosas mejores que hacer durante esos ocho minutos.

376 

377Los hooks son comandos de shell que se disparan en eventos de Claude Code. Un hook Stop que

378envía una notificación de escritorio significa que puedes iniciar un refactor largo, irte,

379y recibir una notificación en el momento en que termina.

380 

381*Pruébalo ahora:* pregúntale a Claude "agrega un hook Stop que envíe una notificación de escritorio

382cuando termines". Escribirá el script y lo conectará.

383 

384📖 Guía de hooks → https://code.claude.com/docs/es/hooks-guide

385```

386 

387### Desarrollo día a día

388 

389**Capturas de pantalla e imágenes**

390 

391```markdown theme={null}

392📸 *Consejo: Deja de describir el diálogo de error. Solo muéstralo.*

393 

394¿Escribiendo "hay una caja roja que dice algo sobre una referencia nula

395y está apuntando a la línea 47-ish"? Captura de pantalla.

396 

397Arrastra una captura de pantalla directamente a la terminal y Claude la ve: diálogos de error,

398maquetas de UI, fotos de pizarra, exportaciones de Figma. *Ctrl+V* pega desde

399el portapapeles (usa Ctrl+V en macOS también, no Cmd+V).

400 

401*Pruébalo ahora:* la próxima vez que algo visual se rompa, captura de pantalla y pégalo

402directamente en el indicador. Luego solo escribe "¿qué está mal aquí?"

403 

404📖 Trabajar con imágenes → https://code.claude.com/docs/es/common-workflows

405```

406 

407**Flujos de trabajo de Git**

408 

409```markdown theme={null}

410🌿 *Consejo: Delega toda la ceremonia de git*

411 

412La corrección tomó 5 minutos. El mensaje de commit, rama y descripción de PR

413tomaron 15. Esa proporción es incorrecta.

414 

415Claude maneja el flujo completo de git: commits con mensajes convencionales,

416ramas, PRs con resúmenes adecuados. Una solicitud: "arregla el off-by-one, commit

417con un mensaje de commit convencional, y abre un PR." ¿Revisando el trabajo de alguien más?

418Pega la URL del PR y pídele a Claude que te camine a través del diff.

419 

420*Pruébalo ahora:* después de tu próxima corrección, en lugar de cambiar a tu cliente de git,

421solo escribe "commit esto con un buen mensaje y abre un PR".

422 

423📖 Creación de solicitudes de extracción → https://code.claude.com/docs/es/common-workflows

424```

425 

426### Compartir y escalar

427 

428**Plugins**

429 

430```markdown theme={null}

431📦 *Consejo: Alguien probablemente ya construyó esa skill*

432 

433¿A punto de pasar una hora construyendo un comando `/deploy`? Verifica si

434ya existe.

435 

436Las skills se agrupan y comparten como plugins. `/plugin` explora lo que está

437disponible e instala en un paso. Cinco minutos de exploración pueden ahorrar una hora de construcción.

438 

439*Pruébalo ahora:* escribe `/plugin` y desplázate. Encontrarás al menos una

440cosa que no sabías que querías.

441 

442📖 Plugins → https://code.claude.com/docs/es/plugins

443```

444 

445### Seguridad y administración

446 

447**Arquitectura de seguridad**

448 

449```markdown theme={null}

450🔐 *Consejo: La respuesta a "¿es esto seguro?" para la próxima vez que te lo pregunten*

451 

452Alguien en tu equipo va a preguntar "espera, ¿dónde va mi código?"

453Aquí está la versión corta que puedes pegar.

454 

455Primero permiso por diseño. Cada edición de archivo, comando de shell y llamada externa

456está controlada por tu aprobación. El CLI se ejecuta en tu terminal y habla

457directamente con la API de Anthropic, sin servidores de terceros, y soporta

458sandboxing opcional a nivel del SO para comandos de shell. Bajo nuestro plan Enterprise,

459Anthropic no utiliza tu código o indicaciones para entrenar sus modelos.

460 

461*Pruébalo ahora:* guarda estos dos enlaces para la próxima vez que surja la pregunta.

462Responden la mayoría de preguntas de revisión de seguridad.

463 

464📖 https://code.claude.com/docs/es/security

465📖 https://code.claude.com/docs/es/data-usage

466```

467 

468**Mejores prácticas**

469 

470```markdown theme={null}

471✅ *Consejo: Los 4 hábitos que separan "lo intenté una vez" de "lo uso diariamente"*

472 

473La mayoría de las personas que rebotan en Claude Code se saltaron uno de estos. La mayoría de las personas

474que se quedan hicieron los cuatro en la primera semana.

475 

476 - Comienza en modo plan para cualquier cosa que toque múltiples archivos

477 - Ejecuta /init temprano; el contexto se compone

478 - Revisa diffs antes de hacer commit; Claude puede estar confiadamente equivocado

479 - Verifica cambios que toquen rutas críticas; trátalo como un junior afilado,

480 no como un oráculo

481 

482*Pruébalo ahora:* si solo has hecho uno o dos de estos, elige el que te falta

483y hazlo en tu próxima tarea. Publica qué cambió en #claude-code.

484 

485📖 Mejores prácticas → https://code.claude.com/docs/es/best-practices

486```

487 

488## Referencia rápida

489 

490### Respuestas de preguntas frecuentes

491 

492Respuestas de una línea para las preguntas que le harán con más frecuencia.

493 

494| Pregunta | Respuesta |

495| ------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

496| "¿Funciona en VS Code?" | Sí. Hay una extensión de VS Code y un complemento de JetBrains con las mismas características, integradas en su editor. [VS Code →](/es/vs-code) |

497| "¿Tengo que configurar algo primero?" | No. Instale, luego ejecute `claude` en cualquier repositorio. Ejecute `/init` una vez y está listo. [Inicio rápido →](/es/quickstart) |

498| "¿Dónde va mi código?" | El CLI se ejecuta en su terminal y envía contexto a la API de Anthropic para inferencia, sin servidores de terceros. Bajo su plan Enterprise, su código e indicaciones no se utilizan para entrenar modelos. [Uso de datos →](/es/data-usage) |

499| "¿Puede ver todo mi repositorio?" | Lee lo que le da acceso. Las lecturas de archivos dentro de su directorio de trabajo no solicitan; los indicadores de permiso controlan ediciones, comandos de shell y cualquier cosa fuera de ese directorio. [Permisos →](/es/permissions) |

500| "¿Cómo es esto diferente de Copilot?" | Copilot autocompletea líneas. Claude Code es un agente que lee archivos, ejecuta comandos y realiza ediciones de múltiples archivos. [Descripción general →](/es/overview) |

501| "¿Qué debería probar primero?" | Un error que ha estado postergando porque es tedioso. "La prueba en \[archivo] es inestable, averigua por qué." [Inicio rápido →](/es/quickstart) |

502 

503### Plantillas de indicaciones

504 

505Comparta estos indicadores de inicio con ingenieros que han instalado pero no están seguros de qué preguntar. Cada uno está redactado de la manera en que se escribiría en una sesión real; reemplace las piezas entre corchetes con archivos de su propio repositorio.

506 

507| Tarea | Indicación |

508| ----------------------------- | ----------------------------------------------------------------------------------------------- |

509| Arreglar un error | "las pruebas en \[archivo] están fallando, averigua por qué y arréglalo" |

510| Entender código | "camina conmigo a través de cómo funciona \[módulo], luego dime dónde está el punto de entrada" |

511| Refactor seguro | "refactoriza \[módulo] a \[objetivo], usa modo plan para que pueda revisar primero" |

512| Escribir pruebas | "escribe pruebas para \[archivo] que cubran los casos extremos alrededor de \[escenario]" |

513| Revisar antes de hacer commit | "mira mi diferencia de trabajo y dime qué se ve arriesgado" |

514| Abrir un PR | "arregla \[problema], escribe un commit convencional, y abre un PR con un resumen" |

515| Hacer una skill | "hazme una skill /ship que ejecute pruebas y lint antes de hacer commit" |

516| Depurar un stack trace | "aquí está el stack trace, encuentra la causa raíz, no solo lo cubras" |

517 

518<Tip>

519 Claude Code se envía frecuentemente. Verifique los detalles específicos de la versión contra la [página de inicio de documentación](/es/overview) antes de distribuir internamente.

520</Tip>

computer-use.md +207 −0 created

Details

1> ## Documentation Index

2> Fetch the complete documentation index at: https://code.claude.com/docs/llms.txt

3> Use this file to discover all available pages before exploring further.

4 

5# Permitir que Claude use su computadora desde la CLI

6 

7> Habilite computer use en la CLI de Claude Code para que Claude pueda abrir aplicaciones, hacer clic, escribir y ver su pantalla en macOS. Pruebe aplicaciones nativas, depure problemas visuales y automatice herramientas solo GUI sin salir de su terminal.

8 

9<Note>

10 {/* plan-availability: feature=computer-use plans=pro,max */}

11 

12 Computer use es una vista previa de investigación en macOS que requiere un plan Pro o Max. No está disponible en planes Team o Enterprise. Requiere Claude Code v2.1.85 o posterior y una sesión interactiva, por lo que no está disponible en modo no interactivo con la bandera `-p`.

13</Note>

14 

15Computer use permite que Claude abra aplicaciones, controle su pantalla y trabaje en su máquina de la manera que lo haría usted. Desde la CLI, Claude puede compilar una aplicación Swift, lanzarla, hacer clic en cada botón y capturar una pantalla del resultado, todo en la misma conversación donde escribió el código.

16 

17Esta página cubre cómo funciona computer use en la CLI. Para la aplicación de escritorio, consulte [computer use en Desktop](/es/desktop#let-claude-use-your-computer).

18 

19## Qué puede hacer con computer use

20 

21Computer use maneja tareas que requieren una GUI: cualquier cosa que normalmente tendría que dejar la terminal y hacer manualmente.

22 

23* **Compilar y validar aplicaciones nativas**: pida a Claude que compile una aplicación de barra de menú de macOS. Claude escribe el Swift, lo compila, lo lanza y hace clic en cada control para verificar que funciona antes de que usted lo abra.

24* **Pruebas de UI de extremo a extremo**: señale a Claude una aplicación Electron local y diga "prueba el flujo de incorporación". Claude abre la aplicación, hace clic en el registro y captura cada paso. Sin configuración de Playwright, sin arnés de prueba.

25* **Depurar problemas visuales y de diseño**: dígale a Claude "el modal se está cortando en ventanas pequeñas". Claude redimensiona la ventana, reproduce el error, captura una pantalla, parcha el CSS y verifica la corrección. Claude ve lo que usted ve.

26* **Impulsar herramientas solo GUI**: interactúe con herramientas de diseño, paneles de control de hardware, el simulador de iOS o aplicaciones propietarias que no tienen CLI ni API.

27 

28## Cuándo se aplica computer use

29 

30Claude tiene varias formas de interactuar con una aplicación o servicio. Computer use es la más amplia y lenta, por lo que Claude intenta la herramienta más precisa primero:

31 

32* Si tiene un [servidor MCP](/es/mcp) para el servicio, Claude lo usa.

33* Si la tarea es un comando shell, Claude usa Bash.

34* Si la tarea es trabajo en navegador y tiene [Claude en Chrome](/es/chrome) configurado, Claude lo usa.

35* Si ninguno de esos se aplica, Claude usa computer use.

36 

37El control de pantalla se reserva para cosas que nada más puede alcanzar: aplicaciones nativas, simuladores y herramientas sin API.

38 

39## Habilitar computer use

40 

41Computer use está disponible como un servidor MCP integrado llamado `computer-use`. Está desactivado de forma predeterminada hasta que lo habilite.

42 

43<Steps>

44 <Step title="Abra el menú MCP">

45 En una sesión interactiva de Claude Code, ejecute:

46 

47 ```text theme={null}

48 /mcp

49 ```

50 

51 Encuentre `computer-use` en la lista de servidores. Se muestra como deshabilitado.

52 </Step>

53 

54 <Step title="Habilite el servidor">

55 Seleccione `computer-use` y elija **Enable**. La configuración persiste por proyecto, por lo que solo hace esto una vez para cada proyecto donde desee computer use.

56 </Step>

57 

58 <Step title="Otorgue permisos de macOS">

59 La primera vez que Claude intente usar su computadora, verá un mensaje para otorgar dos permisos de macOS:

60 

61 * **Accessibility**: permite que Claude haga clic, escriba y desplace

62 * **Screen Recording**: permite que Claude vea lo que hay en su pantalla

63 

64 El mensaje incluye enlaces para abrir el panel de Configuración del Sistema relevante. Otorgue ambos, luego seleccione **Try again** en el mensaje. macOS puede requerir que reinicie Claude Code después de otorgar Screen Recording.

65 </Step>

66</Steps>

67 

68Después de la configuración, pida a Claude que haga algo que necesite la GUI:

69 

70```text theme={null}

71Build the app target, launch it, and click through each tab to make

72sure nothing crashes. Screenshot any error states you find.

73```

74 

75## Apruebe aplicaciones por sesión

76 

77Habilitar el servidor `computer-use` no otorga a Claude acceso a todas las aplicaciones en su máquina. La primera vez que Claude necesita una aplicación específica en una sesión, aparece un mensaje en su terminal mostrando:

78 

79* Qué aplicaciones Claude desea controlar

80* Cualquier permiso adicional solicitado, como acceso al portapapeles

81* Cuántas otras aplicaciones se ocultarán mientras Claude trabaja

82 

83Elija **Allow for this session** o **Deny**. Las aprobaciones duran para la sesión actual. Puede aprobar múltiples aplicaciones a la vez cuando Claude las solicita juntas.

84 

85Las aplicaciones con amplio alcance muestran una advertencia adicional en el mensaje para que sepa qué otorga aprobarlas:

86 

87| Advertencia | Se aplica a |

88| :----------------------------------------- | :------------------------------------------------------- |

89| Equivalente a acceso shell | Terminal, iTerm, VS Code, Warp y otras terminales e IDEs |

90| Puede leer o escribir cualquier archivo | Finder |

91| Puede cambiar la configuración del sistema | System Settings |

92 

93Estas aplicaciones no están bloqueadas. La advertencia le permite decidir si la tarea justifica ese nivel de acceso.

94 

95El nivel de control de Claude también varía según la categoría de aplicación: los navegadores y plataformas de trading son solo lectura, las terminales e IDEs son solo clic, y todo lo demás obtiene control total. Consulte [permisos de aplicación en Desktop](/es/desktop#app-permissions) para el desglose completo de niveles.

96 

97## Cómo Claude trabaja en su pantalla

98 

99Comprender el flujo le ayuda a anticipar qué hará Claude y cómo intervenir.

100 

101### Una sesión a la vez

102 

103Computer use mantiene un bloqueo en toda la máquina mientras está activo. Si otra sesión de Claude Code ya está usando su computadora, los nuevos intentos fallan con un mensaje que le dice qué sesión mantiene el bloqueo. Termine o salga de esa sesión primero.

104 

105### Las aplicaciones se ocultan mientras Claude trabaja

106 

107Cuando Claude comienza a controlar su pantalla, otras aplicaciones visibles se ocultan para que Claude interactúe solo con las aplicaciones aprobadas. Su ventana de terminal permanece visible y se excluye de las capturas de pantalla, por lo que puede ver la sesión y Claude nunca ve su propio resultado.

108 

109Cuando Claude termina el turno, las aplicaciones ocultas se restauran automáticamente.

110 

111### Detener en cualquier momento

112 

113Cuando Claude adquiere el bloqueo, aparece una notificación de macOS: "Claude is using your computer · press Esc to stop". Presione `Esc` en cualquier lugar para abortar la acción actual inmediatamente, o presione `Ctrl+C` en la terminal. De cualquier manera, Claude libera el bloqueo, muestra sus aplicaciones y le devuelve el control.

114 

115Una segunda notificación aparece cuando Claude termina.

116 

117## Seguridad y el límite de confianza

118 

119<Warning>

120 A diferencia de la [herramienta Bash en sandbox](/es/sandboxing), computer use se ejecuta en su escritorio real con acceso a las aplicaciones que aprueba. Claude verifica cada acción e identifica posibles inyecciones de solicitud desde el contenido en pantalla, pero el límite de confianza es diferente. Consulte la [guía de seguridad de computer use](https://support.claude.com/en/articles/14128542) para mejores prácticas.

121</Warning>

122 

123Los guardarraíles integrados reducen el riesgo sin requerir configuración:

124 

125* **Aprobación por aplicación**: Claude solo puede controlar aplicaciones que ha aprobado en la sesión actual.

126* **Advertencias centinela**: las aplicaciones que otorgan acceso shell, sistema de archivos o configuración del sistema se marcan antes de que las apruebe.

127* **Terminal excluida de capturas de pantalla**: Claude nunca ve su ventana de terminal, por lo que los mensajes en pantalla en su sesión no pueden retroalimentarse al modelo.

128* **Escape global**: la tecla `Esc` aborta computer use desde cualquier lugar, y la pulsación de tecla se consume para que la inyección de solicitud no pueda usarla para descartar diálogos.

129* **Archivo de bloqueo**: solo una sesión puede controlar su máquina a la vez.

130 

131## Flujos de trabajo de ejemplo

132 

133Estos ejemplos muestran formas comunes de combinar computer use con tareas de codificación.

134 

135### Validar una compilación nativa

136 

137Después de hacer cambios en una aplicación de macOS o iOS, haga que Claude compile y verifique en un solo paso:

138 

139```text theme={null}

140Build the MenuBarStats target, launch it, open the preferences window,

141and verify the interval slider updates the label. Screenshot the

142preferences window when you're done.

143```

144 

145Claude ejecuta `xcodebuild`, lanza la aplicación, interactúa con la UI y reporta lo que encuentra.

146 

147### Reproducir un error de diseño

148 

149Cuando un error visual solo aparece en ciertos tamaños de ventana, deje que Claude lo encuentre:

150 

151```text theme={null}

152The settings modal clips its footer on narrow windows. Resize the app

153window down until you can reproduce it, screenshot the clipped state,

154then check the CSS for the modal container.

155```

156 

157Claude redimensiona la ventana, captura el estado roto y lee las hojas de estilo relevantes.

158 

159### Probar un flujo de simulador

160 

161Impulse el simulador de iOS sin escribir XCTest:

162 

163```text theme={null}

164Open the iOS Simulator, launch the app, tap through the onboarding

165screens, and tell me if any screen takes more than a second to load.

166```

167 

168Claude controla el simulador de la misma manera que lo haría con un ratón.

169 

170## Diferencias de la aplicación de escritorio

171 

172Las superficies CLI y Desktop comparten el mismo motor de computer use. Algunos controles específicos de Desktop aún no están en la CLI:

173 

174| Característica | Desktop | CLI |

175| :------------------------------ | :----------------------------------------------------------- | :--------------------------------- |

176| Habilitar | Alternar en **Settings > General** (bajo **Desktop app**) | Habilitar `computer-use` en `/mcp` |

177| Lista de aplicaciones denegadas | Configurable en Settings | Aún no disponible |

178| Alternar auto-unhide | Opcional | Siempre activado |

179| Integración de Dispatch | Las sesiones generadas por Dispatch pueden usar computer use | No aplicable |

180 

181## Solución de problemas

182 

183### "Computer use is in use by another Claude session"

184 

185Otra sesión de Claude Code mantiene el bloqueo. Termine la tarea en esa sesión o salga de ella. Si la otra sesión se bloqueó, el bloqueo se libera automáticamente cuando Claude detecta que el proceso ya no se está ejecutando.

186 

187### El mensaje de permisos de macOS sigue reapareciendo

188 

189macOS a veces requiere un reinicio del proceso solicitante después de otorgar Screen Recording. Salga completamente de Claude Code e inicie una nueva sesión. Si el mensaje persiste, abra **System Settings > Privacy & Security > Screen Recording** y confirme que su aplicación de terminal está listada y habilitada.

190 

191### `computer-use` no aparece en `/mcp`

192 

193El servidor solo aparece en configuraciones elegibles. Verifique que:

194 

195* Está en macOS. Computer use no está disponible en Linux o Windows.

196* Está ejecutando Claude Code v2.1.85 o posterior. Ejecute `claude --version` para verificar.

197* Está en un plan Pro o Max. Ejecute `/status` para confirmar su suscripción.

198* Está autenticado a través de claude.ai. Computer use no está disponible con proveedores de terceros como Amazon Bedrock, Google Cloud Vertex AI o Microsoft Foundry. Si accede a Claude exclusivamente a través de un proveedor de terceros, necesita una cuenta separada de claude.ai para usar esta característica.

199* Está en una sesión interactiva. Computer use no está disponible en modo no interactivo con la bandera `-p`.

200 

201## Ver también

202 

203* [Computer use en Desktop](/es/desktop#let-claude-use-your-computer): la misma capacidad con una página de configuración gráfica

204* [Claude en Chrome](/es/chrome): automatización de navegador para tareas basadas en web

205* [MCP](/es/mcp): conecte Claude a herramientas y APIs estructuradas

206* [Sandboxing](/es/sandboxing): cómo la herramienta Bash de Claude aísla el acceso al sistema de archivos y red

207* [Guía de seguridad de computer use](https://support.claude.com/en/articles/14128542): mejores prácticas para computer use seguro

costs.md +203 −0 created

Details

1> ## Documentation Index

2> Fetch the complete documentation index at: https://code.claude.com/docs/llms.txt

3> Use this file to discover all available pages before exploring further.

4 

5# Gestionar costos de manera efectiva

6 

7> Realice un seguimiento del uso de tokens, establezca límites de gasto del equipo y reduzca los costos de Claude Code con la gestión del contexto, la selección de modelos, la configuración del pensamiento extendido y los hooks de preprocesamiento.

8 

9Claude Code cobra por consumo de tokens de API. Para precios de planes de suscripción (Pro, Max, Team, Enterprise), consulte [claude.com/pricing](https://claude.com/pricing). Los costos por desarrollador varían ampliamente según la selección del modelo, el tamaño de la base de código y los patrones de uso, como ejecutar múltiples instancias o automatización.

10 

11En implementaciones empresariales, el costo promedio es de alrededor de \$13 por desarrollador por día activo y \$150-250 por desarrollador por mes, con costos que se mantienen por debajo de \$30 por día activo para el 90% de los usuarios. Para estimar el gasto de su equipo, comience con un pequeño grupo piloto y use las herramientas de seguimiento a continuación para establecer una línea base antes de un despliegue más amplio.

12 

13Esta página cubre cómo [realizar un seguimiento de sus costos](#track-your-costs), [gestionar costos para equipos](#managing-costs-for-teams) y [reducir el uso de tokens](#reduce-token-usage).

14 

15## Realice un seguimiento de sus costos

16 

17### Uso del comando `/usage`

18 

19<Note>

20 El bloque Session en `/usage` muestra el uso de tokens de API y está destinado a usuarios de API. Los suscriptores de Claude Max y Pro tienen el uso incluido en su suscripción, por lo que la cifra de costo de sesión no es relevante para fines de facturación. Los suscriptores ven barras de uso del plan y estadísticas de actividad en la misma pantalla.

21</Note>

22 

23El comando `/usage` proporciona estadísticas detalladas de uso de tokens para su sesión actual. La cifra en dólares es una estimación calculada localmente a partir de conteos de tokens y puede diferir de su factura real. Para facturación autorizada, consulte la página de Uso en la [Consola de Claude](https://platform.claude.com/usage).

24 

25```text theme={null}

26Total cost: $0.55

27Total duration (API): 6m 19.7s

28Total duration (wall): 6h 33m 10.2s

29Total code changes: 0 lines added, 0 lines removed

30```

31 

32## Gestión de costos para equipos

33 

34Cuando utiliza Claude API, puede [establecer límites de gasto del espacio de trabajo](https://platform.claude.com/docs/es/build-with-claude/workspaces#workspace-limits) en el gasto total del espacio de trabajo de Claude Code. Los administradores pueden [ver informes de costos y uso](https://platform.claude.com/docs/es/build-with-claude/workspaces#usage-and-cost-tracking) en la Consola.

35 

36<Note>

37 Cuando autentica por primera vez Claude Code con su cuenta de Claude Console, se crea automáticamente un espacio de trabajo llamado "Claude Code" para usted. Este espacio de trabajo proporciona seguimiento y gestión centralizada de costos para todo el uso de Claude Code en su organización. No puede crear claves de API para este espacio de trabajo; es exclusivamente para autenticación y uso de Claude Code.

38 

39 Para organizaciones con límites de velocidad personalizados, el tráfico de Claude Code en este espacio de trabajo cuenta hacia los límites de velocidad de API generales de su organización. Puede establecer un [límite de velocidad del espacio de trabajo](https://platform.claude.com/docs/es/api/rate-limits#setting-lower-limits-for-workspaces) en la página Limits de este espacio de trabajo en la Consola de Claude para limitar la parte de Claude Code y proteger otras cargas de trabajo de producción.

40</Note>

41 

42En Bedrock, Vertex y Foundry, Claude Code no envía métricas desde su nube. Para obtener métricas de costos, varias grandes empresas informaron usar [LiteLLM](/es/llm-gateway#litellm-configuration), que es una herramienta de código abierto que ayuda a las empresas a [realizar un seguimiento del gasto por clave](https://docs.litellm.ai/docs/proxy/virtual_keys#tracking-spend). Este proyecto no está afiliado con Anthropic y no ha sido auditado por seguridad.

43 

44### Recomendaciones de límite de velocidad

45 

46Al configurar Claude Code para equipos, considere estas recomendaciones de Tokens Por Minuto (TPM) y Solicitudes Por Minuto (RPM) por usuario según el tamaño de su organización:

47 

48| Tamaño del equipo | TPM por usuario | RPM por usuario |

49| ----------------- | --------------- | --------------- |

50| 1-5 usuarios | 200k-300k | 5-7 |

51| 5-20 usuarios | 100k-150k | 2.5-3.5 |

52| 20-50 usuarios | 50k-75k | 1.25-1.75 |

53| 50-100 usuarios | 25k-35k | 0.62-0.87 |

54| 100-500 usuarios | 15k-20k | 0.37-0.47 |

55| 500+ usuarios | 10k-15k | 0.25-0.35 |

56 

57Por ejemplo, si tiene 200 usuarios, podría solicitar 20k TPM para cada usuario, o 4 millones de TPM totales (200\*20,000 = 4 millones).

58 

59El TPM por usuario disminuye a medida que crece el tamaño del equipo porque menos usuarios tienden a usar Claude Code simultáneamente en organizaciones más grandes. Estos límites de velocidad se aplican a nivel de organización, no por usuario individual, lo que significa que los usuarios individuales pueden consumir temporalmente más que su parte calculada cuando otros no están usando activamente el servicio.

60 

61<Note>

62 Si anticipa escenarios con uso concurrente inusualmente alto (como sesiones de capacitación en vivo con grupos grandes), es posible que necesite asignaciones de TPM más altas por usuario.

63</Note>

64 

65### Costos de tokens del equipo de agentes

66 

67[Los equipos de agentes](/es/agent-teams) generan múltiples instancias de Claude Code, cada una con su propia ventana de contexto. El uso de tokens se escala con el número de compañeros de equipo activos y cuánto tiempo se ejecuta cada uno.

68 

69Para mantener los costos del equipo de agentes manejables:

70 

71* Use Sonnet para compañeros de equipo. Equilibra capacidad y costo para tareas de coordinación.

72* Mantenga los equipos pequeños. Cada compañero de equipo ejecuta su propia ventana de contexto, por lo que el uso de tokens es aproximadamente proporcional al tamaño del equipo.

73* Mantenga los prompts de generación enfocados. Los compañeros de equipo cargan CLAUDE.md, servidores MCP y skills automáticamente, pero todo en el prompt de generación se suma a su contexto desde el principio.

74* Limpie los equipos cuando el trabajo esté hecho. Los compañeros de equipo activos continúan consumiendo tokens incluso si están inactivos.

75* Los equipos de agentes están deshabilitados por defecto. Establezca `CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS=1` en su [settings.json](/es/settings) o entorno para habilitarlos. Consulte [habilitar equipos de agentes](/es/agent-teams#enable-agent-teams).

76 

77## Reducir el uso de tokens

78 

79Los costos de tokens se escalan con el tamaño del contexto: cuanto más contexto procesa Claude, más tokens utiliza. Claude Code optimiza automáticamente los costos a través del almacenamiento en caché de prompts (que reduce costos para contenido repetido como prompts del sistema) y auto-compactación (que resume el historial de conversación cuando se acerca a los límites del contexto).

80 

81Las siguientes estrategias lo ayudan a mantener el contexto pequeño y reducir los costos por mensaje.

82 

83### Gestione el contexto de manera proactiva

84 

85Use `/usage` para verificar su uso actual de tokens, o [configure su línea de estado](/es/statusline#context-window-usage) para mostrarla continuamente.

86 

87* **Limpie entre tareas**: Use `/clear` para comenzar de nuevo cuando cambie a trabajo no relacionado. El contexto obsoleto desperdicia tokens en cada mensaje posterior. Use `/rename` antes de limpiar para que pueda encontrar fácilmente la sesión más tarde, luego `/resume` para volver a ella.

88* **Agregue instrucciones de compactación personalizadas**: `/compact Focus on code samples and API usage` le dice a Claude qué preservar durante la summarización.

89 

90También puede personalizar el comportamiento de compactación en su CLAUDE.md:

91 

92```markdown theme={null}

93# Compact instructions

94 

95When you are using compact, please focus on test output and code changes

96```

97 

98### Elija el modelo correcto

99 

100Sonnet maneja bien la mayoría de tareas de codificación y cuesta menos que Opus. Reserve Opus para decisiones arquitectónicas complejas o razonamiento de múltiples pasos. Use `/model` para cambiar modelos a mitad de sesión, o establezca un valor predeterminado en `/config`. Para tareas simples de subagent, especifique `model: haiku` en su [configuración de subagent](/es/sub-agents#choose-a-model).

101 

102### Reduzca la sobrecarga del servidor MCP

103 

104Las definiciones de herramientas MCP se [difieren por defecto](/es/mcp#scale-with-mcp-tool-search), por lo que solo los nombres de herramientas entran en contexto hasta que Claude usa una herramienta específica. Ejecute `/context` para ver qué está consumiendo espacio.

105 

106* **Prefiera herramientas CLI cuando estén disponibles**: Herramientas como `gh`, `aws`, `gcloud` y `sentry-cli` son más eficientes en contexto que los servidores MCP porque no agregan ningún listado por herramienta. Claude puede ejecutar comandos CLI directamente.

107* **Deshabilite servidores no utilizados**: Ejecute `/mcp` para ver servidores configurados y deshabilite cualquiera que no esté usando activamente.

108 

109### Instale plugins de inteligencia de código para lenguajes tipados

110 

111[Los plugins de inteligencia de código](/es/discover-plugins#code-intelligence) le dan a Claude navegación de símbolos precisa en lugar de búsqueda basada en texto, reduciendo lecturas de archivos innecesarias al explorar código desconocido. Una única llamada "ir a definición" reemplaza lo que de otro modo sería un grep seguido de lectura de múltiples archivos candidatos. Los servidores de lenguaje instalados también reportan errores de tipo automáticamente después de ediciones, por lo que Claude detecta errores sin ejecutar un compilador.

112 

113### Descargue el procesamiento en hooks y skills

114 

115Los [hooks](/es/hooks) personalizados pueden preprocesar datos antes de que Claude los vea. En lugar de que Claude lea un archivo de registro de 10,000 líneas para encontrar errores, un hook puede buscar `ERROR` y devolver solo las líneas coincidentes, reduciendo el contexto de decenas de miles de tokens a cientos.

116 

117Una [skill](/es/skills) puede darle a Claude conocimiento de dominio para que no tenga que explorar. Por ejemplo, una skill "codebase-overview" podría describir la arquitectura de su proyecto, directorios clave y convenciones de nomenclatura. Cuando Claude invoca la skill, obtiene este contexto inmediatamente en lugar de gastar tokens leyendo múltiples archivos para entender la estructura.

118 

119Por ejemplo, este hook PreToolUse filtra la salida de prueba para mostrar solo fallos:

120 

121<Tabs>

122 <Tab title="settings.json">

123 Agregue esto a su [settings.json](/es/settings#settings-files) para ejecutar el hook antes de cada comando Bash:

124 

125 ```json theme={null}

126 {

127 "hooks": {

128 "PreToolUse": [

129 {

130 "matcher": "Bash",

131 "hooks": [

132 {

133 "type": "command",

134 "command": "~/.claude/hooks/filter-test-output.sh"

135 }

136 ]

137 }

138 ]

139 }

140 }

141 ```

142 </Tab>

143 

144 <Tab title="filter-test-output.sh">

145 El hook llama a este script, que verifica si el comando es un ejecutor de pruebas y lo modifica para mostrar solo fallos:

146 

147 ```bash theme={null}

148 #!/bin/bash

149 input=$(cat)

150 cmd=$(echo "$input" | jq -r '.tool_input.command')

151 

152 # If running tests, filter to show only failures

153 if [[ "$cmd" =~ ^(npm test|pytest|go test) ]]; then

154 filtered_cmd="$cmd 2>&1 | grep -A 5 -E '(FAIL|ERROR|error:)' | head -100"

155 echo "{\"hookSpecificOutput\":{\"hookEventName\":\"PreToolUse\",\"permissionDecision\":\"allow\",\"updatedInput\":{\"command\":\"$filtered_cmd\"}}}"

156 else

157 echo "{}"

158 fi

159 ```

160 </Tab>

161</Tabs>

162 

163### Mueva instrucciones de CLAUDE.md a skills

164 

165Su archivo [CLAUDE.md](/es/memory) se carga en contexto al inicio de la sesión. Si contiene instrucciones detalladas para flujos de trabajo específicos (como revisiones de PR o migraciones de bases de datos), esos tokens están presentes incluso cuando está haciendo trabajo no relacionado. [Skills](/es/skills) se cargan bajo demanda solo cuando se invocan, por lo que mover instrucciones especializadas a skills mantiene su contexto base más pequeño. Apunte a mantener CLAUDE.md bajo 200 líneas incluyendo solo lo esencial.

166 

167### Ajuste el pensamiento extendido

168 

169El pensamiento extendido está habilitado por defecto porque mejora significativamente el rendimiento en tareas complejas de planificación y razonamiento. Los tokens de pensamiento se facturan como tokens de salida, y el presupuesto predeterminado puede ser decenas de miles de tokens por solicitud dependiendo del modelo. Para tareas más simples donde el razonamiento profundo no es necesario, puede reducir costos bajando el [nivel de esfuerzo](/es/model-config#adjust-effort-level) con `/effort` o en `/model`, deshabilitando el pensamiento en `/config`, o bajando el presupuesto con `MAX_THINKING_TOKENS=8000`.

170 

171### Delegue operaciones detalladas a subagents

172 

173Ejecutar pruebas, obtener documentación o procesar archivos de registro puede consumir contexto significativo. Delegue estos a [subagents](/es/sub-agents#isolate-high-volume-operations) para que la salida detallada permanezca en el contexto del subagent mientras solo un resumen regresa a su conversación principal.

174 

175### Gestione los costos del equipo de agentes

176 

177Los equipos de agentes usan aproximadamente 7 veces más tokens que sesiones estándar cuando los compañeros de equipo se ejecutan en plan mode, porque cada compañero de equipo mantiene su propia ventana de contexto y se ejecuta como una instancia separada de Claude. Mantenga las tareas del equipo pequeñas y autónomas para limitar el uso de tokens por compañero de equipo. Consulte [equipos de agentes](/es/agent-teams) para obtener detalles.

178 

179### Escriba prompts específicos

180 

181Solicitudes vagas como "mejorar esta base de código" desencadenan escaneo amplio. Solicitudes específicas como "agregar validación de entrada a la función de inicio de sesión en auth.ts" permiten que Claude trabaje eficientemente con lecturas de archivos mínimas.

182 

183### Trabaje eficientemente en tareas complejas

184 

185Para trabajo más largo o más complejo, estos hábitos ayudan a evitar tokens desperdiciados por tomar el camino equivocado:

186 

187* **Use plan mode para tareas complejas**: Presione Shift+Tab para entrar en [plan mode](/es/common-workflows#use-plan-mode-for-safe-code-analysis) antes de la implementación. Claude explora la base de código y propone un enfoque para su aprobación, previniendo re-trabajo costoso cuando la dirección inicial es incorrecta.

188* **Corrija el curso temprano**: Si Claude comienza a ir en la dirección equivocada, presione Escape para detener inmediatamente. Use `/rewind` o presione Escape dos veces para restaurar la conversación y el código a un checkpoint anterior.

189* **Proporcione objetivos de verificación**: Incluya casos de prueba, pegue capturas de pantalla o defina la salida esperada en su prompt. Cuando Claude puede verificar su propio trabajo, detecta problemas antes de que necesite solicitar correcciones.

190* **Pruebe incrementalmente**: Escriba un archivo, pruébelo, luego continúe. Esto detecta problemas temprano cuando son baratos de arreglar.

191 

192## Uso de tokens en segundo plano

193 

194Claude Code usa tokens para algunas funcionalidades en segundo plano incluso cuando está inactivo:

195 

196* **Summarización de conversación**: Trabajos en segundo plano que resumen conversaciones anteriores para la característica `claude --resume`

197* **Procesamiento de comandos**: Algunos comandos como `/usage` pueden generar solicitudes para verificar el estado

198 

199Estos procesos en segundo plano consumen una pequeña cantidad de tokens (típicamente menos de \$0.04 por sesión) incluso sin interacción activa.

200 

201## Comprensión de cambios en el comportamiento de Claude Code

202 

203Claude Code recibe actualizaciones regularmente que pueden cambiar cómo funcionan las características, incluido el reporte de costos. Ejecute `claude --version` para verificar su versión actual. Para preguntas específicas de facturación, contacte al soporte de Anthropic a través de su [cuenta de Consola](https://platform.claude.com/login).

data-usage.md +124 −0 created

Details

1> ## Documentation Index

2> Fetch the complete documentation index at: https://code.claude.com/docs/llms.txt

3> Use this file to discover all available pages before exploring further.

4 

5# Uso de datos

6 

7> Conozca las políticas de uso de datos de Anthropic para Claude

8 

9## Políticas de datos

10 

11### Política de entrenamiento de datos

12 

13**Usuarios de consumidor (planes Free, Pro y Max)**:

14Le damos la opción de permitir que sus datos se utilicen para mejorar futuros modelos de Claude. Entrenaremos nuevos modelos utilizando datos de cuentas Free, Pro y Max cuando esta configuración esté activada (incluso cuando utiliza Claude Code desde estas cuentas).

15 

16**Usuarios comerciales**: (planes Team y Enterprise, API, plataformas de terceros y Claude Gov) mantienen políticas existentes: Anthropic no entrena modelos generativos utilizando código o indicaciones enviados a Claude Code bajo términos comerciales, a menos que el cliente haya elegido proporcionarnos sus datos para mejorar el modelo (por ejemplo, el [Development Partner Program](https://support.claude.com/es/articles/11174108-about-the-development-partner-program)).

17 

18### Development Partner Program

19 

20Si opta explícitamente por métodos para proporcionarnos materiales para entrenar, como a través del [Development Partner Program](https://support.claude.com/es/articles/11174108-about-the-development-partner-program), podemos utilizar esos materiales proporcionados para entrenar nuestros modelos. Un administrador de la organización puede optar explícitamente por el Development Partner Program para su organización. Tenga en cuenta que este programa está disponible solo para API de primera parte de Anthropic, y no para usuarios de Bedrock o Vertex.

21 

22### Comentarios usando el comando `/feedback`

23 

24Si elige enviarnos comentarios sobre Claude Code usando el comando `/feedback`, podemos utilizar sus comentarios para mejorar nuestros productos y servicios. Las transcripciones compartidas a través de `/feedback` se retienen durante 5 años.

25 

26### Encuestas de calidad de sesión

27 

28Cuando ve el mensaje "¿Cómo está funcionando Claude en esta sesión?" en Claude Code, responder a esta encuesta, incluyendo seleccionar "Descartar", registra solo su calificación. No recopilamos ni almacenamos transcripciones de conversación, entradas, salidas u otros datos de sesión como parte de la solicitud de calificación en sí. A diferencia de los comentarios de pulgar hacia arriba/abajo o los informes `/feedback`, esta encuesta de calidad de sesión es una métrica simple de satisfacción del producto.

29 

30Después de la solicitud de calificación, puede ver una pregunta de seguimiento separada que pregunta "¿Puede Anthropic ver su transcripción de sesión para ayudarnos a mejorar Claude Code?". Este es un segundo paso opcional distinto de la calificación:

31 

32* **Sí**: carga su transcripción de conversación, cualquier transcripción de subagente y el archivo de registro de sesión sin procesar del disco a Anthropic. Los patrones de clave API y token conocidos se redactan antes de la carga. El código fuente, el contenido del archivo y otro contenido de conversación se cargan tal cual. Las transcripciones compartidas se retienen hasta 6 meses.

33* **No**: rechaza sin enviar nada

34* **No preguntar de nuevo**: rechaza y evita que este seguimiento aparezca en futuras sesiones

35 

36Nada se carga a menos que seleccione explícitamente **Sí**. Las organizaciones con [zero data retention](/es/zero-data-retention), o donde los comentarios del producto están deshabilitados por política de la organización, nunca ven este seguimiento. Sus respuestas a esta encuesta, incluyendo transcripciones de sesión enviadas después de la solicitud de calificación, no afectan sus preferencias de entrenamiento de datos y no se pueden utilizar para entrenar nuestros modelos de IA.

37 

38Para desactivar estas encuestas, establezca `CLAUDE_CODE_DISABLE_FEEDBACK_SURVEY=1`. La encuesta también se desactiva cuando se establece `DISABLE_TELEMETRY` o `CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC`. Para controlar la frecuencia en lugar de desactivar, establezca [`feedbackSurveyRate`](/es/settings#available-settings) en su archivo de configuración a una probabilidad entre `0` y `1`.

39 

40### Retención de datos

41 

42Anthropic retiene datos de Claude Code según su tipo de cuenta y preferencias.

43 

44**Usuarios de consumidor (planes Free, Pro y Max)**:

45 

46* Usuarios que permiten el uso de datos para mejorar el modelo: período de retención de 5 años para apoyar el desarrollo del modelo y mejoras de seguridad

47* Usuarios que no permiten el uso de datos para mejorar el modelo: período de retención de 30 días

48* La configuración de privacidad se puede cambiar en cualquier momento en [claude.ai/settings/data-privacy-controls](https://claude.ai/settings/data-privacy-controls).

49 

50**Usuarios comerciales (Team, Enterprise y API)**:

51 

52* Estándar: período de retención de 30 días

53* [Zero data retention](/es/zero-data-retention): disponible para Claude Code en Claude for Enterprise. ZDR se habilita por organización; cada nueva organización debe tener ZDR habilitado por separado por su equipo de cuenta

54* Almacenamiento en caché local: los clientes de Claude Code almacenan transcripciones de sesión localmente en texto sin formato bajo `~/.claude/projects/` durante 30 días de forma predeterminada para permitir la reanudación de sesiones. Ajuste el período con `cleanupPeriodDays`. Consulte [application data](/es/claude-directory#application-data) para ver qué se almacena y cómo borrarlo.

55 

56Puede eliminar sesiones individuales de Claude Code en la web en cualquier momento. Eliminar una sesión elimina permanentemente los datos de eventos de la sesión. Para obtener instrucciones sobre cómo eliminar sesiones, consulte [Delete sessions](/es/claude-code-on-the-web#delete-sessions).

57 

58Obtenga más información sobre las prácticas de retención de datos en nuestro [Privacy Center](https://privacy.anthropic.com/).

59 

60Para obtener todos los detalles, consulte nuestros [Commercial Terms of Service](https://www.anthropic.com/legal/commercial-terms) (para usuarios de Team, Enterprise y API) o [Consumer Terms](https://www.anthropic.com/legal/consumer-terms) (para usuarios de Free, Pro y Max) y [Privacy Policy](https://www.anthropic.com/legal/privacy).

61 

62## Acceso a datos

63 

64Para todos los usuarios de primera parte, puede obtener más información sobre qué datos se registran para [Claude Code local](#local-claude-code-data-flow-and-dependencies) y [Claude Code remoto](#cloud-execution-data-flow-and-dependencies). Las sesiones de [Remote Control](/es/remote-control) siguen el flujo de datos local ya que toda la ejecución ocurre en su máquina. Tenga en cuenta que para Claude Code remoto, Claude accede al repositorio donde inicia su sesión de Claude Code. Claude no accede a repositorios que ha conectado pero en los que no ha iniciado una sesión.

65 

66## Local Claude Code: Flujo de datos y dependencias

67 

68El diagrama a continuación muestra cómo Claude Code se conecta a servicios externos durante la instalación y operación normal. Las líneas sólidas indican conexiones requeridas, mientras que las líneas punteadas representan flujos de datos opcionales o iniciados por el usuario.

69 

70<img src="https://mintcdn.com/claude-code/YcBW2H7CArGcduPb/images/claude-code-data-flow.svg?fit=max&auto=format&n=YcBW2H7CArGcduPb&q=85&s=b600a89f84fc86f9ff7be00a466c0635" alt="Diagrama que muestra las conexiones externas de Claude Code: instalar/actualizar se conecta al servidor de distribución, y las solicitudes del usuario se conectan a servicios de Anthropic incluyendo autenticación de consola, API pública, y opcionalmente Statsig, Sentry e informes de errores" width="720" height="520" data-path="images/claude-code-data-flow.svg" />

71 

72Claude Code se ejecuta localmente. Para interactuar con el LLM, Claude Code envía datos a través de la red. Estos datos incluyen todos los indicadores del usuario y salidas del modelo, cifrados en tránsito a través de TLS 1.2+. Claude Code es compatible con la mayoría de VPN y proxies LLM populares.

73 

74El cifrado en reposo depende de su proveedor de modelo:

75 

76| Proveedor | Cifrado en reposo |

77| ---------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------- |

78| Anthropic API | Cifrado de disco a nivel de infraestructura (AES-256). Habilite [Zero Data Retention](/es/zero-data-retention) para no persistencia del lado del servidor. |

79| Amazon Bedrock | AES-256 con claves administradas por AWS. Claves administradas por el cliente disponibles a través de AWS KMS. |

80| Google Cloud Vertex AI | Claves de cifrado administradas por Google. CMEK disponible. |

81| Microsoft Foundry | Las solicitudes se enrutan a la infraestructura de Anthropic con cifrado de disco AES-256. |

82 

83Claude Code se construye sobre las API de Anthropic. Para obtener detalles sobre los controles de seguridad de la API, incluyendo procedimientos de registro de API, consulte los artefactos de cumplimiento en el [Anthropic Trust Center](https://trust.anthropic.com).

84 

85### Cloud execution: Flujo de datos y dependencias

86 

87Cuando se utiliza [Claude Code en la web](/es/claude-code-on-the-web), las sesiones se ejecutan en máquinas virtuales administradas por Anthropic en lugar de localmente. En entornos en la nube:

88 

89* **Almacenamiento de código y datos:** Su repositorio se clona en una VM aislada. El código y los datos de sesión están sujetos a las políticas de retención y uso para su tipo de cuenta (consulte la sección Retención de datos anterior)

90* **Credenciales:** La autenticación de GitHub se maneja a través de un proxy seguro; sus credenciales de GitHub nunca ingresan al sandbox

91* **Tráfico de red:** Todo el tráfico saliente pasa a través de un proxy de seguridad para registro de auditoría y prevención de abuso

92* **Datos de sesión:** Los indicadores, cambios de código y salidas siguen las mismas políticas de datos que el uso local de Claude Code

93 

94Para obtener detalles de seguridad sobre la ejecución en la nube, consulte [Security](/es/security#cloud-execution-security).

95 

96## Servicios de telemetría

97 

98Claude Code se conecta desde las máquinas de los usuarios al servicio Statsig para registrar métricas operativas como latencia, confiabilidad y patrones de uso. Este registro no incluye ningún código o ruta de archivo. Los datos se cifran en tránsito usando TLS y en reposo usando cifrado AES de 256 bits. Lea más en la [documentación de seguridad de Statsig](https://www.statsig.com/trust/security). Para optar por no participar en la telemetría de Statsig, establezca la variable de entorno `DISABLE_TELEMETRY`.

99 

100Claude Code se conecta desde las máquinas de los usuarios a Sentry para el registro de errores operativos. Los datos se cifran en tránsito usando TLS y en reposo usando cifrado AES de 256 bits. Lea más en la [documentación de seguridad de Sentry](https://sentry.io/security/). Para optar por no participar en el registro de errores, establezca la variable de entorno `DISABLE_ERROR_REPORTING`.

101 

102Cuando los usuarios ejecutan el comando `/feedback`, se envía una copia de su historial de conversación completo incluyendo código a Anthropic. Los datos se cifran en tránsito usando TLS. Opcionalmente, se crea un problema de GitHub en el repositorio público. Para optar por no participar, establezca la variable de entorno `DISABLE_FEEDBACK_COMMAND` a `1`.

103 

104## Comportamientos predeterminados por proveedor de API

105 

106De forma predeterminada, los informes de errores, la telemetría y los informes de errores se desactivan cuando se utiliza Bedrock, Vertex o Foundry. Las encuestas de calidad de sesión y la verificación de seguridad del dominio WebFetch son excepciones y se ejecutan independientemente del proveedor. Puede optar por no participar en todo el tráfico no esencial, incluyendo encuestas, a la vez estableciendo `CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC`. Esta variable no afecta la verificación de WebFetch, que tiene su propio opt-out. Aquí están los comportamientos predeterminados completos:

107 

108| Servicio | Claude API | Vertex API | Bedrock API | Foundry API |

109| -------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------- |

110| **Statsig (Métricas)** | Activado de forma predeterminada.<br />`DISABLE_TELEMETRY=1` para desactivar. | Desactivado de forma predeterminada.<br />`CLAUDE_CODE_USE_VERTEX` debe ser 1. | Desactivado de forma predeterminada.<br />`CLAUDE_CODE_USE_BEDROCK` debe ser 1. | Desactivado de forma predeterminada.<br />`CLAUDE_CODE_USE_FOUNDRY` debe ser 1. |

111| **Sentry (Errores)** | Activado de forma predeterminada.<br />`DISABLE_ERROR_REPORTING=1` para desactivar. | Desactivado de forma predeterminada.<br />`CLAUDE_CODE_USE_VERTEX` debe ser 1. | Desactivado de forma predeterminada.<br />`CLAUDE_CODE_USE_BEDROCK` debe ser 1. | Desactivado de forma predeterminada.<br />`CLAUDE_CODE_USE_FOUNDRY` debe ser 1. |

112| **Claude API (informes `/feedback`)** | Activado de forma predeterminada.<br />`DISABLE_FEEDBACK_COMMAND=1` para desactivar. | Desactivado de forma predeterminada.<br />`CLAUDE_CODE_USE_VERTEX` debe ser 1. | Desactivado de forma predeterminada.<br />`CLAUDE_CODE_USE_BEDROCK` debe ser 1. | Desactivado de forma predeterminada.<br />`CLAUDE_CODE_USE_FOUNDRY` debe ser 1. |

113| **Encuestas de calidad de sesión** | Activado de forma predeterminada.<br />`CLAUDE_CODE_DISABLE_FEEDBACK_SURVEY=1` para desactivar. | Activado de forma predeterminada.<br />`CLAUDE_CODE_DISABLE_FEEDBACK_SURVEY=1` para desactivar. | Activado de forma predeterminada.<br />`CLAUDE_CODE_DISABLE_FEEDBACK_SURVEY=1` para desactivar. | Activado de forma predeterminada.<br />`CLAUDE_CODE_DISABLE_FEEDBACK_SURVEY=1` para desactivar. |

114| **Verificación de seguridad del dominio WebFetch** | Activado de forma predeterminada.<br />`skipWebFetchPreflight: true` en [settings](/es/settings) para desactivar. | Activado de forma predeterminada.<br />`skipWebFetchPreflight: true` en [settings](/es/settings) para desactivar. | Activado de forma predeterminada.<br />`skipWebFetchPreflight: true` en [settings](/es/settings) para desactivar. | Activado de forma predeterminada.<br />`skipWebFetchPreflight: true` en [settings](/es/settings) para desactivar. |

115 

116Todas las variables de entorno se pueden verificar en `settings.json` (consulte [referencia de configuración](/es/settings)).

117 

118A partir de v2.1.126, cuando una plataforma host establece `CLAUDE_CODE_PROVIDER_MANAGED_BY_HOST`, las métricas de Statsig se activan de forma predeterminada para Vertex, Bedrock y Foundry, y siguen el opt-out estándar de `DISABLE_TELEMETRY`. Los informes de errores de Sentry y los informes `/feedback` permanecen desactivados de forma predeterminada en esos proveedores.

119 

120### Verificación de seguridad del dominio WebFetch

121 

122Antes de obtener una URL, la herramienta WebFetch envía el nombre de host solicitado a `api.anthropic.com` para verificarlo contra una lista de bloqueo de seguridad mantenida por Anthropic. Solo se envía el nombre de host, no la URL completa, la ruta o el contenido de la página. Los resultados se almacenan en caché por nombre de host durante cinco minutos.

123 

124Esta verificación se ejecuta independientemente de qué proveedor de modelo utilice y no se ve afectada por `CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC`. Si su red bloquea `api.anthropic.com`, las solicitudes de WebFetch fallan hasta que permita el dominio o establezca `skipWebFetchPreflight: true` en [settings](/es/settings). Desactivar la verificación significa que WebFetch intenta recuperar cualquier URL sin consultar la lista de bloqueo, así que combínelo con [reglas de permisos de `WebFetch`](/es/permissions#webfetch) si necesita restringir qué dominios puede alcanzar Claude.

debug-your-config.md +97 −0 created

Details

1> ## Documentation Index

2> Fetch the complete documentation index at: https://code.claude.com/docs/llms.txt

3> Use this file to discover all available pages before exploring further.

4 

5# Depura tu configuración

6 

7> Diagnostica por qué CLAUDE.md, configuración, hooks, servidores MCP o skills no están surtiendo efecto. Usa /context, /doctor, /hooks y /mcp para ver qué se cargó realmente.

8 

9Cuando Claude ignora una instrucción o una característica que configuró no aparece, la causa suele ser que el archivo no se cargó, se cargó desde una ubicación diferente a la que esperaba, u otro archivo la anuló. Esta guía muestra cómo inspeccionar qué cargó realmente Claude Code para que pueda reducir cuál se aplica.

10 

11Para problemas de instalación, autenticación y conectividad, consulte [Troubleshooting installation and login](/es/troubleshoot-install) en su lugar.

12 

13## Ver qué se cargó en el contexto

14 

15El comando `/context` muestra todo lo que ocupa la ventana de contexto para la sesión actual, desglosado por categoría: indicación del sistema, archivos de memoria, skills, herramientas MCP y mensajes de conversación. Ejecútelo primero para confirmar si su `CLAUDE.md`, reglas o descripciones de skills están presentes en absoluto.

16 

17Para obtener detalles sobre una categoría específica, continúe con el comando dedicado:

18 

19| Comando | Muestra |

20| :------------- | :---------------------------------------------------------------------------------------- |

21| `/memory` | Qué archivos `CLAUDE.md` y rules se cargaron, más entradas de memoria automática |

22| `/skills` | Skills disponibles de fuentes de proyecto, usuario y plugin |

23| `/agents` | Subagentes configurados y sus configuraciones |

24| `/hooks` | Configuraciones de hook activas |

25| `/mcp` | Servidores MCP conectados y su estado |

26| `/permissions` | Reglas de permitir y denegar resueltas actualmente en vigor |

27| `/doctor` | Diagnósticos de configuración: claves inválidas, errores de esquema, salud de instalación |

28| `/status` | Fuentes de configuración activas, incluido si la configuración administrada está en vigor |

29 

30Si falta un archivo de memoria en `/memory`, verifique su ubicación contra [cómo se cargan los archivos CLAUDE.md](/es/memory#how-claude-md-files-load). Los archivos `CLAUDE.md` del subdirectorio se cargan bajo demanda cuando Claude lee un archivo en ese directorio con la herramienta Read, no al inicio de la sesión.

31 

32Si `/memory` confirma que el archivo se cargó pero Claude aún no sigue una instrucción particular, el problema probablemente sea cómo se escribe la instrucción en lugar de si se cargó. CLAUDE.md funciona bien para el tipo de orientación que daría a un nuevo compañero de equipo, como convenciones de proyecto, comandos de compilación y dónde pertenecen los archivos.

33 

34La adherencia disminuye cuando una instrucción es lo suficientemente vaga como para interpretarse de múltiples formas, cuando dos archivos dan direcciones conflictivas, o cuando el archivo ha crecido lo suficiente como para que las reglas individuales reciban menos atención. [Escribir instrucciones efectivas](/es/memory#write-effective-instructions) cubre los patrones de especificidad, tamaño y estructura que mantienen la adherencia alta.

35 

36<Note>

37 CLAUDE.md y los permisos resuelven problemas diferentes. CLAUDE.md le dice a Claude cómo funciona su proyecto para que tome buenas decisiones. [Permisos](/es/permissions) y [hooks](/es/hooks) aplican límites independientemente de lo que Claude decida. Use CLAUDE.md para "lo hacemos de esta manera aquí". Use permisos o hooks para límites de seguridad y cualquier cosa que nunca deba suceder, donde necesita una garantía en lugar de orientación.

38</Note>

39 

40## Verificar configuración resuelta

41 

42La configuración se fusiona en ámbitos administrados, de usuario, de proyecto y locales. La configuración administrada siempre gana cuando está presente. Entre el resto, el ámbito más cercano anula el más amplio en el orden local, luego proyecto, luego usuario. Algunos ajustes también se pueden establecer mediante banderas de línea de comandos o [variables de entorno](/es/env-vars), que actúan como otra capa de anulación. Cuando una configuración no parece aplicarse, el valor que estableció generalmente se anula por otro ámbito o una variable de entorno.

43 

44Ejecute `/doctor` para validar sus archivos de configuración y mostrar claves inválidas o errores de esquema. Ejecute `/status` para ver qué fuentes de configuración están activas, incluido si la configuración administrada está en vigor. Para entender qué ámbito gana para una clave determinada, consulte [Cómo interactúan los ámbitos](/es/settings#how-scopes-interact).

45 

46## Verificar servidores MCP

47 

48Ejecute `/mcp` para ver cada servidor configurado, su estado de conexión y si lo ha aprobado para el proyecto actual. Un servidor puede estar definido correctamente pero aún no proporcionar herramientas por algunas razones comunes:

49 

50* Los servidores con ámbito de proyecto en `.mcp.json` requieren una aprobación única. Si se descartó el mensaje, el servidor permanece deshabilitado hasta que lo apruebe desde `/mcp`.

51* Un servidor que no se inicia se muestra como fallido en `/mcp`. Las rutas de archivo relativas en `command` o `args` son una causa frecuente, ya que se resuelven contra el directorio desde el que lanzó Claude Code en lugar de la ubicación de `.mcp.json`.

52* Un servidor que se muestra como conectado pero enumera cero herramientas se ha iniciado correctamente pero no devuelve una lista de herramientas. Seleccione **Reconnect** desde `/mcp`. Si el recuento permanece en cero, ejecute `claude --debug mcp` para ver la salida stderr del servidor.

53 

54Para ubicaciones de configuración y reglas de ámbito, consulte [MCP](/es/mcp).

55 

56## Verificar hooks

57 

58Ejecute `/hooks` para enumerar cada hook registrado para la sesión actual, agrupado por evento. Si un hook que definió no aparece, no se está leyendo: los hooks van bajo la clave `"hooks"` en un archivo de configuración, no en un archivo independiente.

59 

60Si el hook aparece pero no se dispara, el matcher es la causa habitual. El campo `matcher` es una cadena única que usa `|` para coincidir con múltiples nombres de herramientas, por ejemplo `"Edit|Write"`. Un nombre de herramienta mal escrito falla silenciosamente porque el matcher nunca coincide. Un valor de matriz es un error de esquema: Claude Code muestra un aviso de error de configuración, `/doctor` informa del error de validación y la entrada del hook se descarta para que no aparezca en `/hooks`.

61 

62Las ediciones en `settings.json` surten efecto en la sesión en ejecución después de un breve retraso de estabilidad de archivo. No necesita reiniciar. Si `/hooks` aún muestra la definición anterior unos segundos después de guardar, ejecute `/hooks` nuevamente para actualizar la vista.

63 

64Si `/hooks` muestra el hook pero aún no se dispara, el siguiente paso es ver la evaluación del hook en vivo. Inicie una sesión con `claude --debug hooks` y active la llamada de herramienta. El registro de depuración registra cada evento, qué matchers se verificaron y el código de salida y la salida del hook. Consulte [Depurar hooks](/es/hooks#debug-hooks) para el formato del registro y [solución de problemas de hooks](/es/hooks-guide#limitations-and-troubleshooting) para patrones de fallo comunes.

65 

66## Causas comunes

67 

68La mayoría de las sorpresas de configuración se remontan a un pequeño conjunto de reglas de ubicación y sintaxis. Verifique estos antes de asumir un error:

69 

70| Síntoma | Causa | Solución |

71| :------------------------------------------------------------------------ | :------------------------------------------------------------------------------------------------------------------------- | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

72| Hook nunca se dispara | `matcher` es una matriz JSON en lugar de una cadena | Use una cadena única con `\|` para coincidir con múltiples herramientas, por ejemplo `"Edit\|Write"`. Consulte [patrones de matcher](/es/hooks#matcher-patterns). |

73| Hook nunca se dispara | El valor `matcher` está en minúsculas, por ejemplo `"bash"` | La coincidencia distingue mayúsculas de minúsculas. Los nombres de herramientas están capitalizados: `Bash`, `Edit`, `Write`, `Read`. |

74| Hook nunca se dispara | Los hooks están en un archivo `.claude/hooks.json` independiente | No hay archivo de hooks independiente. Defina hooks bajo la clave `"hooks"` en `settings.json`. Consulte [configuración de hook](/es/hooks). |

75| Los permisos, hooks o env establecidos globalmente se ignoran | La configuración se agregó a `~/.claude.json` | `~/.claude.json` contiene el estado de la aplicación y los cambios de interfaz de usuario. `permissions`, `hooks` y `env` pertenecen a `~/.claude/settings.json`. Estos son dos archivos diferentes. |

76| Un valor `settings.json` parece ignorado | La misma clave se establece en `settings.local.json` | `settings.local.json` anula `settings.json`, y ambos anulan `~/.claude/settings.json`. Consulte [precedencia de configuración](/es/settings#how-scopes-interact). |

77| Skill no aparece en `/skills` | El archivo de skill está en `.claude/skills/name.md` en lugar de en una carpeta | Use una carpeta con `SKILL.md` dentro: `.claude/skills/name/SKILL.md`. |

78| Skill aparece en `/skills` pero Claude nunca lo invoca | Skill tiene `disable-model-invocation: true` en su frontmatter, o su descripción no coincide con cómo formula la solicitud | Verifique la insignia en `/skills`: una etiqueta "user-only" significa que Claude no lo activará por su cuenta. Consulte [invocación de skill](/es/skills). |

79| Las instrucciones de `CLAUDE.md` del subdirectorio parecen ignoradas | Los archivos del subdirectorio se cargan bajo demanda, no al inicio de la sesión | Se cargan cuando Claude lee un archivo en ese directorio con la herramienta Read, no al lanzar y no al escribir o crear archivos allí. Consulte [cómo se cargan los archivos CLAUDE.md](/es/memory#how-claude-md-files-load). |

80| El subagente ignora las instrucciones de `CLAUDE.md` | Los subagentes no siempre heredan la memoria del proyecto | Coloque las reglas críticas en el cuerpo del archivo del agente, que se convierte en el indicador del sistema del subagente. Consulte [configuración de subagente](/es/sub-agents). |

81| La lógica de limpieza nunca se ejecuta al final de la sesión | No hay hook `SessionEnd` configurado | Agregue un hook `SessionEnd` en `settings.json`. Consulte la [lista de eventos de hook](/es/hooks#hook-events). |

82| Los servidores MCP en `.mcp.json` nunca se cargan | El archivo está bajo `.claude/` o usa el formato de configuración de Claude Desktop | La configuración de MCP del proyecto va en la raíz del repositorio como `.mcp.json`, no dentro de `.claude/`. Consulte [configuración de MCP](/es/mcp). |

83| El servidor MCP del proyecto agregado pero no aparece | Se descartó el mensaje de aprobación única | Los servidores con ámbito de proyecto requieren aprobación. Ejecute `/mcp` para ver el estado y aprobar. |

84| El servidor MCP no se inicia desde algunos directorios | `command` o `args` usa una ruta de archivo relativa | Use rutas absolutas para scripts locales. Los ejecutables en su `PATH` como `npx` o `uvx` funcionan tal cual. |

85| El servidor MCP se inicia sin las variables de entorno esperadas | Las variables están en `settings.json` `env`, que no se propaga a procesos secundarios de MCP | Establezca `env` por servidor dentro de `.mcp.json` en su lugar. |

86| La regla de denegación `Bash(rm *)` no bloquea `/bin/rm` o `find -delete` | Las reglas de prefijo coinciden con la cadena de comando literal, no con el ejecutable subyacente | Agregue patrones explícitos para cada variante, o use un [hook PreToolUse](/es/hooks-guide) o el [sandbox](/es/sandboxing) para una garantía dura. |

87 

88## Recursos relacionados

89 

90Para una referencia completa en cada superficie de configuración, consulte la página dedicada:

91 

92* **[Referencia del directorio `.claude`](/es/claude-directory)**: cada ubicación de archivo de configuración y qué lo lee

93* **[Configuración](/es/settings)**: orden de precedencia y la lista completa de claves

94* **[Referencia de hooks](/es/hooks)**: nombres de eventos, cargas útiles y formato de salida `--debug hooks`

95* **[MCP](/es/mcp)**: configuración del servidor, aprobación y salida `/mcp`

96* **[Solucionar problemas de instalación e inicio de sesión](/es/troubleshoot-install)**: `comando no encontrado`, PATH y problemas de autenticación

97* **[Solución de problemas](/es/troubleshooting)**: rendimiento, bloqueos y problemas de búsqueda

desktop.md +761 −0 created

Details

1> ## Documentation Index

2> Fetch the complete documentation index at: https://code.claude.com/docs/llms.txt

3> Use this file to discover all available pages before exploring further.

4 

5# Usar Claude Code Desktop

6 

7> Aproveche al máximo Claude Code Desktop: sesiones paralelas con aislamiento de Git, diseño de panel de arrastrar y soltar, terminal integrada y editor de archivos, chats laterales, uso de computadora, envíe sesiones desde su teléfono, revisión visual de diferencias, vistas previas de aplicaciones, monitoreo de PR, conectores y configuración empresarial.

8 

9La aplicación Claude Desktop tiene tres pestañas: **Chat** para conversaciones, **Cowork** para [Dispatch y trabajo agentico más largo](https://claude.com/product/cowork), y **Code** para desarrollo de software. Esta página es la referencia para la pestaña Code.

10 

11<CardGroup cols={2}>

12 <Card title="Download for macOS" icon="apple" href="https://claude.ai/api/desktop/darwin/universal/dmg/latest/redirect?utm_source=claude_code&utm_medium=docs">

13 Universal build for Intel and Apple Silicon

14 </Card>

15 

16 <Card title="Download for Windows" icon="windows" href="https://claude.ai/api/desktop/win32/x64/setup/latest/redirect?utm_source=claude_code&utm_medium=docs">

17 For x64 processors

18 </Card>

19</CardGroup>

20 

21For Windows ARM64, download the [ARM64 installer](https://claude.ai/api/desktop/win32/arm64/setup/latest/redirect?utm_source=claude_code\&utm_medium=docs). The desktop app is not available on Linux; use the [CLI](/en/quickstart) instead.

22 

23Después de instalar, inicie Claude, inicie sesión y haga clic en la pestaña **Code**. La primera vez que la abra en Windows, necesita tener [Git for Windows](https://git-scm.com/downloads/win) instalado; reinicie la aplicación después de instalarlo. Para un recorrido de su primera sesión, consulte la [guía de introducción](/es/desktop-quickstart).

24 

25En la pestaña Code, cada conversación es una **sesión**: tiene su propio historial de chat, carpeta de proyecto y cambios de código, independiente de cualquier otra sesión. La barra lateral enumera sus sesiones y le permite ejecutar varias en paralelo. Dentro de una sesión puede:

26 

27* [Revisar y comentar en diffs](#review-changes-with-diff-view), luego [monitorear el PR resultante a través de CI](#monitor-pull-request-status)

28* [Obtener una vista previa de su aplicación en ejecución](#preview-your-app) en un navegador integrado mientras Claude verifica sus propios cambios

29* [Organizar paneles](#arrange-your-workspace) para el chat, diff, vista previa, terminal y editor de archivos lado a lado

30* Hacer una [pregunta lateral](#ask-a-side-question-without-derailing-the-session) que use el contexto de la sesión sin desviarse

31* [Conectar herramientas externas](#connect-external-tools) como GitHub, Slack y Linear

32* Permitir que Claude [abra aplicaciones y controle su pantalla](#let-claude-use-your-computer)

33* Ejecutar en su máquina, en la [nube](#run-long-running-tasks-remotely), o sobre [SSH](#ssh-sessions)

34 

35Para [trabajo recurrente programado](/es/desktop-scheduled-tasks), [atajos de teclado](#keyboard-shortcuts), o [enviar tareas desde su teléfono](#sessions-from-dispatch), consulte las páginas y secciones vinculadas. Si ya usa la CLI basada en terminal, consulte la [comparación de CLI](#coming-from-the-cli) para ver qué se transfiere.

36 

37## Iniciar una sesión

38 

39Antes de enviar su primer mensaje, configure cuatro cosas en el área de solicitud:

40 

41* **Entorno**: elija dónde se ejecuta Claude. Seleccione **Local** para su máquina, **Remote** para sesiones en la nube alojadas por Anthropic, o una [**conexión SSH**](#ssh-sessions) para una máquina remota que usted administra. Consulte [configuración del entorno](#environment-configuration).

42* **Carpeta del proyecto**: seleccione la carpeta o repositorio en el que Claude trabaja. Para sesiones remotas, puede agregar [múltiples repositorios](#run-long-running-tasks-remotely).

43* **Modelo**: elija un [modelo](/es/model-config#available-models) del menú desplegable junto al botón de envío. Puede cambiar esto durante la sesión.

44* **Modo de permisos**: elija cuánta autonomía tiene Claude desde el [selector de modo](#choose-a-permission-mode). Puede cambiar esto durante la sesión.

45 

46Escriba su tarea y presione **Enter** para comenzar. Cada sesión rastrea su propio contexto y cambios de forma independiente.

47 

48## Trabajar con código

49 

50Proporcione a Claude el contexto correcto, controle cuánto hace por su cuenta y revise lo que cambió.

51 

52### Usar el cuadro de solicitud

53 

54Escriba lo que desea que Claude haga y presione **Enter** para enviar. Claude lee los archivos de su proyecto, realiza cambios y ejecuta comandos según su [modo de permisos](#choose-a-permission-mode). Puede interrumpir a Claude en cualquier momento: haga clic en el botón de parada o escriba su corrección y presione **Enter**. Claude detiene lo que está haciendo y se ajusta según su entrada.

55 

56El botón **+** junto al cuadro de solicitud le da acceso a archivos adjuntos, [skills](#use-skills), [conectores](#connect-external-tools) y [plugins](#install-plugins).

57 

58### Agregar archivos y contexto a las solicitudes

59 

60El cuadro de solicitud admite dos formas de traer contexto externo:

61 

62* **Archivos @mention**: escriba `@` seguido de un nombre de archivo para agregar un archivo al contexto de la conversación. Claude puede entonces leer y hacer referencia a ese archivo. @mention no está disponible en sesiones remotas.

63* **Adjuntar archivos**: adjunte imágenes, PDF y otros archivos a su solicitud usando el botón de adjuntos, o arrastre y suelte archivos directamente en la solicitud. Esto es útil para compartir capturas de pantalla de errores, maquetas de diseño o documentos de referencia.

64 

65### Elegir un modo de permisos

66 

67Los modos de permisos controlan cuánta autonomía tiene Claude durante una sesión: si pregunta antes de editar archivos, ejecutar comandos o ambos. Puede cambiar de modo en cualquier momento usando el selector de modo junto al botón de envío. Comience con Ask permissions para ver exactamente qué hace Claude, luego pase a Auto accept edits o Plan mode a medida que se sienta cómodo.

68 

69| Modo | Clave de configuración | Comportamiento |

70| ---------------------- | ---------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

71| **Ask permissions** | `default` | Claude pregunta antes de editar archivos o ejecutar comandos. Usted ve una diferencia y puede aceptar o rechazar cada cambio. Recomendado para nuevos usuarios. |

72| **Auto accept edits** | `acceptEdits` | Claude acepta automáticamente ediciones de archivos y comandos comunes del sistema de archivos como `mkdir`, `touch` y `mv`, pero aún pregunta antes de ejecutar otros comandos de terminal. Use esto cuando confíe en cambios de archivos y desee una iteración más rápida. |

73| **Plan mode** | `plan` | Claude lee archivos y ejecuta comandos para explorar, luego propone un plan sin editar su código fuente. Bueno para tareas complejas donde desea revisar el enfoque primero. |

74| **Auto** | `auto` | Claude ejecuta todas las acciones con verificaciones de seguridad en segundo plano que verifican la alineación con su solicitud. Reduce solicitudes de permisos mientras mantiene supervisión. Habilite en su Configuración → Claude Code. Consulte [requisitos de disponibilidad](#auto-mode-availability) a continuación. |

75| **Bypass permissions** | `bypassPermissions` | Claude se ejecuta sin ningún aviso de permisos, equivalente a `--dangerously-skip-permissions` en la CLI. Habilite en su Configuración → Claude Code bajo "Allow bypass permissions mode". Use solo en contenedores o máquinas virtuales sandboxed. Los administradores empresariales pueden deshabilitar esta opción. |

76 

77El modo de permisos `dontAsk` está disponible solo en la [CLI](/es/permission-modes#allow-only-pre-approved-tools-with-dontask-mode).

78 

79<span id="auto-mode-availability" />

80 

81Auto mode es una vista previa de investigación disponible en planes Max, Team, Enterprise y API. No está disponible en planes Pro o proveedores de terceros. En planes Team, Enterprise y API requiere Claude Sonnet 4.6, Opus 4.6 u Opus 4.7. En planes Max requiere Claude Opus 4.7.

82 

83<Tip title="Mejor práctica">

84 Comience tareas complejas en Plan mode para que Claude mapee un enfoque antes de realizar cambios. Una vez que apruebe el plan, cambie a Auto accept edits o Ask permissions para ejecutarlo. Consulte [explorar primero, luego planificar, luego codificar](/es/best-practices#explore-first-then-plan-then-code) para obtener más información sobre este flujo de trabajo.

85</Tip>

86 

87Las sesiones remotas admiten Auto accept edits y Plan mode. Ask permissions no está disponible porque las sesiones remotas aceptan automáticamente ediciones de archivos de forma predeterminada, y Bypass permissions no está disponible porque el entorno remoto ya está sandboxed.

88 

89Los administradores empresariales pueden restringir qué modos de permisos están disponibles. Consulte [configuración empresarial](#enterprise-configuration) para obtener detalles.

90 

91### Vista previa de su aplicación

92 

93Claude puede iniciar un servidor de desarrollo y abrir un navegador integrado para verificar sus cambios. Esto funciona tanto para aplicaciones web frontend como para servidores backend: Claude puede probar puntos finales de API, ver registros del servidor e iterar sobre problemas que encuentra. En la mayoría de los casos, Claude inicia el servidor automáticamente después de editar archivos del proyecto. También puede pedirle a Claude que haga una vista previa en cualquier momento. De forma predeterminada, Claude [verifica automáticamente](#auto-verify-changes) cambios después de cada edición.

94 

95El panel de vista previa también puede abrir archivos HTML estáticos, PDF, imágenes y videos de su proyecto. Haga clic en una ruta HTML, PDF, imagen o video en el chat para abrirla en vista previa.

96 

97Desde el panel de vista previa, puede:

98 

99* Interactuar con su aplicación en ejecución directamente en el navegador integrado

100* Ver a Claude verificar sus propios cambios automáticamente: toma capturas de pantalla, inspecciona el DOM, hace clic en elementos, completa formularios y corrige problemas que encuentra

101* Iniciar o detener servidores desde el menú desplegable **Preview** en la barra de herramientas de la sesión

102* Persistir cookies y almacenamiento local en reinicios del servidor seleccionando **Persist sessions** en el menú desplegable, para que no tenga que volver a iniciar sesión durante el desarrollo

103* Editar la configuración del servidor o detener todos los servidores a la vez

104 

105Claude crea la configuración inicial del servidor basada en su proyecto. Si su aplicación usa un comando de desarrollo personalizado, edite `.claude/launch.json` para que coincida con su configuración. Consulte [Configurar servidores de vista previa](#configure-preview-servers) para la referencia completa.

106 

107Para borrar datos de sesión guardados, alterne **Persist preview sessions** en Configuración → Claude Code. Para deshabilitar la vista previa por completo, alterne **Preview** en Configuración → Claude Code.

108 

109### Revisar cambios con vista de diferencias

110 

111Después de que Claude realiza cambios en su código, la vista de diferencias le permite revisar modificaciones archivo por archivo antes de crear una solicitud de extracción.

112 

113Cuando Claude cambia archivos, aparece un indicador de estadísticas de diferencias que muestra el número de líneas agregadas y eliminadas, como `+12 -1`. Haga clic en este indicador para abrir el visor de diferencias, que muestra una lista de archivos a la izquierda y los cambios para cada archivo a la derecha.

114 

115Para comentar en líneas específicas, haga clic en cualquier línea en la diferencia para abrir un cuadro de comentarios. Escriba su comentario y presione **Enter** para agregar el comentario. Después de agregar comentarios a varias líneas, envíe todos los comentarios a la vez:

116 

117* **macOS**: presione **Cmd+Enter**

118* **Windows**: presione **Ctrl+Enter**

119 

120Claude lee sus comentarios y realiza los cambios solicitados, que aparecen como una nueva diferencia que puede revisar.

121 

122### Revisar su código

123 

124En la vista de diferencias, haga clic en **Review code** en la barra de herramientas superior derecha para pedirle a Claude que evalúe los cambios antes de confirmar. Claude examina las diferencias actuales y deja comentarios directamente en la vista de diferencias. Puede responder a cualquier comentario o pedirle a Claude que revise.

125 

126La revisión se enfoca en problemas de alta señal: errores de compilación, errores de lógica definitivos, vulnerabilidades de seguridad y errores obvios. No marca estilo, formato, problemas preexistentes o nada que un linter detectaría.

127 

128### Monitorear el estado de la solicitud de extracción

129 

130Después de abrir una solicitud de extracción, aparece una barra de estado de CI en la sesión. Claude Code usa la CLI de GitHub para sondear resultados de verificación y mostrar fallas.

131 

132* **Auto-fix**: cuando está habilitado, Claude intenta automáticamente corregir verificaciones de CI fallidas leyendo la salida de falla e iterando.

133* **Auto-merge**: cuando está habilitado, Claude fusiona el PR una vez que todas las verificaciones pasan. El método de fusión es squash. Auto-merge debe estar [habilitado en la configuración de su repositorio de GitHub](https://docs.github.com/en/repositories/configuring-branches-and-merges-in-your-repository/configuring-pull-request-merges/managing-auto-merge-for-pull-requests-in-your-repository) para que esto funcione.

134 

135Use los controles deslizantes **Auto-fix** y **Auto-merge** en la barra de estado de CI para habilitar cualquiera de las opciones. Claude Code también envía una notificación de escritorio cuando CI finaliza. Para archivar la sesión automáticamente una vez que el PR se fusiona o cierra, active [auto-archive](#work-in-parallel-with-sessions) en Configuración → Claude Code.

136 

137<Note>

138 El monitoreo de PR requiere que la [CLI de GitHub (`gh`)](https://cli.github.com/) esté instalada y autenticada en su máquina. Si `gh` no está instalado, Desktop le solicita que lo instale la primera vez que intente crear un PR.

139</Note>

140 

141## Organizar su espacio de trabajo

142 

143La pestaña Code está construida alrededor de paneles que puede organizar en cualquier diseño: chat, diferencia, vista previa, terminal, archivo, plan, tareas y subagente. Arrastre un panel por su encabezado para reposicionarlo, o arrastre un borde de panel para redimensionarlo. Presione **Cmd+\\** en macOS o **Ctrl+\\** en Windows para cerrar el panel enfocado. Abra paneles adicionales desde el menú **Views** en la barra de herramientas de la sesión.

144 

145<Note>

146 El diseño del panel, terminal, editor de archivos y modos de vista en esta sección requieren Claude Desktop v1.2581.0 o posterior. Abra **Claude → Check for Updates** en macOS o **Help → Check for Updates** en Windows para actualizar.

147</Note>

148 

149### Ejecutar comandos en la terminal

150 

151La terminal integrada le permite ejecutar comandos junto a su sesión sin cambiar a otra aplicación. Ábrala desde el menú **Views** o presione **Ctrl+\`** en macOS o Windows. La terminal se abre en el directorio de trabajo de su sesión y comparte el mismo entorno que Claude, por lo que comandos como `npm test` o `git status` ven los mismos archivos que Claude está editando. La terminal está disponible solo en sesiones locales.

152 

153### Abrir y editar archivos

154 

155Haga clic en una ruta de archivo en el chat o visor de diferencias para abrirlo en el panel de archivos. Las rutas HTML, PDF, imagen y vídeo se abren en el [panel de vista previa](#preview-your-app) en su lugar. Realice ediciones puntuales y haga clic en **Save** para escribirlas de vuelta. Si el archivo cambió en el disco desde que lo abrió, el panel le advierte y le permite anular o descartar. Haga clic en **Discard** para revertir sus ediciones, o haga clic en la ruta en el encabezado del panel para copiar la ruta absoluta.

156 

157El panel de archivos está disponible en sesiones locales y SSH. Para sesiones remotas, pídale a Claude que realice el cambio.

158 

159### Abrir archivos en otras aplicaciones

160 

161Haga clic con el botón derecho en cualquier ruta de archivo en el chat, visor de diferencias o panel de archivos para abrir un menú contextual:

162 

163* **Attach as context**: agregue el archivo a su siguiente solicitud

164* **Open in**: abra el archivo en un editor instalado como VS Code, Cursor o Zed

165* **Show in Finder** en macOS, **Show in Explorer** en Windows: abra la carpeta contenedora

166* **Copy path**: copie la ruta absoluta a su portapapeles

167 

168### Cambiar modos de vista

169 

170Los modos de vista controlan cuánto detalle aparece en la transcripción del chat. Cambie de modo desde el menú desplegable **Transcript view** junto al botón de envío, o presione **Ctrl+O** en macOS o Windows para ciclar a través de ellos.

171 

172| Modo | Lo que muestra |

173| ----------- | ---------------------------------------------------------------------------------- |

174| **Normal** | Llamadas de herramientas contraídas en resúmenes, con respuestas de texto completo |

175| **Verbose** | Cada llamada de herramienta, lectura de archivo y paso intermedio que Claude toma |

176| **Summary** | Solo las respuestas finales de Claude y los cambios que realizó |

177 

178Use Verbose cuando depure por qué Claude tomó una acción particular. Use Summary cuando esté ejecutando múltiples sesiones y desee escanear resultados rápidamente.

179 

180### Atajos de teclado

181 

182Presione **Cmd+/** en macOS o **Ctrl+/** en Windows para ver todos los atajos disponibles en la pestaña Code. En Windows, use **Ctrl** en lugar de **Cmd** para los atajos a continuación. El ciclismo de sesiones, el alternador de terminal y el alternador de modo de vista usan **Ctrl** en todas las plataformas.

183 

184| Atajo | Acción |

185| ------------------------------------- | --------------------------------------- |

186| `Cmd` `/` | Mostrar atajos de teclado |

187| `Cmd` `N` | Nueva sesión |

188| `Cmd` `W` | Cerrar sesión |

189| `Ctrl` `Tab` / `Ctrl` `Shift` `Tab` | Siguiente o sesión anterior |

190| `Cmd` `Shift` `]` / `Cmd` `Shift` `[` | Siguiente o sesión anterior |

191| `Esc` | Detener respuesta de Claude |

192| `Cmd` `Shift` `D` | Alternar panel de diferencias |

193| `Cmd` `Shift` `P` | Alternar panel de vista previa |

194| `Cmd` `Shift` `S` | Seleccionar un elemento en vista previa |

195| `Ctrl` `` ` `` | Alternar panel de terminal |

196| `Cmd` `\` | Cerrar panel enfocado |

197| `Cmd` `;` | Abrir chat lateral |

198| `Ctrl` `O` | Ciclar modos de vista |

199| `Cmd` `Shift` `M` | Abrir menú de modo de permisos |

200| `Cmd` `Shift` `I` | Abrir menú de modelo |

201| `Cmd` `Shift` `E` | Abrir menú de esfuerzo |

202| `1`–`9` | Seleccionar elemento en un menú abierto |

203 

204Estos atajos se aplican solo a la pestaña Code. Los [atajos de modo interactivo](/es/interactive-mode#keyboard-shortcuts) basados en terminal, como `Shift+Tab` para ciclar modos, no se aplican en Desktop.

205 

206### Verificar uso

207 

208Haga clic en el anillo de uso junto al selector de modelo para ver su uso actual de la ventana de contexto y su uso del plan para el período. El uso de contexto es por sesión; el uso del plan se comparte en todas sus superficies de Claude Code.

209 

210## Permitir que Claude use su computadora

211 

212El uso de computadora permite que Claude abra sus aplicaciones, controle su pantalla y trabaje directamente en su máquina de la manera que lo haría. Pídale a Claude que pruebe una aplicación nativa en un simulador móvil, interactúe con una herramienta de escritorio que no tiene CLI, o automatice algo que solo funciona a través de una GUI.

213 

214<Note>

215 El uso de computadora es una vista previa de investigación en macOS y Windows que requiere un plan Pro o Max. No está disponible en planes Team o Enterprise. La aplicación Claude Desktop debe estar en ejecución.

216</Note>

217 

218El uso de computadora está deshabilitado de forma predeterminada. [Habilítelo en Configuración](#enable-computer-use) antes de que Claude pueda controlar su pantalla. En macOS, también necesita otorgar permisos de Accesibilidad y Grabación de pantalla.

219 

220<Warning>

221 A diferencia de la [herramienta Bash sandboxed](/es/sandboxing), el uso de computadora se ejecuta en su escritorio real con acceso a lo que apruebe. Claude verifica cada acción e identifica posibles inyecciones de solicitud desde contenido en pantalla, pero el límite de confianza es diferente. Consulte la [guía de seguridad de uso de computadora](https://support.claude.com/en/articles/14128542) para obtener mejores prácticas.

222</Warning>

223 

224### Cuándo se aplica el uso de computadora

225 

226Claude tiene varias formas de interactuar con una aplicación o servicio, y el uso de computadora es la más amplia y lenta. Intenta la herramienta más precisa primero:

227 

228* Si tiene un [conector](#connect-external-tools) para un servicio, Claude usa el conector.

229* Si la tarea es un comando de shell, Claude usa Bash.

230* Si la tarea es trabajo en navegador y tiene [Claude en Chrome](/es/chrome) configurado, Claude usa eso.

231* Si ninguno de esos se aplica, Claude usa el uso de computadora.

232 

233Los [niveles de acceso por aplicación](#app-permissions) refuerzan esto: los navegadores están limitados a solo lectura, y las terminales e IDE a solo clic, dirigiendo a Claude hacia la herramienta dedicada incluso cuando el uso de computadora está activo. El control de pantalla se reserva para cosas que nada más puede alcanzar, como aplicaciones nativas, paneles de control de hardware, simuladores móviles o herramientas propietarias sin una API.

234 

235### Habilitar el uso de computadora

236 

237El uso de computadora está deshabilitado de forma predeterminada. Si le pide a Claude que haga algo que lo necesita mientras está deshabilitado, Claude le dice que podría hacer la tarea si habilita el uso de computadora en Configuración.

238 

239<Steps>

240 <Step title="Actualizar la aplicación de escritorio">

241 Asegúrese de tener la última versión de Claude Desktop. Descargue o actualice en [claude.com/download](https://claude.com/download), luego reinicie la aplicación.

242 </Step>

243 

244 <Step title="Activar el control deslizante">

245 En la aplicación de escritorio, vaya a **Configuración > General** (bajo **Aplicación de escritorio**). Encuentre el control deslizante **Computer use** y actívelo. En Windows, el control deslizante surte efecto inmediatamente y la configuración está completa. En macOS, continúe con el siguiente paso.

246 

247 Si no ve el control deslizante, confirme que está en macOS o Windows con un plan Pro o Max, luego actualice y reinicie la aplicación.

248 </Step>

249 

250 <Step title="Otorgar permisos de macOS">

251 En macOS, otorgue dos permisos del sistema antes de que el control deslizante surta efecto:

252 

253 * **Accessibility**: permite que Claude haga clic, escriba y desplace

254 * **Screen Recording**: permite que Claude vea lo que hay en su pantalla

255 

256 La página de Configuración muestra el estado actual de cada permiso. Si alguno se deniega, haga clic en la insignia para abrir el panel de Configuración del Sistema relevante.

257 </Step>

258</Steps>

259 

260### Permisos de aplicación

261 

262La primera vez que Claude necesita usar una aplicación, aparece un aviso en su sesión. Haga clic en **Allow for this session** o **Deny**. Las aprobaciones duran para la sesión actual, o 30 minutos en [sesiones generadas por Dispatch](#sessions-from-dispatch).

263 

264El aviso también muestra qué nivel de control obtiene Claude para esa aplicación. Estos niveles se fijan por categoría de aplicación y no se pueden cambiar:

265 

266| Nivel | Lo que Claude puede hacer | Se aplica a |

267| :----------- | :------------------------------------------------------------------- | :---------------------------------- |

268| View only | Ver la aplicación en capturas de pantalla | Navegadores, plataformas de trading |

269| Click only | Hacer clic y desplazarse, pero no escribir ni usar atajos de teclado | Terminales, IDE |

270| Full control | Hacer clic, escribir, arrastrar y usar atajos de teclado | Todo lo demás |

271 

272Las aplicaciones con amplio alcance como terminales, Finder o File Explorer y Configuración del Sistema o Settings muestran una advertencia adicional en el aviso para que sepa qué aprobación les otorga.

273 

274Puede configurar dos configuraciones en **Configuración > General** (bajo **Aplicación de escritorio**):

275 

276* **Denied apps**: agregue aplicaciones aquí para rechazarlas sin solicitar. Claude aún puede afectar una aplicación denegada indirectamente a través de acciones en una aplicación permitida, pero no puede interactuar directamente con la aplicación denegada.

277* **Unhide apps when Claude finishes**: mientras Claude está trabajando, sus otras ventanas se ocultan para que interactúe solo con la aplicación aprobada. Cuando Claude termina, las ventanas ocultas se restauran a menos que desactive esta configuración.

278 

279## Gestionar sesiones

280 

281Cada sesión es una conversación independiente con su propio contexto y cambios. Puede ejecutar múltiples sesiones en paralelo, ramificar chats laterales, enviar trabajo a la nube o permitir que Dispatch inicie sesiones para usted desde su teléfono.

282 

283### Trabajar en paralelo con sesiones

284 

285Haga clic en **+ New session** en la barra lateral, o presione **Cmd+N** en macOS o **Ctrl+N** en Windows, para trabajar en múltiples tareas en paralelo. Presione **Ctrl+Tab** y **Ctrl+Shift+Tab** para ciclar a través de sesiones en la barra lateral. Para repositorios de Git, cada sesión obtiene su propia copia aislada de su proyecto usando [Git worktrees](/es/common-workflows#run-parallel-claude-code-sessions-with-git-worktrees), por lo que los cambios en una sesión no afectan otras sesiones hasta que los confirme.

286 

287Los worktrees se almacenan en `<project-root>/.claude/worktrees/` de forma predeterminada. Puede cambiar esto a un directorio personalizado en Configuración → Claude Code bajo "Worktree location". También puede establecer un prefijo de rama que se antepone a cada nombre de rama de worktree, lo que es útil para mantener las ramas creadas por Claude organizadas. Para eliminar un worktree cuando haya terminado, pase el cursor sobre la sesión en la barra lateral y haga clic en el icono de archivo. Para que las sesiones se archiven automáticamente cuando su solicitud de extracción se fusiona o cierra, active **Auto-archive after PR merge or close** en Configuración → Claude Code. Auto-archive solo se aplica a sesiones locales que han terminado de ejecutarse.

288 

289Para incluir archivos ignorados por git como `.env` en nuevos worktrees, cree un [archivo `.worktreeinclude`](/es/common-workflows#copy-gitignored-files-to-worktrees) en la raíz de su proyecto.

290 

291<Note>

292 El aislamiento de sesión requiere [Git](https://git-scm.com/downloads). La mayoría de las Macs incluyen Git de forma predeterminada. Ejecute `git --version` en Terminal para verificar. En Windows, Git es necesario para que la pestaña Code funcione: [descargue Git para Windows](https://git-scm.com/downloads/win), instálelo y reinicie la aplicación. Si encuentra errores de Git, pida ayuda a Claude en la [pestaña Cowork](https://claude.com/product/cowork) para solucionar problemas de su configuración.

293</Note>

294 

295Use los controles en la parte superior de la barra lateral para filtrar sesiones por estado, proyecto o entorno, y para agrupar sesiones por proyecto. Para renombrar una sesión, haga clic en el título de la sesión en la barra de herramientas en la parte superior de la sesión activa. Para verificar el uso del contexto, consulte [Verificar uso](#check-usage). Cuando el contexto se llena, Claude resume automáticamente la conversación y continúa trabajando. También puede escribir `/compact` para activar la compresión antes y liberar espacio de contexto. Consulte [la ventana de contexto](/es/how-claude-code-works#the-context-window) para obtener detalles sobre cómo funciona la compresión.

296 

297### Hacer una pregunta lateral sin descarrilar la sesión

298 

299Un chat lateral le permite hacer una pregunta a Claude que usa el contexto de su sesión pero no agrega nada de vuelta a la conversación principal. Úselo cuando desee entender un fragmento de código, verificar una suposición o explorar una idea sin dirigir la sesión fuera de curso.

300 

301Presione **Cmd+;** en macOS o **Ctrl+;** en Windows para abrir un chat lateral, o escriba `/btw` en el cuadro de solicitud. El chat lateral puede leer todo en el hilo principal hasta ese punto. Cuando haya terminado, cierre el chat lateral y continúe la sesión principal donde la dejó. Los chats laterales están disponibles en sesiones locales y SSH.

302 

303### Ver tareas en segundo plano

304 

305El panel de tareas muestra el trabajo en segundo plano que se ejecuta dentro de la sesión actual: subagentes, comandos de shell en segundo plano y flujos de trabajo. Ábralo desde el menú **Views** o arrástrelo a su diseño.

306 

307Haga clic en cualquier entrada para ver su salida en el panel de subagente o detenerla. Para ver qué están haciendo otras sesiones, use la [barra lateral](#work-in-parallel-with-sessions).

308 

309### Ejecutar tareas de larga duración de forma remota

310 

311Para refactorizaciones grandes, suites de pruebas, migraciones u otras tareas de larga duración, seleccione **Remote** en lugar de **Local** al iniciar una sesión. Las sesiones remotas se ejecutan en la infraestructura en la nube de Anthropic y continúan incluso si cierra la aplicación o apaga su computadora. Regrese en cualquier momento para ver el progreso o dirigir a Claude en una dirección diferente. También puede monitorear sesiones remotas desde [claude.ai/code](https://claude.ai/code) o la aplicación Claude iOS.

312 

313Las sesiones remotas también admiten múltiples repositorios. Después de seleccionar un entorno en la nube, haga clic en el botón **+** junto a la píldora de repositorio para agregar repositorios adicionales a la sesión. Cada repositorio obtiene su propio selector de rama. Esto es útil para tareas que abarcan múltiples bases de código, como actualizar una biblioteca compartida y sus consumidores.

314 

315Consulte [Claude Code en la web](/es/claude-code-on-the-web) para obtener más información sobre cómo funcionan las sesiones remotas.

316 

317### Continuar en otra superficie

318 

319El menú **Continue in**, accesible desde el icono de VS Code en la esquina inferior derecha de la barra de herramientas de la sesión, le permite mover su sesión a otra superficie:

320 

321* **Claude Code on the Web**: envía su sesión local para continuar ejecutándose de forma remota. Desktop empuja su rama, genera un resumen de la conversación y crea una nueva sesión remota con el contexto completo. Luego puede elegir archivar la sesión local o mantenerla. Esto requiere un árbol de trabajo limpio y no está disponible para sesiones SSH.

322* **Your IDE**: abre su proyecto en un IDE compatible en el directorio de trabajo actual.

323 

324### Sesiones desde Dispatch

325 

326[Dispatch](https://support.claude.com/en/articles/13947068) es una conversación persistente con Claude que vive en la pestaña [Cowork](https://claude.com/product/cowork#dispatch-and-computer-use). Usted envía un mensaje a Dispatch con una tarea, y decide cómo manejarla.

327 

328Una tarea puede terminar como una sesión de Code de dos formas: usted solicita una directamente, como "abra una sesión de Claude Code y corrija el error de inicio de sesión", o Dispatch decide que la tarea es trabajo de desarrollo e inicia una por su cuenta. Las tareas que típicamente se enrutan a Code incluyen corregir errores, actualizar dependencias, ejecutar pruebas o abrir solicitudes de extracción. La investigación, edición de documentos y trabajo con hojas de cálculo permanecen en Cowork.

329 

330De cualquier forma, la sesión de Code aparece en la barra lateral de la pestaña Code con una insignia **Dispatch**. Obtiene una notificación push en su teléfono cuando termina o necesita su aprobación.

331 

332Si tiene [uso de computadora](#let-claude-use-your-computer) habilitado, las sesiones de Code generadas por Dispatch también pueden usarlo. Las aprobaciones de aplicaciones en esas sesiones expiran después de 30 minutos y vuelven a solicitar, en lugar de durar la sesión completa como las sesiones de Code regulares.

333 

334Para configuración, emparejamiento y configuración de Dispatch, consulte el [artículo de ayuda de Dispatch](https://support.claude.com/en/articles/13947068). Dispatch requiere un plan Pro o Max y no está disponible en planes Team o Enterprise.

335 

336Dispatch es una de varias formas de trabajar con Claude cuando está lejos de su terminal. Consulte [Plataformas e integraciones](/es/platforms#work-when-you-are-away-from-your-terminal) para compararlo con Remote Control, Channels, Slack y tareas programadas.

337 

338## Extender Claude Code

339 

340Conecte servicios externos, agregue flujos de trabajo reutilizables, personalice el comportamiento de Claude y configure servidores de vista previa. Para administrar conectores, skills y plugins en un solo lugar, haga clic en **Customize** en la barra lateral.

341 

342### Conectar herramientas externas

343 

344Para sesiones locales y [SSH](#ssh-sessions), haga clic en el botón **+** junto al cuadro de solicitud y seleccione **Connectors** para agregar integraciones como Google Calendar, Slack, GitHub, Linear, Notion y más. Puede agregar conectores antes o durante una sesión. El botón **+** no está disponible en sesiones remotas, pero [routines](/es/routines) configuran conectores en el momento de la creación de la rutina.

345 

346Para administrar o desconectar conectores, vaya a Configuración → Connectors en la aplicación de escritorio, o seleccione **Manage connectors** desde el menú Connectors en el cuadro de solicitud.

347 

348Una vez conectado, Claude puede leer su calendario, enviar mensajes, crear problemas e interactuar con sus herramientas directamente. Puede preguntarle a Claude qué conectores están configurados en su sesión.

349 

350Los conectores son [MCP servers](/es/mcp) con un flujo de configuración gráfico. Úselos para integración rápida con servicios compatibles. Para integraciones no listadas en Connectors, agregue MCP servers manualmente a través de [archivos de configuración](/es/mcp#installing-mcp-servers). También puede [crear conectores personalizados](https://support.claude.com/en/articles/11175166-getting-started-with-custom-connectors-using-remote-mcp).

351 

352### Usar skills

353 

354[Skills](/es/skills) extienden lo que Claude puede hacer. Claude los carga automáticamente cuando son relevantes, o puede invocar uno directamente: escriba `/` en el cuadro de solicitud o haga clic en el botón **+** y seleccione **Slash commands** para ver lo que está disponible. Esto incluye [comandos integrados](/es/commands), sus [skills personalizados](/es/skills#create-your-first-skill), skills del proyecto desde su base de código y skills de cualquier [plugin instalado](/es/plugins). Seleccione uno y aparecerá resaltado en el campo de entrada. Escriba su tarea después de él y envíe como de costumbre.

355 

356### Instalar plugins

357 

358[Plugins](/es/plugins) son paquetes reutilizables que agregan skills, agentes, hooks, MCP servers y configuraciones LSP a Claude Code. Puede instalar plugins desde la aplicación de escritorio sin usar la terminal.

359 

360Para sesiones locales y [SSH](#ssh-sessions), haga clic en el botón **+** junto al cuadro de solicitud y seleccione **Plugins** para ver sus plugins instalados y sus skills. Para agregar un plugin, seleccione **Add plugin** del submenú para abrir el navegador de plugins, que muestra plugins disponibles desde sus [marketplaces](/es/plugin-marketplaces) configurados incluyendo el marketplace oficial de Anthropic. Seleccione **Manage plugins** para habilitar, deshabilitar o desinstalar plugins.

361 

362Los plugins pueden estar limitados a su cuenta de usuario, un proyecto específico o solo locales. Si su organización gestiona plugins centralmente, esos plugins están disponibles en sesiones de escritorio de la misma manera que en la CLI. Los plugins no están disponibles para sesiones remotas. Para la referencia completa de plugins incluyendo crear sus propios plugins, consulte [plugins](/es/plugins).

363 

364### Configurar servidores de vista previa

365 

366Claude detecta automáticamente su configuración de servidor de desarrollo y almacena la configuración en `.claude/launch.json` en la raíz de la carpeta que seleccionó al iniciar la sesión. Preview usa esta carpeta como su directorio de trabajo, por lo que si seleccionó una carpeta principal, las subcarpetas con sus propios servidores de desarrollo no se detectarán automáticamente. Para trabajar con el servidor de una subcarpeta, inicie una sesión en esa carpeta directamente o agregue una configuración manualmente.

367 

368Para personalizar cómo se inicia su servidor, por ejemplo para usar `yarn dev` en lugar de `npm run dev` o para cambiar el puerto, edite el archivo manualmente o haga clic en **Edit configuration** en el menú desplegable Preview para abrirlo en su editor de código. El archivo admite JSON con comentarios.

369 

370```json theme={null}

371{

372 "version": "0.0.1",

373 "configurations": [

374 {

375 "name": "my-app",

376 "runtimeExecutable": "npm",

377 "runtimeArgs": ["run", "dev"],

378 "port": 3000

379 }

380 ]

381}

382```

383 

384Puede definir múltiples configuraciones para ejecutar diferentes servidores desde el mismo proyecto, como un frontend y una API. Consulte los [ejemplos](#examples) a continuación.

385 

386#### Verificación automática de cambios

387 

388Cuando `autoVerify` está habilitado, Claude verifica automáticamente cambios de código después de editar archivos. Toma capturas de pantalla, verifica errores y confirma que los cambios funcionan antes de completar su respuesta.

389 

390Auto-verify está habilitado de forma predeterminada. Desactívelo por proyecto agregando `"autoVerify": false` a `.claude/launch.json`, o alterne desde el menú desplegable **Preview**.

391 

392```json theme={null}

393{

394 "version": "0.0.1",

395 "autoVerify": false,

396 "configurations": [...]

397}

398```

399 

400Cuando está deshabilitado, las herramientas de vista previa aún están disponibles y puede pedirle a Claude que verifique en cualquier momento. Auto-verify lo hace automático después de cada edición.

401 

402#### Campos de configuración

403 

404Cada entrada en el array `configurations` acepta los siguientes campos:

405 

406| Campo | Tipo | Descripción |

407| ------------------- | --------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

408| `name` | string | Un identificador único para este servidor |

409| `runtimeExecutable` | string | El comando a ejecutar, como `npm`, `yarn` o `node` |

410| `runtimeArgs` | string\[] | Argumentos pasados a `runtimeExecutable`, como `["run", "dev"]` |

411| `port` | number | El puerto en el que escucha su servidor. Por defecto es 3000 |

412| `cwd` | string | Directorio de trabajo relativo a la raíz de su proyecto. Por defecto es la raíz del proyecto. Use `${workspaceFolder}` para hacer referencia a la raíz del proyecto explícitamente |

413| `env` | object | Variables de entorno adicionales como pares clave-valor, como `{ "NODE_ENV": "development" }`. No ponga secretos aquí ya que este archivo se confirma en su repositorio. Para pasar secretos a su servidor de desarrollo, establézcalos en el [editor de entorno local](#local-sessions) en su lugar. |

414| `autoPort` | boolean | Cómo manejar conflictos de puerto. Consulte a continuación |

415| `program` | string | Un script a ejecutar con `node`. Consulte [cuándo usar `program` vs `runtimeExecutable`](#when-to-use-program-vs-runtimeexecutable) |

416| `args` | string\[] | Argumentos pasados a `program`. Solo se usa cuando `program` está establecido |

417 

418##### Cuándo usar `program` vs `runtimeExecutable`

419 

420Use `runtimeExecutable` con `runtimeArgs` para iniciar un servidor de desarrollo a través de un administrador de paquetes. Por ejemplo, `"runtimeExecutable": "npm"` con `"runtimeArgs": ["run", "dev"]` ejecuta `npm run dev`.

421 

422Use `program` cuando tenga un script independiente que desee ejecutar con `node` directamente. Por ejemplo, `"program": "server.js"` ejecuta `node server.js`. Pase banderas adicionales con `args`.

423 

424#### Conflictos de puerto

425 

426El campo `autoPort` controla qué sucede cuando su puerto preferido ya está en uso:

427 

428* **`true`**: Claude encuentra y usa un puerto libre automáticamente. Adecuado para la mayoría de servidores de desarrollo.

429* **`false`**: Claude falla con un error. Use esto cuando su servidor debe usar un puerto específico, como para devoluciones de llamada OAuth o listas de permitidos CORS.

430* **No establecido (predeterminado)**: Claude pregunta si el servidor necesita ese puerto exacto, luego guarda su respuesta.

431 

432Cuando Claude elige un puerto diferente, pasa el puerto asignado a su servidor a través de la variable de entorno `PORT`.

433 

434#### Ejemplos

435 

436Estas configuraciones muestran configuraciones comunes para diferentes tipos de proyectos:

437 

438<Tabs>

439 <Tab title="Next.js">

440 Esta configuración ejecuta una aplicación Next.js usando Yarn en el puerto 3000:

441 

442 ```json theme={null}

443 {

444 "version": "0.0.1",

445 "configurations": [

446 {

447 "name": "web",

448 "runtimeExecutable": "yarn",

449 "runtimeArgs": ["dev"],

450 "port": 3000

451 }

452 ]

453 }

454 ```

455 </Tab>

456 

457 <Tab title="Multiple servers">

458 Para un monorepo con un servidor frontend y API, defina múltiples configuraciones. El frontend usa `autoPort: true` para que elija un puerto libre si 3000 está ocupado, mientras que el servidor API requiere el puerto 8080 exactamente:

459 

460 ```json theme={null}

461 {

462 "version": "0.0.1",

463 "configurations": [

464 {

465 "name": "frontend",

466 "runtimeExecutable": "npm",

467 "runtimeArgs": ["run", "dev"],

468 "cwd": "apps/web",

469 "port": 3000,

470 "autoPort": true

471 },

472 {

473 "name": "api",

474 "runtimeExecutable": "npm",

475 "runtimeArgs": ["run", "start"],

476 "cwd": "server",

477 "port": 8080,

478 "env": { "NODE_ENV": "development" },

479 "autoPort": false

480 }

481 ]

482 }

483 ```

484 </Tab>

485 

486 <Tab title="Node.js script">

487 Para ejecutar un script Node.js directamente en lugar de usar un comando del administrador de paquetes, use el campo `program`:

488 

489 ```json theme={null}

490 {

491 "version": "0.0.1",

492 "configurations": [

493 {

494 "name": "server",

495 "program": "server.js",

496 "args": ["--verbose"],

497 "port": 4000

498 }

499 ]

500 }

501 ```

502 </Tab>

503</Tabs>

504 

505## Configuración del entorno

506 

507El entorno que elige al [iniciar una sesión](#start-a-session) determina dónde Claude se ejecuta y cómo se conecta:

508 

509* **Local**: se ejecuta en su máquina con acceso directo a sus archivos

510* **Remote**: se ejecuta en la infraestructura en la nube de Anthropic. Las sesiones continúan incluso si cierra la aplicación.

511* **SSH**: se ejecuta en una máquina remota a la que se conecta a través de SSH, como sus propios servidores, máquinas virtuales en la nube o contenedores de desarrollo

512 

513### Sesiones locales

514 

515La aplicación de escritorio no siempre hereda su entorno de shell completo. En macOS, cuando inicia la aplicación desde el Dock o Finder, lee su perfil de shell, como `~/.zshrc` o `~/.bashrc`, para extraer `PATH` y un conjunto fijo de variables de Claude Code, pero otras variables que exporta allí no se recogen. En Windows, la aplicación hereda variables de entorno de usuario y sistema pero no lee perfiles de PowerShell.

516 

517Para establecer variables de entorno para sesiones locales y servidores de desarrollo en cualquier plataforma, abra el menú desplegable de entorno en el cuadro de solicitud, pase el cursor sobre **Local** y haga clic en el icono de engranaje para abrir el editor de entorno local. Las variables que guarda aquí se almacenan cifradas en su máquina y se aplican a cada sesión local y servidor de vista previa que inicia. También puede agregar variables a la clave `env` en su archivo `~/.claude/settings.json`, aunque estas llegan solo a sesiones de Claude y no a servidores de desarrollo. Consulte [variables de entorno](/es/env-vars) para la lista completa de variables compatibles.

518 

519[Extended thinking](/es/common-workflows#use-extended-thinking-thinking-mode) está habilitado de forma predeterminada, lo que mejora el rendimiento en tareas de razonamiento complejo pero usa tokens adicionales. Para deshabilitar el pensamiento por completo, establezca `MAX_THINKING_TOKENS` en `0` en el editor de entorno local. En modelos con [razonamiento adaptativo](/es/model-config#adjust-effort-level), cualquier otro valor de `MAX_THINKING_TOKENS` se ignora porque el razonamiento adaptativo controla la profundidad del pensamiento en su lugar. En Opus 4.6 y Sonnet 4.6, establezca `CLAUDE_CODE_DISABLE_ADAPTIVE_THINKING` en `1` para usar un presupuesto de pensamiento fijo; Opus 4.7 siempre usa razonamiento adaptativo y no tiene modo de presupuesto fijo.

520 

521### Sesiones remotas

522 

523Las sesiones remotas continúan en segundo plano incluso si cierra la aplicación. El uso cuenta hacia los límites de su [plan de suscripción](/es/costs) sin cargos de computación separados.

524 

525Puede crear entornos en la nube personalizados con diferentes niveles de acceso a la red y variables de entorno. Seleccione el menú desplegable de entorno al iniciar una sesión remota y elija **Add environment**. Consulte [el entorno en la nube](/es/claude-code-on-the-web#the-cloud-environment) para obtener detalles sobre la configuración del acceso a la red y variables de entorno.

526 

527### Sesiones SSH

528 

529Las sesiones SSH le permiten ejecutar Claude Code en una máquina remota mientras usa la aplicación de escritorio como su interfaz. Esto es útil para trabajar con bases de código que viven en máquinas virtuales en la nube, contenedores de desarrollo o servidores con hardware o dependencias específicas.

530 

531Para agregar una conexión SSH, haga clic en el menú desplegable de entorno antes de iniciar una sesión y seleccione **+ Add SSH connection**. El diálogo solicita:

532 

533* **Name**: una etiqueta amigable para esta conexión

534* **SSH Host**: `user@hostname` o un host definido en `~/.ssh/config`

535* **SSH Port**: por defecto es 22 si se deja vacío, o usa el puerto de su configuración SSH

536* **Identity File**: ruta a su clave privada, como `~/.ssh/id_rsa`. Déjelo vacío para usar la clave predeterminada o su configuración SSH.

537 

538Una vez agregada, la conexión aparece en el menú desplegable de entorno. Selecciónela para iniciar una sesión en esa máquina. Claude se ejecuta en la máquina remota con acceso a sus archivos y herramientas.

539 

540La máquina remota debe ejecutar Linux o macOS. La aplicación de escritorio instala Claude Code en la máquina remota automáticamente la primera vez que se conecta. Una vez conectado, las sesiones SSH admiten modos de permisos, conectores, plugins y servidores MCP.

541 

542#### Pre-configurar conexiones SSH para su equipo

543 

544Los administradores pueden distribuir conexiones SSH a los miembros del equipo agregando `sshConfigs` a un archivo de [configuración administrada](/es/settings#settings-precedence). Las conexiones definidas de esta manera aparecen en el menú desplegable de entorno de cada usuario automáticamente y se muestran como administradas, por lo que los usuarios pueden seleccionarlas pero no pueden editarlas ni eliminarlas en la aplicación.

545 

546El siguiente ejemplo pre-configura una única conexión que se abre en `~/projects` en el host remoto:

547 

548```json theme={null}

549{

550 "sshConfigs": [

551 {

552 "id": "shared-dev-vm",

553 "name": "Shared Dev VM",

554 "sshHost": "user@dev.example.com",

555 "sshPort": 22,

556 "sshIdentityFile": "~/.ssh/id_ed25519",

557 "startDirectory": "~/projects"

558 }

559 ]

560}

561```

562 

563Cada entrada requiere `id`, `name` y `sshHost`. Los campos `sshPort`, `sshIdentityFile` y `startDirectory` son opcionales. Los usuarios también pueden agregar `sshConfigs` a su propio `~/.claude/settings.json`, que es donde se almacenan las conexiones agregadas a través del diálogo.

564 

565## Configuración empresarial

566 

567Las organizaciones en planes Team o Enterprise pueden gestionar el comportamiento de la aplicación de escritorio a través de controles de consola de administración, archivos de configuración administrados y políticas de gestión de dispositivos.

568 

569### Controles de consola de administración

570 

571Estas configuraciones se configuran a través de la [consola de configuración de administración](https://claude.ai/admin-settings/claude-code):

572 

573* **Code in the desktop**: controle si los usuarios en su organización pueden acceder a Claude Code en la aplicación de escritorio

574* **Code in the web**: habilite o deshabilite [sesiones web](/es/claude-code-on-the-web) para su organización

575* **Remote Control**: habilite o deshabilite [Remote Control](/es/remote-control) para su organización

576* **Disable Bypass permissions mode**: evite que los usuarios en su organización habiliten el modo bypass permissions

577 

578### Configuración administrada

579 

580La configuración administrada anula la configuración del proyecto y usuario y se aplica cuando Desktop genera sesiones de CLI. Puede establecer estas claves en el archivo de [configuración administrada](/es/settings#settings-precedence) de su organización o enviarlas de forma remota a través de la consola de administración.

581 

582| Clave | Descripción |

583| ------------------------------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

584| `permissions.disableBypassPermissionsMode` | establezca en `"disable"` para evitar que los usuarios habiliten el modo bypass permissions. |

585| `disableAutoMode` | establezca en `"disable"` para evitar que los usuarios habiliten el modo [Auto](/es/permission-modes#eliminate-prompts-with-auto-mode). Elimina Auto del selector de modo. También aceptado bajo `permissions`. |

586| `autoMode` | personalice lo que el clasificador de modo auto confía y bloquea en toda su organización. Consulte [Configurar el modo auto](/es/auto-mode-config). |

587| `sshConfigs` | pre-configure [conexiones SSH](#pre-configure-ssh-connections-for-your-team) que aparecen en el menú desplegable de entorno. Los usuarios no pueden editar ni eliminar conexiones administradas. |

588 

589Un archivo de configuración administrada implementado en disco en cada máquina se aplica a sesiones de Desktop. La configuración administrada enviada de forma remota a través de la consola de administración actualmente solo llega a sesiones de CLI e IDE, por lo que para implementaciones de Desktop distribuya el archivo a través de MDM o use los [controles de consola de administración](#admin-console-controls) anteriores.

590 

591`permissions.disableBypassPermissionsMode` y `disableAutoMode` también funcionan en configuración de usuario y proyecto, pero colocarlos en configuración administrada evita que los usuarios los anulen. `autoMode` se lee desde configuración de usuario, `.claude/settings.local.json` y configuración administrada, pero no desde `.claude/settings.json` verificado: un repositorio clonado no puede inyectar sus propias reglas de clasificador. Para la lista completa de configuraciones solo administradas incluyendo `allowManagedPermissionRulesOnly` y `allowManagedHooksOnly`, consulte [configuraciones solo administradas](/es/permissions#managed-only-settings).

592 

593### Políticas de gestión de dispositivos

594 

595Los equipos de TI pueden gestionar la aplicación de escritorio a través de MDM en macOS o política de grupo en Windows. Las políticas disponibles incluyen habilitar o deshabilitar la función Claude Code, controlar actualizaciones automáticas y establecer una URL de implementación personalizada.

596 

597* **macOS**: configure a través del dominio de preferencia `com.anthropic.Claude` usando herramientas como Jamf o Kandji

598* **Windows**: configure a través del registro en `SOFTWARE\Policies\Claude`

599 

600### Autenticación y SSO

601 

602Las organizaciones empresariales pueden requerir SSO para todos los usuarios. Consulte [autenticación](/es/authentication) para obtener detalles a nivel de plan y [Configurar SSO](https://support.claude.com/en/articles/13132885-setting-up-single-sign-on-sso) para la configuración de SAML y OIDC.

603 

604### Manejo de datos

605 

606Claude Code procesa su código localmente en sesiones locales o en la infraestructura en la nube de Anthropic en sesiones remotas. Las conversaciones y el contexto del código se envían a la API de Anthropic para procesamiento. Consulte [manejo de datos](/es/data-usage) para obtener detalles sobre retención de datos, privacidad y cumplimiento.

607 

608### Implementación

609 

610Desktop se puede distribuir a través de herramientas de implementación empresarial:

611 

612* **macOS**: distribuya a través de MDM como Jamf o Kandji usando el instalador `.dmg`

613* **Windows**: implemente a través del paquete MSIX o instalador `.exe`. Consulte [Deploy Claude Desktop for Windows](https://support.claude.com/en/articles/12622703-deploy-claude-desktop-for-windows) para opciones de implementación empresarial incluyendo instalación silenciosa

614 

615Para configuración de red como configuración de proxy, lista de permitidos de firewall y puertas de enlace LLM, consulte [configuración de red](/es/network-config).

616 

617Para la referencia completa de configuración empresarial, consulte la [guía de configuración empresarial](https://support.claude.com/en/articles/12622667-enterprise-configuration).

618 

619## ¿Viene de la CLI?

620 

621Si ya usa la CLI de Claude Code, Desktop ejecuta el mismo motor subyacente con una interfaz gráfica. Puede ejecutar ambos simultáneamente en la misma máquina, incluso en el mismo proyecto. Cada uno mantiene historial de sesión separado, pero comparten configuración y memoria del proyecto a través de archivos CLAUDE.md.

622 

623Para mover una sesión de CLI a Desktop, ejecute `/desktop` en la terminal. Claude guarda su sesión y la abre en la aplicación de escritorio, luego sale de la CLI. Este comando está disponible solo en macOS y Windows.

624 

625<Tip>

626 Cuándo usar Desktop vs CLI: use Desktop cuando desee gestionar sesiones paralelas en una ventana, organizar paneles lado a lado o revisar cambios visualmente. Use la CLI cuando necesite scripting, automatización o prefiera un flujo de trabajo de terminal.

627</Tip>

628 

629### Equivalentes de banderas de CLI

630 

631Esta tabla muestra el equivalente de la aplicación de escritorio para banderas de CLI comunes. Las banderas no listadas no tienen equivalente de escritorio porque están diseñadas para scripting o automatización.

632 

633| CLI | Equivalente de Desktop |

634| ----------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

635| `--model sonnet` | Menú desplegable de modelo junto al botón de envío |

636| `--resume`, `--continue` | Haga clic en una sesión en la barra lateral |

637| `--permission-mode` | Selector de modo junto al botón de envío |

638| `--dangerously-skip-permissions` | Modo Bypass permissions. Habilite en Configuración → Claude Code → "Allow bypass permissions mode". Los administradores empresariales pueden deshabilitar esta configuración. |

639| `--add-dir` | Agregue múltiples repositorios con el botón **+** en sesiones remotas |

640| `--allowedTools`, `--disallowedTools` | Sin equivalente por sesión. Las reglas de permisos en [archivos de configuración](/es/settings) aún se aplican. |

641| `--verbose` | Modo de vista [Verbose](#switch-view-modes) en el menú desplegable de vista de transcripción |

642| `--print`, `--output-format` | No disponible. Desktop es solo interactivo. |

643| Variable de entorno `ANTHROPIC_MODEL` | Menú desplegable de modelo junto al botón de envío |

644| Variable de entorno `MAX_THINKING_TOKENS` | Establezca en el editor de entorno local. Consulte [configuración del entorno](#environment-configuration). |

645 

646### Configuración compartida

647 

648Desktop y CLI leen los mismos archivos de configuración, por lo que su configuración se transfiere:

649 

650* Los archivos **[CLAUDE.md](/es/memory)** y `CLAUDE.local.md` en su proyecto son utilizados por ambos

651* Los **[MCP servers](/es/mcp)** configurados en `~/.claude.json` o `.mcp.json` funcionan en ambos

652* Los **[Hooks](/es/hooks)** y **[skills](/es/skills)** definidos en configuración se aplican a ambos

653* La **[Configuración](/es/settings)** en `~/.claude.json` y `~/.claude/settings.json` se comparte. Las reglas de permisos, herramientas permitidas y otras configuraciones en `settings.json` se aplican a sesiones de Desktop.

654* **Modelos**: Sonnet, Opus y Haiku están disponibles en ambos. En Desktop, seleccione el modelo del menú desplegable junto al botón de envío. Puede cambiar el modelo durante la sesión desde el mismo menú desplegable.

655 

656<Note>

657 **MCP servers: aplicación de chat de Desktop vs Claude Code**: Los MCP servers configurados para la aplicación de chat de Claude Desktop en `claude_desktop_config.json` son separados de Claude Code y no aparecerán en la pestaña Code. Para usar MCP servers en Claude Code, configúrelos en `~/.claude.json` o en el archivo `.mcp.json` de su proyecto. Consulte [configuración de MCP](/es/mcp#installing-mcp-servers) para obtener detalles.

658</Note>

659 

660### Comparación de características

661 

662Esta tabla compara capacidades principales entre la CLI y Desktop. Para una lista completa de banderas de CLI, consulte la [referencia de CLI](/es/cli-reference).

663 

664| Característica | CLI | Desktop |

665| ------------------------------------------------------- | --------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

666| Modos de permisos | Todos los modos incluyendo `dontAsk` | Ask permissions, Auto accept edits, Plan mode, Auto y Bypass permissions a través de Configuración |

667| `--dangerously-skip-permissions` | Bandera de CLI | Modo Bypass permissions. Habilite en Configuración → Claude Code → "Allow bypass permissions mode" |

668| [Proveedores de terceros](/es/third-party-integrations) | Bedrock, Vertex, Foundry | API de Anthropic de forma predeterminada. Las implementaciones empresariales pueden configurar Vertex AI y proveedores de puerta de enlace. Consulte la [guía de configuración empresarial](https://support.claude.com/en/articles/12622667-enterprise-configuration). |

669| [MCP servers](/es/mcp) | Configurar en archivos de configuración | UI de Connectors para sesiones locales y SSH, o archivos de configuración |

670| [Plugins](/es/plugins) | Comando `/plugin` | UI del administrador de plugins |

671| Archivos @mention | Basado en texto | Con autocompletado; sesiones locales y SSH solamente |

672| Archivos adjuntos | No disponible | Imágenes, PDF |

673| Aislamiento de sesión | Bandera [`--worktree`](/es/cli-reference) | Worktrees automáticos |

674| Múltiples sesiones | Terminales separadas | Pestañas de barra lateral |

675| Tareas recurrentes | Trabajos cron, tuberías de CI | [Tareas programadas](/es/desktop-scheduled-tasks) |

676| Uso de computadora | [Habilitar a través de `/mcp`](/es/computer-use) en macOS | [Control de aplicaciones y pantalla](#let-claude-use-your-computer) en macOS y Windows |

677| Integración de Dispatch | No disponible | [Sesiones de Dispatch](#sessions-from-dispatch) en la barra lateral |

678| Scripting y automatización | [`--print`](/es/cli-reference), [Agent SDK](/es/headless) | No disponible |

679 

680### Lo que no está disponible en Desktop

681 

682Las siguientes características están disponibles solo en la CLI o extensión de VS Code:

683 

684* **Proveedores de terceros**: Desktop se conecta a la API de Anthropic de forma predeterminada. Las implementaciones empresariales pueden configurar Vertex AI y proveedores de puerta de enlace a través de [configuración administrada](https://support.claude.com/en/articles/12622667-enterprise-configuration). Para Bedrock o Foundry, use la [CLI](/es/quickstart).

685* **Linux**: la aplicación de escritorio está disponible solo en macOS y Windows. En Linux, use la [CLI](/es/quickstart).

686* **Sugerencias de código en línea**: Desktop no proporciona sugerencias de estilo autocompletado. Funciona a través de solicitudes conversacionales y cambios de código explícitos.

687* **Equipos de agentes**: la orquestación de múltiples agentes está disponible a través de la [CLI](/es/agent-teams) y [Agent SDK](/es/headless), no en Desktop.

688 

689## Solución de problemas

690 

691Las secciones a continuación cubren problemas específicos de la aplicación de escritorio. Para errores de API en tiempo de ejecución que aparecen en el chat como `API Error: 500`, `529 Overloaded`, `429` o `Prompt is too long`, consulte la [referencia de errores](/es/errors). Esos errores y sus soluciones son los mismos en la CLI, escritorio y web.

692 

693### Verificar su versión

694 

695Para ver qué versión de la aplicación de escritorio está ejecutando:

696 

697* **macOS**: haga clic en **Claude** en la barra de menú, luego **About Claude**

698* **Windows**: haga clic en **Help**, luego **About**

699 

700Haga clic en el número de versión para copiarlo a su portapapeles.

701 

702### Errores 403 o de autenticación en la pestaña Code

703 

704Si ve `Error 403: Forbidden` u otros fallos de autenticación al usar la pestaña Code:

705 

7061. Cierre sesión e inicie sesión nuevamente desde el menú de la aplicación. Esta es la solución más común.

7072. Verifique que tenga una suscripción de pago activa: Pro, Max, Team o Enterprise.

7083. Si la CLI funciona pero Desktop no, cierre completamente la aplicación de escritorio, no solo cierre la ventana, luego reabrala e inicie sesión nuevamente.

7094. Verifique su conexión a Internet y configuración de proxy.

710 

711### Pantalla en blanco o atascada al iniciar

712 

713Si la aplicación se abre pero muestra una pantalla en blanco o sin respuesta:

714 

7151. Reinicie la aplicación.

7162. Verifique si hay actualizaciones pendientes. La aplicación se actualiza automáticamente al iniciar.

7173. En Windows, verifique Event Viewer para registros de bloqueo bajo **Windows Logs → Application**.

718 

719### "Failed to load session"

720 

721Si ve `Failed to load session`, la carpeta seleccionada puede no existir más, un repositorio de Git puede requerir Git LFS que no está instalado, o los permisos de archivo pueden impedir el acceso. Intente seleccionar una carpeta diferente o reinicie la aplicación.

722 

723### La sesión no encuentra herramientas instaladas

724 

725Si Claude no puede encontrar herramientas como `npm`, `node` u otros comandos de CLI, verifique que las herramientas funcionen en su terminal regular, verifique que su perfil de shell configure correctamente PATH y reinicie la aplicación de escritorio para recargar variables de entorno.

726 

727### Errores de Git y Git LFS

728 

729En Windows, Git es necesario para que la pestaña Code inicie sesiones locales. Si ve "Git is required," instale [Git para Windows](https://git-scm.com/downloads/win) y reinicie la aplicación.

730 

731Si ve "Git LFS is required by this repository but is not installed," instale Git LFS desde [git-lfs.com](https://git-lfs.com/), ejecute `git lfs install` y reinicie la aplicación.

732 

733### Los MCP servers no funcionan en Windows

734 

735Si los controles deslizantes de MCP server no responden o los servidores no se conectan en Windows, verifique que el servidor esté configurado correctamente en su configuración, reinicie la aplicación, verifique que el proceso del servidor se esté ejecutando en Task Manager y revise los registros del servidor para errores de conexión.

736 

737### La aplicación no se cierra

738 

739* **macOS**: presione Cmd+Q. Si la aplicación no responde, use Force Quit con Cmd+Option+Esc, seleccione Claude y haga clic en Force Quit.

740* **Windows**: use Task Manager con Ctrl+Shift+Esc para finalizar el proceso de Claude.

741 

742### Problemas específicos de Windows

743 

744* **PATH no actualizado después de instalar**: abra una nueva ventana de terminal. Las actualizaciones de PATH solo se aplican a nuevas sesiones de terminal.

745* **Error de instalación concurrente**: si ve un error sobre otra instalación en progreso pero no la hay, intente ejecutar el instalador como Administrador.

746 

747### "Branch doesn't exist yet" al abrir en CLI

748 

749Las sesiones remotas pueden crear ramas que no existen en su máquina local. Haga clic en el nombre de la rama en la barra de herramientas de la sesión para copiarlo, luego obténgalo localmente:

750 

751```bash theme={null}

752git fetch origin <branch-name>

753git checkout <branch-name>

754```

755 

756### ¿Aún atascado?

757 

758* Busque o presente un error en [GitHub Issues](https://github.com/anthropics/claude-code/issues)

759* Visite el [centro de soporte de Claude](https://support.claude.com/)

760 

761Al presentar un error, incluya la versión de su aplicación de escritorio, su sistema operativo, el mensaje de error exacto y registros relevantes. En macOS, verifique Console.app. En Windows, verifique Event Viewer → Windows Logs → Application.

desktop-quickstart.md +129 −0 created

Details

1> ## Documentation Index

2> Fetch the complete documentation index at: https://code.claude.com/docs/llms.txt

3> Use this file to discover all available pages before exploring further.

4 

5# Comenzar con la aplicación de escritorio

6 

7> Instale Claude Code en el escritorio e inicie su primera sesión de codificación

8 

9La aplicación de escritorio le proporciona Claude Code con una interfaz gráfica diseñada para ejecutar múltiples sesiones lado a lado: una barra lateral para gestionar trabajo paralelo, un diseño de arrastrar y soltar con terminal integrada y editor de archivos, revisión visual de diferencias, vista previa de aplicaciones en vivo, monitoreo de PR de GitHub con fusión automática, y tareas programadas. No se requiere terminal.

10 

11<CardGroup cols={2}>

12 <Card title="Download for macOS" icon="apple" href="https://claude.ai/api/desktop/darwin/universal/dmg/latest/redirect?utm_source=claude_code&utm_medium=docs">

13 Universal build for Intel and Apple Silicon

14 </Card>

15 

16 <Card title="Download for Windows" icon="windows" href="https://claude.ai/api/desktop/win32/x64/setup/latest/redirect?utm_source=claude_code&utm_medium=docs">

17 For x64 processors

18 </Card>

19</CardGroup>

20 

21For Windows ARM64, download the [ARM64 installer](https://claude.ai/api/desktop/win32/arm64/setup/latest/redirect?utm_source=claude_code\&utm_medium=docs). The desktop app is not available on Linux; use the [CLI](/en/quickstart) instead.

22 

23<Note>

24 Claude Code requiere una [suscripción Pro, Max, Team o Enterprise](https://claude.com/pricing?utm_source=claude_code\&utm_medium=docs\&utm_content=desktop_quickstart_pricing).

25</Note>

26 

27Esta página lo guía a través de la instalación de la aplicación e iniciando su primera sesión. Si ya está configurado, consulte [Usar Claude Code Desktop](/es/desktop) para la referencia completa.

28 

29La aplicación de escritorio tiene tres pestañas:

30 

31* **Chat**: Conversación general sin acceso a archivos, similar a claude.ai.

32* **Cowork**: Un agente autónomo de fondo que trabaja en tareas en una VM en la nube con su propio entorno. Puede ejecutarse de forma independiente mientras realiza otro trabajo.

33* **Code**: Un asistente de codificación interactivo con acceso directo a sus archivos locales. Revisa y aprueba cada cambio en tiempo real.

34 

35Chat y Cowork se tratan en los [artículos de soporte de Claude Desktop](https://support.claude.com/en/collections/16163169-claude-desktop). Esta página se enfoca en la pestaña **Code**.

36 

37## Instalar

38 

39<Steps>

40 <Step title="Instalar e iniciar sesión">

41 Descargue el instalador para su plataforma desde los enlaces anteriores y ejecútelo. Inicie Claude desde su carpeta Aplicaciones en macOS o el menú Inicio en Windows, luego inicie sesión con su cuenta de Anthropic.

42 </Step>

43 

44 <Step title="Abrir la pestaña Code">

45 Haga clic en la pestaña **Code** en el centro superior. Si hacer clic en Code le solicita actualizar, debe [suscribirse a un plan de pago](https://claude.com/pricing?utm_source=claude_code\&utm_medium=docs\&utm_content=desktop_quickstart_upgrade) primero. Si le solicita iniciar sesión en línea, complete el inicio de sesión y reinicie la aplicación. Si ve un error 403, consulte [solución de problemas de autenticación](/es/desktop#403-or-authentication-errors-in-the-code-tab).

46 </Step>

47</Steps>

48 

49La aplicación de escritorio incluye Claude Code. No necesita instalar Node.js o la CLI por separado. Para usar `claude` desde la terminal, instale la CLI por separado. Consulte [Comenzar con la CLI](/es/quickstart).

50 

51## Inicie su primera sesión

52 

53Con la pestaña Code abierta, elija un proyecto y dele a Claude algo que hacer.

54 

55<Steps>

56 <Step title="Elegir un entorno y carpeta">

57 Seleccione **Local** para ejecutar Claude en su máquina usando sus archivos directamente. Haga clic en **Select folder** y elija su directorio de proyecto.

58 

59 <Tip>

60 Comience con un proyecto pequeño que conozca bien. Es la forma más rápida de ver qué puede hacer Claude Code. En Windows, [Git](https://git-scm.com/downloads/win) debe estar instalado para que las sesiones locales funcionen. La mayoría de Macs incluyen Git de forma predeterminada.

61 </Tip>

62 

63 También puede seleccionar:

64 

65 * **Remote**: Ejecute sesiones en la infraestructura en la nube de Anthropic que continúan incluso si cierra la aplicación. Las sesiones remotas utilizan la misma infraestructura que [Claude Code en la web](/es/claude-code-on-the-web).

66 * **SSH**: Conéctese a una máquina remota a través de SSH (sus propios servidores, VMs en la nube o contenedores de desarrollo). Claude Code debe estar instalado en la máquina remota.

67 </Step>

68 

69 <Step title="Elegir un modelo">

70 Seleccione un modelo del menú desplegable junto al botón de envío. Consulte [modelos](/es/model-config#available-models) para una comparación de Opus, Sonnet y Haiku. Puede cambiar el modelo más tarde desde el mismo menú desplegable.

71 </Step>

72 

73 <Step title="Dígale a Claude qué hacer">

74 Escriba lo que desea que Claude haga:

75 

76 * `Find a TODO comment and fix it`

77 * `Add tests for the main function`

78 * `Create a CLAUDE.md with instructions for this codebase`

79 

80 Una [sesión](/es/desktop#work-in-parallel-with-sessions) es una conversación con Claude sobre su código. Cada sesión rastrea su propio contexto y cambios, por lo que puede trabajar en múltiples tareas sin que se interfieran entre sí.

81 </Step>

82 

83 <Step title="Revisar y aceptar cambios">

84 De forma predeterminada, la pestaña Code comienza en [modo Ask permissions](/es/desktop#choose-a-permission-mode), donde Claude propone cambios y espera su aprobación antes de aplicarlos. Verá:

85 

86 1. Una [vista de diferencias](/es/desktop#review-changes-with-diff-view) que muestra exactamente qué cambiará en cada archivo

87 2. Botones Aceptar/Rechazar para aprobar o rechazar cada cambio

88 3. Actualizaciones en tiempo real mientras Claude trabaja en su solicitud

89 

90 Si rechaza un cambio, Claude le preguntará cómo le gustaría proceder de manera diferente. Sus archivos no se modifican hasta que acepte.

91 </Step>

92</Steps>

93 

94## ¿Ahora qué?

95 

96Ha realizado su primera edición. Para la referencia completa sobre todo lo que Desktop puede hacer, consulte [Usar Claude Code Desktop](/es/desktop). Aquí hay algunas cosas para probar a continuación.

97 

98**Interrumpir y dirigir.** Puede interrumpir a Claude en cualquier momento. Si va por el camino equivocado, haga clic en el botón de parada o escriba su corrección y presione **Enter**. Claude detiene lo que está haciendo y se ajusta según su entrada. No tiene que esperar a que termine o comenzar de nuevo.

99 

100**Proporcione más contexto a Claude.** Escriba `@filename` en el cuadro de solicitud para extraer un archivo específico a la conversación, adjunte imágenes y PDF usando el botón de adjuntos, o arrastre y suelte archivos directamente en la solicitud. Cuanto más contexto tenga Claude, mejores serán los resultados. Consulte [Agregar archivos y contexto](/es/desktop#add-files-and-context-to-prompts).

101 

102**Use skills para tareas repetibles.** Escriba `/` o haga clic en **+** → **Slash commands** para examinar [comandos integrados](/es/commands), [skills personalizados](/es/skills) y skills de plugins. Los skills son solicitudes reutilizables que puede invocar siempre que las necesite, como listas de verificación de revisión de código o pasos de implementación.

103 

104**Revise los cambios antes de confirmar.** Después de que Claude edita archivos, aparece un indicador `+12 -1`. Haga clic en él para abrir la [vista de diferencias](/es/desktop#review-changes-with-diff-view), revise las modificaciones archivo por archivo y comente en líneas específicas. Claude lee sus comentarios y revisa. Haga clic en **Review code** para que Claude evalúe las diferencias y deje sugerencias en línea.

105 

106**Ajuste cuánto control tiene.** Su [modo de permisos](/es/desktop#choose-a-permission-mode) controla el equilibrio. Ask permissions (predeterminado) requiere aprobación antes de cada edición. Auto accept edits acepta automáticamente ediciones de archivos para una iteración más rápida. Plan mode permite que Claude mapee un enfoque sin tocar ningún archivo, lo cual es útil antes de una refactorización grande.

107 

108**Agregue plugins para más capacidades.** Haga clic en el botón **+** junto al cuadro de solicitud y seleccione **Plugins** para examinar e instalar [plugins](/es/desktop#install-plugins) que agregan skills, agentes, MCP servers y más.

109 

110**Organice su espacio de trabajo.** Arrastre los paneles de chat, diferencias, terminal, archivo y vista previa a cualquier diseño que desee. Abra la terminal con **Ctrl+\`** para ejecutar comandos junto a su sesión, o haga clic en una ruta de archivo para abrirla en el panel de archivos. Consulte [Organizar su espacio de trabajo](/es/desktop#arrange-your-workspace).

111 

112**Obtenga una vista previa de su aplicación.** Haga clic en el menú desplegable **Preview** para ejecutar su servidor de desarrollo directamente en el escritorio. Claude puede ver la aplicación en ejecución, probar puntos finales, inspeccionar registros e iterar en lo que ve. Consulte [Obtenga una vista previa de su aplicación](/es/desktop#preview-your-app).

113 

114**Rastree su solicitud de extracción.** Después de abrir un PR, Claude Code monitorea los resultados de verificación de CI y puede corregir automáticamente fallas o fusionar el PR una vez que todas las verificaciones pasen. Consulte [Monitorear el estado de la solicitud de extracción](/es/desktop#monitor-pull-request-status).

115 

116**Ponga a Claude en un horario.** Configure [tareas programadas](/es/desktop-scheduled-tasks) para ejecutar Claude automáticamente de forma recurrente: una revisión de código diaria cada mañana, una auditoría de dependencias semanal, o un resumen que extraiga de sus herramientas conectadas.

117 

118**Escale cuando esté listo.** Abra [sesiones paralelas](/es/desktop#work-in-parallel-with-sessions) desde la barra lateral para trabajar en múltiples tareas a la vez, cada una en su propio Git worktree, y abra el [panel de tareas](/es/desktop#watch-background-tasks) para ver los subagentes y comandos de fondo que una sesión está ejecutando. Abra un [chat lateral](/es/desktop#ask-a-side-question-without-derailing-the-session) para hacer una pregunta sin descarrilar el hilo principal. Envíe [trabajo de larga duración a la nube](/es/desktop#run-long-running-tasks-remotely) para que continúe incluso si cierra la aplicación, o [continúe una sesión en la web o en su IDE](/es/desktop#continue-in-another-surface) si una tarea toma más tiempo del esperado. [Conecte herramientas externas](/es/desktop#extend-claude-code) como GitHub, Slack y Linear para reunir su flujo de trabajo.

119 

120## ¿Viene de la CLI?

121 

122Desktop ejecuta el mismo motor que la CLI con una interfaz gráfica. Puede ejecutar ambos simultáneamente en el mismo proyecto, y comparten configuración (archivos CLAUDE.md, MCP servers, hooks, skills y configuración). Para una comparación completa de características, equivalentes de banderas y lo que no está disponible en Desktop, consulte [Comparación de CLI](/es/desktop#coming-from-the-cli).

123 

124## Qué sigue

125 

126* [Usar Claude Code Desktop](/es/desktop): modos de permisos, sesiones paralelas, vista de diferencias, conectores y configuración empresarial

127* [Solución de problemas](/es/desktop#troubleshooting): soluciones a errores comunes y problemas de configuración

128* [Mejores prácticas](/es/best-practices): consejos para escribir solicitudes efectivas y aprovechar al máximo Claude Code

129* [Flujos de trabajo comunes](/es/common-workflows): tutoriales para depuración, refactorización, pruebas y más

devcontainer.md +194 −0 created

Details

1> ## Documentation Index

2> Fetch the complete documentation index at: https://code.claude.com/docs/llms.txt

3> Use this file to discover all available pages before exploring further.

4 

5# Contenedores de desarrollo

6 

7> Ejecuta Claude Code dentro de un contenedor de desarrollo para entornos consistentes e aislados en todo tu equipo.

8 

9Un [contenedor de desarrollo](https://containers.dev/), o dev container, te permite definir un entorno idéntico e aislado que cada ingeniero en tu equipo puede ejecutar. Con Claude Code instalado en ese contenedor, los comandos que Claude ejecuta se ejecutan dentro de él en lugar de en la máquina host, mientras que las ediciones a tus archivos de proyecto aparecen en tu repositorio local mientras trabajas.

10 

11Esta página cubre [instalar Claude Code en un contenedor de desarrollo](#add-claude-code-to-your-dev-container) y los temas de configuración que siguen. Cada tema es independiente, así que salta a los que coincidan con lo que necesitas configurar:

12 

13* [Persistir autenticación y configuración entre reconstrucciones](#persist-authentication-and-settings-across-rebuilds)

14* [Aplicar política organizacional](#enforce-organization-policy)

15* [Restringir salida de red](#restrict-network-egress)

16* [Ejecutar sin solicitudes de permiso](#run-without-permission-prompts)

17 

18<Warning>

19 Aunque el contenedor de desarrollo proporciona protecciones sustanciales, ningún sistema es completamente inmune a todos los ataques.

20 Cuando se ejecuta con `--dangerously-skip-permissions`, los contenedores de desarrollo no previenen que un proyecto malicioso exfiltre cualquier cosa accesible dentro del contenedor, incluyendo las credenciales de Claude Code almacenadas en [`~/.claude`](/es/claude-directory).

21 Solo usa contenedores de desarrollo cuando desarrolles con repositorios de confianza, y monitorea las actividades de Claude.

22 Evita montar secretos del host como `~/.ssh` o archivos de credenciales en la nube en el contenedor; prefiere tokens con alcance de repositorio o de corta duración.

23</Warning>

24 

25<Accordion title="Cómo funcionan los contenedores de desarrollo con tu editor">

26 <img src="https://mintcdn.com/claude-code/YvJyjZfd9yMihr0i/images/devcontainer-architecture.svg?fit=max&auto=format&n=YvJyjZfd9yMihr0i&q=85&s=9017b1d16a446c6cc37ba562f35b9aae" className="dark:hidden" alt="Diagrama que muestra un editor en el host conectándose a un contenedor de desarrollo Docker. Claude Code, la terminal y las herramientas de compilación se ejecutan dentro del contenedor. El repositorio del host está montado en bind en el contenedor como el espacio de trabajo." width="640" height="300" data-path="images/devcontainer-architecture.svg" />

27 

28 <img src="https://mintcdn.com/claude-code/YvJyjZfd9yMihr0i/images/devcontainer-architecture-dark.svg?fit=max&auto=format&n=YvJyjZfd9yMihr0i&q=85&s=ef00c8e25b1ea7a3a152895f1488831b" className="hidden dark:block" alt="Diagrama que muestra un editor en el host conectándose a un contenedor de desarrollo Docker. Claude Code, la terminal y las herramientas de compilación se ejecutan dentro del contenedor. El repositorio del host está montado en bind en el contenedor como el espacio de trabajo." width="640" height="300" data-path="images/devcontainer-architecture-dark.svg" />

29 

30 Un contenedor de desarrollo se ejecuta como un contenedor Docker, ya sea en tu máquina o en un host en la nube como GitHub Codespaces. Un editor que admita la especificación Dev Containers, como VS Code, GitHub Codespaces, un IDE de JetBrains o Cursor, se conecta a ese contenedor: navegas y editas archivos en el editor como de costumbre, pero la terminal integrada, los servidores de lenguaje y las herramientas de compilación se ejecutan dentro del contenedor en lugar de en tu host. Los editores sin soporte para contenedores de desarrollo, como Vim simple, no son parte de este flujo de trabajo.

31 

32 Claude Code se ejecuta dentro del contenedor, por lo que ve los mismos archivos, dependencias y herramientas que el resto de la cadena de herramientas de tu proyecto. En VS Code puedes usar el [panel de extensión de Claude Code](/es/vs-code) o ejecutar `claude` en la terminal integrada; ambos se ejecutan dentro del contenedor y comparten la misma configuración de `~/.claude`.

33</Accordion>

34 

35## Agregar Claude Code a tu contenedor de desarrollo

36 

37Claude Code se instala en cualquier contenedor de desarrollo a través de la [Característica Claude Code Dev Container](https://github.com/anthropics/devcontainer-features/tree/main/src/claude-code).

38 

39La configuración funciona con cualquier herramienta que admita la especificación Dev Containers, como VS Code, GitHub Codespaces o IDEs de JetBrains. Los pasos a continuación usan VS Code como ejemplo.

40 

41Cuando abres el contenedor en VS Code o Codespaces, la característica también agrega la extensión Claude Code VS Code; otros editores ignoran esa parte.

42 

43<Tip>

44 ¿Nuevo en contenedores de desarrollo? El [tutorial de Dev Containers de VS Code](https://code.visualstudio.com/docs/devcontainers/tutorial) te guía a través de la instalación de Docker, la extensión y la apertura de tu primer contenedor. Para un ejemplo más completo y endurecido con un firewall y volúmenes persistentes, consulta [Prueba el contenedor de referencia](#try-the-reference-container).

45</Tip>

46 

47<Steps>

48 <Step title="Crear o actualizar devcontainer.json">

49 Guarda lo siguiente como `.devcontainer/devcontainer.json` en tu repositorio, o agrega el bloque `features` a tu archivo existente.

50 

51 La etiqueta de versión al final, como `:1.0`, fija el script de instalación de la característica, no la versión de Claude Code. La característica instala la última versión de Claude Code, y Claude Code se actualiza automáticamente dentro del contenedor de forma predeterminada.

52 

53 Para fijar la versión de CLI o deshabilitar la actualización automática, consulta [Aplicar política organizacional](#enforce-organization-policy).

54 

55 ```json .devcontainer/devcontainer.json theme={null}

56 {

57 "image": "mcr.microsoft.com/devcontainers/base:ubuntu",

58 "features": {

59 "ghcr.io/anthropics/devcontainer-features/claude-code:1.0": {}

60 }

61 }

62 ```

63 

64 Reemplaza la línea `image` con la imagen base de tu proyecto o elimínala si tu archivo existente usa un Dockerfile.

65 </Step>

66 

67 <Step title="Reconstruir el contenedor">

68 Abre la Paleta de Comandos de VS Code con `Cmd+Shift+P` en Mac o `Ctrl+Shift+P` en Windows y Linux, y ejecuta **Dev Containers: Rebuild Container**.

69 

70 Para otras herramientas, sigue la acción de reconstrucción de esa herramienta: consulta [reconstruir en GitHub Codespaces](https://docs.github.com/en/codespaces/developing-in-a-codespace/rebuilding-the-container-in-a-codespace), la [CLI de Dev Containers](https://github.com/devcontainers/cli), o la documentación de contenedor de desarrollo de tu IDE.

71 </Step>

72 

73 <Step title="Iniciar sesión en Claude Code">

74 Abre una terminal en el contenedor reconstruido y ejecuta `claude`, luego sigue la solicitud de autenticación.

75 </Step>

76</Steps>

77 

78Lo que ves en la solicitud de autenticación depende de tu proveedor:

79 

80* **Anthropic**: inicia sesión a través de un navegador con tu cuenta de Claude o Anthropic Console

81* **[Amazon Bedrock, Google Vertex AI o Microsoft Foundry](/es/third-party-integrations)**: Claude Code usa tus credenciales del proveedor de nube, sin solicitud de navegador

82 

83Para proveedores de nube, pasa credenciales al contenedor como variables de entorno a través de `containerEnv`, un secreto de Codespaces, o la identidad de carga de trabajo de tu nube en lugar de montar archivos de credenciales desde el host. Consulta [Amazon Bedrock](/es/amazon-bedrock), [Google Vertex AI](/es/google-vertex-ai) o [Microsoft Foundry](/es/microsoft-foundry) para la cadena de credenciales que Claude Code lee.

84 

85Consulta [Elige tu proveedor de API](/es/admin-setup#choose-your-api-provider) para decidir qué camino se ajusta a tu organización.

86 

87<Note>

88 Si el inicio de sesión del navegador se completa pero la devolución de llamada nunca llega al contenedor, copia el código mostrado en el navegador y pégalo en la solicitud `Paste code here if prompted` en la terminal. Esto puede suceder cuando el reenvío de puertos del editor no enruta la devolución de llamada de localhost.

89</Note>

90 

91## Persistir autenticación y configuración entre reconstrucciones

92 

93De forma predeterminada, el directorio de inicio del contenedor se descarta en la reconstrucción, por lo que los ingenieros deben iniciar sesión nuevamente cada vez. Claude Code almacena su token de autenticación, configuración de usuario e historial de sesión en [`~/.claude`](/es/claude-directory). Monta un volumen nombrado en esa ruta para mantener este estado entre reconstrucciones.

94 

95El siguiente ejemplo monta un volumen en el directorio de inicio del usuario `node`:

96 

97```json devcontainer.json theme={null}

98"mounts": [

99 "source=claude-code-config,target=/home/node/.claude,type=volume"

100]

101```

102 

103Reemplaza `/home/node` con el directorio de inicio del `remoteUser` de tu contenedor. Si montas el volumen en algún lugar que no sea `~/.claude`, establece [`CLAUDE_CONFIG_DIR`](/es/env-vars) en la ruta de montaje para que Claude Code lea y escriba allí.

104 

105Para aislar el estado por proyecto en lugar de compartir un volumen en todos los repositorios, incluye la variable `${devcontainerId}` en el nombre de la fuente. La [configuración de referencia](https://github.com/anthropics/claude-code/blob/main/.devcontainer/devcontainer.json) usa `source=claude-code-config-${devcontainerId}` para este propósito.

106 

107En GitHub Codespaces, `~/.claude` persiste entre detener e iniciar un codespace, pero aún se borra cuando reconstruyes el contenedor, por lo que el montaje de volumen anterior también se aplica allí. Para llevar la autenticación entre codespaces, almacena `ANTHROPIC_API_KEY` o un `CLAUDE_CODE_OAUTH_TOKEN` de [`claude setup-token`](/es/authentication#generate-a-long-lived-token) como un [secreto de Codespaces](https://docs.github.com/en/codespaces/managing-your-codespaces/managing-your-account-specific-secrets-for-github-codespaces); Codespaces hace que los secretos estén disponibles como variables de entorno dentro del contenedor automáticamente.

108 

109## Aplicar política organizacional

110 

111Un contenedor de desarrollo es un lugar conveniente para aplicar la política organizacional, porque la misma imagen y configuración se ejecutan en la máquina de cada ingeniero.

112 

113Claude Code lee `/etc/claude-code/managed-settings.json` en Linux y lo aplica con la máxima precedencia en la [jerarquía de configuración](/es/settings#how-scopes-interact), por lo que los valores allí anulan cualquier cosa que un ingeniero establezca en `~/.claude` o en el directorio `.claude/` del proyecto. Copia el archivo en su lugar desde tu Dockerfile:

114 

115```dockerfile Dockerfile theme={null}

116RUN mkdir -p /etc/claude-code

117COPY managed-settings.json /etc/claude-code/managed-settings.json

118```

119 

120Debido a que el Dockerfile vive en el repositorio, cualquiera con acceso de escritura puede cambiar o eliminar este paso. Para la política que los ingenieros no pueden eludir editando archivos del repositorio, entrega la configuración administrada a través de [configuración administrada por servidor](/es/server-managed-settings) o tu MDM en su lugar. Consulta [archivos de configuración administrada](/es/settings#settings-files) para las claves disponibles y las otras rutas de entrega.

121 

122Para establecer [variables de entorno](/es/env-vars) que se apliquen a cada sesión de Claude Code en el contenedor, agrégalas a `containerEnv` en tu `devcontainer.json`. El siguiente ejemplo rechaza la telemetría y el informe de errores e impide que Claude Code se actualice automáticamente después de la instalación:

123 

124```json devcontainer.json theme={null}

125"containerEnv": {

126 "CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC": "1",

127 "DISABLE_AUTOUPDATER": "1"

128}

129```

130 

131La Característica Dev Container siempre instala la última versión de Claude Code. Para fijar una versión específica de Claude Code para compilaciones reproducibles, instálala desde tu Dockerfile con `npm install -g @anthropic-ai/claude-code@X.Y.Z` en lugar de usar la característica, y establece `DISABLE_AUTOUPDATER` como se muestra arriba.

132 

133Para la lista completa de controles de política incluyendo reglas de permiso, restricciones de herramientas y listas blancas de servidores MCP, consulta [Configurar Claude Code para tu organización](/es/admin-setup).

134 

135Para hacer que [servidores MCP](/es/mcp) estén disponibles dentro del contenedor, defínelos en [alcance de proyecto](/es/mcp#mcp-installation-scopes) en un archivo `.mcp.json` en la raíz del repositorio para que se verifiquen junto con tu configuración de contenedor de desarrollo. Instala cualquier binario del que dependan los servidores stdio locales en tu Dockerfile, y agrega dominios de servidor remoto a tu lista blanca de red.

136 

137## Restringir salida de red

138 

139Puedes limitar el tráfico saliente del contenedor solo a los dominios que Claude Code necesita. Consulta [Requisitos de acceso de red](/es/network-config#network-access-requirements) para los dominios de inferencia y autenticación, y [Servicios de telemetría](/es/data-usage#telemetry-services) para las conexiones opcionales de telemetría e informe de errores y cómo deshabilitarlas.

140 

141El contenedor de referencia incluye un script [`init-firewall.sh`](https://github.com/anthropics/claude-code/blob/main/.devcontainer/init-firewall.sh) que bloquea todo el tráfico saliente excepto los dominios que Claude Code y tus herramientas de desarrollo necesitan. Ejecutar un firewall dentro de un contenedor requiere permisos adicionales, por lo que la referencia agrega las capacidades `NET_ADMIN` y `NET_RAW` a través de `runArgs`. El script de firewall y estas capacidades no son requeridas para Claude Code en sí: puedes dejarlas fuera y confiar en tus propios controles de red en su lugar.

142 

143## Ejecutar sin solicitudes de permiso

144 

145Debido a que el contenedor ejecuta Claude Code como un usuario no root y confina la ejecución de comandos al contenedor, puedes pasar `--dangerously-skip-permissions` para operación desatendida. La CLI rechaza esta bandera cuando se lanza como root, así que confirma que `remoteUser` está establecido en una cuenta no root.

146 

147Omitir solicitudes de permiso elimina tu oportunidad de revisar llamadas de herramientas antes de que se ejecuten. Claude aún puede modificar cualquier archivo en el espacio de trabajo montado en bind, que aparece directamente en tu host, y alcanzar cualquier cosa que la política de red del contenedor permita. Empareja esta bandera con las [restricciones de salida de red](#restrict-network-egress) anteriores para limitar lo que una sesión omitida puede alcanzar.

148 

149Si deseas menos solicitudes sin deshabilitar las comprobaciones de seguridad, considera [modo automático](/es/permission-modes#eliminate-prompts-with-auto-mode) en su lugar, que tiene un clasificador que revisa las acciones antes de que se ejecuten. Para prevenir que los ingenieros usen `--dangerously-skip-permissions` en absoluto, establece `permissions.disableBypassPermissionsMode` en `"disable"` en [configuración administrada](/es/settings#permission-settings).

150 

151## Prueba el contenedor de referencia

152 

153El repositorio [`anthropics/claude-code`](https://github.com/anthropics/claude-code/tree/main/.devcontainer) incluye un contenedor de desarrollo de ejemplo que combina la CLI, el firewall de salida, volúmenes persistentes y un shell basado en Zsh. Se proporciona como un ejemplo funcional en lugar de una imagen base mantenida; úsalo para ver cómo encajan las piezas antes de aplicarlas a tu propia configuración.

154 

155<Steps>

156 <Step title="Instalar requisitos previos">

157 Instala VS Code y la [extensión Dev Containers](https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.remote-containers).

158 </Step>

159 

160 <Step title="Clonar la referencia">

161 Clona el [repositorio de Claude Code](https://github.com/anthropics/claude-code) y ábrelo en VS Code.

162 </Step>

163 

164 <Step title="Reabrir en contenedor">

165 Cuando se te solicite, haz clic en **Reopen in Container**, o ejecuta **Dev Containers: Reopen in Container** desde la Paleta de Comandos.

166 </Step>

167 

168 <Step title="Iniciar Claude Code">

169 Una vez que el contenedor termine de compilarse, abre una terminal con `` Ctrl+` `` y ejecuta `claude` para iniciar sesión y comenzar tu primera sesión.

170 </Step>

171</Steps>

172 

173Para usar esta configuración con tu propio proyecto, copia el directorio `.devcontainer/` en tu repositorio y ajusta el Dockerfile para tu cadena de herramientas, o vuelve a [Agregar Claude Code a tu contenedor de desarrollo](#add-claude-code-to-your-dev-container) para agregar solo la característica a una configuración que ya tienes.

174 

175La configuración de referencia consta de tres archivos. Ninguno de ellos es requerido cuando agregas Claude Code a tu propio contenedor de desarrollo a través de la característica, pero muestran una forma de combinar las piezas.

176 

177| Archivo | Propósito |

178| ---------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------- |

179| [`devcontainer.json`](https://github.com/anthropics/claude-code/blob/main/.devcontainer/devcontainer.json) | Montajes de volumen, capacidades `runArgs`, extensiones de VS Code y `containerEnv` |

180| [`Dockerfile`](https://github.com/anthropics/claude-code/blob/main/.devcontainer/Dockerfile) | Imagen base, herramientas de desarrollo e instalación de Claude Code |

181| [`init-firewall.sh`](https://github.com/anthropics/claude-code/blob/main/.devcontainer/init-firewall.sh) | Bloquea todo el tráfico de red saliente excepto los dominios permitidos |

182 

183## Próximos pasos

184 

185Una vez que Claude Code se ejecuta en tu contenedor de desarrollo, las páginas a continuación cubren el resto de un despliegue organizacional: elegir una ruta de autenticación, entregar política administrada fuera del repositorio, monitorear el uso y entender qué almacena y envía Claude Code.

186 

187* [Configurar Claude Code para tu organización](/es/admin-setup): elige un proveedor de autenticación, decide cómo la política llega a los dispositivos y planifica el despliegue

188* [Configuración administrada por servidor](/es/server-managed-settings): entrega política administrada desde la consola de administrador de Claude.ai para que los ingenieros no puedan eludirla editando archivos del repositorio

189* [Monitorear el uso y auditar la actividad](/es/monitoring-usage): exporta métricas de OpenTelemetry y revisa lo que tu equipo está ejecutando

190* [Requisitos de acceso de red](/es/network-config#network-access-requirements): la lista completa de dominios para proxies y firewalls

191* [Servicios de telemetría y opción de exclusión](/es/data-usage#telemetry-services): qué envía Claude Code de forma predeterminada y las variables de entorno que lo deshabilitan

192* [Explorar el directorio `.claude`](/es/claude-directory): qué contiene el montaje de volumen, incluyendo credenciales, configuración e historial de sesión

193* [Modelo de seguridad](/es/security): cómo encajan el sistema de permisos de Claude Code, el sandboxing y las protecciones contra inyección de solicitudes

194* [Modos de permiso](/es/permission-modes): el rango completo desde modo de plan hasta modo automático hasta omisión, y cuándo usar cada uno

discover-plugins.md +427 −0 created

Details

1> ## Documentation Index

2> Fetch the complete documentation index at: https://code.claude.com/docs/llms.txt

3> Use this file to discover all available pages before exploring further.

4 

5# Descubra e instale plugins pregenerados a través de mercados

6 

7> Encuentre e instale plugins de mercados para extender Claude Code con nuevos comandos, agentes y capacidades.

8 

9Los plugins extienden Claude Code con skills, agentes, hooks y servidores MCP. Los mercados de plugins son catálogos que le ayudan a descubrir e instalar estas extensiones sin construirlas usted mismo.

10 

11¿Busca crear y distribuir su propio mercado? Consulte [Crear y distribuir un mercado de plugins](/es/plugin-marketplaces).

12 

13## Cómo funcionan los mercados

14 

15Un mercado es un catálogo de plugins que alguien más ha creado y compartido. Usar un mercado es un proceso de dos pasos:

16 

17<Steps>

18 <Step title="Agregar el mercado">

19 Esto registra el catálogo con Claude Code para que pueda explorar lo que está disponible. Aún no se instalan plugins.

20 </Step>

21 

22 <Step title="Instalar plugins individuales">

23 Explore el catálogo e instale los plugins que desee.

24 </Step>

25</Steps>

26 

27Piénselo como agregar una tienda de aplicaciones: agregar la tienda le da acceso para explorar su colección, pero usted sigue eligiendo qué aplicaciones descargar individualmente.

28 

29## Mercado oficial de Anthropic

30 

31El mercado oficial de Anthropic (`claude-plugins-official`) está disponible automáticamente cuando inicia Claude Code. Ejecute `/plugin` y vaya a la pestaña **Discover** para explorar lo que está disponible, o vea el catálogo en [claude.com/plugins](https://claude.com/plugins).

32 

33Para instalar un plugin del mercado oficial, use `/plugin install <name>@claude-plugins-official`. Por ejemplo, para instalar la integración de GitHub:

34 

35```shell theme={null}

36/plugin install github@claude-plugins-official

37```

38 

39<Note>

40 El mercado oficial es mantenido por Anthropic. Para enviar un plugin al mercado oficial, use uno de los formularios de envío en la aplicación:

41 

42 * **Claude.ai**: [claude.ai/settings/plugins/submit](https://claude.ai/settings/plugins/submit)

43 * **Console**: [platform.claude.com/plugins/submit](https://platform.claude.com/plugins/submit)

44 

45 Para distribuir plugins de forma independiente, [cree su propio mercado](/es/plugin-marketplaces) y compártalo con los usuarios.

46</Note>

47 

48El mercado oficial incluye varias categorías de plugins:

49 

50### Inteligencia de código

51 

52Los plugins de inteligencia de código habilitan la herramienta LSP integrada de Claude Code, dándole a Claude la capacidad de saltar a definiciones, encontrar referencias y ver errores de tipo inmediatamente después de ediciones. Estos plugins configuran conexiones de [Language Server Protocol](https://microsoft.github.io/language-server-protocol/), la misma tecnología que potencia la inteligencia de código de VS Code.

53 

54Estos plugins requieren que el binario del servidor de lenguaje esté instalado en su sistema. Si ya tiene un servidor de lenguaje instalado, Claude puede solicitarle que instale el plugin correspondiente cuando abra un proyecto.

55 

56| Lenguaje | Plugin | Binario requerido |

57| :--------- | :------------------ | :--------------------------- |

58| C/C++ | `clangd-lsp` | `clangd` |

59| C# | `csharp-lsp` | `csharp-ls` |

60| Go | `gopls-lsp` | `gopls` |

61| Java | `jdtls-lsp` | `jdtls` |

62| Kotlin | `kotlin-lsp` | `kotlin-language-server` |

63| Lua | `lua-lsp` | `lua-language-server` |

64| PHP | `php-lsp` | `intelephense` |

65| Python | `pyright-lsp` | `pyright-langserver` |

66| Rust | `rust-analyzer-lsp` | `rust-analyzer` |

67| Swift | `swift-lsp` | `sourcekit-lsp` |

68| TypeScript | `typescript-lsp` | `typescript-language-server` |

69 

70También puede [crear su propio plugin LSP](/es/plugins-reference#lsp-servers) para otros lenguajes.

71 

72<Note>

73 Si ve `Executable not found in $PATH` en la pestaña Errors de `/plugin` después de instalar un plugin, instale el binario requerido de la tabla anterior.

74</Note>

75 

76#### Lo que Claude gana con los plugins de inteligencia de código

77 

78Una vez que se instala un plugin de inteligencia de código y su binario de servidor de lenguaje está disponible, Claude gana dos capacidades:

79 

80* **Diagnósticos automáticos**: después de cada edición de archivo que Claude realiza, el servidor de lenguaje analiza los cambios e informa errores y advertencias automáticamente. Claude ve errores de tipo, importaciones faltantes y problemas de sintaxis sin necesidad de ejecutar un compilador o linter. Si Claude introduce un error, lo nota y corrige el problema en el mismo turno. Esto no requiere configuración más allá de instalar el plugin. Puede ver diagnósticos en línea presionando **Ctrl+O** cuando aparece el indicador "diagnostics found".

81* **Navegación de código**: Claude puede usar el servidor de lenguaje para saltar a definiciones, encontrar referencias, obtener información de tipo al pasar el ratón, listar símbolos, encontrar implementaciones y rastrear jerarquías de llamadas. Estas operaciones dan a Claude una navegación más precisa que la búsqueda basada en grep, aunque la disponibilidad puede variar según el lenguaje y el entorno.

82 

83Si encuentra problemas, consulte [Solución de problemas de inteligencia de código](#code-intelligence-issues).

84 

85### Integraciones externas

86 

87Estos plugins incluyen [servidores MCP](/es/mcp) preconfigurados para que pueda conectar Claude a servicios externos sin configuración manual:

88 

89* **Control de fuente**: `github`, `gitlab`

90* **Gestión de proyectos**: `atlassian` (Jira/Confluence), `asana`, `linear`, `notion`

91* **Diseño**: `figma`

92* **Infraestructura**: `vercel`, `firebase`, `supabase`

93* **Comunicación**: `slack`

94* **Monitoreo**: `sentry`

95 

96### Flujos de trabajo de desarrollo

97 

98Plugins que agregan comandos y agentes para tareas de desarrollo comunes:

99 

100* **commit-commands**: Flujos de trabajo de confirmación de Git incluyendo confirmación, push y creación de PR

101* **pr-review-toolkit**: Agentes especializados para revisar solicitudes de extracción

102* **agent-sdk-dev**: Herramientas para construir con el Claude Agent SDK

103* **plugin-dev**: Kit de herramientas para crear sus propios plugins

104 

105### Estilos de salida

106 

107Personalice cómo responde Claude:

108 

109* **explanatory-output-style**: Información educativa sobre opciones de implementación

110* **learning-output-style**: Modo de aprendizaje interactivo para construcción de habilidades

111 

112## Pruébelo: agregue el mercado de demostración

113 

114Anthropic también mantiene un [mercado de plugins de demostración](https://github.com/anthropics/claude-code/tree/main/plugins) (`claude-code-plugins`) con plugins de ejemplo que muestran lo que es posible con el sistema de plugins. A diferencia del mercado oficial, debe agregar este manualmente.

115 

116<Steps>

117 <Step title="Agregar el mercado">

118 Desde dentro de Claude Code, ejecute el comando `plugin marketplace add` para el mercado `anthropics/claude-code`:

119 

120 ```shell theme={null}

121 /plugin marketplace add anthropics/claude-code

122 ```

123 

124 Esto descarga el catálogo del mercado y pone sus plugins a su disposición.

125 </Step>

126 

127 <Step title="Explorar plugins disponibles">

128 Ejecute `/plugin` para abrir el administrador de plugins. Esto abre una interfaz con pestañas con cuatro pestañas por las que puede ciclar usando **Tab** (o **Shift+Tab** para ir hacia atrás):

129 

130 * **Discover**: explore plugins disponibles de todos sus mercados

131 * **Installed**: vea y administre sus plugins instalados

132 * **Marketplaces**: agregue, elimine o actualice sus mercados agregados

133 * **Errors**: vea cualquier error de carga de plugins

134 

135 Vaya a la pestaña **Discover** para ver plugins del mercado que acaba de agregar.

136 </Step>

137 

138 <Step title="Instalar un plugin">

139 Seleccione un plugin para ver sus detalles, luego elija un alcance de instalación:

140 

141 * **User scope**: instale para usted en todos los proyectos

142 * **Project scope**: instale para todos los colaboradores en este repositorio

143 * **Local scope**: instale para usted en este repositorio solamente

144 

145 Por ejemplo, seleccione **commit-commands** (un plugin que agrega comandos de flujo de trabajo de git) e instálelo en su alcance de usuario.

146 

147 También puede instalar directamente desde la línea de comandos:

148 

149 ```shell theme={null}

150 /plugin install commit-commands@anthropics-claude-code

151 ```

152 

153 Consulte [Alcances de configuración](/es/settings#configuration-scopes) para obtener más información sobre alcances.

154 </Step>

155 

156 <Step title="Usar su nuevo plugin">

157 Después de instalar, ejecute `/reload-plugins` para activar el plugin. Los comandos de plugin tienen espacios de nombres por el nombre del plugin, por lo que **commit-commands** proporciona comandos como `/commit-commands:commit`.

158 

159 Pruébelo haciendo un cambio en un archivo y ejecutando:

160 

161 ```shell theme={null}

162 /commit-commands:commit

163 ```

164 

165 Esto prepara sus cambios, genera un mensaje de confirmación y crea la confirmación.

166 

167 Cada plugin funciona de manera diferente. Consulte la descripción del plugin en la pestaña **Discover** o su página de inicio para aprender qué comandos y capacidades proporciona.

168 </Step>

169</Steps>

170 

171El resto de esta guía cubre todas las formas en que puede agregar mercados, instalar plugins y administrar su configuración.

172 

173## Agregar mercados

174 

175Use el comando `/plugin marketplace add` para agregar mercados de diferentes fuentes.

176 

177<Tip>

178 **Atajos**: Puede usar `/plugin market` en lugar de `/plugin marketplace`, y `rm` en lugar de `remove`.

179</Tip>

180 

181* **Repositorios de GitHub**: formato `owner/repo` (por ejemplo, `anthropics/claude-code`)

182* **URLs de Git**: cualquier URL de repositorio de git (GitLab, Bitbucket, auto-hospedado)

183* **Rutas locales**: directorios o rutas directas a archivos `marketplace.json`

184* **URLs remotas**: URLs directas a archivos `marketplace.json` hospedados

185 

186### Agregar desde GitHub

187 

188Agregue un repositorio de GitHub que contenga un archivo `.claude-plugin/marketplace.json` usando el formato `owner/repo`—donde `owner` es el nombre de usuario o la organización de GitHub y `repo` es el nombre del repositorio.

189 

190Por ejemplo, `anthropics/claude-code` se refiere al repositorio `claude-code` propiedad de `anthropics`:

191 

192```shell theme={null}

193/plugin marketplace add anthropics/claude-code

194```

195 

196### Agregar desde otros hosts de Git

197 

198Agregue cualquier repositorio de git proporcionando la URL completa. Esto funciona con cualquier host de Git, incluyendo GitLab, Bitbucket y servidores auto-hospedados:

199 

200Usando HTTPS:

201 

202```shell theme={null}

203/plugin marketplace add https://gitlab.com/company/plugins.git

204```

205 

206Usando SSH:

207 

208```shell theme={null}

209/plugin marketplace add git@gitlab.com:company/plugins.git

210```

211 

212Para agregar una rama o etiqueta específica, agregue `#` seguido de la ref:

213 

214```shell theme={null}

215/plugin marketplace add https://gitlab.com/company/plugins.git#v1.0.0

216```

217 

218### Agregar desde rutas locales

219 

220Agregue un directorio local que contenga un archivo `.claude-plugin/marketplace.json`:

221 

222```shell theme={null}

223/plugin marketplace add ./my-marketplace

224```

225 

226También puede agregar una ruta directa a un archivo `marketplace.json`:

227 

228```shell theme={null}

229/plugin marketplace add ./path/to/marketplace.json

230```

231 

232### Agregar desde URLs remotas

233 

234Agregue un archivo `marketplace.json` remoto a través de URL:

235 

236```shell theme={null}

237/plugin marketplace add https://example.com/marketplace.json

238```

239 

240<Note>

241 Los mercados basados en URL tienen algunas limitaciones en comparación con los mercados basados en Git. Si encuentra errores "path not found" al instalar plugins, consulte [Solución de problemas](/es/plugin-marketplaces#plugins-with-relative-paths-fail-in-url-based-marketplaces).

242</Note>

243 

244## Instalar plugins

245 

246Una vez que haya agregado mercados, puede instalar plugins directamente (se instala en alcance de usuario por defecto):

247 

248```shell theme={null}

249/plugin install plugin-name@marketplace-name

250```

251 

252Para elegir un [alcance de instalación](/es/settings#configuration-scopes) diferente, use la interfaz interactiva: ejecute `/plugin`, vaya a la pestaña **Discover** y presione **Enter** en un plugin. Verá opciones para:

253 

254* **User scope** (predeterminado): instale para usted en todos los proyectos

255* **Project scope**: instale para todos los colaboradores en este repositorio (agrega a `.claude/settings.json`)

256* **Local scope**: instale para usted en este repositorio solamente (no compartido con colaboradores)

257 

258También puede ver plugins con alcance **managed**—estos son instalados por administradores a través de [configuración administrada](/es/settings#settings-files) y no pueden ser modificados.

259 

260Ejecute `/plugin` y vaya a la pestaña **Installed** para ver sus plugins agrupados por alcance.

261 

262<Warning>

263 Asegúrese de confiar en un plugin antes de instalarlo. Anthropic no controla qué servidores MCP, archivos u otro software se incluyen en los plugins y no puede verificar que funcionen como se pretende. Consulte la página de inicio de cada plugin para obtener más información.

264</Warning>

265 

266## Administrar plugins instalados

267 

268Ejecute `/plugin` y vaya a la pestaña **Installed** para ver, habilitar, deshabilitar o desinstalar sus plugins. Escriba para filtrar la lista por nombre o descripción del plugin.

269 

270También puede administrar plugins con comandos directos.

271 

272Deshabilite un plugin sin desinstalarlo:

273 

274```shell theme={null}

275/plugin disable plugin-name@marketplace-name

276```

277 

278Vuelva a habilitar un plugin deshabilitado:

279 

280```shell theme={null}

281/plugin enable plugin-name@marketplace-name

282```

283 

284Elimine completamente un plugin:

285 

286```shell theme={null}

287/plugin uninstall plugin-name@marketplace-name

288```

289 

290La opción `--scope` le permite dirigirse a un alcance específico con comandos CLI:

291 

292```shell theme={null}

293claude plugin install formatter@your-org --scope project

294claude plugin uninstall formatter@your-org --scope project

295```

296 

297### Aplicar cambios de plugins sin reiniciar

298 

299Cuando instala, habilita o deshabilita plugins durante una sesión, ejecute `/reload-plugins` para recopilar todos los cambios sin reiniciar:

300 

301```shell theme={null}

302/reload-plugins

303```

304 

305Claude Code recarga todos los plugins activos y muestra conteos para plugins, skills, agentes, hooks, servidores MCP de plugins y servidores LSP de plugins.

306 

307## Administrar mercados

308 

309Puede administrar mercados a través de la interfaz interactiva `/plugin` o con comandos CLI.

310 

311### Usar la interfaz interactiva

312 

313Ejecute `/plugin` y vaya a la pestaña **Marketplaces** para:

314 

315* Ver todos sus mercados agregados con sus fuentes y estado

316* Agregar nuevos mercados

317* Actualizar listados de mercados para obtener los últimos plugins

318* Eliminar mercados que ya no necesita

319 

320### Usar comandos CLI

321 

322También puede administrar mercados con comandos directos.

323 

324Enumere todos los mercados configurados:

325 

326```shell theme={null}

327/plugin marketplace list

328```

329 

330Actualice listados de plugins de un mercado:

331 

332```shell theme={null}

333/plugin marketplace update marketplace-name

334```

335 

336Elimine un mercado:

337 

338```shell theme={null}

339/plugin marketplace remove marketplace-name

340```

341 

342<Warning>

343 Eliminar un mercado desinstalará cualquier plugin que haya instalado desde él.

344</Warning>

345 

346### Configurar actualizaciones automáticas

347 

348Claude Code puede actualizar automáticamente mercados y sus plugins instalados al inicio. Cuando la actualización automática está habilitada para un mercado, Claude Code actualiza los datos del mercado e actualiza los plugins instalados a sus versiones más recientes. Si se actualizaron plugins, verá una notificación pidiéndole que ejecute `/reload-plugins`.

349 

350Alterne la actualización automática para mercados individuales a través de la interfaz:

351 

3521. Ejecute `/plugin` para abrir el administrador de plugins

3532. Seleccione **Marketplaces**

3543. Elija un mercado de la lista

3554. Seleccione **Enable auto-update** o **Disable auto-update**

356 

357Los mercados oficiales de Anthropic tienen la actualización automática habilitada por defecto. Los mercados de terceros y de desarrollo local tienen la actualización automática deshabilitada por defecto.

358 

359Para deshabilitar todas las actualizaciones automáticas completamente tanto para Claude Code como para todos los plugins, establezca la variable de entorno `DISABLE_AUTOUPDATER`. Consulte [Actualizaciones automáticas](/es/setup#auto-updates) para obtener detalles.

360 

361Para mantener las actualizaciones automáticas de plugins habilitadas mientras se deshabilitan las actualizaciones automáticas de Claude Code, establezca `FORCE_AUTOUPDATE_PLUGINS=1` junto con `DISABLE_AUTOUPDATER`:

362 

363```bash theme={null}

364export DISABLE_AUTOUPDATER=1

365export FORCE_AUTOUPDATE_PLUGINS=1

366```

367 

368Esto es útil cuando desea administrar las actualizaciones de Claude Code manualmente pero aún recibir actualizaciones automáticas de plugins.

369 

370## Configurar mercados de equipo

371 

372Los administradores de equipo pueden configurar la instalación automática de mercados para proyectos agregando configuración de mercado a `.claude/settings.json`. Cuando los miembros del equipo confían en la carpeta del repositorio, Claude Code les solicita que instalen estos mercados y plugins.

373 

374Agregue `extraKnownMarketplaces` a su `.claude/settings.json` del proyecto:

375 

376```json theme={null}

377{

378 "extraKnownMarketplaces": {

379 "my-team-tools": {

380 "source": {

381 "source": "github",

382 "repo": "your-org/claude-plugins"

383 }

384 }

385 }

386}

387```

388 

389Para opciones de configuración completas incluyendo `extraKnownMarketplaces` y `enabledPlugins`, consulte [Configuración de plugins](/es/settings#plugin-settings).

390 

391## Seguridad

392 

393Los plugins y mercados son componentes altamente confiables que pueden ejecutar código arbitrario en su máquina con sus privilegios de usuario. Solo instale plugins y agregue mercados de fuentes en las que confíe. Las organizaciones pueden restringir qué mercados se permite a los usuarios agregar usando [restricciones de mercado administradas](/es/plugin-marketplaces#managed-marketplace-restrictions).

394 

395## Solución de problemas

396 

397### Comando /plugin no reconocido

398 

399Si ve "unknown command" o el comando `/plugin` no aparece:

400 

4011. **Verifique su versión**: Ejecute `claude --version` para ver qué está instalado.

4022. **Actualice Claude Code**:

403 * **Homebrew**: `brew upgrade claude-code`

404 * **npm**: `npm update -g @anthropic-ai/claude-code`

405 * **Instalador nativo**: Vuelva a ejecutar el comando de instalación desde [Setup](/es/setup)

4063. **Reinicie Claude Code**: Después de actualizar, reinicie su terminal y ejecute `claude` nuevamente.

407 

408### Problemas comunes

409 

410* **Mercado no cargando**: Verifique que la URL sea accesible y que `.claude-plugin/marketplace.json` exista en la ruta

411* **Fallos de instalación de plugins**: Verifique que las URLs de fuente de plugins sean accesibles y que los repositorios sean públicos (o tenga acceso)

412* **Archivos no encontrados después de la instalación**: Los plugins se copian a un caché, por lo que las rutas que hacen referencia a archivos fuera del directorio del plugin no funcionarán

413* **Habilidades de plugins no apareciendo**: Limpie el caché con `rm -rf ~/.claude/plugins/cache`, reinicie Claude Code y reinstale el plugin.

414 

415Para solución de problemas detallada con soluciones, consulte [Solución de problemas](/es/plugin-marketplaces#troubleshooting) en la guía de mercados. Para herramientas de depuración, consulte [Herramientas de depuración y desarrollo](/es/plugins-reference#debugging-and-development-tools).

416 

417### Problemas de inteligencia de código

418 

419* **Servidor de lenguaje no iniciando**: verifique que el binario esté instalado y disponible en su `$PATH`. Consulte la pestaña Errors de `/plugin` para obtener detalles.

420* **Alto uso de memoria**: los servidores de lenguaje como `rust-analyzer` y `pyright` pueden consumir memoria significativa en proyectos grandes. Si experimenta problemas de memoria, deshabilite el plugin con `/plugin disable <plugin-name>` y confíe en las herramientas de búsqueda integradas de Claude en su lugar.

421* **Diagnósticos falsos positivos en monorepos**: los servidores de lenguaje pueden reportar errores de importación no resuelta para paquetes internos si el espacio de trabajo no está configurado correctamente. Estos no afectan la capacidad de Claude para editar código.

422 

423## Próximos pasos

424 

425* **Construya sus propios plugins**: Consulte [Plugins](/es/plugins) para crear skills, agentes y hooks

426* **Cree un mercado**: Consulte [Crear un mercado de plugins](/es/plugin-marketplaces) para distribuir plugins a su equipo o comunidad

427* **Referencia técnica**: Consulte [Referencia de plugins](/es/plugins-reference) para especificaciones completas

env-vars.md +238 −0 created

Details

1> ## Documentation Index

2> Fetch the complete documentation index at: https://code.claude.com/docs/llms.txt

3> Use this file to discover all available pages before exploring further.

4 

5# Variables de entorno

6 

7> Referencia completa de variables de entorno que controlan el comportamiento de Claude Code.

8 

9Claude Code admite las siguientes variables de entorno para controlar su comportamiento. Establézcalas en su shell antes de lanzar `claude`, o configúrelas en [`settings.json`](/es/settings#available-settings) bajo la clave `env` para aplicarlas a cada sesión o implementarlas en su equipo.

10 

11| Variable | Propósito |

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

13| `ANTHROPIC_API_KEY` | Clave de API enviada como encabezado `X-Api-Key`. Cuando se establece, esta clave se utiliza en lugar de su suscripción de Claude Pro, Max, Team o Enterprise incluso si ha iniciado sesión. En modo no interactivo (`-p`), la clave siempre se utiliza cuando está presente. En modo interactivo, se le solicita que apruebe la clave una vez antes de que anule su suscripción. Para utilizar su suscripción en su lugar, ejecute `unset ANTHROPIC_API_KEY` |

14| `ANTHROPIC_AUTH_TOKEN` | Valor personalizado para el encabezado `Authorization` (el valor que establezca aquí tendrá el prefijo `Bearer `) |

15| `ANTHROPIC_BASE_URL` | Anule el endpoint de API para enrutar solicitudes a través de un proxy o puerta de enlace. Cuando se establece en un host que no es de primera parte, [búsqueda de herramientas MCP](/es/mcp#scale-with-mcp-tool-search) está deshabilitada de forma predeterminada. Establezca `ENABLE_TOOL_SEARCH=true` si su proxy reenvía bloques `tool_reference` |

16| `ANTHROPIC_BEDROCK_BASE_URL` | Anule la URL del endpoint de Bedrock. Utilice para endpoints de Bedrock personalizados o cuando enrute a través de una [puerta de enlace LLM](/es/llm-gateway). Consulte [Amazon Bedrock](/es/amazon-bedrock) |

17| `ANTHROPIC_BEDROCK_MANTLE_BASE_URL` | Anule la URL del endpoint de Bedrock Mantle. Consulte [Endpoint Mantle](/es/amazon-bedrock#use-the-mantle-endpoint) |

18| `ANTHROPIC_BEDROCK_SERVICE_TIER` | [Nivel de servicio](https://docs.aws.amazon.com/bedrock/latest/userguide/service-tiers-inference.html) de Bedrock (`default`, `flex` o `priority`). Se envía como encabezado `X-Amzn-Bedrock-Service-Tier`. Consulte [Amazon Bedrock](/es/amazon-bedrock#service-tiers) |

19| `ANTHROPIC_BETAS` | Lista separada por comas de valores de encabezado `anthropic-beta` adicionales para incluir en solicitudes de API. Claude Code ya envía los encabezados beta que necesita; utilice esto para optar por un [beta de API de Anthropic](https://platform.claude.com/docs/en/api/beta-headers) antes de que Claude Code agregue soporte nativo. A diferencia de la [bandera `--betas`](/es/cli-reference#cli-flags), que requiere autenticación de clave de API, esta variable funciona con todos los métodos de autenticación, incluida la suscripción de Claude.ai |

20| `ANTHROPIC_CUSTOM_HEADERS` | Encabezados personalizados para agregar a las solicitudes (formato `Name: Value`, separados por saltos de línea para múltiples encabezados) |

21| `ANTHROPIC_CUSTOM_MODEL_OPTION` | ID de modelo para agregar como entrada personalizada en el selector `/model`. Utilice esto para hacer que un modelo no estándar o específico de puerta de enlace sea seleccionable sin reemplazar alias integrados. Consulte [Configuración de modelo](/es/model-config#add-a-custom-model-option) |

22| `ANTHROPIC_CUSTOM_MODEL_OPTION_DESCRIPTION` | Descripción de visualización para la entrada de modelo personalizado en el selector `/model`. El valor predeterminado es `Custom model (<model-id>)` cuando no se establece |

23| `ANTHROPIC_CUSTOM_MODEL_OPTION_NAME` | Nombre de visualización para la entrada de modelo personalizado en el selector `/model`. El valor predeterminado es el ID de modelo cuando no se establece |

24| `ANTHROPIC_CUSTOM_MODEL_OPTION_SUPPORTED_CAPABILITIES` | Consulte [Configuración de modelo](/es/model-config#customize-pinned-model-display-and-capabilities) |

25| `ANTHROPIC_DEFAULT_HAIKU_MODEL` | Consulte [Configuración de modelo](/es/model-config#environment-variables) |

26| `ANTHROPIC_DEFAULT_HAIKU_MODEL_DESCRIPTION` | Consulte [Configuración de modelo](/es/model-config#customize-pinned-model-display-and-capabilities) |

27| `ANTHROPIC_DEFAULT_HAIKU_MODEL_NAME` | Consulte [Configuración de modelo](/es/model-config#customize-pinned-model-display-and-capabilities) |

28| `ANTHROPIC_DEFAULT_HAIKU_MODEL_SUPPORTED_CAPABILITIES` | Consulte [Configuración de modelo](/es/model-config#customize-pinned-model-display-and-capabilities) |

29| `ANTHROPIC_DEFAULT_OPUS_MODEL` | Consulte [Configuración de modelo](/es/model-config#environment-variables) |

30| `ANTHROPIC_DEFAULT_OPUS_MODEL_DESCRIPTION` | Consulte [Configuración de modelo](/es/model-config#customize-pinned-model-display-and-capabilities) |

31| `ANTHROPIC_DEFAULT_OPUS_MODEL_NAME` | Consulte [Configuración de modelo](/es/model-config#customize-pinned-model-display-and-capabilities) |

32| `ANTHROPIC_DEFAULT_OPUS_MODEL_SUPPORTED_CAPABILITIES` | Consulte [Configuración de modelo](/es/model-config#customize-pinned-model-display-and-capabilities) |

33| `ANTHROPIC_DEFAULT_SONNET_MODEL` | Consulte [Configuración de modelo](/es/model-config#environment-variables) |

34| `ANTHROPIC_DEFAULT_SONNET_MODEL_DESCRIPTION` | Consulte [Configuración de modelo](/es/model-config#customize-pinned-model-display-and-capabilities) |

35| `ANTHROPIC_DEFAULT_SONNET_MODEL_NAME` | Consulte [Configuración de modelo](/es/model-config#customize-pinned-model-display-and-capabilities) |

36| `ANTHROPIC_DEFAULT_SONNET_MODEL_SUPPORTED_CAPABILITIES` | Consulte [Configuración de modelo](/es/model-config#customize-pinned-model-display-and-capabilities) |

37| `ANTHROPIC_FOUNDRY_API_KEY` | Clave de API para autenticación de Microsoft Foundry (consulte [Microsoft Foundry](/es/microsoft-foundry)) |

38| `ANTHROPIC_FOUNDRY_BASE_URL` | URL base completa para el recurso Foundry (por ejemplo, `https://my-resource.services.ai.azure.com/anthropic`). Alternativa a `ANTHROPIC_FOUNDRY_RESOURCE` (consulte [Microsoft Foundry](/es/microsoft-foundry)) |

39| `ANTHROPIC_FOUNDRY_RESOURCE` | Nombre del recurso Foundry (por ejemplo, `my-resource`). Requerido si `ANTHROPIC_FOUNDRY_BASE_URL` no está establecido (consulte [Microsoft Foundry](/es/microsoft-foundry)) |

40| `ANTHROPIC_MODEL` | Nombre de la configuración de modelo a utilizar (consulte [Configuración de modelo](/es/model-config#environment-variables)) |

41| `ANTHROPIC_SMALL_FAST_MODEL` | \[DEPRECATED] Nombre de [modelo de clase Haiku para tareas en segundo plano](/es/costs) |

42| `ANTHROPIC_SMALL_FAST_MODEL_AWS_REGION` | Anule la región de AWS para el modelo de clase Haiku al usar Bedrock o Bedrock Mantle |

43| `ANTHROPIC_VERTEX_BASE_URL` | Anule la URL del endpoint de Vertex AI. Utilice para endpoints de Vertex personalizados o cuando enrute a través de una [puerta de enlace LLM](/es/llm-gateway). Consulte [Google Vertex AI](/es/google-vertex-ai) |

44| `ANTHROPIC_VERTEX_PROJECT_ID` | ID de proyecto de GCP para Vertex AI. Requerido cuando se utiliza [Google Vertex AI](/es/google-vertex-ai) |

45| `API_TIMEOUT_MS` | Tiempo de espera para solicitudes de API en milisegundos (predeterminado: 600000, o 10 minutos; máximo: 2147483647). Aumente esto cuando las solicitudes agoten el tiempo de espera en redes lentas o cuando enrute a través de un proxy. Los valores por encima del máximo desbordan el temporizador subyacente y causan que las solicitudes fallen inmediatamente |

46| `AWS_BEARER_TOKEN_BEDROCK` | Clave de API de Bedrock para autenticación (consulte [Claves de API de Bedrock](https://aws.amazon.com/blogs/machine-learning/accelerate-ai-development-with-amazon-bedrock-api-keys/)) |

47| `BASH_DEFAULT_TIMEOUT_MS` | Tiempo de espera predeterminado para comandos bash de larga duración (predeterminado: 120000, o 2 minutos) |

48| `BASH_MAX_OUTPUT_LENGTH` | Número máximo de caracteres en salidas bash antes de que se truncen en el medio |

49| `BASH_MAX_TIMEOUT_MS` | Tiempo de espera máximo que el modelo puede establecer para comandos bash de larga duración (predeterminado: 600000, o 10 minutos) |

50| `CCR_FORCE_BUNDLE` | Establezca en `1` para forzar [`claude --remote`](/es/claude-code-on-the-web#send-local-repositories-without-github) a agrupar y cargar su repositorio local incluso cuando el acceso a GitHub está disponible |

51| `CLAUDECODE` | Establezca en `1` en entornos de shell que Claude Code genera (herramienta Bash, sesiones tmux). No se establece en comandos [hooks](/es/hooks) o [línea de estado](/es/statusline). Utilice para detectar cuándo un script se está ejecutando dentro de un shell generado por Claude Code |

52| `CLAUDE_AGENT_SDK_DISABLE_BUILTIN_AGENTS` | Establezca en `1` para deshabilitar todos los tipos de [subagentes](/es/sub-agents) integrados, como Explore y Plan. Solo se aplica en modo no interactivo (la bandera `-p`). Útil para usuarios de SDK que desean una pizarra en blanco |

53| `CLAUDE_AGENT_SDK_MCP_NO_PREFIX` | Establezca en `1` para omitir el prefijo `mcp__<server>__` en nombres de herramientas de servidores MCP creados por SDK. Las herramientas utilizan sus nombres originales. Solo uso de SDK |

54| `CLAUDE_AUTOCOMPACT_PCT_OVERRIDE` | Establezca el porcentaje de capacidad de contexto (1-100) en el que se activa la compactación automática. De forma predeterminada, la compactación automática se activa aproximadamente al 95% de capacidad. Utilice valores más bajos como `50` para compactar antes. Los valores por encima del umbral predeterminado no tienen efecto. Se aplica tanto a conversaciones principales como a subagentes. Este porcentaje se alinea con el campo `context_window.used_percentage` disponible en [línea de estado](/es/statusline) |

55| `CLAUDE_AUTO_BACKGROUND_TASKS` | Establezca en `1` para forzar la habilitación del envío automático a segundo plano de tareas de agentes de larga duración. Cuando se habilita, los subagentes se mueven al segundo plano después de ejecutarse durante aproximadamente dos minutos |

56| `CLAUDE_BASH_MAINTAIN_PROJECT_WORKING_DIR` | Vuelva al directorio de trabajo original después de cada comando Bash o PowerShell en la sesión principal |

57| `CLAUDE_CODE_ACCESSIBILITY` | Establezca en `1` para mantener visible el cursor del terminal nativo y deshabilitar el indicador de cursor de texto invertido. Permite que ampliadores de pantalla como macOS Zoom rastreen la posición del cursor |

58| `CLAUDE_CODE_ADDITIONAL_DIRECTORIES_CLAUDE_MD` | Establezca en `1` para cargar archivos de memoria desde directorios especificados con `--add-dir`. Carga `CLAUDE.md`, `.claude/CLAUDE.md`, `.claude/rules/*.md` y `CLAUDE.local.md`. De forma predeterminada, los directorios adicionales no cargan archivos de memoria |

59| `CLAUDE_CODE_API_KEY_HELPER_TTL_MS` | Intervalo en milisegundos en el que se deben actualizar las credenciales (al usar [`apiKeyHelper`](/es/settings#available-settings)) |

60| `CLAUDE_CODE_ATTRIBUTION_HEADER` | Establezca en `0` para omitir el bloque de atribución (versión del cliente e huella digital del indicador) desde el inicio del indicador del sistema. Deshabilitarlo mejora las tasas de acierto de caché de indicadores cuando se enruta a través de una [puerta de enlace LLM](/es/llm-gateway). El almacenamiento en caché de API de Anthropic no se ve afectado |

61| `CLAUDE_CODE_AUTO_COMPACT_WINDOW` | Establezca la capacidad de contexto en tokens utilizada para cálculos de compactación automática. El valor predeterminado es la ventana de contexto del modelo: 200K para modelos estándar o 1M para modelos de [contexto extendido](/es/model-config#extended-context). Utilice un valor más bajo como `500000` en un modelo de 1M para tratar la ventana como 500K para propósitos de compactación. El valor se limita a la ventana de contexto real del modelo. `CLAUDE_AUTOCOMPACT_PCT_OVERRIDE` se aplica como porcentaje de este valor. Establecer esta variable desvincula el umbral de compactación del `used_percentage` de la línea de estado, que siempre utiliza la ventana de contexto completa del modelo |

62| `CLAUDE_CODE_AUTO_CONNECT_IDE` | Anule la [conexión automática de IDE](/es/vs-code). De forma predeterminada, Claude Code se conecta automáticamente cuando se lanza dentro del terminal integrado de un IDE compatible. Establezca en `false` para evitar esto. Establezca en `true` para forzar un intento de conexión cuando la detección automática falla, como cuando tmux oculta el terminal principal |

63| `CLAUDE_CODE_CERT_STORE` | Lista separada por comas de fuentes de certificados CA para conexiones TLS. `bundled` es el conjunto de CA de Mozilla incluido con Claude Code. `system` es el almacén de confianza del sistema operativo. El valor predeterminado es `bundled,system`. La distribución binaria nativa es necesaria para la integración del almacén del sistema. En el tiempo de ejecución de Node.js, solo se utiliza el conjunto incluido independientemente de este valor |

64| `CLAUDE_CODE_CLIENT_CERT` | Ruta al archivo de certificado de cliente para autenticación mTLS |

65| `CLAUDE_CODE_CLIENT_KEY` | Ruta al archivo de clave privada de cliente para autenticación mTLS |

66| `CLAUDE_CODE_CLIENT_KEY_PASSPHRASE` | Frase de contraseña para CLAUDE\_CODE\_CLIENT\_KEY cifrada (opcional) |

67| `CLAUDE_CODE_DEBUG_LOGS_DIR` | Anule la ruta del archivo de registro de depuración. A pesar del nombre, esta es una ruta de archivo, no un directorio. Requiere que el modo de depuración se habilite por separado a través de `--debug` o `/debug`: establecer esta variable sola no habilita el registro. La bandera [`--debug-file`](/es/cli-reference#cli-flags) hace ambas cosas a la vez. El valor predeterminado es `~/.claude/debug/<session-id>.txt` |

68| `CLAUDE_CODE_DEBUG_LOG_LEVEL` | Nivel de registro mínimo escrito en el archivo de registro de depuración. Valores: `verbose`, `debug` (predeterminado), `info`, `warn`, `error`. Establezca en `verbose` para incluir diagnósticos de alto volumen como salida completa de comandos de línea de estado, o aumente a `error` para reducir ruido |

69| `CLAUDE_CODE_DISABLE_1M_CONTEXT` | Establezca en `1` para deshabilitar el soporte de [ventana de contexto de 1M](/es/model-config#extended-context). Cuando se establece, las variantes de modelo de 1M no están disponibles en el selector de modelo. Útil para entornos empresariales con requisitos de cumplimiento |

70| `CLAUDE_CODE_DISABLE_ADAPTIVE_THINKING` | Establezca en `1` para deshabilitar [razonamiento adaptativo](/es/model-config#adjust-effort-level) en Opus 4.6 y Sonnet 4.6 y volver al presupuesto de pensamiento fijo controlado por `MAX_THINKING_TOKENS`. {/* min-version: 2.1.111 */}No tiene efecto en Opus 4.7, que siempre utiliza razonamiento adaptativo |

71| `CLAUDE_CODE_DISABLE_ATTACHMENTS` | Establezca en `1` para deshabilitar el procesamiento de archivos adjuntos. Las menciones de archivos con sintaxis `@` se envían como texto sin formato en lugar de expandirse en contenido de archivo |

72| `CLAUDE_CODE_DISABLE_AUTO_MEMORY` | Establezca en `1` para deshabilitar [memoria automática](/es/memory#auto-memory). Establezca en `0` para forzar la memoria automática durante el despliegue gradual. Cuando se deshabilita, Claude no crea ni carga archivos de memoria automática |

73| `CLAUDE_CODE_DISABLE_BACKGROUND_TASKS` | Establezca en `1` para deshabilitar toda la funcionalidad de tareas en segundo plano, incluido el parámetro `run_in_background` en herramientas Bash y subagentes, auto-backgrounding y el atajo Ctrl+B |

74| `CLAUDE_CODE_DISABLE_CLAUDE_MDS` | Establezca en `1` para evitar cargar cualquier archivo de memoria CLAUDE.md en contexto, incluidos archivos de usuario, proyecto y memoria automática |

75| `CLAUDE_CODE_DISABLE_CRON` | Establezca en `1` para deshabilitar [tareas programadas](/es/scheduled-tasks). La skill `/loop` y las herramientas cron no estarán disponibles y cualquier tarea ya programada dejará de ejecutarse, incluidas las tareas que ya se están ejecutando en mitad de sesión |

76| `CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS` | Establezca en `1` para eliminar encabezados de solicitud `anthropic-beta` específicos de Anthropic y campos de esquema de herramienta beta (como `defer_loading` y `eager_input_streaming`) de solicitudes de API. Utilice esto cuando una puerta de enlace proxy rechace solicitudes con errores como "Unexpected value(s) for the `anthropic-beta` header" o "Extra inputs are not permitted". Los campos estándar (`name`, `description`, `input_schema`, `cache_control`) se conservan. |

77| `CLAUDE_CODE_DISABLE_FAST_MODE` | Establezca en `1` para deshabilitar [modo rápido](/es/fast-mode) |

78| `CLAUDE_CODE_DISABLE_FEEDBACK_SURVEY` | Establezca en `1` para deshabilitar las encuestas de calidad de sesión "¿Cómo está funcionando Claude?". Las encuestas también se deshabilitan cuando se establece `DISABLE_TELEMETRY` o `CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC`. Consulte [Encuestas de calidad de sesión](/es/data-usage#session-quality-surveys) |

79| `CLAUDE_CODE_DISABLE_FILE_CHECKPOINTING` | Establezca en `1` para deshabilitar el [checkpointing](/es/checkpointing) de archivos. El comando `/rewind` no podrá restaurar cambios de código |

80| `CLAUDE_CODE_DISABLE_GIT_INSTRUCTIONS` | Establezca en `1` para eliminar las instrucciones de flujo de trabajo de confirmación y PR integradas y la instantánea de estado de git del indicador del sistema de Claude. Útil cuando se utilizan sus propias skills de flujo de trabajo de git. Tiene precedencia sobre la configuración [`includeGitInstructions`](/es/settings#available-settings) cuando se establece |

81| `CLAUDE_CODE_DISABLE_LEGACY_MODEL_REMAP` | Establezca en `1` para evitar el remapeo automático de Opus 4.0 y 4.1 a la versión actual de Opus en la API de Anthropic. Utilice cuando desee fijar intencionalmente un modelo anterior. El remapeo no se ejecuta en Bedrock, Vertex o Foundry |

82| `CLAUDE_CODE_DISABLE_MOUSE` | Establezca en `1` para deshabilitar el seguimiento del ratón en [renderizado a pantalla completa](/es/fullscreen). El desplazamiento por teclado con `PgUp` y `PgDn` sigue funcionando. Utilice esto para mantener el comportamiento nativo de copiar al seleccionar de su terminal |

83| `CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC` | Equivalente a establecer `DISABLE_AUTOUPDATER`, `DISABLE_FEEDBACK_COMMAND`, `DISABLE_ERROR_REPORTING` y `DISABLE_TELEMETRY` |

84| `CLAUDE_CODE_DISABLE_NONSTREAMING_FALLBACK` | Establezca en `1` para deshabilitar el respaldo no transmitido cuando una solicitud transmitida falla a mitad de transmisión. Los errores de transmisión se propagan a la capa de reintento en su lugar. Útil cuando un proxy o puerta de enlace causa que el respaldo produzca ejecución de herramientas duplicadas |

85| `CLAUDE_CODE_DISABLE_OFFICIAL_MARKETPLACE_AUTOINSTALL` | Establezca en `1` para omitir la adición automática del marketplace oficial de plugins en la primera ejecución |

86| `CLAUDE_CODE_DISABLE_POLICY_SKILLS` | Establezca en `1` para omitir la carga de skills desde el directorio de skills administradas en todo el sistema. Útil para sesiones de contenedor o CI que no deben cargar skills aprovisionadas por operadores |

87| `CLAUDE_CODE_DISABLE_TERMINAL_TITLE` | Establezca en `1` para deshabilitar las actualizaciones automáticas del título del terminal basadas en el contexto de la conversación |

88| `CLAUDE_CODE_DISABLE_THINKING` | Establezca en `1` para forzar la deshabilitación de [pensamiento extendido](https://platform.claude.com/docs/en/build-with-claude/extended-thinking) independientemente del soporte del modelo u otras configuraciones. Más directo que `MAX_THINKING_TOKENS=0` |

89| `CLAUDE_CODE_DISABLE_VIRTUAL_SCROLL` | Establezca en `1` para deshabilitar el desplazamiento virtual en [renderizado a pantalla completa](/es/fullscreen) y renderizar cada mensaje en la transcripción. Utilice esto si el desplazamiento en modo pantalla completa muestra regiones en blanco donde deberían aparecer mensajes |

90| `CLAUDE_CODE_EFFORT_LEVEL` | Establezca el nivel de esfuerzo para modelos compatibles. Valores: `low`, `medium`, `high`, `xhigh`, `max` o `auto` para usar el valor predeterminado del modelo. Los niveles disponibles dependen del modelo. Tiene precedencia sobre `/effort` y la configuración `effortLevel`. Consulte [Ajustar nivel de esfuerzo](/es/model-config#adjust-effort-level) |

91| `CLAUDE_CODE_ENABLE_AWAY_SUMMARY` | Anule la disponibilidad de [resumen de sesión](/es/interactive-mode#session-recap). Establezca en `0` para forzar los resúmenes desactivados independientemente del toggle `/config`. Establezca en `1` para forzar los resúmenes activados cuando [`awaySummaryEnabled`](/es/settings#available-settings) es `false`. Tiene precedencia sobre la configuración y el toggle `/config` |

92| `CLAUDE_CODE_ENABLE_BACKGROUND_PLUGIN_REFRESH` | Establezca en `1` para actualizar el estado del plugin en los límites de turno en [modo no interactivo](/es/headless) después de que se complete una instalación en segundo plano. Desactivado de forma predeterminada porque la actualización cambia el indicador del sistema a mitad de sesión, lo que invalida el [almacenamiento en caché de indicadores](https://platform.claude.com/docs/en/build-with-claude/prompt-caching) para ese turno |

93| `CLAUDE_CODE_ENABLE_FINE_GRAINED_TOOL_STREAMING` | Establezca en `1` para forzar la habilitación del streaming de entrada de herramienta de grano fino. Sin esto, la API almacena en búfer los parámetros de entrada de herramienta completamente antes de enviar eventos delta, lo que puede retrasar la visualización en entradas de herramienta grandes. Solo API de Anthropic: no tiene efecto en Bedrock, Vertex o Foundry |

94| `CLAUDE_CODE_ENABLE_PROMPT_SUGGESTION` | Establezca en `false` para deshabilitar sugerencias de indicador (el toggle "Prompt suggestions" en `/config`). Estas son las predicciones atenuadas que aparecen en su entrada de indicador después de que Claude responda. Consulte [Sugerencias de indicador](/es/interactive-mode#prompt-suggestions) |

95| `CLAUDE_CODE_ENABLE_TASKS` | Establezca en `1` para habilitar el sistema de seguimiento de tareas en modo no interactivo (la bandera `-p`). Las tareas están activadas de forma predeterminada en modo interactivo. Consulte [Lista de tareas](/es/interactive-mode#task-list) |

96| `CLAUDE_CODE_ENABLE_TELEMETRY` | Establezca en `1` para habilitar la recopilación de datos de OpenTelemetry para métricas y registro. Requerido antes de configurar exportadores de OTel. Consulte [Monitoreo](/es/monitoring-usage) |

97| `CLAUDE_CODE_EXIT_AFTER_STOP_DELAY` | Tiempo en milisegundos a esperar después de que el bucle de consulta se vuelva inactivo antes de salir automáticamente. Útil para flujos de trabajo automatizados y scripts que utilizan modo SDK |

98| `CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS` | Establezca en `1` para habilitar [equipos de agentes](/es/agent-teams). Los equipos de agentes son experimentales y están deshabilitados de forma predeterminada |

99| `CLAUDE_CODE_EXTRA_BODY` | Objeto JSON para fusionar en el nivel superior de cada cuerpo de solicitud de API. Útil para pasar parámetros específicos del proveedor que Claude Code no expone directamente |

100| `CLAUDE_CODE_FILE_READ_MAX_OUTPUT_TOKENS` | Anule el límite de tokens predeterminado para lecturas de archivos. Útil cuando necesita leer archivos más grandes en su totalidad |

101| `CLAUDE_CODE_FORK_SUBAGENT` | Establezca en `1` para habilitar [subagentes bifurcados](/es/sub-agents#fork-the-current-conversation). Un subagente bifurcado hereda el contexto de conversación completo de la sesión principal en lugar de comenzar desde cero. Cuando se habilita, `/fork` genera un subagente bifurcado en lugar de actuar como un alias para [`/branch`](/es/commands), y todos los despliegues de subagentes se ejecutan en segundo plano. Funciona en modo interactivo y a través del SDK o `claude -p` |

102| `CLAUDE_CODE_GIT_BASH_PATH` | Solo Windows: ruta al ejecutable de Git Bash (`bash.exe`). Utilice cuando Git Bash está instalado pero no en su PATH. Consulte [Configuración de Windows](/es/setup#set-up-on-windows) |

103| `CLAUDE_CODE_GLOB_HIDDEN` | Establezca en `false` para excluir dotfiles de los resultados cuando Claude invoca la [herramienta Glob](/es/tools-reference). Se incluye de forma predeterminada. No afecta a la autocompletación de archivos `@`, `ls`, Grep o Read |

104| `CLAUDE_CODE_GLOB_NO_IGNORE` | Establezca en `false` para hacer que la [herramienta Glob](/es/tools-reference) respete patrones `.gitignore`. De forma predeterminada, Glob devuelve todos los archivos coincidentes, incluidos los ignorados por git. No afecta a la autocompletación de archivos `@`, que tiene su propia configuración [`respectGitignore`](/es/settings#available-settings) |

105| `CLAUDE_CODE_GLOB_TIMEOUT_SECONDS` | Tiempo de espera en segundos para el descubrimiento de archivos de la herramienta Glob. El valor predeterminado es 20 segundos en la mayoría de plataformas y 60 segundos en WSL |

106| `CLAUDE_CODE_HIDE_CWD` | Establezca en `1` para ocultar el directorio de trabajo en el logo de inicio. Útil para compartir pantalla o grabaciones donde la ruta expone su nombre de usuario del SO |

107| `CLAUDE_CODE_IDE_HOST_OVERRIDE` | Anule la dirección de host utilizada para conectarse a la extensión de IDE. De forma predeterminada, Claude Code detecta automáticamente la dirección correcta, incluido el enrutamiento de WSL a Windows |

108| `CLAUDE_CODE_IDE_SKIP_AUTO_INSTALL` | Omita la instalación automática de extensiones de IDE. Equivalente a establecer [`autoInstallIdeExtension`](/es/settings#global-config-settings) en `false` |

109| `CLAUDE_CODE_IDE_SKIP_VALID_CHECK` | Establezca en `1` para omitir la validación de entradas de archivo de bloqueo de IDE durante la conexión. Utilice cuando la conexión automática no encuentra su IDE a pesar de que se está ejecutando |

110| `CLAUDE_CODE_MAX_CONTEXT_TOKENS` | Anule el tamaño de la ventana de contexto que Claude Code asume para el modelo activo. Solo tiene efecto cuando `DISABLE_COMPACT` también está establecido. Utilice esto cuando enrute a un modelo a través de `ANTHROPIC_BASE_URL` cuya ventana de contexto no coincide con el tamaño integrado para su nombre |

111| `CLAUDE_CODE_MAX_OUTPUT_TOKENS` | Establezca el número máximo de tokens de salida para la mayoría de solicitudes. Los valores predeterminados y máximos varían según el modelo; consulte [tokens de salida máximos](https://platform.claude.com/docs/en/about-claude/models/overview#latest-models-comparison). Aumentar este valor reduce la ventana de contexto efectiva disponible antes de que se active la [compactación automática](/es/costs#reduce-token-usage). |

112| `CLAUDE_CODE_MAX_RETRIES` | Anule el número de veces para reintentar solicitudes de API fallidas (predeterminado: 10) |

113| `CLAUDE_CODE_MAX_TOOL_USE_CONCURRENCY` | Número máximo de herramientas de solo lectura y subagentes que pueden ejecutarse en paralelo (predeterminado: 10). Los valores más altos aumentan el paralelismo pero consumen más recursos |

114| `CLAUDE_CODE_MCP_ALLOWLIST_ENV` | Establezca en `1` para generar servidores MCP stdio con solo un entorno de línea base segura más el `env` configurado del servidor, en lugar de heredar su entorno de shell |

115| `CLAUDE_CODE_NEW_INIT` | Establezca en `1` para hacer que `/init` ejecute un flujo de configuración interactivo. El flujo pregunta qué archivos generar, incluidos CLAUDE.md, skills y hooks, antes de explorar la base de código y escribirlos. Sin esta variable, `/init` genera un CLAUDE.md automáticamente sin solicitar. |

116| `CLAUDE_CODE_NO_FLICKER` | Establezca en `1` para habilitar [renderizado a pantalla completa](/es/fullscreen), una vista previa de investigación que reduce el parpadeo y mantiene la memoria plana en conversaciones largas. Equivalente a la configuración [`tui`](/es/settings#available-settings); también puede cambiar con `/tui fullscreen` |

117| `CLAUDE_CODE_OAUTH_REFRESH_TOKEN` | Token de actualización de OAuth para autenticación de Claude.ai. Cuando se establece, `claude auth login` intercambia este token directamente en lugar de abrir un navegador. Requiere `CLAUDE_CODE_OAUTH_SCOPES`. Útil para aprovisionar autenticación en entornos automatizados |

118| `CLAUDE_CODE_OAUTH_SCOPES` | Alcances de OAuth separados por espacios con los que se emitió el token de actualización, como `"user:profile user:inference user:sessions:claude_code"`. Requerido cuando se establece `CLAUDE_CODE_OAUTH_REFRESH_TOKEN` |

119| `CLAUDE_CODE_OAUTH_TOKEN` | Token de acceso de OAuth para autenticación de Claude.ai. Alternativa a `/login` para SDK y entornos automatizados. Tiene precedencia sobre credenciales almacenadas en llavero. Genere uno con [`claude setup-token`](/es/authentication#generate-a-long-lived-token) |

120| `CLAUDE_CODE_OTEL_FLUSH_TIMEOUT_MS` | Tiempo de espera en milisegundos para vaciar spans de OpenTelemetry pendientes (predeterminado: 5000). Consulte [Monitoreo](/es/monitoring-usage) |

121| `CLAUDE_CODE_OTEL_HEADERS_HELPER_DEBOUNCE_MS` | Intervalo para actualizar encabezados dinámicos de OpenTelemetry en milisegundos (predeterminado: 1740000 / 29 minutos). Consulte [Encabezados dinámicos](/es/monitoring-usage#dynamic-headers) |

122| `CLAUDE_CODE_OTEL_SHUTDOWN_TIMEOUT_MS` | Tiempo de espera en milisegundos para que el exportador de OpenTelemetry termine al apagar (predeterminado: 2000). Aumente si las métricas se descartan al salir. Consulte [Monitoreo](/es/monitoring-usage) |

123| `CLAUDE_CODE_PERFORCE_MODE` | Establezca en `1` para habilitar la protección de escritura consciente de Perforce. Cuando se establece, Edit, Write y NotebookEdit fallan con una sugerencia `p4 edit <file>` si el archivo de destino carece del bit de escritura del propietario, que Perforce borra en archivos sincronizados hasta que `p4 edit` los abre. Esto evita que Claude Code omita el seguimiento de cambios de Perforce |

124| `CLAUDE_CODE_PLUGIN_CACHE_DIR` | Anule el directorio raíz de plugins. A pesar del nombre, esto establece el directorio principal, no el caché en sí: los marketplaces y el caché de plugins viven en subdirectorios bajo esta ruta. El valor predeterminado es `~/.claude/plugins` |

125| `CLAUDE_CODE_PLUGIN_GIT_TIMEOUT_MS` | Tiempo de espera en milisegundos para operaciones de git al instalar o actualizar plugins (predeterminado: 120000). Aumente este valor para repositorios grandes o conexiones de red lentas. Consulte [Las operaciones de Git agotan el tiempo de espera](/es/plugin-marketplaces#git-operations-time-out) |

126| `CLAUDE_CODE_PLUGIN_KEEP_MARKETPLACE_ON_FAILURE` | Establezca en `1` para mantener el caché de marketplace existente cuando un `git pull` falla en lugar de borrar y volver a clonar. Útil en entornos sin conexión o aislados donde volver a clonar fallaría de la misma manera. Consulte [Las actualizaciones de Marketplace fallan en entornos sin conexión](/es/plugin-marketplaces#marketplace-updates-fail-in-offline-environments) |

127| `CLAUDE_CODE_PLUGIN_SEED_DIR` | Ruta a uno o más directorios de semilla de plugins de solo lectura, separados por `:` en Unix o `;` en Windows. Utilice esto para agrupar un directorio de plugins previamente poblado en una imagen de contenedor. Claude Code registra mercados desde estos directorios al inicio y utiliza plugins almacenados en caché previamente sin volver a clonar. Consulte [Pre-popular plugins para contenedores](/es/plugin-marketplaces#pre-populate-plugins-for-containers) |

128| `CLAUDE_CODE_PROVIDER_MANAGED_BY_HOST` | Se establece por plataformas host que incrustan Claude Code y administran el enrutamiento del proveedor de modelo en su nombre. Cuando se establece, la selección de proveedor, endpoint y variables de autenticación como `CLAUDE_CODE_USE_BEDROCK`, `ANTHROPIC_BASE_URL` y `ANTHROPIC_API_KEY` en archivos de configuración se ignoran para que la configuración del usuario no pueda anular el enrutamiento del host. La opción de exclusión automática de telemetría para Bedrock, Vertex y Foundry también se omite, por lo que la telemetría sigue la opción de exclusión estándar `DISABLE_TELEMETRY`. Consulte [Comportamientos predeterminados por proveedor de API](/es/data-usage#default-behaviors-by-api-provider) |

129| `CLAUDE_CODE_PROXY_RESOLVES_HOSTS` | Establezca en `1` para permitir que el proxy realice la resolución de DNS en lugar de la persona que llama. Opción de inclusión para entornos donde el proxy debe manejar la resolución de nombres de host |

130| `CLAUDE_CODE_REMOTE` | Se establece automáticamente en `true` cuando Claude Code se ejecuta como una [sesión en la nube](/es/claude-code-on-the-web). Lea esto desde un hook o script de configuración para detectar si se encuentra en un entorno en la nube |

131| `CLAUDE_CODE_REMOTE_SESSION_ID` | Se establece automáticamente en [sesiones en la nube](/es/claude-code-on-the-web) en el ID de la sesión actual. Lea esto para construir un enlace de vuelta a la transcripción de la sesión. Consulte [Vincular artefactos de vuelta a la sesión](/es/claude-code-on-the-web#link-artifacts-back-to-the-session) |

132| `CLAUDE_CODE_RESUME_INTERRUPTED_TURN` | Establezca en `1` para reanudar automáticamente si la sesión anterior terminó a mitad de turno. Se utiliza en modo SDK para que el modelo continúe sin requerir que el SDK reenvíe el indicador |

133| `CLAUDE_CODE_SCRIPT_CAPS` | Objeto JSON que limita cuántas veces se pueden invocar scripts específicos por sesión cuando se establece `CLAUDE_CODE_SUBPROCESS_ENV_SCRUB`. Las claves son subcadenas coincidentes contra el texto del comando; los valores son límites de llamadas enteros. Por ejemplo, `{"deploy.sh": 2}` permite que `deploy.sh` se llame como máximo dos veces. La coincidencia se basa en subcadenas, por lo que trucos de expansión de shell como `./scripts/deploy.sh $(evil)` siguen contando contra el límite. El fan-out en tiempo de ejecución a través de `xargs` o `find -exec` no se detecta; este es un control de defensa en profundidad |

134| `CLAUDE_CODE_SCROLL_SPEED` | Establezca el multiplicador de desplazamiento de la rueda del ratón en [renderizado a pantalla completa](/es/fullscreen#mouse-wheel-scrolling). Acepta valores de 1 a 20. Establezca en `3` para coincidir con `vim` si su terminal envía un evento de rueda por muesca sin amplificación |

135| `CLAUDE_CODE_SESSIONEND_HOOKS_TIMEOUT_MS` | Anule el presupuesto de tiempo en milisegundos para hooks [SessionEnd](/es/hooks#sessionend). Se aplica a la salida de sesión, `/clear` y cambio de sesiones a través de `/resume` interactivo. De forma predeterminada, el presupuesto es de 1,5 segundos, aumentado automáticamente al `timeout` más alto por hook configurado en archivos de configuración, hasta 60 segundos. Los tiempos de espera en hooks proporcionados por plugins no aumentan el presupuesto |

136| `CLAUDE_CODE_SHELL` | Anule la detección automática de shell. Útil cuando su shell de inicio difiere de su shell de trabajo preferido (por ejemplo, `bash` vs `zsh`) |

137| `CLAUDE_CODE_SHELL_PREFIX` | Prefijo de comando que envuelve comandos shell que Claude Code genera: llamadas de herramienta Bash, comandos [hook](/es/hooks) y comandos de inicio de [servidor MCP](/es/mcp) stdio. Útil para registro o auditoría. Ejemplo: establecer `/path/to/logger.sh` ejecuta cada comando como `/path/to/logger.sh <command>` |

138| `CLAUDE_CODE_SIMPLE` | Establezca en `1` para ejecutar con un indicador del sistema mínimo y solo las herramientas Bash, lectura de archivo y edición de archivo. Las herramientas MCP de `--mcp-config` siguen estando disponibles. Deshabilita el descubrimiento automático de hooks, skills, plugins, servidores MCP, memoria automática y CLAUDE.md. La bandera CLI [`--bare`](/es/headless#start-faster-with-bare-mode) establece esto |

139| `CLAUDE_CODE_SIMPLE_SYSTEM_PROMPT` | Establezca en `1` para utilizar un indicador del sistema más corto y descripciones de herramientas abreviadas en Opus 4.7. No tiene efecto en otros modelos. El conjunto completo de herramientas, hooks, servidores MCP y descubrimiento de CLAUDE.md permanecen habilitados |

140| `CLAUDE_CODE_SKIP_BEDROCK_AUTH` | Omita la autenticación de AWS para Bedrock (por ejemplo, cuando se utiliza una puerta de enlace LLM) |

141| `CLAUDE_CODE_SKIP_FOUNDRY_AUTH` | Omita la autenticación de Azure para Microsoft Foundry (por ejemplo, cuando se utiliza una puerta de enlace LLM) |

142| `CLAUDE_CODE_SKIP_MANTLE_AUTH` | Omita la autenticación de AWS para Bedrock Mantle (por ejemplo, cuando se utiliza una puerta de enlace LLM) |

143| `CLAUDE_CODE_SKIP_PROMPT_HISTORY` | Establezca en `1` para omitir escribir historial de indicadores y transcripciones de sesiones en disco. Las sesiones iniciadas con esta variable establecida no aparecen en `--resume`, `--continue` o historial de flecha hacia arriba. Útil para sesiones con scripts efímeros |

144| `CLAUDE_CODE_SKIP_VERTEX_AUTH` | Omita la autenticación de Google para Vertex (por ejemplo, cuando se utiliza una puerta de enlace LLM) |

145| `CLAUDE_CODE_SUBAGENT_MODEL` | Consulte [Configuración de modelo](/es/model-config) |

146| `CLAUDE_CODE_SUBPROCESS_ENV_SCRUB` | Establezca en `1` para eliminar credenciales de Anthropic y proveedores de nube de entornos de subprocesos (herramienta Bash, hooks, servidores MCP stdio). El proceso Claude principal mantiene estas credenciales para llamadas de API, pero los procesos secundarios no pueden leerlas, reduciendo la exposición a ataques de inyección de indicadores que intentan exfiltrar secretos a través de expansión de shell. En Linux, esto también ejecuta subprocesos Bash en un espacio de nombres PID aislado para que no puedan leer entornos de procesos de host a través de `/proc`; como efecto secundario, `ps`, `pgrep` y `kill` no pueden ver ni señalar procesos de host. `claude-code-action` establece esto automáticamente cuando se configura `allowed_non_write_users` |

147| `CLAUDE_CODE_SYNC_PLUGIN_INSTALL` | Establezca en `1` en modo no interactivo (la bandera `-p`) para esperar a que se complete la instalación de plugins antes de la primera consulta. Sin esto, los plugins se instalan en segundo plano y pueden no estar disponibles en el primer turno. Combine con `CLAUDE_CODE_SYNC_PLUGIN_INSTALL_TIMEOUT_MS` para limitar la espera |

148| `CLAUDE_CODE_SYNC_PLUGIN_INSTALL_TIMEOUT_MS` | Tiempo de espera en milisegundos para la instalación sincrónica de plugins. Cuando se excede, Claude Code continúa sin plugins y registra un error. Sin predeterminado: sin esta variable, la instalación sincrónica espera hasta completarse |

149| `CLAUDE_CODE_SYNTAX_HIGHLIGHT` | Establezca en `false` para deshabilitar el resaltado de sintaxis en salida de diff. Útil cuando los colores interfieren con su configuración de terminal |

150| `CLAUDE_CODE_TASK_LIST_ID` | Comparta una lista de tareas entre sesiones. Establezca el mismo ID en múltiples instancias de Claude Code para coordinar una lista de tareas compartida. Consulte [Lista de tareas](/es/interactive-mode#task-list) |

151| `CLAUDE_CODE_TEAM_NAME` | Nombre del equipo de agentes al que pertenece este compañero de equipo. Se establece automáticamente en miembros de [equipo de agentes](/es/agent-teams) |

152| `CLAUDE_CODE_TMPDIR` | Anule el directorio temporal utilizado para archivos temporales internos. Claude Code añade `/claude-{uid}/` (Unix) o `/claude/` (Windows) a esta ruta. Predeterminado: `/tmp` en macOS, `os.tmpdir()` en Linux/Windows |

153| `CLAUDE_CODE_TMUX_TRUECOLOR` | Establezca en `1` para permitir salida de truecolor de 24 bits dentro de tmux. De forma predeterminada, Claude Code se limita a 256 colores cuando se establece `$TMUX` porque tmux no pasa a través de secuencias de escape de truecolor a menos que se configure. Establezca esto después de agregar `set -ga terminal-overrides ',*:Tc'` a su `~/.tmux.conf`. Consulte [Configuración de terminal](/es/terminal-config) para otras configuraciones de tmux |

154| `CLAUDE_CODE_USE_BEDROCK` | Use [Bedrock](/es/amazon-bedrock) |

155| `CLAUDE_CODE_USE_FOUNDRY` | Use [Microsoft Foundry](/es/microsoft-foundry) |

156| `CLAUDE_CODE_USE_MANTLE` | Use el endpoint [Mantle](/es/amazon-bedrock#use-the-mantle-endpoint) de Bedrock |

157| `CLAUDE_CODE_USE_NATIVE_FILE_SEARCH` | Establezca en `1` para descubrir comandos personalizados, subagentes y estilos de salida utilizando APIs de archivo de Node.js en lugar de ripgrep. Establezca esto si el binario ripgrep incluido no está disponible o está bloqueado en su entorno. No afecta a las herramientas Grep o búsqueda de archivos |

158| `CLAUDE_CODE_USE_POWERSHELL_TOOL` | Controla la herramienta PowerShell. En Windows sin Git Bash, la herramienta se habilita automáticamente; establezca en `0` para deshabilitarla. En Windows con Git Bash instalado, la herramienta se está implementando progresivamente: establezca en `1` para optar por participar o `0` para optar por no participar. En Linux, macOS y WSL, establezca en `1` para habilitarla, lo que requiere `pwsh` en su `PATH`. Cuando se habilita en Windows, Claude puede ejecutar comandos de PowerShell de forma nativa en lugar de enrutarlos a través de Git Bash. Consulte [Herramienta PowerShell](/es/tools-reference#powershell-tool) |

159| `CLAUDE_CODE_USE_VERTEX` | Use [Vertex](/es/google-vertex-ai) |

160| `CLAUDE_CONFIG_DIR` | Anule el directorio de configuración (predeterminado: `~/.claude`). Todos los ajustes, credenciales, historial de sesiones y plugins se almacenan bajo esta ruta. Útil para ejecutar múltiples cuentas lado a lado: por ejemplo, `alias claude-work='CLAUDE_CONFIG_DIR=~/.claude-work claude'` |

161| `CLAUDE_ENABLE_BYTE_WATCHDOG` | Establezca en `1` para forzar la habilitación del perro guardián de inactividad de transmisión a nivel de byte, o establezca en `0` para forzar su deshabilitación. Cuando no se establece, el perro guardián se habilita de forma predeterminada para conexiones de API de Anthropic. El perro guardián de byte aborta una conexión cuando no llegan bytes en el cable durante la duración establecida por `CLAUDE_STREAM_IDLE_TIMEOUT_MS`, con un mínimo de 5 minutos, independientemente del perro guardián a nivel de evento |

162| `CLAUDE_ENABLE_STREAM_WATCHDOG` | Establezca en `1` para habilitar el perro guardián de inactividad de transmisión a nivel de evento. Desactivado de forma predeterminada. Para Bedrock, Vertex y Foundry, este es el único perro guardián de inactividad disponible. Configure el tiempo de espera con `CLAUDE_STREAM_IDLE_TIMEOUT_MS` |

163| `CLAUDE_ENV_FILE` | Ruta a un script de shell cuyo contenido Claude Code ejecuta antes de cada comando Bash en el mismo proceso de shell, por lo que las exportaciones en el archivo son visibles para el comando. Utilice para persistir la activación de virtualenv o conda entre comandos. También se completa dinámicamente por hooks [SessionStart](/es/hooks#persist-environment-variables), [Setup](/es/hooks#setup), [CwdChanged](/es/hooks#cwdchanged) y [FileChanged](/es/hooks#filechanged) |

164| `CLAUDE_REMOTE_CONTROL_SESSION_NAME_PREFIX` | Prefijo para nombres de sesión de [Control Remoto](/es/remote-control) generados automáticamente cuando no se proporciona un nombre explícito. El valor predeterminado es el nombre de host de su máquina, produciendo nombres como `myhost-graceful-unicorn`. La bandera CLI `--remote-control-session-name-prefix` establece el mismo valor para una única invocación |

165| `CLAUDE_STREAM_IDLE_TIMEOUT_MS` | Tiempo de espera en milisegundos antes de que el perro guardián de inactividad de transmisión cierre una conexión estancada. Predeterminado y mínimo `300000` (5 minutos) para ambos perros guardianes a nivel de byte y a nivel de evento; los valores más bajos se fijan silenciosamente para absorber pausas de pensamiento extendido y almacenamiento en búfer de proxy. Para proveedores de terceros, requiere `CLAUDE_ENABLE_STREAM_WATCHDOG=1` |

166| `DISABLE_AUTOUPDATER` | Establezca en `1` para deshabilitar actualizaciones automáticas en segundo plano. El comando manual `claude update` sigue funcionando. Use `DISABLE_UPDATES` para bloquear ambos |

167| `DISABLE_AUTO_COMPACT` | Establezca en `1` para deshabilitar la compactación automática cuando se aproxime al límite de contexto. El comando manual `/compact` sigue estando disponible. Utilice cuando desee control explícito sobre cuándo ocurre la compactación |

168| `DISABLE_COMPACT` | Establezca en `1` para deshabilitar toda la compactación: tanto la compactación automática como el comando manual `/compact` |

169| `DISABLE_COST_WARNINGS` | Establezca en `1` para deshabilitar mensajes de advertencia de costo |

170| `DISABLE_DOCTOR_COMMAND` | Establezca en `1` para ocultar el comando `/doctor`. Útil para despliegues administrados donde los usuarios no deben ejecutar diagnósticos de instalación |

171| `DISABLE_ERROR_REPORTING` | Establezca en `1` para optar por no participar en el informe de errores de Sentry |

172| `DISABLE_EXTRA_USAGE_COMMAND` | Establezca en `1` para ocultar el comando `/extra-usage` que permite a los usuarios comprar uso adicional más allá de los límites de velocidad |

173| `DISABLE_FEEDBACK_COMMAND` | Establezca en `1` para deshabilitar el comando `/feedback`. El nombre anterior `DISABLE_BUG_COMMAND` también se acepta |

174| `DISABLE_GROWTHBOOK` | Establezca en `1` para deshabilitar la obtención de banderas de características de GrowthBook y utilizar valores predeterminados de código para cada bandera. El registro de eventos de telemetría permanece activado a menos que `DISABLE_TELEMETRY` también esté establecido |

175| `DISABLE_INSTALLATION_CHECKS` | Establezca en `1` para deshabilitar advertencias de instalación. Utilice solo cuando administre manualmente la ubicación de instalación, ya que esto puede enmascarar problemas con instalaciones estándar |

176| `DISABLE_INSTALL_GITHUB_APP_COMMAND` | Establezca en `1` para ocultar el comando `/install-github-app`. Ya está oculto cuando se utilizan proveedores de terceros (Bedrock, Vertex o Foundry) |

177| `DISABLE_INTERLEAVED_THINKING` | Establezca en `1` para evitar enviar el encabezado beta de pensamiento intercalado. Útil cuando su puerta de enlace LLM o proveedor no admite [pensamiento intercalado](https://platform.claude.com/docs/en/build-with-claude/extended-thinking#interleaved-thinking) |

178| `DISABLE_LOGIN_COMMAND` | Establezca en `1` para ocultar el comando `/login`. Útil cuando la autenticación se maneja externamente a través de claves de API o `apiKeyHelper` |

179| `DISABLE_LOGOUT_COMMAND` | Establezca en `1` para ocultar el comando `/logout` |

180| `DISABLE_PROMPT_CACHING` | Establezca en `1` para deshabilitar el almacenamiento en caché de indicadores para todos los modelos (tiene precedencia sobre la configuración por modelo) |

181| `DISABLE_PROMPT_CACHING_HAIKU` | Establezca en `1` para deshabilitar el almacenamiento en caché de indicadores para modelos Haiku |

182| `DISABLE_PROMPT_CACHING_OPUS` | Establezca en `1` para deshabilitar el almacenamiento en caché de indicadores para modelos Opus |

183| `DISABLE_PROMPT_CACHING_SONNET` | Establezca en `1` para deshabilitar el almacenamiento en caché de indicadores para modelos Sonnet |

184| `DISABLE_TELEMETRY` | Establezca en `1` para optar por no participar en la telemetría de Statsig (tenga en cuenta que los eventos de Statsig no incluyen datos de usuario como código, rutas de archivo o comandos bash) |

185| `DISABLE_UPDATES` | Establezca en `1` para bloquear todas las actualizaciones, incluido el comando manual `claude update` y `claude install`. Más estricto que `DISABLE_AUTOUPDATER`. Utilice cuando distribuya Claude Code a través de sus propios canales y los usuarios no deben auto-actualizarse |

186| `DISABLE_UPGRADE_COMMAND` | Establezca en `1` para ocultar el comando `/upgrade` |

187| `ENABLE_CLAUDEAI_MCP_SERVERS` | Establezca en `false` para deshabilitar [servidores MCP de claude.ai](/es/mcp#use-mcp-servers-from-claude-ai) en Claude Code. Habilitado de forma predeterminada para usuarios conectados |

188| `ENABLE_PROMPT_CACHING_1H` | Establezca en `1` para solicitar un TTL de caché de indicador de 1 hora en lugar de los 5 minutos predeterminados. Destinado a usuarios de clave de API, [Bedrock](/es/amazon-bedrock), [Vertex](/es/google-vertex-ai) y [Foundry](/es/microsoft-foundry). Los usuarios de suscripción reciben TTL de 1 hora automáticamente. Las escrituras de caché de 1 hora se facturan a una tasa más alta |

189| `ENABLE_PROMPT_CACHING_1H_BEDROCK` | Deprecated. Use `ENABLE_PROMPT_CACHING_1H` instead |

190| `ENABLE_TOOL_SEARCH` | Controla [búsqueda de herramientas MCP](/es/mcp#scale-with-mcp-tool-search). Sin establecer: todas las herramientas MCP diferidas de forma predeterminada, pero cargadas por adelantado en Vertex AI o cuando `ANTHROPIC_BASE_URL` apunta a un host que no es de primera parte. Valores: `true` (siempre diferir incluyendo proxies y Vertex AI), `auto` (modo de umbral: cargar por adelantado si las herramientas caben dentro del 10% del contexto), `auto:N` (umbral personalizado, p. ej., `auto:5` para 5%), `false` (cargar todo por adelantado) |

191| `FALLBACK_FOR_ALL_PRIMARY_MODELS` | Establezca en cualquier valor no vacío para activar el respaldo a [`--fallback-model`](/es/cli-reference#cli-flags) después de errores de sobrecarga repetidos en cualquier modelo principal. De forma predeterminada, solo los modelos Opus activan el respaldo |

192| `FORCE_AUTOUPDATE_PLUGINS` | Establezca en `1` para forzar actualizaciones automáticas de plugins incluso cuando el actualizador automático principal está deshabilitado mediante `DISABLE_AUTOUPDATER` |

193| `FORCE_PROMPT_CACHING_5M` | Establezca en `1` para forzar el TTL de caché de indicador de 5 minutos incluso cuando el TTL de 1 hora se aplicaría de otra manera. Anula `ENABLE_PROMPT_CACHING_1H` |

194| `HTTP_PROXY` | Especifique el servidor proxy HTTP para conexiones de red |

195| `HTTPS_PROXY` | Especifique el servidor proxy HTTPS para conexiones de red |

196| `IS_DEMO` | Establezca en `1` para habilitar el modo de demostración: oculta su correo electrónico y nombre de organización del encabezado y salida de `/status`, y omite la incorporación. Útil cuando transmite o graba una sesión |

197| `MAX_MCP_OUTPUT_TOKENS` | Número máximo de tokens permitidos en respuestas de herramientas MCP. Claude Code muestra una advertencia cuando la salida excede 10,000 tokens. Las herramientas que declaran [`anthropic/maxResultSizeChars`](/es/mcp#raise-the-limit-for-a-specific-tool) utilizan ese límite de caracteres para contenido de texto en su lugar, pero el contenido de imagen de esas herramientas sigue estando sujeto a esta variable (predeterminado: 25000) |

198| `MAX_STRUCTURED_OUTPUT_RETRIES` | Número de veces para reintentar cuando la respuesta del modelo falla la validación contra el [`--json-schema`](/es/cli-reference#cli-flags) en modo no interactivo (la bandera `-p`). El valor predeterminado es 5 |

199| `MAX_THINKING_TOKENS` | Anule el presupuesto de tokens de [pensamiento extendido](https://platform.claude.com/docs/en/build-with-claude/extended-thinking). El techo es el [máximo de tokens de salida](https://platform.claude.com/docs/en/about-claude/models/overview#latest-models-comparison) del modelo menos uno. Establezca en `0` para deshabilitar el pensamiento completamente. En modelos con [razonamiento adaptativo](/es/model-config#adjust-effort-level), el presupuesto se ignora a menos que el razonamiento adaptativo esté deshabilitado a través de `CLAUDE_CODE_DISABLE_ADAPTIVE_THINKING` |

200| `MCP_CLIENT_SECRET` | Secreto de cliente OAuth para servidores MCP que requieren [credenciales preconfiguradas](/es/mcp#use-pre-configured-oauth-credentials). Evita el indicador interactivo al agregar un servidor con `--client-secret` |

201| `MCP_CONNECTION_NONBLOCKING` | Establezca en `true` en modo no interactivo (`-p`) para omitir completamente la espera de conexión MCP. Útil para canalizaciones con scripts donde las herramientas MCP no son necesarias. Sin esta variable, la primera consulta espera hasta 5 segundos para que se conecten los servidores `--mcp-config` |

202| `MCP_OAUTH_CALLBACK_PORT` | Puerto fijo para la devolución de llamada de redirección de OAuth, como alternativa a `--callback-port` al agregar un servidor MCP con [credenciales preconfiguradas](/es/mcp#use-pre-configured-oauth-credentials) |

203| `MCP_REMOTE_SERVER_CONNECTION_BATCH_SIZE` | Número máximo de servidores MCP remotos (HTTP/SSE) para conectar en paralelo durante el inicio (predeterminado: 20) |

204| `MCP_SERVER_CONNECTION_BATCH_SIZE` | Número máximo de servidores MCP locales (stdio) para conectar en paralelo durante el inicio (predeterminado: 3) |

205| `MCP_TIMEOUT` | Tiempo de espera en milisegundos para el inicio del servidor MCP (predeterminado: 30000, o 30 segundos) |

206| `MCP_TOOL_TIMEOUT` | Tiempo de espera en milisegundos para la ejecución de herramientas MCP (predeterminado: 100000000, aproximadamente 28 horas) |

207| `NO_PROXY` | Lista de dominios e IPs a los que se emitirán solicitudes directamente, omitiendo el proxy |

208| `OTEL_LOG_RAW_API_BODIES` | Emita el JSON completo de solicitud y respuesta de la API de Mensajes de Anthropic como eventos de registro `api_request_body` / `api_response_body`. Establezca en `1` para cuerpos en línea truncados en 60 KB, o `file:<dir>` para escribir cuerpos sin truncar en disco y emitir una ruta `body_ref` en su lugar. Deshabilitado de forma predeterminada; los cuerpos incluyen todo el historial de conversación. Consulte [Monitoreo](/es/monitoring-usage#api-request-body-event) |

209| `OTEL_LOG_TOOL_CONTENT` | Establezca en `1` para incluir contenido de entrada y salida de herramientas en eventos de span de OpenTelemetry. Deshabilitado de forma predeterminada para proteger datos sensibles. Consulte [Monitoreo](/es/monitoring-usage) |

210| `OTEL_LOG_TOOL_DETAILS` | Establezca en `1` para incluir argumentos de entrada de herramientas, nombres de servidores MCP, cadenas de error sin procesar en fallos de herramientas y otros detalles de herramientas en trazas y registros de OpenTelemetry. Deshabilitado de forma predeterminada para proteger PII. Consulte [Monitoreo](/es/monitoring-usage) |

211| `OTEL_LOG_USER_PROMPTS` | Establezca en `1` para incluir texto de indicador de usuario en trazas y registros de OpenTelemetry. Deshabilitado de forma predeterminada (los indicadores se redactan). Consulte [Monitoreo](/es/monitoring-usage) |

212| `OTEL_METRICS_INCLUDE_ACCOUNT_UUID` | Establezca en `false` para excluir UUID de cuenta de atributos de métricas (predeterminado: incluido). Consulte [Monitoreo](/es/monitoring-usage) |

213| `OTEL_METRICS_INCLUDE_SESSION_ID` | Establezca en `false` para excluir ID de sesión de atributos de métricas (predeterminado: incluido). Consulte [Monitoreo](/es/monitoring-usage) |

214| `OTEL_METRICS_INCLUDE_VERSION` | Establezca en `true` para incluir la versión de Claude Code en atributos de métricas (predeterminado: excluido). Consulte [Monitoreo](/es/monitoring-usage) |

215| `SLASH_COMMAND_TOOL_CHAR_BUDGET` | Anule el presupuesto de caracteres para metadatos de skills mostrados a la [herramienta Skill](/es/skills#control-who-invokes-a-skill). El presupuesto se escala dinámicamente al 1% de la ventana de contexto, con un respaldo de 8,000 caracteres. Nombre heredado mantenido para compatibilidad hacia atrás |

216| `TASK_MAX_OUTPUT_LENGTH` | Número máximo de caracteres en salida de [subagentes](/es/sub-agents) antes del truncamiento (predeterminado: 32000, máximo: 160000). Cuando se trunca, la salida completa se guarda en disco y la ruta se incluye en la respuesta truncada |

217| `USE_BUILTIN_RIPGREP` | Establezca en `0` para utilizar `rg` instalado en el sistema en lugar de `rg` incluido con Claude Code |

218| `VERTEX_REGION_CLAUDE_3_5_HAIKU` | Anule la región para Claude 3.5 Haiku al usar Vertex AI |

219| `VERTEX_REGION_CLAUDE_3_5_SONNET` | Anule la región para Claude 3.5 Sonnet al usar Vertex AI |

220| `VERTEX_REGION_CLAUDE_3_7_SONNET` | Anule la región para Claude 3.7 Sonnet al usar Vertex AI |

221| `VERTEX_REGION_CLAUDE_4_0_OPUS` | Anule la región para Claude 4.0 Opus al usar Vertex AI |

222| `VERTEX_REGION_CLAUDE_4_0_SONNET` | Anule la región para Claude 4.0 Sonnet al usar Vertex AI |

223| `VERTEX_REGION_CLAUDE_4_1_OPUS` | Anule la región para Claude 4.1 Opus al usar Vertex AI |

224| `VERTEX_REGION_CLAUDE_4_5_OPUS` | Anule la región para Claude Opus 4.5 al usar Vertex AI |

225| `VERTEX_REGION_CLAUDE_4_5_SONNET` | Anule la región para Claude Sonnet 4.5 al usar Vertex AI |

226| `VERTEX_REGION_CLAUDE_4_6_OPUS` | Anule la región para Claude Opus 4.6 al usar Vertex AI |

227| `VERTEX_REGION_CLAUDE_4_6_SONNET` | Anule la región para Claude Sonnet 4.6 al usar Vertex AI |

228| `VERTEX_REGION_CLAUDE_4_7_OPUS` | {/* min-version: 2.1.111 */}Anule la región para Claude Opus 4.7 al usar Vertex AI |

229| `VERTEX_REGION_CLAUDE_HAIKU_4_5` | Anule la región para Claude Haiku 4.5 al usar Vertex AI |

230 

231También se admiten variables estándar de exportador de OpenTelemetry (`OTEL_METRICS_EXPORTER`, `OTEL_LOGS_EXPORTER`, `OTEL_EXPORTER_OTLP_ENDPOINT`, `OTEL_EXPORTER_OTLP_PROTOCOL`, `OTEL_EXPORTER_OTLP_HEADERS`, `OTEL_METRIC_EXPORT_INTERVAL`, `OTEL_RESOURCE_ATTRIBUTES` y variantes específicas de señal). Consulte [Monitoreo](/es/monitoring-usage) para detalles de configuración.

232 

233## Véase también

234 

235* [Configuración](/es/settings): configure variables de entorno en `settings.json` para que se apliquen a cada sesión

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

237* [Configuración de red](/es/network-config): configuración de proxy y TLS

238* [Monitoreo](/es/monitoring-usage): configuración de OpenTelemetry

errors.md +536 −0 created

Details

1> ## Documentation Index

2> Fetch the complete documentation index at: https://code.claude.com/docs/llms.txt

3> Use this file to discover all available pages before exploring further.

4 

5# Referencia de errores

6 

7> Busque mensajes de error en tiempo de ejecución de Claude Code con lo que significa cada uno y cómo solucionarlo.

8 

9Esta página enumera los errores en tiempo de ejecución que Claude Code muestra y cómo recuperarse de cada uno, además de qué verificar cuando las respuestas parecen incorrectas sin un error. Para errores de instalación como `command not found` o fallos de TLS durante la configuración, consulte [Troubleshooting installation and login](/es/troubleshoot-install).

10 

11Estos errores y comandos de recuperación se aplican en la CLI, la [aplicación de escritorio](/es/desktop) y [Claude Code en la web](/es/claude-code-on-the-web), ya que los tres envuelven la misma CLI de Claude Code. Para problemas específicos de la superficie, consulte la sección de solución de problemas en la página de esa superficie.

12 

13<Note>

14 Claude Code llama a la API de Claude para obtener respuestas del modelo, por lo que la mayoría de los errores en tiempo de ejecución se asignan a un código de error de API subyacente. Esta página cubre lo que significa cada error dentro de Claude Code y cómo recuperarse. Para las definiciones de código de estado HTTP sin procesar, consulte la [referencia de errores de la plataforma Claude](https://platform.claude.com/docs/en/api/errors).

15</Note>

16 

17## Encuentre su error

18 

19Haga coincidir el mensaje que ve en su terminal con una sección a continuación.

20 

21| Mensaje | Sección |

22| :----------------------------------------------------------------------------------- | :--------------------------------------------------------------------------------------------------------------------------- |

23| `API Error: 500 ... Internal server error` | [Errores del servidor](#api-error-500-internal-server-error) |

24| `API Error: Repeated 529 Overloaded errors` | [Errores del servidor](#api-error-repeated-529-overloaded-errors) |

25| `Request timed out` | [Errores del servidor](#request-timed-out), o [Red](#unable-to-connect-to-api) si el mensaje menciona su conexión a Internet |

26| `<model> is temporarily unavailable, so auto mode cannot determine the safety of...` | [Errores del servidor](#auto-mode-cannot-determine-the-safety-of-an-action) |

27| `You've hit your session limit` / `You've hit your weekly limit` | [Límites de uso](#youve-hit-your-session-limit) |

28| `Server is temporarily limiting requests` | [Límites de uso](#server-is-temporarily-limiting-requests) |

29| `Request rejected (429)` | [Límites de uso](#request-rejected-429) |

30| `Credit balance is too low` | [Límites de uso](#credit-balance-is-too-low) |

31| `Not logged in · Please run /login` | [Autenticación](#not-logged-in) |

32| `Invalid API key` | [Autenticación](#invalid-api-key) |

33| `This organization has been disabled` | [Autenticación](#this-organization-has-been-disabled) |

34| `OAuth token revoked` / `OAuth token has expired` | [Autenticación](#oauth-token-revoked-or-expired) |

35| `does not meet scope requirement user:profile` | [Autenticación](#oauth-scope-requirement) |

36| `Unable to connect to API` | [Red](#unable-to-connect-to-api) |

37| `SSL certificate verification failed` | [Red](#ssl-certificate-errors) |

38| `Prompt is too long` | [Errores de solicitud](#prompt-is-too-long) |

39| `Error during compaction: Conversation too long` | [Errores de solicitud](#error-during-compaction-conversation-too-long) |

40| `Request too large` | [Errores de solicitud](#request-too-large) |

41| `Image was too large` | [Errores de solicitud](#image-was-too-large) |

42| `PDF too large` / `PDF is password protected` | [Errores de solicitud](#pdf-errors) |

43| `Extra inputs are not permitted` | [Errores de solicitud](#extra-inputs-are-not-permitted) |

44| `There's an issue with the selected model` | [Errores de solicitud](#theres-an-issue-with-the-selected-model) |

45| `Claude Opus is not available with the Claude Pro plan` | [Errores de solicitud](#claude-opus-is-not-available-with-the-claude-pro-plan) |

46| `thinking.type.enabled is not supported for this model` | [Errores de solicitud](#thinking-type-enabled-is-not-supported-for-this-model) |

47| `max_tokens must be greater than thinking.budget_tokens` | [Errores de solicitud](#thinking-budget-exceeds-output-limit) |

48| `API Error: 400 due to tool use concurrency issues` | [Errores de solicitud](#tool-use-or-thinking-block-mismatch) |

49| Las respuestas parecen de menor calidad que lo habitual | [Calidad de respuesta](#responses-seem-lower-quality-than-usual) |

50 

51## Reintentos automáticos

52 

53Claude Code reintenta fallos transitorios antes de mostrarle un error. Los errores del servidor, respuestas sobrecargadas, tiempos de espera de solicitud, aceleraciones 429 temporales y conexiones perdidas se reintentan hasta 10 veces con retroceso exponencial. Mientras se reintenta, el spinner muestra una cuenta regresiva de `Retrying in Ns · attempt x/y`.

54 

55Cuando ve uno de los errores en esta página, esos reintentos ya se han agotado. Puede ajustar el comportamiento con dos variables de entorno:

56 

57| Variable | Predeterminado | Efecto |

58| :---------------------------------------- | :------------- | :-------------------------------------------------------------------------------------------------------------------------------------------------------- |

59| [`CLAUDE_CODE_MAX_RETRIES`](/es/env-vars) | 10 | Número de intentos de reintento. Redúzcalo para que los fallos aparezcan más rápido en scripts; auméntelo para esperar a través de incidentes más largos. |

60| [`API_TIMEOUT_MS`](/es/env-vars) | 600000 | Tiempo de espera por solicitud en milisegundos. Auméntelo para redes lentas o proxies. |

61 

62## Errores del servidor

63 

64Estos errores provienen de la infraestructura de Anthropic en lugar de su cuenta o solicitud.

65 

66### API Error: 500 Internal server error

67 

68Claude Code muestra el cuerpo de respuesta de API sin procesar para cualquier estado 5xx. El ejemplo a continuación muestra una respuesta 500:

69 

70```text theme={null}

71API Error: 500 {"type":"error","error":{"type":"api_error","message":"Internal server error"}} · check status.claude.com

72```

73 

74Esto indica un fallo inesperado dentro de la API. No es causado por su prompt, configuración o cuenta.

75 

76**Qué hacer:**

77 

78* Consulte [status.claude.com](https://status.claude.com) para ver incidentes activos

79* Espere un minuto y luego envíe su mensaje nuevamente. Su mensaje original sigue en la conversación, por lo que para un prompt largo puede escribir `try again` en lugar de pegar todo de nuevo.

80* Si el error persiste sin incidente publicado, ejecute `/feedback` para que Anthropic pueda investigar con los detalles de su solicitud. Consulte [Reportar un error](#report-an-error) si `/feedback` no está disponible en su proveedor.

81 

82### API Error: Repeated 529 Overloaded errors

83 

84La API está temporalmente a capacidad en todos los usuarios. Claude Code ya ha reintentado varias veces antes de mostrar este mensaje:

85 

86```text theme={null}

87API Error: Repeated 529 Overloaded errors · check status.claude.com

88```

89 

90Un 529 no es su límite de uso y no cuenta contra su cuota.

91 

92**Qué hacer:**

93 

94* Consulte [status.claude.com](https://status.claude.com) para ver avisos de capacidad

95* Intente de nuevo en unos minutos

96* Ejecute `/model` y cambie a un modelo diferente para continuar trabajando, ya que la capacidad se rastrea por modelo. Claude Code le solicita que haga esto cuando un modelo está bajo una carga particularmente alta, por ejemplo `Opus is experiencing high load, please use /model to switch to Sonnet`.

97 

98### Request timed out

99 

100La API no respondió antes de la fecha límite de conexión.

101 

102```text theme={null}

103Request timed out

104```

105 

106Esto puede suceder durante períodos de alta carga o cuando se genera una respuesta muy grande. El tiempo de espera de solicitud predeterminado es de 10 minutos.

107 

108**Qué hacer:**

109 

110* Reintente la solicitud

111* Para tareas de larga duración, divida el trabajo en prompts más pequeños

112* Si una red lenta o proxy es la causa, aumente `API_TIMEOUT_MS` como se describe en [Reintentos automáticos](#automatic-retries)

113* Si los tiempos de espera son frecuentes y su red es de otro modo saludable, consulte [Errores de red y conexión](#network-and-connection-errors) a continuación

114 

115### Auto mode cannot determine the safety of an action

116 

117El modelo que [auto mode](/es/permission-modes#eliminate-prompts-with-auto-mode) usa para clasificar acciones está sobrecargado, por lo que auto mode bloqueó la acción en lugar de aprobarla sin marcar.

118 

119```text theme={null}

120<model> is temporarily unavailable, so auto mode cannot determine the safety of <tool> right now. Wait briefly and then try this action again.

121```

122 

123Las lecturas, búsquedas y ediciones dentro de su directorio de trabajo omiten el clasificador, por lo que continúan funcionando durante la interrupción.

124 

125**Qué hacer:**

126 

127* Reintente después de unos segundos; Claude ve el mismo mensaje y generalmente reintenta por su cuenta

128* Si los reintentos continúan fallando, continúe con tareas de solo lectura y vuelva a la acción bloqueada más tarde

129* Esto es transitorio e independiente de la [elegibilidad de auto mode](/es/permission-modes#eliminate-prompts-with-auto-mode); no necesita cambiar la configuración

130 

131## Límites de uso

132 

133Estos errores significan que se ha alcanzado una cuota vinculada a su cuenta o plan. Son distintos de los [errores del servidor](#server-errors), que afectan a todos.

134 

135### You've hit your session limit

136 

137Los planes de suscripción incluyen una asignación de uso continuo. Cuando se agota, ve uno de estos mensajes:

138 

139```text theme={null}

140You've hit your session limit · resets 3:45pm

141You've hit your weekly limit · resets Mon 12:00am

142You've hit your Opus limit · resets 3:45pm

143```

144 

145Claude Code bloquea solicitudes adicionales hasta la hora de reinicio que se muestra en el mensaje.

146 

147**Qué hacer:**

148 

149* Espere la hora de reinicio que se muestra en el error

150* Ejecute `/usage` para ver los límites de su plan y cuándo se reinician

151* Ejecute `/extra-usage` para comprar uso adicional en Pro y Max, o para solicitarlo a su administrador en Team y Enterprise. Consulte [Extra usage for paid plans](https://support.claude.com/en/articles/12429409-extra-usage-for-paid-claude-plans) para saber cómo se factura esto.

152* Para actualizar su plan para obtener límites base más altos, consulte [claude.com/pricing](https://claude.com/pricing)

153 

154Para ver su asignación restante antes de alcanzar el límite, agregue los campos `rate_limits` a una [línea de estado personalizada](/es/statusline#rate-limit-usage), o en la aplicación de escritorio haga clic en el [anillo de uso](/es/desktop#check-usage) junto al selector de modelo.

155 

156### Server is temporarily limiting requests

157 

158La API aplicó una aceleración de corta duración que no está relacionada con su cuota de plan.

159 

160```text theme={null}

161API Error: Server is temporarily limiting requests (not your usage limit)

162```

163 

164Esto se [reintenta automáticamente](#automatic-retries) antes de mostrarse.

165 

166**Qué hacer:**

167 

168* Espere brevemente e intente de nuevo

169* Consulte [status.claude.com](https://status.claude.com) si persiste

170 

171### Request rejected (429)

172 

173Ha alcanzado el límite de velocidad configurado para su clave de API, proyecto de Amazon Bedrock o proyecto de Google Vertex AI.

174 

175```text theme={null}

176API Error: Request rejected (429) · this may be a temporary capacity issue

177```

178 

179**Qué hacer:**

180 

181* Ejecute `/status` y confirme que la credencial activa es la que espera. Un `ANTHROPIC_API_KEY` extraviado en su entorno puede enrutar solicitudes a través de una clave de nivel bajo en lugar de su suscripción.

182* Consulte la consola de su proveedor para los límites activos y solicite un nivel más alto si es necesario

183* Para claves de API de Anthropic, consulte la [referencia de límites de velocidad](https://platform.claude.com/docs/en/api/rate-limits) para saber cómo funcionan los niveles y cómo establecer límites por espacio de trabajo

184* Reduzca la concurrencia: reduzca [`CLAUDE_CODE_MAX_TOOL_USE_CONCURRENCY`](/es/env-vars), evite ejecutar muchos subagentos paralelos, o cambie a un modelo más pequeño con `/model` para ejecuciones de alto volumen con scripts

185 

186### Credit balance is too low

187 

188Su organización de Console se ha quedado sin créditos prepagados.

189 

190```text theme={null}

191Credit balance is too low

192```

193 

194**Qué hacer:**

195 

196* Agregue créditos en [platform.claude.com/settings/billing](https://platform.claude.com/settings/billing), y considere habilitar la recarga automática allí para que el saldo se rellene antes de llegar a cero

197* Cambie a autenticación de suscripción con `/login` si tiene un plan Pro, Max, Team o Enterprise

198* Establezca límites de gasto por espacio de trabajo en la Console para evitar que un único proyecto agote el saldo de la organización. Consulte [Manage costs effectively](/es/costs).

199 

200## Errores de autenticación

201 

202Estos errores significan que Claude Code no puede probar quién es usted ante la API. Ejecute `/status` en cualquier momento para ver qué credencial está actualmente activa.

203 

204### Not logged in

205 

206No hay credencial válida disponible para esta sesión.

207 

208```text theme={null}

209Not logged in · Please run /login

210```

211 

212**Qué hacer:**

213 

214* Ejecute `/login` para autenticarse con su suscripción de Claude o cuenta de Console

215* Si esperaba que una variable de entorno lo autenticara, confirme que `ANTHROPIC_API_KEY` está configurada y exportada en el shell donde lanzó `claude`

216* Para CI o automatización donde el inicio de sesión interactivo no es posible, configure un script [`apiKeyHelper`](/es/settings#available-settings) que obtenga una clave al inicio

217* Consulte [Authentication precedence](/es/authentication#authentication-precedence) para entender qué credencial gana cuando hay varias presentes

218 

219Si se le solicita que inicie sesión repetidamente, consulte [Not logged in or token expired](/es/troubleshoot-install#not-logged-in-or-token-expired) para correcciones del reloj del sistema y Keychain de macOS.

220 

221### Invalid API key

222 

223La variable de entorno `ANTHROPIC_API_KEY` o el script `apiKeyHelper` devolvió una clave que la API rechazó.

224 

225```text theme={null}

226Invalid API key · Fix external API key

227```

228 

229**Qué hacer:**

230 

231* Verifique si hay errores tipográficos y confirme que la clave no ha sido revocada en la [Console](https://platform.claude.com/settings/keys)

232* Ejecute `env | grep ANTHROPIC` en el mismo shell. Herramientas como direnv, complementos de shell dotenv e IDE terminals pueden cargar una clave obsoleta desde un archivo `.env` en su proyecto sin que la configure explícitamente.

233* Desactive `ANTHROPIC_API_KEY` y ejecute `/login` para usar autenticación de suscripción en su lugar

234* Si la clave proviene de un script [`apiKeyHelper`](/es/settings#available-settings), ejecute el script directamente para confirmar que imprime una clave válida en stdout

235* Ejecute `/status` para confirmar qué fuente de credencial está usando realmente Claude Code

236 

237### This organization has been disabled

238 

239Una `ANTHROPIC_API_KEY` obsoleta de una organización de Console deshabilitada está anulando su inicio de sesión de suscripción.

240 

241```text theme={null}

242Your ANTHROPIC_API_KEY belongs to a disabled organization · Unset the environment variable to use your other credentials

243API Error: 400 ... This organization has been disabled.

244```

245 

246Las variables de entorno tienen prioridad sobre `/login`, por lo que una clave exportada en su perfil de shell o cargada desde un archivo `.env` se usa incluso cuando tiene una suscripción Pro o Max que funciona. En modo no interactivo (`-p`), la clave siempre se usa cuando está presente.

247 

248**Qué hacer:**

249 

250* Desactive `ANTHROPIC_API_KEY` en el shell actual y elimínelo de su perfil de shell, luego relance `claude`

251* Ejecute `/status` después para confirmar que la credencial activa es su suscripción

252* Si no hay variable de entorno configurada y el error persiste, la organización deshabilitada es la vinculada a su `/login`. Póngase en contacto con el soporte o inicie sesión con una cuenta diferente.

253 

254### OAuth token revoked or expired

255 

256Su inicio de sesión guardado ya no es válido. Un token revocado significa que cerró sesión en todas partes o un administrador eliminó el acceso; un token expirado significa que la actualización automática falló a mitad de sesión.

257 

258```text theme={null}

259OAuth token revoked · Please run /login

260OAuth token has expired · Please run /login

261API Error: 401 ... authentication_error

262```

263 

264**Qué hacer:**

265 

266* Ejecute `/login` para iniciar sesión de nuevo

267* Si el error regresa dentro de la misma sesión después de volver a autenticarse, ejecute `/logout` primero para borrar completamente el token almacenado, luego `/login`

268* Para solicitudes repetidas de inicio de sesión en lanzamientos, consulte las comprobaciones del reloj del sistema y Keychain de macOS en [Troubleshooting](/es/troubleshoot-install#not-logged-in-or-token-expired)

269* Para otras fallas incluyendo `403 Forbidden` y problemas del navegador OAuth, consulte [Login and authentication](/es/troubleshoot-install#login-and-authentication)

270 

271### OAuth scope requirement

272 

273El token almacenado es anterior a un alcance de permiso que una característica más nueva necesita. Lo ve más a menudo desde `/usage` y el indicador de uso de la línea de estado:

274 

275```text theme={null}

276OAuth token does not meet scope requirement: user:profile

277```

278 

279**Qué hacer:**

280 

281* Ejecute `/login` para crear un nuevo token con los alcances actuales. No necesita cerrar sesión primero.

282 

283## Errores de red y conexión

284 

285Estos errores significan que Claude Code no pudo alcanzar la API en absoluto. Casi siempre se originan en su red local, proxy o firewall en lugar de la infraestructura de Anthropic.

286 

287### Unable to connect to API

288 

289La conexión TCP a la API falló o nunca se completó.

290 

291```text theme={null}

292Unable to connect to API. Check your internet connection

293Unable to connect to API (ECONNREFUSED)

294Unable to connect to API (ECONNRESET)

295Unable to connect to API (ETIMEDOUT)

296fetch failed

297Request timed out. Check your internet connection and proxy settings

298```

299 

300Las causas comunes incluyen sin acceso a Internet, una VPN que bloquea `api.anthropic.com`, o un proxy corporativo requerido que no está configurado.

301 

302**Qué hacer:**

303 

304* Confirme que puede alcanzar el host de API desde el mismo shell ejecutando `curl -I https://api.anthropic.com`. En Windows PowerShell use `curl.exe -I https://api.anthropic.com` para que no se use el alias `Invoke-WebRequest` incorporado.

305* Si está detrás de un proxy corporativo, configure `HTTPS_PROXY` antes de lanzar Claude Code y consulte [Network configuration](/es/network-config)

306* Si enruta a través de una puerta de enlace LLM o relé, configure [`ANTHROPIC_BASE_URL`](/es/env-vars) a su dirección. Consulte [LLM gateway configuration](/es/llm-gateway) para la configuración.

307* Asegúrese de que su firewall permite los hosts enumerados en [Network access requirements](/es/network-config#network-access-requirements)

308* Los fallos intermitentes se [reintentan automáticamente](#automatic-retries); los fallos persistentes apuntan a un problema de red local

309 

310Si `curl` tiene éxito pero Claude Code aún falla, la causa suele ser algo entre Node.js y la red en lugar de la red misma:

311 

312* En Linux y WSL, verifique `/etc/resolv.conf` para un servidor de nombres inalcanzable. WSL en particular puede heredar un resolutor roto del host.

313* En macOS, un cliente VPN que fue desconectado o desinstalado puede dejar una interfaz de túnel o regla de enrutamiento. Verifique `ifconfig` para interfaces `utun` obsoletas y elimine la extensión de red de la VPN en Configuración del Sistema.

314* Docker Desktop y tiempos de ejecución de contenedores similares pueden interceptar tráfico saliente. Ciérrelos y reintente para descartar esto.

315 

316### SSL certificate errors

317 

318Un proxy o dispositivo de seguridad en su red está interceptando tráfico TLS con su propio certificado, y Node.js no lo confía.

319 

320```text theme={null}

321Unable to connect to API: SSL certificate verification failed. Check your proxy or corporate SSL certificates

322Unable to connect to API: Self-signed certificate detected

323```

324 

325**Qué hacer:**

326 

327* Exporte el paquete de CA de su organización y apunte Node a él con `NODE_EXTRA_CA_CERTS=/path/to/ca-bundle.pem`

328* Consulte [Network configuration](/es/network-config#custom-ca-certificates) para obtener instrucciones de configuración completas

329* No configure `NODE_TLS_REJECT_UNAUTHORIZED=0`, que deshabilita completamente la validación de certificados

330 

331## Errores de solicitud

332 

333Estos errores significan que la API recibió su solicitud pero rechazó su contenido.

334 

335### Prompt is too long

336 

337La conversación más los archivos adjuntos exceden la ventana de contexto del modelo.

338 

339```text theme={null}

340Prompt is too long

341```

342 

343**Qué hacer:**

344 

345* Ejecute `/compact` para resumir turnos anteriores y liberar espacio, o `/clear` para comenzar de nuevo

346* Ejecute `/context` para ver un desglose de lo que está consumiendo la ventana: prompt del sistema, herramientas, archivos de memoria y mensajes

347* Deshabilite los servidores MCP que no está usando con `/mcp disable <name>` para eliminar sus definiciones de herramientas del contexto

348* Recorte archivos de memoria `CLAUDE.md` grandes, o mueva instrucciones a [reglas de alcance de ruta](/es/memory#path-specific-rules) que se carguen solo cuando sea relevante

349* Los subagentos heredan cada definición de herramienta MCP de la sesión padre, lo que puede llenar su ventana de contexto antes del primer turno. Deshabilite los servidores MCP que no está usando antes de generar subagentos.

350* Auto-compact está activado de forma predeterminada y normalmente previene este error. Si ha configurado [`DISABLE_AUTO_COMPACT`](/es/env-vars), vuelva a habilitarlo o ejecute `/compact` manualmente antes de que la ventana se llene.

351 

352Consulte [Explore the context window](/es/context-window) para una vista interactiva de cómo se llena el contexto.

353 

354### Error during compaction: Conversation too long

355 

356`/compact` en sí falló porque no hay suficiente contexto libre para contener el resumen que produce.

357 

358```text theme={null}

359Error during compaction: Conversation too long. Press esc twice to go up a few messages and try again.

360```

361 

362Esto puede suceder cuando la ventana ya está llena en el momento en que se activa auto-compact, o cuando ejecuta `/compact` después de ver `Prompt is too long`.

363 

364**Qué hacer:**

365 

366* Presione Esc dos veces para abrir la lista de mensajes y retroceder varios turnos. Esto elimina los mensajes más recientes del contexto. Luego ejecute `/compact` de nuevo.

367* Si retroceder no libera suficiente espacio, ejecute `/clear` para comenzar una sesión nueva. Su conversación anterior se conserva y se puede reabrirse con `/resume`.

368 

369### Request too large

370 

371El cuerpo de solicitud sin procesar excedió el límite de bytes de la API antes de la tokenización, generalmente debido a un archivo o archivo adjunto grande pegado.

372 

373```text theme={null}

374Request too large (max 30 MB). Double press esc to go back and remove or shrink the attached content.

375```

376 

377Este es un límite de tamaño en la solicitud HTTP, separado del [límite de ventana de contexto](#prompt-is-too-long).

378 

379**Qué hacer:**

380 

381* Presione Esc dos veces y retroceda más allá del turno que agregó el contenido de tamaño excesivo

382* Haga referencia a archivos grandes por ruta en lugar de pegar su contenido, para que Claude pueda leerlos en fragmentos

383* Para imágenes, consulte [Image was too large](#image-was-too-large) a continuación

384 

385### Image was too large

386 

387Una imagen pegada o adjunta excede los límites de tamaño o dimensión de la API.

388 

389```text theme={null}

390Image was too large. Double press esc to go back and try again with a smaller image.

391API Error: 400 ... image dimensions exceed max allowed size

392```

393 

394La imagen permanece en el historial de conversación después del error, por lo que cada mensaje posterior falla con el mismo error hasta que la elimine.

395 

396**Qué hacer:**

397 

398* Presione Esc dos veces y retroceda más allá del turno donde se agregó la imagen

399* Cambie el tamaño de la imagen antes de pegarla. La API acepta imágenes de hasta 8000 píxeles en el borde más largo para una sola imagen, o 2000 píxeles cuando hay muchas imágenes en contexto.

400* Tome una captura de pantalla más ajustada de la región relevante en lugar de la pantalla completa

401 

402### PDF errors

403 

404El PDF que adjuntó no se pudo procesar.

405 

406```text theme={null}

407PDF too large (max 100 pages, 32 MB). Try splitting it or extracting text first.

408PDF is password protected. Try removing protection or extracting text first.

409The PDF file was not valid. Try converting to a different format first.

410```

411 

412**Qué hacer:**

413 

414* Para PDF de tamaño excesivo, pida a Claude que lea un rango de páginas con la herramienta Read en lugar de adjuntar el archivo completo, o extraiga texto con una herramienta como `pdftotext` y haga referencia al archivo de salida por ruta

415* Para PDF protegidos o inválidos, elimine la contraseña o reexporte el archivo desde su aplicación de origen, luego intente de nuevo

416 

417### Extra inputs are not permitted

418 

419Un proxy o puerta de enlace LLM entre Claude Code y la API eliminó el encabezado de solicitud `anthropic-beta`, por lo que la API rechazó campos que dependen de él.

420 

421```text theme={null}

422API Error: 400 ... Extra inputs are not permitted ... context_management

423API Error: 400 ... Extra inputs are not permitted ... tools.0.custom.input_examples

424API Error: 400 ... Unexpected value(s) for the `anthropic-beta` header

425```

426 

427Claude Code envía campos solo de beta como `context_management`, `effort` e `input_examples` de herramientas junto con un encabezado `anthropic-beta` que los habilita. Cuando una puerta de enlace reenvía el cuerpo pero elimina el encabezado, la API ve campos que no reconoce.

428 

429**Qué hacer:**

430 

431* Configure su puerta de enlace para reenviar el encabezado `anthropic-beta`. Consulte [LLM gateway configuration](/es/llm-gateway).

432* Como alternativa, configure [`CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS=1`](/es/env-vars) antes de lanzar. Esto deshabilita características que requieren el encabezado beta para que las solicitudes tengan éxito a través de una puerta de enlace que no puede reenviarlo.

433 

434### There's an issue with the selected model

435 

436El nombre del modelo configurado no fue reconocido o su cuenta carece de acceso a él.

437 

438```text theme={null}

439There's an issue with the selected model (claude-...). It may not exist or you may not have access to it. Run /model to select a different one.

440```

441 

442**Qué hacer:**

443 

444* Ejecute `/model` para elegir entre modelos disponibles para su cuenta

445* Use un alias como `sonnet` u `opus` en lugar de un ID completamente versionado. Los alias rastrean la última versión para que no se vuelvan obsoletos. Consulte [Model configuration](/es/model-config).

446* Si el modelo incorrecto sigue apareciendo, un ID obsoleto se establece en algún lugar. Verifique en [orden de prioridad](/es/model-config#setting-your-model): la bandera `--model`, la variable de entorno `ANTHROPIC_MODEL`, luego el campo `model` en `.claude/settings.local.json`, el `.claude/settings.json` de su proyecto, y `~/.claude/settings.json`. Elimine el valor obsoleto y Claude Code vuelve a su valor predeterminado de cuenta.

447* Para implementaciones de Vertex AI, consulte [Vertex AI troubleshooting](/es/google-vertex-ai#troubleshooting).

448 

449### Claude Opus is not available with the Claude Pro plan

450 

451Su plan de suscripción activo no incluye el modelo que seleccionó.

452 

453```text theme={null}

454Claude Opus is not available with the Claude Pro plan · Select a different model in /model

455```

456 

457**Qué hacer:**

458 

459* Ejecute `/model` y seleccione un modelo que su plan incluya

460* Si actualizó su plan recientemente y aún ve esto, ejecute `/logout` luego `/login`. El token almacenado refleja su plan en el momento en que inició sesión, por lo que actualizar en la web no entra en vigor en una sesión existente hasta que se vuelva a autenticar.

461* Consulte [claude.com/pricing](https://claude.com/pricing) para ver qué modelos incluye cada plan

462 

463### thinking.type.enabled is not supported for this model

464 

465Su versión de Claude Code es anterior a la mínima para Opus 4.7. La CLI envió una configuración de pensamiento que el modelo ya no acepta.

466 

467```text theme={null}

468API Error: 400 ... "thinking.type.enabled" is not supported for this model. Use "thinking.type.adaptive" and "output_config.effort" to control thinking behavior.

469```

470 

471**Qué hacer:**

472 

473* Ejecute `claude update` para actualizar a v2.1.111 o posterior, luego reinicie Claude Code

474* Si no puede actualizar, ejecute `/model` y seleccione Opus 4.6 o Sonnet en su lugar

475* Si lo encuentra en el Agent SDK, consulte [SDK troubleshooting](/es/agent-sdk/quickstart#troubleshooting)

476 

477### Thinking budget exceeds output limit

478 

479El presupuesto de pensamiento extendido configurado excede la longitud de respuesta máxima, por lo que no hay espacio para la respuesta real.

480 

481```text theme={null}

482API Error: 400 ... max_tokens must be greater than thinking.budget_tokens

483```

484 

485Claude Code ajusta estos valores automáticamente en la API de Anthropic. Típicamente ve este error en Amazon Bedrock o Google Vertex AI cuando [`MAX_THINKING_TOKENS`](/es/env-vars) se establece más alto que el límite de salida del proveedor, o cuando el modo de plan aumenta el presupuesto de pensamiento.

486 

487**Qué hacer:**

488 

489* Reduzca `MAX_THINKING_TOKENS`, o aumente [`CLAUDE_CODE_MAX_OUTPUT_TOKENS`](/es/env-vars) por encima del presupuesto de pensamiento

490* Consulte [Extended thinking](/es/common-workflows#use-extended-thinking-thinking-mode) para saber cómo el presupuesto interactúa con la longitud de salida

491 

492### Tool use or thinking block mismatch

493 

494El historial de conversación llegó a la API en un estado inconsistente, generalmente después de que se interrumpió una llamada de herramienta o se editó un turno a mitad de flujo.

495 

496```text theme={null}

497API Error: 400 due to tool use concurrency issues. Run /rewind to recover the conversation.

498API Error: 400 ... unexpected `tool_use_id` found in `tool_result` blocks

499API Error: 400 ... thinking blocks ... cannot be modified

500```

501 

502Las tres variantes significan lo mismo: la secuencia de bloques `tool_use`, `tool_result` y `thinking` en el historial ya no coincide con lo que la API espera.

503 

504**Qué hacer:**

505 

506* Ejecute `/rewind`, o presione Esc dos veces, para retroceder a un checkpoint antes del turno corrupto y continuar desde allí. Consulte [Checkpointing](/es/checkpointing) para saber cómo se crean y restauran los checkpoints.

507 

508## Las respuestas parecen de menor calidad de lo habitual

509 

510Si las respuestas de Claude parecen menos capaces de lo que espera pero no se muestra ningún error, la causa suele ser el estado de la conversación en lugar del modelo en sí. Claude Code no cambia silenciosamente las versiones del modelo. Puede cambiar a un modelo alternativo en casos específicos como cuando se alcanza una cuota de Opus o cuando una región de Bedrock o Vertex AI carece de su modelo; la verificación de selección de modelo a continuación detecta ambos, y [Model configuration](/es/model-config) explica cuándo se aplica la alternativa.

511 

512Verifique estos primero:

513 

514* **Selección de modelo**: ejecute `/model` para confirmar que está en el modelo que espera. Una opción anterior de `/model` o una variable de entorno `ANTHROPIC_MODEL` pueden tenerlo en un modelo más pequeño de lo que pretendía.

515* **Nivel de esfuerzo**: ejecute `/effort` para verificar el nivel de razonamiento actual y auméntelo para depuración difícil o trabajo de diseño. Los valores predeterminados varían según el modelo, así que verifique antes de asumir que está por debajo del máximo. Consulte [Adjust effort level](/es/model-config#adjust-effort-level) para valores predeterminados por modelo y el atajo `ultrathink`.

516* **Presión de contexto**: ejecute `/context` para ver qué tan llena está la ventana. Si está cerca de la capacidad, ejecute `/compact` en un punto natural o `/clear` para comenzar de nuevo. Consulte [Explore the context window](/es/context-window) para saber cómo auto-compact afecta los turnos anteriores.

517* **Instrucciones obsoletas**: archivos `CLAUDE.md` grandes u obsoletos y definiciones de herramientas MCP consumen contexto y pueden dirigir respuestas. `/doctor` marca archivos de memoria de tamaño excesivo y definiciones de subagentos; `/context` muestra el uso de tokens de herramientas MCP.

518 

519Cuando una respuesta sale mal, retroceder generalmente funciona mejor que responder con correcciones. Presione Esc dos veces o ejecute `/rewind` para retroceder a antes del turno malo, luego reformule el prompt con más especificidades. Corregir en el hilo mantiene el intento incorrecto en contexto, lo que puede anclar respuestas posteriores a él. Consulte [Checkpointing](/es/checkpointing).

520 

521Si la calidad aún parece incorrecta después de verificar lo anterior, ejecute `/feedback` y describa lo que esperaba versus lo que obtuvo. La retroalimentación enviada de esta manera incluye la transcripción de la conversación, que es la forma más rápida para que Anthropic diagnostique una regresión real. Consulte [Report an error](#report-an-error) si `/feedback` no está disponible en su proveedor.

522 

523## Reportar un error

524 

525Esta página cubre errores de la API de Claude. Para errores de otros componentes de Claude Code, consulte la guía relevante:

526 

527* El servidor MCP no se pudo conectar o autenticar: [MCP](/es/mcp)

528* El script de hook falló o bloqueó una herramienta: [Debug hooks](/es/hooks#debug-hooks)

529* Permiso denegado o errores del sistema de archivos durante la instalación: [Troubleshooting](/es/troubleshoot-install)

530 

531Si un error no aparece aquí o la corrección sugerida no ayuda:

532 

533* Ejecute `/feedback` dentro de Claude Code para enviar la transcripción y una descripción a Anthropic. El comando también ofrece abrir un problema de GitHub rellenado previamente. La retroalimentación no está disponible en implementaciones de Bedrock, Vertex AI y Foundry.

534* Ejecute `/doctor` para verificar problemas de configuración local

535* Consulte [status.claude.com](https://status.claude.com) para ver incidentes activos

536* Busque [problemas existentes](https://github.com/anthropics/claude-code/issues) en GitHub

fast-mode.md +151 −0 created

Details

1> ## Documentation Index

2> Fetch the complete documentation index at: https://code.claude.com/docs/llms.txt

3> Use this file to discover all available pages before exploring further.

4 

5# Acelera las respuestas con el modo rápido

6 

7> Obtén respuestas más rápidas de Opus 4.6 en Claude Code al activar el modo rápido.

8 

9<Note>

10 El modo rápido está en [vista previa de investigación](#research-preview). La función, los precios y la disponibilidad pueden cambiar según los comentarios.

11</Note>

12 

13El modo rápido es una configuración de alta velocidad para Claude Opus 4.6, haciendo que el modelo sea 2.5x más rápido a un costo más alto por token. Actívalo con `/fast` cuando necesites velocidad para trabajo interactivo como iteración rápida o depuración en vivo, y desactívalo cuando el costo sea más importante que la latencia.

14 

15El modo rápido no es un modelo diferente. Utiliza el mismo Opus 4.6 con una configuración de API diferente que prioriza la velocidad sobre la eficiencia de costos. Obtienes la misma calidad y capacidades, solo respuestas más rápidas.

16 

17<Note>

18 El modo rápido requiere Claude Code v2.1.36 o posterior. Verifica tu versión con `claude --version`.

19</Note>

20 

21Lo que debes saber:

22 

23* Usa `/fast` para activar o desactivar el modo rápido en Claude Code CLI. También disponible a través de `/fast` en la Extensión Claude Code VS Code.

24* Los precios del modo rápido para Opus 4.6 comienzan en \$30/150 MTok. El modo rápido está disponible con un descuento del 50% para todos los planes hasta las 11:59 p.m. PT del 16 de febrero.

25* Disponible para todos los usuarios de Claude Code en planes de suscripción (Pro/Max/Team/Enterprise) y Claude Console.

26* Para los usuarios de Claude Code en planes de suscripción (Pro/Max/Team/Enterprise), el modo rápido está disponible solo a través de uso adicional y no está incluido en los límites de velocidad de la suscripción.

27 

28Esta página cubre cómo [activar el modo rápido](#toggle-fast-mode), su [compensación de costos](#understand-the-cost-tradeoff), [cuándo usarlo](#decide-when-to-use-fast-mode), [requisitos](#requirements), [opción de participación por sesión](#require-per-session-opt-in), y [comportamiento de límite de velocidad](#handle-rate-limits).

29 

30## Activar el modo rápido

31 

32Activa el modo rápido de cualquiera de estas formas:

33 

34* Escribe `/fast` y presiona Tab para activar o desactivar

35* Establece `"fastMode": true` en tu [archivo de configuración de usuario](/es/settings)

36 

37De forma predeterminada, el modo rápido persiste entre sesiones. Los administradores pueden configurar el modo rápido para que se reinicie cada sesión. Consulta [opción de participación por sesión](#require-per-session-opt-in) para obtener más detalles.

38 

39Para la mejor eficiencia de costos, habilita el modo rápido al inicio de una sesión en lugar de cambiar a mitad de la conversación. Consulta [comprender la compensación de costos](#understand-the-cost-tradeoff) para obtener más detalles.

40 

41Cuando habilitas el modo rápido:

42 

43* Si estás en un modelo diferente, Claude Code cambia automáticamente a Opus 4.6

44* Verás un mensaje de confirmación: "Fast mode ON"

45* Un pequeño icono `↯` aparece junto al prompt mientras el modo rápido está activo

46* Ejecuta `/fast` nuevamente en cualquier momento para verificar si el modo rápido está activado o desactivado

47 

48Cuando desactivas el modo rápido con `/fast` nuevamente, permaneces en Opus 4.6. El modelo no revierte a tu modelo anterior. Para cambiar a un modelo diferente, usa `/model`.

49 

50## Comprender la compensación de costos

51 

52El modo rápido tiene precios por token más altos que el Opus 4.6 estándar:

53 

54| Modo | Entrada (MTok) | Salida (MTok) |

55| -------------------------------- | -------------- | ------------- |

56| Modo rápido en Opus 4.6 (\<200K) | \$30 | \$150 |

57| Modo rápido en Opus 4.6 (>200K) | \$60 | \$225 |

58 

59El modo rápido es compatible con la ventana de contexto extendida de 1M tokens.

60 

61Cuando cambias al modo rápido a mitad de la conversación, pagas el precio completo del token de entrada sin caché del modo rápido para todo el contexto de la conversación. Esto cuesta más que si hubieras habilitado el modo rápido desde el inicio.

62 

63## Decidir cuándo usar el modo rápido

64 

65El modo rápido es mejor para trabajo interactivo donde la latencia de respuesta es más importante que el costo:

66 

67* Iteración rápida en cambios de código

68* Sesiones de depuración en vivo

69* Trabajo sensible al tiempo con plazos ajustados

70 

71El modo estándar es mejor para:

72 

73* Tareas autónomas largas donde la velocidad importa menos

74* Procesamiento por lotes o canalizaciones CI/CD

75* Cargas de trabajo sensibles al costo

76 

77### Modo rápido versus nivel de esfuerzo

78 

79El modo rápido y el nivel de esfuerzo afectan la velocidad de respuesta, pero de manera diferente:

80 

81| Configuración | Efecto |

82| ------------------------------ | -------------------------------------------------------------------------------------------------------- |

83| **Modo rápido** | Misma calidad de modelo, latencia más baja, costo más alto |

84| **Nivel de esfuerzo más bajo** | Menos tiempo de pensamiento, respuestas más rápidas, calidad potencialmente más baja en tareas complejas |

85 

86Puedes combinar ambos: usa el modo rápido con un [nivel de esfuerzo](/es/model-config#adjust-effort-level) más bajo para máxima velocidad en tareas sencillas.

87 

88## Requisitos

89 

90El modo rápido requiere todos los siguientes:

91 

92* **No disponible en proveedores de nube de terceros**: el modo rápido no está disponible en Amazon Bedrock, Google Vertex AI o Microsoft Azure Foundry. El modo rápido está disponible a través de la API de Anthropic Console y para planes de suscripción de Claude usando uso adicional.

93* **Uso adicional habilitado**: tu cuenta debe tener el uso adicional habilitado, lo que permite facturación más allá del uso incluido en tu plan. Para cuentas individuales, habilita esto en tu [configuración de facturación de Console](https://platform.claude.com/settings/organization/billing). Para Teams y Enterprise, un administrador debe habilitar el uso adicional para la organización.

94 

95<Note>

96 El uso del modo rápido se factura directamente al uso adicional, incluso si tienes uso restante en tu plan. Esto significa que los tokens del modo rápido no cuentan contra el uso incluido en tu plan y se cobran a la tarifa del modo rápido desde el primer token.

97</Note>

98 

99* **Habilitación del administrador para Teams y Enterprise**: el modo rápido está deshabilitado de forma predeterminada para organizaciones Teams y Enterprise. Un administrador debe [habilitar explícitamente el modo rápido](#enable-fast-mode-for-your-organization) antes de que los usuarios puedan acceder a él.

100 

101<Note>

102 Si tu administrador no ha habilitado el modo rápido para tu organización, el comando `/fast` mostrará "Fast mode has been disabled by your organization."

103</Note>

104 

105### Habilitar el modo rápido para tu organización

106 

107Los administradores pueden habilitar el modo rápido en:

108 

109* **Console** (clientes de API): [Preferencias de Claude Code](https://platform.claude.com/claude-code/preferences)

110* **Claude AI** (Teams y Enterprise): [Admin Settings > Claude Code](https://claude.ai/admin-settings/claude-code)

111 

112Otra opción para desactivar completamente el modo rápido es establecer `CLAUDE_CODE_DISABLE_FAST_MODE=1`. Consulta [Variables de entorno](/es/env-vars).

113 

114### Opción de participación por sesión

115 

116De forma predeterminada, el modo rápido persiste entre sesiones: si un usuario habilita el modo rápido, permanece activado en futuras sesiones. Los administradores en planes [Teams](https://claude.com/pricing?utm_source=claude_code\&utm_medium=docs\&utm_content=fast_mode_teams#team-&-enterprise) o [Enterprise](https://anthropic.com/contact-sales?utm_source=claude_code\&utm_medium=docs\&utm_content=fast_mode_enterprise) pueden evitar esto estableciendo `fastModePerSessionOptIn` en `true` en [configuración administrada](/es/settings#settings-files) o [configuración administrada por servidor](/es/server-managed-settings). Esto hace que cada sesión comience con el modo rápido desactivado, requiriendo que los usuarios lo habiliten explícitamente con `/fast`.

117 

118```json theme={null}

119{

120 "fastModePerSessionOptIn": true

121}

122```

123 

124Esto es útil para controlar costos en organizaciones donde los usuarios ejecutan múltiples sesiones concurrentes. Los usuarios aún pueden habilitar el modo rápido con `/fast` cuando necesiten velocidad, pero se reinicia al inicio de cada nueva sesión. La preferencia del modo rápido del usuario aún se guarda, por lo que eliminar esta configuración restaura el comportamiento persistente predeterminado.

125 

126## Manejar límites de velocidad

127 

128El modo rápido tiene límites de velocidad separados del Opus 4.6 estándar. Cuando alcanzas el límite de velocidad del modo rápido o se agotan tus créditos de uso adicional:

129 

1301. El modo rápido automáticamente vuelve a Opus 4.6 estándar

1312. El icono `↯` se vuelve gris para indicar enfriamiento

1323. Continúas trabajando a velocidad y precios estándar

1334. Cuando expira el enfriamiento, el modo rápido se vuelve a habilitar automáticamente

134 

135Para desactivar el modo rápido manualmente en lugar de esperar el enfriamiento, ejecuta `/fast` nuevamente.

136 

137## Vista previa de investigación

138 

139El modo rápido es una función de vista previa de investigación. Esto significa:

140 

141* La función puede cambiar según los comentarios

142* La disponibilidad y los precios están sujetos a cambios

143* La configuración de API subyacente puede evolucionar

144 

145Reporta problemas o comentarios a través de tus canales de soporte habituales de Anthropic.

146 

147## Ver también

148 

149* [Configuración de modelo](/es/model-config): cambiar modelos y ajustar niveles de esfuerzo

150* [Gestionar costos de manera efectiva](/es/costs): rastrear el uso de tokens y reducir costos

151* [Configuración de línea de estado](/es/statusline): mostrar información de modelo y contexto

features-overview.md +294 −0 created

Details

1> ## Documentation Index

2> Fetch the complete documentation index at: https://code.claude.com/docs/llms.txt

3> Use this file to discover all available pages before exploring further.

4 

5# Extender Claude Code

6 

7> Comprenda cuándo usar CLAUDE.md, Skills, subagents, hooks, MCP y plugins.

8 

9Claude Code combina un modelo que razona sobre su código con [herramientas integradas](/es/how-claude-code-works#tools) para operaciones de archivos, búsqueda, ejecución y acceso web. Las herramientas integradas cubren la mayoría de las tareas de codificación. Esta guía cubre la capa de extensión: características que agrega para personalizar lo que Claude sabe, conectarlo a servicios externos y automatizar flujos de trabajo.

10 

11<Note>

12 Para saber cómo funciona el bucle agentico central, consulte [Cómo funciona Claude Code](/es/how-claude-code-works).

13</Note>

14 

15**¿Nuevo en Claude Code?** Comience con [CLAUDE.md](/es/memory) para convenciones de proyecto. Agregue otras extensiones según sea necesario.

16 

17## Descripción general

18 

19Las extensiones se conectan a diferentes partes del bucle agentico:

20 

21* **[CLAUDE.md](/es/memory)** agrega contexto persistente que Claude ve en cada sesión

22* **[Skills](/es/skills)** agregan conocimiento reutilizable y flujos de trabajo invocables

23* **[MCP](/es/mcp)** conecta Claude a servicios y herramientas externas

24* **[Subagents](/es/sub-agents)** ejecutan sus propios bucles en contexto aislado, devolviendo resúmenes

25* **[Agent teams](/es/agent-teams)** coordinan múltiples sesiones independientes con tareas compartidas y mensajería punto a punto

26* **[Hooks](/es/hooks)** se ejecutan fuera del bucle completamente como scripts deterministas

27* **[Plugins](/es/plugins)** y **[marketplaces](/es/plugin-marketplaces)** empaquetan y distribuyen estas características

28 

29[Skills](/es/skills) son la extensión más flexible. Una skill es un archivo markdown que contiene conocimiento, flujos de trabajo o instrucciones. Puede invocar skills con un comando como `/deploy`, o Claude puede cargarlas automáticamente cuando sea relevante. Las skills pueden ejecutarse en su conversación actual o en un contexto aislado a través de subagents.

30 

31## Hacer coincidir características con su objetivo

32 

33Las características van desde contexto siempre activo que Claude ve en cada sesión, hasta capacidades bajo demanda que usted o Claude pueden invocar, hasta automatización en segundo plano que se ejecuta en eventos específicos. La tabla a continuación muestra qué está disponible y cuándo tiene sentido cada uno.

34 

35| Característica | Qué hace | Cuándo usarlo | Ejemplo |

36| ---------------------------------- | --------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------- |

37| **CLAUDE.md** | Contexto persistente cargado en cada conversación | Convenciones de proyecto, reglas "siempre haz X" | "Usa pnpm, no npm. Ejecuta pruebas antes de hacer commit." |

38| **Skill** | Instrucciones, conocimiento y flujos de trabajo que Claude puede usar | Contenido reutilizable, documentos de referencia, tareas repetibles | `/deploy` ejecuta su lista de verificación de implementación; skill de documentos API con patrones de endpoint |

39| **Subagent** | Contexto de ejecución aislado que devuelve resultados resumidos | Aislamiento de contexto, tareas paralelas, trabajadores especializados | Tarea de investigación que lee muchos archivos pero devuelve solo hallazgos clave |

40| **[Agent teams](/es/agent-teams)** | Coordinar múltiples sesiones independientes de Claude Code | Investigación paralela, desarrollo de nuevas características, depuración con hipótesis competidoras | Generar revisores para verificar seguridad, rendimiento y pruebas simultáneamente |

41| **MCP** | Conectar a servicios externos | Datos o acciones externas | Consultar su base de datos, publicar en Slack, controlar un navegador |

42| **Hook** | Script determinista que se ejecuta en eventos | Automatización predecible, sin LLM involucrado | Ejecutar ESLint después de cada edición de archivo |

43 

44**[Plugins](/es/plugins)** son la capa de empaquetamiento. Un plugin agrupa skills, hooks, subagents y servidores MCP en una única unidad instalable. Las skills de plugin tienen espacios de nombres (como `/my-plugin:review`) para que múltiples plugins puedan coexistir. Use plugins cuando desee reutilizar la misma configuración en múltiples repositorios o distribuir a otros a través de un **[marketplace](/es/plugin-marketplaces)**.

45 

46### Comparar características similares

47 

48Algunas características pueden parecer similares. Aquí se explica cómo distinguirlas.

49 

50<Tabs>

51 <Tab title="Skill vs Subagent">

52 Las skills y los subagents resuelven problemas diferentes:

53 

54 * **Skills** son contenido reutilizable que puede cargar en cualquier contexto

55 * **Subagents** son trabajadores aislados que se ejecutan separadamente de su conversación principal

56 

57 | Aspecto | Skill | Subagent |

58 | ------------------- | ------------------------------------------------------------- | ------------------------------------------------------------------------------ |

59 | **Qué es** | Instrucciones, conocimiento o flujos de trabajo reutilizables | Trabajador aislado con su propio contexto |

60 | **Beneficio clave** | Compartir contenido entre contextos | Aislamiento de contexto. El trabajo ocurre por separado, solo devuelve resumen |

61 | **Mejor para** | Material de referencia, flujos de trabajo invocables | Tareas que leen muchos archivos, trabajo paralelo, trabajadores especializados |

62 

63 **Las skills pueden ser de referencia o acción.** Las skills de referencia proporcionan conocimiento que Claude usa en toda su sesión (como su guía de estilo de API). Las skills de acción le dicen a Claude que haga algo específico (como `/deploy` que ejecuta su flujo de trabajo de implementación).

64 

65 **Use un subagent** cuando necesite aislamiento de contexto o cuando su ventana de contexto se esté llenando. El subagent podría leer docenas de archivos o ejecutar búsquedas extensas, pero su conversación principal solo recibe un resumen. Dado que el trabajo del subagent no consume su contexto principal, esto también es útil cuando no necesita que el trabajo intermedio permanezca visible. Los subagents personalizados pueden tener sus propias instrucciones y pueden precargar skills.

66 

67 **Pueden combinarse.** Un subagent puede precargar skills específicas (campo `skills:`). Una skill puede ejecutarse en contexto aislado usando `context: fork`. Consulte [Skills](/es/skills) para obtener detalles.

68 </Tab>

69 

70 <Tab title="CLAUDE.md vs Skill">

71 Ambos almacenan instrucciones, pero se cargan de manera diferente y sirven propósitos diferentes.

72 

73 | Aspecto | CLAUDE.md | Skill |

74 | ---------------------------------------- | ----------------------------- | ---------------------------------------------------- |

75 | **Se carga** | Cada sesión, automáticamente | Bajo demanda |

76 | **Puede incluir archivos** | Sí, con importaciones `@path` | Sí, con importaciones `@path` |

77 | **Puede desencadenar flujos de trabajo** | No | Sí, con `/<name>` |

78 | **Mejor para** | Reglas "siempre haz X" | Material de referencia, flujos de trabajo invocables |

79 

80 **Póngalo en CLAUDE.md** si Claude siempre debe saberlo: convenciones de codificación, comandos de compilación, estructura del proyecto, reglas "nunca hagas X".

81 

82 **Póngalo en una skill** si es material de referencia que Claude necesita a veces (documentos de API, guías de estilo) o un flujo de trabajo que desencadena con `/<name>` (implementar, revisar, lanzar).

83 

84 **Regla general:** Mantenga CLAUDE.md bajo 200 líneas. Si está creciendo, mueva contenido de referencia a skills o divida en archivos [`.claude/rules/`](/es/memory#organize-rules-with-clauderules).

85 </Tab>

86 

87 <Tab title="CLAUDE.md vs Rules vs Skills">

88 Los tres almacenan instrucciones, pero se cargan de manera diferente:

89 

90 | Aspecto | CLAUDE.md | `.claude/rules/` | Skill |

91 | -------------- | ------------------------------------------------ | ---------------------------------------------------- | ---------------------------------------------------- |

92 | **Se carga** | Cada sesión | Cada sesión, o cuando se abren archivos coincidentes | Bajo demanda, cuando se invoca o es relevante |

93 | **Alcance** | Proyecto completo | Puede estar limitado a rutas de archivo | Específico de tarea |

94 | **Mejor para** | Convenciones y comandos de compilación centrales | Directrices específicas del idioma o directorio | Material de referencia, flujos de trabajo repetibles |

95 

96 **Use CLAUDE.md** para instrucciones que cada sesión necesita: comandos de compilación, convenciones de prueba, arquitectura del proyecto.

97 

98 **Use rules** para mantener CLAUDE.md enfocado. Las rules con [frontmatter `paths`](/es/memory#path-specific-rules) solo se cargan cuando Claude trabaja con archivos coincidentes, ahorrando contexto.

99 

100 **Use skills** para contenido que Claude solo necesita a veces, como documentación de API o una lista de verificación de implementación que desencadena con `/<name>`.

101 </Tab>

102 

103 <Tab title="Subagent vs Agent team">

104 Ambos paralelizan el trabajo, pero son arquitectónicamente diferentes:

105 

106 * **Subagents** se ejecutan dentro de su sesión e informan resultados de vuelta a su contexto principal

107 * **Agent teams** son sesiones independientes de Claude Code que se comunican entre sí

108 

109 | Aspecto | Subagent | Agent team |

110 | ------------------ | --------------------------------------------------------------- | --------------------------------------------------------- |

111 | **Contexto** | Ventana de contexto propia; los resultados regresan al llamador | Ventana de contexto propia; completamente independiente |

112 | **Comunicación** | Informa resultados solo al agente principal | Los compañeros se envían mensajes directamente entre sí |

113 | **Coordinación** | El agente principal gestiona todo el trabajo | Lista de tareas compartida con auto-coordinación |

114 | **Mejor para** | Tareas enfocadas donde solo importa el resultado | Trabajo complejo que requiere discusión y colaboración |

115 | **Costo de token** | Menor: resultados resumidos de vuelta al contexto principal | Mayor: cada compañero es una instancia separada de Claude |

116 

117 **Use un subagent** cuando necesite un trabajador rápido y enfocado: investigar una pregunta, verificar una afirmación, revisar un archivo. El subagent hace el trabajo y devuelve un resumen. Su conversación principal se mantiene limpia.

118 

119 **Use un agent team** cuando los compañeros necesiten compartir hallazgos, desafiarse mutuamente y coordinarse de forma independiente. Los agent teams son mejores para investigación con hipótesis competidoras, revisión de código paralela y desarrollo de nuevas características donde cada compañero posee una pieza separada.

120 

121 **Punto de transición:** Si está ejecutando subagents paralelos pero alcanzando límites de contexto, o si sus subagents necesitan comunicarse entre sí, los agent teams son el siguiente paso natural.

122 

123 <Note>

124 Los agent teams son experimentales y están deshabilitados por defecto. Consulte [agent teams](/es/agent-teams) para configuración y limitaciones actuales.

125 </Note>

126 </Tab>

127 

128 <Tab title="MCP vs Skill">

129 MCP conecta Claude a servicios externos. Las skills extienden lo que Claude sabe, incluyendo cómo usar esos servicios de manera efectiva.

130 

131 | Aspecto | MCP | Skill |

132 | --------------- | ---------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------ |

133 | **Qué es** | Protocolo para conectar a servicios externos | Conocimiento, flujos de trabajo y material de referencia |

134 | **Proporciona** | Acceso a herramientas y datos | Conocimiento, flujos de trabajo, material de referencia |

135 | **Ejemplos** | Integración de Slack, consultas de base de datos, control de navegador | Lista de verificación de revisión de código, flujo de trabajo de implementación, guía de estilo de API |

136 

137 Estos resuelven problemas diferentes y funcionan bien juntos:

138 

139 **MCP** le da a Claude la capacidad de interactuar con sistemas externos. Sin MCP, Claude no puede consultar su base de datos o publicar en Slack.

140 

141 **Skills** le dan a Claude conocimiento sobre cómo usar esas herramientas de manera efectiva, además de flujos de trabajo que puede desencadenar con `/<name>`. Una skill podría incluir el esquema de base de datos de su equipo y patrones de consulta, o un flujo de trabajo `/post-to-slack` con las reglas de formato de mensaje de su equipo.

142 

143 Ejemplo: Un servidor MCP conecta Claude a su base de datos. Una skill enseña a Claude su modelo de datos, patrones de consulta comunes y qué tablas usar para diferentes tareas.

144 </Tab>

145</Tabs>

146 

147### Entender cómo se superponen las características

148 

149Las características se pueden definir en múltiples niveles: en todo el usuario, por proyecto, a través de plugins o mediante políticas administradas. También puede anidar archivos CLAUDE.md en subdirectorios o colocar skills en paquetes específicos de un monorepo. Cuando la misma característica existe en múltiples niveles, así es como se superponen:

150 

151* **Los archivos CLAUDE.md** son aditivos: todos los niveles contribuyen contenido al contexto de Claude simultáneamente. Los archivos de su directorio de trabajo y superior se cargan al iniciar; los subdirectorios se cargan mientras trabaja en ellos. Cuando las instrucciones entran en conflicto, Claude usa el juicio para reconciliarlas, con instrucciones más específicas típicamente teniendo precedencia. Consulte [cómo se cargan los archivos CLAUDE.md](/es/memory#how-claudemd-files-load).

152* **Las skills y subagents** se anulan por nombre: cuando el mismo nombre existe en múltiples niveles, una definición gana según la prioridad (administrado > usuario > proyecto para skills; administrado > bandera CLI > proyecto > usuario > plugin para subagents). Las skills de plugin tienen [espacios de nombres](/es/plugins#add-skills-to-your-plugin) para evitar conflictos. Consulte [descubrimiento de skills](/es/skills#where-skills-live) y [alcance de subagent](/es/sub-agents#choose-the-subagent-scope).

153* **Los servidores MCP** se anulan por nombre: local > proyecto > usuario. Consulte [alcance de MCP](/es/mcp#scope-hierarchy-and-precedence).

154* **Los hooks** se fusionan: todos los hooks registrados se disparan para sus eventos coincidentes independientemente de la fuente. Consulte [hooks](/es/hooks).

155 

156### Combinar características

157 

158Cada extensión resuelve un problema diferente: CLAUDE.md maneja contexto siempre activo, las skills manejan conocimiento bajo demanda y flujos de trabajo, MCP maneja conexiones externas, los subagents manejan aislamiento y los hooks manejan automatización. Las configuraciones reales las combinan según su flujo de trabajo.

159 

160Por ejemplo, podría usar CLAUDE.md para convenciones de proyecto, una skill para su flujo de trabajo de implementación, MCP para conectar a su base de datos y un hook para ejecutar linting después de cada edición. Cada característica maneja lo que hace mejor.

161 

162| Patrón | Cómo funciona | Ejemplo |

163| ---------------------- | ----------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------- |

164| **Skill + MCP** | MCP proporciona la conexión; una skill enseña a Claude cómo usarla bien | MCP se conecta a su base de datos, una skill documenta su esquema y patrones de consulta |

165| **Skill + Subagent** | Una skill genera subagents para trabajo paralelo | La skill `/audit` inicia subagents de seguridad, rendimiento y estilo que trabajan en contexto aislado |

166| **CLAUDE.md + Skills** | CLAUDE.md contiene reglas siempre activas; las skills contienen material de referencia cargado bajo demanda | CLAUDE.md dice "sigue nuestras convenciones de API," una skill contiene la guía de estilo de API completa |

167| **Hook + MCP** | Un hook desencadena acciones externas a través de MCP | El hook post-edición envía una notificación de Slack cuando Claude modifica archivos críticos |

168 

169## Entender costos de contexto

170 

171Cada característica que agrega consume algo del contexto de Claude. Demasiado puede llenar su ventana de contexto, pero también puede agregar ruido que hace que Claude sea menos efectivo; las skills pueden no desencadenarse correctamente, o Claude puede perder de vista sus convenciones. Entender estos compromisos lo ayuda a construir una configuración efectiva.

172 

173### Costo de contexto por característica

174 

175Cada característica tiene una estrategia de carga y costo de contexto diferentes:

176 

177| Característica | Cuándo se carga | Qué se carga | Costo de contexto |

178| ------------------ | -------------------------------- | --------------------------------------------------------- | ----------------------------------------------------- |

179| **CLAUDE.md** | Inicio de sesión | Contenido completo | Cada solicitud |

180| **Skills** | Inicio de sesión + cuando se usa | Descripciones al inicio, contenido completo cuando se usa | Bajo (descripciones cada solicitud)\* |

181| **Servidores MCP** | Inicio de sesión | Todas las definiciones de herramientas y esquemas | Cada solicitud |

182| **Subagents** | Cuando se generan | Contexto fresco con skills especificadas | Aislado de la sesión principal |

183| **Hooks** | Al desencadenar | Nada (se ejecuta externamente) | Cero, a menos que el hook devuelva contexto adicional |

184 

185\*Por defecto, las descripciones de skills se cargan al inicio de sesión para que Claude pueda decidir cuándo usarlas. Establezca `disable-model-invocation: true` en el frontmatter de una skill para ocultarla de Claude completamente hasta que la invoque manualmente. Esto reduce el costo de contexto a cero para las skills que solo desencadena usted mismo.

186 

187### Entender cómo se cargan las características

188 

189Cada característica se carga en diferentes puntos de su sesión. Las pestañas a continuación explican cuándo se carga cada una y qué entra en contexto.

190 

191<img src="https://mintcdn.com/claude-code/6yTCYq1p37ZB8-CQ/images/context-loading.svg?fit=max&auto=format&n=6yTCYq1p37ZB8-CQ&q=85&s=5a58ce953a35a2412892015e2ad6cb67" alt="Carga de contexto: CLAUDE.md y MCP se cargan al inicio de sesión y permanecen en cada solicitud. Las skills cargan descripciones al inicio, contenido completo al invocar. Los subagents obtienen contexto aislado. Los hooks se ejecutan externamente." width="720" height="410" data-path="images/context-loading.svg" />

192 

193<Tabs>

194 <Tab title="CLAUDE.md">

195 **Cuándo:** Inicio de sesión

196 

197 **Qué se carga:** Contenido completo de todos los archivos CLAUDE.md (niveles administrado, usuario y proyecto).

198 

199 **Herencia:** Claude lee archivos CLAUDE.md de su directorio de trabajo hasta la raíz, y descubre los anidados en subdirectorios mientras accede a esos archivos. Consulte [Cómo se cargan los archivos CLAUDE.md](/es/memory#how-claudemd-files-load) para obtener detalles.

200 

201 <Tip>Mantenga CLAUDE.md bajo 200 líneas. Mueva material de referencia a skills, que se cargan bajo demanda.</Tip>

202 </Tab>

203 

204 <Tab title="Skills">

205 Las skills son capacidades adicionales en el kit de herramientas de Claude. Pueden ser material de referencia (como una guía de estilo de API) o flujos de trabajo invocables que desencadena con `/<name>` (como `/deploy`). Claude Code se envía con [skills incluidas](/es/skills#bundled-skills) como `/simplify`, `/batch` y `/debug` que funcionan de inmediato. También puede crear las suyas propias. Claude usa skills cuando es apropiado, o puede invocar una directamente.

206 

207 **Cuándo:** Depende de la configuración de la skill. Por defecto, las descripciones se cargan al inicio de sesión y el contenido completo se carga cuando se usa. Para skills solo de usuario (`disable-model-invocation: true`), nada se carga hasta que las invoque.

208 

209 **Qué se carga:** Para skills invocables por modelo, Claude ve nombres y descripciones en cada solicitud. Cuando invoca una skill con `/<name>` o Claude la carga automáticamente, el contenido completo se carga en su conversación.

210 

211 **Cómo Claude elige skills:** Claude hace coincidir su tarea contra descripciones de skills para decidir cuáles son relevantes. Si las descripciones son vagas u se superponen, Claude puede cargar la skill incorrecta o perder una que ayudaría. Para decirle a Claude que use una skill específica, invóquela con `/<name>`. Las skills con `disable-model-invocation: true` son invisibles para Claude hasta que las invoque.

212 

213 **Costo de contexto:** Bajo hasta que se use. Las skills solo de usuario tienen costo cero hasta que se invoquen.

214 

215 **En subagents:** Las skills funcionan de manera diferente en subagents. En lugar de carga bajo demanda, las skills pasadas a un subagent se precarga completamente en su contexto al iniciar. Los subagents no heredan skills de la sesión principal; debe especificarlas explícitamente.

216 

217 <Tip>Use `disable-model-invocation: true` para skills con efectos secundarios. Esto ahorra contexto y asegura que solo usted las desencadene.</Tip>

218 </Tab>

219 

220 <Tab title="Servidores MCP">

221 **Cuándo:** Inicio de sesión.

222 

223 **Qué se carga:** Todas las definiciones de herramientas y esquemas JSON de servidores conectados.

224 

225 **Costo de contexto:** [Búsqueda de herramientas](/es/mcp#scale-with-mcp-tool-search) (habilitada por defecto) carga herramientas MCP hasta el 10% del contexto y difiere el resto hasta que sea necesario.

226 

227 **Nota de confiabilidad:** Las conexiones MCP pueden fallar silenciosamente a mitad de sesión. Si un servidor se desconecta, sus herramientas desaparecen sin advertencia. Claude puede intentar usar una herramienta que ya no existe. Si nota que Claude no puede usar una herramienta MCP a la que podía acceder anteriormente, verifique la conexión con `/mcp`.

228 

229 <Tip>Ejecute `/mcp` para ver costos de token por servidor. Desconecte servidores que no esté usando activamente.</Tip>

230 </Tab>

231 

232 <Tab title="Subagents">

233 **Cuándo:** Bajo demanda, cuando usted o Claude genera uno para una tarea.

234 

235 **Qué se carga:** Contexto fresco y aislado que contiene:

236 

237 * El prompt del sistema (compartido con el padre para eficiencia de caché)

238 * Contenido completo de skills listadas en el campo `skills:` del agente

239 * CLAUDE.md y estado de git (heredado del padre)

240 * Cualquier contexto que el agente principal pase en el prompt

241 

242 **Costo de contexto:** Aislado de la sesión principal. Los subagents no heredan su historial de conversación o skills invocadas.

243 

244 <Tip>Use subagents para trabajo que no necesita su contexto de conversación completo. Su aislamiento previene inflar su sesión principal.</Tip>

245 </Tab>

246 

247 <Tab title="Hooks">

248 **Cuándo:** Al desencadenar. Los hooks se disparan en eventos de ciclo de vida específicos como ejecución de herramientas, límites de sesión, envío de prompt, solicitudes de permiso y compactación. Consulte [Hooks](/es/hooks) para la lista completa.

249 

250 **Qué se carga:** Nada por defecto. Los hooks se ejecutan como scripts externos.

251 

252 **Costo de contexto:** Cero, a menos que el hook devuelva salida que se agregue como mensajes a su conversación.

253 

254 <Tip>Los hooks son ideales para efectos secundarios (linting, logging) que no necesitan afectar el contexto de Claude.</Tip>

255 </Tab>

256</Tabs>

257 

258## Aprender más

259 

260Cada característica tiene su propia guía con instrucciones de configuración, ejemplos y opciones de configuración.

261 

262<CardGroup cols={2}>

263 <Card title="CLAUDE.md" icon="file-lines" href="/es/memory">

264 Almacenar contexto de proyecto, convenciones e instrucciones

265 </Card>

266 

267 <Card title="Skills" icon="brain" href="/es/skills">

268 Dar a Claude experiencia de dominio y flujos de trabajo reutilizables

269 </Card>

270 

271 <Card title="Subagents" icon="users" href="/es/sub-agents">

272 Descargar trabajo a contexto aislado

273 </Card>

274 

275 <Card title="Agent teams" icon="network" href="/es/agent-teams">

276 Coordinar múltiples sesiones trabajando en paralelo

277 </Card>

278 

279 <Card title="MCP" icon="plug" href="/es/mcp">

280 Conectar Claude a servicios externos

281 </Card>

282 

283 <Card title="Hooks" icon="bolt" href="/es/hooks-guide">

284 Automatizar flujos de trabajo con hooks

285 </Card>

286 

287 <Card title="Plugins" icon="puzzle-piece" href="/es/plugins">

288 Empaquetar y compartir conjuntos de características

289 </Card>

290 

291 <Card title="Marketplaces" icon="store" href="/es/plugin-marketplaces">

292 Alojar y distribuir colecciones de plugins

293 </Card>

294</CardGroup>

fullscreen.md +159 −0 created

Details

1> ## Documentation Index

2> Fetch the complete documentation index at: https://code.claude.com/docs/llms.txt

3> Use this file to discover all available pages before exploring further.

4 

5# Renderizado a pantalla completa

6 

7> Habilite un modo de renderizado más suave y sin parpadeos con soporte de ratón y uso de memoria estable en conversaciones largas.

8 

9<Note>

10 El renderizado a pantalla completa es una [vista previa de investigación](#research-preview) opcional y requiere Claude Code v2.1.89 o posterior. Ejecute `/tui fullscreen` para cambiar en su conversación actual, o establezca `CLAUDE_CODE_NO_FLICKER=1` en versiones anteriores a v2.1.110. El comportamiento puede cambiar según los comentarios.

11</Note>

12 

13El renderizado a pantalla completa es una ruta de renderizado alternativa para la CLI de Claude Code que elimina el parpadeo, mantiene el uso de memoria plano en conversaciones largas y añade soporte de ratón. Dibuja la interfaz en el búfer de pantalla alternativa de la terminal, como `vim` o `htop`, y solo renderiza los mensajes que están actualmente visibles. Esto reduce la cantidad de datos enviados a su terminal en cada actualización.

14 

15La diferencia es más notable en emuladores de terminal donde el rendimiento de renderizado es el cuello de botella, como la terminal integrada de VS Code, tmux e iTerm2. Si su posición de desplazamiento de terminal salta a la parte superior mientras Claude está trabajando, o la pantalla parpadea mientras la salida de herramientas se transmite, este modo aborda esos problemas.

16 

17<Note>

18 El término pantalla completa describe cómo Claude Code se apodera de la superficie de dibujo de la terminal, de la manera que lo hace `vim`. No tiene nada que ver con maximizar su ventana de terminal, y funciona en cualquier tamaño de ventana.

19</Note>

20 

21## Habilitar renderizado a pantalla completa

22 

23Ejecute `/tui fullscreen` dentro de cualquier conversación de Claude Code. La CLI guarda la [configuración `tui`](/es/settings#available-settings) y se reinicia en pantalla completa con su conversación intacta, por lo que puede cambiar a mitad de sesión sin perder contexto. Ejecute `/tui` sin argumentos para imprimir qué renderizador está activo.

24 

25También puede establecer la variable de entorno `CLAUDE_CODE_NO_FLICKER` antes de iniciar Claude Code:

26 

27```bash theme={null}

28CLAUDE_CODE_NO_FLICKER=1 claude

29```

30 

31La configuración `tui` y la variable de entorno son equivalentes. El comando `/tui` borra `CLAUDE_CODE_NO_FLICKER` del proceso reiniciado para que la configuración que escribe tenga efecto.

32 

33## Qué cambia

34 

35El renderizado a pantalla completa cambia cómo la CLI dibuja en su terminal. El cuadro de entrada permanece fijo en la parte inferior de la pantalla en lugar de moverse mientras la salida se transmite. Si la entrada permanece en su lugar mientras Claude está trabajando, el renderizado a pantalla completa está activo. Solo los mensajes visibles se mantienen en el árbol de renderizado, por lo que la memoria permanece constante independientemente de la longitud de la conversación.

36 

37Debido a que la conversación vive en el búfer de pantalla alternativa en lugar del desplazamiento de su terminal, algunas cosas funcionan de manera diferente:

38 

39| Antes | Ahora | Detalles |

40| :-------------------------------------------------------------- | :-------------------------------------------------------------------------------------------------- | :---------------------------------------------------------------------- |

41| `Cmd+f` o búsqueda de tmux para encontrar texto | `Ctrl+o` para modo de transcripción, luego `/` para buscar o `[` para escribir en el desplazamiento | [Buscar y revisar la conversación](#search-and-review-the-conversation) |

42| Clic y arrastre nativo de la terminal para seleccionar y copiar | Selección en la aplicación, se copia automáticamente al soltar el ratón | [Usar el ratón](#use-the-mouse) |

43| `Cmd`-clic para abrir una URL | Haga clic en la URL | [Usar el ratón](#use-the-mouse) |

44 

45Si la captura de ratón interfiere con su flujo de trabajo, puede [desactivarla](#keep-native-text-selection) mientras mantiene el renderizado sin parpadeos.

46 

47## Usar el ratón

48 

49El renderizado a pantalla completa captura eventos de ratón y los maneja dentro de Claude Code:

50 

51* **Haga clic en la entrada del indicador** para posicionar su cursor en cualquier lugar del texto que está escribiendo.

52* **Haga clic en un resultado de herramienta contraído** para expandirlo y ver la salida completa. Haga clic nuevamente para contraerlo. La llamada de herramienta y su resultado se expanden juntos. Solo los mensajes que tienen más para mostrar son clicables.

53* **Haga clic en una URL o ruta de archivo** para abrirla. Las rutas de archivo en la salida de herramientas, como las impresas después de una edición o escritura, se abren en su aplicación predeterminada. Las URLs simples `http://` y `https://` se abren en su navegador. En la mayoría de terminales, esto reemplaza el `Cmd`-clic o `Ctrl`-clic nativo, que la captura de ratón intercepta. En la terminal integrada de VS Code y terminales similares basadas en xterm.js, continúe usando `Cmd`-clic. Claude Code se remite al manejador de enlaces propio de la terminal para evitar abrir enlaces dos veces.

54* **Haga clic y arrastre** para seleccionar texto en cualquier lugar de la conversación. El doble clic selecciona una palabra, coincidiendo con los límites de palabras de iTerm2 para que una ruta de archivo se seleccione como una unidad. El triple clic selecciona la línea.

55* **Desplácese con la rueda del ratón** para moverse a través de la conversación.

56 

57El texto seleccionado se copia a su portapapeles automáticamente al soltar el ratón. Para desactivar esto, alterne Copiar al seleccionar en `/config`. Con esto desactivado, presione `Ctrl+Shift+c` para copiar manualmente. En terminales que admiten el protocolo de teclado kitty, como kitty, WezTerm, Ghostty e iTerm2, `Cmd+c` también funciona. Si tiene una selección activa, `Ctrl+c` copia en lugar de cancelar.

58 

59Con una selección activa, mantenga presionada `Shift` y presione las teclas de flecha para extenderla desde el teclado. `Shift+↑` y `Shift+↓` desplazan la ventana gráfica cuando la selección alcanza el borde superior o inferior. `Shift+Home` y `Shift+End` extienden hasta el inicio o final de la línea actual.

60 

61## Desplazarse por la conversación

62 

63El renderizado a pantalla completa maneja el desplazamiento dentro de la aplicación. Use estos atajos de teclado para navegar:

64 

65| Atajo de teclado | Acción |

66| :--------------- | :------------------------------------------------------------- |

67| `PgUp` / `PgDn` | Desplazarse hacia arriba o hacia abajo media pantalla |

68| `Ctrl+Home` | Saltar al inicio de la conversación |

69| `Ctrl+End` | Saltar al último mensaje y reactivar el seguimiento automático |

70| Rueda del ratón | Desplazarse algunas líneas a la vez |

71 

72En teclados sin teclas dedicadas `PgUp`, `PgDn`, `Home` o `End`, como teclados de MacBook, mantenga presionada `Fn` con las teclas de flecha: `Fn+↑` envía `PgUp`, `Fn+↓` envía `PgDn`, `Fn+←` envía `Home`, y `Fn+→` envía `End`. Eso hace que `Ctrl+Fn+→` sea el atajo de teclado para saltar al final. Si eso se siente incómodo, desplácese hacia abajo con la rueda del ratón para reanudar el seguimiento, o reenlace `scroll:bottom` a algo accesible.

73 

74Estas acciones se pueden reenlazar. Consulte [Acciones de desplazamiento](/es/keybindings#scroll-actions) para obtener la lista completa de nombres de acciones, incluidas variantes de media página y página completa que no tienen enlace predeterminado.

75 

76### Seguimiento automático

77 

78El desplazamiento hacia arriba pausa el seguimiento automático para que la nueva salida no lo devuelva al final. Presione `Ctrl+End` o desplácese hacia abajo para reanudar el seguimiento.

79 

80Para desactivar completamente el seguimiento automático para que la vista permanezca donde la deje, abra `/config` y establezca Desplazamiento automático en desactivado. Con el desplazamiento automático desactivado, la vista nunca salta al final por sí sola. Los avisos de permiso y otros diálogos que necesitan una respuesta aún se desplazan a la vista independientemente de esta configuración.

81 

82### Desplazamiento de la rueda del ratón

83 

84El desplazamiento de la rueda del ratón requiere que su terminal reenvíe eventos de ratón a Claude Code. La mayoría de terminales hacen esto siempre que una aplicación lo solicite. iTerm2 lo convierte en una configuración por perfil: si la rueda no hace nada pero `PgUp` y `PgDn` funcionan, abra Configuración → Perfiles → Terminal y active Habilitar informe de ratón. La misma configuración también es necesaria para que funcionen el clic para expandir y la selección de texto.

85 

86Si el desplazamiento de la rueda del ratón se siente lento, su terminal puede estar enviando un evento de desplazamiento por muesca física sin multiplicador. Algunas terminales, como Ghostty e iTerm2 con desplazamiento más rápido habilitado, ya amplifican eventos de rueda. Otros, incluida la terminal integrada de VS Code, envían exactamente un evento por muesca. Claude Code no puede detectar cuál.

87 

88Establezca `CLAUDE_CODE_SCROLL_SPEED` para multiplicar la distancia de desplazamiento base:

89 

90```bash theme={null}

91export CLAUDE_CODE_SCROLL_SPEED=3

92```

93 

94Un valor de `3` coincide con el predeterminado en `vim` y aplicaciones similares. La configuración acepta valores de 1 a 20.

95 

96## Buscar y revisar la conversación

97 

98`Ctrl+o` alterna entre el indicador normal y el modo de transcripción. Para una vista más tranquila que muestre solo su último indicador, un resumen de una línea de llamadas de herramientas con estadísticas de diferencias de edición y la respuesta final, ejecute `/focus`. La configuración persiste entre sesiones. Ejecute `/focus` nuevamente para desactivarla.

99 

100El modo de transcripción gana navegación y búsqueda de estilo `less`:

101 

102| Tecla | Acción |

103| :---------------------------------- | :---------------------------------------------------------------------------------------------------------------------------------------- |

104| `/` | Abrir búsqueda. Escriba para encontrar coincidencias, `Enter` para aceptar, `Esc` para cancelar y restaurar su posición de desplazamiento |

105| `n` / `N` | Saltar a la siguiente o anterior coincidencia. Funciona después de cerrar la barra de búsqueda |

106| `j` / `k` o `↑` / `↓` | Desplazarse una línea |

107| `g` / `G` o `Home` / `End` | Saltar al inicio o final |

108| `Ctrl+u` / `Ctrl+d` | Desplazarse media página |

109| `Ctrl+b` / `Ctrl+f` o `Space` / `b` | Desplazarse una página completa |

110| `Ctrl+o`, `Esc`, o `q` | Salir del modo de transcripción y volver al indicador |

111 

112El `Cmd+f` de su terminal y la búsqueda de tmux no ven la conversación porque vive en el búfer de pantalla alternativa, no en el desplazamiento nativo. Para devolver el contenido a su terminal, presione `Ctrl+o` para entrar en modo de transcripción primero, luego:

113 

114* **`[`**: escribe la conversación completa en el búfer de desplazamiento nativo de su terminal, con toda la salida de herramientas expandida. La conversación es ahora texto ordinario en su terminal, por lo que `Cmd+f`, modo de copia de tmux y cualquier otra herramienta nativa pueden buscar o seleccionarla. Las sesiones largas pueden pausarse por un momento mientras esto sucede. Esto dura hasta que salga del modo de transcripción con `Esc` o `q`, que lo devuelve al renderizado a pantalla completa. El siguiente `Ctrl+o` comienza de nuevo.

115* **`v`**: escribe la conversación en un archivo temporal y la abre en `$VISUAL` o `$EDITOR`.

116 

117Presione `Esc` o `q` para volver al indicador.

118 

119## Limpiar la conversación

120 

121Presione `Ctrl+L` dos veces dentro de dos segundos para ejecutar `/clear` e iniciar una nueva conversación. El primer pulso redibuja la pantalla y muestra una sugerencia; el segundo pulso borra la conversación. En macOS, presionar dos veces `Cmd+K` también ejecuta `/clear`.

122 

123## Usar con tmux

124 

125El renderizado a pantalla completa funciona dentro de tmux, con dos advertencias.

126 

127El desplazamiento de la rueda del ratón requiere el modo de ratón de tmux. Si su `~/.tmux.conf` no lo habilita ya, agregue esta línea y recargue su configuración:

128 

129```bash theme={null}

130set -g mouse on

131```

132 

133Sin modo de ratón, los eventos de rueda van a tmux en lugar de Claude Code. El desplazamiento de teclado con `PgUp` y `PgDn` funciona de cualquier manera. Claude Code imprime una sugerencia única al inicio si detecta tmux con modo de ratón desactivado.

134 

135El renderizado a pantalla completa es incompatible con el modo de integración de tmux de iTerm2, que es el modo en el que entra con `tmux -CC`. En modo de integración, iTerm2 renderiza cada panel de tmux como una división nativa en lugar de permitir que tmux dibuje en la terminal. El búfer de pantalla alternativa y el seguimiento de ratón no funcionan correctamente allí: la rueda del ratón no hace nada, y el doble clic puede corromper el estado de la terminal. No habilite el renderizado a pantalla completa en sesiones `tmux -CC`. El tmux regular dentro de iTerm2, sin `-CC`, funciona bien.

136 

137## Mantener la selección de texto nativa

138 

139La captura de ratón es el punto de fricción más común, especialmente sobre SSH o dentro de tmux. Cuando Claude Code captura eventos de ratón, la copia nativa al seleccionar de su terminal deja de funcionar. La selección que realiza con clic y arrastre existe dentro de Claude Code, no en el búfer de selección de su terminal, por lo que el modo de copia de tmux, sugerencias de Kitty y herramientas similares no la ven.

140 

141Claude Code intenta escribir la selección en su portapapeles, pero la ruta que utiliza depende de su configuración. Dentro de tmux escribe en el búfer de pegado de tmux. Sobre SSH se vuelve a secuencias de escape OSC 52, que algunos terminales bloquean de forma predeterminada. iTerm2 las bloquea hasta que active Configuración → General → Selección → Las aplicaciones en el terminal pueden acceder al portapapeles. Ejecutar [`/terminal-setup`](/es/terminal-config) en iTerm2 habilita esto para usted. Claude Code imprime un aviso después de cada copia diciéndole qué ruta utilizó.

142 

143Para una selección nativa puntual, mantenga presionado el modificador de omisión de su terminal mientras hace clic y arrastra: `Option` en iTerm2, o `Shift` en la mayoría de terminales de Linux y Windows. El modificador le indica a su terminal que maneje la selección por sí mismo en lugar de reenviar eventos de ratón a Claude Code, por lo que `Cmd+C` y otros atajos de copia de su terminal funcionan en ella.

144 

145Si confía en la selección nativa todo el tiempo, establezca `CLAUDE_CODE_DISABLE_MOUSE=1` para optar por no participar en la captura de ratón mientras mantiene el renderizado sin parpadeos y la memoria plana:

146 

147```bash theme={null}

148CLAUDE_CODE_NO_FLICKER=1 CLAUDE_CODE_DISABLE_MOUSE=1 claude

149```

150 

151Con la captura de ratón desactivada, el desplazamiento de teclado con `PgUp`, `PgDn`, `Ctrl+Home` y `Ctrl+End` aún funciona, y su terminal maneja la selección de forma nativa. Pierde clic para posicionar el cursor, clic para expandir la salida de herramientas, clic en URL y desplazamiento de rueda dentro de Claude Code.

152 

153## Vista previa de investigación

154 

155El renderizado a pantalla completa es una característica de vista previa de investigación. Ha sido probado en emuladores de terminal comunes, pero puede encontrar problemas de renderizado en terminales menos comunes o configuraciones inusuales.

156 

157Si encuentra un problema, ejecute `/feedback` dentro de Claude Code para reportarlo, o abra un problema en el [repositorio de GitHub de claude-code](https://github.com/anthropics/claude-code/issues). Incluya el nombre y la versión de su emulador de terminal.

158 

159Para desactivar el renderizado a pantalla completa, ejecute `/tui default`, o desestablezca la variable de entorno si la habilitó de esa manera.

github-actions.md +670 −0 created

Details

1> ## Documentation Index

2> Fetch the complete documentation index at: https://code.claude.com/docs/llms.txt

3> Use this file to discover all available pages before exploring further.

4 

5# Claude Code GitHub Actions

6 

7> Aprenda a integrar Claude Code en su flujo de trabajo de desarrollo con Claude Code GitHub Actions

8 

9Claude Code GitHub Actions trae automatización impulsada por IA a su flujo de trabajo de GitHub. Con una simple mención `@claude` en cualquier PR o problema, Claude puede analizar su código, crear solicitudes de extracción, implementar características y corregir errores, todo mientras sigue los estándares de su proyecto. Para revisiones automáticas publicadas en cada PR sin un disparador, consulte [GitHub Code Review](/es/code-review).

10 

11<Note>

12 Claude Code GitHub Actions se construye sobre el [Claude Agent SDK](/es/agent-sdk/overview), que permite la integración programática de Claude Code en sus aplicaciones. Puede usar el SDK para crear flujos de trabajo de automatización personalizados más allá de GitHub Actions.

13</Note>

14 

15<Info>

16 **Claude Opus 4.7 ya está disponible.** Claude Code GitHub Actions utiliza Sonnet de forma predeterminada. Para usar Opus 4.7, configure el [parámetro de modelo](#breaking-changes-reference) para usar `claude-opus-4-7`.

17</Info>

18 

19## ¿Por qué usar Claude Code GitHub Actions?

20 

21* **Creación instantánea de PR**: Describa lo que necesita y Claude crea un PR completo con todos los cambios necesarios

22* **Implementación de código automatizada**: Convierta problemas en código funcional con un único comando

23* **Sigue sus estándares**: Claude respeta sus directrices `CLAUDE.md` y patrones de código existentes

24* **Configuración simple**: Comience en minutos con nuestro instalador y clave API

25* **Seguro por defecto**: Su código permanece en los ejecutores de Github

26 

27## ¿Qué puede hacer Claude?

28 

29Claude Code proporciona una poderosa GitHub Action que transforma la forma en que trabaja con código:

30 

31### Claude Code Action

32 

33Esta GitHub Action le permite ejecutar Claude Code dentro de sus flujos de trabajo de GitHub Actions. Puede usar esto para crear cualquier flujo de trabajo personalizado sobre Claude Code.

34 

35[Ver repositorio →](https://github.com/anthropics/claude-code-action)

36 

37## Configuración

38 

39## Configuración rápida

40 

41La forma más fácil de configurar esta acción es a través de Claude Code en la terminal. Solo abra claude y ejecute `/install-github-app`.

42 

43Este comando lo guiará a través de la configuración de la aplicación de GitHub y los secretos requeridos.

44 

45<Note>

46 * Debe ser administrador del repositorio para instalar la aplicación de GitHub y agregar secretos

47 * La aplicación de GitHub solicitará permisos de lectura y escritura para Contenidos, Problemas y Solicitudes de extracción

48 * Este método de inicio rápido solo está disponible para usuarios directos de Claude API. Si está usando Amazon Bedrock o Google Vertex AI, consulte la sección [Usar con Amazon Bedrock y Google Vertex AI](#using-with-amazon-bedrock-%26-google-vertex-ai).

49</Note>

50 

51## Configuración manual

52 

53Si el comando `/install-github-app` falla o prefiere la configuración manual, siga estas instrucciones de configuración manual:

54 

551. **Instale la aplicación de GitHub de Claude** en su repositorio: [https://github.com/apps/claude](https://github.com/apps/claude)

56 

57 La aplicación de GitHub de Claude requiere los siguientes permisos de repositorio:

58 

59 * **Contenidos**: Lectura y escritura (para modificar archivos del repositorio)

60 * **Problemas**: Lectura y escritura (para responder a problemas)

61 * **Solicitudes de extracción**: Lectura y escritura (para crear PR e insertar cambios)

62 

63 Para más detalles sobre seguridad y permisos, consulte la [documentación de seguridad](https://github.com/anthropics/claude-code-action/blob/main/docs/security.md).

642. **Agregue ANTHROPIC\_API\_KEY** a sus secretos del repositorio ([Aprenda cómo usar secretos en GitHub Actions](https://docs.github.com/en/actions/security-guides/using-secrets-in-github-actions))

653. **Copie el archivo de flujo de trabajo** de [examples/claude.yml](https://github.com/anthropics/claude-code-action/blob/main/examples/claude.yml) en el directorio `.github/workflows/` de su repositorio

66 

67<Tip>

68 Después de completar la configuración rápida o manual, pruebe la acción etiquetando `@claude` en un comentario de problema o PR.

69</Tip>

70 

71## Actualización desde Beta

72 

73<Warning>

74 Claude Code GitHub Actions v1.0 introduce cambios importantes que requieren actualizar sus archivos de flujo de trabajo para actualizar a v1.0 desde la versión beta.

75</Warning>

76 

77Si actualmente está usando la versión beta de Claude Code GitHub Actions, le recomendamos que actualice sus flujos de trabajo para usar la versión GA. La nueva versión simplifica la configuración mientras agrega características poderosas como la detección automática de modo.

78 

79### Cambios esenciales

80 

81Todos los usuarios de beta deben hacer estos cambios en sus archivos de flujo de trabajo para actualizar:

82 

831. **Actualice la versión de la acción**: Cambie `@beta` a `@v1`

842. **Elimine la configuración de modo**: Elimine `mode: "tag"` o `mode: "agent"` (ahora se detecta automáticamente)

853. **Actualice las entradas de solicitud**: Reemplace `direct_prompt` con `prompt`

864. **Mueva opciones de CLI**: Convierta `max_turns`, `model`, `custom_instructions`, etc. a `claude_args`

87 

88### Referencia de cambios importantes

89 

90| Entrada Beta antigua | Nueva entrada v1.0 |

91| --------------------- | ------------------------------------------ |

92| `mode` | *(Eliminado - se detecta automáticamente)* |

93| `direct_prompt` | `prompt` |

94| `override_prompt` | `prompt` con variables de GitHub |

95| `custom_instructions` | `claude_args: --append-system-prompt` |

96| `max_turns` | `claude_args: --max-turns` |

97| `model` | `claude_args: --model` |

98| `allowed_tools` | `claude_args: --allowedTools` |

99| `disallowed_tools` | `claude_args: --disallowedTools` |

100| `claude_env` | `settings` formato JSON |

101 

102### Ejemplo antes y después

103 

104**Versión beta:**

105 

106```yaml theme={null}

107- uses: anthropics/claude-code-action@beta

108 with:

109 mode: "tag"

110 direct_prompt: "Review this PR for security issues"

111 anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }}

112 custom_instructions: "Follow our coding standards"

113 max_turns: "10"

114 model: "claude-sonnet-4-6"

115```

116 

117**Versión GA (v1.0):**

118 

119```yaml theme={null}

120- uses: anthropics/claude-code-action@v1

121 with:

122 prompt: "Review this PR for security issues"

123 anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }}

124 claude_args: |

125 --append-system-prompt "Follow our coding standards"

126 --max-turns 10

127 --model claude-sonnet-4-6

128```

129 

130<Tip>

131 La acción ahora detecta automáticamente si ejecutar en modo interactivo (responde a menciones `@claude`) o modo de automatización (se ejecuta inmediatamente con un solicitud) según su configuración.

132</Tip>

133 

134## Casos de uso de ejemplo

135 

136Claude Code GitHub Actions puede ayudarle con una variedad de tareas. El [directorio de ejemplos](https://github.com/anthropics/claude-code-action/tree/main/examples) contiene flujos de trabajo listos para usar para diferentes escenarios.

137 

138### Flujo de trabajo básico

139 

140```yaml theme={null}

141name: Claude Code

142on:

143 issue_comment:

144 types: [created]

145 pull_request_review_comment:

146 types: [created]

147jobs:

148 claude:

149 runs-on: ubuntu-latest

150 steps:

151 - uses: anthropics/claude-code-action@v1

152 with:

153 anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }}

154 # Responds to @claude mentions in comments

155```

156 

157### Usar skills

158 

159```yaml theme={null}

160name: Code Review

161on:

162 pull_request:

163 types: [opened, synchronize]

164jobs:

165 review:

166 runs-on: ubuntu-latest

167 steps:

168 - uses: anthropics/claude-code-action@v1

169 with:

170 anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }}

171 prompt: "Review this pull request for code quality, correctness, and security. Analyze the diff, then post your findings as review comments."

172 claude_args: "--max-turns 5"

173```

174 

175### Automatización personalizada con solicitudes

176 

177```yaml theme={null}

178name: Daily Report

179on:

180 schedule:

181 - cron: "0 9 * * *"

182jobs:

183 report:

184 runs-on: ubuntu-latest

185 steps:

186 - uses: anthropics/claude-code-action@v1

187 with:

188 anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }}

189 prompt: "Generate a summary of yesterday's commits and open issues"

190 claude_args: "--model opus"

191```

192 

193### Casos de uso comunes

194 

195En comentarios de problema o PR:

196 

197```text theme={null}

198@claude implement this feature based on the issue description

199@claude how should I implement user authentication for this endpoint?

200@claude fix the TypeError in the user dashboard component

201```

202 

203Claude analizará automáticamente el contexto y responderá apropiadamente.

204 

205## Mejores prácticas

206 

207### Configuración de CLAUDE.md

208 

209Cree un archivo `CLAUDE.md` en la raíz de su repositorio para definir directrices de estilo de código, criterios de revisión, reglas específicas del proyecto y patrones preferidos. Este archivo guía la comprensión de Claude de los estándares de su proyecto.

210 

211### Consideraciones de seguridad

212 

213<Warning>Nunca confirme claves API directamente en su repositorio.</Warning>

214 

215Para una guía de seguridad completa que incluya permisos, autenticación y mejores prácticas, consulte la [documentación de seguridad de Claude Code Action](https://github.com/anthropics/claude-code-action/blob/main/docs/security.md).

216 

217Siempre use GitHub Secrets para claves API:

218 

219* Agregue su clave API como un secreto del repositorio llamado `ANTHROPIC_API_KEY`

220* Haga referencia a él en flujos de trabajo: `anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }}`

221* Limite los permisos de acción solo a lo necesario

222* Revise las sugerencias de Claude antes de fusionar

223 

224Siempre use GitHub Secrets (por ejemplo, `${{ secrets.ANTHROPIC_API_KEY }}`) en lugar de codificar claves API directamente en sus archivos de flujo de trabajo.

225 

226### Optimización del rendimiento

227 

228Use plantillas de problemas para proporcionar contexto, mantenga su `CLAUDE.md` conciso y enfocado, y configure tiempos de espera apropiados para sus flujos de trabajo.

229 

230### Costos de CI

231 

232Al usar Claude Code GitHub Actions, tenga en cuenta los costos asociados:

233 

234**Costos de GitHub Actions:**

235 

236* Claude Code se ejecuta en ejecutores alojados en GitHub, que consumen sus minutos de GitHub Actions

237* Consulte la [documentación de facturación de GitHub](https://docs.github.com/en/billing/managing-billing-for-your-products/managing-billing-for-github-actions/about-billing-for-github-actions) para obtener detalles de precios y límites de minutos

238 

239**Costos de API:**

240 

241* Cada interacción de Claude consume tokens de API según la longitud de solicitudes y respuestas

242* El uso de tokens varía según la complejidad de la tarea y el tamaño de la base de código

243* Consulte la [página de precios de Claude](https://claude.com/platform/api) para obtener las tasas de tokens actuales

244 

245**Consejos de optimización de costos:**

246 

247* Use comandos específicos `@claude` para reducir llamadas API innecesarias

248* Configure `--max-turns` apropiado en `claude_args` para evitar iteraciones excesivas

249* Establezca tiempos de espera a nivel de flujo de trabajo para evitar trabajos descontrolados

250* Considere usar controles de concurrencia de GitHub para limitar ejecuciones paralelas

251 

252## Ejemplos de configuración

253 

254Claude Code Action v1 simplifica la configuración con parámetros unificados:

255 

256```yaml theme={null}

257- uses: anthropics/claude-code-action@v1

258 with:

259 anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }}

260 prompt: "Your instructions here" # Optional

261 claude_args: "--max-turns 5" # Optional CLI arguments

262```

263 

264Características clave:

265 

266* **Interfaz de solicitud unificada** - Use `prompt` para todas las instrucciones

267* **Skills** - Invoque [skills](/es/skills) instalados directamente desde la solicitud

268* **Paso de CLI** - Cualquier argumento de CLI de Claude Code a través de `claude_args`

269* **Disparadores flexibles** - Funciona con cualquier evento de GitHub

270 

271Visite el [directorio de ejemplos](https://github.com/anthropics/claude-code-action/tree/main/examples) para archivos de flujo de trabajo completos.

272 

273<Tip>

274 Al responder a comentarios de problema o PR, Claude responde automáticamente a menciones @claude. Para otros eventos, use el parámetro `prompt` para proporcionar instrucciones.

275</Tip>

276 

277## Usar con Amazon Bedrock y Google Vertex AI

278 

279Para entornos empresariales, puede usar Claude Code GitHub Actions con su propia infraestructura en la nube. Este enfoque le da control sobre la residencia de datos y la facturación mientras mantiene la misma funcionalidad.

280 

281### Requisitos previos

282 

283Antes de configurar Claude Code GitHub Actions con proveedores en la nube, necesita:

284 

285#### Para Google Cloud Vertex AI:

286 

2871. Un proyecto de Google Cloud con Vertex AI habilitado

2882. Federación de identidad de carga de trabajo configurada para GitHub Actions

2893. Una cuenta de servicio con los permisos requeridos

2904. Una aplicación de GitHub (recomendado) o use el GITHUB\_TOKEN predeterminado

291 

292#### Para Amazon Bedrock:

293 

2941. Una cuenta de AWS con Amazon Bedrock habilitado

2952. Proveedor de identidad OIDC de GitHub configurado en AWS

2963. Un rol de IAM con permisos de Bedrock

2974. Una aplicación de GitHub (recomendado) o use el GITHUB\_TOKEN predeterminado

298 

299<Steps>

300 <Step title="Crear una aplicación de GitHub personalizada (Recomendado para proveedores de terceros)">

301 Para el mejor control y seguridad al usar proveedores de terceros como Vertex AI o Bedrock, le recomendamos crear su propia aplicación de GitHub:

302 

303 1. Vaya a [https://github.com/settings/apps/new](https://github.com/settings/apps/new)

304 2. Complete la información básica:

305 * **Nombre de la aplicación de GitHub**: Elija un nombre único (por ejemplo, "YourOrg Claude Assistant")

306 * **URL de inicio**: El sitio web de su organización o la URL del repositorio

307 3. Configure los ajustes de la aplicación:

308 * **Webhooks**: Desmarque "Activo" (no es necesario para esta integración)

309 4. Establezca los permisos requeridos:

310 * **Permisos del repositorio**:

311 * Contenidos: Lectura y escritura

312 * Problemas: Lectura y escritura

313 * Solicitudes de extracción: Lectura y escritura

314 5. Haga clic en "Crear aplicación de GitHub"

315 6. Después de la creación, haga clic en "Generar una clave privada" y guarde el archivo `.pem` descargado

316 7. Anote su ID de aplicación en la página de configuración de la aplicación

317 8. Instale la aplicación en su repositorio:

318 * Desde la página de configuración de su aplicación, haga clic en "Instalar aplicación" en la barra lateral izquierda

319 * Seleccione su cuenta u organización

320 * Elija "Solo repositorios seleccionados" y seleccione el repositorio específico

321 * Haga clic en "Instalar"

322 9. Agregue la clave privada como un secreto a su repositorio:

323 * Vaya a Configuración de su repositorio → Secretos y variables → Acciones

324 * Cree un nuevo secreto llamado `APP_PRIVATE_KEY` con el contenido del archivo `.pem`

325 10. Agregue el ID de la aplicación como un secreto:

326 

327 * Cree un nuevo secreto llamado `APP_ID` con el ID de su aplicación de GitHub

328 

329 <Note>

330 Esta aplicación se usará con la acción [actions/create-github-app-token](https://github.com/actions/create-github-app-token) para generar tokens de autenticación en sus flujos de trabajo.

331 </Note>

332 

333 **Alternativa para Claude API o si no desea configurar su propia aplicación de Github**: Use la aplicación oficial de Anthropic:

334 

335 1. Instale desde: [https://github.com/apps/claude](https://github.com/apps/claude)

336 2. No se requiere configuración adicional para autenticación

337 </Step>

338 

339 <Step title="Configurar autenticación del proveedor en la nube">

340 Elija su proveedor en la nube y configure autenticación segura:

341 

342 <AccordionGroup>

343 <Accordion title="Amazon Bedrock">

344 **Configure AWS para permitir que GitHub Actions se autentique de forma segura sin almacenar credenciales.**

345 

346 > **Nota de seguridad**: Use configuraciones específicas del repositorio y otorgue solo los permisos mínimos requeridos.

347 

348 **Configuración requerida**:

349 

350 1. **Habilitar Amazon Bedrock**:

351 * Solicite acceso a modelos de Claude en Amazon Bedrock

352 * Para modelos entre regiones, solicite acceso en todas las regiones requeridas

353 

354 2. **Configurar proveedor de identidad OIDC de GitHub**:

355 * URL del proveedor: `https://token.actions.githubusercontent.com`

356 * Audiencia: `sts.amazonaws.com`

357 

358 3. **Crear rol de IAM para GitHub Actions**:

359 * Tipo de entidad de confianza: Identidad web

360 * Proveedor de identidad: `token.actions.githubusercontent.com`

361 * Permisos: política `AmazonBedrockFullAccess`

362 * Configurar política de confianza para su repositorio específico

363 

364 **Valores requeridos**:

365 

366 Después de la configuración, necesitará:

367 

368 * **AWS\_ROLE\_TO\_ASSUME**: El ARN del rol de IAM que creó

369 

370 <Tip>

371 OIDC es más seguro que usar claves de acceso estáticas de AWS porque las credenciales son temporales y se rotan automáticamente.

372 </Tip>

373 

374 Consulte la [documentación de AWS](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_providers_create_oidc.html) para obtener instrucciones detalladas de configuración de OIDC.

375 </Accordion>

376 

377 <Accordion title="Google Vertex AI">

378 **Configure Google Cloud para permitir que GitHub Actions se autentique de forma segura sin almacenar credenciales.**

379 

380 > **Nota de seguridad**: Use configuraciones específicas del repositorio y otorgue solo los permisos mínimos requeridos.

381 

382 **Configuración requerida**:

383 

384 1. **Habilitar APIs** en su proyecto de Google Cloud:

385 * API de credenciales de IAM

386 * API de servicio de token de seguridad (STS)

387 * API de Vertex AI

388 

389 2. **Crear recursos de Federación de identidad de carga de trabajo**:

390 * Crear un grupo de identidad de carga de trabajo

391 * Agregar un proveedor OIDC de GitHub con:

392 * Emisor: `https://token.actions.githubusercontent.com`

393 * Asignaciones de atributos para repositorio y propietario

394 * **Recomendación de seguridad**: Use condiciones de atributo específicas del repositorio

395 

396 3. **Crear una cuenta de servicio**:

397 * Otorgue solo el rol `Vertex AI User`

398 * **Recomendación de seguridad**: Cree una cuenta de servicio dedicada por repositorio

399 

400 4. **Configurar enlaces de IAM**:

401 * Permitir que el grupo de identidad de carga de trabajo suplante la cuenta de servicio

402 * **Recomendación de seguridad**: Use conjuntos de principios específicos del repositorio

403 

404 **Valores requeridos**:

405 

406 Después de la configuración, necesitará:

407 

408 * **GCP\_WORKLOAD\_IDENTITY\_PROVIDER**: El nombre completo del recurso del proveedor

409 * **GCP\_SERVICE\_ACCOUNT**: La dirección de correo electrónico de la cuenta de servicio

410 

411 <Tip>

412 Workload Identity Federation elimina la necesidad de claves de cuenta de servicio descargables, mejorando la seguridad.

413 </Tip>

414 

415 Para obtener instrucciones de configuración detalladas, consulte la [documentación de Federación de identidad de carga de trabajo de Google Cloud](https://cloud.google.com/iam/docs/workload-identity-federation).

416 </Accordion>

417 </AccordionGroup>

418 </Step>

419 

420 <Step title="Agregar secretos requeridos">

421 Agregue los siguientes secretos a su repositorio (Configuración → Secretos y variables → Acciones):

422 

423 #### Para Claude API (Directo):

424 

425 1. **Para autenticación de API**:

426 * `ANTHROPIC_API_KEY`: Su clave de API de Claude de [console.anthropic.com](https://console.anthropic.com)

427 

428 2. **Para aplicación de GitHub (si usa su propia aplicación)**:

429 * `APP_ID`: El ID de su aplicación de GitHub

430 * `APP_PRIVATE_KEY`: El contenido de la clave privada (.pem)

431 

432 #### Para Google Cloud Vertex AI

433 

434 1. **Para autenticación de GCP**:

435 * `GCP_WORKLOAD_IDENTITY_PROVIDER`

436 * `GCP_SERVICE_ACCOUNT`

437 

438 2. **Para aplicación de GitHub (si usa su propia aplicación)**:

439 * `APP_ID`: El ID de su aplicación de GitHub

440 * `APP_PRIVATE_KEY`: El contenido de la clave privada (.pem)

441 

442 #### Para Amazon Bedrock

443 

444 1. **Para autenticación de AWS**:

445 * `AWS_ROLE_TO_ASSUME`

446 

447 2. **Para aplicación de GitHub (si usa su propia aplicación)**:

448 * `APP_ID`: El ID de su aplicación de GitHub

449 * `APP_PRIVATE_KEY`: El contenido de la clave privada (.pem)

450 </Step>

451 

452 <Step title="Crear archivos de flujo de trabajo">

453 Cree archivos de flujo de trabajo de GitHub Actions que se integren con su proveedor en la nube. Los ejemplos a continuación muestran configuraciones completas tanto para Amazon Bedrock como para Google Vertex AI:

454 

455 <AccordionGroup>

456 <Accordion title="Flujo de trabajo de Amazon Bedrock">

457 **Requisitos previos:**

458 

459 * Acceso a Amazon Bedrock habilitado con permisos de modelo de Claude

460 * GitHub configurado como proveedor de identidad OIDC en AWS

461 * Rol de IAM con permisos de Bedrock que confía en GitHub Actions

462 

463 **Secretos de GitHub requeridos:**

464 

465 | Nombre del secreto | Descripción |

466 | -------------------- | -------------------------------------------------------------------- |

467 | `AWS_ROLE_TO_ASSUME` | ARN del rol de IAM para acceso a Bedrock |

468 | `APP_ID` | Su ID de aplicación de GitHub (de la configuración de la aplicación) |

469 | `APP_PRIVATE_KEY` | La clave privada que generó para su aplicación de GitHub |

470 

471 ```yaml theme={null}

472 name: Claude PR Action

473 

474 permissions:

475 contents: write

476 pull-requests: write

477 issues: write

478 id-token: write

479 

480 on:

481 issue_comment:

482 types: [created]

483 pull_request_review_comment:

484 types: [created]

485 issues:

486 types: [opened, assigned]

487 

488 jobs:

489 claude-pr:

490 if: |

491 (github.event_name == 'issue_comment' && contains(github.event.comment.body, '@claude')) ||

492 (github.event_name == 'pull_request_review_comment' && contains(github.event.comment.body, '@claude')) ||

493 (github.event_name == 'issues' && contains(github.event.issue.body, '@claude'))

494 runs-on: ubuntu-latest

495 env:

496 AWS_REGION: us-west-2

497 steps:

498 - name: Checkout repository

499 uses: actions/checkout@v4

500 

501 - name: Generate GitHub App token

502 id: app-token

503 uses: actions/create-github-app-token@v2

504 with:

505 app-id: ${{ secrets.APP_ID }}

506 private-key: ${{ secrets.APP_PRIVATE_KEY }}

507 

508 - name: Configure AWS Credentials (OIDC)

509 uses: aws-actions/configure-aws-credentials@v4

510 with:

511 role-to-assume: ${{ secrets.AWS_ROLE_TO_ASSUME }}

512 aws-region: us-west-2

513 

514 - uses: anthropics/claude-code-action@v1

515 with:

516 github_token: ${{ steps.app-token.outputs.token }}

517 use_bedrock: "true"

518 claude_args: '--model us.anthropic.claude-sonnet-4-6 --max-turns 10'

519 ```

520 

521 <Tip>

522 El formato de ID de modelo para Bedrock incluye un prefijo de región (por ejemplo, `us.anthropic.claude-sonnet-4-6`).

523 </Tip>

524 </Accordion>

525 

526 <Accordion title="Flujo de trabajo de Google Vertex AI">

527 **Requisitos previos:**

528 

529 * API de Vertex AI habilitada en su proyecto de GCP

530 * Federación de identidad de carga de trabajo configurada para GitHub

531 * Cuenta de servicio con permisos de Vertex AI

532 

533 **Secretos de GitHub requeridos:**

534 

535 | Nombre del secreto | Descripción |

536 | -------------------------------- | -------------------------------------------------------------------- |

537 | `GCP_WORKLOAD_IDENTITY_PROVIDER` | Nombre del recurso del proveedor de identidad de carga de trabajo |

538 | `GCP_SERVICE_ACCOUNT` | Correo electrónico de la cuenta de servicio con acceso a Vertex AI |

539 | `APP_ID` | Su ID de aplicación de GitHub (de la configuración de la aplicación) |

540 | `APP_PRIVATE_KEY` | La clave privada que generó para su aplicación de GitHub |

541 

542 ```yaml theme={null}

543 name: Claude PR Action

544 

545 permissions:

546 contents: write

547 pull-requests: write

548 issues: write

549 id-token: write

550 

551 on:

552 issue_comment:

553 types: [created]

554 pull_request_review_comment:

555 types: [created]

556 issues:

557 types: [opened, assigned]

558 

559 jobs:

560 claude-pr:

561 if: |

562 (github.event_name == 'issue_comment' && contains(github.event.comment.body, '@claude')) ||

563 (github.event_name == 'pull_request_review_comment' && contains(github.event.comment.body, '@claude')) ||

564 (github.event_name == 'issues' && contains(github.event.issue.body, '@claude'))

565 runs-on: ubuntu-latest

566 steps:

567 - name: Checkout repository

568 uses: actions/checkout@v4

569 

570 - name: Generate GitHub App token

571 id: app-token

572 uses: actions/create-github-app-token@v2

573 with:

574 app-id: ${{ secrets.APP_ID }}

575 private-key: ${{ secrets.APP_PRIVATE_KEY }}

576 

577 - name: Authenticate to Google Cloud

578 id: auth

579 uses: google-github-actions/auth@v2

580 with:

581 workload_identity_provider: ${{ secrets.GCP_WORKLOAD_IDENTITY_PROVIDER }}

582 service_account: ${{ secrets.GCP_SERVICE_ACCOUNT }}

583 

584 - uses: anthropics/claude-code-action@v1

585 with:

586 github_token: ${{ steps.app-token.outputs.token }}

587 trigger_phrase: "@claude"

588 use_vertex: "true"

589 claude_args: '--model claude-sonnet-4-5@20250929 --max-turns 10'

590 env:

591 ANTHROPIC_VERTEX_PROJECT_ID: ${{ steps.auth.outputs.project_id }}

592 CLOUD_ML_REGION: us-east5

593 VERTEX_REGION_CLAUDE_4_5_SONNET: us-east5

594 ```

595 

596 <Tip>

597 El ID del proyecto se recupera automáticamente del paso de autenticación de Google Cloud, por lo que no necesita codificarlo.

598 </Tip>

599 </Accordion>

600 </AccordionGroup>

601 </Step>

602</Steps>

603 

604## Solución de problemas

605 

606### Claude no responde a comandos @claude

607 

608Verifique que la aplicación de GitHub esté instalada correctamente, compruebe que los flujos de trabajo estén habilitados, asegúrese de que la clave API esté configurada en los secretos del repositorio y confirme que el comentario contenga `@claude` (no `/claude`).

609 

610### CI no se ejecuta en los commits de Claude

611 

612Asegúrese de estar usando la aplicación de GitHub o una aplicación personalizada (no el usuario de Acciones), verifique que los disparadores de flujo de trabajo incluyan los eventos necesarios y confirme que los permisos de la aplicación incluyan disparadores de CI.

613 

614### Errores de autenticación

615 

616Confirme que la clave API sea válida y tenga permisos suficientes. Para Bedrock/Vertex, verifique la configuración de credenciales y asegúrese de que los secretos tengan los nombres correctos en los flujos de trabajo.

617 

618## Configuración avanzada

619 

620### Parámetros de acción

621 

622Claude Code Action v1 utiliza una configuración simplificada:

623 

624| Parámetro | Descripción | Requerido |

625| ------------------- | -------------------------------------------------------------------------------- | --------- |

626| `prompt` | Instrucciones para Claude (texto sin formato o un nombre de [skill](/es/skills)) | No\* |

627| `claude_args` | Argumentos de CLI pasados a Claude Code | No |

628| `anthropic_api_key` | Clave API de Claude | Sí\*\* |

629| `github_token` | Token de GitHub para acceso a API | No |

630| `trigger_phrase` | Frase de disparo personalizada (predeterminado: "@claude") | No |

631| `use_bedrock` | Usar Amazon Bedrock en lugar de Claude API | No |

632| `use_vertex` | Usar Google Vertex AI en lugar de Claude API | No |

633 

634\*Prompt es opcional - cuando se omite para comentarios de problema/PR, Claude responde a la frase de disparo\

635\*\*Requerido para Claude API directo, no para Bedrock/Vertex

636 

637#### Pasar argumentos de CLI

638 

639El parámetro `claude_args` acepta cualquier argumento de CLI de Claude Code:

640 

641```yaml theme={null}

642claude_args: "--max-turns 5 --model claude-sonnet-4-6 --mcp-config /path/to/config.json"

643```

644 

645Argumentos comunes:

646 

647* `--max-turns`: Máximo de turnos de conversación (predeterminado: 10)

648* `--model`: Modelo a usar (por ejemplo, `claude-sonnet-4-6`)

649* `--mcp-config`: Ruta a la configuración de MCP

650* `--allowedTools`: Lista separada por comas de herramientas permitidas. El alias `--allowed-tools` también funciona.

651* `--debug`: Habilitar salida de depuración

652 

653### Métodos de integración alternativos

654 

655Aunque el comando `/install-github-app` es el enfoque recomendado, también puede:

656 

657* **Aplicación de GitHub personalizada**: Para organizaciones que necesitan nombres de usuario personalizados o flujos de autenticación personalizados. Cree su propia aplicación de GitHub con permisos requeridos (contenidos, problemas, solicitudes de extracción) y use la acción actions/create-github-app-token para generar tokens en sus flujos de trabajo.

658* **GitHub Actions manual**: Configuración de flujo de trabajo directo para máxima flexibilidad

659* **Configuración de MCP**: Carga dinámica de servidores del Protocolo de contexto del modelo

660 

661Consulte la [documentación de Claude Code Action](https://github.com/anthropics/claude-code-action/blob/main/docs) para obtener guías detalladas sobre autenticación, seguridad y configuración avanzada.

662 

663### Personalizar el comportamiento de Claude

664 

665Puede configurar el comportamiento de Claude de dos formas:

666 

6671. **CLAUDE.md**: Defina estándares de codificación, criterios de revisión y reglas específicas del proyecto en un archivo `CLAUDE.md` en la raíz de su repositorio. Claude seguirá estas directrices al crear PR y responder a solicitudes. Consulte nuestra [documentación de Memory](/es/memory) para más detalles.

6682. **Solicitudes personalizadas**: Use el parámetro `prompt` en el archivo de flujo de trabajo para proporcionar instrucciones específicas del flujo de trabajo. Esto le permite personalizar el comportamiento de Claude para diferentes flujos de trabajo o tareas.

669 

670Claude seguirá estas directrices al crear PR y responder a solicitudes.

gitlab-ci-cd.md +466 −0 created

Details

1> ## Documentation Index

2> Fetch the complete documentation index at: https://code.claude.com/docs/llms.txt

3> Use this file to discover all available pages before exploring further.

4 

5# Claude Code GitLab CI/CD

6 

7> Aprenda a integrar Claude Code en su flujo de trabajo de desarrollo con GitLab CI/CD

8 

9<Info>

10 Claude Code para GitLab CI/CD se encuentra actualmente en beta. Las características y funcionalidades pueden evolucionar a medida que refinamos la experiencia.

11 

12 Esta integración es mantenida por GitLab. Para obtener soporte, consulte el siguiente [problema de GitLab](https://gitlab.com/gitlab-org/gitlab/-/issues/573776).

13</Info>

14 

15<Note>

16 Esta integración se basa en el [Claude Code CLI y Agent SDK](/es/agent-sdk/overview), lo que permite el uso programático de Claude en sus trabajos de CI/CD y flujos de trabajo de automatización personalizados.

17</Note>

18 

19## ¿Por qué usar Claude Code con GitLab?

20 

21* **Creación instantánea de MR**: Describa lo que necesita, y Claude propone un MR completo con cambios y explicación

22* **Implementación automatizada**: Convierta problemas en código funcional con un único comando o mención

23* **Consciente del proyecto**: Claude sigue sus directrices `CLAUDE.md` y patrones de código existentes

24* **Configuración simple**: Agregue un trabajo a `.gitlab-ci.yml` y una variable de CI/CD enmascarada

25* **Listo para empresas**: Elija Claude API, Amazon Bedrock o Google Vertex AI para cumplir con los requisitos de residencia de datos y adquisición

26* **Seguro por defecto**: Se ejecuta en sus ejecutores de GitLab con su protección de rama y aprobaciones

27 

28## Cómo funciona

29 

30Claude Code utiliza GitLab CI/CD para ejecutar tareas de IA en trabajos aislados y confirmar resultados a través de MRs:

31 

321. **Orquestación impulsada por eventos**: GitLab escucha los desencadenantes elegidos (por ejemplo, un comentario que menciona `@claude` en un problema, MR o hilo de revisión). El trabajo recopila contexto del hilo y repositorio, construye indicaciones a partir de esa entrada y ejecuta Claude Code.

33 

342. **Abstracción de proveedores**: Utilice el proveedor que se ajuste a su entorno:

35 * Claude API (SaaS)

36 * Amazon Bedrock (acceso basado en IAM, opciones entre regiones)

37 * Google Vertex AI (nativo de GCP, Federación de Identidad de Carga de Trabajo)

38 

393. **Ejecución en sandbox**: Cada interacción se ejecuta en un contenedor con reglas estrictas de red y sistema de archivos. Claude Code aplica permisos con alcance de espacio de trabajo para restringir escrituras. Cada cambio fluye a través de un MR para que los revisores vean el diff y las aprobaciones sigan siendo aplicables.

40 

41Elija puntos finales regionales para reducir la latencia y cumplir con los requisitos de soberanía de datos mientras utiliza acuerdos en la nube existentes.

42 

43## ¿Qué puede hacer Claude?

44 

45Claude Code habilita flujos de trabajo de CI/CD poderosos que transforman la forma en que trabaja con código:

46 

47* Crear y actualizar MRs a partir de descripciones o comentarios de problemas

48* Analizar regresiones de rendimiento y proponer optimizaciones

49* Implementar características directamente en una rama, luego abrir un MR

50* Corregir errores y regresiones identificados por pruebas o comentarios

51* Responder a comentarios de seguimiento para iterar sobre cambios solicitados

52 

53## Configuración

54 

55### Configuración rápida

56 

57La forma más rápida de comenzar es agregar un trabajo mínimo a su `.gitlab-ci.yml` y establecer su clave de API como una variable enmascarada.

58 

591. **Agregue una variable de CI/CD enmascarada**

60 * Vaya a **Configuración** → **CI/CD** → **Variables**

61 * Agregue `ANTHROPIC_API_KEY` (enmascarada, protegida según sea necesario)

62 

632. **Agregue un trabajo de Claude a `.gitlab-ci.yml`**

64 

65```yaml theme={null}

66stages:

67 - ai

68 

69claude:

70 stage: ai

71 image: node:24-alpine3.21

72 # Ajuste las reglas para que se adapten a cómo desea desencadenar el trabajo:

73 # - ejecuciones manuales

74 # - eventos de solicitud de fusión

75 # - desencadenadores web/API cuando un comentario contiene '@claude'

76 rules:

77 - if: '$CI_PIPELINE_SOURCE == "web"'

78 - if: '$CI_PIPELINE_SOURCE == "merge_request_event"'

79 variables:

80 GIT_STRATEGY: fetch

81 before_script:

82 - apk update

83 - apk add --no-cache git curl bash

84 - curl -fsSL https://claude.ai/install.sh | bash

85 script:

86 # Opcional: inicie un servidor MCP de GitLab si su configuración proporciona uno

87 - /bin/gitlab-mcp-server || true

88 # Utilice variables AI_FLOW_* cuando invoque a través de desencadenadores web/API con cargas de contexto

89 - echo "$AI_FLOW_INPUT for $AI_FLOW_CONTEXT on $AI_FLOW_EVENT"

90 - >

91 claude

92 -p "${AI_FLOW_INPUT:-'Review this MR and implement the requested changes'}"

93 --permission-mode acceptEdits

94 --allowedTools "Bash Read Edit Write mcp__gitlab"

95 --debug

96```

97 

98Después de agregar el trabajo y su variable `ANTHROPIC_API_KEY`, pruebe ejecutando el trabajo manualmente desde **CI/CD** → **Pipelines**, o desencadénelo desde un MR para permitir que Claude proponga actualizaciones en una rama y abra un MR si es necesario.

99 

100<Note>

101 Para ejecutar en Amazon Bedrock o Google Vertex AI en lugar de Claude API, consulte la sección [Usar con Amazon Bedrock y Google Vertex AI](#using-with-amazon-bedrock--google-vertex-ai) a continuación para obtener instrucciones de autenticación y configuración del entorno.

102</Note>

103 

104### Configuración manual (recomendada para producción)

105 

106Si prefiere una configuración más controlada o necesita proveedores empresariales:

107 

1081. **Configure el acceso del proveedor**:

109 * **Claude API**: Cree y almacene `ANTHROPIC_API_KEY` como una variable de CI/CD enmascarada

110 * **Amazon Bedrock**: **Configure GitLab** → **AWS OIDC** y cree un rol de IAM para Bedrock

111 * **Google Vertex AI**: **Configure la Federación de Identidad de Carga de Trabajo para GitLab** → **GCP**

112 

1132. **Agregue credenciales de proyecto para operaciones de API de GitLab**:

114 * Utilice `CI_JOB_TOKEN` de forma predeterminada, o cree un Token de Acceso de Proyecto con alcance `api`

115 * Almacene como `GITLAB_ACCESS_TOKEN` (enmascarado) si utiliza un PAT

116 

1173. **Agregue el trabajo de Claude a `.gitlab-ci.yml`** (consulte los ejemplos a continuación)

118 

1194. **(Opcional) Habilite desencadenadores impulsados por menciones**:

120 * Agregue un webhook de proyecto para "Comentarios (notas)" a su escucha de eventos (si utiliza uno)

121 * Haga que el escucha llame a la API de desencadenador de canalización con variables como `AI_FLOW_INPUT` y `AI_FLOW_CONTEXT` cuando un comentario contiene `@claude`

122 

123## Casos de uso de ejemplo

124 

125### Convertir problemas en MRs

126 

127En un comentario de problema:

128 

129```text theme={null}

130@claude implement this feature based on the issue description

131```

132 

133Claude analiza el problema y la base de código, escribe cambios en una rama y abre un MR para revisión.

134 

135### Obtener ayuda de implementación

136 

137En una discusión de MR:

138 

139```text theme={null}

140@claude suggest a concrete approach to cache the results of this API call

141```

142 

143Claude propone cambios, agrega código con almacenamiento en caché apropiado y actualiza el MR.

144 

145### Corregir errores rápidamente

146 

147En un comentario de problema o MR:

148 

149```text theme={null}

150@claude fix the TypeError in the user dashboard component

151```

152 

153Claude localiza el error, implementa una corrección y actualiza la rama o abre un nuevo MR.

154 

155## Usar con Amazon Bedrock y Google Vertex AI

156 

157Para entornos empresariales, puede ejecutar Claude Code completamente en su infraestructura en la nube con la misma experiencia de desarrollador.

158 

159<Tabs>

160 <Tab title="Amazon Bedrock">

161 ### Requisitos previos

162 

163 Antes de configurar Claude Code con Amazon Bedrock, necesita:

164 

165 1. Una cuenta de AWS con acceso a Amazon Bedrock para los modelos Claude deseados

166 2. GitLab configurado como proveedor de identidad OIDC en AWS IAM

167 3. Un rol de IAM con permisos de Bedrock y una política de confianza restringida a su proyecto/referencias de GitLab

168 4. Variables de CI/CD de GitLab para asumir el rol:

169 * `AWS_ROLE_TO_ASSUME` (ARN del rol)

170 * `AWS_REGION` (región de Bedrock)

171 

172 ### Instrucciones de configuración

173 

174 Configure AWS para permitir que los trabajos de CI de GitLab asuman un rol de IAM a través de OIDC (sin claves estáticas).

175 

176 **Configuración requerida:**

177 

178 1. Habilite Amazon Bedrock y solicite acceso a sus modelos Claude objetivo

179 2. Cree un proveedor OIDC de IAM para GitLab si aún no está presente

180 3. Cree un rol de IAM confiado por el proveedor OIDC de GitLab, restringido a su proyecto y referencias protegidas

181 4. Adjunte permisos de menor privilegio para las API de invocación de Bedrock

182 

183 **Valores requeridos para almacenar en variables de CI/CD:**

184 

185 * `AWS_ROLE_TO_ASSUME`

186 * `AWS_REGION`

187 

188 Agregue variables en Configuración → CI/CD → Variables:

189 

190 ```yaml theme={null}

191 # Para Amazon Bedrock:

192 - AWS_ROLE_TO_ASSUME

193 - AWS_REGION

194 ```

195 

196 Utilice el ejemplo de trabajo de Amazon Bedrock anterior para intercambiar el token de trabajo de GitLab por credenciales temporales de AWS en tiempo de ejecución.

197 </Tab>

198 

199 <Tab title="Google Vertex AI">

200 ### Requisitos previos

201 

202 Antes de configurar Claude Code con Google Vertex AI, necesita:

203 

204 1. Un proyecto de Google Cloud con:

205 * API de Vertex AI habilitada

206 * Federación de Identidad de Carga de Trabajo configurada para confiar en OIDC de GitLab

207 2. Una cuenta de servicio dedicada con solo los roles de Vertex AI requeridos

208 3. Variables de CI/CD de GitLab para WIF:

209 * `GCP_WORKLOAD_IDENTITY_PROVIDER` (nombre de recurso completo)

210 * `GCP_SERVICE_ACCOUNT` (correo electrónico de la cuenta de servicio)

211 

212 ### Instrucciones de configuración

213 

214 Configure Google Cloud para permitir que los trabajos de CI de GitLab suplanten una cuenta de servicio a través de la Federación de Identidad de Carga de Trabajo.

215 

216 **Configuración requerida:**

217 

218 1. Habilite la API de Credenciales de IAM, la API de STS y la API de Vertex AI

219 2. Cree un Grupo de Identidad de Carga de Trabajo y un proveedor para OIDC de GitLab

220 3. Cree una cuenta de servicio dedicada con roles de Vertex AI

221 4. Otorgue al principal de WIF permiso para suplantar la cuenta de servicio

222 

223 **Valores requeridos para almacenar en variables de CI/CD:**

224 

225 * `GCP_WORKLOAD_IDENTITY_PROVIDER`

226 * `GCP_SERVICE_ACCOUNT`

227 

228 Agregue variables en Configuración → CI/CD → Variables:

229 

230 ```yaml theme={null}

231 # Para Google Vertex AI:

232 - GCP_WORKLOAD_IDENTITY_PROVIDER

233 - GCP_SERVICE_ACCOUNT

234 - CLOUD_ML_REGION (por ejemplo, us-east5)

235 ```

236 

237 Utilice el ejemplo de trabajo de Google Vertex AI anterior para autenticarse sin almacenar claves.

238 </Tab>

239</Tabs>

240 

241## Ejemplos de configuración

242 

243A continuación se muestran fragmentos listos para usar que puede adaptar a su canalización.

244 

245### .gitlab-ci.yml básico (Claude API)

246 

247```yaml theme={null}

248stages:

249 - ai

250 

251claude:

252 stage: ai

253 image: node:24-alpine3.21

254 rules:

255 - if: '$CI_PIPELINE_SOURCE == "web"'

256 - if: '$CI_PIPELINE_SOURCE == "merge_request_event"'

257 variables:

258 GIT_STRATEGY: fetch

259 before_script:

260 - apk update

261 - apk add --no-cache git curl bash

262 - curl -fsSL https://claude.ai/install.sh | bash

263 script:

264 - /bin/gitlab-mcp-server || true

265 - >

266 claude

267 -p "${AI_FLOW_INPUT:-'Summarize recent changes and suggest improvements'}"

268 --permission-mode acceptEdits

269 --allowedTools "Bash Read Edit Write mcp__gitlab"

270 --debug

271 # Claude Code utilizará ANTHROPIC_API_KEY de las variables de CI/CD

272```

273 

274### Ejemplo de trabajo de Amazon Bedrock (OIDC)

275 

276**Requisitos previos:**

277 

278* Amazon Bedrock habilitado con acceso a su modelo Claude elegido

279* OIDC de GitLab configurado en AWS con un rol que confía en su proyecto y referencias de GitLab

280* Rol de IAM con permisos de Bedrock (se recomienda menor privilegio)

281 

282**Variables de CI/CD requeridas:**

283 

284* `AWS_ROLE_TO_ASSUME`: ARN del rol de IAM para acceso a Bedrock

285* `AWS_REGION`: Región de Bedrock (por ejemplo, `us-west-2`)

286 

287```yaml theme={null}

288claude-bedrock:

289 stage: ai

290 image: node:24-alpine3.21

291 rules:

292 - if: '$CI_PIPELINE_SOURCE == "web"'

293 before_script:

294 - apk add --no-cache bash curl jq git python3 py3-pip

295 - pip install --no-cache-dir awscli

296 - curl -fsSL https://claude.ai/install.sh | bash

297 # Intercambie el token OIDC de GitLab por credenciales de AWS

298 - export AWS_WEB_IDENTITY_TOKEN_FILE="${CI_JOB_JWT_FILE:-/tmp/oidc_token}"

299 - if [ -n "${CI_JOB_JWT_V2}" ]; then printf "%s" "$CI_JOB_JWT_V2" > "$AWS_WEB_IDENTITY_TOKEN_FILE"; fi

300 - >

301 aws sts assume-role-with-web-identity

302 --role-arn "$AWS_ROLE_TO_ASSUME"

303 --role-session-name "gitlab-claude-$(date +%s)"

304 --web-identity-token "file://$AWS_WEB_IDENTITY_TOKEN_FILE"

305 --duration-seconds 3600 > /tmp/aws_creds.json

306 - export AWS_ACCESS_KEY_ID="$(jq -r .Credentials.AccessKeyId /tmp/aws_creds.json)"

307 - export AWS_SECRET_ACCESS_KEY="$(jq -r .Credentials.SecretAccessKey /tmp/aws_creds.json)"

308 - export AWS_SESSION_TOKEN="$(jq -r .Credentials.SessionToken /tmp/aws_creds.json)"

309 script:

310 - /bin/gitlab-mcp-server || true

311 - >

312 claude

313 -p "${AI_FLOW_INPUT:-'Implement the requested changes and open an MR'}"

314 --permission-mode acceptEdits

315 --allowedTools "Bash Read Edit Write mcp__gitlab"

316 --debug

317 variables:

318 AWS_REGION: "us-west-2"

319```

320 

321<Note>

322 Los ID de modelo para Bedrock incluyen prefijos específicos de región (por ejemplo, `us.anthropic.claude-sonnet-4-6`). Pase el modelo deseado a través de su configuración de trabajo o indicación si su flujo de trabajo lo admite.

323</Note>

324 

325### Ejemplo de trabajo de Google Vertex AI (Federación de Identidad de Carga de Trabajo)

326 

327**Requisitos previos:**

328 

329* API de Vertex AI habilitada en su proyecto de GCP

330* Federación de Identidad de Carga de Trabajo configurada para confiar en OIDC de GitLab

331* Una cuenta de servicio con permisos de Vertex AI

332 

333**Variables de CI/CD requeridas:**

334 

335* `GCP_WORKLOAD_IDENTITY_PROVIDER`: Nombre de recurso completo del proveedor

336* `GCP_SERVICE_ACCOUNT`: Correo electrónico de la cuenta de servicio

337* `CLOUD_ML_REGION`: Región de Vertex (por ejemplo, `us-east5`)

338 

339```yaml theme={null}

340claude-vertex:

341 stage: ai

342 image: gcr.io/google.com/cloudsdktool/google-cloud-cli:slim

343 rules:

344 - if: '$CI_PIPELINE_SOURCE == "web"'

345 before_script:

346 - apt-get update && apt-get install -y git && apt-get clean

347 - curl -fsSL https://claude.ai/install.sh | bash

348 # Autentíquese en Google Cloud a través de WIF (sin claves descargadas)

349 - >

350 gcloud auth login --cred-file=<(cat <<EOF

351 {

352 "type": "external_account",

353 "audience": "${GCP_WORKLOAD_IDENTITY_PROVIDER}",

354 "subject_token_type": "urn:ietf:params:oauth:token-type:jwt",

355 "service_account_impersonation_url": "https://iamcredentials.googleapis.com/v1/projects/-/serviceAccounts/${GCP_SERVICE_ACCOUNT}:generateAccessToken",

356 "token_url": "https://sts.googleapis.com/v1/token"

357 }

358 EOF

359 )

360 - gcloud config set project "$(gcloud projects list --format='value(projectId)' --filter="name:${CI_PROJECT_NAMESPACE}" | head -n1)" || true

361 script:

362 - /bin/gitlab-mcp-server || true

363 - >

364 CLOUD_ML_REGION="${CLOUD_ML_REGION:-us-east5}"

365 claude

366 -p "${AI_FLOW_INPUT:-'Review and update code as requested'}"

367 --permission-mode acceptEdits

368 --allowedTools "Bash Read Edit Write mcp__gitlab"

369 --debug

370 variables:

371 CLOUD_ML_REGION: "us-east5"

372```

373 

374<Note>

375 Con la Federación de Identidad de Carga de Trabajo, no necesita almacenar claves de cuenta de servicio. Utilice condiciones de confianza específicas del repositorio y cuentas de servicio con menor privilegio.

376</Note>

377 

378## Mejores prácticas

379 

380### Configuración de CLAUDE.md

381 

382Cree un archivo `CLAUDE.md` en la raíz del repositorio para definir estándares de codificación, criterios de revisión y reglas específicas del proyecto. Claude lee este archivo durante las ejecuciones y sigue sus convenciones al proponer cambios.

383 

384### Consideraciones de seguridad

385 

386**Nunca confirme claves de API o credenciales en la nube en su repositorio**. Siempre utilice variables de CI/CD de GitLab:

387 

388* Agregue `ANTHROPIC_API_KEY` como una variable enmascarada (y protéjala si es necesario)

389* Utilice OIDC específico del proveedor donde sea posible (sin claves de larga duración)

390* Limite los permisos de trabajo y la salida de red

391* Revise los MRs de Claude como cualquier otro colaborador

392 

393### Optimización del rendimiento

394 

395* Mantenga `CLAUDE.md` enfocado y conciso

396* Proporcione descripciones claras de problemas/MR para reducir iteraciones

397* Configure tiempos de espera de trabajo sensatos para evitar ejecuciones descontroladas

398* Almacene en caché npm e instalaciones de paquetes en ejecutores donde sea posible

399 

400### Costos de CI

401 

402Cuando utiliza Claude Code con GitLab CI/CD, tenga en cuenta los costos asociados:

403 

404* **Tiempo de ejecución de GitLab**:

405 * Claude se ejecuta en sus ejecutores de GitLab y consume minutos de cálculo

406 * Consulte la facturación de ejecutores de su plan de GitLab para obtener detalles

407 

408* **Costos de API**:

409 * Cada interacción de Claude consume tokens según el tamaño de la indicación y la respuesta

410 * El uso de tokens varía según la complejidad de la tarea y el tamaño de la base de código

411 * Consulte [Precios de Anthropic](https://platform.claude.com/docs/es/about-claude/pricing) para obtener detalles

412 

413* **Consejos de optimización de costos**:

414 * Utilice comandos específicos de `@claude` para reducir turnos innecesarios

415 * Establezca valores apropiados de `max_turns` y tiempo de espera de trabajo

416 * Limite la concurrencia para controlar ejecuciones paralelas

417 

418## Seguridad y gobernanza

419 

420* Cada trabajo se ejecuta en un contenedor aislado con acceso de red restringido

421* Los cambios de Claude fluyen a través de MRs para que los revisores vean cada diff

422* Las reglas de protección de rama y aprobación se aplican al código generado por IA

423* Claude Code utiliza permisos con alcance de espacio de trabajo para restringir escrituras

424* Los costos permanecen bajo su control porque usted proporciona sus propias credenciales de proveedor

425 

426## Solución de problemas

427 

428### Claude no responde a comandos @claude

429 

430* Verifique que su canalización se esté desencadenando (manualmente, evento de MR o a través de un escucha de eventos de nota/webhook)

431* Asegúrese de que las variables de CI/CD (`ANTHROPIC_API_KEY` o configuración del proveedor en la nube) estén presentes y no enmascaradas

432* Compruebe que el comentario contiene `@claude` (no `/claude`) y que su desencadenador de mención está configurado

433 

434### El trabajo no puede escribir comentarios ni abrir MRs

435 

436* Asegúrese de que `CI_JOB_TOKEN` tenga permisos suficientes para el proyecto, o utilice un Token de Acceso de Proyecto con alcance `api`

437* Compruebe que la herramienta `mcp__gitlab` esté habilitada en `--allowedTools`

438* Confirme que el trabajo se ejecuta en el contexto del MR o tiene suficiente contexto a través de variables `AI_FLOW_*`

439 

440### Errores de autenticación

441 

442* **Para Claude API**: Confirme que `ANTHROPIC_API_KEY` es válida y no ha expirado

443* **Para Bedrock/Vertex**: Verifique la configuración de OIDC/WIF, la suplantación de rol y los nombres secretos; confirme la disponibilidad de región y modelo

444 

445## Configuración avanzada

446 

447### Parámetros y variables comunes

448 

449Claude Code admite estas entradas comúnmente utilizadas:

450 

451* `prompt` / `prompt_file`: Proporcione instrucciones en línea (`-p`) o a través de un archivo

452* `max_turns`: Limite el número de iteraciones de ida y vuelta

453* `timeout_minutes`: Limite el tiempo total de ejecución

454* `ANTHROPIC_API_KEY`: Requerido para Claude API (no se utiliza para Bedrock/Vertex)

455* Entorno específico del proveedor: `AWS_REGION`, variables de proyecto/región para Vertex

456 

457<Note>

458 Las banderas y parámetros exactos pueden variar según la versión de `@anthropic-ai/claude-code`. Ejecute `claude --help` en su trabajo para ver las opciones admitidas.

459</Note>

460 

461### Personalización del comportamiento de Claude

462 

463Puede guiar a Claude de dos formas principales:

464 

4651. **CLAUDE.md**: Defina estándares de codificación, requisitos de seguridad y convenciones de proyecto. Claude lee esto durante las ejecuciones y sigue sus reglas.

4662. **Indicaciones personalizadas**: Pase instrucciones específicas de tareas a través de `prompt`/`prompt_file` en el trabajo. Utilice diferentes indicaciones para diferentes trabajos (por ejemplo, revisión, implementación, refactorización).

glossary.md +307 −0 created

Details

1> ## Documentation Index

2> Fetch the complete documentation index at: https://code.claude.com/docs/llms.txt

3> Use this file to discover all available pages before exploring further.

4 

5# Glosario

6 

7> Definiciones de terminología de Claude Code. Aprenda qué significan agentic loop, compaction, CLAUDE.md, hooks, subagents, MCP y otros conceptos centrales.

8 

9Este glosario define la terminología de Claude Code. Cada entrada enlaza a la página donde el concepto se cubre en profundidad. Para conceptos a nivel de modelo como tokens, temperature y RAG, consulte el [glosario de plataforma](https://platform.claude.com/docs/es/about-claude/glossary).

10 

11## A

12 

13### Agent teams

14 

15Múltiples sesiones independientes de Claude Code coordinadas por un líder de equipo, con una lista de tareas compartida y mensajería de igual a igual. A diferencia de [subagents](#subagent), que se ejecutan dentro de una única sesión e informan solo al padre, los compañeros de equipo tienen cada uno su propia ventana de contexto y puede interactuar directamente con cualquiera de ellos. Agent teams es experimental y debe habilitarse configurando `CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS=1`.

16 

17Más información: [Run agent teams](/es/agent-teams)

18 

19### Agentic coding

20 

21Un flujo de trabajo donde la IA puede leer archivos, ejecutar comandos y realizar cambios de forma autónoma mientras usted observa, redirige o se aleja, a diferencia de los asistentes basados en chat que solo responden con texto que debe aplicar usted mismo. Claude Code es agentic porque tiene [tools](#tool) que le permiten actuar, no solo aconsejar.

22 

23Más información: [How Claude Code works](/es/how-claude-code-works)

24 

25### Agentic harness

26 

27Las herramientas, gestión de contexto y entorno de ejecución que convierten un modelo de lenguaje en un agente de codificación capaz. Claude Code es el harness; Claude es el modelo dentro de él. El harness proporciona acceso a archivos, ejecución de shell, control de permisos, carga de memoria y el bucle que encadena acciones juntas.

28 

29Más información: [How Claude Code works](/es/how-claude-code-works)

30 

31### Agentic loop

32 

33El ciclo que Claude recorre para cada tarea: recopilar contexto, tomar acción, verificar resultados y repetir hasta terminar. Cada uso de herramienta devuelve información que informa el siguiente paso. Puede interrumpir el bucle en cualquier momento para redirigir. La mayoría de los puntos de extensión, incluidos [hooks](#hook), [skills](#skill) y [MCP](#mcp-model-context-protocol), se conectan a fases específicas de este bucle.

34 

35Más información: [How Claude Code works](/es/how-claude-code-works#the-agentic-loop)

36 

37### Auto memory

38 

39Notas que Claude escribe para sí mismo basadas en sus correcciones y preferencias, almacenadas por repositorio git bajo `~/.claude/projects/`. Todos los worktrees del mismo repositorio comparten un directorio de auto memory. Las primeras 200 líneas o 25 KB del índice `MEMORY.md` se cargan al inicio de cada sesión. Auto memory es la contraparte escrita por Claude de [CLAUDE.md](#claude-md), que usted escribe.

40 

41Más información: [Auto memory](/es/memory#auto-memory)

42 

43### Auto mode

44 

45Un [permission mode](#permission-mode) donde un modelo clasificador separado revisa cada acción en segundo plano en lugar de mostrarle solicitudes de aprobación. El clasificador bloquea la escalada de alcance, la infraestructura no confiable y la [prompt injection](#prompt-injection). Nunca ve resultados de herramientas, por lo que las instrucciones inyectadas no pueden influir en sus decisiones. Auto mode es una vista previa de investigación disponible en planes Max, Team, Enterprise y API.

46 

47Más información: [Eliminate prompts with auto mode](/es/permission-modes#eliminate-prompts-with-auto-mode)

48 

49## B

50 

51### Bare mode

52 

53Una bandera de inicio, `--bare`, que omite el descubrimiento automático de hooks, skills, plugins, servidores MCP, auto memory y CLAUDE.md. Solo las banderas que pasa explícitamente tienen efecto. Se recomienda para CI y llamadas con script donde necesita un comportamiento idéntico en todas las máquinas independientemente de la configuración local.

54 

55Más información: [Start faster with bare mode](/es/headless#start-faster-with-bare-mode)

56 

57### Bundled skills

58 

59Playbooks basados en prompts incluidos con Claude Code, como `/batch`, `/simplify`, `/debug` y `/loop`. A diferencia de los comandos integrados, que ejecutan lógica fija, bundled skills le da a Claude un prompt detallado y le permite orquestar el trabajo, por lo que pueden generar agentes, leer archivos y adaptarse a su base de código.

60 

61Más información: [Bundled skills](/es/skills#bundled-skills)

62 

63## C

64 

65### Channel

66 

67Un [MCP server](#mcp-model-context-protocol) que envía eventos a su sesión en ejecución para que Claude pueda reaccionar a cosas que suceden mientras está lejos de la terminal. Los canales pueden ser bidireccionales: Claude lee un evento entrante y responde a través del mismo canal. Telegram, Discord e iMessage se incluyen en la vista previa de investigación.

68 

69Más información: [Channels](/es/channels)

70 

71### Checkpoint

72 

73Una instantánea automática de su código capturada antes de cada edición que Claude realiza. Presione `Esc` dos veces o ejecute `/rewind` para restaurar código, conversación o ambos a un punto anterior. Los checkpoints son locales a la sesión, separados de git, y no rastrean cambios realizados a través de la herramienta Bash.

74 

75Más información: [Checkpointing](/es/checkpointing)

76 

77### `.claude` directory

78 

79El directorio donde Claude Code lee la configuración con alcance de proyecto: configuración, hooks, skills, subagents, reglas y auto memory. Un proyecto tiene `.claude/` en su raíz; sus valores predeterminados a nivel de usuario están en `~/.claude/`.

80 

81Más información: [The `.claude` directory](/es/claude-directory)

82 

83### CLAUDE.md

84 

85Un archivo markdown de instrucciones persistentes que usted escribe para Claude, cargado al inicio de cada sesión como un mensaje de usuario después del prompt del sistema. Coloque convenciones de proyecto, notas de arquitectura y reglas "siempre haga X" aquí. CLAUDE.md sobrevive a [compaction](#compaction) y se relee fresco desde el disco después.

86 

87Puede colocar CLAUDE.md en alcance de proyecto en `./CLAUDE.md` o `./.claude/CLAUDE.md`, en alcance de usuario en `~/.claude/CLAUDE.md`, o como [managed policy](#managed-settings) para su organización. Las ubicaciones más específicas tienen precedencia.

88 

89Más información: [CLAUDE.md files](/es/memory#claude-md-files)

90 

91### Command

92 

93Una instrucción reutilizable que invoca escribiendo `/name` en el prompt. Los comandos integrados como `/clear`, `/model` y `/compact` controlan la sesión. Puede definir sus propios comandos como archivos en `.claude/commands/`, o instalarlos desde un [plugin](#plugin). [Skills](#skill) es la forma recomendada de empaquetar comandos de varios pasos.

94 

95Más información: [Commands](/es/commands) · [Skills](/es/skills)

96 

97### Compaction

98 

99Resumen automático de su conversación cuando la [context window](#context-window) se acerca a su límite. Las salidas de herramientas más antiguas se borran primero, luego se resume la conversación. El CLAUDE.md de raíz de proyecto y auto memory sobreviven a compaction y se recargan desde el disco; las instrucciones dadas solo en conversación pueden perderse. Ejecute `/compact` para activar manualmente, opcionalmente con un enfoque como `/compact focus on the API changes`.

100 

101Más información: [What survives compaction](/es/context-window#what-survives-compaction) · [When context fills up](/es/how-claude-code-works#when-context-fills-up)

102 

103### Context window

104 

105La memoria de trabajo para una sesión, que contiene historial de conversación, contenidos de archivos, salidas de comandos, CLAUDE.md, auto memory, skills cargadas e instrucciones del sistema. A medida que trabaja, el contexto se llena hasta que [compaction](#compaction) lo resume. Ejecute `/context` para ver qué está usando espacio. Para el concepto de modelo subyacente, consulte el [glosario de plataforma](https://platform.claude.com/docs/es/about-claude/glossary#context-window).

106 

107Más información: [Explore the context window](/es/context-window)

108 

109## D

110 

111### Dispatch

112 

113Un enrutador de tareas iniciado por teléfono que genera una sesión de Claude Code en la aplicación Desktop cuando envía una tarea de codificación desde la aplicación móvil de Claude. Su prompt se enruta a la herramienta correcta automáticamente. Disponible en planes Pro y Max.

114 

115Más información: [Sessions from Dispatch](/es/desktop#sessions-from-dispatch)

116 

117## E

118 

119### Effort level

120 

121Una configuración que controla cuánto del presupuesto de pensamiento de razonamiento adaptativo usa Claude en cada turno. Mayor esfuerzo significa más tokens de pensamiento y razonamiento más profundo; menor esfuerzo es más rápido y económico. El esfuerzo es compatible con Opus 4.7, Opus 4.6 y Sonnet 4.6.

122 

123Más información: [Adjust effort level](/es/model-config#adjust-effort-level)

124 

125### Extended thinking

126 

127Razonamiento paso a paso visible que el modelo realiza antes de responder. Puede limitar tokens de pensamiento con `MAX_THINKING_TOKENS` o ajustar el [effort level](#effort-level). El pensamiento aparece en texto gris cursiva en la terminal.

128 

129Más información: [Use extended thinking](/es/common-workflows#use-extended-thinking-thinking-mode)

130 

131## H

132 

133### Hook

134 

135Un manejador definido por el usuario que se ejecuta automáticamente en un punto específico del ciclo de vida de Claude Code, como antes de que se ejecute una herramienta, después de una edición de archivo o al inicio de la sesión. Los manejadores pueden ser un comando de shell, punto final HTTP, herramienta MCP, prompt LLM o subagent. Los hooks son deterministas: se activan en puntos de ciclo de vida fijos en lugar de a discreción del modelo.

136 

137Una configuración de hook tiene tres niveles:

138 

139* **Hook event**: el punto del ciclo de vida

140* **Matcher**: filtra qué eventos lo activan

141* **Hook handler**: qué se ejecuta

142 

143Más información: [Get started with hooks](/es/hooks-guide) · [Hooks reference](/es/hooks)

144 

145## M

146 

147### Managed settings

148 

149Un archivo de configuración aplicado en toda la organización por IT o DevOps, colocado en una ruta a nivel de SO fuera de `~/.claude`. Los usuarios no pueden anular o excluir configuración administrada. Use esto para políticas de seguridad, requisitos de cumplimiento o herramientas estandarizadas en toda una flota.

150 

151Más información: [Server-managed settings](/es/server-managed-settings)

152 

153### MCP (Model Context Protocol)

154 

155Un estándar abierto para conectar herramientas de IA a fuentes de datos externas y servicios. Los servidores MCP le dan a Claude nuevas herramientas para Slack, Jira, bases de datos, navegadores y cientos de otras integraciones. Conecta servidores a través de `/mcp` o agregándolos a `.mcp.json`. Para el protocolo en sí, consulte el [glosario de plataforma](https://platform.claude.com/docs/es/about-claude/glossary#mcp-model-context-protocol).

156 

157Más información: [Model Context Protocol](/es/mcp)

158 

159### MCP Tool Search

160 

161Un mecanismo de ahorro de contexto que difiere los esquemas de herramientas MCP hasta que sea necesario. Solo los nombres de herramientas se cargan al inicio; Claude obtiene el esquema completo bajo demanda cuando decide usar una herramienta específica. Esto evita que los servidores MCP inactivos consuman mucho contexto.

162 

163Más información: [Scale with MCP Tool Search](/es/mcp#scale-with-mcp-tool-search)

164 

165## N

166 

167### Non-interactive mode

168 

169Un modo que ejecuta un único prompt y sale sin una sesión conversacional, invocado con `-p` o `--print`. Se usa para CI, scripts y piping. El [Agent SDK](/es/agent-sdk/overview) es el equivalente de Python y TypeScript. Anteriormente llamado headless mode.

170 

171Más información: [Run Claude Code programmatically](/es/headless)

172 

173## O

174 

175### Output style

176 

177Una configuración que modifica el prompt del sistema de Claude para cambiar el comportamiento de respuesta, tono o formato. Los estilos de salida desactivan las partes específicas de ingeniería de software del prompt del sistema predeterminado, a diferencia de [CLAUDE.md](#claude-md) que se entrega como un mensaje de usuario después del prompt del sistema. Los estilos integrados incluyen Default, Explanatory y Learning.

178 

179Más información: [Output styles](/es/output-styles)

180 

181## P

182 

183### Permission mode

184 

185El comportamiento de aprobación de línea base para la sesión. Cicle con `Shift+Tab` en la CLI o use el selector de modo en VS Code, Desktop y claude.ai. Los modos disponibles son `default`, `acceptEdits`, `plan`, `auto`, `dontAsk` y `bypassPermissions`.

186 

187Más información: [Choose a permission mode](/es/permission-modes)

188 

189### Permission rule

190 

191Una entrada de configuración que permite, pregunta o deniega una invocación de herramienta basada en el nombre de la herramienta y el patrón de argumento. Las reglas se evalúan deny→ask→allow, la primera coincidencia gana. Las reglas de permiso son controles de grano fino superpuestos en el [permission mode](#permission-mode) más amplio.

192 

193Más información: [Configure permissions](/es/permissions)

194 

195### Plan mode

196 

197Un [permission mode](#permission-mode) donde Claude investiga y propone cambios sin editar sus archivos fuente. Puede leer, buscar y ejecutar comandos de exploración, luego presenta un plan para aprobación antes de tocar nada. Ingrese al plan mode con `/plan` o presionando `Shift+Tab`.

198 

199Más información: [Analyze before you edit with plan mode](/es/permission-modes#analyze-before-you-edit-with-plan-mode)

200 

201### Plugin

202 

203Un paquete de skills, hooks, subagents y servidores MCP empaquetados como una unidad instalable única. Las skills de plugin se espacian de nombres como `plugin-name:skill-name` para que múltiples plugins coexistan. Distribuya plugins en equipos a través de un [marketplace](/es/plugin-marketplaces).

204 

205Más información: [Plugins](/es/plugins)

206 

207### Project trust

208 

209Un diálogo único que acepta un directorio antes de que Claude Code cargue su configuración. Trust gates la instalación automática de plugins de marketplace y la ejecución de hooks definidos por proyecto. Confiar en un directorio significa que sus archivos `.claude/settings.json`, `.mcp.json` y otros archivos de configuración tienen efecto.

210 

211Más información: [The `.claude` directory](/es/claude-directory)

212 

213### Prompt injection

214 

215Instrucciones hostiles incrustadas en un archivo, página web o resultado de herramienta que intentan redirigir a Claude hacia acciones que nunca pidió. Las defensas de Claude Code incluyen el sistema de permisos, listas de bloqueo de comandos y verificación de confianza. [Auto mode](#auto-mode) agrega una sonda del lado del servidor que escanea resultados de herramientas en busca de contenido sospechoso y un clasificador que nunca ve resultados de herramientas, por lo que el texto inyectado no puede influir en sus decisiones de aprobación.

216 

217Más información: [Protect against prompt injection](/es/security#protect-against-prompt-injection)

218 

219## R

220 

221### Remote Control

222 

223Una forma de continuar una sesión local de Claude Code desde su teléfono o navegador a través de claude.ai. Su código permanece en su máquina; solo la interfaz de usuario es remota. Diferente de Claude Code en la web, que se ejecuta en un sandbox en la nube.

224 

225Más información: [Remote Control](/es/remote-control)

226 

227### Rules

228 

229Archivos de instrucciones modulares en `.claude/rules/` que se cargan junto con CLAUDE.md. Una regla puede tener alcance de ruta con frontmatter YAML `paths:` para que solo se cargue cuando Claude lee un archivo coincidente, manteniendo el contexto delgado hasta que sea relevante.

230 

231Más información: [Organize rules with `.claude/rules/`](/es/memory#organize-rules-with-claude/rules/)

232 

233## S

234 

235### Sandboxing

236 

237Aislamiento de sistema de archivos y red a nivel de SO para la herramienta Bash. Los comandos se ejecutan dentro de un límite que define de antemano, para que Claude pueda trabajar libremente dentro de él sin solicitudes de aprobación por comando. Sandboxing es una capa separada de [permission rules](#permission-rule).

238 

239Más información: [Sandboxing](/es/sandboxing)

240 

241### Session

242 

243Una conversación vinculada a su directorio actual, con su propia [context window](#context-window) independiente. Las sesiones pueden reanudarse con `claude -c`, bifurcarse con `--fork-session` para preservar el historial bajo un nuevo ID de sesión, o ejecutarse en paralelo en terminales. Ejecutar `/clear` inicia una nueva sesión; la anterior permanece almacenada y está disponible a través de `/resume`. La transcripción de cada sesión se almacena bajo `~/.claude/projects/`.

244 

245Más información: [Work with sessions](/es/how-claude-code-works#work-with-sessions)

246 

247### Settings layers

248 

249La jerarquía desde la que Claude Code lee la configuración, en orden de precedencia de mayor a menor: [managed policy](#managed-settings), argumentos de línea de comandos, configuración local en `.claude/settings.local.json`, configuración de proyecto en `.claude/settings.json`, luego configuración de usuario en `~/.claude/settings.json`. Los arrays se fusionan en todas las capas; los escalares en una capa superior anulan los inferiores.

250 

251Más información: [Settings files](/es/settings#settings-files)

252 

253### Skill

254 

255Un archivo `SKILL.md` que contiene instrucciones, conocimiento o un flujo de trabajo que Claude agrega a su kit de herramientas. Claude carga una skill automáticamente cuando es relevante, o la invoca directamente con `/skill-name`. Las skills siguen el estándar abierto Agent Skills; Claude Code lo extiende con control de invocación y ejecución de subagent.

256 

257Las skills son el sucesor recomendado de comandos personalizados. Un archivo en `.claude/commands/deploy.md` y uno en `.claude/skills/deploy/SKILL.md` ambos crean `/deploy` y funcionan de la misma manera; los archivos de comando existentes continúan funcionando.

258 

259Más información: [Extend Claude with skills](/es/skills)

260 

261### Subagent

262 

263Un asistente de IA especializado que se ejecuta en su propia ventana de contexto con un prompt del sistema personalizado, acceso a herramientas específicas y permisos independientes. Trabaja en una tarea delegada y devuelve un resumen a la conversación principal. Use subagents para mantener grandes exploraciones fuera de su contexto principal o para ejecutar investigación en paralelo. Diferente de [agent teams](#agent-teams), donde cada agente es una sesión completamente independiente con la que puede hablar directamente.

264 

265Los subagents integrados incluyen Explore, Plan y propósito general.

266 

267Más información: [Create custom subagents](/es/sub-agents)

268 

269### Surface

270 

271Cualquier lugar donde acceda a Claude Code: la CLI, VS Code, JetBrains, Desktop o claude.ai. Todas las superficies comparten el mismo motor, por lo que su CLAUDE.md, configuración y skills funcionan de la misma manera en todas ellas. Slack y la extensión de Chrome son integraciones que se conectan a una superficie en lugar de ser superficies en sí mismas.

272 

273Más información: [Platforms and integrations](/es/platforms)

274 

275## T

276 

277### Teleport

278 

279Un comando, `/teleport`, que extrae una sesión de Claude Code en la nube a su terminal local. Claude obtiene la rama, carga el historial de conversación y reanuda desde el último estado de la sesión web. La dirección inversa es `--remote`, que envía una tarea local para ejecutarse en la web.

280 

281Más información: [From web to terminal](/es/claude-code-on-the-web#from-web-to-terminal)

282 

283### Tool

284 

285Una acción que Claude puede tomar: leer un archivo, editar código, ejecutar un comando de shell, buscar en la web, generar un subagent. Las herramientas son lo que hace que Claude Code sea agentic. Sin ellas, Claude solo puede responder con texto. Cada uso de herramienta devuelve un resultado que informa la siguiente decisión de Claude en el [agentic loop](#agentic-loop).

286 

287Más información: [Tools available to Claude](/es/tools-reference)

288 

289## W

290 

291### Worktree isolation

292 

293Un modo de aislamiento que ejecuta Claude en un worktree git separado bajo `.claude/worktrees/`, habilitado con la bandera `-w` o `isolation: worktree` en la configuración de subagent. Los cambios permanecen en una rama separada en un directorio separado, por lo que los agentes paralelos no sobrescriben los archivos de los demás.

294 

295Más información: [Run parallel sessions with git worktrees](/es/common-workflows#run-parallel-claude-code-sessions-with-git-worktrees)

296 

297***

298 

299## Términos deprecados y renombrados

300 

301Estos términos aparecen en documentos más antiguos, publicaciones de blog y contenido de la comunidad. Use el nombre actual cuando busque en este sitio.

302 

303| Término antiguo | Ahora llamado | Notas |

304| --------------- | --------------------------------------------- | ---------------------------------------------- |

305| Headless mode | [Non-interactive mode](#non-interactive-mode) | Misma bandera `-p`, mismo comportamiento |

306| Custom commands | [Skills](#skill) | Los archivos `.claude/commands/` aún funcionan |

307| Slash commands | Commands | "Slash" se eliminó de la copia del producto |

google-vertex-ai.md +387 −0 created

Details

1> ## Documentation Index

2> Fetch the complete documentation index at: https://code.claude.com/docs/llms.txt

3> Use this file to discover all available pages before exploring further.

4 

5# Claude Code en Google Vertex AI

6 

7> Aprenda a configurar Claude Code a través de Google Vertex AI, incluida la configuración, la configuración de IAM y la solución de problemas.

8 

9export const ContactSalesCard = ({surface}) => {

10 const utm = content => `utm_source=claude_code&utm_medium=docs&utm_content=${surface}_${content}`;

11 const iconArrowRight = (size = 13) => <svg width={size} height={size} viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2.5" strokeLinecap="round" strokeLinejoin="round" aria-hidden="true">

12 <line x1="5" y1="12" x2="19" y2="12" />

13 <polyline points="12 5 19 12 12 19" />

14 </svg>;

15 const STYLES = `

16.cc-cs {

17 --cs-slate: #141413;

18 --cs-clay: #d97757;

19 --cs-clay-deep: #c6613f;

20 --cs-gray-000: #ffffff;

21 --cs-gray-700: #3d3d3a;

22 --cs-border-default: rgba(31, 30, 29, 0.15);

23 font-family: inherit;

24}

25.dark .cc-cs {

26 --cs-slate: #f0eee6;

27 --cs-gray-000: #262624;

28 --cs-gray-700: #bfbdb4;

29 --cs-border-default: rgba(240, 238, 230, 0.14);

30}

31.cc-cs-card {

32 display: flex; align-items: center; justify-content: space-between;

33 gap: 16px; padding: 14px 16px; margin: 0;

34 background: var(--cs-gray-000); border: 0.5px solid var(--cs-border-default);

35 border-radius: 8px; flex-wrap: wrap;

36}

37.cc-cs-text { font-size: 13px; color: var(--cs-gray-700); line-height: 1.5; flex: 1; min-width: 240px; }

38.cc-cs-text strong { font-weight: 550; color: var(--cs-slate); }

39.cc-cs-actions { display: flex; align-items: center; gap: 8px; flex-shrink: 0; }

40.cc-cs-btn-clay {

41 display: inline-flex; align-items: center; gap: 8px;

42 background: var(--cs-clay-deep); color: #fff; border: none;

43 border-radius: 8px; padding: 8px 14px;

44 font-size: 13px; font-weight: 500;

45 transition: background-color 0.15s; white-space: nowrap;

46}

47.cc-cs-btn-clay:hover { background: var(--cs-clay); }

48.cc-cs-btn-ghost {

49 display: inline-flex; align-items: center; gap: 8px;

50 background: transparent; color: var(--cs-gray-700);

51 border: 0.5px solid var(--cs-border-default);

52 border-radius: 8px; padding: 8px 14px;

53 font-size: 13px; font-weight: 500;

54}

55.cc-cs-btn-ghost:hover { background: rgba(0, 0, 0, 0.04); }

56.dark .cc-cs-btn-ghost:hover { background: rgba(255, 255, 255, 0.04); }

57@media (max-width: 720px) {

58 .cc-cs-actions { width: 100%; }

59}

60`;

61 return <div className="cc-cs not-prose">

62 <style>{STYLES}</style>

63 <div className="cc-cs-card">

64 <div className="cc-cs-text">

65 <strong>Deploying Claude Code across your organization?</strong> Talk to sales about enterprise plans, SSO, and centralized billing.

66 </div>

67 <div className="cc-cs-actions">

68 <a href={`https://claude.com/pricing?${utm('view_plans')}#plans-business`} className="cc-cs-btn-ghost">

69 View plans

70 </a>

71 <a href={`https://claude.com/contact-sales?${utm('contact_sales')}`} className="cc-cs-btn-clay">

72 Contact sales {iconArrowRight()}

73 </a>

74 </div>

75 </div>

76 </div>;

77};

78 

79export const Experiment = ({flag, treatment, children}) => {

80 const VID_KEY = 'exp_vid';

81 const CONSENT_COUNTRIES = new Set(['AT', 'BE', 'BG', 'HR', 'CY', 'CZ', 'DK', 'EE', 'FI', 'FR', 'DE', 'GR', 'HU', 'IE', 'IT', 'LV', 'LT', 'LU', 'MT', 'NL', 'PL', 'PT', 'RO', 'SK', 'SI', 'ES', 'SE', 'RE', 'GP', 'MQ', 'GF', 'YT', 'BL', 'MF', 'PM', 'WF', 'PF', 'NC', 'AW', 'CW', 'SX', 'FO', 'GL', 'AX', 'GB', 'UK', 'AI', 'BM', 'IO', 'VG', 'KY', 'FK', 'GI', 'MS', 'PN', 'SH', 'TC', 'GG', 'JE', 'IM', 'CA', 'BR', 'IN']);

82 const fnv1a = s => {

83 let h = 0x811c9dc5;

84 for (let i = 0; i < s.length; i++) {

85 h ^= s.charCodeAt(i);

86 h += (h << 1) + (h << 4) + (h << 7) + (h << 8) + (h << 24);

87 }

88 return h >>> 0;

89 };

90 const bucket = (seed, vid) => fnv1a(fnv1a(seed + vid) + '') % 10000 < 5000 ? 'control' : 'treatment';

91 const [decision] = useState(() => {

92 const params = new URLSearchParams(location.search);

93 const preBucketed = document.documentElement.dataset['gb_' + flag.replace(/-/g, '_')];

94 const force = params.get('gb-force');

95 if (force) {

96 for (const p of force.split(',')) {

97 const [k, v] = p.split(':');

98 if (k === flag) return {

99 variant: v || 'treatment',

100 track: false

101 };

102 }

103 }

104 if (navigator.globalPrivacyControl) {

105 return {

106 variant: 'control',

107 track: false

108 };

109 }

110 const prefsMatch = document.cookie.match(/(?:^|; )anthropic-consent-preferences=([^;]+)/);

111 if (prefsMatch) {

112 try {

113 if (JSON.parse(decodeURIComponent(prefsMatch[1])).analytics !== true) {

114 return {

115 variant: 'control',

116 track: false

117 };

118 }

119 } catch {

120 return {

121 variant: 'control',

122 track: false

123 };

124 }

125 } else {

126 const country = params.get('country')?.toUpperCase() || (document.cookie.match(/(?:^|; )cf_geo=([A-Z]{2})/) || [])[1];

127 if (!country || CONSENT_COUNTRIES.has(country)) {

128 return {

129 variant: 'control',

130 track: false

131 };

132 }

133 }

134 let vid;

135 try {

136 const ajsMatch = document.cookie.match(/(?:^|; )ajs_anonymous_id=([^;]+)/);

137 if (ajsMatch) {

138 vid = decodeURIComponent(ajsMatch[1]).replace(/^"|"$/g, '');

139 } else {

140 vid = localStorage.getItem(VID_KEY);

141 if (!vid) {

142 vid = crypto.randomUUID();

143 }

144 document.cookie = `ajs_anonymous_id=${vid}; domain=.claude.com; path=/; Secure; SameSite=Lax; max-age=31536000`;

145 }

146 try {

147 localStorage.setItem(VID_KEY, vid);

148 } catch {}

149 } catch {

150 return {

151 variant: 'control',

152 track: false

153 };

154 }

155 const variant = preBucketed === '1' ? 'treatment' : preBucketed === '0' ? 'control' : bucket(flag, vid);

156 return {

157 variant,

158 track: true,

159 vid

160 };

161 });

162 useEffect(() => {

163 if (!decision.track) return;

164 fetch('https://api.anthropic.com/api/event_logging/v2/batch', {

165 method: 'POST',

166 headers: {

167 'Content-Type': 'application/json',

168 'x-service-name': 'claude_code_docs'

169 },

170 body: JSON.stringify({

171 events: [{

172 event_type: 'GrowthbookExperimentEvent',

173 event_data: {

174 device_id: decision.vid,

175 anonymous_id: decision.vid,

176 timestamp: new Date().toISOString(),

177 experiment_id: flag,

178 variation_id: decision.variant === 'treatment' ? 1 : 0,

179 environment: 'production'

180 }

181 }]

182 }),

183 keepalive: true

184 }).catch(() => {});

185 }, []);

186 return decision.variant === 'treatment' ? treatment : children;

187};

188 

189<Experiment flag="docs-contact-sales-cta" treatment={<ContactSalesCard surface="vertex" />} />

190 

191## Requisitos previos

192 

193Antes de configurar Claude Code con Vertex AI, asegúrese de tener:

194 

195* Una cuenta de Google Cloud Platform (GCP) con facturación habilitada

196* Un proyecto de GCP con la API de Vertex AI habilitada

197* Acceso a los modelos Claude deseados (por ejemplo, Claude Sonnet 4.6)

198* Google Cloud SDK (`gcloud`) instalado y configurado

199* Cuota asignada en la región de GCP deseada

200 

201Para iniciar sesión con sus propias credenciales de Vertex AI, siga [Iniciar sesión con Vertex AI](#sign-in-with-vertex-ai) a continuación. Para implementar Claude Code en un equipo, utilice los pasos de [configuración manual](#set-up-manually) y [fije las versiones de su modelo](#5-pin-model-versions) antes de implementar.

202 

203## Iniciar sesión con Vertex AI

204 

205Si tiene credenciales de Google Cloud y desea comenzar a usar Claude Code a través de Vertex AI, el asistente de inicio de sesión lo guía a través del proceso. Completa los requisitos previos del lado de GCP una vez por proyecto; el asistente maneja el lado de Claude Code.

206 

207<Note>

208 El asistente de configuración de Vertex AI requiere Claude Code v2.1.98 o posterior. Ejecute `claude --version` para verificar.

209</Note>

210 

211<Steps>

212 <Step title="Habilitar modelos Claude en su proyecto de GCP">

213 [Habilite la API de Vertex AI](#1-enable-vertex-ai-api) para su proyecto, luego solicite acceso a los modelos Claude que desee en el [Vertex AI Model Garden](https://console.cloud.google.com/vertex-ai/model-garden). Consulte [Configuración de IAM](#iam-configuration) para los permisos que su cuenta necesita.

214 </Step>

215 

216 <Step title="Inicie Claude Code y elija Vertex AI">

217 Ejecute `claude`. En el mensaje de inicio de sesión, seleccione **3rd-party platform**, luego **Google Vertex AI**.

218 </Step>

219 

220 <Step title="Siga los mensajes del asistente">

221 Elija cómo se autentica en Google Cloud: Credenciales predeterminadas de aplicación de `gcloud`, un archivo de clave de cuenta de servicio, o credenciales ya en su entorno. El asistente detecta su proyecto y región, verifica qué modelos Claude puede invocar su proyecto, y le permite fijarlos. Guarda el resultado en el bloque `env` de su [archivo de configuración de usuario](/es/settings), por lo que no necesita exportar variables de entorno usted mismo.

222 </Step>

223</Steps>

224 

225Después de haber iniciado sesión, ejecute `/setup-vertex` en cualquier momento para reabrirlo el asistente y cambiar sus credenciales, proyecto, región o fijaciones de modelo.

226 

227## Configuración de región

228 

229Claude Code admite puntos finales de Vertex AI [globales](https://cloud.google.com/blog/products/ai-machine-learning/global-endpoint-for-claude-models-generally-available-on-vertex-ai), multirregión y regionales. Establezca `CLOUD_ML_REGION` en `global`, una ubicación multirregión como `eu` o `us`, o una región específica como `us-east5`. Claude Code selecciona el nombre de host correcto de Vertex AI para cada formulario, incluidos los hosts `aiplatform.eu.rep.googleapis.com` y `aiplatform.us.rep.googleapis.com` para ubicaciones multirregión.

230 

231<Note>

232 Vertex AI puede no admitir los modelos predeterminados de Claude Code en todos los tipos de puntos finales. La disponibilidad del modelo varía según [regiones específicas](https://cloud.google.com/vertex-ai/generative-ai/docs/learn/locations#genai-partner-models), ubicaciones multirregión y [puntos finales globales](https://cloud.google.com/vertex-ai/generative-ai/docs/partner-models/use-partner-models#supported_models). Es posible que deba cambiar a una ubicación compatible o especificar un modelo compatible.

233</Note>

234 

235## Configurar manualmente

236 

237Para configurar Vertex AI a través de variables de entorno en lugar del asistente, por ejemplo en CI o una implementación empresarial con script, siga los pasos a continuación.

238 

239### 1. Habilitar la API de Vertex AI

240 

241Habilite la API de Vertex AI en su proyecto de GCP:

242 

243```bash theme={null}

244# Establezca su ID de proyecto

245gcloud config set project YOUR-PROJECT-ID

246 

247# Habilitar la API de Vertex AI

248gcloud services enable aiplatform.googleapis.com

249```

250 

251### 2. Solicitar acceso al modelo

252 

253Solicite acceso a los modelos Claude en Vertex AI:

254 

2551. Navegue al [Vertex AI Model Garden](https://console.cloud.google.com/vertex-ai/model-garden)

2562. Busque modelos "Claude"

2573. Solicite acceso a los modelos Claude deseados (por ejemplo, Claude Sonnet 4.6)

2584. Espere la aprobación (puede tomar 24-48 horas)

259 

260### 3. Configurar credenciales de GCP

261 

262Claude Code utiliza la autenticación estándar de Google Cloud.

263 

264Para obtener más información, consulte la [documentación de autenticación de Google Cloud](https://cloud.google.com/docs/authentication).

265 

266Claude Code v2.1.121 o posterior admite [Federación de identidad de carga de trabajo basada en certificados X.509](https://cloud.google.com/iam/docs/workload-identity-federation-with-x509-certificates) a través de la misma cadena de credenciales de aplicación predeterminada. Establezca `GOOGLE_APPLICATION_CREDENTIALS` en la ruta de su archivo de configuración de credenciales.

267 

268<Note>

269 Al autenticarse, Claude Code utilizará automáticamente el ID de proyecto de la variable de entorno `ANTHROPIC_VERTEX_PROJECT_ID`. Para anular esto, establezca una de estas variables de entorno: `GCLOUD_PROJECT`, `GOOGLE_CLOUD_PROJECT` o `GOOGLE_APPLICATION_CREDENTIALS`.

270</Note>

271 

272### 4. Configurar Claude Code

273 

274Establezca las siguientes variables de entorno:

275 

276```bash theme={null}

277# Habilitar la integración de Vertex AI

278export CLAUDE_CODE_USE_VERTEX=1

279export CLOUD_ML_REGION=global

280export ANTHROPIC_VERTEX_PROJECT_ID=YOUR-PROJECT-ID

281 

282# Opcional: Anular la URL del punto final de Vertex para puntos finales personalizados o puertas de enlace

283# export ANTHROPIC_VERTEX_BASE_URL=https://aiplatform.googleapis.com

284 

285# Opcional: Deshabilitar el almacenamiento en caché de indicaciones si es necesario

286export DISABLE_PROMPT_CACHING=1

287 

288# Opcional: Solicitar TTL de caché de indicaciones de 1 hora en lugar del predeterminado de 5 minutos

289export ENABLE_PROMPT_CACHING_1H=1

290 

291# Cuando CLOUD_ML_REGION=global, anule la región para modelos que no admiten puntos finales globales

292export VERTEX_REGION_CLAUDE_HAIKU_4_5=us-east5

293export VERTEX_REGION_CLAUDE_4_6_SONNET=europe-west1

294```

295 

296La mayoría de las versiones de modelo tienen una variable `VERTEX_REGION_CLAUDE_*` correspondiente. Consulte la [referencia de variables de entorno](/es/env-vars) para obtener la lista completa. Verifique [Vertex Model Garden](https://console.cloud.google.com/vertex-ai/model-garden) para determinar qué modelos admiten puntos finales globales frente a solo regionales.

297 

298[Prompt caching](https://platform.claude.com/docs/en/build-with-claude/prompt-caching) se habilita automáticamente. Para deshabilitarlo, establezca `DISABLE_PROMPT_CACHING=1`. Para solicitar un TTL de caché de 1 hora en lugar del predeterminado de 5 minutos, establezca `ENABLE_PROMPT_CACHING_1H=1`; las escrituras de caché con un TTL de 1 hora se facturan a una tarifa más alta. Para límites de velocidad elevados, póngase en contacto con el soporte de Google Cloud. Al usar Vertex AI, los comandos `/login` y `/logout` están deshabilitados ya que la autenticación se maneja a través de credenciales de Google Cloud.

299 

300[MCP tool search](/es/mcp#scale-with-mcp-tool-search) está deshabilitado de forma predeterminada en Vertex AI porque el punto final no acepta el encabezado beta requerido. Todas las definiciones de herramientas MCP se cargan por adelantado en su lugar. Para participar, establezca `ENABLE_TOOL_SEARCH=true`.

301 

302### 5. Fijar versiones de modelo

303 

304<Warning>

305 Fije versiones de modelo específicas al implementar para varios usuarios. Sin fijar, alias de modelo como `sonnet` y `opus` se resuelven a la versión más reciente, que puede no estar habilitada aún en su proyecto de Vertex AI cuando Anthropic lanza una actualización. Claude Code [retrocede](#startup-model-checks) a la versión anterior al inicio cuando la más reciente no está disponible, pero fijar le permite controlar cuándo sus usuarios se mueven a un nuevo modelo.

306</Warning>

307 

308Establezca estas variables de entorno en ID de modelo específicos de Vertex AI.

309 

310Sin `ANTHROPIC_DEFAULT_OPUS_MODEL`, el alias `opus` en Vertex se resuelve a Opus 4.6. Establézcalo en el ID de Opus 4.7 para usar el modelo más reciente:

311 

312```bash theme={null}

313export ANTHROPIC_DEFAULT_OPUS_MODEL='claude-opus-4-7'

314export ANTHROPIC_DEFAULT_SONNET_MODEL='claude-sonnet-4-6'

315export ANTHROPIC_DEFAULT_HAIKU_MODEL='claude-haiku-4-5@20251001'

316```

317 

318Para los ID de modelo actuales y heredados, consulte [Descripción general de modelos](https://platform.claude.com/docs/en/about-claude/models/overview). Consulte [Configuración de modelo](/es/model-config#pin-models-for-third-party-deployments) para obtener la lista completa de variables de entorno.

319 

320Claude Code utiliza estos modelos predeterminados cuando no se establecen variables de fijación:

321 

322| Tipo de modelo | Valor predeterminado |

323| :-------------------- | :--------------------------- |

324| Modelo principal | `claude-sonnet-4-5@20250929` |

325| Modelo pequeño/rápido | `claude-haiku-4-5@20251001` |

326 

327Para personalizar aún más los modelos:

328 

329```bash theme={null}

330export ANTHROPIC_MODEL='claude-opus-4-7'

331export ANTHROPIC_DEFAULT_HAIKU_MODEL='claude-haiku-4-5@20251001'

332```

333 

334## Verificaciones de modelo al inicio

335 

336Cuando Claude Code se inicia con Vertex AI configurado, verifica que los modelos que pretende usar sean accesibles en su proyecto. Esta verificación requiere Claude Code v2.1.98 o posterior.

337 

338Si ha fijado una versión de modelo que es más antigua que el valor predeterminado actual de Claude Code, y su proyecto puede invocar la versión más reciente, Claude Code le solicita que actualice la fijación. Aceptar escribe el nuevo ID de modelo en su [archivo de configuración de usuario](/es/settings) y reinicia Claude Code. Rechazar se recuerda hasta el próximo cambio de versión predeterminada.

339 

340Si no ha fijado un modelo y el valor predeterminado actual no está disponible en su proyecto, Claude Code retrocede a la versión anterior para la sesión actual y muestra un aviso. El retroceso no se persiste. Habilite el modelo más reciente en [Model Garden](https://console.cloud.google.com/vertex-ai/model-garden) o [fije una versión](#5-pin-model-versions) para hacer la opción permanente.

341 

342## Configuración de IAM

343 

344Asigne los permisos de IAM requeridos:

345 

346El rol `roles/aiplatform.user` incluye los permisos requeridos:

347 

348* `aiplatform.endpoints.predict` - Requerido para la invocación de modelo y conteo de tokens

349 

350Para permisos más restrictivos, cree un rol personalizado con solo los permisos anteriores.

351 

352Para obtener más detalles, consulte la [documentación de IAM de Vertex](https://cloud.google.com/vertex-ai/docs/general/access-control).

353 

354<Note>

355 Cree un proyecto de GCP dedicado para Claude Code para simplificar el seguimiento de costos y el control de acceso.

356</Note>

357 

358## Ventana de contexto de 1M de tokens

359 

360Claude Opus 4.7, Opus 4.6 y Sonnet 4.6 admiten la [ventana de contexto de 1M de tokens](https://platform.claude.com/docs/en/build-with-claude/context-windows#1m-token-context-window) en Vertex AI. Claude Code habilita automáticamente la ventana de contexto extendida cuando selecciona una variante de modelo de 1M.

361 

362El [asistente de configuración](#sign-in-with-vertex-ai) ofrece una opción de contexto de 1M cuando fija modelos. Para habilitarlo para un modelo fijado manualmente en su lugar, agregue `[1m]` al ID del modelo. Consulte [Fijar modelos para implementaciones de terceros](/es/model-config#pin-models-for-third-party-deployments) para obtener detalles.

363 

364## Solución de problemas

365 

366Si encuentra problemas de cuota:

367 

368* Verifique las cuotas actuales o solicite un aumento de cuota a través de [Cloud Console](https://cloud.google.com/docs/quotas/view-manage)

369 

370Si encuentra errores "modelo no encontrado" 404:

371 

372* Confirme que el modelo está habilitado en [Model Garden](https://console.cloud.google.com/vertex-ai/model-garden)

373* Verifique que el modelo esté disponible en la ubicación que especificó. Algunos modelos se ofrecen solo en ubicaciones `global` o multirregión como `eu` y `us`, no en regiones específicas

374* Si utiliza `CLOUD_ML_REGION=global`, verifique que sus modelos admitan puntos finales globales en [Model Garden](https://console.cloud.google.com/vertex-ai/model-garden) en "Características compatibles". Para modelos que no admiten puntos finales globales, ya sea:

375 * Especifique un modelo compatible a través de `ANTHROPIC_MODEL` o `ANTHROPIC_DEFAULT_HAIKU_MODEL`, o

376 * Establezca una región o ubicación multirregión usando variables de entorno `VERTEX_REGION_<MODEL_NAME>`

377 

378Si encuentra errores 429:

379 

380* Para puntos finales regionales, asegúrese de que el modelo principal y el modelo pequeño/rápido sean compatibles en su región seleccionada

381* Considere cambiar a `CLOUD_ML_REGION=global` para una mejor disponibilidad

382 

383## Recursos adicionales

384 

385* [Documentación de Vertex AI](https://cloud.google.com/vertex-ai/docs)

386* [Precios de Vertex AI](https://cloud.google.com/vertex-ai/pricing)

387* [Cuotas y límites de Vertex AI](https://cloud.google.com/vertex-ai/docs/quotas)

headless.md +225 −0 created

Details

1> ## Documentation Index

2> Fetch the complete documentation index at: https://code.claude.com/docs/llms.txt

3> Use this file to discover all available pages before exploring further.

4 

5# Ejecutar Claude Code mediante programación

6 

7> Utilice el Agent SDK para ejecutar Claude Code mediante programación desde la CLI, Python o TypeScript.

8 

9El [Agent SDK](/es/agent-sdk/overview) le proporciona las mismas herramientas, bucle de agente y gestión de contexto que potencian Claude Code. Está disponible como CLI para scripts e CI/CD, o como paquetes de [Python](/es/agent-sdk/python) y [TypeScript](/es/agent-sdk/typescript) para control programático completo.

10 

11<Note>

12 La CLI se llamaba anteriormente "modo sin interfaz". La bandera `-p` y todas las opciones de CLI funcionan de la misma manera.

13</Note>

14 

15Para ejecutar Claude Code mediante programación desde la CLI, pase `-p` con su indicación y cualquier [opción de CLI](/es/cli-reference):

16 

17```bash theme={null}

18claude -p "Find and fix the bug in auth.py" --allowedTools "Read,Edit,Bash"

19```

20 

21Esta página cubre el uso del Agent SDK a través de la CLI (`claude -p`). Para los paquetes SDK de Python y TypeScript con salidas estructuradas, devoluciones de llamada de aprobación de herramientas y objetos de mensaje nativos, consulte la [documentación completa del Agent SDK](/es/agent-sdk/overview).

22 

23## Uso básico

24 

25Agregue la bandera `-p` (o `--print`) a cualquier comando `claude` para ejecutarlo de forma no interactiva. Todas las [opciones de CLI](/es/cli-reference) funcionan con `-p`, incluyendo:

26 

27* `--continue` para [continuar conversaciones](#continue-conversations)

28* `--allowedTools` para [aprobar herramientas automáticamente](#auto-approve-tools)

29* `--output-format` para [obtener salida estructurada](#get-structured-output)

30 

31Este ejemplo le pregunta a Claude sobre su base de código e imprime la respuesta:

32 

33```bash theme={null}

34claude -p "What does the auth module do?"

35```

36 

37### Comenzar más rápido con modo bare

38 

39Agregue `--bare` para reducir el tiempo de inicio omitiendo el descubrimiento automático de hooks, skills, plugins, servidores MCP, memoria automática y CLAUDE.md. Sin él, `claude -p` carga el mismo [contexto](/es/how-claude-code-works#the-context-window) que una sesión interactiva, incluyendo cualquier cosa configurada en el directorio de trabajo o `~/.claude`.

40 

41El modo bare es útil para CI y scripts donde necesita el mismo resultado en cada máquina. Un hook en el `~/.claude` de un compañero de equipo o un servidor MCP en el `.mcp.json` del proyecto no se ejecutarán, porque el modo bare nunca los lee. Solo las banderas que pasa explícitamente tienen efecto.

42 

43Este ejemplo ejecuta una tarea de resumen única en modo bare y aprueba previamente la herramienta Read para que la llamada se complete sin una solicitud de permiso:

44 

45```bash theme={null}

46claude --bare -p "Summarize this file" --allowedTools "Read"

47```

48 

49En modo bare Claude tiene acceso a las herramientas Bash, lectura de archivos y edición de archivos. Pase cualquier contexto que necesite con una bandera:

50 

51| Para cargar | Utilice |

52| ----------------------------------- | ------------------------------------------------------- |

53| Adiciones de indicación del sistema | `--append-system-prompt`, `--append-system-prompt-file` |

54| Configuración | `--settings <file-or-json>` |

55| Servidores MCP | `--mcp-config <file-or-json>` |

56| Agentes personalizados | `--agents <json>` |

57| Un directorio de plugin | `--plugin-dir <path>` |

58 

59El modo bare omite lecturas de OAuth y llavero. La autenticación de Anthropic debe provenir de `ANTHROPIC_API_KEY` o un `apiKeyHelper` en el JSON pasado a `--settings`. Bedrock, Vertex y Foundry utilizan sus credenciales de proveedor habituales.

60 

61<Note>

62 `--bare` es el modo recomendado para llamadas con scripts y SDK, y se convertirá en el predeterminado para `-p` en una versión futura.

63</Note>

64 

65## Ejemplos

66 

67Estos ejemplos destacan patrones comunes de CLI. Para CI y otras llamadas con scripts, agregue [`--bare`](#start-faster-with-bare-mode) para que no recojan lo que esté configurado localmente.

68 

69### Obtener salida estructurada

70 

71Utilice `--output-format` para controlar cómo se devuelven las respuestas:

72 

73* `text` (predeterminado): salida de texto sin formato

74* `json`: JSON estructurado con resultado, ID de sesión y metadatos

75* `stream-json`: JSON delimitado por saltos de línea para transmisión en tiempo real

76 

77Este ejemplo devuelve un resumen del proyecto como JSON con metadatos de sesión, con el resultado de texto en el campo `result`:

78 

79```bash theme={null}

80claude -p "Summarize this project" --output-format json

81```

82 

83Para obtener una salida que se ajuste a un esquema específico, utilice `--output-format json` con `--json-schema` y una definición de [JSON Schema](https://json-schema.org/). La respuesta incluye metadatos sobre la solicitud (ID de sesión, uso, etc.) con la salida estructurada en el campo `structured_output`.

84 

85Este ejemplo extrae nombres de funciones y los devuelve como una matriz de cadenas:

86 

87```bash theme={null}

88claude -p "Extract the main function names from auth.py" \

89 --output-format json \

90 --json-schema '{"type":"object","properties":{"functions":{"type":"array","items":{"type":"string"}}},"required":["functions"]}'

91```

92 

93<Tip>

94 Utilice una herramienta como [jq](https://jqlang.github.io/jq/) para analizar la respuesta y extraer campos específicos:

95 

96 ```bash theme={null}

97 # Extract the text result

98 claude -p "Summarize this project" --output-format json | jq -r '.result'

99 

100 # Extract structured output

101 claude -p "Extract function names from auth.py" \

102 --output-format json \

103 --json-schema '{"type":"object","properties":{"functions":{"type":"array","items":{"type":"string"}}},"required":["functions"]}' \

104 | jq '.structured_output'

105 ```

106</Tip>

107 

108### Transmitir respuestas

109 

110Utilice `--output-format stream-json` con `--verbose` e `--include-partial-messages` para recibir tokens a medida que se generan. Cada línea es un objeto JSON que representa un evento:

111 

112```bash theme={null}

113claude -p "Explain recursion" --output-format stream-json --verbose --include-partial-messages

114```

115 

116El siguiente ejemplo utiliza [jq](https://jqlang.github.io/jq/) para filtrar deltas de texto y mostrar solo el texto transmitido. La bandera `-r` genera cadenas sin formato (sin comillas) y `-j` se une sin saltos de línea para que los tokens se transmitan continuamente:

117 

118```bash theme={null}

119claude -p "Write a poem" --output-format stream-json --verbose --include-partial-messages | \

120 jq -rj 'select(.type == "stream_event" and .event.delta.type? == "text_delta") | .event.delta.text'

121```

122 

123Cuando una solicitud de API falla con un error reintentable, Claude Code emite un evento `system/api_retry` antes de reintentar. Puede usar esto para mostrar el progreso del reintento o implementar lógica de retroceso personalizada.

124 

125| Campo | Tipo | Descripción |

126| ---------------- | ------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |

127| `type` | `"system"` | tipo de mensaje |

128| `subtype` | `"api_retry"` | identifica esto como un evento de reintento |

129| `attempt` | entero | número de intento actual, comenzando en 1 |

130| `max_retries` | entero | reintentos totales permitidos |

131| `retry_delay_ms` | entero | milisegundos hasta el siguiente intento |

132| `error_status` | entero o nulo | código de estado HTTP, o `null` para errores de conexión sin respuesta HTTP |

133| `error` | cadena | categoría de error: `authentication_failed`, `oauth_org_not_allowed`, `billing_error`, `rate_limit`, `invalid_request`, `server_error`, `max_output_tokens`, o `unknown` |

134| `uuid` | cadena | identificador único del evento |

135| `session_id` | cadena | sesión a la que pertenece el evento |

136 

137El evento `system/init` informa metadatos de sesión incluyendo el modelo, herramientas, servidores MCP y plugins cargados. Es el primer evento en la transmisión a menos que [`CLAUDE_CODE_SYNC_PLUGIN_INSTALL`](/es/env-vars) esté configurado, en cuyo caso los eventos `plugin_install` lo preceden. Use los campos de plugin para fallar CI cuando un plugin no se cargó:

138 

139| Campo | Tipo | Descripción |

140| --------------- | ------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

141| `plugins` | matriz | plugins que se cargaron exitosamente, cada uno con `name` y `path` |

142| `plugin_errors` | matriz | errores de tiempo de carga de plugin como una versión de dependencia insatisfecha, cada uno con `plugin`, `type` y `message`. Los plugins afectados se degradan y están ausentes de `plugins`. La clave se omite cuando no hay errores |

143 

144Cuando [`CLAUDE_CODE_SYNC_PLUGIN_INSTALL`](/es/env-vars) está configurado, Claude Code emite eventos `system/plugin_install` mientras los plugins del marketplace se instalan antes del primer turno. Use estos para mostrar el progreso de instalación en su propia interfaz de usuario.

145 

146| Campo | Tipo | Descripción |

147| ------------ | ------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------- |

148| `type` | `"system"` | tipo de mensaje |

149| `subtype` | `"plugin_install"` | identifica esto como un evento de instalación de plugin |

150| `status` | `"started"`, `"installed"`, `"failed"`, o `"completed"` | `started` y `completed` enmarcan la instalación general; `installed` y `failed` reportan mercados individuales |

151| `name` | cadena, opcional | nombre del marketplace, presente en `installed` y `failed` |

152| `error` | cadena, opcional | mensaje de fallo, presente en `failed` |

153| `uuid` | cadena | identificador único del evento |

154| `session_id` | cadena | sesión a la que pertenece el evento |

155 

156Para transmisión programática con devoluciones de llamada y objetos de mensaje, consulte [Transmitir respuestas en tiempo real](/es/agent-sdk/streaming-output) en la documentación del Agent SDK.

157 

158### Aprobar herramientas automáticamente

159 

160Utilice `--allowedTools` para permitir que Claude use ciertas herramientas sin solicitar confirmación. Este ejemplo ejecuta un conjunto de pruebas y corrige fallos, permitiendo que Claude ejecute comandos Bash y lea/edite archivos sin pedir permiso:

161 

162```bash theme={null}

163claude -p "Run the test suite and fix any failures" \

164 --allowedTools "Bash,Read,Edit"

165```

166 

167Para establecer una línea base para toda la sesión en lugar de enumerar herramientas individuales, pase un [modo de permiso](/es/permission-modes). `dontAsk` deniega cualquier cosa que no esté en sus reglas `permissions.allow` o el [conjunto de comandos de solo lectura](/es/permissions#read-only-commands), que es útil para ejecuciones de CI bloqueadas. `acceptEdits` permite que Claude escriba archivos sin solicitar y también aprueba automáticamente comandos comunes del sistema de archivos como `mkdir`, `touch`, `mv` y `cp`. Otros comandos de shell y solicitudes de red aún necesitan una entrada `--allowedTools` o una regla `permissions.allow`, de lo contrario la ejecución se aborta cuando se intenta uno:

168 

169```bash theme={null}

170claude -p "Apply the lint fixes" --permission-mode acceptEdits

171```

172 

173### Crear una confirmación

174 

175Este ejemplo revisa los cambios preparados y crea una confirmación con un mensaje apropiado:

176 

177```bash theme={null}

178claude -p "Look at my staged changes and create an appropriate commit" \

179 --allowedTools "Bash(git diff *),Bash(git log *),Bash(git status *),Bash(git commit *)"

180```

181 

182La bandera `--allowedTools` utiliza [sintaxis de regla de permiso](/es/settings#permission-rule-syntax). El ` *` final habilita la coincidencia de prefijo, por lo que `Bash(git diff *)` permite cualquier comando que comience con `git diff`. El espacio antes de `*` es importante: sin él, `Bash(git diff*)` también coincidiría con `git diff-index`.

183 

184<Note>

185 Las [skills](/es/skills) invocadas por el usuario como `/commit` y los [comandos integrados](/es/commands) solo están disponibles en modo interactivo. En modo `-p`, describa la tarea que desea realizar en su lugar.

186</Note>

187 

188### Personalizar el indicador del sistema

189 

190Utilice `--append-system-prompt` para agregar instrucciones mientras mantiene el comportamiento predeterminado de Claude Code. Este ejemplo canaliza un diff de PR a Claude e le indica que revise las vulnerabilidades de seguridad:

191 

192```bash theme={null}

193gh pr diff "$1" | claude -p \

194 --append-system-prompt "You are a security engineer. Review for vulnerabilities." \

195 --output-format json

196```

197 

198Consulte [banderas de indicador del sistema](/es/cli-reference#system-prompt-flags) para más opciones, incluyendo `--system-prompt` para reemplazar completamente el indicador predeterminado.

199 

200### Continuar conversaciones

201 

202Utilice `--continue` para continuar la conversación más reciente, o `--resume` con un ID de sesión para continuar una conversación específica. Este ejemplo ejecuta una revisión y luego envía indicaciones de seguimiento:

203 

204```bash theme={null}

205# First request

206claude -p "Review this codebase for performance issues"

207 

208# Continue the most recent conversation

209claude -p "Now focus on the database queries" --continue

210claude -p "Generate a summary of all issues found" --continue

211```

212 

213Si está ejecutando múltiples conversaciones, capture el ID de sesión para reanudar una específica:

214 

215```bash theme={null}

216session_id=$(claude -p "Start a review" --output-format json | jq -r '.session_id')

217claude -p "Continue that review" --resume "$session_id"

218```

219 

220## Próximos pasos

221 

222* [Inicio rápido del Agent SDK](/es/agent-sdk/quickstart): construya su primer agente con Python o TypeScript

223* [Referencia de CLI](/es/cli-reference): todas las banderas y opciones de CLI

224* [GitHub Actions](/es/github-actions): utilice el Agent SDK en flujos de trabajo de GitHub

225* [GitLab CI/CD](/es/gitlab-ci-cd): utilice el Agent SDK en canalizaciones de GitLab

hooks.md +2653 −0 created

Details

1> ## Documentation Index

2> Fetch the complete documentation index at: https://code.claude.com/docs/llms.txt

3> Use this file to discover all available pages before exploring further.

4 

5# Referencia de hooks

6 

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 

9<Tip>

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

11</Tip>

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.

14 

15## Ciclo de vida de los hooks

16 

17Los hooks se activan en puntos específicos durante una sesión de Claude Code. Cuando se activa un evento y un matcher coincide, Claude Code pasa contexto JSON sobre el evento a su controlador de hook. Para hooks de comando, la entrada llega en stdin. Para hooks HTTP, llega como el cuerpo de la solicitud POST. Su controlador puede entonces inspeccionar la entrada, tomar medidas y opcionalmente devolver una decisión. Los eventos se dividen en tres cadencias: una vez por sesión (`SessionStart`, `SessionEnd`), una vez por turno (`UserPromptSubmit`, `Stop`, `StopFailure`) y en cada llamada a herramienta dentro del bucle agentico (`PreToolUse`, `PostToolUse`):

18 

19<div style={{maxWidth: "500px", margin: "0 auto"}}>

20 <Frame>

21 <img src="https://mintcdn.com/claude-code/ZIW26Z9pnpsXLhbS/images/hooks-lifecycle.svg?fit=max&auto=format&n=ZIW26Z9pnpsXLhbS&q=85&s=ee23691324deb6501df09bfdae560b64" alt="Diagrama del ciclo de vida de hooks que muestra Setup opcional alimentando a SessionStart, luego un bucle por turno que contiene UserPromptSubmit, UserPromptExpansion para slash commands, el bucle agentico anidado (PreToolUse, PermissionRequest, PostToolUse, PostToolUseFailure, PostToolBatch, SubagentStart/Stop, TaskCreated, TaskCompleted) y Stop o StopFailure, seguido de TeammateIdle, PreCompact, PostCompact y SessionEnd, con Elicitation y ElicitationResult anidados dentro de la ejecución de herramientas MCP, PermissionDenied como una rama lateral de PermissionRequest para denegaciones en modo automático, y WorktreeCreate, WorktreeRemove, Notification, ConfigChange, InstructionsLoaded, CwdChanged y FileChanged como eventos asincronos independientes" width="520" height="1228" data-path="images/hooks-lifecycle.svg" />

22 </Frame>

23</div>

24 

25La tabla a continuación resume cuándo se activa cada evento. La sección [Hook events](#hook-events) documenta el esquema de entrada completo y las opciones de control de decisión para cada uno.

26 

27| Event | When it fires |

28| :-------------------- | :----------------------------------------------------------------------------------------------------------------------------------------------------- |

29| `SessionStart` | When a session begins or resumes |

30| `Setup` | When you start Claude Code with `--init-only`, or with `--init` or `--maintenance` in `-p` mode. For one-time preparation in CI or scripts |

31| `UserPromptSubmit` | When you submit a prompt, before Claude processes it |

32| `UserPromptExpansion` | When a user-typed command expands into a prompt, before it reaches Claude. Can block the expansion |

33| `PreToolUse` | Before a tool call executes. Can block it |

34| `PermissionRequest` | When a permission dialog appears |

35| `PermissionDenied` | When a tool call is denied by the auto mode classifier. Return `{retry: true}` to tell the model it may retry the denied tool call |

36| `PostToolUse` | After a tool call succeeds |

37| `PostToolUseFailure` | After a tool call fails |

38| `PostToolBatch` | After a full batch of parallel tool calls resolves, before the next model call |

39| `Notification` | When Claude Code sends a notification |

40| `SubagentStart` | When a subagent is spawned |

41| `SubagentStop` | When a subagent finishes |

42| `TaskCreated` | When a task is being created via `TaskCreate` |

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

44| `Stop` | When Claude finishes responding |

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

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

47| `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 |

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

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

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

51| `WorktreeCreate` | When a worktree is being created via `--worktree` or `isolation: "worktree"`. Replaces default git behavior |

52| `WorktreeRemove` | When a worktree is being removed, either at session exit or when a subagent finishes |

53| `PreCompact` | Before context compaction |

54| `PostCompact` | After context compaction completes |

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

56| `ElicitationResult` | After a user responds to an MCP elicitation, before the response is sent back to the server |

57| `SessionEnd` | When a session terminates |

58 

59### Cómo se resuelve un hook

60 

61Para ver cómo encajan estas piezas, considere este hook `PreToolUse` que bloquea comandos de shell destructivos. El `matcher` se reduce a llamadas a herramientas Bash y la condición `if` se reduce aún más a subcomandos Bash que coinciden con `rm *`, por lo que `block-rm.sh` solo se genera cuando ambos filtros coinciden:

62 

63```json theme={null}

64{

65 "hooks": {

66 "PreToolUse": [

67 {

68 "matcher": "Bash",

69 "hooks": [

70 {

71 "type": "command",

72 "if": "Bash(rm *)",

73 "command": "\"$CLAUDE_PROJECT_DIR\"/.claude/hooks/block-rm.sh"

74 }

75 ]

76 }

77 ]

78 }

79}

80```

81 

82El script lee la entrada JSON desde stdin, extrae el comando y devuelve una `permissionDecision` de `"deny"` si contiene `rm -rf`:

83 

84```bash theme={null}

85#!/bin/bash

86# .claude/hooks/block-rm.sh

87COMMAND=$(jq -r '.tool_input.command')

88 

89if echo "$COMMAND" | grep -q 'rm -rf'; then

90 jq -n '{

91 hookSpecificOutput: {

92 hookEventName: "PreToolUse",

93 permissionDecision: "deny",

94 permissionDecisionReason: "Destructive command blocked by hook"

95 }

96 }'

97else

98 exit 0 # allow the command

99fi

100```

101 

102Ahora suponga que Claude Code decide ejecutar `Bash "rm -rf /tmp/build"`. Esto es lo que sucede:

103 

104<Frame>

105 <img src="https://mintcdn.com/claude-code/-tYw1BD_DEqfyyOZ/images/hook-resolution.svg?fit=max&auto=format&n=-tYw1BD_DEqfyyOZ&q=85&s=c73ebc1eeda2037570427d7af1e0a891" alt="Flujo de resolución de hooks: se activa el evento PreToolUse, el matcher verifica la coincidencia de Bash, la condición if verifica la coincidencia de Bash(rm *), se ejecuta el controlador de hooks, el resultado se devuelve a Claude Code" width="930" height="290" data-path="images/hook-resolution.svg" />

106</Frame>

107 

108<Steps>

109 <Step title="Se activa el evento">

110 El evento `PreToolUse` se activa. Claude Code envía la entrada de la herramienta como JSON en stdin al hook:

111 

112 ```json theme={null}

113 { "tool_name": "Bash", "tool_input": { "command": "rm -rf /tmp/build" }, ... }

114 ```

115 </Step>

116 

117 <Step title="El matcher verifica">

118 El matcher `"Bash"` coincide con el nombre de la herramienta, por lo que se activa este grupo de hooks. Si omite el matcher o usa `"*"`, el grupo se activa en cada ocurrencia del evento.

119 </Step>

120 

121 <Step title="La condición if verifica">

122 La condición `if` `"Bash(rm *)"` coincide porque `rm -rf /tmp/build` es un subcomando que coincide con `rm *`, por lo que se genera este controlador. Si el comando hubiera sido `npm test`, la verificación `if` habría fallado y `block-rm.sh` nunca se habría ejecutado, evitando la sobrecarga de generación de procesos. El campo `if` es opcional; sin él, cada controlador en el grupo coincidente se ejecuta.

123 </Step>

124 

125 <Step title="Se ejecuta el controlador de hooks">

126 El script inspecciona el comando completo y encuentra `rm -rf`, por lo que imprime una decisión en stdout:

127 

128 ```json theme={null}

129 {

130 "hookSpecificOutput": {

131 "hookEventName": "PreToolUse",

132 "permissionDecision": "deny",

133 "permissionDecisionReason": "Destructive command blocked by hook"

134 }

135 }

136 ```

137 

138 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, lo que le dice a Claude Code que permita la llamada a la herramienta sin más acciones.

139 </Step>

140 

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

142 Claude Code lee la decisión JSON, bloquea la llamada a la herramienta y muestra a Claude la razón.

143 </Step>

144</Steps>

145 

146La sección [Configuration](#configuration) a continuación documenta el esquema completo, y cada sección [hook event](#hook-events) documenta qué entrada recibe su comando y qué salida puede devolver.

147 

148## Configuración

149 

150Los hooks se definen en archivos de configuración JSON. La configuración tiene tres niveles de anidamiento:

151 

1521. Elija un [hook event](#hook-events) al que responder, como `PreToolUse` o `Stop`

1532. Agregue un [matcher group](#matcher-patterns) para filtrar cuándo se activa, como "solo para la herramienta Bash"

1543. Defina uno o más [hook handlers](#hook-handler-fields) para ejecutar cuando coincida

155 

156Consulte [Cómo se resuelve un hook](#how-a-hook-resolves) arriba para un recorrido completo con un ejemplo anotado.

157 

158<Note>

159 Esta página utiliza términos específicos para cada nivel: **hook event** para el punto del ciclo de vida, **matcher group** para el filtro y **hook handler** para el comando de shell, punto final HTTP, herramienta MCP, prompt o agente que se ejecuta. "Hook" por sí solo se refiere a la característica general.

160</Note>

161 

162### Ubicaciones de hooks

163 

164Dónde defina un hook determina su alcance:

165 

166| Ubicación | Alcance | Compartible |

167| :-------------------------------------------------------- | :--------------------------------- | :----------------------------------------- |

168| `~/.claude/settings.json` | Todos sus proyectos | No, local en su máquina |

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

170| `.claude/settings.local.json` | Proyecto único | No, ignorado por git |

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

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

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

174 

175Para obtener detalles sobre la resolución de archivos de configuración, consulte [settings](/es/settings). Los 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).

176 

177### Patrones de matcher

178 

179El campo `matcher` filtra cuándo se activan los hooks. Cómo se evalúa un matcher depende de los caracteres que contenga:

180 

181| Valor del matcher | Evaluado como | Ejemplo |

182| :------------------------------- | :----------------------------------------------------------- | :---------------------------------------------------------------------------------------------------------------------------------------------- |

183| `"*"`, `""` u omitido | Coincidir todo | se activa en cada ocurrencia del evento |

184| Solo letras, dígitos, `_` y `\|` | Cadena exacta, o lista de cadenas exactas separadas por `\|` | `Bash` coincide solo con la herramienta Bash; `Edit\|Write` coincide con cualquiera de las herramientas exactamente |

185| Contiene cualquier otro carácter | Expresión regular de JavaScript | `^Notebook` coincide con cualquier herramienta que comience con Notebook; `mcp__memory__.*` coincide con cada herramienta del servidor `memory` |

186 

187El evento `FileChanged` no sigue estas reglas al construir su lista de vigilancia. Consulte [FileChanged](#filechanged).

188 

189Cada tipo de evento coincide en un campo diferente:

190 

191| Evento | En qué filtra el matcher | Valores de matcher de ejemplo |

192| :------------------------------------------------------------------------------------------------------------------------------ | :---------------------------------------------------------------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------- |

193| `PreToolUse`, `PostToolUse`, `PostToolUseFailure`, `PermissionRequest`, `PermissionDenied` | nombre de la herramienta | `Bash`, `Edit\|Write`, `mcp__.*` |

194| `SessionStart` | cómo comenzó la sesión | `startup`, `resume`, `clear`, `compact` |

195| `Setup` | qué bandera CLI desencadenó la configuración | `init`, `maintenance` |

196| `SessionEnd` | por qué terminó la sesión | `clear`, `resume`, `logout`, `prompt_input_exit`, `bypass_permissions_disabled`, `other` |

197| `Notification` | tipo de notificación | `permission_prompt`, `idle_prompt`, `auth_success`, `elicitation_dialog`, `elicitation_complete`, `elicitation_response` |

198| `SubagentStart` | tipo de agente | `general-purpose`, `Explore`, `Plan` o nombres de agentes personalizados |

199| `PreCompact`, `PostCompact` | qué desencadenó la compactación | `manual`, `auto` |

200| `SubagentStop` | tipo de agente | los mismos valores que `SubagentStart` |

201| `ConfigChange` | fuente de configuración | `user_settings`, `project_settings`, `local_settings`, `policy_settings`, `skills` |

202| `CwdChanged` | sin soporte de matcher | siempre se activa en cada cambio de directorio |

203| `FileChanged` | nombres de archivo literales a vigilar (consulte [FileChanged](#filechanged)) | `.envrc\|.env` |

204| `StopFailure` | tipo de error | `rate_limit`, `authentication_failed`, `oauth_org_not_allowed`, `billing_error`, `invalid_request`, `server_error`, `max_output_tokens`, `unknown` |

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

206| `UserPromptExpansion` | nombre del comando | sus nombres de skill o comando |

207| `Elicitation` | nombre del servidor MCP | sus nombres de servidor MCP configurados |

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

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

210 

211El matcher se ejecuta contra un campo de la [entrada JSON](#hook-input-and-output) que Claude Code envía a su hook en stdin. Para eventos de herramientas, ese campo es `tool_name`. Cada sección [hook event](#hook-events) enumera el conjunto completo de valores de matcher y el esquema de entrada para ese evento.

212 

213Este ejemplo ejecuta un script de linting solo cuando Claude escribe o edita un archivo:

214 

215```json theme={null}

216{

217 "hooks": {

218 "PostToolUse": [

219 {

220 "matcher": "Edit|Write",

221 "hooks": [

222 {

223 "type": "command",

224 "command": "/path/to/lint-check.sh"

225 }

226 ]

227 }

228 ]

229 }

230}

231```

232 

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

234 

235Para 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.

236 

237#### Coincidir herramientas MCP

238 

239Las 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.

240 

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

242 

243* `mcp__memory__create_entities`: herramienta crear entidades del servidor Memory

244* `mcp__filesystem__read_file`: herramienta leer archivo del servidor Filesystem

245* `mcp__github__search_repositories`: herramienta de búsqueda del servidor GitHub

246 

247Para coincidir con cada herramienta de un servidor, agregue `.*` al prefijo del servidor. El `.*` es requerido: un matcher como `mcp__memory` contiene solo letras y guiones bajos, por lo que se compara como una cadena exacta y no coincide con ninguna herramienta.

248 

249* `mcp__memory__.*` coincide con todas las herramientas del servidor `memory`

250* `mcp__.*__write.*` coincide con cualquier herramienta cuyo nombre comience con `write` de cualquier servidor

251 

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

253 

254```json theme={null}

255{

256 "hooks": {

257 "PreToolUse": [

258 {

259 "matcher": "mcp__memory__.*",

260 "hooks": [

261 {

262 "type": "command",

263 "command": "echo 'Memory operation initiated' >> ~/mcp-operations.log"

264 }

265 ]

266 },

267 {

268 "matcher": "mcp__.*__write.*",

269 "hooks": [

270 {

271 "type": "command",

272 "command": "/home/user/scripts/validate-mcp-write.py"

273 }

274 ]

275 }

276 ]

277 }

278}

279```

280 

281### Campos del controlador de hooks

282 

283Cada objeto en el array `hooks` interno es un controlador de hook: el comando de shell, punto final HTTP, herramienta MCP, prompt de LLM o agente que se ejecuta cuando el matcher coincide. Hay cinco tipos:

284 

285* **[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.

286* **[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.

287* **[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.

288* **[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).

289* **[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).

290 

291#### Campos comunes

292 

293Estos campos se aplican a todos los tipos de hooks:

294 

295| Campo | Requerido | Descripción |

296| :-------------- | :-------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

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

298| `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, o si un comando Bash es demasiado complejo para analizar. 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) |

299| `timeout` | no | Segundos antes de cancelar. Valores predeterminados: 600 para comando, 30 para prompt, 60 para agente |

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

301| `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 |

302 

303El campo `if` contiene exactamente una regla de permiso. No hay sintaxis `&&`, `||` o de lista para combinar reglas; para aplicar múltiples condiciones, defina un controlador de hook separado para cada una. Para Bash, la regla se compara contra cada subcomando de la entrada de herramienta después de que se eliminan las asignaciones `VAR=value` iniciales, por lo que `if: "Bash(git push *)"` coincide tanto con `FOO=bar git push` como con `npm test && git push`. El hook se ejecuta si algún subcomando coincide, y siempre se ejecuta cuando el comando es demasiado complejo para analizar.

304 

305#### Campos de comando hook

306 

307Además de los [campos comunes](#common-fields), los hooks de comando aceptan estos campos:

308 

309| Campo | Requerido | Descripción |

310| :------------ | :-------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

311| `command` | sí | Comando de shell a ejecutar |

312| `async` | no | Si es `true`, se ejecuta en segundo plano sin bloquear. Consulte [Run hooks in the background](#run-hooks-in-the-background) |

313| `asyncRewake` | no | Si es `true`, se ejecuta en segundo plano y despierta a Claude en código de salida 2. Implica `async`. El stderr del hook, o stdout si stderr está vacío, se muestra a Claude como un recordatorio del sistema para que pueda reaccionar a un fallo de fondo de larga duración |

314| `shell` | no | Shell a usar para este hook. Acepta `"bash"` (predeterminado) o `"powershell"`. Establecer `"powershell"` ejecuta el comando a través de PowerShell en Windows. No requiere `CLAUDE_CODE_USE_POWERSHELL_TOOL` ya que los hooks generan PowerShell directamente |

315 

316#### Campos de hook HTTP

317 

318Además de los [campos comunes](#common-fields), los hooks HTTP aceptan estos campos:

319 

320| Campo | Requerido | Descripción |

321| :--------------- | :-------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |

322| `url` | sí | URL a la que enviar la solicitud POST |

323| `headers` | no | Encabezados HTTP adicionales como pares clave-valor. Los valores admiten interpolación de variables de entorno usando la sintaxis `$VAR_NAME` o `${VAR_NAME}`. Solo se resuelven las variables enumeradas en `allowedEnvVars` |

324| `allowedEnvVars` | no | Lista de nombres de variables de entorno que pueden interpolarse en valores de encabezado. Las referencias a variables no enumeradas se reemplazan con cadenas vacías. Requerido para que funcione cualquier interpolación de variable de entorno |

325 

326Claude Code envía la [entrada JSON](#hook-input-and-output) del hook como el cuerpo de la solicitud POST con `Content-Type: application/json`. El cuerpo de la respuesta usa el mismo [formato de salida JSON](#json-output) que los hooks de comando.

327 

328El manejo de errores difiere de los hooks de comando: las respuestas que no son 2xx, los fallos de conexión y los tiempos de espera agotados producen errores sin bloqueo que permiten que la ejecución continúe. Para bloquear una llamada a herramienta o denegar un permiso, devuelva una respuesta 2xx con un cuerpo JSON que contenga `decision: "block"` o un `hookSpecificOutput` con `permissionDecision: "deny"`.

329 

330Este ejemplo envía eventos `PreToolUse` a un servicio de validación local, autenticándose con un token de la variable de entorno `MY_TOKEN`:

331 

332```json theme={null}

333{

334 "hooks": {

335 "PreToolUse": [

336 {

337 "matcher": "Bash",

338 "hooks": [

339 {

340 "type": "http",

341 "url": "http://localhost:8080/hooks/pre-tool-use",

342 "timeout": 30,

343 "headers": {

344 "Authorization": "Bearer $MY_TOKEN"

345 },

346 "allowedEnvVars": ["MY_TOKEN"]

347 }

348 ]

349 }

350 ]

351 }

352}

353```

354 

355#### Campos de hook de herramienta MCP

356 

357Además de los [campos comunes](#common-fields), los hooks de herramienta MCP aceptan estos campos:

358 

359| Campo | Requerido | Descripción |

360| :------- | :-------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

361| `server` | sí | Nombre de un servidor MCP configurado. El servidor ya debe estar conectado; el hook nunca desencadena un flujo OAuth o de conexión |

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

363| `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}"` |

364 

365La salida de texto de la herramienta se trata como stdout de hook de comando: si se analiza como [salida JSON](#json-output) válida, se procesa como una decisión; de lo contrario, se muestra como texto sin formato. Si el servidor nombrado no está conectado, o la herramienta devuelve `isError: true`, el hook produce un error sin bloqueo y la ejecución continúa.

366 

367Los hooks de herramienta MCP están disponibles en cada evento de hook una vez que Claude Code se ha conectado a sus servidores MCP. `SessionStart` y `Setup` típicamente se activan antes de que los servidores terminen de conectarse, por lo que los hooks en esos eventos deben esperar el error "no conectado" en la primera ejecución.

368 

369Este ejemplo llama a la herramienta `security_scan` en el servidor MCP `my_server` después de cada `Write` o `Edit`, pasando la ruta del archivo editado:

370 

371```json theme={null}

372{

373 "hooks": {

374 "PostToolUse": [

375 {

376 "matcher": "Write|Edit",

377 "hooks": [

378 {

379 "type": "mcp_tool",

380 "server": "my_server",

381 "tool": "security_scan",

382 "input": { "file_path": "${tool_input.file_path}" }

383 }

384 ]

385 }

386 ]

387 }

388}

389```

390 

391#### Campos de hook de prompt y agente

392 

393Además de los [campos comunes](#common-fields), los hooks de prompt y agente aceptan estos campos:

394 

395| Campo | Requerido | Descripción |

396| :------- | :-------- | :------------------------------------------------------------------------------------------------------------ |

397| `prompt` | sí | Texto del prompt a enviar al modelo. Use `$ARGUMENTS` como marcador de posición para la entrada JSON del hook |

398| `model` | no | Modelo a usar para evaluación. Por defecto es un modelo rápido |

399 

400Todos 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 los hooks HTTP se deduplicarán por URL. Los 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.

401 

402### Referenciar scripts por ruta

403 

404Use variables de entorno para referenciar scripts de hooks relativos a la raíz del proyecto o plugin, independientemente del directorio de trabajo cuando se ejecuta el hook:

405 

406* `$CLAUDE_PROJECT_DIR`: la raíz del proyecto. Envuelva entre comillas para manejar rutas con espacios.

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

408* `${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.

409 

410<Tabs>

411 <Tab title="Scripts de proyecto">

412 Este ejemplo usa `$CLAUDE_PROJECT_DIR` para ejecutar un verificador de estilo desde el directorio `.claude/hooks/` del proyecto después de cualquier llamada a herramienta `Write` o `Edit`:

413 

414 ```json theme={null}

415 {

416 "hooks": {

417 "PostToolUse": [

418 {

419 "matcher": "Write|Edit",

420 "hooks": [

421 {

422 "type": "command",

423 "command": "\"$CLAUDE_PROJECT_DIR\"/.claude/hooks/check-style.sh"

424 }

425 ]

426 }

427 ]

428 }

429 }

430 ```

431 </Tab>

432 

433 <Tab title="Scripts de plugin">

434 Defina hooks de plugin en `hooks/hooks.json` con un campo `description` opcional de nivel superior. Cuando se habilita un plugin, sus hooks se fusionan con sus hooks de usuario y proyecto.

435 

436 Este ejemplo ejecuta un script de formato incluido con el plugin:

437 

438 ```json theme={null}

439 {

440 "description": "Automatic code formatting",

441 "hooks": {

442 "PostToolUse": [

443 {

444 "matcher": "Write|Edit",

445 "hooks": [

446 {

447 "type": "command",

448 "command": "${CLAUDE_PLUGIN_ROOT}/scripts/format.sh",

449 "timeout": 30

450 }

451 ]

452 }

453 ]

454 }

455 }

456 ```

457 

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

459 </Tab>

460</Tabs>

461 

462### Hooks en skills y agentes

463 

464Ademá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.

465 

466Se 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.

467 

468Los hooks usan el mismo formato de configuración que los hooks basados en configuración pero se limitan a la vida útil del componente y se limpian cuando finaliza.

469 

470Esta skill define un hook `PreToolUse` que ejecuta un script de validación de seguridad antes de cada comando `Bash`:

471 

472```yaml theme={null}

473---

474name: secure-operations

475description: Perform operations with security checks

476hooks:

477 PreToolUse:

478 - matcher: "Bash"

479 hooks:

480 - type: command

481 command: "./scripts/security-check.sh"

482---

483```

484 

485Los agentes usan el mismo formato en su frontmatter YAML.

486 

487### El menú `/hooks`

488 

489Escriba `/hooks` en Claude Code para abrir un navegador de solo lectura para sus hooks configurados. El menú muestra cada evento de hook con un recuento de hooks configurados, le permite profundizar en matchers y muestra los detalles completos de cada controlador de hook. Úselo para verificar la configuración, verificar desde qué archivo de configuración proviene un hook o inspeccionar el comando, prompt o URL de un hook.

490 

491El menú muestra los cinco tipos de hooks: `command`, `prompt`, `agent`, `http` y `mcp_tool`. Cada hook está etiquetado con un prefijo `[type]` y una fuente que indica dónde se definió:

492 

493* `User`: de `~/.claude/settings.json`

494* `Project`: de `.claude/settings.json`

495* `Local`: de `.claude/settings.local.json`

496* `Plugin`: de `hooks/hooks.json` de un plugin

497* `Session`: registrado en memoria para la sesión actual

498* `Built-in`: registrado internamente por Claude Code

499 

500Seleccionar un hook abre una vista de detalle que muestra su evento, matcher, tipo, archivo de origen y el comando, prompt o URL completo. El menú es de solo lectura: para agregar, modificar o eliminar hooks, edite el JSON de configuración directamente o pida a Claude que haga el cambio.

501 

502### Deshabilitar o eliminar hooks

503 

504Para eliminar un hook, elimine su entrada del archivo de configuración JSON.

505 

506Para deshabilitar temporalmente todos los hooks sin eliminarlos, establezca `"disableAllHooks": true` en su archivo de configuración. No hay forma de deshabilitar un hook individual mientras se mantiene en la configuración.

507 

508La configuración `disableAllHooks` respeta la jerarquía de configuración administrada. Si un administrador ha configurado hooks a través de configuración de política administrada, `disableAllHooks` establecido en configuración de usuario, proyecto o local no puede deshabilitar esos hooks administrados. Solo `disableAllHooks` establecido en el nivel de configuración administrada puede deshabilitar hooks administrados.

509 

510Las ediciones directas de hooks en archivos de configuración normalmente se capturan automáticamente por el observador de archivos.

511 

512## Entrada y salida de hooks

513 

514Los hooks de comando reciben datos JSON a través de stdin y comunican resultados a través de códigos de salida, stdout y stderr. Los hooks HTTP reciben el mismo JSON que el cuerpo de la solicitud POST y comunican resultados a través del cuerpo de la respuesta HTTP. Esta sección cubre campos y comportamiento comunes a todos los eventos. Cada sección de evento bajo [Hook events](#hook-events) incluye su esquema de entrada específico y opciones de control de decisión.

515 

516### Campos de entrada comunes

517 

518Los eventos de hook reciben estos campos como JSON, además de campos específicos del evento documentados en cada sección [hook event](#hook-events). Para hooks de comando, este JSON llega a través de stdin. Para hooks HTTP, llega como el cuerpo de la solicitud POST.

519 

520| Campo | Descripción |

521| :---------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

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

523| `transcript_path` | Ruta al JSON de conversación |

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

525| `permission_mode` | [Modo de permiso](/es/permissions#permission-modes) actual: `"default"`, `"plan"`, `"acceptEdits"`, `"auto"`, `"dontAsk"` o `"bypassPermissions"`. No todos los eventos reciben este campo: consulte cada ejemplo JSON de evento a continuación para verificar |

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

527 

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

529 

530| Campo | Descripción |

531| :----------- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

532| `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. |

533| `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. |

534 

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

536 

537```json theme={null}

538{

539 "session_id": "abc123",

540 "transcript_path": "/home/user/.claude/projects/.../transcript.jsonl",

541 "cwd": "/home/user/my-project",

542 "permission_mode": "default",

543 "hook_event_name": "PreToolUse",

544 "tool_name": "Bash",

545 "tool_input": {

546 "command": "npm test"

547 }

548}

549```

550 

551Los campos `tool_name` y `tool_input` son específicos del evento. Cada sección [hook event](#hook-events) documenta los campos adicionales para ese evento.

552 

553### Salida de código de salida

554 

555El código de salida de su comando de hook le dice a Claude Code si la acción debe proceder, ser bloqueada o ser ignorada.

556 

557**Exit 0** significa éxito. Claude Code analiza stdout para [campos de salida JSON](#json-output). La salida JSON solo se procesa en exit 0. Para la mayoría de eventos, stdout se escribe en el registro de depuración pero no se muestra en la transcripción. Las excepciones son `UserPromptSubmit`, `UserPromptExpansion` y `SessionStart`, donde stdout se agrega como contexto que Claude puede ver y actuar.

558 

559**Exit 2** significa un error de bloqueo. Claude Code ignora stdout y cualquier JSON en él. En su lugar, el texto de stderr se devuelve a Claude como un mensaje de error. El efecto depende del evento: `PreToolUse` bloquea la llamada a herramienta, `UserPromptSubmit` rechaza el prompt, y así sucesivamente. Consulte [exit code 2 behavior](#exit-code-2-behavior-per-event) para la lista completa.

560 

561**Cualquier otro código de salida** es un error sin bloqueo para la mayoría de eventos de hook. La transcripción muestra un aviso `<hook name> hook error` seguido de la primera línea de stderr, para que pueda identificar la causa sin `--debug`. La ejecución continúa y el stderr completo se escribe en el registro de depuración.

562 

563Por ejemplo, un script de comando de hook que bloquea comandos Bash peligrosos:

564 

565```bash theme={null}

566#!/bin/bash

567# Lee entrada JSON desde stdin, verifica el comando

568command=$(jq -r '.tool_input.command' < /dev/stdin)

569 

570if [[ "$command" == rm* ]]; then

571 echo "Blocked: rm commands are not allowed" >&2

572 exit 2 # Blocking error: tool call is prevented

573fi

574 

575exit 0 # Success: tool call proceeds

576```

577 

578<Warning>

579 Para la mayoría de eventos de hook, solo el código de salida 2 bloquea la acción. Claude Code trata el código de salida 1 como un error sin bloqueo y procede con la acción, aunque 1 es el código de fallo convencional de Unix. Si su hook está destinado a aplicar una política, use `exit 2`. La excepción es `WorktreeCreate`, donde cualquier código de salida distinto de cero aborta la creación de worktree.

580</Warning>

581 

582#### Comportamiento del código de salida 2 por evento

583 

584El código de salida 2 es la forma en que un hook señala "detente, no hagas esto". El efecto depende del evento, porque algunos eventos representan acciones que pueden bloquearse (como una llamada a herramienta que aún no ha sucedido) y otros representan cosas que ya sucedieron o no pueden prevenirse.

585 

586| Evento de hook | ¿Puede bloquear? | Qué sucede en exit 2 |

587| :-------------------- | :--------------- | :-------------------------------------------------------------------------------------------------------------------------------------------------------- |

588| `PreToolUse` | Sí | Bloquea la llamada a herramienta |

589| `PermissionRequest` | Sí | Deniega el permiso |

590| `UserPromptSubmit` | Sí | Bloquea el procesamiento del prompt y borra el prompt |

591| `UserPromptExpansion` | Sí | Bloquea la expansión |

592| `Stop` | Sí | Evita que Claude se detenga, continúa la conversación |

593| `SubagentStop` | Sí | Evita que el subagente se detenga |

594| `TeammateIdle` | Sí | Evita que el compañero se quede inactivo (el compañero continúa trabajando) |

595| `TaskCreated` | Sí | Revierte la creación de la tarea |

596| `TaskCompleted` | Sí | Evita que la tarea se marque como completada |

597| `ConfigChange` | Sí | Bloquea que el cambio de configuración tenga efecto (excepto `policy_settings`) |

598| `StopFailure` | No | La salida y el código de salida se ignoran |

599| `PostToolUse` | No | Muestra stderr a Claude (la herramienta ya se ejecutó) |

600| `PostToolUseFailure` | No | Muestra stderr a Claude (la herramienta ya falló) |

601| `PostToolBatch` | Sí | Detiene el bucle agentico antes de la siguiente llamada al modelo |

602| `PermissionDenied` | No | El código de salida y stderr se ignoran (la denegación ya ocurrió). Use JSON `hookSpecificOutput.retry: true` para decirle al modelo que puede reintentar |

603| `Notification` | No | Muestra stderr solo al usuario |

604| `SubagentStart` | No | Muestra stderr solo al usuario |

605| `SessionStart` | No | Muestra stderr solo al usuario |

606| `Setup` | No | Muestra stderr solo al usuario |

607| `SessionEnd` | No | Muestra stderr solo al usuario |

608| `CwdChanged` | No | Muestra stderr solo al usuario |

609| `FileChanged` | No | Muestra stderr solo al usuario |

610| `PreCompact` | Sí | Bloquea la compactación |

611| `PostCompact` | No | Muestra stderr solo al usuario |

612| `Elicitation` | Sí | Deniega la elicitación |

613| `ElicitationResult` | Sí | Bloquea la respuesta (la acción se convierte en decline) |

614| `WorktreeCreate` | Sí | Cualquier código de salida distinto de cero causa que la creación de worktree falle |

615| `WorktreeRemove` | No | Los fallos se registran solo en modo de depuración |

616| `InstructionsLoaded` | No | El código de salida se ignora |

617 

618### Manejo de respuesta HTTP

619 

620Los hooks HTTP usan códigos de estado HTTP y cuerpos de respuesta en lugar de códigos de salida y stdout:

621 

622* **2xx con un cuerpo vacío**: éxito, equivalente a código de salida 0 sin salida

623* **2xx con un cuerpo de texto plano**: éxito, el texto se agrega como contexto

624* **2xx con un cuerpo JSON**: éxito, analizado usando el mismo esquema [JSON output](#json-output) que los hooks de comando

625* **Estado que no es 2xx**: error sin bloqueo, la ejecución continúa

626* **Fallo de conexión o tiempo de espera agotado**: error sin bloqueo, la ejecución continúa

627 

628A diferencia de los hooks de comando, los hooks HTTP no pueden señalar un error de bloqueo solo a través de códigos de estado. Para bloquear una llamada a herramienta o denegar un permiso, devuelva una respuesta 2xx con un cuerpo JSON que contenga los campos de decisión apropiados.

629 

630### Salida JSON

631 

632Los códigos de salida le permiten permitir o bloquear, pero la salida JSON le da un control más granular. En lugar de salir con código 2 para bloquear, salga 0 e imprima un objeto JSON en stdout. Claude Code lee campos específicos de ese JSON para controlar el comportamiento, incluyendo [decision control](#decision-control) para bloquear, permitir o escalar al usuario.

633 

634<Note>

635 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.

636</Note>

637 

638El 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.

639 

640La salida de hook inyectada en contexto (`additionalContext`, `systemMessage` o stdout plano) está limitada 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.

641 

642El objeto JSON admite tres tipos de campos:

643 

644* **Campos universales** como `continue` funcionan en todos los eventos. Estos se enumeran en la tabla a continuación.

645* **`decision` y `reason` de nivel superior** son utilizados por algunos eventos para bloquear o proporcionar retroalimentación.

646* **`hookSpecificOutput`** es un objeto anidado para eventos que necesitan control más rico. Requiere un campo `hookEventName` establecido en el nombre del evento.

647 

648| Campo | Predeterminado | Descripción |

649| :--------------- | :------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |

650| `continue` | `true` | Si es `false`, Claude detiene el procesamiento completamente después de que se ejecuta el hook. Tiene precedencia sobre cualquier campo de decisión específico del evento |

651| `stopReason` | ninguno | Mensaje mostrado al usuario cuando `continue` es `false`. No se muestra a Claude |

652| `suppressOutput` | `false` | Si es `true`, omite stdout del registro de depuración |

653| `systemMessage` | ninguno | Mensaje de advertencia mostrado al usuario |

654 

655Para detener Claude completamente independientemente del tipo de evento:

656 

657```json theme={null}

658{ "continue": false, "stopReason": "Build failed, fix errors before continuing" }

659```

660 

661#### Agregar contexto para Claude

662 

663El campo `additionalContext` pasa una cadena de su hook a la ventana de contexto de Claude. Claude Code envuelve la cadena en un recordatorio del sistema e la inserta en la conversación en el punto donde se activó el hook. Claude lee el recordatorio en la siguiente solicitud del modelo, pero no aparece como un mensaje de chat en la interfaz.

664 

665Devuelva `additionalContext` dentro de `hookSpecificOutput` junto al nombre del evento:

666 

667```json theme={null}

668{

669 "hookSpecificOutput": {

670 "hookEventName": "PostToolUse",

671 "additionalContext": "This file is generated. Edit src/schema.ts and run `bun generate` instead."

672 }

673}

674```

675 

676Dónde aparece el recordatorio depende del evento:

677 

678* [SessionStart](#sessionstart), [Setup](#setup) y [SubagentStart](#subagentstart): al inicio de la conversación, antes del primer prompt

679* [UserPromptSubmit](#userpromptsubmit) y [UserPromptExpansion](#userpromptexpansion): junto al prompt enviado

680* [PreToolUse](#pretooluse), [PostToolUse](#posttooluse), [PostToolUseFailure](#posttoolusefailure) y [PostToolBatch](#posttoolbatch): junto al resultado de la herramienta

681 

682Cuando varios hooks devuelven `additionalContext` para el mismo evento, Claude recibe todos los valores. Si un valor excede 10.000 caracteres, Claude Code escribe el texto completo en un archivo en el directorio de sesión y pasa a Claude la ruta del archivo con una vista previa corta en su lugar.

683 

684Use `additionalContext` para información que Claude debe conocer sobre el estado actual de su entorno o la operación que acaba de ejecutarse:

685 

686* **Estado del entorno**: la rama actual, destino de implementación o banderas de características activas

687* **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

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

689 

690Para 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.

691 

692Escriba 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.

693 

694Una vez inyectado, el texto se guarda en la transcripción de sesión. Para eventos a mitad de sesión como `PostToolUse` o `UserPromptSubmit`, reanudar con `--continue` o `--resume` reproduce el texto guardado en lugar de volver a ejecutar el hook para turnos anteriores, por lo que valores como marcas de tiempo o SHAs de commit se vuelven obsoletos al reanudar. Los hooks `SessionStart` se ejecutan nuevamente al reanudar con `source` establecido en `"resume"`, por lo que pueden actualizar su contexto.

695 

696#### Control de decisión

697 

698No todos los eventos admiten bloqueo o control de comportamiento a través de JSON. Los eventos que lo hacen cada uno usan un conjunto diferente de campos para expresar esa decisión. Use esta tabla como referencia rápida antes de escribir un hook:

699 

700| Eventos | Patrón de decisión | Campos clave |

701| :---------------------------------------------------------------------------------------------------------------------------------- | :----------------------------------- | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

702| UserPromptSubmit, UserPromptExpansion, PostToolUse, PostToolUseFailure, PostToolBatch, Stop, SubagentStop, ConfigChange, PreCompact | `decision` de nivel superior | `decision: "block"`, `reason` |

703| TeammateIdle, TaskCreated, TaskCompleted | Código de salida o `continue: false` | El código de salida 2 bloquea la acción con retroalimentación de stderr. JSON `{"continue": false, "stopReason": "..."}` también detiene al compañero completamente, coincidiendo con el comportamiento del hook `Stop` |

704| PreToolUse | `hookSpecificOutput` | `permissionDecision` (allow/deny/ask/defer), `permissionDecisionReason` |

705| PermissionRequest | `hookSpecificOutput` | `decision.behavior` (allow/deny) |

706| PermissionDenied | `hookSpecificOutput` | `retry: true` le dice al modelo que puede reintentar la llamada a herramienta denegada |

707| WorktreeCreate | ruta return | El hook de comando imprime la ruta en stdout; el hook HTTP devuelve `hookSpecificOutput.worktreePath`. El fallo del hook o la ruta faltante falla la creación |

708| Elicitation | `hookSpecificOutput` | `action` (accept/decline/cancel), `content` (valores de campo de formulario para accept) |

709| ElicitationResult | `hookSpecificOutput` | `action` (accept/decline/cancel), `content` (valores de campo de formulario override) |

710| WorktreeRemove, Notification, SessionEnd, PostCompact, InstructionsLoaded, StopFailure, CwdChanged, FileChanged | Ninguno | Sin control de decisión. Se usa para efectos secundarios como registro o limpieza |

711 

712Aquí hay ejemplos de cada patrón en acción:

713 

714<Tabs>

715 <Tab title="Decisión de nivel superior">

716 Utilizado por `UserPromptSubmit`, `UserPromptExpansion`, `PostToolUse`, `PostToolUseFailure`, `PostToolBatch`, `Stop`, `SubagentStop`, `ConfigChange` y `PreCompact`. El único valor es `"block"`. Para permitir que la acción continúe, omita `decision` de su JSON, o salga 0 sin ningún JSON en absoluto:

717 

718 ```json theme={null}

719 {

720 "decision": "block",

721 "reason": "Test suite must pass before proceeding"

722 }

723 ```

724 </Tab>

725 

726 <Tab title="PreToolUse">

727 Usa `hookSpecificOutput` para control más rico: permitir, denegar, o escalar al usuario. También puede modificar la entrada de la herramienta antes de que se ejecute o inyectar contexto adicional para Claude. Consulte [PreToolUse decision control](#pretooluse-decision-control) para el conjunto completo de opciones.

728 

729 ```json theme={null}

730 {

731 "hookSpecificOutput": {

732 "hookEventName": "PreToolUse",

733 "permissionDecision": "deny",

734 "permissionDecisionReason": "Database writes are not allowed"

735 }

736 }

737 ```

738 </Tab>

739 

740 <Tab title="PermissionRequest">

741 Usa `hookSpecificOutput` para permitir o denegar una solicitud de permiso en nombre del usuario. Al permitir, también puede modificar la entrada de la herramienta o aplicar reglas de permiso para que el usuario no sea solicitado nuevamente. Consulte [PermissionRequest decision control](#permissionrequest-decision-control) para el conjunto completo de opciones.

742 

743 ```json theme={null}

744 {

745 "hookSpecificOutput": {

746 "hookEventName": "PermissionRequest",

747 "decision": {

748 "behavior": "allow",

749 "updatedInput": {

750 "command": "npm run lint"

751 }

752 }

753 }

754 }

755 ```

756 </Tab>

757</Tabs>

758 

759Para 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).

760 

761## Eventos de hook

762 

763Cada evento corresponde a un punto en el ciclo de vida de Claude Code donde los hooks pueden ejecutarse. Las secciones a continuación se ordenan para coincidir con el ciclo de vida: desde la configuración de sesión a través del bucle agentico hasta el final de la sesión. Cada sección describe cuándo se activa el evento, qué matchers admite, la entrada JSON que recibe y cómo controlar el comportamiento a través de la salida.

764 

765### SessionStart

766 

767Se 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.

768 

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

770 

771El valor del matcher corresponde a cómo se inició la sesión:

772 

773| Matcher | Cuándo se activa |

774| :-------- | :----------------------------------- |

775| `startup` | Nueva sesión |

776| `resume` | `--resume`, `--continue` o `/resume` |

777| `clear` | `/clear` |

778| `compact` | Compactación automática o manual |

779 

780#### Entrada de SessionStart

781 

782Además de los [campos de entrada comunes](#common-input-fields), los hooks SessionStart reciben `source`, `model` y opcionalmente `agent_type`. El campo `source` indica cómo comenzó la sesión: `"startup"` para nuevas sesiones, `"resume"` para sesiones reanudadas, `"clear"` después de `/clear` o `"compact"` después de compactación. El campo `model` contiene el identificador del modelo. Si inicia Claude Code con `claude --agent <name>`, un campo `agent_type` contiene el nombre del agente.

783 

784```json theme={null}

785{

786 "session_id": "abc123",

787 "transcript_path": "/Users/.../.claude/projects/.../00893aaf-19fa-41d2-8238-13269b9b3ca0.jsonl",

788 "cwd": "/Users/...",

789 "hook_event_name": "SessionStart",

790 "source": "startup",

791 "model": "claude-sonnet-4-6"

792}

793```

794 

795#### Control de decisión de SessionStart

796 

797Cualquier texto que su script de hook imprima en stdout se agrega como contexto para Claude. Además de los [campos de salida JSON](#json-output) disponibles para todos los hooks, puede devolver estos campos específicos del evento:

798 

799| Campo | Descripción |

800| :------------------ | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |

801| `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 |

802 

803```json theme={null}

804{

805 "hookSpecificOutput": {

806 "hookEventName": "SessionStart",

807 "additionalContext": "Current branch: feat/auth-refactor\nUncommitted changes: src/auth.ts, src/login.tsx\nActive issue: #4211 Migrate to OAuth2"

808 }

809}

810```

811 

812Dado que el stdout plano ya llega a Claude para este evento, un hook que solo carga contexto puede imprimir en stdout directamente sin construir JSON. Use el formulario JSON cuando necesite combinar contexto con otros campos como `suppressOutput`.

813 

814#### Persistir variables de entorno

815 

816Los hooks SessionStart tienen acceso a la variable de entorno `CLAUDE_ENV_FILE`, que proporciona una ruta de archivo donde puede persistir variables de entorno para comandos Bash posteriores.

817 

818Para establecer variables de entorno individuales, escriba declaraciones `export` en `CLAUDE_ENV_FILE`. Use append (`>>`) para preservar variables establecidas por otros hooks:

819 

820```bash theme={null}

821#!/bin/bash

822 

823if [ -n "$CLAUDE_ENV_FILE" ]; then

824 echo 'export NODE_ENV=production' >> "$CLAUDE_ENV_FILE"

825 echo 'export DEBUG_LOG=true' >> "$CLAUDE_ENV_FILE"

826 echo 'export PATH="$PATH:./node_modules/.bin"' >> "$CLAUDE_ENV_FILE"

827fi

828 

829exit 0

830```

831 

832Para capturar todos los cambios de entorno de comandos de configuración, compare las variables exportadas antes y después:

833 

834```bash theme={null}

835#!/bin/bash

836 

837ENV_BEFORE=$(export -p | sort)

838 

839# Ejecute sus comandos de configuración que modifican el entorno

840source ~/.nvm/nvm.sh

841nvm use 20

842 

843if [ -n "$CLAUDE_ENV_FILE" ]; then

844 ENV_AFTER=$(export -p | sort)

845 comm -13 <(echo "$ENV_BEFORE") <(echo "$ENV_AFTER") >> "$CLAUDE_ENV_FILE"

846fi

847 

848exit 0

849```

850 

851Cualquier variable escrita en este archivo estará disponible en todos los comandos Bash posteriores que Claude Code ejecute durante la sesión.

852 

853<Note>

854 `CLAUDE_ENV_FILE` está disponible para hooks SessionStart, [Setup](#setup), [CwdChanged](#cwdchanged) y [FileChanged](#filechanged). Otros tipos de hooks no tienen acceso a esta variable.

855</Note>

856 

857### Setup

858 

859Se activa solo cuando inicia Claude Code con `--init-only`, o con `--init` o `--maintenance` en modo de impresión (`-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.

860 

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

862 

863| Matcher | Cuándo se activa |

864| :------------ | :---------------------------------------- |

865| `init` | `claude --init-only` o `claude -p --init` |

866| `maintenance` | `claude -p --maintenance` |

867 

868`--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` (modo de impresión); en una sesión interactiva esas dos banderas actualmente no activan hooks Setup.

869 

870Debido 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.

871 

872#### Entrada de Setup

873 

874Además de los [campos de entrada comunes](#common-input-fields), los hooks Setup reciben un campo `trigger` establecido en `"init"` o `"maintenance"`:

875 

876```json theme={null}

877{

878 "session_id": "abc123",

879 "transcript_path": "/Users/.../.claude/projects/.../00893aaf-19fa-41d2-8238-13269b9b3ca0.jsonl",

880 "cwd": "/Users/...",

881 "hook_event_name": "Setup",

882 "trigger": "init"

883}

884```

885 

886#### Control de decisión de Setup

887 

888Los hooks Setup no pueden bloquear. En código de salida 2, stderr se muestra al usuario; en cualquier otro código de salida distinto de cero, stderr aparece solo cuando inicia con `--verbose`. En ambos casos la ejecución continúa. Para 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:

889 

890| Campo | Descripción |

891| :------------------ | :---------------------------------------------------------------------------------- |

892| `additionalContext` | Cadena agregada al contexto de Claude. Los valores de múltiples hooks se concatenan |

893 

894```json theme={null}

895{

896 "hookSpecificOutput": {

897 "hookEventName": "Setup",

898 "additionalContext": "Dependencies installed: node_modules, .venv"

899 }

900}

901```

902 

903Los hooks Setup tienen acceso a `CLAUDE_ENV_FILE`. Las variables escritas en ese archivo persisten en comandos Bash posteriores para la sesión, al igual que en los [hooks SessionStart](#persist-environment-variables). Solo se admiten hooks `type: "command"` y `type: "mcp_tool"`.

904 

905### InstructionsLoaded

906 

907Se activa cuando se carga un archivo `CLAUDE.md` o `.claude/rules/*.md` en contexto. Este evento se activa al inicio de la sesión para archivos cargados con entusiasmo y nuevamente más tarde cuando se cargan archivos de forma perezosa, por ejemplo cuando Claude accede a un subdirectorio que contiene un `CLAUDE.md` anidado o cuando reglas condicionales con frontmatter `paths:` coinciden. El hook no admite bloqueo o control de decisión. Se ejecuta de forma asincrónica con fines de observabilidad.

908 

909El matcher se ejecuta contra `load_reason`. Por ejemplo, use `"matcher": "session_start"` para activarse solo para archivos cargados al inicio de la sesión, o `"matcher": "path_glob_match|nested_traversal"` para activarse solo para cargas perezosas.

910 

911#### Entrada de InstructionsLoaded

912 

913Además de los [campos de entrada comunes](#common-input-fields), los hooks InstructionsLoaded reciben estos campos:

914 

915| Campo | Descripción |

916| :------------------ | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

917| `file_path` | Ruta absoluta al archivo de instrucciones que se cargó |

918| `memory_type` | Alcance del archivo: `"User"`, `"Project"`, `"Local"` o `"Managed"` |

919| `load_reason` | Por qué se cargó el archivo: `"session_start"`, `"nested_traversal"`, `"path_glob_match"`, `"include"` o `"compact"`. El valor `"compact"` se activa cuando los archivos de instrucciones se recargan después de un evento de compactación |

920| `globs` | Patrones de glob de ruta del frontmatter `paths:` del archivo, si los hay. Presente solo para cargas `path_glob_match` |

921| `trigger_file_path` | Ruta al archivo cuyo acceso desencadenó esta carga, para cargas perezosas |

922| `parent_file_path` | Ruta al archivo de instrucciones padre que incluyó este, para cargas `include` |

923 

924```json theme={null}

925{

926 "session_id": "abc123",

927 "transcript_path": "/Users/.../.claude/projects/.../transcript.jsonl",

928 "cwd": "/Users/my-project",

929 "hook_event_name": "InstructionsLoaded",

930 "file_path": "/Users/my-project/CLAUDE.md",

931 "memory_type": "Project",

932 "load_reason": "session_start"

933}

934```

935 

936#### Control de decisión de InstructionsLoaded

937 

938Los hooks InstructionsLoaded no tienen control de decisión. No pueden bloquear o modificar la carga de instrucciones. Use este evento para registro de auditoría, seguimiento de cumplimiento u observabilidad.

939 

940### UserPromptSubmit

941 

942Se ejecuta cuando el usuario envía un prompt, antes de que Claude lo procese. Esto le permite agregar contexto adicional basado en el prompt/conversación, validar prompts o bloquear ciertos tipos de prompts.

943 

944#### Entrada de UserPromptSubmit

945 

946Además de los [campos de entrada comunes](#common-input-fields), los hooks UserPromptSubmit reciben el campo `prompt` que contiene el texto que el usuario envió.

947 

948```json theme={null}

949{

950 "session_id": "abc123",

951 "transcript_path": "/Users/.../.claude/projects/.../00893aaf-19fa-41d2-8238-13269b9b3ca0.jsonl",

952 "cwd": "/Users/...",

953 "permission_mode": "default",

954 "hook_event_name": "UserPromptSubmit",

955 "prompt": "Write a function to calculate the factorial of a number"

956}

957```

958 

959#### Control de decisión de UserPromptSubmit

960 

961Los hooks `UserPromptSubmit` pueden controlar si se procesa un prompt de usuario y agregar contexto. Todos los [campos de salida JSON](#json-output) están disponibles.

962 

963Hay dos formas de agregar contexto a la conversación en código de salida 0:

964 

965* **Stdout de texto plano**: cualquier texto que no sea JSON escrito en stdout se agrega como contexto

966* **JSON con `additionalContext`**: use el formato JSON a continuación para más control. El campo `additionalContext` se agrega como contexto

967 

968El stdout plano se muestra como salida de hook en la transcripción. El campo `additionalContext` se agrega de forma más discreta.

969 

970Para bloquear un prompt, devuelva un objeto JSON con `decision` establecido en `"block"`:

971 

972| Campo | Descripción |

973| :------------------ | :---------------------------------------------------------------------------------------------------------------------------------------------- |

974| `decision` | `"block"` evita que el prompt se procese y lo borra del contexto. Omita para permitir que el prompt continúe |

975| `reason` | Se muestra al usuario cuando `decision` es `"block"`. No se agrega al contexto |

976| `additionalContext` | Cadena agregada al contexto de Claude junto con el prompt enviado. Consulte [Agregar contexto para Claude](#add-context-for-claude) |

977| `sessionTitle` | Establece el título de la sesión, el mismo efecto que `/rename`. Use para nombrar sesiones automáticamente basándose en el contenido del prompt |

978 

979```json theme={null}

980{

981 "decision": "block",

982 "reason": "Explanation for decision",

983 "hookSpecificOutput": {

984 "hookEventName": "UserPromptSubmit",

985 "additionalContext": "My additional context here",

986 "sessionTitle": "My session title"

987 }

988}

989```

990 

991<Note>

992 El formato JSON no es necesario para casos de uso simples. Para agregar contexto, puede imprimir texto plano en stdout con código de salida 0. Use JSON cuando necesite bloquear prompts o desee un control más estructurado.

993</Note>

994 

995### UserPromptExpansion

996 

997Se ejecuta cuando un comando de barra diagonal escrito por el usuario se expande en un prompt antes de llegar a Claude. Use esto para bloquear comandos específicos de invocación directa, inyectar contexto para una skill particular o registrar qué comandos invocan los usuarios. Por ejemplo, un hook que coincida con `deploy` puede bloquear `/deploy` a menos que esté presente un archivo de aprobación, o un hook que coincida con una skill de revisión puede agregar la lista de verificación de revisión del equipo como `additionalContext`.

998 

999Este evento cubre la ruta que `PreToolUse` no cubre: un hook `PreToolUse` que coincida con la herramienta `Skill` se activa solo cuando Claude llama a la herramienta, pero escribir `/skillname` directamente omite `PreToolUse`. `UserPromptExpansion` se activa en esa ruta directa.

1000 

1001Coincide en `command_name`. Deje el matcher vacío para activarse en cada comando de barra diagonal de tipo prompt.

1002 

1003#### Entrada de UserPromptExpansion

1004 

1005Además de los [campos de entrada comunes](#common-input-fields), los hooks UserPromptExpansion reciben `expansion_type`, `command_name`, `command_args`, `command_source` y la cadena `prompt` original. El campo `expansion_type` es `slash_command` para skills y comandos personalizados, o `mcp_prompt` para prompts de servidor MCP.

1006 

1007```json theme={null}

1008{

1009 "session_id": "abc123",

1010 "transcript_path": "/Users/.../00893aaf.jsonl",

1011 "cwd": "/Users/...",

1012 "permission_mode": "default",

1013 "hook_event_name": "UserPromptExpansion",

1014 "expansion_type": "slash_command",

1015 "command_name": "example-skill",

1016 "command_args": "arg1 arg2",

1017 "command_source": "plugin",

1018 "prompt": "/example-skill arg1 arg2"

1019}

1020```

1021 

1022#### Control de decisión de UserPromptExpansion

1023 

1024Los hooks `UserPromptExpansion` pueden bloquear la expansión o agregar contexto. Todos los [campos de salida JSON](#json-output) están disponibles.

1025 

1026| Campo | Descripción |

1027| :------------------ | :------------------------------------------------------------------------------------------------------------------------------------ |

1028| `decision` | `"block"` evita que el comando de barra diagonal se expanda. Omita para permitir que continúe |

1029| `reason` | Se muestra al usuario cuando `decision` es `"block"` |

1030| `additionalContext` | Cadena agregada al contexto de Claude junto con el prompt expandido. Consulte [Agregar contexto para Claude](#add-context-for-claude) |

1031 

1032```json theme={null}

1033{

1034 "decision": "block",

1035 "reason": "This slash command is not available",

1036 "hookSpecificOutput": {

1037 "hookEventName": "UserPromptExpansion",

1038 "additionalContext": "Additional context for this expansion"

1039 }

1040}

1041```

1042 

1043### PreToolUse

1044 

1045Se 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).

1046 

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

1048 

1049#### Entrada de PreToolUse

1050 

1051Además de los [campos de entrada comunes](#common-input-fields), los hooks PreToolUse reciben `tool_name`, `tool_input` y `tool_use_id`. Los campos `tool_input` dependen de la herramienta:

1052 

1053##### Bash

1054 

1055Ejecuta comandos de shell.

1056 

1057| Campo | Tipo | Ejemplo | Descripción |

1058| :------------------ | :------ | :----------------- | :--------------------------------------------- |

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

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

1061| `timeout` | number | `120000` | Tiempo de espera opcional en milisegundos |

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

1063 

1064##### Write

1065 

1066Crea o sobrescribe un archivo.

1067 

1068| Campo | Tipo | Ejemplo | Descripción |

1069| :---------- | :----- | :-------------------- | :---------------------------------- |

1070| `file_path` | string | `"/path/to/file.txt"` | Ruta absoluta al archivo a escribir |

1071| `content` | string | `"file content"` | Contenido a escribir en el archivo |

1072 

1073##### Edit

1074 

1075Reemplaza una cadena en un archivo existente.

1076 

1077| Campo | Tipo | Ejemplo | Descripción |

1078| :------------ | :------ | :-------------------- | :------------------------------------- |

1079| `file_path` | string | `"/path/to/file.txt"` | Ruta absoluta al archivo a editar |

1080| `old_string` | string | `"original text"` | Texto a encontrar y reemplazar |

1081| `new_string` | string | `"replacement text"` | Texto de reemplazo |

1082| `replace_all` | boolean | `false` | Si se reemplazan todas las ocurrencias |

1083 

1084##### Read

1085 

1086Lee contenidos de archivo.

1087 

1088| Campo | Tipo | Ejemplo | Descripción |

1089| :---------- | :----- | :-------------------- | :-------------------------------------------------- |

1090| `file_path` | string | `"/path/to/file.txt"` | Ruta absoluta al archivo a leer |

1091| `offset` | number | `10` | Número de línea opcional para comenzar a leer desde |

1092| `limit` | number | `50` | Número opcional de líneas a leer |

1093 

1094##### Glob

1095 

1096Encuentra archivos que coincidan con un patrón glob.

1097 

1098| Campo | Tipo | Ejemplo | Descripción |

1099| :-------- | :----- | :--------------- | :------------------------------------------------------------------------------ |

1100| `pattern` | string | `"**/*.ts"` | Patrón glob para coincidir archivos contra |

1101| `path` | string | `"/path/to/dir"` | Directorio opcional para buscar. Por defecto es el directorio de trabajo actual |

1102 

1103##### Grep

1104 

1105Busca contenidos de archivo con expresiones regulares.

1106 

1107| Campo | Tipo | Ejemplo | Descripción |

1108| :------------ | :------ | :--------------- | :------------------------------------------------------------------------------------- |

1109| `pattern` | string | `"TODO.*fix"` | Patrón de expresión regular a buscar |

1110| `path` | string | `"/path/to/dir"` | Archivo o directorio opcional para buscar |

1111| `glob` | string | `"*.ts"` | Patrón glob opcional para filtrar archivos |

1112| `output_mode` | string | `"content"` | `"content"`, `"files_with_matches"` o `"count"`. Por defecto es `"files_with_matches"` |

1113| `-i` | boolean | `true` | Búsqueda insensible a mayúsculas y minúsculas |

1114| `multiline` | boolean | `false` | Habilitar coincidencia multilínea |

1115 

1116##### WebFetch

1117 

1118Obtiene y procesa contenido web.

1119 

1120| Campo | Tipo | Ejemplo | Descripción |

1121| :------- | :----- | :---------------------------- | :----------------------------------------- |

1122| `url` | string | `"https://example.com/api"` | URL para obtener contenido de |

1123| `prompt` | string | `"Extract the API endpoints"` | Prompt a ejecutar en el contenido obtenido |

1124 

1125##### WebSearch

1126 

1127Busca en la web.

1128 

1129| Campo | Tipo | Ejemplo | Descripción |

1130| :---------------- | :----- | :----------------------------- | :-------------------------------------------------- |

1131| `query` | string | `"react hooks best practices"` | Consulta de búsqueda |

1132| `allowed_domains` | array | `["docs.example.com"]` | Opcional: incluir solo resultados de estos dominios |

1133| `blocked_domains` | array | `["spam.example.com"]` | Opcional: excluir resultados de estos dominios |

1134 

1135##### Agent

1136 

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

1138 

1139| Campo | Tipo | Ejemplo | Descripción |

1140| :-------------- | :----- | :------------------------- | :----------------------------------------------------- |

1141| `prompt` | string | `"Find all API endpoints"` | La tarea para que el agente realice |

1142| `description` | string | `"Find API endpoints"` | Descripción breve de la tarea |

1143| `subagent_type` | string | `"Explore"` | Tipo de agente especializado a usar |

1144| `model` | string | `"sonnet"` | Alias de modelo opcional para anular el predeterminado |

1145 

1146##### AskUserQuestion

1147 

1148Hace al usuario una a cuatro preguntas de opción múltiple.

1149 

1150| Campo | Tipo | Ejemplo | Descripción |

1151| :---------- | :----- | :----------------------------------------------------------------------------------------------------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |

1152| `questions` | array | `[{"question": "Which framework?", "header": "Framework", "options": [{"label": "React"}], "multiSelect": false}]` | Preguntas a presentar, cada una con una cadena `question`, `header` corto, array `options` y bandera `multiSelect` opcional |

1153| `answers` | object | `{"Which framework?": "React"}` | Opcional. Asigna texto de pregunta a la etiqueta de opción seleccionada. Las respuestas de selección múltiple unen etiquetas con comas. Claude no establece este campo; suministrarlo a través de `updatedInput` para responder programáticamente |

1154 

1155#### Control de decisión de PreToolUse

1156 

1157Los hooks `PreToolUse` pueden controlar si procede una llamada a herramienta. A diferencia de otros hooks que usan un campo `decision` de nivel superior, PreToolUse devuelve su decisión dentro de un objeto `hookSpecificOutput`. Esto le da control más rico: cuatro resultados (permitir, denegar, preguntar o diferir) más la capacidad de modificar la entrada de la herramienta antes de la ejecución.

1158 

1159| Campo | Descripción |

1160| :------------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

1161| `permissionDecision` | `"allow"` omite el sistema de permisos. `"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 |

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

1163| `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 |

1164| `additionalContext` | Cadena agregada al contexto de Claude junto con el resultado de la herramienta. Para `"defer"`, se ignora. Consulte [Agregar contexto para Claude](#add-context-for-claude) |

1165 

1166Cuando múltiples hooks PreToolUse devuelven diferentes decisiones, la precedencia es `deny` > `defer` > `ask` > `allow`.

1167 

1168Cuando un hook devuelve `"ask"`, el diálogo de permiso mostrado al usuario incluye una etiqueta que identifica de dónde proviene el hook: por ejemplo, `[User]`, `[Project]`, `[Plugin]` o `[Local]`. Esto ayuda a los usuarios a entender qué fuente de configuración está solicitando confirmación.

1169 

1170```json theme={null}

1171{

1172 "hookSpecificOutput": {

1173 "hookEventName": "PreToolUse",

1174 "permissionDecision": "allow",

1175 "permissionDecisionReason": "My reason here",

1176 "updatedInput": {

1177 "field_to_modify": "new value"

1178 },

1179 "additionalContext": "Current environment: production. Proceed with caution."

1180 }

1181}

1182```

1183 

1184`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.

1185 

1186<Note>

1187 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.

1188</Note>

1189 

1190#### Diferir una llamada a herramienta para más tarde

1191 

1192`"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.

1193 

1194<Note>

1195 El valor `defer` requiere Claude Code v2.1.89 o posterior. Las versiones anteriores no lo reconocen y la herramienta procede a través del flujo de permiso normal.

1196</Note>

1197 

1198La 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í:

1199 

12001. Claude llama a `AskUserQuestion`. Se activa el hook `PreToolUse`.

12012. El hook devuelve `permissionDecision: "defer"`. La herramienta no se ejecuta. El proceso sale con `stop_reason: "tool_deferred"` y la llamada a herramienta pendiente preservada en la transcripción.

12023. El proceso de llamada lee `deferred_tool_use` del resultado del SDK, muestra la pregunta en su propia interfaz de usuario y espera una respuesta.

12034. El proceso de llamada ejecuta `claude -p --resume <session-id>`. La misma llamada a herramienta activa `PreToolUse` nuevamente.

12045. El hook devuelve `permissionDecision: "allow"` con la respuesta en `updatedInput`. La herramienta se ejecuta y Claude continúa.

1205 

1206El campo `deferred_tool_use` lleva el `id`, `name` e `input` de la herramienta. El `input` son los parámetros que Claude generó para la llamada a herramienta, capturados antes de la ejecución:

1207 

1208```json theme={null}

1209{

1210 "type": "result",

1211 "subtype": "success",

1212 "stop_reason": "tool_deferred",

1213 "session_id": "abc123",

1214 "deferred_tool_use": {

1215 "id": "toolu_01abc",

1216 "name": "AskUserQuestion",

1217 "input": { "questions": [{ "question": "Which framework?", "header": "Framework", "options": [{"label": "React"}, {"label": "Vue"}], "multiSelect": false }] }

1218 }

1219}

1220```

1221 

1222No 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.

1223 

1224`"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.

1225 

1226Si la herramienta diferida ya no está disponible cuando reanuda, el proceso sale con `stop_reason: "tool_deferred_unavailable"` e `is_error: true` antes de que se active el hook. Esto sucede cuando un servidor MCP que proporcionó la herramienta no está conectado para la sesión reanudada. El payload `deferred_tool_use` aún se incluye para que pueda identificar qué herramienta desapareció.

1227 

1228<Warning>

1229 `--resume` no restaura el modo de permiso de la sesión anterior. Pase la misma bandera `--permission-mode` en reanudar que estaba activa cuando se diferió la herramienta. Claude Code registra una advertencia si los modos difieren.

1230</Warning>

1231 

1232### PermissionRequest

1233 

1234Se ejecuta cuando se muestra un diálogo de permiso al usuario.

1235Use [PermissionRequest decision control](#permissionrequest-decision-control) para permitir o denegar en nombre del usuario.

1236 

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

1238 

1239#### Entrada de PermissionRequest

1240 

1241Los hooks PermissionRequest reciben campos `tool_name` y `tool_input` como los hooks PreToolUse, pero sin `tool_use_id`. Un array `permission_suggestions` opcional contiene las opciones "siempre permitir" que el usuario normalmente vería en el diálogo de permiso. La diferencia es cuándo se activa el hook: los hooks PermissionRequest se ejecutan cuando un diálogo de permiso está a punto de mostrarse al usuario, mientras que los hooks PreToolUse se ejecutan antes de la ejecución de la herramienta independientemente del estado de permiso.

1242 

1243```json theme={null}

1244{

1245 "session_id": "abc123",

1246 "transcript_path": "/Users/.../.claude/projects/.../00893aaf-19fa-41d2-8238-13269b9b3ca0.jsonl",

1247 "cwd": "/Users/...",

1248 "permission_mode": "default",

1249 "hook_event_name": "PermissionRequest",

1250 "tool_name": "Bash",

1251 "tool_input": {

1252 "command": "rm -rf node_modules",

1253 "description": "Remove node_modules directory"

1254 },

1255 "permission_suggestions": [

1256 {

1257 "type": "addRules",

1258 "rules": [{ "toolName": "Bash", "ruleContent": "rm -rf node_modules" }],

1259 "behavior": "allow",

1260 "destination": "localSettings"

1261 }

1262 ]

1263}

1264```

1265 

1266#### Control de decisión de PermissionRequest

1267 

1268Los hooks `PermissionRequest` pueden permitir o denegar solicitudes de permiso. Además de los [campos de salida JSON](#json-output) disponibles para todos los hooks, su script de hook puede devolver un objeto `decision` con estos campos específicos del evento:

1269 

1270| Campo | Descripción |

1271| :------------------- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

1272| `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 |

1273| `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 |

1274| `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 |

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

1276| `interrupt` | Solo para `"deny"`: si es `true`, detiene a Claude |

1277 

1278```json theme={null}

1279{

1280 "hookSpecificOutput": {

1281 "hookEventName": "PermissionRequest",

1282 "decision": {

1283 "behavior": "allow",

1284 "updatedInput": {

1285 "command": "npm run lint"

1286 }

1287 }

1288 }

1289}

1290```

1291 

1292#### Entradas de actualización de permiso

1293 

1294El campo de salida `updatedPermissions` y el campo de entrada [`permission_suggestions`](#permissionrequest-input) ambos usan el mismo array de objetos de entrada. Cada entrada tiene un `type` que determina sus otros campos, y un `destination` que controla dónde se escribe el cambio.

1295 

1296| `type` | Campos | Efecto |

1297| :------------------ | :--------------------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

1298| `addRules` | `rules`, `behavior`, `destination` | Agrega reglas de permiso. `rules` es un array de objetos `{toolName, ruleContent?}`. Omita `ruleContent` para coincidir con toda la herramienta. `behavior` es `"allow"`, `"deny"` o `"ask"` |

1299| `replaceRules` | `rules`, `behavior`, `destination` | Reemplaza todas las reglas del `behavior` dado en el `destination` con las `rules` proporcionadas |

1300| `removeRules` | `rules`, `behavior`, `destination` | Elimina reglas coincidentes del `behavior` dado |

1301| `setMode` | `mode`, `destination` | Cambia el modo de permiso. Los modos válidos son `default`, `acceptEdits`, `dontAsk`, `bypassPermissions` y `plan` |

1302| `addDirectories` | `directories`, `destination` | Agrega directorios de trabajo. `directories` es un array de cadenas de ruta |

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

1304 

1305<Note>

1306 `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`.

1307</Note>

1308 

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

1310 

1311| `destination` | Escribe en |

1312| :---------------- | :--------------------------------------------------- |

1313| `session` | solo en memoria, descartado cuando termina la sesión |

1314| `localSettings` | `.claude/settings.local.json` |

1315| `projectSettings` | `.claude/settings.json` |

1316| `userSettings` | `~/.claude/settings.json` |

1317 

1318Un hook puede ecoar una de las `permission_suggestions` que recibió como su propia salida `updatedPermissions`, que es equivalente a que el usuario seleccione esa opción "siempre permitir" en el diálogo.

1319 

1320### PostToolUse

1321 

1322Se ejecuta inmediatamente después de que una herramienta se completa exitosamente.

1323 

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

1325 

1326#### Entrada de PostToolUse

1327 

1328Los hooks `PostToolUse` se activan después de que una herramienta ya se ha ejecutado exitosamente. La entrada incluye tanto `tool_input`, los argumentos enviados a la herramienta, como `tool_response`, el resultado que devolvió. El esquema exacto para ambos depende de la herramienta.

1329 

1330```json theme={null}

1331{

1332 "session_id": "abc123",

1333 "transcript_path": "/Users/.../.claude/projects/.../00893aaf-19fa-41d2-8238-13269b9b3ca0.jsonl",

1334 "cwd": "/Users/...",

1335 "permission_mode": "default",

1336 "hook_event_name": "PostToolUse",

1337 "tool_name": "Write",

1338 "tool_input": {

1339 "file_path": "/path/to/file.txt",

1340 "content": "file content"

1341 },

1342 "tool_response": {

1343 "filePath": "/path/to/file.txt",

1344 "success": true

1345 },

1346 "tool_use_id": "toolu_01ABC123...",

1347 "duration_ms": 12

1348}

1349```

1350 

1351| Campo | Descripción |

1352| :------------ | :-------------------------------------------------------------------------------------------------------------------------------------- |

1353| `duration_ms` | Opcional. Tiempo de ejecución de la herramienta en milisegundos. Excluye el tiempo dedicado a solicitudes de permiso y hooks PreToolUse |

1354 

1355#### Control de decisión de PostToolUse

1356 

1357Los hooks `PostToolUse` pueden proporcionar retroalimentación a Claude después de la ejecución de la herramienta. Además de los [campos de salida JSON](#json-output) disponibles para todos los hooks, su script de hook puede devolver estos campos específicos del evento:

1358 

1359| Campo | Descripción |

1360| :--------------------- | :---------------------------------------------------------------------------------------------------------------------------------------------------------------- |

1361| `decision` | `"block"` solicita a Claude con la `reason`. Omita para permitir que la acción continúe |

1362| `reason` | Explicación mostrada a Claude cuando `decision` es `"block"` |

1363| `additionalContext` | Cadena agregada al contexto de Claude junto con el resultado de la herramienta. Consulte [Agregar contexto para Claude](#add-context-for-claude) |

1364| `updatedToolOutput` | Reemplaza la salida de la herramienta con el valor proporcionado antes de que se envíe a Claude. El valor debe coincidir con la forma de salida de la herramienta |

1365| `updatedMCPToolOutput` | Reemplaza la salida para [herramientas MCP](#match-mcp-tools) solo. Prefiera `updatedToolOutput`, que funciona para todas las herramientas |

1366 

1367El ejemplo a continuación reemplaza la salida de una llamada `Bash`. El valor de reemplazo coincide con la forma de salida de la herramienta `Bash`:

1368 

1369```json theme={null}

1370{

1371 "hookSpecificOutput": {

1372 "hookEventName": "PostToolUse",

1373 "additionalContext": "Additional information for Claude",

1374 "updatedToolOutput": {

1375 "stdout": "[redacted]",

1376 "stderr": "",

1377 "interrupted": false,

1378 "isImage": false

1379 }

1380 }

1381}

1382```

1383 

1384<Warning>

1385 `updatedToolOutput` solo cambia lo que Claude ve. La herramienta ya se ha ejecutado en el momento en que se activa el hook, por lo que cualquier archivo escrito, comando ejecutado o solicitud de red enviada ya ha tenido efecto. La telemetría como spans de herramientas OpenTelemetry y eventos de análisis también capturan la salida original antes de que se ejecute el hook. Para evitar o modificar una llamada a herramienta antes de que se ejecute, use un hook [PreToolUse](#pretooluse) en su lugar.

1386 

1387 El valor de reemplazo debe coincidir con la forma de salida de la herramienta. Las herramientas integradas devuelven objetos estructurados en lugar de cadenas simples. Por ejemplo, `Bash` devuelve un objeto con campos `stdout`, `stderr`, `interrupted` e `isImage`. Para herramientas integradas, un valor que no coincida con el esquema de salida de la herramienta se ignora y se usa la salida original. La salida de herramientas MCP se pasa sin validación de esquema. Eliminar detalles de error que Claude necesita puede hacer que continúe con una suposición falsa.

1388</Warning>

1389 

1390### PostToolUseFailure

1391 

1392Se ejecuta cuando falla la ejecución de una herramienta. Este evento se activa para llamadas a herramientas que lanzan errores o devuelven resultados de fallo. Use esto para registrar fallos, enviar alertas o proporcionar retroalimentación correctiva a Claude.

1393 

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

1395 

1396#### Entrada de PostToolUseFailure

1397 

1398Los hooks PostToolUseFailure reciben los mismos campos `tool_name` y `tool_input` que PostToolUse, junto con información de error como campos de nivel superior:

1399 

1400```json theme={null}

1401{

1402 "session_id": "abc123",

1403 "transcript_path": "/Users/.../.claude/projects/.../00893aaf-19fa-41d2-8238-13269b9b3ca0.jsonl",

1404 "cwd": "/Users/...",

1405 "permission_mode": "default",

1406 "hook_event_name": "PostToolUseFailure",

1407 "tool_name": "Bash",

1408 "tool_input": {

1409 "command": "npm test",

1410 "description": "Run test suite"

1411 },

1412 "tool_use_id": "toolu_01ABC123...",

1413 "error": "Command exited with non-zero status code 1",

1414 "is_interrupt": false,

1415 "duration_ms": 4187

1416}

1417```

1418 

1419| Campo | Descripción |

1420| :------------- | :-------------------------------------------------------------------------------------------------------------------------------------- |

1421| `error` | Cadena que describe qué salió mal |

1422| `is_interrupt` | Booleano opcional que indica si el fallo fue causado por interrupción del usuario |

1423| `duration_ms` | Opcional. Tiempo de ejecución de la herramienta en milisegundos. Excluye el tiempo dedicado a solicitudes de permiso y hooks PreToolUse |

1424 

1425#### Control de decisión de PostToolUseFailure

1426 

1427Los hooks `PostToolUseFailure` pueden proporcionar contexto a Claude después de un fallo de herramienta. Además de los [campos de salida JSON](#json-output) disponibles para todos los hooks, su script de hook puede devolver estos campos específicos del evento:

1428 

1429| Campo | Descripción |

1430| :------------------ | :------------------------------------------------------------------------------------------------------------------------- |

1431| `additionalContext` | Cadena agregada al contexto de Claude junto con el error. Consulte [Agregar contexto para Claude](#add-context-for-claude) |

1432 

1433```json theme={null}

1434{

1435 "hookSpecificOutput": {

1436 "hookEventName": "PostToolUseFailure",

1437 "additionalContext": "Additional information about the failure for Claude"

1438 }

1439}

1440```

1441 

1442### PostToolBatch

1443 

1444Se ejecuta una vez después de que cada llamada a herramienta en un lote se haya resuelto, antes de que Claude Code envíe la siguiente solicitud al modelo. `PostToolUse` se activa una vez por herramienta, lo que significa que se activa simultáneamente cuando Claude hace llamadas a herramientas paralelas. `PostToolBatch` se activa exactamente una vez con el lote completo, por lo que es el lugar correcto para inyectar contexto que dependa del conjunto de herramientas que se ejecutaron en lugar de cualquier herramienta individual. No hay matcher para este evento.

1445 

1446#### Entrada de PostToolBatch

1447 

1448Además de los [campos de entrada comunes](#common-input-fields), los hooks PostToolBatch reciben `tool_calls`, un array que describe cada llamada a herramienta en el lote:

1449 

1450```json theme={null}

1451{

1452 "session_id": "abc123",

1453 "transcript_path": "/Users/.../.claude/projects/.../00893aaf-19fa-41d2-8238-13269b9b3ca0.jsonl",

1454 "cwd": "/Users/...",

1455 "permission_mode": "default",

1456 "hook_event_name": "PostToolBatch",

1457 "tool_calls": [

1458 {

1459 "tool_name": "Read",

1460 "tool_input": {"file_path": "/.../ledger/accounts.py"},

1461 "tool_use_id": "toolu_01...",

1462 "tool_response": " 1\tfrom __future__ import annotations\n 2\t..."

1463 },

1464 {

1465 "tool_name": "Read",

1466 "tool_input": {"file_path": "/.../ledger/transactions.py"},

1467 "tool_use_id": "toolu_02...",

1468 "tool_response": " 1\tfrom __future__ import annotations\n 2\t..."

1469 }

1470 ]

1471}

1472```

1473 

1474`tool_response` contiene el mismo contenido que el modelo recibe en el bloque `tool_result` correspondiente. El valor es una cadena serializada o un array de bloque de contenido, exactamente como lo emitió la herramienta. Para `Read`, eso significa texto con prefijo de número de línea en lugar de contenidos de archivo sin procesar. Las respuestas pueden ser grandes, así que analice solo los campos que necesita.

1475 

1476<Note>

1477 La forma de `tool_response` difiere de la de `PostToolUse`. `PostToolUse` pasa el objeto `Output` estructurado de la herramienta, como `{filePath: "...", success: true}` para `Write`; `PostToolBatch` pasa el contenido `tool_result` serializado que el modelo ve.

1478</Note>

1479 

1480#### Control de decisión de PostToolBatch

1481 

1482Los hooks `PostToolBatch` pueden inyectar contexto para Claude. Además de los [campos de salida JSON](#json-output) disponibles para todos los hooks, su script de hook puede devolver estos campos específicos del evento:

1483 

1484| Campo | Descripción |

1485| :------------------ | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

1486| `additionalContext` | Cadena de contexto inyectada una vez antes de la siguiente llamada al modelo. Consulte [Agregar contexto para Claude](#add-context-for-claude) para detalles de entrega, qué poner en él y cómo las sesiones reanudadas manejan valores pasados |

1487 

1488```json theme={null}

1489{

1490 "hookSpecificOutput": {

1491 "hookEventName": "PostToolBatch",

1492 "additionalContext": "These files are part of the ledger module. Run pytest before marking the task complete."

1493 }

1494}

1495```

1496 

1497Devolver `decision: "block"` o `continue: false` detiene el bucle agentico antes de la siguiente llamada al modelo.

1498 

1499### PermissionDenied

1500 

1501Se 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.

1502 

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

1504 

1505#### Entrada de PermissionDenied

1506 

1507Además de los [campos de entrada comunes](#common-input-fields), los hooks PermissionDenied reciben `tool_name`, `tool_input`, `tool_use_id` y `reason`.

1508 

1509```json theme={null}

1510{

1511 "session_id": "abc123",

1512 "transcript_path": "/Users/.../.claude/projects/.../00893aaf-19fa-41d2-8238-13269b9b3ca0.jsonl",

1513 "cwd": "/Users/...",

1514 "permission_mode": "auto",

1515 "hook_event_name": "PermissionDenied",

1516 "tool_name": "Bash",

1517 "tool_input": {

1518 "command": "rm -rf /tmp/build",

1519 "description": "Clean build directory"

1520 },

1521 "tool_use_id": "toolu_01ABC123...",

1522 "reason": "Auto mode denied: command targets a path outside the project"

1523}

1524```

1525 

1526| Campo | Descripción |

1527| :------- | :------------------------------------------------------------------------------ |

1528| `reason` | La explicación del clasificador para por qué se denegó la llamada a herramienta |

1529 

1530#### Control de decisión de PermissionDenied

1531 

1532Los hooks PermissionDenied pueden decirle al modelo que puede reintentar la llamada a herramienta denegada. Devuelva un objeto JSON con `hookSpecificOutput.retry` establecido en `true`:

1533 

1534```json theme={null}

1535{

1536 "hookSpecificOutput": {

1537 "hookEventName": "PermissionDenied",

1538 "retry": true

1539 }

1540}

1541```

1542 

1543Cuando `retry` es `true`, Claude Code agrega un mensaje a la conversación diciéndole al modelo que puede reintentar la llamada a herramienta. La denegación en sí no se revierte. Si su hook no devuelve JSON, o devuelve `retry: false`, la denegación se mantiene y el modelo recibe el mensaje de rechazo original.

1544 

1545### Notification

1546 

1547Se ejecuta cuando Claude Code envía notificaciones. Coincide en el tipo de notificación: `permission_prompt`, `idle_prompt`, `auth_success`, `elicitation_dialog`, `elicitation_complete`, `elicitation_response`. Omita el matcher para ejecutar hooks para todos los tipos de notificación.

1548 

1549Use matchers separados para ejecutar diferentes controladores dependiendo del tipo de notificación. Esta configuración desencadena un script de alerta específico de permiso cuando Claude necesita aprobación de permiso y una notificación diferente cuando Claude ha estado inactivo:

1550 

1551```json theme={null}

1552{

1553 "hooks": {

1554 "Notification": [

1555 {

1556 "matcher": "permission_prompt",

1557 "hooks": [

1558 {

1559 "type": "command",

1560 "command": "/path/to/permission-alert.sh"

1561 }

1562 ]

1563 },

1564 {

1565 "matcher": "idle_prompt",

1566 "hooks": [

1567 {

1568 "type": "command",

1569 "command": "/path/to/idle-notification.sh"

1570 }

1571 ]

1572 }

1573 ]

1574 }

1575}

1576```

1577 

1578#### Entrada de Notification

1579 

1580Además de los [campos de entrada comunes](#common-input-fields), los hooks Notification reciben `message` con el texto de notificación, un `title` opcional y `notification_type` que indica qué tipo se activó.

1581 

1582```json theme={null}

1583{

1584 "session_id": "abc123",

1585 "transcript_path": "/Users/.../.claude/projects/.../00893aaf-19fa-41d2-8238-13269b9b3ca0.jsonl",

1586 "cwd": "/Users/...",

1587 "hook_event_name": "Notification",

1588 "message": "Claude needs your permission to use Bash",

1589 "title": "Permission needed",

1590 "notification_type": "permission_prompt"

1591}

1592```

1593 

1594Los hooks Notification no pueden bloquear o modificar notificaciones. Están destinados a efectos secundarios como reenviar la notificación a un servicio externo. Los [campos de salida JSON](#json-output) comunes como `systemMessage` se aplican.

1595 

1596### SubagentStart

1597 

1598Se 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 (agentes integrados como `general-purpose`, `Explore`, `Plan` o nombres de agentes personalizados de `.claude/agents/`).

1599 

1600#### Entrada de SubagentStart

1601 

1602Además de los [campos de entrada comunes](#common-input-fields), los hooks SubagentStart reciben `agent_id` con el identificador único para el subagente y `agent_type` con el nombre del agente (agentes integrados como `"general-purpose"`, `"Explore"`, `"Plan"` o nombres de agentes personalizados).

1603 

1604```json theme={null}

1605{

1606 "session_id": "abc123",

1607 "transcript_path": "/Users/.../.claude/projects/.../00893aaf-19fa-41d2-8238-13269b9b3ca0.jsonl",

1608 "cwd": "/Users/...",

1609 "hook_event_name": "SubagentStart",

1610 "agent_id": "agent-abc123",

1611 "agent_type": "Explore"

1612}

1613```

1614 

1615Los hooks SubagentStart no pueden bloquear la creación de subagentes, pero pueden inyectar contexto en el subagente. Además de los [campos de salida JSON](#json-output) disponibles para todos los hooks, puede devolver:

1616 

1617| Campo | Descripción |

1618| :------------------ | :------------------------------------------------------------------------------------------------------------------------------------------------------------------ |

1619| `additionalContext` | Cadena agregada al contexto del subagente al inicio de su conversación, antes de su primer prompt. Consulte [Agregar contexto para Claude](#add-context-for-claude) |

1620 

1621```json theme={null}

1622{

1623 "hookSpecificOutput": {

1624 "hookEventName": "SubagentStart",

1625 "additionalContext": "Follow security guidelines for this task"

1626 }

1627}

1628```

1629 

1630### SubagentStop

1631 

1632Se ejecuta cuando un subagente de Claude Code ha terminado de responder. Coincide en el tipo de agente, los mismos valores que SubagentStart.

1633 

1634#### Entrada de SubagentStop

1635 

1636Además de los [campos de entrada comunes](#common-input-fields), los hooks SubagentStop reciben `stop_hook_active`, `agent_id`, `agent_type`, `agent_transcript_path` y `last_assistant_message`. El campo `agent_type` es el valor usado para filtrado de matcher. El `transcript_path` es la transcripción de la sesión principal, mientras que `agent_transcript_path` es la propia transcripción del subagente almacenada en una carpeta `subagents/` anidada. El campo `last_assistant_message` contiene el contenido de texto de la respuesta final del subagente, por lo que los hooks pueden acceder a él sin analizar el archivo de transcripción.

1637 

1638```json theme={null}

1639{

1640 "session_id": "abc123",

1641 "transcript_path": "~/.claude/projects/.../abc123.jsonl",

1642 "cwd": "/Users/...",

1643 "permission_mode": "default",

1644 "hook_event_name": "SubagentStop",

1645 "stop_hook_active": false,

1646 "agent_id": "def456",

1647 "agent_type": "Explore",

1648 "agent_transcript_path": "~/.claude/projects/.../abc123/subagents/agent-def456.jsonl",

1649 "last_assistant_message": "Analysis complete. Found 3 potential issues..."

1650}

1651```

1652 

1653Los hooks SubagentStop usan el mismo formato de control de decisión que los [hooks Stop](#stop-decision-control).

1654 

1655### TaskCreated

1656 

1657Se ejecuta cuando se está creando una tarea a través de la herramienta `TaskCreate`. Use esto para aplicar convenciones de nomenclatura, requerir descripciones de tareas o evitar que se creen ciertas tareas.

1658 

1659Cuando un hook `TaskCreated` sale con código 2, la tarea no se crea 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 TaskCreated no admiten matchers y se activan en cada ocurrencia.

1660 

1661#### Entrada de TaskCreated

1662 

1663Además de los [campos de entrada comunes](#common-input-fields), los hooks TaskCreated reciben `task_id`, `task_subject` y opcionalmente `task_description`, `teammate_name` y `team_name`.

1664 

1665```json theme={null}

1666{

1667 "session_id": "abc123",

1668 "transcript_path": "/Users/.../.claude/projects/.../00893aaf-19fa-41d2-8238-13269b9b3ca0.jsonl",

1669 "cwd": "/Users/...",

1670 "permission_mode": "default",

1671 "hook_event_name": "TaskCreated",

1672 "task_id": "task-001",

1673 "task_subject": "Implement user authentication",

1674 "task_description": "Add login and signup endpoints",

1675 "teammate_name": "implementer",

1676 "team_name": "my-project"

1677}

1678```

1679 

1680| Campo | Descripción |

1681| :----------------- | :---------------------------------------------------------- |

1682| `task_id` | Identificador de la tarea que se está creando |

1683| `task_subject` | Título de la tarea |

1684| `task_description` | Descripción detallada de la tarea. Puede estar ausente |

1685| `teammate_name` | Nombre del compañero que crea la tarea. Puede estar ausente |

1686| `team_name` | Nombre del equipo. Puede estar ausente |

1687 

1688#### Control de decisión de TaskCreated

1689 

1690Los hooks TaskCreated admiten dos formas de controlar la creación de tareas:

1691 

1692* **Código de salida 2**: la tarea no se crea y el mensaje de stderr se devuelve al modelo como retroalimentación.

1693* **JSON `{"continue": false, "stopReason": "..."}`**: detiene al compañero completamente, coincidiendo con el comportamiento del hook `Stop`. El `stopReason` se muestra al usuario.

1694 

1695Este ejemplo bloquea tareas cujos asuntos no siguen el formato requerido:

1696 

1697```bash theme={null}

1698#!/bin/bash

1699INPUT=$(cat)

1700TASK_SUBJECT=$(echo "$INPUT" | jq -r '.task_subject')

1701 

1702if [[ ! "$TASK_SUBJECT" =~ ^\[TICKET-[0-9]+\] ]]; then

1703 echo "Task subject must start with a ticket number, e.g. '[TICKET-123] Add feature'" >&2

1704 exit 2

1705fi

1706 

1707exit 0

1708```

1709 

1710### TaskCompleted

1711 

1712Se 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.

1713 

1714Cuando 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.

1715 

1716#### Entrada de TaskCompleted

1717 

1718Además de los [campos de entrada comunes](#common-input-fields), los hooks TaskCompleted reciben `task_id`, `task_subject` y opcionalmente `task_description`, `teammate_name` y `team_name`.

1719 

1720```json theme={null}

1721{

1722 "session_id": "abc123",

1723 "transcript_path": "/Users/.../.claude/projects/.../00893aaf-19fa-41d2-8238-13269b9b3ca0.jsonl",

1724 "cwd": "/Users/...",

1725 "permission_mode": "default",

1726 "hook_event_name": "TaskCompleted",

1727 "task_id": "task-001",

1728 "task_subject": "Implement user authentication",

1729 "task_description": "Add login and signup endpoints",

1730 "teammate_name": "implementer",

1731 "team_name": "my-project"

1732}

1733```

1734 

1735| Campo | Descripción |

1736| :----------------- | :-------------------------------------------------------------- |

1737| `task_id` | Identificador de la tarea que se está completando |

1738| `task_subject` | Título de la tarea |

1739| `task_description` | Descripción detallada de la tarea. Puede estar ausente |

1740| `teammate_name` | Nombre del compañero que completa la tarea. Puede estar ausente |

1741| `team_name` | Nombre del equipo. Puede estar ausente |

1742 

1743#### Control de decisión de TaskCompleted

1744 

1745Los hooks TaskCompleted admiten dos formas de controlar la finalización de tareas:

1746 

1747* **Código de salida 2**: la tarea no se marca como completada y el mensaje de stderr se devuelve al modelo como retroalimentación.

1748* **JSON `{"continue": false, "stopReason": "..."}`**: detiene al compañero completamente, coincidiendo con el comportamiento del hook `Stop`. El `stopReason` se muestra al usuario.

1749 

1750Este ejemplo ejecuta pruebas y bloquea la finalización de tareas si fallan:

1751 

1752```bash theme={null}

1753#!/bin/bash

1754INPUT=$(cat)

1755TASK_SUBJECT=$(echo "$INPUT" | jq -r '.task_subject')

1756 

1757# Ejecute el conjunto de pruebas

1758if ! npm test 2>&1; then

1759 echo "Tests not passing. Fix failing tests before completing: $TASK_SUBJECT" >&2

1760 exit 2

1761fi

1762 

1763exit 0

1764```

1765 

1766### Stop

1767 

1768Se 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.

1769 

1770#### Entrada de Stop

1771 

1772Además de los [campos de entrada comunes](#common-input-fields), los hooks Stop reciben `stop_hook_active` y `last_assistant_message`. El campo `stop_hook_active` es `true` cuando Claude Code ya está continuando como resultado de un hook de parada. Verifique este valor o procese la transcripción para evitar que Claude Code se ejecute indefinidamente. El campo `last_assistant_message` contiene el contenido de texto de la respuesta final de Claude, por lo que los hooks pueden acceder a él sin analizar el archivo de transcripción.

1773 

1774```json theme={null}

1775{

1776 "session_id": "abc123",

1777 "transcript_path": "~/.claude/projects/.../00893aaf-19fa-41d2-8238-13269b9b3ca0.jsonl",

1778 "cwd": "/Users/...",

1779 "permission_mode": "default",

1780 "hook_event_name": "Stop",

1781 "stop_hook_active": true,

1782 "last_assistant_message": "I've completed the refactoring. Here's a summary..."

1783}

1784```

1785 

1786#### Control de decisión de Stop

1787 

1788Los hooks `Stop` y `SubagentStop` pueden controlar si Claude continúa. Además de los [campos de salida JSON](#json-output) disponibles para todos los hooks, su script de hook puede devolver estos campos específicos del evento:

1789 

1790| Campo | Descripción |

1791| :--------- | :-------------------------------------------------------------------------------- |

1792| `decision` | `"block"` evita que Claude se detenga. Omita para permitir que Claude se detenga |

1793| `reason` | Requerido cuando `decision` es `"block"`. Le dice a Claude por qué debe continuar |

1794 

1795```json theme={null}

1796{

1797 "decision": "block",

1798 "reason": "Must be provided when Claude is blocked from stopping"

1799}

1800```

1801 

1802### StopFailure

1803 

1804Se ejecuta en lugar de [Stop](#stop) cuando el turno termina debido a un error de API. La salida y el código de salida se ignoran. Use esto para registrar fallos, enviar alertas o tomar acciones de recuperación cuando Claude no puede completar una respuesta debido a límites de velocidad, problemas de autenticación u otros errores de API.

1805 

1806#### Entrada de StopFailure

1807 

1808Además de los [campos de entrada comunes](#common-input-fields), los hooks StopFailure reciben `error`, `error_details` opcional y `last_assistant_message` opcional. El campo `error` identifica el tipo de error y se usa para filtrado de matcher.

1809 

1810| Campo | Descripción |

1811| :----------------------- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

1812| `error` | Tipo de error: `rate_limit`, `authentication_failed`, `oauth_org_not_allowed`, `billing_error`, `invalid_request`, `server_error`, `max_output_tokens` u `unknown` |

1813| `error_details` | Detalles adicionales sobre el error, cuando estén disponibles |

1814| `last_assistant_message` | El texto de error renderizado mostrado en la conversación. A diferencia de `Stop` y `SubagentStop`, donde este campo contiene la salida conversacional de Claude, para `StopFailure` contiene la cadena de error de API en sí, como `"API Error: Rate limit reached"` |

1815 

1816```json theme={null}

1817{

1818 "session_id": "abc123",

1819 "transcript_path": "/Users/.../.claude/projects/.../00893aaf-19fa-41d2-8238-13269b9b3ca0.jsonl",

1820 "cwd": "/Users/...",

1821 "hook_event_name": "StopFailure",

1822 "error": "rate_limit",

1823 "error_details": "429 Too Many Requests",

1824 "last_assistant_message": "API Error: Rate limit reached"

1825}

1826```

1827 

1828Los hooks StopFailure no tienen control de decisión. Se ejecutan solo con fines de notificación y registro.

1829 

1830### TeammateIdle

1831 

1832Se 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.

1833 

1834Cuando 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.

1835 

1836#### Entrada de TeammateIdle

1837 

1838Además de los [campos de entrada comunes](#common-input-fields), los hooks TeammateIdle reciben `teammate_name` y `team_name`.

1839 

1840```json theme={null}

1841{

1842 "session_id": "abc123",

1843 "transcript_path": "/Users/.../.claude/projects/.../00893aaf-19fa-41d2-8238-13269b9b3ca0.jsonl",

1844 "cwd": "/Users/...",

1845 "permission_mode": "default",

1846 "hook_event_name": "TeammateIdle",

1847 "teammate_name": "researcher",

1848 "team_name": "my-project"

1849}

1850```

1851 

1852| Campo | Descripción |

1853| :-------------- | :--------------------------------------------------------- |

1854| `teammate_name` | Nombre del compañero que está a punto de quedarse inactivo |

1855| `team_name` | Nombre del equipo |

1856 

1857#### Control de decisión de TeammateIdle

1858 

1859Los hooks TeammateIdle admiten dos formas de controlar el comportamiento del compañero:

1860 

1861* **Código de salida 2**: el compañero recibe el mensaje de stderr como retroalimentación y continúa trabajando en lugar de quedarse inactivo.

1862* **JSON `{"continue": false, "stopReason": "..."}`**: detiene al compañero completamente, coincidiendo con el comportamiento del hook `Stop`. El `stopReason` se muestra al usuario.

1863 

1864Este ejemplo verifica que exista un artefacto de compilación antes de permitir que un compañero se quede inactivo:

1865 

1866```bash theme={null}

1867#!/bin/bash

1868 

1869if [ ! -f "./dist/output.js" ]; then

1870 echo "Build artifact missing. Run the build before stopping." >&2

1871 exit 2

1872fi

1873 

1874exit 0

1875```

1876 

1877### ConfigChange

1878 

1879Se ejecuta cuando un archivo de configuración cambia durante una sesión. Use esto para auditar cambios de configuración, aplicar políticas de seguridad o bloquear modificaciones no autorizadas a archivos de configuración.

1880 

1881Los hooks ConfigChange se activan para cambios en archivos de configuración, configuración de política administrada y archivos de skill. El campo `source` en la entrada le dice qué tipo de configuración cambió, y el campo `file_path` opcional proporciona la ruta al archivo cambiado.

1882 

1883El matcher filtra en la fuente de configuración:

1884 

1885| Matcher | Cuándo se activa |

1886| :----------------- | :------------------------------------------------ |

1887| `user_settings` | `~/.claude/settings.json` cambia |

1888| `project_settings` | `.claude/settings.json` cambia |

1889| `local_settings` | `.claude/settings.local.json` cambia |

1890| `policy_settings` | Cambios de configuración de política administrada |

1891| `skills` | Un archivo de skill en `.claude/skills/` cambia |

1892 

1893Este ejemplo registra todos los cambios de configuración para auditoría de seguridad:

1894 

1895```json theme={null}

1896{

1897 "hooks": {

1898 "ConfigChange": [

1899 {

1900 "hooks": [

1901 {

1902 "type": "command",

1903 "command": "\"$CLAUDE_PROJECT_DIR\"/.claude/hooks/audit-config-change.sh"

1904 }

1905 ]

1906 }

1907 ]

1908 }

1909}

1910```

1911 

1912#### Entrada de ConfigChange

1913 

1914Además de los [campos de entrada comunes](#common-input-fields), los hooks ConfigChange reciben `source` y opcionalmente `file_path`. El campo `source` indica qué tipo de configuración cambió, y `file_path` proporciona la ruta al archivo específico que se modificó.

1915 

1916```json theme={null}

1917{

1918 "session_id": "abc123",

1919 "transcript_path": "/Users/.../.claude/projects/.../00893aaf-19fa-41d2-8238-13269b9b3ca0.jsonl",

1920 "cwd": "/Users/...",

1921 "hook_event_name": "ConfigChange",

1922 "source": "project_settings",

1923 "file_path": "/Users/.../my-project/.claude/settings.json"

1924}

1925```

1926 

1927#### Control de decisión de ConfigChange

1928 

1929Los hooks ConfigChange pueden bloquear cambios de configuración para que no tengan efecto. Use código de salida 2 o un JSON `decision` para evitar el cambio. Cuando se bloquea, la nueva configuración no se aplica a la sesión en ejecución.

1930 

1931| Campo | Descripción |

1932| :--------- | :--------------------------------------------------------------------------------------- |

1933| `decision` | `"block"` evita que el cambio de configuración se aplique. Omita para permitir el cambio |

1934| `reason` | Explicación mostrada al usuario cuando `decision` es `"block"` |

1935 

1936```json theme={null}

1937{

1938 "decision": "block",

1939 "reason": "Configuration changes to project settings require admin approval"

1940}

1941```

1942 

1943Los cambios de `policy_settings` no pueden bloquearse. Los hooks aún se activan para fuentes de `policy_settings`, por lo que puede usarlos para registro de auditoría, pero cualquier decisión de bloqueo se ignora. Esto asegura que la configuración administrada por empresa siempre tenga efecto.

1944 

1945### CwdChanged

1946 

1947Se ejecuta cuando el directorio de trabajo cambia durante una sesión, por ejemplo cuando Claude ejecuta un comando `cd`. Use esto para reaccionar a cambios de directorio: recargar variables de entorno, activar cadenas de herramientas específicas del proyecto o ejecutar scripts de configuración automáticamente. Se empareja con [FileChanged](#filechanged) para herramientas como [direnv](https://direnv.net/) que administran el entorno por directorio.

1948 

1949Los hooks CwdChanged tienen acceso a `CLAUDE_ENV_FILE`. Las variables escritas en ese archivo persisten en comandos Bash posteriores para la sesión, al igual que en los [hooks SessionStart](#persist-environment-variables).

1950 

1951CwdChanged no admite matchers y se activa en cada cambio de directorio.

1952 

1953#### Entrada de CwdChanged

1954 

1955Además de los [campos de entrada comunes](#common-input-fields), los hooks CwdChanged reciben `old_cwd` y `new_cwd`.

1956 

1957```json theme={null}

1958{

1959 "session_id": "abc123",

1960 "transcript_path": "/Users/.../.claude/projects/.../transcript.jsonl",

1961 "cwd": "/Users/my-project/src",

1962 "hook_event_name": "CwdChanged",

1963 "old_cwd": "/Users/my-project",

1964 "new_cwd": "/Users/my-project/src"

1965}

1966```

1967 

1968#### Salida de CwdChanged

1969 

1970Además de los [campos de salida JSON](#json-output) disponibles para todos los hooks, los hooks CwdChanged pueden devolver `watchPaths` para establecer dinámicamente qué rutas de archivo [FileChanged](#filechanged) monitorea:

1971 

1972| Campo | Descripción |

1973| :----------- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

1974| `watchPaths` | Array de rutas absolutas. Reemplaza la lista de monitoreo dinámica actual (las rutas de su configuración de `matcher` siempre se monitorean). Devolver un array vacío borra la lista dinámica, que es típico al entrar en un nuevo directorio |

1975 

1976Los hooks CwdChanged no tienen control de decisión. No pueden bloquear el cambio de directorio.

1977 

1978### FileChanged

1979 

1980Se ejecuta cuando un archivo monitoreado cambia en el disco. Útil para recargar variables de entorno cuando se modifican archivos de configuración del proyecto.

1981 

1982El `matcher` para este evento sirve dos propósitos:

1983 

1984* **Construir la lista de vigilancia**: el valor se divide en `|` y cada segmento se registra como un nombre de archivo literal en el directorio de trabajo, por lo que `".envrc|.env"` vigila exactamente esos dos archivos. Los patrones regex no son útiles aquí: un valor como `^\.env` vigilaría un archivo literalmente nombrado `^\.env`.

1985* **Filtrar qué hooks se ejecutan**: cuando cambia un archivo vigilado, el mismo valor filtra qué grupos de hooks se ejecutan usando las [reglas de matcher](#matcher-patterns) estándar contra el basename del archivo cambiado.

1986 

1987Los hooks FileChanged tienen acceso a `CLAUDE_ENV_FILE`. Las variables escritas en ese archivo persisten en comandos Bash posteriores para la sesión, al igual que en los [hooks SessionStart](#persist-environment-variables).

1988 

1989#### Entrada de FileChanged

1990 

1991Además de los [campos de entrada comunes](#common-input-fields), los hooks FileChanged reciben `file_path` y `event`.

1992 

1993| Campo | Descripción |

1994| :---------- | :------------------------------------------------------------------------------------------------------ |

1995| `file_path` | Ruta absoluta al archivo que cambió |

1996| `event` | Qué sucedió: `"change"` (archivo modificado), `"add"` (archivo creado) o `"unlink"` (archivo eliminado) |

1997 

1998```json theme={null}

1999{

2000 "session_id": "abc123",

2001 "transcript_path": "/Users/.../.claude/projects/.../transcript.jsonl",

2002 "cwd": "/Users/my-project",

2003 "hook_event_name": "FileChanged",

2004 "file_path": "/Users/my-project/.envrc",

2005 "event": "change"

2006}

2007```

2008 

2009#### Salida de FileChanged

2010 

2011Además de los [campos de salida JSON](#json-output) disponibles para todos los hooks, los hooks FileChanged pueden devolver `watchPaths` para actualizar dinámicamente qué rutas de archivo se monitorean:

2012 

2013| Campo | Descripción |

2014| :----------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

2015| `watchPaths` | Array de rutas absolutas. Reemplaza la lista de monitoreo dinámica actual (las rutas de su configuración de `matcher` siempre se monitorean). Use esto cuando su script de hook descubra archivos adicionales para monitorear basados en el archivo cambiado |

2016 

2017Los hooks FileChanged no tienen control de decisión. No pueden bloquear el cambio de archivo.

2018 

2019### WorktreeCreate

2020 

2021Cuando ejecuta `claude --worktree` o un [subagente usa `isolation: "worktree"`](/es/sub-agents#choose-the-subagent-scope), Claude Code crea una copia de trabajo aislada usando `git worktree`. Si configura un hook WorktreeCreate, reemplaza el comportamiento predeterminado de git, permitiéndole usar un sistema de control de versiones diferente como SVN, Perforce o Mercurial.

2022 

2023Debido 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.

2024 

2025El hook debe devolver la ruta absoluta al directorio de worktree creado. Claude Code usa esta ruta como el directorio de trabajo para la sesión aislada. Los hooks de comando la imprimen en stdout; los hooks HTTP la devuelven a través de `hookSpecificOutput.worktreePath`.

2026 

2027Este ejemplo crea una copia de trabajo SVN e imprime la ruta para que Claude Code la use. Reemplace la URL del repositorio con la suya:

2028 

2029```json theme={null}

2030{

2031 "hooks": {

2032 "WorktreeCreate": [

2033 {

2034 "hooks": [

2035 {

2036 "type": "command",

2037 "command": "bash -c 'NAME=$(jq -r .name); DIR=\"$HOME/.claude/worktrees/$NAME\"; svn checkout https://svn.example.com/repo/trunk \"$DIR\" >&2 && echo \"$DIR\"'"

2038 }

2039 ]

2040 }

2041 ]

2042 }

2043}

2044```

2045 

2046El hook lee el `name` del worktree de la entrada JSON en stdin, verifica una copia fresca en un nuevo directorio e imprime la ruta del directorio. El `echo` en la última línea es lo que Claude Code lee como la ruta del worktree. Redirija cualquier otra salida a stderr para que no interfiera con la ruta.

2047 

2048#### Entrada de WorktreeCreate

2049 

2050Además de los [campos de entrada comunes](#common-input-fields), los hooks WorktreeCreate reciben el campo `name`. Este es un identificador slug para el nuevo worktree, especificado por el usuario o generado automáticamente (por ejemplo, `bold-oak-a3f2`).

2051 

2052```json theme={null}

2053{

2054 "session_id": "abc123",

2055 "transcript_path": "/Users/.../.claude/projects/.../00893aaf-19fa-41d2-8238-13269b9b3ca0.jsonl",

2056 "cwd": "/Users/...",

2057 "hook_event_name": "WorktreeCreate",

2058 "name": "feature-auth"

2059}

2060```

2061 

2062#### Salida de WorktreeCreate

2063 

2064Los hooks WorktreeCreate no usan el modelo de decisión de permitir/bloquear estándar. En su lugar, el éxito o fallo del hook determina el resultado. El hook debe devolver la ruta absoluta al directorio de worktree creado:

2065 

2066* **Hooks de comando** (`type: "command"`): imprimen la ruta en stdout.

2067* **Hooks HTTP** (`type: "http"`): devuelven `{ "hookSpecificOutput": { "hookEventName": "WorktreeCreate", "worktreePath": "/absolute/path" } }` en el cuerpo de la respuesta.

2068 

2069Si el hook falla o no produce ruta, la creación de worktree falla con un error.

2070 

2071### WorktreeRemove

2072 

2073La contraparte de limpieza de [WorktreeCreate](#worktreecreate). Este hook se activa cuando se está eliminando un worktree, ya sea cuando sale de una sesión `--worktree` y elige eliminarlo, o cuando un subagente con `isolation: "worktree"` finaliza. Para worktrees basados en git, Claude maneja la limpieza automáticamente con `git worktree remove`. Si configuró un hook WorktreeCreate para un sistema de control de versiones que no es git, emparéjelo con un hook WorktreeRemove para manejar la limpieza. Sin uno, el directorio de worktree se deja en el disco.

2074 

2075Claude Code pasa la ruta devuelta por WorktreeCreate como `worktree_path` en la entrada del hook. Este ejemplo lee esa ruta y elimina el directorio:

2076 

2077```json theme={null}

2078{

2079 "hooks": {

2080 "WorktreeRemove": [

2081 {

2082 "hooks": [

2083 {

2084 "type": "command",

2085 "command": "bash -c 'jq -r .worktree_path | xargs rm -rf'"

2086 }

2087 ]

2088 }

2089 ]

2090 }

2091}

2092```

2093 

2094#### Entrada de WorktreeRemove

2095 

2096Además de los [campos de entrada comunes](#common-input-fields), los hooks WorktreeRemove reciben el campo `worktree_path`, que es la ruta absoluta al worktree que se está eliminando.

2097 

2098```json theme={null}

2099{

2100 "session_id": "abc123",

2101 "transcript_path": "/Users/.../.claude/projects/.../00893aaf-19fa-41d2-8238-13269b9b3ca0.jsonl",

2102 "cwd": "/Users/...",

2103 "hook_event_name": "WorktreeRemove",

2104 "worktree_path": "/Users/.../my-project/.claude/worktrees/feature-auth"

2105}

2106```

2107 

2108Los hooks WorktreeRemove no tienen control de decisión. No pueden bloquear la eliminación de worktree pero pueden realizar tareas de limpieza como eliminar estado de control de versiones o archivar cambios. Los fallos de hook se registran solo en modo de depuración.

2109 

2110### PreCompact

2111 

2112Se ejecuta antes de que Claude Code esté a punto de ejecutar una operación de compactación.

2113 

2114El valor del matcher indica si la compactación fue desencadenada manualmente o automáticamente:

2115 

2116| Matcher | Cuándo se activa |

2117| :------- | :--------------------------------------------------------------- |

2118| `manual` | `/compact` |

2119| `auto` | Compactación automática cuando la ventana de contexto está llena |

2120 

2121Salga con código 2 para bloquear la compactación. Para un `/compact` manual, el mensaje de stderr se muestra al usuario. También puede bloquear devolviendo JSON con `"decision": "block"`.

2122 

2123Bloquear la compactación automática tiene diferentes efectos dependiendo de cuándo se active. Si la compactación fue desencadenada de forma proactiva antes del límite de contexto, Claude Code la omite y la conversación continúa sin compactar. Si la compactación fue desencadenada para recuperarse de un error de límite de contexto ya devuelto por la API, el error subyacente aparece y la solicitud actual falla.

2124 

2125#### Entrada de PreCompact

2126 

2127Además de los [campos de entrada comunes](#common-input-fields), los hooks PreCompact reciben `trigger` e `custom_instructions`. Para `manual`, `custom_instructions` contiene lo que el usuario pasa a `/compact`. Para `auto`, `custom_instructions` está vacío.

2128 

2129```json theme={null}

2130{

2131 "session_id": "abc123",

2132 "transcript_path": "/Users/.../.claude/projects/.../00893aaf-19fa-41d2-8238-13269b9b3ca0.jsonl",

2133 "cwd": "/Users/...",

2134 "hook_event_name": "PreCompact",

2135 "trigger": "manual",

2136 "custom_instructions": ""

2137}

2138```

2139 

2140### PostCompact

2141 

2142Se ejecuta después de que Claude Code completa una operación de compactación. Use este evento para reaccionar al nuevo estado compactado, por ejemplo para registrar el resumen generado o actualizar el estado externo.

2143 

2144Los mismos valores de matcher se aplican que para `PreCompact`:

2145 

2146| Matcher | Cuándo se activa |

2147| :------- | :-------------------------------------------------------------------------- |

2148| `manual` | Después de `/compact` |

2149| `auto` | Después de compactación automática cuando la ventana de contexto está llena |

2150 

2151#### Entrada de PostCompact

2152 

2153Además de los [campos de entrada comunes](#common-input-fields), los hooks PostCompact reciben `trigger` y `compact_summary`. El campo `compact_summary` contiene el resumen de conversación generado por la operación de compactación.

2154 

2155```json theme={null}

2156{

2157 "session_id": "abc123",

2158 "transcript_path": "/Users/.../.claude/projects/.../00893aaf-19fa-41d2-8238-13269b9b3ca0.jsonl",

2159 "cwd": "/Users/...",

2160 "hook_event_name": "PostCompact",

2161 "trigger": "manual",

2162 "compact_summary": "Summary of the compacted conversation..."

2163}

2164```

2165 

2166Los hooks PostCompact no tienen control de decisión. No pueden afectar el resultado de compactación pero pueden realizar tareas de seguimiento.

2167 

2168### SessionEnd

2169 

2170Se ejecuta cuando termina una sesión de Claude Code. Útil para tareas de limpieza, registro de estadísticas de sesión o guardado del estado de sesión. Admite matchers para filtrar por razón de salida.

2171 

2172El campo `reason` en la entrada del hook indica por qué terminó la sesión:

2173 

2174| Razón | Descripción |

2175| :---------------------------- | :------------------------------------------------------- |

2176| `clear` | Sesión borrada con comando `/clear` |

2177| `resume` | Sesión cambiada a través de `/resume` interactivo |

2178| `logout` | Usuario cerró sesión |

2179| `prompt_input_exit` | Usuario salió mientras la entrada del prompt era visible |

2180| `bypass_permissions_disabled` | El modo de permisos de omisión fue deshabilitado |

2181| `other` | Otras razones de salida |

2182 

2183#### Entrada de SessionEnd

2184 

2185Además de los [campos de entrada comunes](#common-input-fields), los hooks SessionEnd reciben un campo `reason` que indica por qué terminó la sesión. Consulte la [tabla de razones](#sessionend) anterior para todos los valores.

2186 

2187```json theme={null}

2188{

2189 "session_id": "abc123",

2190 "transcript_path": "/Users/.../.claude/projects/.../00893aaf-19fa-41d2-8238-13269b9b3ca0.jsonl",

2191 "cwd": "/Users/...",

2192 "hook_event_name": "SessionEnd",

2193 "reason": "other"

2194}

2195```

2196 

2197Los hooks SessionEnd no tienen control de decisión. No pueden bloquear la terminación de sesión pero pueden realizar tareas de limpieza.

2198 

2199Los hooks SessionEnd tienen un tiempo de espera predeterminado de 1,5 segundos. Esto se aplica tanto a la salida de sesión como a `/clear` y al cambio de sesiones a través de `/resume` interactivo. Si un hook necesita más tiempo, establezca un `timeout` por hook en la configuración del hook. El presupuesto general se aumenta automáticamente al tiempo de espera por hook más alto configurado en archivos de configuración, hasta 60 segundos. Los tiempos de espera establecidos en hooks proporcionados por plugins no aumentan el presupuesto. Para anular el presupuesto explícitamente, establezca la variable de entorno `CLAUDE_CODE_SESSIONEND_HOOKS_TIMEOUT_MS` en milisegundos.

2200 

2201```bash theme={null}

2202CLAUDE_CODE_SESSIONEND_HOOKS_TIMEOUT_MS=5000 claude

2203```

2204 

2205### Elicitation

2206 

2207Se ejecuta cuando un servidor MCP solicita entrada del usuario a mitad de la tarea. Por defecto, Claude Code muestra un diálogo interactivo para que el usuario responda. Los hooks pueden interceptar esta solicitud y responder programáticamente, omitiendo el diálogo completamente.

2208 

2209El campo matcher coincide con el nombre del servidor MCP.

2210 

2211#### Entrada de Elicitation

2212 

2213Además de los [campos de entrada comunes](#common-input-fields), los hooks Elicitation reciben `mcp_server_name`, `message` y campos opcionales `mode`, `url`, `elicitation_id` y `requested_schema`.

2214 

2215Para elicitación en modo formulario (el caso más común):

2216 

2217```json theme={null}

2218{

2219 "session_id": "abc123",

2220 "transcript_path": "/Users/.../.claude/projects/.../00893aaf-19fa-41d2-8238-13269b9b3ca0.jsonl",

2221 "cwd": "/Users/...",

2222 "permission_mode": "default",

2223 "hook_event_name": "Elicitation",

2224 "mcp_server_name": "my-mcp-server",

2225 "message": "Please provide your credentials",

2226 "mode": "form",

2227 "requested_schema": {

2228 "type": "object",

2229 "properties": {

2230 "username": { "type": "string", "title": "Username" }

2231 }

2232 }

2233}

2234```

2235 

2236Para elicitación en modo URL (autenticación basada en navegador):

2237 

2238```json theme={null}

2239{

2240 "session_id": "abc123",

2241 "transcript_path": "/Users/.../.claude/projects/.../00893aaf-19fa-41d2-8238-13269b9b3ca0.jsonl",

2242 "cwd": "/Users/...",

2243 "permission_mode": "default",

2244 "hook_event_name": "Elicitation",

2245 "mcp_server_name": "my-mcp-server",

2246 "message": "Please authenticate",

2247 "mode": "url",

2248 "url": "https://auth.example.com/login"

2249}

2250```

2251 

2252#### Salida de Elicitation

2253 

2254Para responder programáticamente sin mostrar el diálogo, devuelva un objeto JSON con `hookSpecificOutput`:

2255 

2256```json theme={null}

2257{

2258 "hookSpecificOutput": {

2259 "hookEventName": "Elicitation",

2260 "action": "accept",

2261 "content": {

2262 "username": "alice"

2263 }

2264 }

2265}

2266```

2267 

2268| Campo | Valores | Descripción |

2269| :-------- | :---------------------------- | :------------------------------------------------------------------------------- |

2270| `action` | `accept`, `decline`, `cancel` | Si aceptar, rechazar o cancelar la solicitud |

2271| `content` | object | Valores de campo de formulario a enviar. Solo se usa cuando `action` es `accept` |

2272 

2273El código de salida 2 deniega la elicitación y muestra stderr al usuario.

2274 

2275### ElicitationResult

2276 

2277Se ejecuta después de que un usuario responde a una elicitación MCP. Los hooks pueden observar, modificar o bloquear la respuesta antes de que se envíe de vuelta al servidor MCP.

2278 

2279El campo matcher coincide con el nombre del servidor MCP.

2280 

2281#### Entrada de ElicitationResult

2282 

2283Además de los [campos de entrada comunes](#common-input-fields), los hooks ElicitationResult reciben `mcp_server_name`, `action` y campos opcionales `mode`, `elicitation_id` y `content`.

2284 

2285```json theme={null}

2286{

2287 "session_id": "abc123",

2288 "transcript_path": "/Users/.../.claude/projects/.../00893aaf-19fa-41d2-8238-13269b9b3ca0.jsonl",

2289 "cwd": "/Users/...",

2290 "permission_mode": "default",

2291 "hook_event_name": "ElicitationResult",

2292 "mcp_server_name": "my-mcp-server",

2293 "action": "accept",

2294 "content": { "username": "alice" },

2295 "mode": "form",

2296 "elicitation_id": "elicit-123"

2297}

2298```

2299 

2300#### Salida de ElicitationResult

2301 

2302Para anular la respuesta del usuario, devuelva un objeto JSON con `hookSpecificOutput`:

2303 

2304```json theme={null}

2305{

2306 "hookSpecificOutput": {

2307 "hookEventName": "ElicitationResult",

2308 "action": "decline",

2309 "content": {}

2310 }

2311}

2312```

2313 

2314| Campo | Valores | Descripción |

2315| :-------- | :---------------------------- | :----------------------------------------------------------------------------------- |

2316| `action` | `accept`, `decline`, `cancel` | Anula la acción del usuario |

2317| `content` | object | Anula valores de campo de formulario. Solo significativo cuando `action` es `accept` |

2318 

2319El código de salida 2 bloquea la respuesta, cambiando la acción efectiva a `decline`.

2320 

2321## Hooks basados en prompts

2322 

2323Además de hooks de comando, HTTP y herramientas MCP, Claude Code admite hooks basados en prompts (`type: "prompt"`) que usan un LLM para evaluar si permitir o bloquear una acción, y hooks de agente (`type: "agent"`) que generan un verificador agentico con acceso a herramientas. No todos los eventos admiten todos los tipos de hooks.

2324 

2325Eventos que admiten los cinco tipos de hooks (`command`, `http`, `mcp_tool`, `prompt` y `agent`):

2326 

2327* `PermissionRequest`

2328* `PostToolBatch`

2329* `PostToolUse`

2330* `PostToolUseFailure`

2331* `PreToolUse`

2332* `Stop`

2333* `SubagentStop`

2334* `TaskCompleted`

2335* `TaskCreated`

2336* `UserPromptExpansion`

2337* `UserPromptSubmit`

2338 

2339Eventos que admiten hooks `command`, `http` y `mcp_tool` pero no `prompt` o `agent`:

2340 

2341* `ConfigChange`

2342* `CwdChanged`

2343* `Elicitation`

2344* `ElicitationResult`

2345* `FileChanged`

2346* `InstructionsLoaded`

2347* `Notification`

2348* `PermissionDenied`

2349* `PostCompact`

2350* `PreCompact`

2351* `SessionEnd`

2352* `StopFailure`

2353* `SubagentStart`

2354* `TeammateIdle`

2355* `WorktreeCreate`

2356* `WorktreeRemove`

2357 

2358`SessionStart` y `Setup` admiten hooks `command` y `mcp_tool`. No admiten hooks `http`, `prompt` o `agent`.

2359 

2360### Cómo funcionan los hooks basados en prompts

2361 

2362En lugar de ejecutar un comando Bash, los hooks basados en prompts:

2363 

23641. Envían la entrada del hook y su prompt a un modelo Claude, Haiku por defecto

23652. El LLM responde con JSON estructurado que contiene una decisión

23663. Claude Code procesa la decisión automáticamente

2367 

2368### Configuración de hook de prompt

2369 

2370Establezca `type` en `"prompt"` y proporcione una cadena `prompt` en lugar de un `command`. Use el marcador de posición `$ARGUMENTS` para inyectar datos de entrada JSON del hook en su texto de prompt. Claude Code envía el prompt combinado e entrada a un modelo Claude rápido, que devuelve una decisión JSON.

2371 

2372Este hook `Stop` le pide al LLM que evalúe si todas las tareas están completas antes de permitir que Claude finalice:

2373 

2374```json theme={null}

2375{

2376 "hooks": {

2377 "Stop": [

2378 {

2379 "hooks": [

2380 {

2381 "type": "prompt",

2382 "prompt": "Evaluate if Claude should stop: $ARGUMENTS. Check if all tasks are complete."

2383 }

2384 ]

2385 }

2386 ]

2387 }

2388}

2389```

2390 

2391| Campo | Requerido | Descripción |

2392| :-------- | :-------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

2393| `type` | sí | Debe ser `"prompt"` |

2394| `prompt` | sí | El texto del prompt a enviar al LLM. Use `$ARGUMENTS` como marcador de posición para la entrada JSON del hook. Si `$ARGUMENTS` no está presente, la entrada JSON se agrega al prompt |

2395| `model` | no | Modelo a usar para evaluación. Por defecto es un modelo rápido |

2396| `timeout` | no | Tiempo de espera en segundos. Predeterminado: 30 |

2397 

2398### Esquema de respuesta

2399 

2400El LLM debe responder con JSON que contenga:

2401 

2402```json theme={null}

2403{

2404 "ok": true | false,

2405 "reason": "Explanation for the decision"

2406}

2407```

2408 

2409| Campo | Descripción |

2410| :------- | :------------------------------------------------------------ |

2411| `ok` | `true` permite la acción, `false` la bloquea |

2412| `reason` | Requerido cuando `ok` es `false`. Explicación para el bloqueo |

2413 

2414Lo que sucede en `ok: false` depende del evento:

2415 

2416* `Stop` y `SubagentStop`: la razón se retroalimenta a Claude como su siguiente instrucción y el turno continúa

2417* `PreToolUse`: la llamada de herramienta se deniega y la razón se devuelve a Claude como el error de la herramienta, equivalente a un hook de comando con `permissionDecision: "deny"`

2418* `PostToolUse`, `PostToolBatch`, `UserPromptSubmit` y `UserPromptExpansion`: el turno termina y la razón aparece en el chat como una línea de advertencia, equivalente a devolver `"continue": false` desde un hook de comando

2419* `PostToolUseFailure`, `TaskCreated` y `TaskCompleted`: la razón se devuelve a Claude como un error de herramienta, similar a `PreToolUse`

2420* `PermissionRequest`: `ok: false` no tiene efecto. Para denegar una aprobación desde un hook, use un [hook de comando](#command-hook-fields) que devuelva `hookSpecificOutput.decision.behavior: "deny"`

2421 

2422Si necesita un control más fino en cualquier evento, use un [hook de comando](#command-hook-fields) con los campos por evento descritos en [Control de decisión](#decision-control).

2423 

2424### Ejemplo: Hook Stop de múltiples criterios

2425 

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

2427 

2428```json theme={null}

2429{

2430 "hooks": {

2431 "Stop": [

2432 {

2433 "hooks": [

2434 {

2435 "type": "prompt",

2436 "prompt": "You are evaluating whether Claude should stop working. Context: $ARGUMENTS\n\nAnalyze the conversation and determine if:\n1. All user-requested tasks are complete\n2. Any errors need to be addressed\n3. Follow-up work is needed\n\nRespond with JSON: {\"ok\": true} to allow stopping, or {\"ok\": false, \"reason\": \"your explanation\"} to continue working.",

2437 "timeout": 30

2438 }

2439 ]

2440 }

2441 ]

2442 }

2443}

2444```

2445 

2446## Hooks basados en agentes

2447 

2448<Warning>

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

2450</Warning>

2451 

2452Los hooks basados en agentes (`type: "agent"`) son como hooks basados en prompts pero con acceso a herramientas de múltiples turnos. En lugar de una única llamada LLM, un hook de agente genera un subagente que puede leer archivos, buscar código e inspeccionar la base de código para verificar condiciones. Los hooks de agente admiten los mismos eventos que los hooks basados en prompts.

2453 

2454### Cómo funcionan los hooks de agente

2455 

2456Cuando se activa un hook de agente:

2457 

24581. Claude Code genera un subagente con su prompt y la entrada JSON del hook

24592. El subagente puede usar herramientas como Read, Grep y Glob para investigar

24603. Después de hasta 50 turnos, el subagente devuelve una decisión estructurada `{ "ok": true/false }`

24614. Claude Code procesa la decisión de la misma manera que un hook de prompt

2462 

2463Los hooks de agente son útiles cuando la verificación requiere inspeccionar archivos reales o salida de prueba, no solo evaluar los datos de entrada del hook solos.

2464 

2465### Configuración de hook de agente

2466 

2467Establezca `type` en `"agent"` y proporcione una cadena `prompt`. Los campos de configuración son los mismos que los [hooks de prompt](#prompt-hook-configuration), con un tiempo de espera predeterminado más largo:

2468 

2469| Campo | Requerido | Descripción |

2470| :-------- | :-------- | :---------------------------------------------------------------------------------------------------------- |

2471| `type` | sí | Debe ser `"agent"` |

2472| `prompt` | sí | Prompt que describe qué verificar. Use `$ARGUMENTS` como marcador de posición para la entrada JSON del hook |

2473| `model` | no | Modelo a usar. Por defecto es un modelo rápido |

2474| `timeout` | no | Tiempo de espera en segundos. Predeterminado: 60 |

2475 

2476El esquema de respuesta es el mismo que los hooks de prompt: `{ "ok": true }` para permitir o `{ "ok": false, "reason": "..." }` para bloquear.

2477 

2478Este hook `Stop` verifica que todas las pruebas unitarias pasen antes de permitir que Claude finalice:

2479 

2480```json theme={null}

2481{

2482 "hooks": {

2483 "Stop": [

2484 {

2485 "hooks": [

2486 {

2487 "type": "agent",

2488 "prompt": "Verify that all unit tests pass. Run the test suite and check the results. $ARGUMENTS",

2489 "timeout": 120

2490 }

2491 ]

2492 }

2493 ]

2494 }

2495}

2496```

2497 

2498## Ejecutar hooks en segundo plano

2499 

2500Por defecto, los hooks bloquean la ejecución de Claude hasta que se completen. Para tareas de larga duración como implementaciones, conjuntos de pruebas o llamadas a API externas, establezca `"async": true` para ejecutar el hook en segundo plano mientras Claude continúa trabajando. Los hooks asincronos no pueden bloquear o controlar el comportamiento de Claude: campos de respuesta como `decision`, `permissionDecision` y `continue` no tienen efecto, porque la acción que habrían controlado ya se ha completado.

2501 

2502### Configurar un hook asincrónico

2503 

2504Agregue `"async": true` a la configuración de un hook de comando para ejecutarlo en segundo plano sin bloquear a Claude. Este campo solo está disponible en hooks `type: "command"`.

2505 

2506Este hook ejecuta un script de prueba después de cada llamada a herramienta `Write`. Claude continúa trabajando inmediatamente mientras `run-tests.sh` se ejecuta durante hasta 120 segundos. Cuando el script finaliza, su salida se entrega en el siguiente turno de conversación:

2507 

2508```json theme={null}

2509{

2510 "hooks": {

2511 "PostToolUse": [

2512 {

2513 "matcher": "Write",

2514 "hooks": [

2515 {

2516 "type": "command",

2517 "command": "/path/to/run-tests.sh",

2518 "async": true,

2519 "timeout": 120

2520 }

2521 ]

2522 }

2523 ]

2524 }

2525}

2526```

2527 

2528El campo `timeout` establece el tiempo máximo en segundos para el proceso de fondo. Si no se especifica, los hooks asincronos usan el mismo predeterminado de 10 minutos que los hooks sincronos.

2529 

2530### Cómo se ejecutan los hooks asincronos

2531 

2532Cuando se activa un hook asincrónico, Claude Code inicia el proceso del hook e inmediatamente continúa sin esperar a que finalice. El hook recibe la misma entrada JSON a través de stdin que un hook sincrónico.

2533 

2534Después de que el proceso de fondo sale, si el hook produjo una respuesta JSON con un campo `systemMessage` o `additionalContext`, ese contenido se entrega a Claude como contexto en el siguiente turno de conversación.

2535 

2536Las notificaciones de finalización de hooks asincronos se suprimen por defecto. Para verlas, habilite el modo detallado con `Ctrl+O` o inicie Claude Code con `--verbose`.

2537 

2538### Ejemplo: ejecutar pruebas después de cambios de archivo

2539 

2540Este hook inicia un conjunto de pruebas en segundo plano cada vez que Claude escribe un archivo, luego reporta los resultados a Claude cuando las pruebas finalizan. Guarde este script en `.claude/hooks/run-tests-async.sh` en su proyecto y hágalo ejecutable con `chmod +x`:

2541 

2542```bash theme={null}

2543#!/bin/bash

2544# run-tests-async.sh

2545 

2546# Lee entrada de hook desde stdin

2547INPUT=$(cat)

2548FILE_PATH=$(echo "$INPUT" | jq -r '.tool_input.file_path // empty')

2549 

2550# Solo ejecute pruebas para archivos de origen

2551if [[ "$FILE_PATH" != *.ts && "$FILE_PATH" != *.js ]]; then

2552 exit 0

2553fi

2554 

2555# Ejecute pruebas e informe resultados a través de systemMessage

2556RESULT=$(npm test 2>&1)

2557EXIT_CODE=$?

2558 

2559if [ $EXIT_CODE -eq 0 ]; then

2560 echo "{\"systemMessage\": \"Tests passed after editing $FILE_PATH\"}"

2561else

2562 echo "{\"systemMessage\": \"Tests failed after editing $FILE_PATH: $RESULT\"}"

2563fi

2564```

2565 

2566Luego agregue esta configuración a `.claude/settings.json` en la raíz de su proyecto. La bandera `async: true` permite que Claude continúe trabajando mientras se ejecutan las pruebas:

2567 

2568```json theme={null}

2569{

2570 "hooks": {

2571 "PostToolUse": [

2572 {

2573 "matcher": "Write|Edit",

2574 "hooks": [

2575 {

2576 "type": "command",

2577 "command": "\"$CLAUDE_PROJECT_DIR\"/.claude/hooks/run-tests-async.sh",

2578 "async": true,

2579 "timeout": 300

2580 }

2581 ]

2582 }

2583 ]

2584 }

2585}

2586```

2587 

2588### Limitaciones

2589 

2590Los hooks asincronos tienen varias restricciones en comparación con los hooks sincronos:

2591 

2592* Solo los hooks `type: "command"` admiten `async`. Los hooks basados en prompts no pueden ejecutarse de forma asincrónica.

2593* Los hooks asincronos no pueden bloquear llamadas a herramientas o devolver decisiones. En el momento en que se completa el hook, la acción desencadenante ya ha procedido.

2594* La salida del hook se entrega en el siguiente turno de conversación. Si la sesión está inactiva, la respuesta espera hasta la siguiente interacción del usuario. Excepción: un hook `asyncRewake` que sale con código 2 despierta a Claude inmediatamente incluso cuando la sesión está inactiva.

2595* Cada ejecución crea un proceso de fondo separado. No hay deduplicación en múltiples activaciones del mismo hook asincrónico.

2596 

2597## Consideraciones de seguridad

2598 

2599### Descargo de responsabilidad

2600 

2601Los hooks de comando se ejecutan con los permisos completos del usuario del sistema.

2602 

2603<Warning>

2604 Los hooks de comando ejecutan comandos de shell con sus permisos de usuario completos. Pueden modificar, eliminar o acceder a cualquier archivo al que su cuenta de usuario pueda acceder. Revise y pruebe todos los comandos de hook antes de agregarlos a su configuración.

2605</Warning>

2606 

2607### Mejores prácticas de seguridad

2608 

2609Tenga en cuenta estas prácticas al escribir hooks:

2610 

2611* **Validar y desinfectar entradas**: nunca confíe en datos de entrada ciegamente

2612* **Siempre entrecomillar variables de shell**: use `"$VAR"` no `$VAR`

2613* **Bloquear traversal de ruta**: verifique `..` en rutas de archivo

2614* **Usar rutas absolutas**: especifique rutas completas para scripts, usando `"$CLAUDE_PROJECT_DIR"` para la raíz del proyecto

2615* **Omitir archivos sensibles**: evite `.env`, `.git/`, claves, etc.

2616 

2617## Herramienta PowerShell en Windows

2618 

2619En Windows, puede ejecutar hooks individuales en PowerShell estableciendo `"shell": "powershell"` en un hook de comando. Los hooks generan PowerShell directamente, por lo que esto funciona independientemente de si `CLAUDE_CODE_USE_POWERSHELL_TOOL` está establecido. Claude Code detecta automáticamente `pwsh.exe` (PowerShell 7+) con un respaldo a `powershell.exe` (5.1).

2620 

2621```json theme={null}

2622{

2623 "hooks": {

2624 "PostToolUse": [

2625 {

2626 "matcher": "Write",

2627 "hooks": [

2628 {

2629 "type": "command",

2630 "shell": "powershell",

2631 "command": "Write-Host 'File written'"

2632 }

2633 ]

2634 }

2635 ]

2636 }

2637}

2638```

2639 

2640## Depurar hooks

2641 

2642Los detalles de ejecución de hooks, incluyendo qué hooks coincidieron, sus códigos de salida y stdout y stderr completos, se escriben en el archivo de registro de depuración. Inicie Claude Code con `claude --debug-file <path>` para escribir el registro en una ubicación conocida, o ejecute `claude --debug` y lea el registro en `~/.claude/debug/<session-id>.txt`. La bandera `--debug` no imprime en la terminal.

2643 

2644```text theme={null}

2645[DEBUG] Executing hooks for PostToolUse:Write

2646[DEBUG] Found 1 hook commands to execute

2647[DEBUG] Executing hook command: <Your command> with timeout 600000ms

2648[DEBUG] Hook command completed with status 0: <Your stdout>

2649```

2650 

2651Para 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.

2652 

2653Para 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).

hooks-guide.md +927 −0 created

Details

1> ## Documentation Index

2> Fetch the complete documentation index at: https://code.claude.com/docs/llms.txt

3> Use this file to discover all available pages before exploring further.

4 

5# Automatizar flujos de trabajo con hooks

6 

7> Ejecuta comandos de shell automáticamente cuando Claude Code edita archivos, finaliza tareas o necesita entrada. Formatea código, envía notificaciones, valida comandos y aplica reglas del proyecto.

8 

9Los hooks son comandos de shell definidos por el usuario que se ejecutan en puntos específicos del ciclo de vida de Claude Code. Proporcionan control determinista sobre el comportamiento de Claude Code, asegurando que ciertas acciones siempre ocurran en lugar de depender de que el LLM elija ejecutarlas. Usa hooks para aplicar reglas del proyecto, automatizar tareas repetitivas e integrar Claude Code con tus herramientas existentes.

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.

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.

14 

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).

17</Tip>

18 

19## Configura tu primer hook

20 

21Para crear un hook, añade un bloque `hooks` a un [archivo de configuración](#configure-hook-location). Este tutorial crea un hook de notificación de escritorio, para que recibas una alerta cada vez que Claude esté esperando tu entrada en lugar de ver la terminal.

22 

23<Steps>

24 <Step title="Añade el hook a tu configuración">

25 Abre `~/.claude/settings.json` y añade un hook `Notification`. El ejemplo a continuación usa `osascript` para macOS; consulta [Recibe notificaciones cuando Claude necesita entrada](#get-notified-when-claude-needs-input) para comandos de Linux y Windows.

26 

27 ```json theme={null}

28 {

29 "hooks": {

30 "Notification": [

31 {

32 "matcher": "",

33 "hooks": [

34 {

35 "type": "command",

36 "command": "osascript -e 'display notification \"Claude Code needs your attention\" with title \"Claude Code\"'"

37 }

38 ]

39 }

40 ]

41 }

42 }

43 ```

44 

45 Si tu archivo de configuración ya tiene una clave `hooks`, añade `Notification` como hermano de las claves de evento existentes en lugar de reemplazar el objeto completo. Cada nombre de evento es una clave dentro del único objeto `hooks`:

46 

47 ```json theme={null}

48 {

49 "hooks": {

50 "PostToolUse": [

51 {

52 "matcher": "Edit|Write",

53 "hooks": [{ "type": "command", "command": "jq -r '.tool_input.file_path' | xargs npx prettier --write" }]

54 }

55 ],

56 "Notification": [

57 {

58 "matcher": "",

59 "hooks": [{ "type": "command", "command": "osascript -e 'display notification \"Claude Code needs your attention\" with title \"Claude Code\"'" }]

60 }

61 ]

62 }

63 }

64 ```

65 

66 También puedes pedirle a Claude que escriba el hook por ti describiendo lo que quieres en la CLI.

67 </Step>

68 

69 <Step title="Verifica la configuración">

70 Escribe `/hooks` para abrir el navegador de hooks. Verás una lista de todos los eventos de hook disponibles, con un contador junto a cada evento que tiene hooks configurados. Selecciona `Notification` para confirmar que tu nuevo hook aparece en la lista. Seleccionar el hook muestra sus detalles: el evento, matcher, tipo, archivo de origen y comando.

71 </Step>

72 

73 <Step title="Prueba el hook">

74 Presiona `Esc` para volver a la CLI. Pídele a Claude que haga algo que requiera permiso, luego cambia de la terminal. Deberías recibir una notificación de escritorio.

75 </Step>

76</Steps>

77 

78<Tip>

79 El menú `/hooks` es de solo lectura. Para añadir, modificar o eliminar hooks, edita tu JSON de configuración directamente o pídele a Claude que haga el cambio.

80</Tip>

81 

82## Qué puedes automatizar

83 

84Los 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).

85 

86Cada ejemplo incluye un bloque de configuración listo para usar que añades a un [archivo de configuración](#configure-hook-location). Los patrones más comunes:

87 

88* [Recibe notificaciones cuando Claude necesita entrada](#get-notified-when-claude-needs-input)

89* [Formatea automáticamente el código después de ediciones](#auto-format-code-after-edits)

90* [Bloquea ediciones a archivos protegidos](#block-edits-to-protected-files)

91* [Reinyecta contexto después de compactación](#re-inject-context-after-compaction)

92* [Audita cambios de configuración](#audit-configuration-changes)

93* [Recarga el entorno cuando el directorio o los archivos cambian](#reload-environment-when-directory-or-files-change)

94* [Aprueba automáticamente avisos de permiso específicos](#auto-approve-specific-permission-prompts)

95 

96### Recibe notificaciones cuando Claude necesita entrada

97 

98Obtén una notificación de escritorio cada vez que Claude termine de trabajar y necesite tu entrada, para que puedas cambiar a otras tareas sin verificar la terminal.

99 

100Este hook usa el evento `Notification`, que se activa cuando Claude está esperando entrada o permiso. Cada pestaña a continuación usa el comando de notificación nativo de la plataforma. Añade esto a `~/.claude/settings.json`:

101 

102<Tabs>

103 <Tab title="macOS">

104 ```json theme={null}

105 {

106 "hooks": {

107 "Notification": [

108 {

109 "matcher": "",

110 "hooks": [

111 {

112 "type": "command",

113 "command": "osascript -e 'display notification \"Claude Code needs your attention\" with title \"Claude Code\"'"

114 }

115 ]

116 }

117 ]

118 }

119 }

120 ```

121 

122 <Accordion title="Si no aparece ninguna notificación">

123 `osascript` enruta notificaciones a través de la aplicación Script Editor integrada. Si Script Editor no tiene permiso de notificación, el comando falla silenciosamente, y macOS no te pedirá que lo otorgues. Ejecuta esto en Terminal una vez para que Script Editor aparezca en tu configuración de notificaciones:

124 

125 ```bash theme={null}

126 osascript -e 'display notification "test"'

127 ```

128 

129 Nada aparecerá aún. Abre **Configuración del Sistema > Notificaciones**, encuentra **Script Editor** en la lista, y activa **Permitir notificaciones**. Ejecuta el comando de nuevo para confirmar que aparece la notificación de prueba.

130 </Accordion>

131 </Tab>

132 

133 <Tab title="Linux">

134 ```json theme={null}

135 {

136 "hooks": {

137 "Notification": [

138 {

139 "matcher": "",

140 "hooks": [

141 {

142 "type": "command",

143 "command": "notify-send 'Claude Code' 'Claude Code needs your attention'"

144 }

145 ]

146 }

147 ]

148 }

149 }

150 ```

151 </Tab>

152 

153 <Tab title="Windows (PowerShell)">

154 ```json theme={null}

155 {

156 "hooks": {

157 "Notification": [

158 {

159 "matcher": "",

160 "hooks": [

161 {

162 "type": "command",

163 "command": "powershell.exe -Command \"[System.Reflection.Assembly]::LoadWithPartialName('System.Windows.Forms'); [System.Windows.Forms.MessageBox]::Show('Claude Code needs your attention', 'Claude Code')\""

164 }

165 ]

166 }

167 ]

168 }

169 }

170 ```

171 </Tab>

172</Tabs>

173 

174El matcher vacío se activa en todos los tipos de notificación. Para activarse solo en eventos específicos, establécelo en uno de estos valores:

175 

176| Matcher | Se activa cuando |

177| :--------------------- | :----------------------------------------------------------------- |

178| `permission_prompt` | Claude necesita que apruebes un uso de herramienta |

179| `idle_prompt` | Claude ha terminado y está esperando tu siguiente solicitud |

180| `auth_success` | La autenticación se completa |

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 |

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

184 

185Escribe `/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).

186 

187### Formatea automáticamente el código después de ediciones

188 

189Ejecuta automáticamente [Prettier](https://prettier.io/) en cada archivo que Claude edita, para que el formato se mantenga consistente sin intervención manual.

190 

191Este hook usa el evento `PostToolUse` con un matcher `Edit|Write`, por lo que se ejecuta solo después de herramientas de edición de archivos. El comando extrae la ruta del archivo editado con [`jq`](https://jqlang.github.io/jq/) y la pasa a Prettier. Añade esto a `.claude/settings.json` en la raíz de tu proyecto:

192 

193```json theme={null}

194{

195 "hooks": {

196 "PostToolUse": [

197 {

198 "matcher": "Edit|Write",

199 "hooks": [

200 {

201 "type": "command",

202 "command": "jq -r '.tool_input.file_path' | xargs npx prettier --write"

203 }

204 ]

205 }

206 ]

207 }

208}

209```

210 

211<Note>

212 Los ejemplos de Bash en esta página usan `jq` para análisis JSON. Instálalo con `brew install jq` (macOS), `apt-get install jq` (Debian/Ubuntu), o consulta [descargas de `jq`](https://jqlang.github.io/jq/download/).

213</Note>

214 

215### Bloquea ediciones a archivos protegidos

216 

217Evita que Claude modifique archivos sensibles como `.env`, `package-lock.json`, o cualquier cosa en `.git/`. Claude recibe retroalimentación explicando por qué se bloqueó la edición, para que pueda ajustar su enfoque.

218 

219Este ejemplo usa un archivo de script separado que el hook llama. El script verifica la ruta del archivo de destino contra una lista de patrones protegidos y sale con código 2 para bloquear la edición.

220 

221<Steps>

222 <Step title="Crea el script del hook">

223 Guarda esto en `.claude/hooks/protect-files.sh`:

224 

225 ```bash theme={null}

226 #!/bin/bash

227 # protect-files.sh

228 

229 INPUT=$(cat)

230 FILE_PATH=$(echo "$INPUT" | jq -r '.tool_input.file_path // empty')

231 

232 PROTECTED_PATTERNS=(".env" "package-lock.json" ".git/")

233 

234 for pattern in "${PROTECTED_PATTERNS[@]}"; do

235 if [[ "$FILE_PATH" == *"$pattern"* ]]; then

236 echo "Blocked: $FILE_PATH matches protected pattern '$pattern'" >&2

237 exit 2

238 fi

239 done

240 

241 exit 0

242 ```

243 </Step>

244 

245 <Step title="Haz el script ejecutable (macOS/Linux)">

246 Los scripts de hook deben ser ejecutables para que Claude Code los ejecute:

247 

248 ```bash theme={null}

249 chmod +x .claude/hooks/protect-files.sh

250 ```

251 </Step>

252 

253 <Step title="Registra el hook">

254 Añade un hook `PreToolUse` a `.claude/settings.json` que ejecute el script antes de cualquier llamada a herramienta `Edit` o `Write`:

255 

256 ```json theme={null}

257 {

258 "hooks": {

259 "PreToolUse": [

260 {

261 "matcher": "Edit|Write",

262 "hooks": [

263 {

264 "type": "command",

265 "command": "\"$CLAUDE_PROJECT_DIR\"/.claude/hooks/protect-files.sh"

266 }

267 ]

268 }

269 ]

270 }

271 }

272 ```

273 </Step>

274</Steps>

275 

276### Reinyecta contexto después de compactación

277 

278Cuando la ventana de contexto de Claude se llena, la compactación resume la conversación para liberar espacio. Esto puede perder detalles importantes. Usa un hook `SessionStart` con un matcher `compact` para reinyectar contexto crítico después de cada compactación.

279 

280Cualquier texto que tu comando escriba en stdout se añade al contexto de Claude. Este ejemplo recuerda a Claude las convenciones del proyecto y el trabajo reciente. Añade esto a `.claude/settings.json` en la raíz de tu proyecto:

281 

282```json theme={null}

283{

284 "hooks": {

285 "SessionStart": [

286 {

287 "matcher": "compact",

288 "hooks": [

289 {

290 "type": "command",

291 "command": "echo 'Reminder: use Bun, not npm. Run bun test before committing. Current sprint: auth refactor.'"

292 }

293 ]

294 }

295 ]

296 }

297}

298```

299 

300Puedes 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.

301 

302### Audita cambios de configuración

303 

304Realiza un seguimiento de cuándo los archivos de configuración o skills cambian durante una sesión. El evento `ConfigChange` se activa cuando un proceso externo o editor modifica un archivo de configuración, para que puedas registrar cambios para cumplimiento o bloquear modificaciones no autorizadas.

305 

306Este ejemplo añade cada cambio a un registro de auditoría. Añade esto a `~/.claude/settings.json`:

307 

308```json theme={null}

309{

310 "hooks": {

311 "ConfigChange": [

312 {

313 "matcher": "",

314 "hooks": [

315 {

316 "type": "command",

317 "command": "jq -c '{timestamp: now | todate, source: .source, file: .file_path}' >> ~/claude-config-audit.log"

318 }

319 ]

320 }

321 ]

322 }

323}

324```

325 

326El 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.

327 

328### Recarga el entorno cuando el directorio o los archivos cambian

329 

330Algunos proyectos establecen diferentes variables de entorno dependiendo de en qué directorio estés. Herramientas como [direnv](https://direnv.net/) hacen esto automáticamente en tu shell, pero la herramienta Bash de Claude no recoge esos cambios por sí sola.

331 

332Emparejar un hook `SessionStart` con un hook `CwdChanged` arregla esto. `SessionStart` carga las variables para el directorio en el que lanzas, y `CwdChanged` las recarga cada vez que Claude cambia de directorio. Ambos escriben en `CLAUDE_ENV_FILE`, que Claude Code ejecuta como un preámbulo de script antes de cada comando Bash. Añade esto a `~/.claude/settings.json`:

333 

334```json theme={null}

335{

336 "hooks": {

337 "SessionStart": [

338 {

339 "hooks": [

340 {

341 "type": "command",

342 "command": "direnv export bash > \"$CLAUDE_ENV_FILE\""

343 }

344 ]

345 }

346 ],

347 "CwdChanged": [

348 {

349 "hooks": [

350 {

351 "type": "command",

352 "command": "direnv export bash > \"$CLAUDE_ENV_FILE\""

353 }

354 ]

355 }

356 ]

357 }

358}

359```

360 

361Ejecuta `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`.

362 

363Para 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 `|`. Para construir la lista de observación, este valor se divide en nombres de archivo literales en lugar de evaluarse 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:

364 

365```json theme={null}

366{

367 "hooks": {

368 "FileChanged": [

369 {

370 "matcher": ".envrc|.env",

371 "hooks": [

372 {

373 "type": "command",

374 "command": "direnv export bash > \"$CLAUDE_ENV_FILE\""

375 }

376 ]

377 }

378 ]

379 }

380}

381```

382 

383Consulta 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`.

384 

385### Aprueba automáticamente avisos de permiso específicos

386 

387Omite el diálogo de aprobación para llamadas a herramientas que siempre permites. Este ejemplo aprueba automáticamente `ExitPlanMode`, la herramienta que Claude llama cuando termina de presentar un plan y pide proceder, para que no se te solicite cada vez que un plan esté listo.

388 

389A diferencia de los ejemplos de código de salida anteriores, la aprobación automática requiere que tu hook escriba una decisión JSON en stdout. Un hook `PermissionRequest` se activa cuando Claude Code está a punto de mostrar un diálogo de permiso, y devolver `"behavior": "allow"` lo responde en tu nombre.

390 

391El matcher limita el hook a `ExitPlanMode` solamente, para que ningún otro aviso se vea afectado. Añade esto a `~/.claude/settings.json`:

392 

393```json theme={null}

394{

395 "hooks": {

396 "PermissionRequest": [

397 {

398 "matcher": "ExitPlanMode",

399 "hooks": [

400 {

401 "type": "command",

402 "command": "echo '{\"hookSpecificOutput\": {\"hookEventName\": \"PermissionRequest\", \"decision\": {\"behavior\": \"allow\"}}}'"

403 }

404 ]

405 }

406 ]

407 }

408}

409```

410 

411Cuando el hook aprueba, Claude Code sale del modo plan y restaura cualquier modo de permiso que estuviera activo antes de entrar en modo plan. La transcripción muestra "Allowed by PermissionRequest hook" donde habría aparecido el diálogo. La ruta del hook siempre mantiene la conversación actual: no puede limpiar contexto e iniciar una sesión de implementación fresca de la manera que el diálogo puede.

412 

413Para 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.

414 

415<Note>

416 `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`.

417</Note>

418 

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

420 

421```json theme={null}

422{

423 "hookSpecificOutput": {

424 "hookEventName": "PermissionRequest",

425 "decision": {

426 "behavior": "allow",

427 "updatedPermissions": [

428 { "type": "setMode", "mode": "acceptEdits", "destination": "session" }

429 ]

430 }

431 }

432}

433```

434 

435Manté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.

436 

437## Cómo funcionan los hooks

438 

439Los eventos de hook se activan en puntos específicos del ciclo de vida de Claude Code. Cuando se activa un evento, todos los hooks coincidentes se ejecutan en paralelo, y los comandos de hook idénticos se deduplicarán automáticamente. La tabla a continuación muestra cada evento y cuándo se activa:

440 

441| Event | When it fires |

442| :-------------------- | :----------------------------------------------------------------------------------------------------------------------------------------------------- |

443| `SessionStart` | When a session begins or resumes |

444| `Setup` | When you start Claude Code with `--init-only`, or with `--init` or `--maintenance` in `-p` mode. For one-time preparation in CI or scripts |

445| `UserPromptSubmit` | When you submit a prompt, before Claude processes it |

446| `UserPromptExpansion` | When a user-typed command expands into a prompt, before it reaches Claude. Can block the expansion |

447| `PreToolUse` | Before a tool call executes. Can block it |

448| `PermissionRequest` | When a permission dialog appears |

449| `PermissionDenied` | When a tool call is denied by the auto mode classifier. Return `{retry: true}` to tell the model it may retry the denied tool call |

450| `PostToolUse` | After a tool call succeeds |

451| `PostToolUseFailure` | After a tool call fails |

452| `PostToolBatch` | After a full batch of parallel tool calls resolves, before the next model call |

453| `Notification` | When Claude Code sends a notification |

454| `SubagentStart` | When a subagent is spawned |

455| `SubagentStop` | When a subagent finishes |

456| `TaskCreated` | When a task is being created via `TaskCreate` |

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

458| `Stop` | When Claude finishes responding |

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

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

461| `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 |

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

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

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

465| `WorktreeCreate` | When a worktree is being created via `--worktree` or `isolation: "worktree"`. Replaces default git behavior |

466| `WorktreeRemove` | When a worktree is being removed, either at session exit or when a subagent finishes |

467| `PreCompact` | Before context compaction |

468| `PostCompact` | After context compaction completes |

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

470| `ElicitationResult` | After a user responds to an MCP elicitation, before the response is sent back to the server |

471| `SessionEnd` | When a session terminates |

472 

473Cuando múltiples hooks coinciden, cada uno devuelve su propio resultado. Para decisiones, Claude Code elige la respuesta más restrictiva. Un hook `PreToolUse` que devuelve `deny` cancela la llamada a herramienta sin importar lo que los otros devuelvan. Un hook que devuelve `ask` fuerza el aviso de permiso incluso si el resto devuelven `allow`. El texto de `additionalContext` se mantiene de cada hook y se pasa a Claude junto.

474 

475Cada 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:

476 

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

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

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

480* `"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).

481 

482### Lee entrada y devuelve salida

483 

484Los hooks se comunican con Claude Code a través de stdin, stdout, stderr y códigos de salida. Cuando se activa un evento, Claude Code pasa datos específicos del evento como JSON a stdin de tu script. Tu script lee esos datos, hace su trabajo, y le dice a Claude Code qué hacer a continuación a través del código de salida.

485 

486#### Entrada del hook

487 

488Cada evento incluye campos comunes como `session_id` y `cwd`, pero cada tipo de evento añade datos diferentes. Por ejemplo, cuando Claude ejecuta un comando Bash, un hook `PreToolUse` recibe algo como esto en stdin:

489 

490```json theme={null}

491{

492 "session_id": "abc123", // ID único para esta sesión

493 "cwd": "/Users/sarah/myproject", // directorio de trabajo cuando se activó el evento

494 "hook_event_name": "PreToolUse", // qué evento activó este hook

495 "tool_name": "Bash", // la herramienta que Claude está a punto de usar

496 "tool_input": { // los argumentos que Claude pasó a la herramienta

497 "command": "npm test" // para Bash, este es el comando de shell

498 }

499}

500```

501 

502Tu 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.

503 

504#### Salida del hook

505 

506Tu script le dice a Claude Code qué hacer a continuación escribiendo en stdout o stderr y saliendo con un código específico. Por ejemplo, un hook `PreToolUse` que quiere bloquear un comando:

507 

508```bash theme={null}

509#!/bin/bash

510INPUT=$(cat)

511COMMAND=$(echo "$INPUT" | jq -r '.tool_input.command')

512 

513if echo "$COMMAND" | grep -q "drop table"; then

514 echo "Blocked: dropping tables is not allowed" >&2 // stderr se convierte en retroalimentación de Claude

515 exit 2 // exit 2 = bloquea la acción

516fi

517 

518exit 0 // exit 0 = permite que proceda

519```

520 

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

522 

523* **Exit 0**: la acción procede. Para hooks `UserPromptSubmit`, `UserPromptExpansion`, y `SessionStart`, cualquier cosa que escribas en stdout se añade al contexto de Claude.

524* **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.

525* **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).

526 

527#### Salida JSON estructurada

528 

529Los códigos de salida te dan dos opciones: permitir o bloquear. Para más control, sal con 0 e imprime un objeto JSON a stdout en su lugar.

530 

531<Note>

532 Usa exit 2 para bloquear con un mensaje de stderr, o exit 0 con JSON para control estructurado. No los mezcles: Claude Code ignora JSON cuando sales con 2.

533</Note>

534 

535Por ejemplo, un hook `PreToolUse` puede negar una llamada a herramienta y decirle a Claude por qué, o escalarla al usuario para aprobación:

536 

537```json theme={null}

538{

539 "hookSpecificOutput": {

540 "hookEventName": "PreToolUse",

541 "permissionDecision": "deny",

542 "permissionDecisionReason": "Use rg instead of grep for better performance"

543 }

544}

545```

546 

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

548 

549* `"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

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

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

552 

553Un 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.

554 

555Devolver `"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. 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.

556 

557Otros 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.

558 

559Para hooks `UserPromptSubmit`, usa `additionalContext` en su lugar para inyectar texto en el contexto de Claude. Los hooks basados en prompts (`type: "prompt"`) manejan la salida de manera diferente: consulta [Prompt-based hooks](#prompt-based-hooks).

560 

561### Filtra hooks con matchers

562 

563Sin un matcher, un hook se activa en cada ocurrencia de su evento. Los matchers te permiten estrecharlo. Por ejemplo, si quieres ejecutar un formateador solo después de ediciones de archivos (no después de cada llamada a herramienta), añade un matcher a tu hook `PostToolUse`:

564 

565```json theme={null}

566{

567 "hooks": {

568 "PostToolUse": [

569 {

570 "matcher": "Edit|Write",

571 "hooks": [

572 { "type": "command", "command": "prettier --write ..." }

573 ]

574 }

575 ]

576 }

577}

578```

579 

580El matcher `"Edit|Write"` se activa solo cuando Claude usa la herramienta `Edit` o `Write`, no cuando usa `Bash`, `Read`, u otra herramienta. Consulta [Matcher patterns](/es/hooks#matcher-patterns) para cómo se evalúan los nombres simples y las expresiones regulares.

581 

582<Note>

583 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`.

584</Note>

585 

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

587 

588| Evento | En qué filtra el matcher | Valores de matcher de ejemplo |

589| :-------------------------------------------------------------------------------------------------------------------------------------------- | :-------------------------------------------------------------------------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------- |

590| `PreToolUse`, `PostToolUse`, `PostToolUseFailure`, `PermissionRequest`, `PermissionDenied` | nombre de herramienta | `Bash`, `Edit\|Write`, `mcp__.*` |

591| `SessionStart` | cómo comenzó la sesión | `startup`, `resume`, `clear`, `compact` |

592| `Setup` | qué bandera CLI activó la configuración | `init`, `maintenance` |

593| `SessionEnd` | por qué terminó la sesión | `clear`, `resume`, `logout`, `prompt_input_exit`, `bypass_permissions_disabled`, `other` |

594| `Notification` | tipo de notificación | `permission_prompt`, `idle_prompt`, `auth_success`, `elicitation_dialog`, `elicitation_complete`, `elicitation_response` |

595| `SubagentStart` | tipo de agente | `general-purpose`, `Explore`, `Plan`, o nombres de agentes personalizados |

596| `PreCompact`, `PostCompact` | qué activó la compactación | `manual`, `auto` |

597| `SubagentStop` | tipo de agente | los mismos valores que `SubagentStart` |

598| `ConfigChange` | fuente de configuración | `user_settings`, `project_settings`, `local_settings`, `policy_settings`, `skills` |

599| `StopFailure` | tipo de error | `rate_limit`, `authentication_failed`, `oauth_org_not_allowed`, `billing_error`, `invalid_request`, `server_error`, `max_output_tokens`, `unknown` |

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

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

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

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

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

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

606 

607Algunos ejemplos más mostrando matchers en diferentes tipos de eventos:

608 

609<Tabs>

610 <Tab title="Registra cada comando Bash">

611 Coincide solo con llamadas a herramienta `Bash` y registra cada comando en un archivo. El evento `PostToolUse` se activa después de que el comando se completa, por lo que `tool_input.command` contiene lo que se ejecutó. El hook recibe los datos del evento como JSON en stdin, y `jq -r '.tool_input.command'` extrae solo la cadena de comando, que `>>` añade al archivo de registro:

612 

613 ```json theme={null}

614 {

615 "hooks": {

616 "PostToolUse": [

617 {

618 "matcher": "Bash",

619 "hooks": [

620 {

621 "type": "command",

622 "command": "jq -r '.tool_input.command' >> ~/.claude/command-log.txt"

623 }

624 ]

625 }

626 ]

627 }

628 }

629 ```

630 </Tab>

631 

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

633 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`. 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.

634 

635 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):

636 

637 ```json theme={null}

638 {

639 "hooks": {

640 "PreToolUse": [

641 {

642 "matcher": "mcp__github__.*",

643 "hooks": [

644 {

645 "type": "command",

646 "command": "echo \"GitHub tool called: $(jq -r '.tool_name')\" >&2"

647 }

648 ]

649 }

650 ]

651 }

652 }

653 ```

654 </Tab>

655 

656 <Tab title="Limpia al final de la sesión">

657 El evento `SessionEnd` soporta matchers en la razón por la que terminó la sesión. Este hook solo se activa en `clear` (cuando ejecutas `/clear`), no en salidas normales:

658 

659 ```json theme={null}

660 {

661 "hooks": {

662 "SessionEnd": [

663 {

664 "matcher": "clear",

665 "hooks": [

666 {

667 "type": "command",

668 "command": "rm -f /tmp/claude-scratch-*.txt"

669 }

670 ]

671 }

672 ]

673 }

674 }

675 ```

676 </Tab>

677</Tabs>

678 

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

680 

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

682 

683<Note>

684 El campo `if` requiere Claude Code v2.1.85 o posterior. Las versiones anteriores lo ignoran y ejecutan el hook en cada llamada coincidente.

685</Note>

686 

687El 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, o cuando un comando Bash es demasiado complejo para analizar. Esto va más allá de `matcher`, que filtra a nivel de grupo solo por nombre de herramienta.

688 

689Por ejemplo, para ejecutar un hook solo cuando Claude usa comandos `git` en lugar de todos los comandos Bash:

690 

691```json theme={null}

692{

693 "hooks": {

694 "PreToolUse": [

695 {

696 "matcher": "Bash",

697 "hooks": [

698 {

699 "type": "command",

700 "if": "Bash(git *)",

701 "command": "\"$CLAUDE_PROJECT_DIR\"/.claude/hooks/check-git-policy.sh"

702 }

703 ]

704 }

705 ]

706 }

707}

708```

709 

710El proceso del hook solo se genera cuando un subcomando del comando Bash coincide con `git *`, o cuando el comando es demasiado complejo para analizar en subcomandos. Para comandos compuestos como `npm test && git push`, Claude Code evalúa cada subcomando y activa el hook porque `git push` coincide. El 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.

711 

712`if` solo funciona en eventos de herramienta: `PreToolUse`, `PostToolUse`, `PostToolUseFailure`, `PermissionRequest`, y `PermissionDenied`. Añadirlo a cualquier otro evento evita que el hook se ejecute.

713 

714### Configura la ubicación del hook

715 

716Dónde añadas un hook determina su ámbito:

717 

718| Ubicación | Ámbito | Compartible |

719| :--------------------------------------------------------- | :------------------------------------- | :----------------------------------------- |

720| `~/.claude/settings.json` | Todos tus proyectos | No, local a tu máquina |

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

722| `.claude/settings.local.json` | Proyecto único | No, gitignored |

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

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

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

726 

727Ejecuta [`/hooks`](/es/hooks#the-hooks-menu) en Claude Code para examinar todos los hooks configurados agrupados por evento. Para desactivar todos los hooks a la vez, establece `"disableAllHooks": true` en tu archivo de configuración.

728 

729Si editas archivos de configuración directamente mientras Claude Code está ejecutándose, el observador de archivos normalmente recoge cambios de hooks automáticamente.

730 

731## Hooks basados en prompts

732 

733Para decisiones que requieren criterio en lugar de reglas deterministas, usa hooks `type: "prompt"`. En lugar de ejecutar un comando de shell, Claude Code envía tu prompt y los datos de entrada del hook a un modelo Claude (Haiku por defecto) para tomar la decisión. Puedes especificar un modelo diferente con el campo `model` si necesitas más capacidad.

734 

735El único trabajo del modelo es devolver una decisión sí/no como JSON:

736 

737* `"ok": true`: la acción procede

738* `"ok": false`: lo que sucede depende del evento:

739 * `Stop` y `SubagentStop`: la `reason` se alimenta de vuelta a Claude para que siga trabajando

740 * `PreToolUse`: la llamada de herramienta se deniega y la `reason` se devuelve a Claude como el error de la herramienta, para que pueda ajustarse y continuar

741 * `PostToolUse`, `PostToolBatch`, `UserPromptSubmit` y `UserPromptExpansion`: el turno termina y la `reason` aparece en el chat como una línea de advertencia

742 

743Este ejemplo usa un hook `Stop` para preguntarle al modelo si todas las tareas solicitadas están completas. Si el modelo devuelve `"ok": false`, Claude sigue trabajando y usa la `reason` como su siguiente instrucción:

744 

745```json theme={null}

746{

747 "hooks": {

748 "Stop": [

749 {

750 "hooks": [

751 {

752 "type": "prompt",

753 "prompt": "Check if all tasks are complete. If not, respond with {\"ok\": false, \"reason\": \"what remains to be done\"}."

754 }

755 ]

756 }

757 ]

758 }

759}

760```

761 

762Para opciones de configuración completas, consulta [Prompt-based hooks](/es/hooks#prompt-based-hooks) en la referencia.

763 

764## Hooks basados en agentes

765 

766<Warning>

767 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).

768</Warning>

769 

770Cuando 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.

771 

772Los hooks de agente usan el mismo formato de respuesta `"ok"` / `"reason"` que los hooks de prompt, pero con un tiempo de espera predeterminado más largo de 60 segundos y hasta 50 turnos de uso de herramientas.

773 

774Este ejemplo verifica que las pruebas pasen antes de permitir que Claude se detenga:

775 

776```json theme={null}

777{

778 "hooks": {

779 "Stop": [

780 {

781 "hooks": [

782 {

783 "type": "agent",

784 "prompt": "Verify that all unit tests pass. Run the test suite and check the results. $ARGUMENTS",

785 "timeout": 120

786 }

787 ]

788 }

789 ]

790 }

791}

792```

793 

794Usa 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.

795 

796Para opciones de configuración completas, consulta [Agent-based hooks](/es/hooks#agent-based-hooks) en la referencia.

797 

798## HTTP hooks

799 

800Usa hooks `type: "http"` para POST de datos de evento a un punto final HTTP en lugar de ejecutar un comando de shell. El punto final recibe el mismo JSON que un hook de comando recibiría en stdin, y devuelve resultados a través del cuerpo de respuesta HTTP usando el mismo formato JSON.

801 

802Los HTTP hooks son útiles cuando quieres que un servidor web, función en la nube o servicio externo maneje la lógica del hook: por ejemplo, un servicio de auditoría compartido que registra eventos de uso de herramientas en un equipo.

803 

804Este ejemplo publica cada uso de herramienta a un servicio de registro local:

805 

806```json theme={null}

807{

808 "hooks": {

809 "PostToolUse": [

810 {

811 "hooks": [

812 {

813 "type": "http",

814 "url": "http://localhost:8080/hooks/tool-use",

815 "headers": {

816 "Authorization": "Bearer $MY_TOKEN"

817 },

818 "allowedEnvVars": ["MY_TOKEN"]

819 }

820 ]

821 }

822 ]

823 }

824}

825```

826 

827El 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.

828 

829Los 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.

830 

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

832 

833## Limitaciones y solución de problemas

834 

835### Limitaciones

836 

837* Los hooks de comando se comunican solo a través de stdout, stderr y códigos de salida. No pueden activar comandos `/` o llamadas a herramientas. El texto devuelto a través de `additionalContext` se inyecta como un recordatorio del sistema que Claude lee como texto plano. Los HTTP hooks se comunican a través del cuerpo de respuesta en su lugar.

838* El tiempo de espera del hook es 10 minutos por defecto, configurable por hook con el campo `timeout` (en segundos).

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

840* Los hooks `PermissionRequest` no se activan en [modo no interactivo](/es/headless) (`-p`). Usa hooks `PreToolUse` para decisiones de permiso automatizadas.

841* 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.

842* 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. Evita tener más de un hook modificando la entrada de la misma herramienta.

843 

844### Hooks y modos de permiso

845 

846Los 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 te permite aplicar política que los usuarios no pueden eludir cambiando su modo de permiso.

847 

848Lo inverso no es cierto: un hook que devuelve `"allow"` no elude reglas de negación de configuración. Los hooks pueden endurecer restricciones pero no relajarlas más allá de lo que las reglas de permiso permiten.

849 

850### Hook no se activa

851 

852El hook está configurado pero nunca se ejecuta.

853 

854* Ejecuta `/hooks` y confirma que el hook aparece bajo el evento correcto

855* Verifica que el patrón del matcher coincida exactamente con el nombre de la herramienta (los matchers distinguen mayúsculas de minúsculas)

856* Verifica que estés activando el tipo de evento correcto (por ejemplo, `PreToolUse` se activa antes de la ejecución de la herramienta, `PostToolUse` se activa después)

857* Si usas hooks `PermissionRequest` en modo no interactivo (`-p`), cambia a `PreToolUse` en su lugar

858 

859### Error de hook en la salida

860 

861Ves un mensaje como "PreToolUse hook error: ..." en la transcripción.

862 

863* Tu script salió con un código no cero inesperadamente. Pruébalo manualmente canalizando JSON de muestra:

864 ```bash theme={null}

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

866 echo $? # Verifica el código de salida

867 ```

868* Si ves "command not found", usa rutas absolutas o `$CLAUDE_PROJECT_DIR` para referenciar scripts

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

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

871 

872### `/hooks` no muestra hooks configurados

873 

874Editaste un archivo de configuración pero los hooks no aparecen en el menú.

875 

876* Las ediciones de archivos normalmente se recogen automáticamente. Si no han aparecido después de unos segundos, el observador de archivos puede haber perdido el cambio: reinicia tu sesión para forzar una recarga.

877* Verifica que tu JSON sea válido (las comas finales y comentarios no están permitidos)

878* Confirma que el archivo de configuración está en la ubicación correcta: `.claude/settings.json` para hooks de proyecto, `~/.claude/settings.json` para hooks globales

879 

880### El hook Stop se ejecuta para siempre

881 

882Claude sigue trabajando en un bucle infinito en lugar de detenerse.

883 

884Tu script de hook Stop necesita verificar si ya activó una continuación. Analiza el campo `stop_hook_active` de la entrada JSON y sal temprano si es `true`:

885 

886```bash theme={null}

887#!/bin/bash

888INPUT=$(cat)

889if [ "$(echo "$INPUT" | jq -r '.stop_hook_active')" = "true" ]; then

890 exit 0 # Permite que Claude se detenga

891fi

892# ... resto de tu lógica de hook

893```

894 

895### Falló la validación JSON

896 

897Claude Code muestra un error de análisis JSON aunque tu script de hook produzca JSON válido.

898 

899Cuando Claude Code ejecuta un hook, genera un shell que obtiene tu perfil (`~/.zshrc` o `~/.bashrc`). Si tu perfil contiene declaraciones `echo` incondicionales, esa salida se antepone a tu JSON del hook:

900 

901```text theme={null}

902Shell ready on arm64

903{"decision": "block", "reason": "Not allowed"}

904```

905 

906Claude Code intenta analizar esto como JSON y falla. Para arreglarlo, envuelve las declaraciones echo en tu perfil de shell para que solo se ejecuten en shells interactivos:

907 

908```bash theme={null}

909# En ~/.zshrc o ~/.bashrc

910if [[ $- == *i* ]]; then

911 echo "Shell ready"

912fi

913```

914 

915La variable `$-` contiene banderas de shell, e `i` significa interactivo. Los hooks se ejecutan en shells no interactivos, por lo que el echo se omite.

916 

917### Técnicas de depuración

918 

919La vista de transcripción, alternada con `Ctrl+O`, muestra un resumen de una línea para cada hook que se activó: el éxito es silencioso, los errores de bloqueo muestran stderr, y los errores sin bloqueo muestran un aviso `<hook name> hook error` seguido de la primera línea de stderr.

920 

921Para detalles de ejecución completos incluyendo qué hooks coincidieron, sus códigos de salida, stdout y stderr, lee el registro de depuración. Inicia Claude Code con `claude --debug-file /tmp/claude.log` para escribir en una ruta conocida, luego `tail -f /tmp/claude.log` en otra terminal. Si iniciaste sin esa bandera, ejecuta `/debug` a mitad de sesión para habilitar el registro y encontrar la ruta del registro.

922 

923## Aprende más

924 

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

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

927* [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

how-claude-code-works.md +263 −0 created

Details

1> ## Documentation Index

2> Fetch the complete documentation index at: https://code.claude.com/docs/llms.txt

3> Use this file to discover all available pages before exploring further.

4 

5# Cómo funciona Claude Code

6 

7> Comprenda el bucle agentico, las herramientas integradas y cómo Claude Code interactúa con su proyecto.

8 

9Claude Code es un asistente agentico que se ejecuta en su terminal. Aunque destaca en codificación, puede ayudarle con cualquier cosa que pueda hacer desde la línea de comandos: escribir documentación, ejecutar compilaciones, buscar archivos, investigar temas y más.

10 

11Esta guía cubre la arquitectura principal, las capacidades integradas y [consejos para trabajar efectivamente](#work-effectively-with-claude-code). Para tutoriales paso a paso, consulte [Flujos de trabajo comunes](/es/common-workflows). Para características de extensibilidad como skills, MCP y hooks, consulte [Extender Claude Code](/es/features-overview).

12 

13## El bucle agentico

14 

15Cuando le da una tarea a Claude, trabaja a través de tres fases: **recopilar contexto**, **tomar acción** y **verificar resultados**. Estas fases se mezclan entre sí. Claude utiliza herramientas en todo momento, ya sea buscando archivos para entender su código, editando para hacer cambios o ejecutando pruebas para verificar su trabajo.

16 

17<img src="https://mintcdn.com/claude-code/c5r9_6tjPMzFdDDT/images/agentic-loop.svg?fit=max&auto=format&n=c5r9_6tjPMzFdDDT&q=85&s=5f1827dec8539f38adee90ead3a85a38" alt="El bucle agentico: Su indicación lleva a Claude a recopilar contexto, tomar acción, verificar resultados y repetir hasta completar la tarea. Puede interrumpir en cualquier momento." width="720" height="280" data-path="images/agentic-loop.svg" />

18 

19El bucle se adapta a lo que pregunta. Una pregunta sobre su base de código podría necesitar solo recopilación de contexto. Una corrección de errores cicla a través de las tres fases repetidamente. Una refactorización podría implicar una verificación extensa. Claude decide qué requiere cada paso basándose en lo que aprendió del paso anterior, encadenando docenas de acciones juntas y corrigiendo el curso en el camino.

20 

21Usted también es parte de este bucle. Puede interrumpir en cualquier momento para dirigir a Claude en una dirección diferente, proporcionar contexto adicional o pedirle que intente un enfoque diferente. Claude trabaja de forma autónoma pero permanece receptivo a su entrada.

22 

23El bucle agentico está impulsado por dos componentes: [modelos](#models) que razonan y [herramientas](#tools) que actúan. Claude Code sirve como el **arnés agentico** alrededor de Claude: proporciona las herramientas, la gestión del contexto y el entorno de ejecución que convierten un modelo de lenguaje en un agente de codificación capaz.

24 

25### Modelos

26 

27Claude Code utiliza modelos Claude para entender su código y razonar sobre tareas. Claude puede leer código en cualquier idioma, entender cómo se conectan los componentes y determinar qué necesita cambiar para lograr su objetivo. Para tareas complejas, divide el trabajo en pasos, los ejecuta y se ajusta basándose en lo que aprende.

28 

29[Múltiples modelos](/es/model-config) están disponibles con diferentes compensaciones. Sonnet maneja bien la mayoría de tareas de codificación. Opus proporciona un razonamiento más fuerte para decisiones arquitectónicas complejas. Cambie con `/model` durante una sesión o comience con `claude --model <name>`.

30 

31Cuando esta guía dice "Claude elige" o "Claude decide", es el modelo el que está haciendo el razonamiento.

32 

33### Herramientas

34 

35Las herramientas son lo que hace que Claude Code sea agentico. Sin herramientas, Claude solo puede responder con texto. Con herramientas, Claude puede actuar: leer su código, editar archivos, ejecutar comandos, buscar en la web e interactuar con servicios externos. Cada uso de herramienta devuelve información que se retroalimenta en el bucle, informando la siguiente decisión de Claude.

36 

37Las herramientas integradas generalmente se dividen en cinco categorías, cada una representando un tipo diferente de agencia.

38 

39| Categoría | Lo que Claude puede hacer |

40| -------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

41| **Operaciones de archivo** | Leer archivos, editar código, crear nuevos archivos, renombrar y reorganizar |

42| **Búsqueda** | Encontrar archivos por patrón, buscar contenido con regex, explorar bases de código |

43| **Ejecución** | Ejecutar comandos de shell, iniciar servidores, ejecutar pruebas, usar git |

44| **Web** | Buscar en la web, obtener documentación, buscar mensajes de error |

45| **Inteligencia de código** | Ver errores de tipo y advertencias después de ediciones, saltar a definiciones, encontrar referencias (requiere [plugins de inteligencia de código](/es/discover-plugins#code-intelligence)) |

46 

47Estas son las capacidades principales. Claude también tiene herramientas para generar subagents, hacerle preguntas y otras tareas de orquestación. Consulte [Herramientas disponibles para Claude](/es/tools-reference) para la lista completa.

48 

49Claude elige qué herramientas usar basándose en su indicación y lo que aprende en el camino. Cuando dice "arreglar las pruebas fallidas", Claude podría:

50 

511. Ejecutar el conjunto de pruebas para ver qué está fallando

522. Leer la salida de error

533. Buscar los archivos de código fuente relevantes

544. Leer esos archivos para entender el código

555. Editar los archivos para arreglar el problema

566. Ejecutar las pruebas nuevamente para verificar

57 

58Cada uso de herramienta le da a Claude nueva información que informa el siguiente paso. Este es el bucle agentico en acción.

59 

60**Extender las capacidades base:** Las herramientas integradas son la base. Puede extender lo que Claude sabe con [skills](/es/skills), conectarse a servicios externos con [MCP](/es/mcp), automatizar flujos de trabajo con [hooks](/es/hooks) y delegar tareas a [subagents](/es/sub-agents). Estas extensiones forman una capa encima del bucle agentico principal. Consulte [Extender Claude Code](/es/features-overview) para orientación sobre cómo elegir la extensión correcta para sus necesidades.

61 

62## A qué puede acceder Claude

63 

64Esta guía se enfoca en la terminal. Claude Code también se ejecuta en [VS Code](/es/vs-code), [IDEs de JetBrains](/es/jetbrains) y otros entornos.

65 

66Cuando ejecuta `claude` en un directorio, Claude Code obtiene acceso a:

67 

68* **Su proyecto.** Archivos en su directorio y subdirectorios, más archivos en otros lugares con su permiso.

69* **Su terminal.** Cualquier comando que pueda ejecutar: herramientas de compilación, git, gestores de paquetes, utilidades del sistema, scripts. Si puede hacerlo desde la línea de comandos, Claude también puede.

70* **Su estado de git.** Rama actual, cambios sin confirmar e historial de confirmaciones recientes.

71* **Su [CLAUDE.md](/es/memory).** Un archivo markdown donde almacena instrucciones específicas del proyecto, convenciones y contexto que Claude debe conocer en cada sesión.

72* **[Auto memory](/es/memory#auto-memory).** Aprendizajes que Claude guarda automáticamente mientras trabaja, como patrones de proyecto y sus preferencias. Las primeras 200 líneas o 25KB de MEMORY.md, lo que sea menor, se cargan al inicio de cada sesión.

73* **Extensiones que configure.** [Servidores MCP](/es/mcp) para servicios externos, [skills](/es/skills) para flujos de trabajo, [subagents](/es/sub-agents) para trabajo delegado y [Claude en Chrome](/es/chrome) para interacción del navegador.

74 

75Debido a que Claude ve todo su proyecto, puede trabajar en él. Cuando le pide a Claude que "arregle el error de autenticación", busca archivos relevantes, lee múltiples archivos para entender el contexto, realiza ediciones coordinadas en ellos, ejecuta pruebas para verificar la corrección y confirma los cambios si lo solicita. Esto es diferente de los asistentes de código en línea que solo ven el archivo actual.

76 

77## Entornos e interfaces

78 

79El bucle agentico, las herramientas y las capacidades descritas anteriormente son iguales en todas partes donde use Claude Code. Lo que cambia es dónde se ejecuta el código y cómo interactúa con él.

80 

81### Entornos de ejecución

82 

83Claude Code se ejecuta en tres entornos, cada uno con diferentes compensaciones para dónde se ejecuta su código.

84 

85| Entorno | Dónde se ejecuta el código | Caso de uso |

86| ------------------ | ----------------------------------------- | ---------------------------------------------------------------------- |

87| **Local** | Su máquina | Predeterminado. Acceso completo a sus archivos, herramientas y entorno |

88| **Cloud** | VMs administradas por Anthropic | Delegar tareas, trabajar en repositorios que no tiene localmente |

89| **Control remoto** | Su máquina, controlada desde un navegador | Usar la interfaz web mientras mantiene todo local |

90 

91### Interfaces

92 

93Puede acceder a Claude Code a través de la terminal, la [aplicación de escritorio](/es/desktop), [extensiones de IDE](/es/vs-code), [claude.ai/code](https://claude.ai/code), [Control remoto](/es/remote-control), [Slack](/es/slack) y [canalizaciones CI/CD](/es/github-actions). La interfaz determina cómo ve e interactúa con Claude, pero el bucle agentico subyacente es idéntico. Consulte [Usar Claude Code en todas partes](/es/overview#use-claude-code-everywhere) para la lista completa.

94 

95## Trabajar con sesiones

96 

97Claude Code guarda su conversación localmente mientras trabaja. Cada mensaje, uso de herramienta y resultado se almacena, lo que permite [rebobinar](#undo-changes-with-checkpoints), [reanudar y bifurcar](#resume-or-fork-sessions) sesiones. Antes de que Claude realice cambios de código, también toma una instantánea de los archivos afectados para que pueda revertir si es necesario.

98 

99**Las sesiones son independientes.** Cada nueva sesión comienza con una ventana de contexto nueva, sin el historial de conversación de sesiones anteriores. Claude puede persistir aprendizajes entre sesiones usando [auto memory](/es/memory#auto-memory), y puede agregar sus propias instrucciones persistentes en [CLAUDE.md](/es/memory).

100 

101### Trabajar entre ramas

102 

103Cada conversación de Claude Code es una sesión vinculada a su directorio actual. Cuando reanuda, solo ve sesiones de ese directorio.

104 

105Claude ve los archivos de su rama actual. Cuando cambia de rama, Claude ve los archivos de la nueva rama, pero el historial de conversación permanece igual. Claude recuerda lo que discutió incluso después de cambiar de rama.

106 

107Dado que las sesiones están vinculadas a directorios, puede ejecutar sesiones paralelas de Claude Code usando [git worktrees](/es/common-workflows#run-parallel-claude-code-sessions-with-git-worktrees), que crean directorios separados para ramas individuales.

108 

109### Reanudar o bifurcar sesiones

110 

111Cuando reanuda una sesión con `claude --continue` o `claude --resume`, continúa donde lo dejó usando el mismo ID de sesión. Los nuevos mensajes se agregan a la conversación existente. Su historial de conversación completo se restaura, pero los permisos con alcance de sesión no. Deberá volver a aprobarlos.

112 

113<img src="https://mintcdn.com/claude-code/c5r9_6tjPMzFdDDT/images/session-continuity.svg?fit=max&auto=format&n=c5r9_6tjPMzFdDDT&q=85&s=fa41d12bfb57579cabfeece907151d30" alt="Continuidad de sesión: reanudar continúa la misma sesión, bifurcar crea una nueva rama con un nuevo ID." width="560" height="280" data-path="images/session-continuity.svg" />

114 

115Para ramificar e intentar un enfoque diferente sin afectar la sesión original, use la bandera `--fork-session`:

116 

117```bash theme={null}

118claude --continue --fork-session

119```

120 

121Esto crea un nuevo ID de sesión mientras preserva el historial de conversación hasta ese punto. La sesión original permanece sin cambios. Como reanudar, las sesiones bifurcadas no heredan permisos con alcance de sesión.

122 

123**Misma sesión en múltiples terminales**: Si reanuda la misma sesión en múltiples terminales, ambos terminales escriben en el mismo archivo de sesión. Los mensajes de ambos se intercalan, como dos personas escribiendo en el mismo cuaderno. Nada se corrompe, pero la conversación se vuelve confusa. Cada terminal solo ve sus propios mensajes durante la sesión, pero si reanuda esa sesión más tarde, verá todo intercalado. Para trabajo paralelo desde el mismo punto de partida, use `--fork-session` para dar a cada terminal su propia sesión limpia.

124 

125### La ventana de contexto

126 

127La ventana de contexto de Claude contiene el historial de su conversación, contenidos de archivos, salidas de comandos, [CLAUDE.md](/es/memory), [auto memory](/es/memory#auto-memory), skills cargadas e instrucciones del sistema. A medida que trabaja, el contexto se llena. Claude se compacta automáticamente, pero las instrucciones del principio de la conversación pueden perderse. Coloque reglas persistentes en CLAUDE.md y ejecute `/context` para ver qué está usando espacio.

128 

129Para un recorrido interactivo de qué se carga y cuándo, consulte [Explorar la ventana de contexto](/es/context-window).

130 

131#### Cuando el contexto se llena

132 

133Claude Code gestiona el contexto automáticamente a medida que se acerca al límite. Primero borra salidas de herramientas más antiguas, luego resume la conversación si es necesario. Sus solicitudes y fragmentos de código clave se preservan; las instrucciones detalladas del principio de la conversación pueden perderse. Coloque reglas persistentes en CLAUDE.md en lugar de depender del historial de conversación.

134 

135Para controlar qué se preserva durante la compactación, agregue una sección "Compact Instructions" a CLAUDE.md o ejecute `/compact` con un enfoque (como `/compact focus on the API changes`).

136 

137Ejecute `/context` para ver qué está usando espacio. Las definiciones de herramientas MCP se difieren por defecto y se cargan bajo demanda a través de [búsqueda de herramientas](/es/mcp#scale-with-mcp-tool-search), por lo que solo los nombres de herramientas consumen contexto hasta que Claude use una herramienta específica. Ejecute `/mcp` para verificar costos por servidor.

138 

139#### Gestionar contexto con skills y subagents

140 

141Más allá de la compactación, puede usar otras características para controlar qué se carga en el contexto.

142 

143[Skills](/es/skills) se cargan bajo demanda. Claude ve descripciones de skills al inicio de la sesión, pero el contenido completo solo se carga cuando se usa una skill. Para skills que invoca manualmente, establezca `disable-model-invocation: true` para mantener descripciones fuera del contexto hasta que las necesite.

144 

145[Subagents](/es/sub-agents) obtienen su propio contexto nuevo, completamente separado de su conversación principal. Su trabajo no infla su contexto. Cuando terminan, devuelven un resumen. Este aislamiento es por qué los subagents ayudan con sesiones largas.

146 

147Consulte [costos de contexto](/es/features-overview#understand-context-costs) para lo que cuesta cada característica y [reducir el uso de tokens](/es/costs#reduce-token-usage) para consejos sobre cómo gestionar el contexto.

148 

149## Manténgase seguro con checkpoints y permisos

150 

151Claude tiene dos mecanismos de seguridad: los checkpoints le permiten deshacer cambios de archivo y los permisos controlan qué puede hacer Claude sin preguntar.

152 

153### Deshacer cambios con checkpoints

154 

155**Cada edición de archivo es reversible.** Antes de que Claude edite cualquier archivo, toma una instantánea del contenido actual. Si algo sale mal, presione `Esc` dos veces para rebobinar a un estado anterior, o pida a Claude que deshaga.

156 

157Los checkpoints son locales a su sesión, separados de git. Solo cubren cambios de archivo. Las acciones que afectan sistemas remotos (bases de datos, APIs, implementaciones) no pueden ser checkpointed, por lo que Claude pregunta antes de ejecutar comandos con efectos secundarios externos.

158 

159### Controle qué puede hacer Claude

160 

161Presione `Shift+Tab` para ciclar a través de modos de permiso:

162 

163* **Predeterminado**: Claude pregunta antes de ediciones de archivo y comandos de shell

164* **Auto-aceptar ediciones**: Claude edita archivos sin preguntar, aún pregunta por comandos

165* **Plan Mode**: Claude usa solo herramientas de solo lectura, creando un plan que puede aprobar antes de la ejecución

166* **Auto mode**: Claude evalúa todas las acciones con verificaciones de seguridad en segundo plano. Actualmente una vista previa de investigación

167 

168También puede permitir comandos específicos en `.claude/settings.json` para que Claude no pregunte cada vez. Esto es útil para comandos confiables como `npm test` o `git status`. La configuración puede tener alcance desde políticas de toda la organización hasta preferencias personales. Consulte [Permisos](/es/permissions) para detalles.

169 

170***

171 

172## Trabajar efectivamente con Claude Code

173 

174Estos consejos le ayudan a obtener mejores resultados de Claude Code.

175 

176### Pida ayuda a Claude Code

177 

178Claude Code puede enseñarle cómo usarlo. Haga preguntas como "¿cómo configuro hooks?" o "¿cuál es la mejor manera de estructurar mi CLAUDE.md?" y Claude explicará.

179 

180Los comandos integrados también lo guían a través de la configuración:

181 

182* `/init` lo guía a través de la creación de un CLAUDE.md para su proyecto

183* `/agents` lo ayuda a configurar subagents personalizados

184* `/doctor` diagnostica problemas comunes con su instalación

185 

186### Es una conversación

187 

188Claude Code es conversacional. No necesita indicaciones perfectas. Comience con lo que desea, luego refine:

189 

190```text theme={null}

191Arreglar el error de inicio de sesión

192```

193 

194\[Claude investiga, intenta algo]

195 

196```text theme={null}

197Eso no es del todo correcto. El problema está en el manejo de sesiones.

198```

199 

200\[Claude ajusta el enfoque]

201 

202Cuando el primer intento no es correcto, no comienza de nuevo. Itera.

203 

204#### Interrumpir y dirigir

205 

206Puede interrumpir a Claude en cualquier momento. Si va por el camino equivocado, simplemente escriba su corrección y presione Enter. Claude dejará de hacer lo que está haciendo y ajustará su enfoque basándose en su entrada. No tiene que esperar a que termine o comenzar de nuevo.

207 

208### Sea específico desde el principio

209 

210Cuanto más precisa sea su indicación inicial, menos correcciones necesitará. Haga referencia a archivos específicos, mencione restricciones y señale patrones de ejemplo.

211 

212```text theme={null}

213El flujo de pago está roto para usuarios con tarjetas vencidas.

214Verifique src/payments/ para el problema, especialmente la actualización de tokens.

215Escriba una prueba fallida primero, luego arréglela.

216```

217 

218Las indicaciones vagas funcionan, pero pasará más tiempo dirigiendo. Las indicaciones específicas como la anterior a menudo tienen éxito en el primer intento.

219 

220### Dé a Claude algo contra lo que verificar

221 

222Claude funciona mejor cuando puede verificar su propio trabajo. Incluya casos de prueba, pegue capturas de pantalla de la interfaz de usuario esperada o defina la salida que desea.

223 

224```text theme={null}

225Implementar validateEmail. Casos de prueba: 'user@example.com' → true,

226'invalid' → false, 'user@.com' → false. Ejecute las pruebas después.

227```

228 

229Para trabajo visual, pegue una captura de pantalla del diseño y pida a Claude que compare su implementación con ella.

230 

231### Explorar antes de implementar

232 

233Para problemas complejos, separe la investigación de la codificación. Use plan mode (`Shift+Tab` dos veces) para analizar la base de código primero:

234 

235```text theme={null}

236Lea src/auth/ y entienda cómo manejamos sesiones.

237Luego cree un plan para agregar soporte OAuth.

238```

239 

240Revise el plan, refínelo a través de la conversación, luego deje que Claude implemente. Este enfoque de dos fases produce mejores resultados que saltar directamente al código.

241 

242### Delegue, no dicte

243 

244Piense en delegar a un colega capaz. Dé contexto y dirección, luego confíe en que Claude descubra los detalles:

245 

246```text theme={null}

247El flujo de pago está roto para usuarios con tarjetas vencidas.

248El código relevante está en src/payments/. ¿Puede investigar y arreglarlo?

249```

250 

251No necesita especificar qué archivos leer o qué comandos ejecutar. Claude lo descubre.

252 

253## Qué sigue

254 

255<CardGroup cols={2}>

256 <Card title="Extender con características" icon="puzzle-piece" href="/es/features-overview">

257 Agregue Skills, conexiones MCP y comandos personalizados

258 </Card>

259 

260 <Card title="Flujos de trabajo comunes" icon="graduation-cap" href="/es/common-workflows">

261 Guías paso a paso para tareas típicas

262 </Card>

263</CardGroup>

interactive-mode.md +362 −0 created

Details

1> ## Documentation Index

2> Fetch the complete documentation index at: https://code.claude.com/docs/llms.txt

3> Use this file to discover all available pages before exploring further.

4 

5# Modo interactivo

6 

7> Referencia completa de atajos de teclado, modos de entrada y características interactivas en sesiones de Claude Code.

8 

9## Atajos de teclado

10 

11<Note>

12 Los atajos de teclado pueden variar según la plataforma y la terminal. Presione `?` para ver los atajos disponibles en su entorno.

13 

14 **Usuarios de macOS**: Los atajos de la tecla Option/Alt (`Alt+B`, `Alt+F`, `Alt+Y`, `Alt+M`, `Alt+P`, `Alt+T`) requieren configurar Option como Meta en su terminal:

15 

16 * **iTerm2**: Configuración → Perfiles → Teclas → General → establecer la tecla Option izquierda/derecha en "Esc+"

17 * **Terminal de Apple**: Configuración → Perfiles → Teclado → marcar "Usar Option como tecla Meta"

18 * **VS Code**: establecer `"terminal.integrated.macOptionIsMeta": true` en la configuración de VS Code

19 

20 Consulte [Configuración de terminal](/es/terminal-config) para obtener más detalles.

21</Note>

22 

23### Controles generales

24 

25| Atajo | Descripción | Contexto |

26| :---------------------------------------------- | :----------------------------------------------------------------------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |

27| `Ctrl+C` | Cancelar entrada o generación actual | Interrupción estándar |

28| `Ctrl+X Ctrl+K` | Terminar todos los agentes de fondo. Presione dos veces en 3 segundos para confirmar | Control de agentes de fondo |

29| `Ctrl+D` | Salir de la sesión de Claude Code | Señal EOF |

30| `Ctrl+G` o `Ctrl+X Ctrl+E` | Abrir en el editor de texto predeterminado | Edite su indicación o respuesta personalizada en su editor de texto predeterminado. `Ctrl+X Ctrl+E` es el enlace nativo de readline. Active Mostrar última respuesta en editor externo en `/config` para anteponer la respuesta anterior de Claude como contexto comentado con `#` encima de su indicación; el bloque de comentarios se elimina cuando guarda |

31| `Ctrl+L` | Redibujar pantalla | Fuerza un redibujado completo de la terminal. La entrada y el historial de conversación se mantienen. Use esto para recuperarse si la pantalla se vuelve distorsionada o parcialmente en blanco |

32| `Ctrl+O` | Alternar visor de transcripción | Muestra el uso y la ejecución detallada de herramientas. También expande las llamadas de MCP, que se contraen a una sola línea como "Llamó a slack 3 veces" de forma predeterminada |

33| `Ctrl+R` | Búsqueda inversa del historial de comandos | Buscar a través de comandos anteriores de forma interactiva |

34| `Ctrl+V` o `Cmd+V` (iTerm2) o `Alt+V` (Windows) | Pegar imagen desde el portapapeles | Inserta un chip `[Image #N]` en el cursor para que pueda hacer referencia a él posicionalmente en su indicación |

35| `Ctrl+B` | Tareas en ejecución de fondo | Coloca comandos bash y agentes en segundo plano. Los usuarios de Tmux presionan dos veces |

36| `Ctrl+T` | Alternar lista de tareas | Mostrar u ocultar la [lista de tareas](#task-list) en el área de estado de la terminal |

37| `Flechas izquierda/derecha` | Ciclar a través de pestañas de diálogo | Navegar entre pestañas en diálogos de permisos y menús |

38| `Flechas arriba/abajo` o `Ctrl+P`/`Ctrl+N` | Mover cursor o navegar por el historial de comandos | En entrada multilínea, primero mueve el cursor dentro de la indicación. Una vez que el cursor ya está en el borde superior o inferior, presionar nuevamente navega por el historial de comandos |

39| `Esc` + `Esc` | Rebobinar o resumir | Restaurar código y/o conversación a un punto anterior, o resumir desde un mensaje seleccionado |

40| `Shift+Tab` o `Alt+M` (algunas configuraciones) | Ciclar modos de permiso | Ciclar a través de `default`, `acceptEdits`, `plan` y cualquier modo que haya habilitado, como `auto` o `bypassPermissions`. Consulte [modos de permiso](/es/permission-modes). |

41| `Option+P` (macOS) o `Alt+P` (Windows/Linux) | Cambiar modelo | Cambiar modelos sin borrar su indicación |

42| `Option+T` (macOS) o `Alt+T` (Windows/Linux) | Alternar pensamiento extendido | Habilitar o deshabilitar el modo de pensamiento extendido. En macOS, configure su terminal para enviar Option como Meta para que este atajo funcione |

43| `Option+O` (macOS) o `Alt+O` (Windows/Linux) | Alternar modo rápido | Habilitar o deshabilitar [modo rápido](/es/fast-mode) |

44 

45### Edición de texto

46 

47| Atajo | Descripción | Contexto |

48| :---------------------------- | :--------------------------------------------------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

49| `Ctrl+A` | Mover cursor al inicio de la línea actual | En entrada multilínea, mueve al inicio de la línea lógica actual |

50| `Ctrl+E` | Mover cursor al final de la línea actual | En entrada multilínea, mueve al final de la línea lógica actual |

51| `Ctrl+K` | Eliminar hasta el final de la línea | Almacena el texto eliminado para pegarlo |

52| `Ctrl+U` | Eliminar desde el cursor hasta el inicio de la línea | Almacena el texto eliminado para pegarlo. Repita para borrar en múltiples líneas en entrada multilínea. En macOS, los emuladores de terminal incluyendo iTerm2 y Terminal.app asignan `Cmd+Backspace` a este atajo |

53| `Ctrl+W` | Eliminar palabra anterior | Almacena el texto eliminado para pegarlo. En Windows, `Ctrl+Backspace` también elimina la palabra anterior |

54| `Ctrl+Y` | Pegar texto eliminado | Pegar texto eliminado con `Ctrl+K`, `Ctrl+U` o `Ctrl+W` |

55| `Alt+Y` (después de `Ctrl+Y`) | Ciclar historial de pegado | Después de pegar, ciclar a través del texto eliminado anteriormente. Requiere [Option como Meta](#keyboard-shortcuts) en macOS |

56| `Alt+B` | Mover cursor una palabra hacia atrás | Navegación de palabras. Requiere [Option como Meta](#keyboard-shortcuts) en macOS |

57| `Alt+F` | Mover cursor una palabra hacia adelante | Navegación de palabras. Requiere [Option como Meta](#keyboard-shortcuts) en macOS |

58 

59### Tema y visualización

60 

61| Atajo | Descripción | Contexto |

62| :------- | :---------------------------------------------------- | :----------------------------------------------------------------------------------------------------------------------------- |

63| `Ctrl+T` | Alternar resaltado de sintaxis para bloques de código | Solo funciona dentro del menú del selector `/theme`. Controla si el código en las respuestas de Claude usa colores de sintaxis |

64 

65### Entrada multilínea

66 

67| Método | Atajo | Contexto |

68| :------------------- | :----------------- | :--------------------------------------------------------------------------------------------------------- |

69| Escape rápido | `\` + `Enter` | Funciona en todas las terminales |

70| Tecla Option | `Option+Enter` | Después de habilitar [Option como Meta](/es/terminal-config#enable-option-key-shortcuts-on-macos) en macOS |

71| Shift+Enter | `Shift+Enter` | Nativo en iTerm2, WezTerm, Ghostty, Kitty, Warp, Terminal de Apple |

72| Secuencia de control | `Ctrl+J` | Funciona en cualquier terminal sin configuración |

73| Modo de pegado | Pegar directamente | Para bloques de código, registros |

74 

75<Tip>

76 Shift+Enter funciona sin configuración en iTerm2, WezTerm, Ghostty, Kitty, Warp y Terminal de Apple. Para VS Code, Cursor, Windsurf, Alacritty y Zed, ejecute `/terminal-setup` para instalar el enlace.

77</Tip>

78 

79### Comandos rápidos

80 

81| Atajo | Descripción | Notas |

82| :------------ | :------------------------- | :-------------------------------------------------------------------------- |

83| `/` al inicio | Comando o skill | Consulte [comandos](#commands) y [skills](/es/skills) |

84| `!` al inicio | Modo Bash | Ejecutar comandos directamente y agregar la salida de ejecución a la sesión |

85| `@` | Mención de ruta de archivo | Activar autocompletado de ruta de archivo |

86 

87### Visor de transcripción

88 

89Cuando el visor de transcripción está abierto (alternado con `Ctrl+O`), estos atajos están disponibles. `Ctrl+E` se puede reasignar a través de [`transcript:toggleShowAll`](/es/keybindings).

90 

91| Atajo | Descripción |

92| :------------------- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

93| `Ctrl+E` | Alternar mostrar todo el contenido |

94| `[` | Escribir la conversación completa en el scrollback nativo de su terminal para que `Cmd+F`, el modo de copia de tmux y otras herramientas nativas puedan buscarla. Requiere [renderizado a pantalla completa](/es/fullscreen#search-and-review-the-conversation) |

95| `v` | Escribir la conversación en un archivo temporal y abrirlo en `$VISUAL` o `$EDITOR`. Requiere [renderizado a pantalla completa](/es/fullscreen) |

96| `q`, `Ctrl+C`, `Esc` | Salir de la vista de transcripción. Los tres se pueden reasignar a través de [`transcript:exit`](/es/keybindings) |

97 

98### Entrada de voz

99 

100| Atajo | Descripción | Notas |

101| :------------------------------------- | :------------- | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

102| Mantener presionado o pulsar `Espacio` | Dictado de voz | Requiere que [dictado de voz](/es/voice-dictation) esté habilitado. Mantenga presionado para grabar, o ejecute `/voice tap` para alternar con pulsar. [Reasignable](/es/voice-dictation#rebind-the-dictation-key) |

103 

104## Comandos

105 

106Escriba `/` en Claude Code para ver todos los comandos disponibles, o escriba `/` seguido de cualquier letra para filtrar. El menú `/` muestra todo lo que puede invocar: comandos integrados, [skills](/es/skills) incluidos y creados por el usuario, y comandos contribuidos por [plugins](/es/plugins) y [servidores MCP](/es/mcp#use-mcp-prompts-as-commands). No todos los comandos integrados son visibles para todos los usuarios ya que algunos dependen de su plataforma o plan.

107 

108Consulte la [referencia de comandos](/es/commands) para obtener la lista completa de comandos incluidos en Claude Code.

109 

110## Modo editor Vim

111 

112Habilite la edición de estilo vim a través de `/config` → Editor mode.

113 

114### Cambio de modo

115 

116| Comando | Acción | Desde el modo |

117| :------ | :--------------------------------------------- | :------------- |

118| `Esc` | Entrar en modo NORMAL | INSERT, VISUAL |

119| `i` | Insertar antes del cursor | NORMAL |

120| `I` | Insertar al principio de la línea | NORMAL |

121| `a` | Insertar después del cursor | NORMAL |

122| `A` | Insertar al final de la línea | NORMAL |

123| `o` | Abrir línea debajo | NORMAL |

124| `O` | Abrir línea arriba | NORMAL |

125| `v` | Iniciar selección visual carácter por carácter | NORMAL |

126| `V` | Iniciar selección visual línea por línea | NORMAL |

127 

128### Navegación (modo NORMAL)

129 

130| Comando | Acción |

131| :-------------- | :---------------------------------------------------------- |

132| `h`/`j`/`k`/`l` | Mover izquierda/abajo/arriba/derecha |

133| `w` | Siguiente palabra |

134| `e` | Final de palabra |

135| `b` | Palabra anterior |

136| `0` | Principio de línea |

137| `$` | Final de línea |

138| `^` | Primer carácter no en blanco |

139| `gg` | Principio de entrada |

140| `G` | Final de entrada |

141| `f{char}` | Saltar a la siguiente ocurrencia del carácter |

142| `F{char}` | Saltar a la ocurrencia anterior del carácter |

143| `t{char}` | Saltar justo antes de la siguiente ocurrencia del carácter |

144| `T{char}` | Saltar justo después de la ocurrencia anterior del carácter |

145| `;` | Repetir último movimiento f/F/t/T |

146| `,` | Repetir último movimiento f/F/t/T en orden inverso |

147 

148<Note>

149 En modo normal de vim, si el cursor está al principio o al final de la entrada y no puede moverse más, `j`/`k` y las teclas de flecha navegan por el historial de comandos en su lugar.

150</Note>

151 

152### Edición (modo NORMAL)

153 

154| Comando | Acción |

155| :------------- | :------------------------------------------ |

156| `x` | Eliminar carácter |

157| `dd` | Eliminar línea |

158| `D` | Eliminar hasta el final de la línea |

159| `dw`/`de`/`db` | Eliminar palabra/hasta el final/hacia atrás |

160| `cc` | Cambiar línea |

161| `C` | Cambiar hasta el final de la línea |

162| `cw`/`ce`/`cb` | Cambiar palabra/hasta el final/hacia atrás |

163| `yy`/`Y` | Yanquear (copiar) línea |

164| `yw`/`ye`/`yb` | Yanquear palabra/hasta el final/hacia atrás |

165| `p` | Pegar después del cursor |

166| `P` | Pegar antes del cursor |

167| `>>` | Indentar línea |

168| `<<` | Desindentación de línea |

169| `J` | Unir líneas |

170| `u` | Deshacer |

171| `.` | Repetir último cambio |

172 

173### Objetos de texto (modo NORMAL)

174 

175Los objetos de texto funcionan con operadores como `d`, `c` e `y`:

176 

177| Comando | Acción |

178| :-------- | :------------------------------------------------------------- |

179| `iw`/`aw` | Palabra interior/alrededor |

180| `iW`/`aW` | PALABRA interior/alrededor (delimitada por espacios en blanco) |

181| `i"`/`a"` | Comillas dobles interior/alrededor |

182| `i'`/`a'` | Comillas simples interior/alrededor |

183| `i(`/`a(` | Paréntesis interior/alrededor |

184| `i[`/`a[` | Corchetes interior/alrededor |

185| `i{`/`a{` | Llaves interior/alrededor |

186 

187### Modo visual

188 

189Presione `v` para selección carácter por carácter o `V` para selección línea por línea. Los movimientos extienden la selección, y los operadores actúan sobre ella directamente.

190 

191| Comando | Acción |

192| :--------------- | :-------------------------------------------------------------- |

193| `d`/`x` | Eliminar selección |

194| `y` | Yanquear selección |

195| `c`/`s` | Cambiar selección |

196| `p` | Reemplazar selección con contenido del registro |

197| `r{char}` | Reemplazar cada carácter seleccionado con `{char}` |

198| `~`/`u`/`U` | Alternar, minúsculas o mayúsculas de selección |

199| `>`/`<` | Indentar o desindentación de líneas seleccionadas |

200| `J` | Unir líneas seleccionadas |

201| `o` | Intercambiar cursor y ancla |

202| `iw`/`aw`/`i"`/… | Seleccionar un objeto de texto |

203| `v`/`V` | Alternar entre carácter por carácter y línea por línea, o salir |

204 

205El modo visual por bloques con `Ctrl+V` no es compatible.

206 

207## Historial de comandos

208 

209Claude Code mantiene el historial de comandos para la sesión actual:

210 

211* El historial de entrada se almacena por directorio de trabajo

212* El historial de entrada se reinicia cuando ejecuta `/clear` para iniciar una nueva sesión. La conversación de la sesión anterior se conserva y se puede reanudar.

213* Use las flechas arriba/abajo para navegar (consulte los atajos de teclado anteriores)

214* **Nota**: la expansión del historial (`!`) está deshabilitada de forma predeterminada

215 

216### Búsqueda inversa con Ctrl+R

217 

218Presione `Ctrl+R` para buscar de forma interactiva a través de su historial de comandos:

219 

2201. **Iniciar búsqueda**: presione `Ctrl+R` para activar la búsqueda de historial inverso

2212. **Escribir consulta**: ingrese texto para buscar en comandos anteriores. El término de búsqueda se resalta en los resultados coincidentes

2223. **Navegar coincidencias**: presione `Ctrl+R` nuevamente para ciclar a través de coincidencias más antiguas

2234. **Cambiar alcance**: presione `Ctrl+S` para ciclar entre esta sesión, este proyecto y todos los proyectos

2245. **Aceptar coincidencia**:

225 * Presione `Tab` o `Esc` para aceptar la coincidencia actual y continuar editando

226 * Presione `Enter` para aceptar y ejecutar el comando inmediatamente

2276. **Cancelar búsqueda**:

228 * Presione `Ctrl+C` para cancelar y restaurar su entrada original

229 * Presione `Backspace` en búsqueda vacía para cancelar

230 

231La búsqueda muestra comandos coincidentes con el término de búsqueda resaltado, para que pueda encontrar y reutilizar entradas anteriores.

232 

233## Comandos bash en segundo plano

234 

235Claude Code admite la ejecución de comandos bash en segundo plano, lo que le permite continuar trabajando mientras se ejecutan procesos de larga duración.

236 

237### Cómo funciona el envío a segundo plano

238 

239Cuando Claude Code ejecuta un comando en segundo plano, ejecuta el comando de forma asincrónica e inmediatamente devuelve un ID de tarea de fondo. Claude Code puede responder a nuevas indicaciones mientras el comando continúa ejecutándose en segundo plano.

240 

241Para ejecutar comandos en segundo plano, puede:

242 

243* Indicar a Claude Code que ejecute un comando en segundo plano

244* Presione Ctrl+B para mover una invocación regular de herramienta Bash al segundo plano. (Los usuarios de Tmux deben presionar Ctrl+B dos veces debido a la tecla de prefijo de tmux).

245 

246**Características clave:**

247 

248* La salida se escribe en un archivo y Claude puede recuperarla usando la herramienta Read

249* Las tareas de fondo tienen ID únicos para el seguimiento y la recuperación de salida

250* Las tareas de fondo se limpian automáticamente cuando Claude Code sale

251* Las tareas de fondo se terminan automáticamente si la salida excede 5GB, con una nota en stderr explicando por qué

252 

253Para deshabilitar toda la funcionalidad de tareas de fondo, establezca la variable de entorno `CLAUDE_CODE_DISABLE_BACKGROUND_TASKS` en `1`. Consulte [Variables de entorno](/es/env-vars) para obtener más detalles.

254 

255**Comandos comúnmente enviados a segundo plano:**

256 

257* Herramientas de compilación (webpack, vite, make)

258* Gestores de paquetes (npm, yarn, pnpm)

259* Ejecutores de pruebas (jest, pytest)

260* Servidores de desarrollo

261* Procesos de larga duración (docker, terraform)

262 

263### Modo shell con prefijo `!`

264 

265Ejecute comandos shell directamente sin pasar por Claude prefijando su entrada con `!`:

266 

267```bash theme={null}

268! npm test

269! git status

270! ls -la

271```

272 

273Modo shell:

274 

275* Agrega el comando y su salida al contexto de la conversación

276* Muestra el progreso y la salida en tiempo real

277* Admite el mismo envío a segundo plano `Ctrl+B` para comandos de larga duración

278* No requiere que Claude interprete o apruebe el comando

279* Admite autocompletado basado en historial: escriba un comando parcial y presione **Tab** para completar desde comandos `!` anteriores en el proyecto actual

280* Salir con `Escape`, `Backspace` o `Ctrl+U` en un indicador vacío

281* Pegar texto que comienza con `!` en un indicador vacío entra automáticamente en modo shell, coincidiendo con el comportamiento de `!` escrito

282 

283Esto es útil para operaciones rápidas de shell mientras se mantiene el contexto de la conversación.

284 

285## Sugerencias de indicación

286 

287Cuando abre una sesión por primera vez, aparece un comando de ejemplo atenuado en la entrada de indicación para ayudarle a comenzar. Claude Code elige esto del historial de git de su proyecto, por lo que refleja archivos en los que ha estado trabajando recientemente.

288 

289Después de que Claude responde, las sugerencias continúan apareciendo según su historial de conversación, como un paso de seguimiento de una solicitud de varias partes o una continuación natural de su flujo de trabajo.

290 

291* Presione **Tab** o **Flecha derecha** para aceptar la sugerencia, o presione **Enter** para aceptar y enviar

292* Comience a escribir para descartarla

293 

294La sugerencia se ejecuta como una solicitud de fondo que reutiliza el caché de indicación de la conversación principal, por lo que el costo adicional es mínimo. Claude Code omite la generación de sugerencias cuando el caché está frío para evitar costos innecesarios.

295 

296Las sugerencias se omiten automáticamente después del primer turno de una conversación, en modo no interactivo y en modo plan.

297 

298Para deshabilitar completamente las sugerencias de indicación, establezca la variable de entorno o alterne la configuración en `/config`:

299 

300```bash theme={null}

301export CLAUDE_CODE_ENABLE_PROMPT_SUGGESTION=false

302```

303 

304## Preguntas laterales con /btw

305 

306Use `/btw` para hacer una pregunta rápida sobre su trabajo actual sin agregar al historial de conversación. Esto es útil cuando desea una respuesta rápida pero no desea saturar el contexto principal o desviar a Claude de una tarea de larga duración.

307 

308```

309/btw what was the name of that config file again?

310```

311 

312Las preguntas laterales tienen visibilidad completa de la conversación actual, por lo que puede preguntar sobre código que Claude ya ha leído, decisiones que tomó anteriormente, o cualquier otra cosa de la sesión. La pregunta y la respuesta son efímeras: aparecen en una superposición descartable y nunca entran en el historial de conversación.

313 

314* **Disponible mientras Claude está trabajando**: puede ejecutar `/btw` incluso mientras Claude está procesando una respuesta. La pregunta lateral se ejecuta de forma independiente y no interrumpe el turno principal.

315* **Sin acceso a herramientas**: las preguntas laterales responden solo desde lo que ya está en contexto. Claude no puede leer archivos, ejecutar comandos o buscar al responder una pregunta lateral.

316* **Respuesta única**: no hay turnos de seguimiento. Si necesita una conversación de ida y vuelta, use una indicación normal en su lugar.

317* **Bajo costo**: la pregunta lateral reutiliza el caché de indicación de la conversación principal, por lo que el costo adicional es mínimo.

318 

319Presione **Espacio**, **Enter** o **Escape** para descartar la respuesta y volver a la indicación.

320 

321`/btw` es lo opuesto a un [subagent](/es/sub-agents): ve su conversación completa pero no tiene herramientas, mientras que un subagent tiene herramientas completas pero comienza con un contexto vacío. Use `/btw` para preguntar sobre lo que Claude ya sabe de esta sesión; use un subagent para descubrir algo nuevo.

322 

323## Lista de tareas

324 

325Cuando trabaja en trabajo complejo de varios pasos, Claude crea una lista de tareas para rastrear el progreso. Las tareas aparecen en el área de estado de su terminal con indicadores que muestran qué está pendiente, en progreso o completado.

326 

327* Presione `Ctrl+T` para alternar la vista de la lista de tareas. La pantalla muestra hasta 5 tareas a la vez

328* Para ver todas las tareas o borrarlas, pregunte a Claude directamente: "show me all tasks" o "clear all tasks"

329* Las tareas persisten en compactaciones de contexto, ayudando a Claude a mantenerse organizado en proyectos más grandes

330* Para compartir una lista de tareas entre sesiones, establezca `CLAUDE_CODE_TASK_LIST_ID` para usar un directorio nombrado en `~/.claude/tasks/`: `CLAUDE_CODE_TASK_LIST_ID=my-project claude`

331 

332## Resumen de sesión

333 

334Cuando regresa a la terminal después de alejarse, Claude Code muestra un resumen de una línea de lo que sucedió en la sesión hasta ahora. El resumen se genera en segundo plano una vez que han pasado al menos tres minutos desde el último turno completado y la terminal no está enfocada, por lo que está listo cuando vuelve a cambiar. Los resúmenes solo aparecen una vez que la sesión tiene al menos tres turnos, y nunca dos seguidas.

335 

336Ejecute `/recap` para generar un resumen bajo demanda. Para desactivar los resúmenes automáticos, abra `/config` y desactive **Session recap**.

337 

338El resumen de sesión está activado de forma predeterminada para todos los planes y proveedores. El resumen siempre se omite en modo no interactivo.

339 

340## Estado de revisión de PR

341 

342Cuando trabaja en una rama con una solicitud de extracción abierta, Claude Code muestra un enlace de PR en el que se puede hacer clic en el pie de página (por ejemplo, "PR #446"). El enlace tiene un subrayado de color que indica el estado de revisión:

343 

344* Verde: aprobado

345* Amarillo: revisión pendiente

346* Rojo: cambios solicitados

347* Gris: borrador

348* Púrpura: fusionado

349 

350`Cmd+clic` (Mac) o `Ctrl+clic` (Windows/Linux) en el enlace para abrir la solicitud de extracción en su navegador. El estado se actualiza automáticamente cada 60 segundos.

351 

352<Note>

353 El estado de PR requiere que la CLI `gh` esté instalada y autenticada (`gh auth login`).

354</Note>

355 

356## Ver también

357 

358* [Skills](/es/skills) - Indicaciones personalizadas y flujos de trabajo

359* [Checkpointing](/es/checkpointing) - Rebobinar las ediciones de Claude y restaurar estados anteriores

360* [Referencia de CLI](/es/cli-reference) - Banderas y opciones de línea de comandos

361* [Configuración](/es/settings) - Opciones de configuración

362* [Gestión de memoria](/es/memory) - Gestión de archivos CLAUDE.md

jetbrains.md +192 −0 created

Details

1> ## Documentation Index

2> Fetch the complete documentation index at: https://code.claude.com/docs/llms.txt

3> Use this file to discover all available pages before exploring further.

4 

5# JetBrains IDEs

6 

7> Utiliza Claude Code con JetBrains IDEs incluyendo IntelliJ, PyCharm, WebStorm y más

8 

9Claude Code se integra con JetBrains IDEs a través de un plugin dedicado, proporcionando características como visualización de diferencias interactivas, compartición de contexto de selección y más.

10 

11## IDEs Compatibles

12 

13El plugin de Claude Code funciona con la mayoría de JetBrains IDEs, incluyendo:

14 

15* IntelliJ IDEA

16* PyCharm

17* Android Studio

18* WebStorm

19* PhpStorm

20* GoLand

21 

22## Características

23 

24* **Lanzamiento rápido**: utiliza `Cmd+Esc` (Mac) o `Ctrl+Esc` (Windows/Linux) para abrir Claude Code directamente desde tu editor, o haz clic en el botón de Claude Code en la interfaz

25* **Visualización de diferencias**: los cambios de código se pueden mostrar directamente en el visor de diferencias del IDE en lugar de la terminal

26* **Contexto de selección**: la selección actual o pestaña en el IDE se comparte automáticamente con Claude Code

27* **Atajos de referencia de archivos**: utiliza `Cmd+Option+K` (Mac) o `Alt+Ctrl+K` (Linux/Windows) para insertar referencias de archivos como `@src/auth.ts#L1-99`

28* **Compartición de diagnósticos**: los errores de diagnóstico del IDE, como errores de lint y sintaxis, se comparten automáticamente con Claude mientras trabajas

29 

30## Instalación

31 

32### Instalación desde Marketplace

33 

34Busca e instala el [plugin de Claude Code](https://plugins.jetbrains.com/plugin/27310-claude-code-beta-) desde el marketplace de JetBrains y reinicia tu IDE.

35 

36Si aún no has instalado Claude Code, consulta la [guía de inicio rápido](/es/quickstart) para obtener instrucciones de instalación.

37 

38<Note>

39 Después de instalar el plugin, es posible que necesites reiniciar completamente tu IDE para que surta efecto.

40</Note>

41 

42## Uso

43 

44### Desde tu IDE

45 

46Ejecuta `claude` desde la terminal integrada de tu IDE, y todas las características de integración estarán activas.

47 

48### Desde terminales externos

49 

50Utiliza el comando `/ide` en cualquier terminal externo para conectar Claude Code a tu JetBrains IDE y activar todas las características:

51 

52```bash theme={null}

53claude

54```

55 

56```text theme={null}

57/ide

58```

59 

60Si deseas que Claude tenga acceso a los mismos archivos que tu IDE, inicia Claude Code desde el mismo directorio que la raíz del proyecto de tu IDE.

61 

62## Configuración

63 

64### Configuración de Claude Code

65 

66Configura la integración del IDE a través de la configuración de Claude Code:

67 

681. Ejecuta `claude`

692. Ingresa el comando `/config`

703. Establece la herramienta de diferencias en `auto` para mostrar diferencias en el IDE, o `terminal` para mantenerlas en la terminal

71 

72### Configuración del Plugin

73 

74Configura el plugin de Claude Code yendo a **Settings → Tools → Claude Code \[Beta]**:

75 

76#### Configuración general

77 

78* **Comando Claude**: especifica un comando personalizado para ejecutar Claude, por ejemplo `claude`, `/usr/local/bin/claude`, o `npx @anthropic-ai/claude-code`

79* **Suprimir notificación para comando Claude no encontrado**: omite notificaciones sobre no encontrar el comando Claude

80* **Habilitar usar Option+Enter para indicadores de varias líneas**: solo en macOS. Cuando está habilitado, Option+Enter inserta nuevas líneas en los indicadores de Claude Code. Desactívalo si la tecla Option se captura inesperadamente. Requiere reinicio de terminal.

81* **Habilitar actualizaciones automáticas**: verifica automáticamente e instala actualizaciones del plugin, aplicadas al reiniciar

82 

83<Tip>

84 Para usuarios de WSL: establece `wsl -d Ubuntu -- bash -lic "claude"` como tu comando Claude (reemplaza `Ubuntu` con el nombre de tu distribución WSL)

85</Tip>

86 

87#### Configuración de la tecla ESC

88 

89Si la tecla ESC no interrumpe las operaciones de Claude Code en terminales de JetBrains:

90 

911. Ve a **Settings → Tools → Terminal**

922. Cualquiera de:

93 * Desactiva "Move focus to the editor with Escape", o

94 * Haz clic en "Configure terminal keybindings" y elimina el atajo "Switch focus to Editor"

953. Aplica los cambios

96 

97Esto permite que la tecla ESC interrumpa correctamente las operaciones de Claude Code.

98 

99## Configuraciones especiales

100 

101### Desarrollo remoto

102 

103<Warning>

104 Cuando utilices JetBrains Remote Development, debes instalar el plugin en el host remoto a través de **Settings → Plugin (Host)**.

105</Warning>

106 

107El plugin debe instalarse en el host remoto, no en tu máquina cliente local.

108 

109### Configuración de WSL

110 

111Si estás utilizando Claude Code en WSL2 con un JetBrains IDE y ves "No available IDEs detected", la causa generalmente es el enrutamiento NAT de WSL2 o el Firewall de Windows bloqueando la conexión entre WSL2 y el IDE ejecutándose en el host de Windows. WSL1 utiliza la red del host directamente y no se ve afectado.

112 

113#### Permitir tráfico de WSL2 a través del Firewall de Windows

114 

115Esta es la solución recomendada porque mantiene tu modo de red WSL2 existente.

116 

117<Steps>

118 <Step title="Encuentra tu dirección IP de WSL2">

119 Desde dentro de tu shell de WSL, ejecuta:

120 

121 ```bash theme={null}

122 hostname -I

123 ```

124 

125 Anota la subred, por ejemplo `172.21.123.45` está en `172.21.0.0/16`.

126 </Step>

127 

128 <Step title="Crea una regla de firewall">

129 Abre PowerShell como Administrador y ejecuta lo siguiente, ajustando el rango de IP para que coincida con tu subred:

130 

131 ```powershell theme={null}

132 New-NetFirewallRule -DisplayName "Allow WSL2 Internal Traffic" -Direction Inbound -Protocol TCP -Action Allow -RemoteAddress 172.21.0.0/16 -LocalAddress 172.21.0.0/16

133 ```

134 </Step>

135 

136 <Step title="Reinicia tu IDE y Claude Code">

137 Cierra y reabre ambos para que la nueva regla surta efecto.

138 </Step>

139</Steps>

140 

141#### Cambiar WSL2 a redes espejadas

142 

143Las redes espejadas requieren Windows 11 22H2 o posterior. Si estás en Windows 10, utiliza la regla de firewall anterior.

144 

145Añade esto a `.wslconfig` en tu directorio de usuario de Windows:

146 

147```ini theme={null}

148[wsl2]

149networkingMode=mirrored

150```

151 

152Luego reinicia WSL con `wsl --shutdown` desde PowerShell.

153 

154## Solución de problemas

155 

156### Plugin no funciona

157 

158Si el plugin está instalado pero las características de Claude Code no aparecen en tu IDE:

159 

160* Asegúrate de que estés ejecutando Claude Code desde el directorio raíz del proyecto

161* Verifica que el plugin de JetBrains esté habilitado en la configuración del IDE

162* Reinicia completamente el IDE (es posible que necesites hacerlo varias veces)

163* Para Desarrollo Remoto, asegúrate de que el plugin esté instalado en el host remoto

164 

165### IDE no detectado

166 

167Si ejecutar `claude` muestra "No available IDEs detected":

168 

169* Verifica que el plugin esté instalado y habilitado

170* Reinicia completamente el IDE

171* Comprueba que estés ejecutando Claude Code desde la terminal integrada

172* Para usuarios de WSL, consulta la [configuración de WSL](#wsl-configuration) anterior

173 

174### Comando no encontrado

175 

176Si hacer clic en el icono de Claude muestra "command not found":

177 

1781. Verifica que Claude Code esté instalado ejecutando `claude --version` en una terminal

1792. Configura la ruta del comando Claude en la configuración del plugin

1803. Para usuarios de WSL, utiliza el formato de comando WSL mencionado en la sección de configuración

181 

182## Consideraciones de seguridad

183 

184Cuando Claude Code se ejecuta en un JetBrains IDE con permisos de edición automática habilitados, puede ser capaz de modificar archivos de configuración del IDE que pueden ser ejecutados automáticamente por tu IDE. Esto puede aumentar el riesgo de ejecutar Claude Code en modo de edición automática y permitir eludir los indicadores de permiso de Claude Code para la ejecución de bash.

185 

186Cuando se ejecuta en JetBrains IDEs, considera:

187 

188* Usar el modo de aprobación manual para ediciones

189* Tener especial cuidado para asegurar que Claude solo se use con indicadores de confianza

190* Ser consciente de qué archivos Claude Code tiene acceso para modificar

191 

192Para problemas de instalación o inicio de sesión de Claude Code fuera del IDE, consulta [Solucionar problemas de instalación e inicio de sesión](/es/troubleshoot-install).

keybindings.md +463 −0 created

Details

1> ## Documentation Index

2> Fetch the complete documentation index at: https://code.claude.com/docs/llms.txt

3> Use this file to discover all available pages before exploring further.

4 

5# Personalizar atajos de teclado

6 

7> Personaliza atajos de teclado en Claude Code con un archivo de configuración de keybindings.

8 

9<Note>

10 Los atajos de teclado personalizables requieren Claude Code v2.1.18 o posterior. Verifique su versión con `claude --version`.

11</Note>

12 

13Claude Code admite atajos de teclado personalizables. Ejecute `/keybindings` para crear o abrir su archivo de configuración en `~/.claude/keybindings.json`.

14 

15## Archivo de configuración

16 

17El archivo de configuración de keybindings es un objeto con un array `bindings`. Cada bloque especifica un contexto y un mapa de pulsaciones de teclas a acciones.

18 

19<Note>Los cambios en el archivo de keybindings se detectan y aplican automáticamente sin reiniciar Claude Code.</Note>

20 

21| Campo | Descripción |

22| :--------- | :---------------------------------------------------------- |

23| `$schema` | URL de esquema JSON opcional para autocompletado del editor |

24| `$docs` | URL de documentación opcional |

25| `bindings` | Array de bloques de vinculación por contexto |

26 

27Este ejemplo vincula `Ctrl+E` para abrir un editor externo en el contexto de chat, y desvincula `Ctrl+U`:

28 

29```json theme={null}

30{

31 "$schema": "https://www.schemastore.org/claude-code-keybindings.json",

32 "$docs": "https://code.claude.com/docs/es/keybindings",

33 "bindings": [

34 {

35 "context": "Chat",

36 "bindings": {

37 "ctrl+e": "chat:externalEditor",

38 "ctrl+u": null

39 }

40 }

41 ]

42}

43```

44 

45## Contextos

46 

47Cada bloque de vinculación especifica un **contexto** donde se aplican los atajos:

48 

49| Contexto | Descripción |

50| :---------------- | :---------------------------------------------------------------------------- |

51| `Global` | Se aplica en todas partes de la aplicación |

52| `Chat` | Área principal de entrada de chat |

53| `Autocomplete` | Menú de autocompletado está abierto |

54| `Settings` | Menú de configuración |

55| `Confirmation` | Diálogos de permiso y confirmación |

56| `Tabs` | Componentes de navegación de pestañas |

57| `Help` | Menú de ayuda es visible |

58| `Transcript` | Visor de transcripción |

59| `HistorySearch` | Modo de búsqueda de historial (Ctrl+R) |

60| `Task` | Tarea de fondo está en ejecución |

61| `ThemePicker` | Diálogo de selector de tema |

62| `Attachments` | Navegación de adjunto de imagen en diálogos de selección |

63| `Footer` | Navegación de indicador de pie de página (tareas, equipos, diff) |

64| `MessageSelector` | Selección de mensaje de diálogo de rebobinado y resumen |

65| `DiffDialog` | Navegación del visor de diff |

66| `ModelPicker` | Nivel de esfuerzo del selector de modelo |

67| `Select` | Componentes genéricos de selección/lista |

68| `Plugin` | Diálogo de plugin (examinar, descubrir, administrar) |

69| `Scroll` | Desplazamiento de conversación y selección de texto en modo pantalla completa |

70| `Doctor` | Pantalla de diagnósticos `/doctor` |

71 

72## Acciones disponibles

73 

74Las acciones siguen un formato `namespace:action`, como `chat:submit` para enviar un mensaje o `app:toggleTodos` para mostrar la lista de tareas. Cada contexto tiene acciones específicas disponibles.

75 

76### Acciones de aplicación

77 

78Acciones disponibles en el contexto `Global`:

79 

80| Acción | Predeterminado | Descripción |

81| :--------------------- | :------------- | :-------------------------------------- |

82| `app:interrupt` | Ctrl+C | Cancelar operación actual |

83| `app:exit` | Ctrl+D | Salir de Claude Code |

84| `app:redraw` | (sin vincular) | Forzar redibujo de terminal |

85| `app:toggleTodos` | Ctrl+T | Alternar visibilidad de lista de tareas |

86| `app:toggleTranscript` | Ctrl+O | Alternar transcripción detallada |

87 

88### Acciones de historial

89 

90Acciones para navegar por el historial de comandos:

91 

92| Acción | Predeterminado | Descripción |

93| :----------------- | :------------- | :------------------------------ |

94| `history:search` | Ctrl+R | Abrir búsqueda de historial |

95| `history:previous` | Arriba | Elemento de historial anterior |

96| `history:next` | Abajo | Siguiente elemento de historial |

97 

98### Acciones de chat

99 

100Acciones disponibles en el contexto `Chat`:

101 

102| Acción | Predeterminado | Descripción |

103| :-------------------- | :------------------------ | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

104| `chat:cancel` | Escape | Cancelar entrada actual |

105| `chat:clearInput` | Ctrl+L | Forzar un redibujo de pantalla completa, preservando la entrada. En [renderizado de pantalla completa](/es/fullscreen#clear-the-conversation), presione dos veces dentro de dos segundos para ejecutar `/clear` |

106| `chat:clearScreen` | Cmd+K | En [renderizado de pantalla completa](/es/fullscreen#clear-the-conversation), presione dos veces dentro de dos segundos para ejecutar `/clear` |

107| `chat:killAgents` | Ctrl+X Ctrl+K | Matar todos los agentes de fondo |

108| `chat:cycleMode` | Shift+Tab\* | Ciclar modos de permiso |

109| `chat:modelPicker` | Meta+P | Abrir selector de modelo |

110| `chat:fastMode` | Meta+O | Alternar modo rápido |

111| `chat:thinkingToggle` | Meta+T | Alternar pensamiento extendido |

112| `chat:submit` | Enter | Enviar mensaje |

113| `chat:newline` | Ctrl+J | Insertar una nueva línea sin enviar |

114| `chat:undo` | Ctrl+\_, Ctrl+Shift+- | Deshacer última acción |

115| `chat:externalEditor` | Ctrl+G, Ctrl+X Ctrl+E | Abrir en editor externo |

116| `chat:stash` | Ctrl+S | Guardar indicación actual |

117| `chat:imagePaste` | Ctrl+V (Alt+V en Windows) | Pegar imagen |

118 

119\*En Windows sin modo VT (Node \<24.2.0/\<22.17.0, Bun \<1.2.23), el valor predeterminado es Meta+M.

120 

121### Acciones de autocompletado

122 

123Acciones disponibles en el contexto `Autocomplete`:

124 

125| Acción | Predeterminado | Descripción |

126| :---------------------- | :------------- | :------------------- |

127| `autocomplete:accept` | Tab | Aceptar sugerencia |

128| `autocomplete:dismiss` | Escape | Descartar menú |

129| `autocomplete:previous` | Arriba | Sugerencia anterior |

130| `autocomplete:next` | Abajo | Siguiente sugerencia |

131 

132### Acciones de confirmación

133 

134Acciones disponibles en el contexto `Confirmation`:

135 

136| Acción | Predeterminado | Descripción |

137| :-------------------------- | :------------- | :------------------------------ |

138| `confirm:yes` | Y, Enter | Confirmar acción |

139| `confirm:no` | N, Escape | Rechazar acción |

140| `confirm:previous` | Arriba | Opción anterior |

141| `confirm:next` | Abajo | Siguiente opción |

142| `confirm:nextField` | Tab | Siguiente campo |

143| `confirm:previousField` | (sin vincular) | Campo anterior |

144| `confirm:toggle` | Espacio | Alternar selección |

145| `confirm:cycleMode` | Shift+Tab | Ciclar modos de permiso |

146| `confirm:toggleExplanation` | Ctrl+E | Alternar explicación de permiso |

147 

148### Acciones de permiso

149 

150Acciones disponibles en el contexto `Confirmation` para diálogos de permiso:

151 

152| Acción | Predeterminado | Descripción |

153| :----------------------- | :------------- | :-------------------------------------------- |

154| `permission:toggleDebug` | Ctrl+D | Alternar información de depuración de permiso |

155 

156### Acciones de transcripción

157 

158Acciones disponibles en el contexto `Transcript`:

159 

160| Acción | Predeterminado | Descripción |

161| :------------------------- | :---------------- | :--------------------------------- |

162| `transcript:toggleShowAll` | Ctrl+E | Alternar mostrar todo el contenido |

163| `transcript:exit` | q, Ctrl+C, Escape | Salir de vista de transcripción |

164 

165### Acciones de búsqueda de historial

166 

167Acciones disponibles en el contexto `HistorySearch`:

168 

169| Acción | Predeterminado | Descripción |

170| :------------------------- | :------------- | :------------------------------------------------ |

171| `historySearch:next` | Ctrl+R | Siguiente coincidencia |

172| `historySearch:accept` | Escape, Tab | Aceptar selección |

173| `historySearch:cancel` | Ctrl+C | Cancelar búsqueda |

174| `historySearch:execute` | Enter | Ejecutar comando seleccionado |

175| `historySearch:cycleScope` | Ctrl+S | Ciclar alcance: sesión, proyecto, en todas partes |

176 

177### Acciones de tarea

178 

179Acciones disponibles en el contexto `Task`:

180 

181| Acción | Predeterminado | Descripción |

182| :---------------- | :------------- | :-------------------- |

183| `task:background` | Ctrl+B | Tarea de fondo actual |

184 

185### Acciones de tema

186 

187Acciones disponibles en el contexto `ThemePicker`:

188 

189| Acción | Predeterminado | Descripción |

190| :------------------------------- | :------------- | :----------------------------- |

191| `theme:toggleSyntaxHighlighting` | Ctrl+T | Alternar resaltado de sintaxis |

192 

193### Acciones de ayuda

194 

195Acciones disponibles en el contexto `Help`:

196 

197| Acción | Predeterminado | Descripción |

198| :------------- | :------------- | :------------------- |

199| `help:dismiss` | Escape | Cerrar menú de ayuda |

200 

201### Acciones de pestañas

202 

203Acciones disponibles en el contexto `Tabs`:

204 

205| Acción | Predeterminado | Descripción |

206| :-------------- | :------------------- | :---------------- |

207| `tabs:next` | Tab, Derecha | Siguiente pestaña |

208| `tabs:previous` | Shift+Tab, Izquierda | Pestaña anterior |

209 

210### Acciones de adjuntos

211 

212Acciones disponibles en el contexto `Attachments`:

213 

214| Acción | Predeterminado | Descripción |

215| :--------------------- | :------------------ | :------------------------------ |

216| `attachments:next` | Derecha | Siguiente adjunto |

217| `attachments:previous` | Izquierda | Adjunto anterior |

218| `attachments:remove` | Retroceso, Suprimir | Eliminar adjunto seleccionado |

219| `attachments:exit` | Abajo, Escape | Salir de navegación de adjuntos |

220 

221### Acciones de pie de página

222 

223Acciones disponibles en el contexto `Footer`:

224 

225| Acción | Predeterminado | Descripción |

226| :---------------------- | :------------- | :------------------------------------------------------------------------ |

227| `footer:next` | Derecha | Siguiente elemento de pie de página |

228| `footer:previous` | Izquierda | Elemento de pie de página anterior |

229| `footer:up` | Arriba | Navegar hacia arriba en pie de página (deselecciona en la parte superior) |

230| `footer:down` | Abajo | Navegar hacia abajo en pie de página |

231| `footer:openSelected` | Enter | Abrir elemento de pie de página seleccionado |

232| `footer:clearSelection` | Escape | Limpiar selección de pie de página |

233 

234### Acciones del selector de mensajes

235 

236Acciones disponibles en el contexto `MessageSelector`:

237 

238| Acción | Predeterminado | Descripción |

239| :----------------------- | :---------------------------------------------- | :----------------------------- |

240| `messageSelector:up` | Arriba, K, Ctrl+P | Mover hacia arriba en la lista |

241| `messageSelector:down` | Abajo, J, Ctrl+N | Mover hacia abajo en la lista |

242| `messageSelector:top` | Ctrl+Arriba, Shift+Arriba, Meta+Arriba, Shift+K | Saltar al inicio |

243| `messageSelector:bottom` | Ctrl+Abajo, Shift+Abajo, Meta+Abajo, Shift+J | Saltar al final |

244| `messageSelector:select` | Enter | Seleccionar mensaje |

245 

246### Acciones de diff

247 

248Acciones disponibles en el contexto `DiffDialog`:

249 

250| Acción | Predeterminado | Descripción |

251| :-------------------- | :------------------------ | :---------------------------- |

252| `diff:dismiss` | Escape | Cerrar visor de diff |

253| `diff:previousSource` | Izquierda | Fuente de diff anterior |

254| `diff:nextSource` | Derecha | Siguiente fuente de diff |

255| `diff:previousFile` | Arriba | Archivo anterior en diff |

256| `diff:nextFile` | Abajo | Siguiente archivo en diff |

257| `diff:viewDetails` | Enter | Ver detalles de diff |

258| `diff:back` | (específico del contexto) | Volver atrás en visor de diff |

259 

260### Acciones del selector de modelo

261 

262Acciones disponibles en el contexto `ModelPicker`:

263 

264| Acción | Predeterminado | Descripción |

265| :--------------------------- | :------------- | :-------------------------- |

266| `modelPicker:decreaseEffort` | Izquierda | Disminuir nivel de esfuerzo |

267| `modelPicker:increaseEffort` | Derecha | Aumentar nivel de esfuerzo |

268 

269### Acciones de selección

270 

271Acciones disponibles en el contexto `Select`:

272 

273| Acción | Predeterminado | Descripción |

274| :---------------- | :---------------- | :----------------- |

275| `select:next` | Abajo, J, Ctrl+N | Siguiente opción |

276| `select:previous` | Arriba, K, Ctrl+P | Opción anterior |

277| `select:accept` | Enter | Aceptar selección |

278| `select:cancel` | Escape | Cancelar selección |

279 

280### Acciones de plugin

281 

282Acciones disponibles en el contexto `Plugin`:

283 

284| Acción | Predeterminado | Descripción |

285| :---------------- | :------------- | :---------------------------------------------------------------------------------------------------------------- |

286| `plugin:toggle` | Espacio | Alternar selección de plugin |

287| `plugin:install` | I | Instalar plugins seleccionados |

288| `plugin:favorite` | F | Marcar como favorito el plugin seleccionado para que se ordene cerca de la parte superior de la pestaña Instalado |

289 

290### Acciones de configuración

291 

292Acciones disponibles en el contexto `Settings`:

293 

294| Acción | Predeterminado | Descripción |

295| :---------------- | :------------- | :----------------------------------------------------------------------------------- |

296| `settings:search` | / | Entrar en modo de búsqueda |

297| `settings:retry` | R | Reintentar carga de datos de uso (en caso de error) |

298| `settings:close` | Enter | Guardar cambios y cerrar el panel de configuración. Escape descarta cambios y cierra |

299 

300### Acciones de doctor

301 

302Acciones disponibles en el contexto `Doctor`:

303 

304| Acción | Predeterminado | Descripción |

305| :----------- | :------------- | :---------------------------------------------------------------------------------------------------------------------------- |

306| `doctor:fix` | F | Enviar el informe de diagnósticos a Claude para corregir los problemas reportados. Solo activo cuando se encuentran problemas |

307 

308### Acciones de voz

309 

310Acciones disponibles en el contexto `Chat` cuando [dictado de voz](/es/voice-dictation) está habilitado:

311 

312| Acción | Predeterminado | Descripción |

313| :----------------- | :------------- | :------------------------------------------------------------------------ |

314| `voice:pushToTalk` | Espacio | Dictar una indicación. Mantener presionado o tocar según el modo `/voice` |

315 

316### Acciones de desplazamiento

317 

318Acciones disponibles en el contexto `Scroll` cuando [renderizado de pantalla completa](/es/fullscreen) está habilitado:

319 

320| Acción | Predeterminado | Descripción |

321| :-------------------------- | :------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------- |

322| `scroll:lineUp` | (sin vincular) | Desplazarse hacia arriba una línea. El desplazamiento de rueda de ratón activa esta acción |

323| `scroll:lineDown` | (sin vincular) | Desplazarse hacia abajo una línea. El desplazamiento de rueda de ratón activa esta acción |

324| `scroll:pageUp` | Av Pág | Desplazarse hacia arriba la mitad de la altura de la ventana gráfica |

325| `scroll:pageDown` | Re Pág | Desplazarse hacia abajo la mitad de la altura de la ventana gráfica |

326| `scroll:top` | Ctrl+Inicio | Saltar al inicio de la conversación |

327| `scroll:bottom` | Ctrl+Fin | Saltar al mensaje más reciente y reactivar el seguimiento automático |

328| `scroll:halfPageUp` | (sin vincular) | Desplazarse hacia arriba la mitad de la altura de la ventana gráfica. Mismo comportamiento que `scroll:pageUp`, proporcionado para rebinds de estilo vi |

329| `scroll:halfPageDown` | (sin vincular) | Desplazarse hacia abajo la mitad de la altura de la ventana gráfica. Mismo comportamiento que `scroll:pageDown`, proporcionado para rebinds de estilo vi |

330| `scroll:fullPageUp` | (sin vincular) | Desplazarse hacia arriba la altura completa de la ventana gráfica |

331| `scroll:fullPageDown` | (sin vincular) | Desplazarse hacia abajo la altura completa de la ventana gráfica |

332| `selection:copy` | Ctrl+Shift+C / Cmd+C | Copiar el texto seleccionado al portapapeles |

333| `selection:clear` | (sin vincular) | Limpiar la selección de texto activa |

334| `selection:extendLeft` | Shift+Izquierda | Extender la selección activa una columna hacia la izquierda |

335| `selection:extendRight` | Shift+Derecha | Extender la selección activa una columna hacia la derecha |

336| `selection:extendUp` | Shift+Arriba | Extender la selección activa una fila hacia arriba. Desplaza la ventana gráfica cuando la selección alcanza el borde superior |

337| `selection:extendDown` | Shift+Abajo | Extender la selección activa una fila hacia abajo. Desplaza la ventana gráfica cuando la selección alcanza el borde inferior |

338| `selection:extendLineStart` | Shift+Inicio | Extender la selección activa al inicio de la línea |

339| `selection:extendLineEnd` | Shift+Fin | Extender la selección activa al final de la línea |

340 

341## Sintaxis de pulsación de tecla

342 

343### Modificadores

344 

345Use teclas modificadoras con el separador `+`:

346 

347* `ctrl` o `control` - Tecla Control

348* `shift` - Tecla Shift

349* `alt`, `opt`, `option`, o `meta` - Tecla Alt en Windows y Linux, tecla Opción en macOS

350* `cmd`, `command`, `super`, o `win` - Tecla Comando en macOS, tecla Windows en Windows, tecla Super en Linux

351 

352El grupo `cmd` solo se detecta en terminales que reportan el modificador Super, como aquellos que soportan el protocolo de teclado Kitty o el modo `modifyOtherKeys` de xterm. La mayoría de terminales no lo envían, así que use `ctrl` o `meta` para atajos de teclado que desee que funcionen en todas partes.

353 

354Por ejemplo:

355 

356```text theme={null}

357ctrl+k Ctrl + K

358shift+tab Shift + Tab

359meta+p Opción + P en macOS, Alt + P en otros lugares

360ctrl+shift+c Múltiples modificadores

361```

362 

363### Letras mayúsculas

364 

365Una letra mayúscula independiente implica Shift. Por ejemplo, `K` es equivalente a `shift+k`. Esto es útil para atajos de teclado de estilo vim donde las teclas mayúsculas y minúsculas tienen significados diferentes.

366 

367Las letras mayúsculas con modificadores (por ejemplo, `ctrl+K`) se tratan como estilísticas y **no** implican Shift: `ctrl+K` es lo mismo que `ctrl+k`.

368 

369### Acordes

370 

371Los acordes son secuencias de pulsaciones de teclas separadas por espacios:

372 

373```text theme={null}

374ctrl+k ctrl+s Presione Ctrl+K, suelte, luego Ctrl+S

375```

376 

377### Teclas especiales

378 

379* `escape` o `esc` - Tecla Escape

380* `enter` o `return` - Tecla Enter

381* `tab` - Tecla Tab

382* `space` - Barra espaciadora

383* `up`, `down`, `left`, `right` - Teclas de flecha

384* `backspace`, `delete` - Teclas de eliminación

385 

386## Desvinculación de atajos predeterminados

387 

388Establezca una acción en `null` para desvinculación de un atajo predeterminado:

389 

390```json theme={null}

391{

392 "bindings": [

393 {

394 "context": "Chat",

395 "bindings": {

396 "ctrl+s": null

397 }

398 }

399 ]

400}

401```

402 

403Esto también funciona para vinculaciones de acordes. Desvinculación de cada acorde que comparte un prefijo libera ese prefijo para su uso como una vinculación de tecla única:

404 

405```json theme={null}

406{

407 "bindings": [

408 {

409 "context": "Chat",

410 "bindings": {

411 "ctrl+x ctrl+k": null,

412 "ctrl+x ctrl+e": null,

413 "ctrl+x": "chat:newline"

414 }

415 }

416 ]

417}

418```

419 

420Si desvincula algunos pero no todos los acordes en un prefijo, presionar el prefijo aún entra en modo de espera de acorde para las vinculaciones restantes.

421 

422## Atajos reservados

423 

424Estos atajos no se pueden reasignar:

425 

426| Atajo | Razón |

427| :-------- | :----------------------------------------------- |

428| Ctrl+C | Interrupción/cancelación codificada |

429| Ctrl+D | Salida codificada |

430| Ctrl+M | Idéntico a Enter en terminales (ambos envían CR) |

431| Caps Lock | No se entrega a las aplicaciones de terminal |

432 

433## Conflictos de terminal

434 

435Algunos atajos pueden entrar en conflicto con multiplexores de terminal:

436 

437| Atajo | Conflicto |

438| :----- | :----------------------------------------------- |

439| Ctrl+B | Prefijo de tmux (presione dos veces para enviar) |

440| Ctrl+A | Prefijo de GNU screen |

441| Ctrl+Z | Suspensión de proceso Unix (SIGTSTP) |

442 

443## Interacción del modo Vim

444 

445Cuando el modo vim está habilitado mediante `/config` → Editor mode, los keybindings y el modo vim funcionan de forma independiente:

446 

447* **Modo Vim** maneja la entrada a nivel de entrada de texto (movimiento del cursor, modos, movimientos)

448* **Keybindings** manejan acciones a nivel de componente (alternar tareas, enviar, etc.)

449* La tecla Escape en modo vim cambia de modo INSERT a NORMAL; no activa `chat:cancel`

450* La mayoría de los atajos Ctrl+tecla pasan a través del modo vim al sistema de keybindings

451* En modo NORMAL de vim, `?` muestra el menú de ayuda (comportamiento de vim)

452 

453## Validación

454 

455Claude Code valida sus keybindings y muestra advertencias para:

456 

457* Errores de análisis (JSON o estructura inválida)

458* Nombres de contexto inválidos

459* Conflictos de atajos reservados

460* Conflictos de multiplexor de terminal

461* Vinculaciones duplicadas en el mismo contexto

462 

463Ejecute `/doctor` para ver cualquier advertencia de keybindings.

llm-gateway.md +196 −0 created

Details

1> ## Documentation Index

2> Fetch the complete documentation index at: https://code.claude.com/docs/llms.txt

3> Use this file to discover all available pages before exploring further.

4 

5# Configuración de la puerta de enlace LLM

6 

7> Aprende cómo configurar Claude Code para trabajar con soluciones de puerta de enlace LLM. Cubre requisitos de puerta de enlace, configuración de autenticación, selección de modelos y configuración de puntos finales específicos del proveedor.

8 

9Las puertas de enlace LLM proporcionan una capa proxy centralizada entre Claude Code y los proveedores de modelos, a menudo proporcionando:

10 

11* **Autenticación centralizada** - Punto único para la gestión de claves API

12* **Seguimiento de uso** - Monitorea el uso en equipos y proyectos

13* **Controles de costos** - Implementa presupuestos y límites de velocidad

14* **Registro de auditoría** - Rastrea todas las interacciones del modelo para cumplimiento normativo

15* **Enrutamiento de modelos** - Cambia entre proveedores sin cambios de código

16 

17## Requisitos de la puerta de enlace

18 

19Para que una puerta de enlace LLM funcione con Claude Code, debe cumplir con los siguientes requisitos:

20 

21**Formato de API**

22 

23La puerta de enlace debe exponer a los clientes al menos uno de los siguientes formatos de API:

24 

251. **Anthropic Messages**: `/v1/messages`, `/v1/messages/count_tokens`

26 * Debe reenviar encabezados de solicitud: `anthropic-beta`, `anthropic-version`

27 

282. **Bedrock InvokeModel**: `/invoke`, `/invoke-with-response-stream`

29 * Debe preservar campos del cuerpo de la solicitud: `anthropic_beta`, `anthropic_version`

30 

313. **Vertex rawPredict**: `:rawPredict`, `:streamRawPredict`, `/count-tokens:rawPredict`

32 * Debe reenviar encabezados de solicitud: `anthropic-beta`, `anthropic-version`

33 

34El incumplimiento de reenvío de encabezados o la preservación de campos del cuerpo puede resultar en funcionalidad reducida o incapacidad de usar características de Claude Code.

35 

36<Note>

37 Claude Code determina qué características habilitar en función del formato de API. Al usar el formato Anthropic Messages con Bedrock o Vertex, es posible que necesites establecer la variable de entorno `CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS=1`.

38</Note>

39 

40**Encabezados de solicitud**

41 

42Claude Code incluye los siguientes encabezados en cada solicitud de API:

43 

44| Encabezado | Descripción |

45| :------------------------- | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

46| `X-Claude-Code-Session-Id` | Un identificador único para la sesión actual de Claude Code. Los proxies pueden usar esto para agregar todas las solicitudes de API de una sola sesión sin analizar el cuerpo de la solicitud. |

47 

48Claude Code también antepone un bloque de atribución corto al mensaje del sistema que contiene la versión del cliente y una huella digital derivada de la conversación. La API de Anthropic elimina este bloque antes de procesarlo, por lo que no afecta el almacenamiento en caché de solicitudes de primer nivel. Si tu puerta de enlace implementa su propio caché de solicitudes con clave en el cuerpo de la solicitud completa, establece [`CLAUDE_CODE_ATTRIBUTION_HEADER=0`](/es/env-vars) para omitirlo.

49 

50## Configuración

51 

52### Selección de modelo

53 

54Por defecto, Claude Code utiliza nombres de modelo estándar para el formato de API seleccionado.

55 

56Cuando `ANTHROPIC_BASE_URL` apunta a una puerta de enlace que expone el formato de Mensajes de Anthropic, Claude Code consulta el punto final `/v1/models` de la puerta de enlace al inicio y añade los modelos devueltos al selector `/model`. Cada entrada descubierta se etiqueta como "Desde puerta de enlace" y utiliza el campo `display_name` de la respuesta cuando se proporciona uno. Esto requiere Claude Code v2.1.126 o posterior.

57 

58El descubrimiento se aplica solo al formato de Mensajes de Anthropic. No se ejecuta para puntos finales de paso a través de Bedrock o Vertex, y no se ejecuta cuando `ANTHROPIC_BASE_URL` no está configurado o apunta a `api.anthropic.com`.

59 

60La solicitud de descubrimiento se autentica de la misma manera que las solicitudes de inferencia: envía `ANTHROPIC_AUTH_TOKEN` como un token portador, o `ANTHROPIC_API_KEY` como el encabezado `x-api-key` cuando no hay un token de autenticación configurado, junto con cualquier encabezado de `ANTHROPIC_CUSTOM_HEADERS`. Solo se añaden al selector los modelos cuyo ID comienza con `claude` o `anthropic`. Los resultados se almacenan en caché en `~/.claude/cache/gateway-models.json` y se actualizan en cada inicio. Si la solicitud falla o la puerta de enlace no implementa `/v1/models`, el selector vuelve a la lista en caché del inicio anterior o a la lista de modelos integrada.

61 

62Si tu puerta de enlace utiliza nombres de modelo que no coinciden con el filtro de descubrimiento, utiliza las variables de entorno documentadas en [Configuración de modelo](/es/model-config) para añadirlos manualmente.

63 

64## Configuración de LiteLLM

65 

66<Warning>

67 Las versiones 1.82.7 y 1.82.8 de LiteLLM PyPI fueron comprometidas con malware que roba credenciales. No instales estas versiones. Si ya las has instalado:

68 

69 * Elimina el paquete

70 * Rota todas las credenciales en los sistemas afectados

71 * Sigue los pasos de remediación en [BerriAI/litellm#24518](https://github.com/BerriAI/litellm/issues/24518)

72 

73 LiteLLM es un servicio proxy de terceros. Anthropic no respalda, mantiene ni audita la seguridad o funcionalidad de LiteLLM. Esta guía se proporciona con fines informativos y puede quedar obsoleta. Úsala bajo tu propio criterio.

74</Warning>

75 

76### Requisitos previos

77 

78* Claude Code actualizado a la última versión

79* Servidor Proxy de LiteLLM implementado y accesible

80* Acceso a modelos Claude a través de tu proveedor elegido

81 

82### Configuración básica de LiteLLM

83 

84**Configura Claude Code**:

85 

86#### Métodos de autenticación

87 

88##### Clave API estática

89 

90Método más simple usando una clave API fija:

91 

92```bash theme={null}

93# Establecer en el entorno

94export ANTHROPIC_AUTH_TOKEN=sk-litellm-static-key

95 

96# O en la configuración de Claude Code

97{

98 "env": {

99 "ANTHROPIC_AUTH_TOKEN": "sk-litellm-static-key"

100 }

101}

102```

103 

104Este valor se enviará como encabezado `Authorization`.

105 

106##### Clave API dinámica con ayudante

107 

108Para claves rotativas o autenticación por usuario:

109 

1101. Crea un script ayudante de clave API:

111 

112```bash theme={null}

113#!/bin/bash

114# ~/bin/get-litellm-key.sh

115 

116# Ejemplo: Obtener clave del almacén

117vault kv get -field=api_key secret/litellm/claude-code

118 

119# Ejemplo: Generar token JWT

120jwt encode \

121 --secret="${JWT_SECRET}" \

122 --exp="+1h" \

123 '{"user":"'${USER}'","team":"engineering"}'

124```

125 

1262. Configura la configuración de Claude Code para usar el ayudante:

127 

128```json theme={null}

129{

130 "apiKeyHelper": "~/bin/get-litellm-key.sh"

131}

132```

133 

1343. Establece el intervalo de actualización de token:

135 

136```bash theme={null}

137# Actualizar cada hora (3600000 ms)

138export CLAUDE_CODE_API_KEY_HELPER_TTL_MS=3600000

139```

140 

141Este valor se enviará como encabezados `Authorization` y `X-Api-Key`. El `apiKeyHelper` tiene menor precedencia que `ANTHROPIC_AUTH_TOKEN` o `ANTHROPIC_API_KEY`.

142 

143#### Punto final unificado (recomendado)

144 

145Usando el [punto final de formato Anthropic](https://docs.litellm.ai/docs/anthropic_unified) de LiteLLM:

146 

147```bash theme={null}

148export ANTHROPIC_BASE_URL=https://litellm-server:4000

149```

150 

151**Beneficios del punto final unificado sobre puntos finales de paso directo:**

152 

153* Equilibrio de carga

154* Alternativas

155* Soporte consistente para seguimiento de costos y seguimiento de usuario final

156 

157#### Puntos finales de paso directo específicos del proveedor (alternativa)

158 

159##### API de Claude a través de LiteLLM

160 

161Usando [punto final de paso directo](https://docs.litellm.ai/docs/pass_through/anthropic_completion):

162 

163```bash theme={null}

164export ANTHROPIC_BASE_URL=https://litellm-server:4000/anthropic

165```

166 

167##### Amazon Bedrock a través de LiteLLM

168 

169Usando [punto final de paso directo](https://docs.litellm.ai/docs/pass_through/bedrock):

170 

171```bash theme={null}

172export ANTHROPIC_BEDROCK_BASE_URL=https://litellm-server:4000/bedrock

173export CLAUDE_CODE_SKIP_BEDROCK_AUTH=1

174export CLAUDE_CODE_USE_BEDROCK=1

175```

176 

177##### Google Vertex AI a través de LiteLLM

178 

179Usando [punto final de paso directo](https://docs.litellm.ai/docs/pass_through/vertex_ai):

180 

181```bash theme={null}

182export ANTHROPIC_VERTEX_BASE_URL=https://litellm-server:4000/vertex_ai/v1

183export ANTHROPIC_VERTEX_PROJECT_ID=your-gcp-project-id

184export CLAUDE_CODE_SKIP_VERTEX_AUTH=1

185export CLAUDE_CODE_USE_VERTEX=1

186export CLOUD_ML_REGION=us-east5

187```

188 

189Para obtener información más detallada, consulta la [documentación de LiteLLM](https://docs.litellm.ai/).

190 

191## Recursos adicionales

192 

193* [Documentación de LiteLLM](https://docs.litellm.ai/)

194* [Configuración de Claude Code](/es/settings)

195* [Configuración de red empresarial](/es/network-config)

196* [Descripción general de integraciones de terceros](/es/third-party-integrations)

mcp.md +1451 −0 created

Details

1> ## Documentation Index

2> Fetch the complete documentation index at: https://code.claude.com/docs/llms.txt

3> Use this file to discover all available pages before exploring further.

4 

5# Conectar Claude Code a herramientas mediante MCP

6 

7> Aprenda cómo conectar Claude Code a sus herramientas con el Model Context Protocol.

8 

9export const MCPServersTable = ({platform = "all"}) => {

10 const ifYouAreAnAiAgentReadingThisYouShouldInsteadFetch = 'https://api.anthropic.com/mcp-registry/docs';

11 const [servers, setServers] = useState([]);

12 const [loading, setLoading] = useState(true);

13 const [error, setError] = useState(null);

14 useEffect(() => {

15 const fetchServers = async () => {

16 try {

17 setLoading(true);

18 const allServers = [];

19 let cursor = null;

20 do {

21 const url = new URL('https://api.anthropic.com/mcp-registry/v0/servers');

22 url.searchParams.set('version', 'latest');

23 url.searchParams.set('visibility', 'commercial');

24 url.searchParams.set('limit', '100');

25 if (cursor) {

26 url.searchParams.set('cursor', cursor);

27 }

28 const response = await fetch(url);

29 if (!response.ok) {

30 throw new Error(`Failed to fetch MCP registry: ${response.status}`);

31 }

32 const data = await response.json();

33 allServers.push(...data.servers);

34 cursor = data.metadata?.nextCursor || null;

35 } while (cursor);

36 const transformedServers = allServers.map(item => {

37 const server = item.server;

38 const meta = item._meta?.['com.anthropic.api/mcp-registry'] || ({});

39 const worksWith = meta.worksWith || [];

40 const availability = {

41 claudeCode: worksWith.includes('claude-code'),

42 mcpConnector: worksWith.includes('claude-api'),

43 claudeDesktop: worksWith.includes('claude-desktop')

44 };

45 const remotes = server.remotes || [];

46 const httpRemote = remotes.find(r => r.type === 'streamable-http');

47 const sseRemote = remotes.find(r => r.type === 'sse');

48 const preferredRemote = httpRemote || sseRemote;

49 const remoteUrl = preferredRemote?.url || meta.url;

50 const remoteType = preferredRemote?.type;

51 const isTemplatedUrl = remoteUrl?.includes('{');

52 let setupUrl;

53 if (isTemplatedUrl && meta.requiredFields) {

54 const urlField = meta.requiredFields.find(f => f.field === 'url');

55 setupUrl = urlField?.sourceUrl || meta.documentation;

56 }

57 const urls = {};

58 if (!isTemplatedUrl) {

59 if (remoteType === 'streamable-http') {

60 urls.http = remoteUrl;

61 } else if (remoteType === 'sse') {

62 urls.sse = remoteUrl;

63 }

64 }

65 let envVars = [];

66 if (server.packages && server.packages.length > 0) {

67 const npmPackage = server.packages.find(p => p.registryType === 'npm');

68 if (npmPackage) {

69 urls.stdio = `npx -y ${npmPackage.identifier}`;

70 if (npmPackage.environmentVariables) {

71 envVars = npmPackage.environmentVariables;

72 }

73 }

74 }

75 return {

76 name: meta.displayName || server.title || server.name,

77 description: meta.oneLiner || server.description,

78 documentation: meta.documentation,

79 urls: urls,

80 envVars: envVars,

81 availability: availability,

82 customCommands: meta.claudeCodeCopyText ? {

83 claudeCode: meta.claudeCodeCopyText

84 } : undefined,

85 setupUrl: setupUrl

86 };

87 });

88 setServers(transformedServers);

89 setError(null);

90 } catch (err) {

91 setError(err.message);

92 console.error('Error fetching MCP registry:', err);

93 } finally {

94 setLoading(false);

95 }

96 };

97 fetchServers();

98 }, []);

99 const generateClaudeCodeCommand = server => {

100 if (server.customCommands && server.customCommands.claudeCode) {

101 return server.customCommands.claudeCode.replace('--transport streamable-http', '--transport http');

102 }

103 const serverSlug = server.name.toLowerCase().replace(/[^a-z0-9]/g, '-');

104 if (server.urls.http) {

105 return `claude mcp add ${serverSlug} --transport http ${server.urls.http}`;

106 }

107 if (server.urls.sse) {

108 return `claude mcp add ${serverSlug} --transport sse ${server.urls.sse}`;

109 }

110 if (server.urls.stdio) {

111 const envFlags = server.envVars && server.envVars.length > 0 ? server.envVars.map(v => `--env ${v.name}=YOUR_${v.name}`).join(' ') : '';

112 const baseCommand = `claude mcp add ${serverSlug} --transport stdio`;

113 return envFlags ? `${baseCommand} ${envFlags} -- ${server.urls.stdio}` : `${baseCommand} -- ${server.urls.stdio}`;

114 }

115 return null;

116 };

117 if (loading) {

118 return <div>Loading MCP servers...</div>;

119 }

120 if (error) {

121 return <div>Error loading MCP servers: {error}</div>;

122 }

123 const filteredServers = servers.filter(server => {

124 if (platform === "claudeCode") {

125 return server.availability.claudeCode;

126 } else if (platform === "mcpConnector") {

127 return server.availability.mcpConnector;

128 } else if (platform === "claudeDesktop") {

129 return server.availability.claudeDesktop;

130 } else if (platform === "all") {

131 return true;

132 } else {

133 throw new Error(`Unknown platform: ${platform}`);

134 }

135 });

136 return <>

137 <style jsx>{`

138 .cards-container {

139 display: grid;

140 gap: 1rem;

141 margin-bottom: 2rem;

142 }

143 .server-card {

144 border: 1px solid var(--border-color, #e5e7eb);

145 border-radius: 6px;

146 padding: 1rem;

147 }

148 .command-row {

149 display: flex;

150 align-items: center;

151 gap: 0.25rem;

152 }

153 .command-row code {

154 font-size: 0.75rem;

155 overflow-x: auto;

156 }

157 `}</style>

158 

159 <div className="cards-container">

160 {filteredServers.map(server => {

161 const claudeCodeCommand = generateClaudeCodeCommand(server);

162 const mcpUrl = server.urls.http || server.urls.sse;

163 const commandToShow = platform === "claudeCode" ? claudeCodeCommand : mcpUrl;

164 return <div key={server.name} className="server-card">

165 <div>

166 {server.documentation ? <a href={server.documentation}>

167 <strong>{server.name}</strong>

168 </a> : <strong>{server.name}</strong>}

169 </div>

170 

171 <p style={{

172 margin: '0.5rem 0',

173 fontSize: '0.9rem'

174 }}>

175 {server.description}

176 </p>

177 

178 {server.setupUrl && <p style={{

179 margin: '0.25rem 0',

180 fontSize: '0.8rem',

181 fontStyle: 'italic',

182 opacity: 0.7

183 }}>

184 Requires user-specific URL.{' '}

185 <a href={server.setupUrl} style={{

186 textDecoration: 'underline'

187 }}>

188 Get your URL here

189 </a>.

190 </p>}

191 

192 {commandToShow && !server.setupUrl && <>

193 <p style={{

194 display: 'block',

195 fontSize: '0.75rem',

196 fontWeight: 500,

197 minWidth: 'fit-content',

198 marginTop: '0.5rem',

199 marginBottom: 0

200 }}>

201 {platform === "claudeCode" ? "Command" : "URL"}

202 </p>

203 <div className="command-row">

204 <code>

205 {commandToShow}

206 </code>

207 </div>

208 </>}

209 </div>;

210 })}

211 </div>

212 </>;

213};

214 

215Claude Code puede conectarse a cientos de herramientas externas y fuentes de datos a través del [Model Context Protocol (MCP)](https://modelcontextprotocol.io/introduction), un estándar de código abierto para integraciones de IA con herramientas. Los servidores MCP dan a Claude Code acceso a sus herramientas, bases de datos y APIs.

216 

217Conecte un servidor cuando se encuentre copiando datos en el chat desde otra herramienta, como un rastreador de problemas o un panel de monitoreo. Una vez conectado, Claude puede leer y actuar en ese sistema directamente en lugar de trabajar con lo que pegue.

218 

219## Qué puede hacer con MCP

220 

221Con servidores MCP conectados, puede pedirle a Claude Code que:

222 

223* **Implemente características desde rastreadores de problemas**: "Agregue la característica descrita en el problema JIRA ENG-4521 y cree un PR en GitHub."

224* **Analice datos de monitoreo**: "Verifique Sentry y Statsig para verificar el uso de la característica descrita en ENG-4521."

225* **Consulte bases de datos**: "Encuentre correos electrónicos de 10 usuarios aleatorios que utilizaron la característica ENG-4521, basándose en nuestra base de datos PostgreSQL."

226* **Integre diseños**: "Actualice nuestra plantilla de correo electrónico estándar basándose en los nuevos diseños de Figma que se publicaron en Slack"

227* **Automatice flujos de trabajo**: "Cree borradores de Gmail invitando a estos 10 usuarios a una sesión de retroalimentación sobre la nueva característica."

228* **Reaccione a eventos externos**: Un servidor MCP también puede actuar como un [canal](/es/channels) que envía mensajes a su sesión, para que Claude reaccione a mensajes de Telegram, chats de Discord o eventos de webhook mientras está fuera.

229 

230## Servidores MCP populares

231 

232Aquí hay algunos servidores MCP comúnmente utilizados que puede conectar a Claude Code:

233 

234<Warning>

235 Use servidores MCP de terceros bajo su propio riesgo - Anthropic no ha verificado

236 la corrección o seguridad de todos estos servidores.

237 Asegúrese de confiar en los servidores MCP que está instalando.

238 Tenga especial cuidado al usar servidores MCP que podrían obtener contenido no confiable,

239 ya que estos pueden exponerlo al riesgo de inyección de indicaciones.

240</Warning>

241 

242<MCPServersTable platform="claudeCode" />

243 

244<Note>

245 **¿Necesita una integración específica?** [Encuentre cientos más servidores MCP en GitHub](https://github.com/modelcontextprotocol/servers), o cree el suyo propio usando el [MCP SDK](https://modelcontextprotocol.io/quickstart/server).

246</Note>

247 

248## Instalación de servidores MCP

249 

250Los servidores MCP se pueden configurar de tres formas diferentes según sus necesidades:

251 

252### Opción 1: Agregar un servidor HTTP remoto

253 

254Los servidores HTTP son la opción recomendada para conectarse a servidores MCP remotos. Este es el transporte más ampliamente soportado para servicios basados en la nube.

255 

256```bash theme={null}

257# Sintaxis básica

258claude mcp add --transport http <name> <url>

259 

260# Ejemplo real: Conectar a Notion

261claude mcp add --transport http notion https://mcp.notion.com/mcp

262 

263# Ejemplo con token Bearer

264claude mcp add --transport http secure-api https://api.example.com/mcp \

265 --header "Authorization: Bearer your-token"

266```

267 

268### Opción 2: Agregar un servidor SSE remoto

269 

270<Warning>

271 El transporte SSE (Server-Sent Events) está deprecado. Use servidores HTTP en su lugar, donde estén disponibles.

272</Warning>

273 

274```bash theme={null}

275# Sintaxis básica

276claude mcp add --transport sse <name> <url>

277 

278# Ejemplo real: Conectar a Asana

279claude mcp add --transport sse asana https://mcp.asana.com/sse

280 

281# Ejemplo con encabezado de autenticación

282claude mcp add --transport sse private-api https://api.company.com/sse \

283 --header "X-API-Key: your-key-here"

284```

285 

286### Opción 3: Agregar un servidor stdio local

287 

288Los servidores stdio se ejecutan como procesos locales en su máquina. Son ideales para herramientas que necesitan acceso directo al sistema o scripts personalizados.

289 

290```bash theme={null}

291# Sintaxis básica

292claude mcp add [options] <name> -- <command> [args...]

293 

294# Ejemplo real: Agregar servidor Airtable

295claude mcp add --transport stdio --env AIRTABLE_API_KEY=YOUR_KEY airtable \

296 -- npx -y airtable-mcp-server

297```

298 

299<Note>

300 **Importante: Orden de opciones**

301 

302 Todas las opciones (`--transport`, `--env`, `--scope`, `--header`) deben venir **antes** del nombre del servidor. El `--` (doble guión) luego separa el nombre del servidor del comando y los argumentos que se pasan al servidor MCP.

303 

304 Por ejemplo:

305 

306 * `claude mcp add --transport stdio myserver -- npx server` → ejecuta `npx server`

307 * `claude mcp add --transport stdio --env KEY=value myserver -- python server.py --port 8080` → ejecuta `python server.py --port 8080` con `KEY=value` en el entorno

308 

309 Esto evita conflictos entre las banderas de Claude y las banderas del servidor.

310</Note>

311 

312### Gestión de sus servidores

313 

314Una vez configurados, puede gestionar sus servidores MCP con estos comandos:

315 

316```bash theme={null}

317# Listar todos los servidores configurados

318claude mcp list

319 

320# Obtener detalles para un servidor específico

321claude mcp get github

322 

323# Eliminar un servidor

324claude mcp remove github

325 

326# (dentro de Claude Code) Verificar estado del servidor

327/mcp

328```

329 

330### Actualizaciones dinámicas de herramientas

331 

332Claude Code admite notificaciones `list_changed` de MCP, permitiendo que los servidores MCP actualicen dinámicamente sus herramientas disponibles, indicaciones y recursos sin requerir que se desconecte y reconecte. Cuando un servidor MCP envía una notificación `list_changed`, Claude Code actualiza automáticamente las capacidades disponibles de ese servidor.

333 

334### Reconexión automática

335 

336Si un servidor HTTP o SSE se desconecta durante la sesión, Claude Code se reconecta automáticamente con retroceso exponencial: hasta cinco intentos, comenzando con un retraso de un segundo y duplicándose cada vez. El servidor aparece como pendiente en `/mcp` mientras la reconexión está en progreso. Después de cinco intentos fallidos, el servidor se marca como fallido y puede reintentar manualmente desde `/mcp`. Los servidores stdio son procesos locales y no se reconectan automáticamente.

337 

338El mismo retroceso se aplica cuando un servidor HTTP o SSE falla su conexión inicial al iniciar. A partir de v2.1.121, Claude Code reintenta la conexión inicial hasta tres veces en errores transitorios como una respuesta 5xx, una conexión rechazada o un tiempo de espera agotado, luego marca el servidor como fallido si aún no puede conectarse. Los errores de autenticación y no encontrado no se reintentan porque requieren un cambio de configuración para resolverse.

339 

340### Mensajes push con canales

341 

342Un servidor MCP también puede enviar mensajes directamente a su sesión para que Claude pueda reaccionar a eventos externos como resultados de CI, alertas de monitoreo o mensajes de chat. Para habilitar esto, su servidor declara la capacidad `claude/channel` y usted la activa con la bandera `--channels` al iniciar. Vea [Canales](/es/channels) para usar un canal oficialmente soportado, o [Referencia de canales](/es/channels-reference) para construir el suyo propio.

343 

344<Tip>

345 Consejos:

346 

347 * Use la bandera `--scope` para especificar dónde se almacena la configuración:

348 * `local` (predeterminado): Disponible solo para usted en el proyecto actual (se llamaba `project` en versiones anteriores)

349 * `project`: Compartido con todos en el proyecto a través del archivo `.mcp.json`

350 * `user`: Disponible para usted en todos los proyectos (se llamaba `global` en versiones anteriores)

351 * Establezca variables de entorno con banderas `--env` (por ejemplo, `--env KEY=value`)

352 * Configure el tiempo de espera de inicio del servidor MCP usando la variable de entorno MCP\_TIMEOUT (por ejemplo, `MCP_TIMEOUT=10000 claude` establece un tiempo de espera de 10 segundos)

353 * Claude Code mostrará una advertencia cuando la salida de la herramienta MCP exceda 10,000 tokens. Para aumentar este límite, establezca la variable de entorno `MAX_MCP_OUTPUT_TOKENS` (por ejemplo, `MAX_MCP_OUTPUT_TOKENS=50000`)

354 * Use `/mcp` para autenticarse con servidores remotos que requieren autenticación OAuth 2.0

355</Tip>

356 

357### Servidores MCP proporcionados por plugins

358 

359Los [plugins](/es/plugins) pueden agrupar servidores MCP, proporcionando automáticamente herramientas e integraciones cuando el plugin está habilitado. Los servidores MCP de plugins funcionan de manera idéntica a los servidores configurados por el usuario.

360 

361**Cómo funcionan los servidores MCP de plugins**:

362 

363* Los plugins definen servidores MCP en `.mcp.json` en la raíz del plugin o en línea en `plugin.json`

364* Cuando un plugin está habilitado, sus servidores MCP se inician automáticamente

365* Las herramientas MCP del plugin aparecen junto a las herramientas MCP configuradas manualmente

366* Los servidores de plugins se gestionan a través de la instalación de plugins (no mediante comandos `/mcp`)

367 

368**Ejemplo de configuración MCP de plugin**:

369 

370En `.mcp.json` en la raíz del plugin:

371 

372```json theme={null}

373{

374 "mcpServers": {

375 "database-tools": {

376 "command": "${CLAUDE_PLUGIN_ROOT}/servers/db-server",

377 "args": ["--config", "${CLAUDE_PLUGIN_ROOT}/config.json"],

378 "env": {

379 "DB_URL": "${DB_URL}"

380 }

381 }

382 }

383}

384```

385 

386O en línea en `plugin.json`:

387 

388```json theme={null}

389{

390 "name": "my-plugin",

391 "mcpServers": {

392 "plugin-api": {

393 "command": "${CLAUDE_PLUGIN_ROOT}/servers/api-server",

394 "args": ["--port", "8080"]

395 }

396 }

397}

398```

399 

400**Características de MCP de plugins**:

401 

402* **Ciclo de vida automático**: Al iniciar la sesión, los servidores de los plugins habilitados se conectan automáticamente. Si habilita o deshabilita un plugin durante una sesión, ejecute `/reload-plugins` para conectar o desconectar sus servidores MCP

403* **Variables de entorno**: Use `${CLAUDE_PLUGIN_ROOT}` para archivos agrupados en el plugin y `${CLAUDE_PLUGIN_DATA}` para [estado persistente](/es/plugins-reference#persistent-data-directory) que sobrevive a las actualizaciones de plugins

404* **Acceso a variables de entorno del usuario**: Acceso a las mismas variables de entorno que los servidores configurados manualmente

405* **Múltiples tipos de transporte**: Soporte para transportes stdio, SSE e HTTP (el soporte de transporte puede variar según el servidor)

406 

407**Visualización de servidores MCP de plugins**:

408 

409```bash theme={null}

410# Dentro de Claude Code, vea todos los servidores MCP incluyendo los de plugins

411/mcp

412```

413 

414Los servidores de plugins aparecen en la lista con indicadores que muestran que provienen de plugins.

415 

416**Beneficios de los servidores MCP de plugins**:

417 

418* **Distribución agrupada**: Herramientas y servidores empaquetados juntos

419* **Configuración automática**: No se necesita configuración manual de MCP

420* **Consistencia del equipo**: Todos obtienen las mismas herramientas cuando se instala el plugin

421 

422Vea la [referencia de componentes de plugins](/es/plugins-reference#mcp-servers) para detalles sobre cómo agrupar servidores MCP con plugins.

423 

424## Alcances de instalación de MCP

425 

426Los servidores MCP se pueden configurar en tres alcances diferentes según sus necesidades:

427 

428| Alcance | Se carga en | Compartido con equipo | Almacenado en |

429| -------------------------- | -------------------- | ------------------------------------- | ----------------------------------- |

430| [Local](#local-scope) | Solo proyecto actual | No | `~/.claude.json` |

431| [Proyecto](#project-scope) | Solo proyecto actual | Sí, a través del control de versiones | `.mcp.json` en la raíz del proyecto |

432| [Usuario](#user-scope) | Todos sus proyectos | No | `~/.claude.json` |

433 

434### Alcance local

435 

436El alcance local es el predeterminado. Un servidor con alcance local se carga solo en el proyecto donde lo agregó y permanece privado para usted. Claude Code lo almacena en `~/.claude.json` bajo la ruta de ese proyecto, por lo que el mismo servidor no aparecerá en sus otros proyectos. Use el alcance local para servidores de desarrollo personal, configuraciones experimentales o servidores con credenciales que no desea en el control de versiones.

437 

438<Note>

439 El término "alcance local" para servidores MCP difiere de la configuración local general. Los servidores MCP con alcance local se almacenan en `~/.claude.json` (su directorio de inicio), mientras que la configuración local general usa `.claude/settings.local.json` (en el directorio del proyecto). Vea [Configuración](/es/settings#settings-files) para detalles sobre ubicaciones de archivos de configuración.

440</Note>

441 

442```bash theme={null}

443# Agregar un servidor con alcance local (predeterminado)

444claude mcp add --transport http stripe https://mcp.stripe.com

445 

446# Especificar explícitamente alcance local

447claude mcp add --transport http stripe --scope local https://mcp.stripe.com

448```

449 

450El comando escribe el servidor en la entrada de su proyecto actual dentro de `~/.claude.json`. El ejemplo a continuación muestra el resultado cuando lo ejecuta desde `/path/to/your/project`:

451 

452```json theme={null}

453{

454 "projects": {

455 "/path/to/your/project": {

456 "mcpServers": {

457 "stripe": {

458 "type": "http",

459 "url": "https://mcp.stripe.com"

460 }

461 }

462 }

463 }

464}

465```

466 

467### Alcance de proyecto

468 

469Los servidores con alcance de proyecto habilitan la colaboración en equipo al almacenar configuraciones en un archivo `.mcp.json` en el directorio raíz de su proyecto. Este archivo está diseñado para ser verificado en el control de versiones, asegurando que todos los miembros del equipo tengan acceso a las mismas herramientas y servicios MCP. Cuando agrega un servidor con alcance de proyecto, Claude Code crea o actualiza automáticamente este archivo con la estructura de configuración apropiada.

470 

471```bash theme={null}

472# Agregar un servidor con alcance de proyecto

473claude mcp add --transport http paypal --scope project https://mcp.paypal.com/mcp

474```

475 

476El archivo `.mcp.json` resultante sigue un formato estandarizado:

477 

478```json theme={null}

479{

480 "mcpServers": {

481 "shared-server": {

482 "command": "/path/to/server",

483 "args": [],

484 "env": {}

485 }

486 }

487}

488```

489 

490Por razones de seguridad, Claude Code solicita aprobación antes de usar servidores con alcance de proyecto desde archivos `.mcp.json`. Si necesita restablecer estas opciones de aprobación, use el comando `claude mcp reset-project-choices`.

491 

492### Alcance de usuario

493 

494Los servidores con alcance de usuario se almacenan en `~/.claude.json` y proporcionan accesibilidad entre proyectos, haciéndolos disponibles en todos los proyectos en su máquina mientras permanecen privados para su cuenta de usuario. Este alcance funciona bien para servidores de utilidad personal, herramientas de desarrollo o servicios que usa frecuentemente en diferentes proyectos.

495 

496```bash theme={null}

497# Agregar un servidor de usuario

498claude mcp add --transport http hubspot --scope user https://mcp.hubspot.com/anthropic

499```

500 

501### Jerarquía de alcance y precedencia

502 

503Cuando el mismo servidor está definido en más de un lugar, Claude Code se conecta a él una sola vez, usando la definición de la fuente de mayor precedencia:

504 

5051. Alcance local

5062. Alcance de proyecto

5073. Alcance de usuario

5084. [Servidores proporcionados por plugins](/es/plugins)

5095. [Conectores de claude.ai](#use-mcp-servers-from-claude-ai)

510 

511Los tres alcances coinciden duplicados por nombre. Los plugins y conectores coinciden por punto final, por lo que uno que apunta a la misma URL o comando que un servidor anterior se trata como un duplicado.

512 

513### Expansión de variables de entorno en `.mcp.json`

514 

515Claude Code admite la expansión de variables de entorno en archivos `.mcp.json`, permitiendo que los equipos compartan configuraciones mientras mantienen flexibilidad para rutas específicas de máquinas y valores sensibles como claves API.

516 

517**Sintaxis soportada:**

518 

519* `${VAR}` - Se expande al valor de la variable de entorno `VAR`

520* `${VAR:-default}` - Se expande a `VAR` si está establecida, de lo contrario usa `default`

521 

522**Ubicaciones de expansión:**

523Las variables de entorno se pueden expandir en:

524 

525* `command` - La ruta del ejecutable del servidor

526* `args` - Argumentos de línea de comandos

527* `env` - Variables de entorno pasadas al servidor

528* `url` - Para tipos de servidor HTTP

529* `headers` - Para autenticación de servidor HTTP

530 

531**Ejemplo con expansión de variables:**

532 

533```json theme={null}

534{

535 "mcpServers": {

536 "api-server": {

537 "type": "http",

538 "url": "${API_BASE_URL:-https://api.example.com}/mcp",

539 "headers": {

540 "Authorization": "Bearer ${API_KEY}"

541 }

542 }

543 }

544}

545```

546 

547Si una variable de entorno requerida no está establecida y no tiene un valor predeterminado, Claude Code no podrá analizar la configuración.

548 

549## Ejemplos prácticos

550 

551{/* ### Ejemplo: Automatizar pruebas de navegador con Playwright

552 

553```bash

554claude mcp add --transport stdio playwright -- npx -y @playwright/mcp@latest

555```

556 

557Luego escriba y ejecute pruebas de navegador:

558 

559```text

560Test if the login flow works with test@example.com

561```

562```text

563Take a screenshot of the checkout page on mobile

564```

565```text

566Verify that the search feature returns results

567``` */}

568 

569### Ejemplo: Monitorear errores con Sentry

570 

571```bash theme={null}

572claude mcp add --transport http sentry https://mcp.sentry.dev/mcp

573```

574 

575Autentíquese con su cuenta de Sentry:

576 

577```text theme={null}

578/mcp

579```

580 

581Luego depure problemas de producción:

582 

583```text theme={null}

584¿Cuáles son los errores más comunes en las últimas 24 horas?

585```

586 

587```text theme={null}

588Muéstrame el seguimiento de pila para el error ID abc123

589```

590 

591```text theme={null}

592¿Qué despliegue introdujo estos nuevos errores?

593```

594 

595### Ejemplo: Conectar a GitHub para revisiones de código

596 

597El servidor MCP remoto de GitHub se autentica con un token de acceso personal de GitHub pasado como encabezado. Para obtener uno, abra su [configuración de token de GitHub](https://github.com/settings/personal-access-tokens), genere un nuevo token de grano fino con acceso a los repositorios con los que desea que Claude trabaje, luego agregue el servidor:

598 

599```bash theme={null}

600claude mcp add --transport http github https://api.githubcopilot.com/mcp/ \

601 --header "Authorization: Bearer YOUR_GITHUB_PAT"

602```

603 

604Luego trabaje con GitHub:

605 

606```text theme={null}

607Revise el PR #456 y sugiera mejoras

608```

609 

610```text theme={null}

611Cree un nuevo problema para el error que acabamos de encontrar

612```

613 

614```text theme={null}

615Muéstrame todos los PR abiertos asignados a mí

616```

617 

618### Ejemplo: Consultar su base de datos PostgreSQL

619 

620```bash theme={null}

621claude mcp add --transport stdio db -- npx -y @bytebase/dbhub \

622 --dsn "postgresql://readonly:pass@prod.db.com:5432/analytics"

623```

624 

625Luego consulte su base de datos de forma natural:

626 

627```text theme={null}

628¿Cuál es nuestro ingreso total este mes?

629```

630 

631```text theme={null}

632Muéstrame el esquema para la tabla de pedidos

633```

634 

635```text theme={null}

636Encuentre clientes que no han realizado una compra en 90 días

637```

638 

639## Autenticarse con servidores MCP remotos

640 

641Muchos servidores MCP basados en la nube requieren autenticación. Claude Code admite OAuth 2.0 para conexiones seguras.

642 

643<Steps>

644 <Step title="Agregar el servidor que requiere autenticación">

645 Por ejemplo:

646 

647 ```bash theme={null}

648 claude mcp add --transport http sentry https://mcp.sentry.dev/mcp

649 ```

650 </Step>

651 

652 <Step title="Use el comando /mcp dentro de Claude Code">

653 En Claude Code, use el comando:

654 

655 ```text theme={null}

656 /mcp

657 ```

658 

659 Luego siga los pasos en su navegador para iniciar sesión.

660 </Step>

661</Steps>

662 

663<Tip>

664 Consejos:

665 

666 * Los tokens de autenticación se almacenan de forma segura y se actualizan automáticamente

667 * Use "Clear authentication" en el menú `/mcp` para revocar el acceso

668 * Si su navegador no se abre automáticamente, copie la URL proporcionada y ábrala manualmente

669 * Si el redireccionamiento del navegador falla con un error de conexión después de autenticarse, pegue la URL de devolución de llamada completa de la barra de direcciones de su navegador en el indicador de URL que aparece en Claude Code

670 * La autenticación OAuth funciona con servidores HTTP

671</Tip>

672 

673### Usar un puerto de devolución de llamada OAuth fijo

674 

675Algunos servidores MCP requieren un URI de redireccionamiento específico registrado de antemano. De forma predeterminada, Claude Code elige un puerto disponible aleatorio para la devolución de llamada de OAuth. Use `--callback-port` para fijar el puerto de modo que coincida con un URI de redireccionamiento preregistrado de la forma `http://localhost:PORT/callback`.

676 

677Puede usar `--callback-port` por sí solo (con registro dinámico de clientes) o junto con `--client-id` (con credenciales preconfiguradas).

678 

679```bash theme={null}

680# Puerto de devolución de llamada fijo con registro dinámico de clientes

681claude mcp add --transport http \

682 --callback-port 8080 \

683 my-server https://mcp.example.com/mcp

684```

685 

686### Usar credenciales OAuth preconfiguradas

687 

688Algunos servidores MCP no admiten configuración automática de OAuth mediante Registro Dinámico de Clientes. Si ve un error como "Incompatible auth server: does not support dynamic client registration", el servidor requiere credenciales preconfiguradas. Claude Code también admite servidores que usan un Documento de Metadatos de ID de Cliente (CIMD) en lugar de Registro Dinámico de Clientes, y los descubre automáticamente. Si el descubrimiento automático falla, registre una aplicación OAuth a través del portal de desarrolladores del servidor primero, luego proporcione las credenciales al agregar el servidor.

689 

690<Steps>

691 <Step title="Registrar una aplicación OAuth con el servidor">

692 Cree una aplicación a través del portal de desarrolladores del servidor y anote su ID de cliente y secreto de cliente.

693 

694 Muchos servidores también requieren un URI de redireccionamiento. Si es así, elija un puerto y registre un URI de redireccionamiento en el formato `http://localhost:PORT/callback`. Use ese mismo puerto con `--callback-port` en el siguiente paso.

695 </Step>

696 

697 <Step title="Agregar el servidor con sus credenciales">

698 Elija uno de los siguientes métodos. El puerto utilizado para `--callback-port` puede ser cualquier puerto disponible. Solo necesita coincidir con el URI de redireccionamiento que registró en el paso anterior.

699 

700 <Tabs>

701 <Tab title="claude mcp add">

702 Use `--client-id` para pasar el ID de cliente de su aplicación. La bandera `--client-secret` solicita el secreto con entrada enmascarada:

703 

704 ```bash theme={null}

705 claude mcp add --transport http \

706 --client-id your-client-id --client-secret --callback-port 8080 \

707 my-server https://mcp.example.com/mcp

708 ```

709 </Tab>

710 

711 <Tab title="claude mcp add-json">

712 Incluya el objeto `oauth` en la configuración JSON y pase `--client-secret` como una bandera separada:

713 

714 ```bash theme={null}

715 claude mcp add-json my-server \

716 '{"type":"http","url":"https://mcp.example.com/mcp","oauth":{"clientId":"your-client-id","callbackPort":8080}}' \

717 --client-secret

718 ```

719 </Tab>

720 

721 <Tab title="claude mcp add-json (solo puerto de devolución de llamada)">

722 Use `--callback-port` sin un ID de cliente para fijar el puerto mientras usa registro dinámico de clientes:

723 

724 ```bash theme={null}

725 claude mcp add-json my-server \

726 '{"type":"http","url":"https://mcp.example.com/mcp","oauth":{"callbackPort":8080}}'

727 ```

728 </Tab>

729 

730 <Tab title="CI / variable de entorno">

731 Establezca el secreto a través de una variable de entorno para omitir el indicador interactivo:

732 

733 ```bash theme={null}

734 MCP_CLIENT_SECRET=your-secret claude mcp add --transport http \

735 --client-id your-client-id --client-secret --callback-port 8080 \

736 my-server https://mcp.example.com/mcp

737 ```

738 </Tab>

739 </Tabs>

740 </Step>

741 

742 <Step title="Autenticarse en Claude Code">

743 Ejecute `/mcp` en Claude Code y siga el flujo de inicio de sesión del navegador.

744 </Step>

745</Steps>

746 

747<Tip>

748 Consejos:

749 

750 * El secreto del cliente se almacena de forma segura en su llavero del sistema (macOS) o un archivo de credenciales, no en su configuración

751 * Si el servidor usa un cliente OAuth público sin secreto, use solo `--client-id` sin `--client-secret`

752 * `--callback-port` se puede usar con o sin `--client-id`

753 * Estas banderas solo se aplican a transportes HTTP y SSE. No tienen efecto en servidores stdio

754 * Use `claude mcp get <name>` para verificar que las credenciales OAuth estén configuradas para un servidor

755</Tip>

756 

757### Anular el descubrimiento de metadatos de OAuth

758 

759Apunte Claude Code a una URL de metadatos de servidor de autorización OAuth específica para omitir la cadena de descubrimiento predeterminada. De forma predeterminada, Claude Code primero verifica los Metadatos de Recursos Protegidos RFC 9728 en `/.well-known/oauth-protected-resource`, luego recurre a los metadatos del servidor de autorización RFC 8414 en `/.well-known/oauth-authorization-server`.

760 

761Establezca `authServerMetadataUrl` en el objeto `oauth` de la configuración de su servidor en `.mcp.json`:

762 

763```json theme={null}

764{

765 "mcpServers": {

766 "my-server": {

767 "type": "http",

768 "url": "https://mcp.example.com/mcp",

769 "oauth": {

770 "authServerMetadataUrl": "https://auth.example.com/.well-known/openid-configuration"

771 }

772 }

773 }

774}

775```

776 

777La URL debe usar `https://`. `authServerMetadataUrl` requiere Claude Code v2.1.64 o posterior. Los `scopes_supported` de la URL de metadatos anulan los alcances que el servidor ascendente anuncia.

778 

779### Restringir alcances de OAuth

780 

781Establezca `oauth.scopes` para fijar los alcances que Claude Code solicita durante el flujo de autorización. Esta es la forma soportada de restringir un servidor MCP a un subconjunto aprobado por el equipo de seguridad cuando el servidor de autorización ascendente anuncia más alcances de los que desea otorgar. El valor es una cadena única separada por espacios, que coincide con el formato del parámetro `scope` en RFC 6749 §3.3.

782 

783```json theme={null}

784{

785 "mcpServers": {

786 "slack": {

787 "type": "http",

788 "url": "https://mcp.slack.com/mcp",

789 "oauth": {

790 "scopes": "channels:read chat:write search:read"

791 }

792 }

793 }

794}

795```

796 

797`oauth.scopes` tiene precedencia sobre tanto `authServerMetadataUrl` como los alcances que el servidor descubre en `/.well-known`. Déjelo sin establecer para permitir que el servidor MCP determine el conjunto de alcances solicitados.

798 

799Si el servidor de autorización anuncia `offline_access` en `scopes_supported`, Claude Code lo añade a los alcances fijados para que el token de acceso pueda actualizarse sin un nuevo inicio de sesión en el navegador.

800 

801Si el servidor luego devuelve un 403 `insufficient_scope` para una llamada de herramienta, Claude Code se reautentica con los mismos alcances fijados. Amplíe `oauth.scopes` cuando una herramienta que necesita requiera un alcance fuera del fijo.

802 

803### Usar encabezados dinámicos para autenticación personalizada

804 

805Si su servidor MCP usa un esquema de autenticación diferente a OAuth (como Kerberos, tokens de corta duración o un SSO interno), use `headersHelper` para generar encabezados de solicitud en el momento de la conexión. Claude Code ejecuta el comando y fusiona su salida en los encabezados de conexión.

806 

807```json theme={null}

808{

809 "mcpServers": {

810 "internal-api": {

811 "type": "http",

812 "url": "https://mcp.internal.example.com",

813 "headersHelper": "/opt/bin/get-mcp-auth-headers.sh"

814 }

815 }

816}

817```

818 

819El comando también puede ser en línea:

820 

821```json theme={null}

822{

823 "mcpServers": {

824 "internal-api": {

825 "type": "http",

826 "url": "https://mcp.internal.example.com",

827 "headersHelper": "echo '{\"Authorization\": \"Bearer '\"$(get-token)\"'\"}'"

828 }

829 }

830}

831```

832 

833**Requisitos:**

834 

835* El comando debe escribir un objeto JSON de pares clave-valor de cadena en stdout

836* El comando se ejecuta en un shell con un tiempo de espera de 10 segundos

837* Los encabezados dinámicos anulan cualquier `headers` estático con el mismo nombre

838 

839El ayudante se ejecuta nuevamente en cada conexión (al iniciar la sesión y al reconectar). No hay almacenamiento en caché, por lo que su script es responsable de cualquier reutilización de tokens.

840 

841Claude Code establece estas variables de entorno al ejecutar el ayudante:

842 

843| Variable | Valor |

844| :---------------------------- | :------------------------- |

845| `CLAUDE_CODE_MCP_SERVER_NAME` | el nombre del servidor MCP |

846| `CLAUDE_CODE_MCP_SERVER_URL` | la URL del servidor MCP |

847 

848Use estas para escribir un único script de ayudante que sirva múltiples servidores MCP.

849 

850<Note>

851 `headersHelper` ejecuta comandos de shell arbitrarios. Cuando se define en alcance de proyecto o local, solo se ejecuta después de que acepte el diálogo de confianza del espacio de trabajo.

852</Note>

853 

854## Agregar servidores MCP desde configuración JSON

855 

856Si tiene una configuración JSON para un servidor MCP, puede agregarla directamente:

857 

858<Steps>

859 <Step title="Agregar un servidor MCP desde JSON">

860 ```bash theme={null}

861 # Sintaxis básica

862 claude mcp add-json <name> '<json>'

863 

864 # Ejemplo: Agregar un servidor HTTP con configuración JSON

865 claude mcp add-json weather-api '{"type":"http","url":"https://api.weather.com/mcp","headers":{"Authorization":"Bearer token"}}'

866 

867 # Ejemplo: Agregar un servidor stdio con configuración JSON

868 claude mcp add-json local-weather '{"type":"stdio","command":"/path/to/weather-cli","args":["--api-key","abc123"],"env":{"CACHE_DIR":"/tmp"}}'

869 

870 # Ejemplo: Agregar un servidor HTTP con credenciales OAuth preconfiguradas

871 claude mcp add-json my-server '{"type":"http","url":"https://mcp.example.com/mcp","oauth":{"clientId":"your-client-id","callbackPort":8080}}' --client-secret

872 ```

873 </Step>

874 

875 <Step title="Verificar que el servidor fue agregado">

876 ```bash theme={null}

877 claude mcp get weather-api

878 ```

879 </Step>

880</Steps>

881 

882<Tip>

883 Consejos:

884 

885 * Asegúrese de que el JSON esté correctamente escapado en su shell

886 * El JSON debe cumplir con el esquema de configuración del servidor MCP

887 * Puede usar `--scope user` para agregar el servidor a su configuración de usuario en lugar de la específica del proyecto

888</Tip>

889 

890## Importar servidores MCP desde Claude Desktop

891 

892Si ya ha configurado servidores MCP en Claude Desktop, puede importarlos:

893 

894<Steps>

895 <Step title="Importar servidores desde Claude Desktop">

896 ```bash theme={null}

897 # Sintaxis básica

898 claude mcp add-from-claude-desktop

899 ```

900 </Step>

901 

902 <Step title="Seleccionar qué servidores importar">

903 Después de ejecutar el comando, verá un diálogo interactivo que le permite seleccionar qué servidores desea importar.

904 </Step>

905 

906 <Step title="Verificar que los servidores fueron importados">

907 ```bash theme={null}

908 claude mcp list

909 ```

910 </Step>

911</Steps>

912 

913<Tip>

914 Consejos:

915 

916 * Esta característica solo funciona en macOS y Windows Subsystem for Linux (WSL)

917 * Lee el archivo de configuración de Claude Desktop desde su ubicación estándar en esas plataformas

918 * Use la bandera `--scope user` para agregar servidores a su configuración de usuario

919 * Los servidores importados tendrán los mismos nombres que en Claude Desktop

920 * Si ya existen servidores con los mismos nombres, obtendrán un sufijo numérico (por ejemplo, `server_1`)

921</Tip>

922 

923## Usar servidores MCP desde Claude.ai

924 

925Si ha iniciado sesión en Claude Code con una cuenta de [Claude.ai](https://claude.ai), los servidores MCP que ha agregado en Claude.ai están automáticamente disponibles en Claude Code:

926 

927<Steps>

928 <Step title="Configurar servidores MCP en Claude.ai">

929 Agregue servidores en [claude.ai/customize/connectors](https://claude.ai/customize/connectors). En planes de Equipo y Empresa, solo los administradores pueden agregar servidores.

930 </Step>

931 

932 <Step title="Autenticar el servidor MCP">

933 Complete los pasos de autenticación requeridos en Claude.ai.

934 </Step>

935 

936 <Step title="Ver y gestionar servidores en Claude Code">

937 En Claude Code, use el comando:

938 

939 ```text theme={null}

940 /mcp

941 ```

942 

943 Los servidores de Claude.ai aparecen en la lista con indicadores que muestran que provienen de Claude.ai.

944 </Step>

945</Steps>

946 

947Para desactivar servidores MCP de Claude.ai en Claude Code, establezca la variable de entorno `ENABLE_CLAUDEAI_MCP_SERVERS` en `false`:

948 

949```bash theme={null}

950ENABLE_CLAUDEAI_MCP_SERVERS=false claude

951```

952 

953## Usar Claude Code como servidor MCP

954 

955Puede usar Claude Code mismo como servidor MCP al que otras aplicaciones pueden conectarse:

956 

957```bash theme={null}

958# Iniciar Claude como servidor MCP stdio

959claude mcp serve

960```

961 

962Puede usar esto en Claude Desktop agregando esta configuración a claude\_desktop\_config.json:

963 

964```json theme={null}

965{

966 "mcpServers": {

967 "claude-code": {

968 "type": "stdio",

969 "command": "claude",

970 "args": ["mcp", "serve"],

971 "env": {}

972 }

973 }

974}

975```

976 

977<Warning>

978 **Configurar la ruta del ejecutable**: El campo `command` debe hacer referencia al ejecutable de Claude Code. Si el comando `claude` no está en el PATH del sistema, deberá especificar la ruta completa al ejecutable.

979 

980 Para encontrar la ruta completa:

981 

982 ```bash theme={null}

983 which claude

984 ```

985 

986 Luego use la ruta completa en su configuración:

987 

988 ```json theme={null}

989 {

990 "mcpServers": {

991 "claude-code": {

992 "type": "stdio",

993 "command": "/full/path/to/claude",

994 "args": ["mcp", "serve"],

995 "env": {}

996 }

997 }

998 }

999 ```

1000 

1001 Sin la ruta correcta del ejecutable, encontrará errores como `spawn claude ENOENT`.

1002</Warning>

1003 

1004<Tip>

1005 Consejos:

1006 

1007 * El servidor proporciona acceso a las herramientas de Claude como View, Edit, LS, etc.

1008 * En Claude Desktop, intente pedirle a Claude que lea archivos en un directorio, haga ediciones y más.

1009 * Tenga en cuenta que este servidor MCP solo expone las herramientas de Claude Code a su cliente MCP, por lo que su propio cliente es responsable de implementar la confirmación del usuario para llamadas de herramientas individuales.

1010</Tip>

1011 

1012## Límites de salida de MCP y advertencias

1013 

1014Cuando las herramientas MCP producen salidas grandes, Claude Code ayuda a gestionar el uso de tokens para evitar abrumar el contexto de su conversación:

1015 

1016* **Umbral de advertencia de salida**: Claude Code muestra una advertencia cuando la salida de cualquier herramienta MCP excede 10,000 tokens

1017* **Límite configurable**: Puede ajustar los tokens de salida MCP máximos permitidos usando la variable de entorno `MAX_MCP_OUTPUT_TOKENS`

1018* **Límite predeterminado**: El máximo predeterminado es 25,000 tokens

1019* **Alcance**: La variable de entorno se aplica a herramientas que no declaran su propio límite. Las herramientas que establecen [`anthropic/maxResultSizeChars`](#raise-the-limit-for-a-specific-tool) usan ese valor en su lugar para contenido de texto, independientemente de lo que `MAX_MCP_OUTPUT_TOKENS` esté establecido. Las herramientas que devuelven datos de imagen aún están sujetas a `MAX_MCP_OUTPUT_TOKENS`

1020 

1021Para aumentar el límite para herramientas que producen salidas grandes:

1022 

1023```bash theme={null}

1024export MAX_MCP_OUTPUT_TOKENS=50000

1025claude

1026```

1027 

1028Esto es particularmente útil cuando se trabaja con servidores MCP que:

1029 

1030* Consultan grandes conjuntos de datos o bases de datos

1031* Generan reportes o documentación detallados

1032* Procesan archivos de registro extensos o información de depuración

1033 

1034### Aumentar el límite para una herramienta específica

1035 

1036Si está construyendo un servidor MCP, puede permitir que herramientas individuales devuelvan resultados más grandes que el umbral predeterminado de persistencia en disco estableciendo `_meta["anthropic/maxResultSizeChars"]` en la entrada de la herramienta en la respuesta `tools/list`. Claude Code aumenta el umbral de esa herramienta al valor anotado, hasta un límite máximo de 500,000 caracteres.

1037 

1038Esto es útil para herramientas que devuelven salidas inherentemente grandes pero necesarias, como esquemas de bases de datos o árboles de archivos completos. Sin la anotación, los resultados que exceden el umbral predeterminado se persisten en disco y se reemplazan con una referencia de archivo en la conversación.

1039 

1040```json theme={null}

1041{

1042 "name": "get_schema",

1043 "description": "Returns the full database schema",

1044 "_meta": {

1045 "anthropic/maxResultSizeChars": 200000

1046 }

1047}

1048```

1049 

1050La anotación se aplica independientemente de `MAX_MCP_OUTPUT_TOKENS` para contenido de texto, por lo que los usuarios no necesitan aumentar la variable de entorno para herramientas que la declaran. Las herramientas que devuelven datos de imagen aún están sujetas al límite de tokens.

1051 

1052<Warning>

1053 Si frecuentemente encuentra advertencias de salida con servidores MCP específicos que no controla, considere aumentar el límite `MAX_MCP_OUTPUT_TOKENS`. También puede pedirle al autor del servidor que agregue la anotación `anthropic/maxResultSizeChars` o que pagine sus respuestas. La anotación no tiene efecto en herramientas que devuelven contenido de imagen; para esas, aumentar `MAX_MCP_OUTPUT_TOKENS` es la única opción.

1054</Warning>

1055 

1056## Responder a solicitudes de elicitación de MCP

1057 

1058Los servidores MCP pueden solicitar entrada estructurada de usted durante una tarea usando elicitación. Cuando un servidor necesita información que no puede obtener por sí solo, Claude Code muestra un diálogo interactivo y pasa su respuesta de vuelta al servidor. No se requiere configuración de su parte: los diálogos de elicitación aparecen automáticamente cuando un servidor los solicita.

1059 

1060Los servidores pueden solicitar entrada de dos formas:

1061 

1062* **Modo de formulario**: Claude Code muestra un diálogo con campos de formulario definidos por el servidor (por ejemplo, un indicador de nombre de usuario y contraseña). Complete los campos y envíe.

1063* **Modo de URL**: Claude Code abre una URL del navegador para autenticación o aprobación. Complete el flujo en el navegador, luego confirme en la CLI.

1064 

1065Para responder automáticamente a solicitudes de elicitación sin mostrar un diálogo, use el [hook `Elicitation`](/es/hooks#Elicitation).

1066 

1067Si está construyendo un servidor MCP que usa elicitación, vea la [especificación de elicitación de MCP](https://modelcontextprotocol.io/docs/learn/client-concepts#elicitation) para detalles de protocolo y ejemplos de esquema.

1068 

1069## Usar recursos MCP

1070 

1071Los servidores MCP pueden exponer recursos que puede referenciar usando menciones @, similar a cómo referencia archivos.

1072 

1073### Referenciar recursos MCP

1074 

1075<Steps>

1076 <Step title="Listar recursos disponibles">

1077 Escriba `@` en su indicación para ver los recursos disponibles de todos los servidores MCP conectados. Los recursos aparecen junto a los archivos en el menú de autocompletado.

1078 </Step>

1079 

1080 <Step title="Referenciar un recurso específico">

1081 Use el formato `@server:protocol://resource/path` para referenciar un recurso:

1082 

1083 ```text theme={null}

1084 ¿Puede analizar @github:issue://123 y sugerir una solución?

1085 ```

1086 

1087 ```text theme={null}

1088 Por favor revise la documentación de API en @docs:file://api/authentication

1089 ```

1090 </Step>

1091 

1092 <Step title="Múltiples referencias de recursos">

1093 Puede referenciar múltiples recursos en una sola indicación:

1094 

1095 ```text theme={null}

1096 Compare @postgres:schema://users con @docs:file://database/user-model

1097 ```

1098 </Step>

1099</Steps>

1100 

1101<Tip>

1102 Consejos:

1103 

1104 * Los recursos se obtienen automáticamente e incluyen como adjuntos cuando se referencian

1105 * Las rutas de recursos son búsquedas difusas en el autocompletado de menciones @

1106 * Claude Code proporciona automáticamente herramientas para listar y leer recursos MCP cuando los servidores los admiten

1107 * Los recursos pueden contener cualquier tipo de contenido que proporcione el servidor MCP (texto, JSON, datos estructurados, etc.)

1108</Tip>

1109 

1110## Escalar con MCP Tool Search

1111 

1112Tool Search mantiene el uso de contexto MCP bajo al diferir las definiciones de herramientas hasta que Claude las necesite. Solo los nombres de herramientas se cargan al iniciar la sesión, por lo que agregar más servidores MCP tiene un impacto mínimo en su ventana de contexto.

1113 

1114### Cómo funciona

1115 

1116Tool Search está habilitado de forma predeterminada. Las herramientas MCP se difieren en lugar de cargarse en el contexto de antemano, y Claude usa una herramienta de búsqueda para descubrir las relevantes cuando una tarea las necesita. Solo las herramientas que Claude realmente usa entran en el contexto. Desde su perspectiva, las herramientas MCP funcionan exactamente como antes.

1117 

1118Si prefiere carga basada en umbral, establezca `ENABLE_TOOL_SEARCH=auto` para cargar esquemas de antemano cuando se ajusten dentro del 10% de la ventana de contexto y diferir solo el desbordamiento. Vea [Configurar búsqueda de herramientas](#configure-tool-search) para todas las opciones.

1119 

1120### Para autores de servidores MCP

1121 

1122Si está construyendo un servidor MCP, el campo de instrucciones del servidor se vuelve más útil con Tool Search habilitado. Las instrucciones del servidor ayudan a Claude a entender cuándo buscar sus herramientas, similar a cómo funcionan las [skills](/es/skills).

1123 

1124Agregue instrucciones claras y descriptivas del servidor que expliquen:

1125 

1126* Qué categoría de tareas manejan sus herramientas

1127* Cuándo Claude debe buscar sus herramientas

1128* Capacidades clave que proporciona su servidor

1129 

1130Claude Code trunca descripciones de herramientas e instrucciones del servidor en 2KB cada una. Manténgalas concisas para evitar truncamiento, y ponga detalles críticos cerca del inicio.

1131 

1132### Configurar búsqueda de herramientas

1133 

1134Tool Search está habilitado de forma predeterminada: las herramientas MCP se difieren y se descubren bajo demanda. Está deshabilitado de forma predeterminada en Vertex AI, que no acepta el encabezado beta de búsqueda de herramientas, y cuando `ANTHROPIC_BASE_URL` apunta a un host que no es de primera parte, ya que la mayoría de los proxies no reenvían bloques `tool_reference`. Establezca `ENABLE_TOOL_SEARCH` explícitamente para optar por participar. Esta característica requiere modelos que admitan bloques `tool_reference`: Sonnet 4 y posterior, u Opus 4 y posterior. Los modelos Haiku no admiten búsqueda de herramientas.

1135 

1136Controle el comportamiento de búsqueda de herramientas con la variable de entorno `ENABLE_TOOL_SEARCH`:

1137 

1138| Valor | Comportamiento |

1139| :--------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

1140| (sin establecer) | Todas las herramientas MCP diferidas y cargadas bajo demanda. Recurre a carga de antemano en Vertex AI o cuando `ANTHROPIC_BASE_URL` es un host que no es de primera parte |

1141| `true` | Todas las herramientas MCP diferidas, incluyendo en Vertex AI y para `ANTHROPIC_BASE_URL` que no es de primera parte |

1142| `auto` | Modo de umbral: las herramientas se cargan de antemano si se ajustan dentro del 10% de la ventana de contexto, diferidas de lo contrario |

1143| `auto:<N>` | Modo de umbral con un porcentaje personalizado, donde `<N>` es 0-100 (p. ej., `auto:5` para 5%) |

1144| `false` | Todas las herramientas MCP cargadas de antemano, sin diferimiento |

1145 

1146```bash theme={null}

1147# Usar un umbral personalizado del 5%

1148ENABLE_TOOL_SEARCH=auto:5 claude

1149 

1150# Desactivar búsqueda de herramientas completamente

1151ENABLE_TOOL_SEARCH=false claude

1152```

1153 

1154O establezca el valor en su [campo `env` de settings.json](/es/settings#available-settings).

1155 

1156También puede desactivar la herramienta `ToolSearch` específicamente:

1157 

1158```json theme={null}

1159{

1160 "permissions": {

1161 "deny": ["ToolSearch"]

1162 }

1163}

1164```

1165 

1166### Eximir un servidor del diferimiento

1167 

1168Si las herramientas de un servidor deben ser siempre visibles para Claude sin un paso de búsqueda, establezca `alwaysLoad` en `true` en la configuración de ese servidor. Cada herramienta de ese servidor se carga entonces en el contexto al iniciar la sesión independientemente de la configuración `ENABLE_TOOL_SEARCH`. Use esto para un pequeño número de herramientas que Claude necesita en cada turno, ya que cada herramienta de antemano consume contexto que de otro modo estaría disponible para su conversación.

1169 

1170La siguiente entrada `.mcp.json` exime un servidor HTTP mientras deja otros servidores diferidos:

1171 

1172```json theme={null}

1173{

1174 "mcpServers": {

1175 "core-tools": {

1176 "type": "http",

1177 "url": "https://mcp.example.com/mcp",

1178 "alwaysLoad": true

1179 }

1180 }

1181}

1182```

1183 

1184El campo `alwaysLoad` está disponible en todos los tipos de servidor y requiere Claude Code v2.1.121 o posterior. Un servidor MCP también puede marcar herramientas individuales como siempre cargadas incluyendo `"anthropic/alwaysLoad": true` en el objeto `_meta` de la herramienta, que tiene el mismo efecto solo para esa herramienta.

1185 

1186## Usar indicaciones MCP como comandos

1187 

1188Los servidores MCP pueden exponer indicaciones que se vuelven disponibles como comandos en Claude Code.

1189 

1190### Ejecutar indicaciones MCP

1191 

1192<Steps>

1193 <Step title="Descubrir indicaciones disponibles">

1194 Escriba `/` para ver todos los comandos disponibles, incluyendo los de servidores MCP. Las indicaciones MCP aparecen con el formato `/mcp__servername__promptname`.

1195 </Step>

1196 

1197 <Step title="Ejecutar una indicación sin argumentos">

1198 ```text theme={null}

1199 /mcp__github__list_prs

1200 ```

1201 </Step>

1202 

1203 <Step title="Ejecutar una indicación con argumentos">

1204 Muchas indicaciones aceptan argumentos. Páselos separados por espacios después del comando:

1205 

1206 ```text theme={null}

1207 /mcp__github__pr_review 456

1208 ```

1209 

1210 ```text theme={null}

1211 /mcp__jira__create_issue "Bug en flujo de inicio de sesión" high

1212 ```

1213 </Step>

1214</Steps>

1215 

1216<Tip>

1217 Consejos:

1218 

1219 * Las indicaciones MCP se descubren dinámicamente desde servidores conectados

1220 * Los argumentos se analizan basándose en los parámetros definidos de la indicación

1221 * Los resultados de la indicación se inyectan directamente en la conversación

1222 * Los nombres de servidor e indicación se normalizan (los espacios se convierten en guiones bajos)

1223</Tip>

1224 

1225## Configuración MCP gestionada

1226 

1227Para organizaciones que necesitan control centralizado sobre servidores MCP, Claude Code admite dos opciones de configuración:

1228 

12291. **Control exclusivo con `managed-mcp.json`**: Implemente un conjunto fijo de servidores MCP que los usuarios no pueden modificar ni extender

12302. **Control basado en políticas con listas de permitidos/bloqueados**: Permita que los usuarios agreguen sus propios servidores, pero restrinja cuáles están permitidos

1231 

1232Estas opciones permiten a los administradores de TI:

1233 

1234* **Controlar a qué servidores MCP pueden acceder los empleados**: Implemente un conjunto estandarizado de servidores MCP aprobados en toda la organización

1235* **Prevenir servidores MCP no autorizados**: Restrinja a los usuarios de agregar servidores MCP no aprobados

1236* **Desactivar MCP completamente**: Elimine completamente la funcionalidad MCP si es necesario

1237 

1238### Opción 1: Control exclusivo con managed-mcp.json

1239 

1240Cuando implementa un archivo `managed-mcp.json`, toma **control exclusivo** sobre todos los servidores MCP. Los usuarios no pueden agregar, modificar ni usar ningún servidor MCP que no esté definido en este archivo. Este es el enfoque más simple para organizaciones que desean control completo.

1241 

1242Los administradores del sistema implementan el archivo de configuración en un directorio de todo el sistema:

1243 

1244* macOS: `/Library/Application Support/ClaudeCode/managed-mcp.json`

1245* Linux y WSL: `/etc/claude-code/managed-mcp.json`

1246* Windows: `C:\Program Files\ClaudeCode\managed-mcp.json`

1247 

1248<Note>

1249 Estas son rutas de todo el sistema (no directorios de inicio de usuario como `~/Library/...`) que requieren privilegios de administrador. Están diseñadas para ser implementadas por administradores de TI.

1250</Note>

1251 

1252El archivo `managed-mcp.json` usa el mismo formato que un archivo `.mcp.json` estándar:

1253 

1254```json theme={null}

1255{

1256 "mcpServers": {

1257 "github": {

1258 "type": "http",

1259 "url": "https://api.githubcopilot.com/mcp/"

1260 },

1261 "sentry": {

1262 "type": "http",

1263 "url": "https://mcp.sentry.dev/mcp"

1264 },

1265 "company-internal": {

1266 "type": "stdio",

1267 "command": "/usr/local/bin/company-mcp-server",

1268 "args": ["--config", "/etc/company/mcp-config.json"],

1269 "env": {

1270 "COMPANY_API_URL": "https://internal.company.com"

1271 }

1272 }

1273 }

1274}

1275```

1276 

1277### Opción 2: Control basado en políticas con listas de permitidos y bloqueados

1278 

1279En lugar de tomar control exclusivo, los administradores pueden permitir que los usuarios configuren sus propios servidores MCP mientras aplican restricciones sobre qué servidores están permitidos. Este enfoque usa `allowedMcpServers` y `deniedMcpServers` en el [archivo de configuración gestionada](/es/settings#settings-files).

1280 

1281<Note>

1282 **Elegir entre opciones**: Use la Opción 1 (`managed-mcp.json`) cuando desee implementar un conjunto fijo de servidores sin personalización del usuario. Use la Opción 2 (listas de permitidos/bloqueados) cuando desee permitir que los usuarios agreguen sus propios servidores dentro de restricciones de política.

1283</Note>

1284 

1285#### Opciones de restricción

1286 

1287Cada entrada en la lista de permitidos o bloqueados puede restringir servidores de tres formas:

1288 

12891. **Por nombre de servidor** (`serverName`): Coincide con el nombre configurado del servidor

12902. **Por comando** (`serverCommand`): Coincide con el comando exacto y los argumentos utilizados para iniciar servidores stdio

12913. **Por patrón de URL** (`serverUrl`): Coincide con URLs de servidor remoto con soporte de comodín

1292 

1293**Importante**: Cada entrada debe tener exactamente uno de `serverName`, `serverCommand` o `serverUrl`.

1294 

1295#### Configuración de ejemplo

1296 

1297```json theme={null}

1298{

1299 "allowedMcpServers": [

1300 // Permitir por nombre de servidor

1301 { "serverName": "github" },

1302 { "serverName": "sentry" },

1303 

1304 // Permitir por comando exacto (para servidores stdio)

1305 { "serverCommand": ["npx", "-y", "@modelcontextprotocol/server-filesystem"] },

1306 { "serverCommand": ["python", "/usr/local/bin/approved-server.py"] },

1307 

1308 // Permitir por patrón de URL (para servidores remotos)

1309 { "serverUrl": "https://mcp.company.com/*" },

1310 { "serverUrl": "https://*.internal.corp/*" }

1311 ],

1312 "deniedMcpServers": [

1313 // Bloquear por nombre de servidor

1314 { "serverName": "dangerous-server" },

1315 

1316 // Bloquear por comando exacto (para servidores stdio)

1317 { "serverCommand": ["npx", "-y", "unapproved-package"] },

1318 

1319 // Bloquear por patrón de URL (para servidores remotos)

1320 { "serverUrl": "https://*.untrusted.com/*" }

1321 ]

1322}

1323```

1324 

1325#### Cómo funcionan las restricciones basadas en comandos

1326 

1327**Coincidencia exacta**:

1328 

1329* Los arrays de comandos deben coincidir **exactamente** - tanto el comando como todos los argumentos en el orden correcto

1330* Ejemplo: `["npx", "-y", "server"]` NO coincidirá con `["npx", "server"]` o `["npx", "-y", "server", "--flag"]`

1331 

1332**Comportamiento del servidor stdio**:

1333 

1334* Cuando la lista de permitidos contiene **cualquier** entrada `serverCommand`, los servidores stdio **deben** coincidir con uno de esos comandos

1335* Los servidores stdio no pueden pasar solo por nombre cuando hay restricciones de comando presentes

1336* Esto asegura que los administradores puedan aplicar qué comandos están permitidos ejecutarse

1337 

1338**Comportamiento del servidor no-stdio**:

1339 

1340* Los servidores remotos (HTTP, SSE, WebSocket) usan coincidencia basada en URL cuando existen entradas `serverUrl` en la lista de permitidos

1341* Si no existen entradas de URL, los servidores remotos recurren a coincidencia basada en nombre

1342* Las restricciones de comando no se aplican a servidores remotos

1343 

1344#### Cómo funcionan las restricciones basadas en URL

1345 

1346Los patrones de URL admiten comodines usando `*` para coincidir con cualquier secuencia de caracteres. Esto es útil para permitir dominios completos o subdominios.

1347 

1348**Ejemplos de comodín**:

1349 

1350* `https://mcp.company.com/*` - Permitir todas las rutas en un dominio específico

1351* `https://*.example.com/*` - Permitir cualquier subdominio de example.com

1352* `http://localhost:*/*` - Permitir cualquier puerto en localhost

1353 

1354**Comportamiento del servidor remoto**:

1355 

1356* Cuando la lista de permitidos contiene **cualquier** entrada `serverUrl`, los servidores remotos **deben** coincidir con uno de esos patrones de URL

1357* Los servidores remotos no pueden pasar solo por nombre cuando hay restricciones de URL presentes

1358* Esto asegura que los administradores puedan aplicar qué puntos finales remotos están permitidos

1359 

1360<Accordion title="Ejemplo: Lista de permitidos solo de URL">

1361 ```json theme={null}

1362 {

1363 "allowedMcpServers": [

1364 { "serverUrl": "https://mcp.company.com/*" },

1365 { "serverUrl": "https://*.internal.corp/*" }

1366 ]

1367 }

1368 ```

1369 

1370 **Resultado**:

1371 

1372 * Servidor HTTP en `https://mcp.company.com/api`: ✅ Permitido (coincide con patrón de URL)

1373 * Servidor HTTP en `https://api.internal.corp/mcp`: ✅ Permitido (coincide con subdominio comodín)

1374 * Servidor HTTP en `https://external.com/mcp`: ❌ Bloqueado (no coincide con ningún patrón de URL)

1375 * Servidor stdio con cualquier comando: ❌ Bloqueado (sin entradas de nombre o comando para coincidir)

1376</Accordion>

1377 

1378<Accordion title="Ejemplo: Lista de permitidos solo de comando">

1379 ```json theme={null}

1380 {

1381 "allowedMcpServers": [

1382 { "serverCommand": ["npx", "-y", "approved-package"] }

1383 ]

1384 }

1385 ```

1386 

1387 **Resultado**:

1388 

1389 * Servidor stdio con `["npx", "-y", "approved-package"]`: ✅ Permitido (coincide con comando)

1390 * Servidor stdio con `["node", "server.js"]`: ❌ Bloqueado (no coincide con comando)

1391 * Servidor HTTP llamado "my-api": ❌ Bloqueado (sin entradas de nombre para coincidir)

1392</Accordion>

1393 

1394<Accordion title="Ejemplo: Lista de permitidos mixta de nombre y comando">

1395 ```json theme={null}

1396 {

1397 "allowedMcpServers": [

1398 { "serverName": "github" },

1399 { "serverCommand": ["npx", "-y", "approved-package"] }

1400 ]

1401 }

1402 ```

1403 

1404 **Resultado**:

1405 

1406 * Servidor stdio llamado "local-tool" con `["npx", "-y", "approved-package"]`: ✅ Permitido (coincide con comando)

1407 * Servidor stdio llamado "local-tool" con `["node", "server.js"]`: ❌ Bloqueado (existen entradas de comando pero no coincide)

1408 * Servidor stdio llamado "github" con `["node", "server.js"]`: ❌ Bloqueado (los servidores stdio deben coincidir con comandos cuando existen entradas de comando)

1409 * Servidor HTTP llamado "github": ✅ Permitido (coincide con nombre)

1410 * Servidor HTTP llamado "other-api": ❌ Bloqueado (el nombre no coincide)

1411</Accordion>

1412 

1413<Accordion title="Ejemplo: Lista de permitidos solo de nombre">

1414 ```json theme={null}

1415 {

1416 "allowedMcpServers": [

1417 { "serverName": "github" },

1418 { "serverName": "internal-tool" }

1419 ]

1420 }

1421 ```

1422 

1423 **Resultado**:

1424 

1425 * Servidor stdio llamado "github" con cualquier comando: ✅ Permitido (sin restricciones de comando)

1426 * Servidor stdio llamado "internal-tool" con cualquier comando: ✅ Permitido (sin restricciones de comando)

1427 * Servidor HTTP llamado "github": ✅ Permitido (coincide con nombre)

1428 * Cualquier servidor llamado "other": ❌ Bloqueado (el nombre no coincide)

1429</Accordion>

1430 

1431#### Comportamiento de la lista de permitidos (`allowedMcpServers`)

1432 

1433* `undefined` (predeterminado): Sin restricciones - los usuarios pueden configurar cualquier servidor MCP

1434* Array vacío `[]`: Bloqueo completo - los usuarios no pueden configurar ningún servidor MCP

1435* Lista de entradas: Los usuarios solo pueden configurar servidores que coincidan por nombre, comando o patrón de URL

1436 

1437#### Comportamiento de la lista de bloqueados (`deniedMcpServers`)

1438 

1439* `undefined` (predeterminado): Ningún servidor está bloqueado

1440* Array vacío `[]`: Ningún servidor está bloqueado

1441* Lista de entradas: Los servidores especificados están explícitamente bloqueados en todos los alcances

1442 

1443#### Notas importantes

1444 

1445* **La Opción 1 y la Opción 2 se pueden combinar**: Si existe `managed-mcp.json`, tiene control exclusivo y los usuarios no pueden agregar servidores. Las listas de permitidos/bloqueados aún se aplican a los servidores gestionados mismos.

1446* **La lista de bloqueados tiene precedencia absoluta**: Si un servidor coincide con una entrada de lista de bloqueados (por nombre, comando o URL), será bloqueado incluso si está en la lista de permitidos

1447* **Las restricciones basadas en nombre, comando y URL funcionan juntas**: un servidor pasa si coincide con **cualquiera** de una entrada de nombre, una entrada de comando o un patrón de URL (a menos que esté bloqueado por lista de bloqueados)

1448 

1449<Note>

1450 **Cuando se usa `managed-mcp.json`**: Los usuarios no pueden agregar servidores MCP a través de `claude mcp add` o archivos de configuración. La configuración `allowedMcpServers` y `deniedMcpServers` aún se aplica para filtrar qué servidores gestionados se cargan realmente.

1451</Note>

memory.md +408 −0 created

Details

1> ## Documentation Index

2> Fetch the complete documentation index at: https://code.claude.com/docs/llms.txt

3> Use this file to discover all available pages before exploring further.

4 

5# Cómo Claude recuerda su proyecto

6 

7> Proporcione a Claude instrucciones persistentes con archivos CLAUDE.md, y permita que Claude acumule aprendizajes automáticamente con auto memory.

8 

9Cada sesión de Claude Code comienza con una ventana de contexto nueva. Dos mecanismos llevan el conocimiento entre sesiones:

10 

11* **Archivos CLAUDE.md**: instrucciones que usted escribe para dar a Claude contexto persistente

12* **Auto memory**: notas que Claude escribe por sí mismo basadas en sus correcciones y preferencias

13 

14Esta página cubre cómo:

15 

16* [Escribir y organizar archivos CLAUDE.md](#claude-md-files)

17* [Limitar reglas a tipos de archivo específicos](#organize-rules-with-claude/rules/) con `.claude/rules/`

18* [Configurar auto memory](#auto-memory) para que Claude tome notas automáticamente

19* [Solucionar problemas](#troubleshoot-memory-issues) cuando las instrucciones no se siguen

20 

21## CLAUDE.md vs auto memory

22 

23Claude Code tiene dos sistemas de memoria complementarios. Ambos se cargan al inicio de cada conversación. Claude los trata como contexto, no como configuración forzada. Cuanto más específicas y concisas sean sus instrucciones, más consistentemente Claude las seguirá.

24 

25| | Archivos CLAUDE.md | Auto memory |

26| :------------------- | :----------------------------------------------------------------------- | :----------------------------------------------------------------------------------- |

27| **Quién lo escribe** | Usted | Claude |

28| **Qué contiene** | Instrucciones y reglas | Aprendizajes y patrones |

29| **Alcance** | Proyecto, usuario u organización | Por worktree |

30| **Se carga en** | Cada sesión | Cada sesión (primeras 200 líneas o 25KB) |

31| **Usar para** | Estándares de codificación, flujos de trabajo, arquitectura del proyecto | Comandos de compilación, información de depuración, preferencias que Claude descubre |

32 

33Use archivos CLAUDE.md cuando quiera guiar el comportamiento de Claude. Auto memory permite que Claude aprenda de sus correcciones sin esfuerzo manual.

34 

35Los subagents también pueden mantener su propia auto memory. Consulte [configuración de subagent](/es/sub-agents#enable-persistent-memory) para obtener detalles.

36 

37## Archivos CLAUDE.md

38 

39Los archivos CLAUDE.md son archivos markdown que dan a Claude instrucciones persistentes para un proyecto, su flujo de trabajo personal o toda su organización. Usted escribe estos archivos en texto plano; Claude los lee al inicio de cada sesión.

40 

41### Cuándo agregar a CLAUDE.md

42 

43Trate CLAUDE.md como el lugar donde escribe lo que de otro modo tendría que re-explicar. Agregue a él cuando:

44 

45* Claude comete el mismo error una segunda vez

46* Una revisión de código detecta algo que Claude debería haber sabido sobre esta base de código

47* Usted escribe la misma corrección o aclaración en el chat que escribió la sesión anterior

48* Un nuevo compañero de equipo necesitaría el mismo contexto para ser productivo

49 

50Manténgalo en hechos que Claude debe retener en cada sesión: comandos de compilación, convenciones, diseño del proyecto, reglas "siempre haz X". Si una entrada es un procedimiento de múltiples pasos o solo importa para una parte de la base de código, muévala a un [skill](/es/skills) o una [regla con alcance de ruta](#organize-rules-with-claude/rules/) en su lugar. La [descripción general de extensiones](/es/features-overview#build-your-setup-over-time) cubre cuándo usar cada mecanismo.

51 

52### Elija dónde colocar los archivos CLAUDE.md

53 

54Los archivos CLAUDE.md pueden vivir en varios lugares, cada uno con un alcance diferente. Las ubicaciones más específicas tienen prioridad sobre las más amplias.

55 

56| Alcance | Ubicación | Propósito | Ejemplos de casos de uso | Compartido con |

57| ------------------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------ | -------------------------------------------------------------------------------------------- | ----------------------------------------------------- |

58| **Política gestionada** | • macOS: `/Library/Application Support/ClaudeCode/CLAUDE.md`<br />• Linux y WSL: `/etc/claude-code/CLAUDE.md`<br />• Windows: `C:\Program Files\ClaudeCode\CLAUDE.md` | Instrucciones de toda la organización gestionadas por TI/DevOps | Estándares de codificación de la empresa, políticas de seguridad, requisitos de cumplimiento | Todos los usuarios de la organización |

59| **Instrucciones del proyecto** | `./CLAUDE.md` o `./.claude/CLAUDE.md` | Instrucciones compartidas por el equipo para el proyecto | Arquitectura del proyecto, estándares de codificación, flujos de trabajo comunes | Miembros del equipo a través del control de versiones |

60| **Instrucciones del usuario** | `~/.claude/CLAUDE.md` | Preferencias personales para todos los proyectos | Preferencias de estilo de código, atajos de herramientas personales | Solo usted (todos los proyectos) |

61| **Instrucciones locales** | `./CLAUDE.local.md` | Preferencias personales específicas del proyecto; agregue a `.gitignore` | Sus URLs de sandbox, datos de prueba preferidos | Solo usted (proyecto actual) |

62 

63Los archivos CLAUDE.md y CLAUDE.local.md en la jerarquía de directorios por encima del directorio de trabajo se cargan completamente al iniciar. Los archivos en subdirectorios se cargan bajo demanda cuando Claude lee archivos en esos directorios. Consulte [Cómo se cargan los archivos CLAUDE.md](#how-claude-md-files-load) para el orden de resolución completo.

64 

65Para proyectos grandes, puede dividir las instrucciones en archivos específicos de temas usando [reglas de proyecto](#organize-rules-with-claude/rules/). Las reglas le permiten limitar las instrucciones a tipos de archivo específicos o subdirectorios.

66 

67### Configure un CLAUDE.md de proyecto

68 

69Un CLAUDE.md de proyecto puede almacenarse en `./CLAUDE.md` o `./.claude/CLAUDE.md`. Cree este archivo y agregue instrucciones que se apliquen a cualquiera que trabaje en el proyecto: comandos de compilación y prueba, estándares de codificación, decisiones arquitectónicas, convenciones de nomenclatura y flujos de trabajo comunes. Estas instrucciones se comparten con su equipo a través del control de versiones, así que enfóquese en estándares a nivel de proyecto en lugar de preferencias personales.

70 

71<Tip>

72 Ejecute `/init` para generar un CLAUDE.md inicial automáticamente. Claude analiza su base de código y crea un archivo con comandos de compilación, instrucciones de prueba y convenciones de proyecto que descubre. Si ya existe un CLAUDE.md, `/init` sugiere mejoras en lugar de sobrescribirlo. Refine desde allí con instrucciones que Claude no descubriría por sí solo.

73 

74 Establezca `CLAUDE_CODE_NEW_INIT=1` para habilitar un flujo interactivo de múltiples fases. `/init` pregunta qué artefactos configurar: archivos CLAUDE.md, skills y hooks. Luego explora su base de código con un subagent, llena los vacíos mediante preguntas de seguimiento y presenta una propuesta revisable antes de escribir cualquier archivo.

75</Tip>

76 

77### Escriba instrucciones efectivas

78 

79Los archivos CLAUDE.md se cargan en la ventana de contexto al inicio de cada sesión, consumiendo tokens junto con su conversación. La [visualización de la ventana de contexto](/es/context-window) muestra dónde se carga CLAUDE.md en relación con el resto del contexto de inicio. Debido a que son contexto en lugar de configuración forzada, cómo escribe las instrucciones afecta qué tan confiablemente Claude las sigue. Las instrucciones específicas, concisas y bien estructuradas funcionan mejor.

80 

81**Tamaño**: apunte a menos de 200 líneas por archivo CLAUDE.md. Los archivos más largos consumen más contexto y reducen la adherencia. Si sus instrucciones están creciendo mucho, use [reglas con alcance de ruta](#path-specific-rules) para que las instrucciones se carguen solo cuando Claude trabaje con archivos coincidentes. También puede dividir contenido en [importaciones](#import-additional-files) para organización, aunque los archivos importados aún se cargan e ingresan a la ventana de contexto al iniciar.

82 

83**Estructura**: use encabezados y viñetas de markdown para agrupar instrucciones relacionadas. Claude escanea la estructura de la misma manera que los lectores: las secciones organizadas son más fáciles de seguir que los párrafos densos.

84 

85**Especificidad**: escriba instrucciones que sean lo suficientemente concretas para verificar. Por ejemplo:

86 

87* "Usar indentación de 2 espacios" en lugar de "Formatear código correctamente"

88* "Ejecutar `npm test` antes de hacer commit" en lugar de "Probar sus cambios"

89* "Los controladores de API viven en `src/api/handlers/`" en lugar de "Mantener los archivos organizados"

90 

91**Consistencia**: si dos reglas se contradicen entre sí, Claude puede elegir una arbitrariamente. Revise sus archivos CLAUDE.md, archivos CLAUDE.md anidados en subdirectorios y archivos [`.claude/rules/`](#organize-rules-with-claude/rules/) periódicamente para eliminar instrucciones desactualizadas o conflictivas. En monorepos, use [`claudeMdExcludes`](#exclude-specific-claude-md-files) para omitir archivos CLAUDE.md de otros equipos que no sean relevantes para su trabajo.

92 

93### Importar archivos adicionales

94 

95Los archivos CLAUDE.md pueden importar archivos adicionales usando la sintaxis `@path/to/import`. Los archivos importados se expanden y se cargan en contexto al iniciar junto con el CLAUDE.md que los referencia.

96 

97Se permiten rutas relativas y absolutas. Las rutas relativas se resuelven en relación con el archivo que contiene la importación, no con el directorio de trabajo. Los archivos importados pueden importar recursivamente otros archivos, con una profundidad máxima de cinco saltos.

98 

99Para incluir un README, package.json y una guía de flujo de trabajo, haga referencia a ellos con la sintaxis `@` en cualquier lugar de su CLAUDE.md:

100 

101```text theme={null}

102Consulte @README para obtener una descripción general del proyecto y @package.json para los comandos npm disponibles para este proyecto.

103 

104# Instrucciones adicionales

105- flujo de trabajo git @docs/git-instructions.md

106```

107 

108Para preferencias personales privadas por proyecto que no desea registrar en el control de versiones, cree un `CLAUDE.local.md` en la raíz del proyecto. Se carga junto con `CLAUDE.md` y se trata de la misma manera. Agregue `CLAUDE.local.md` a su `.gitignore` para que no se confirme; ejecutar `/init` y elegir la opción personal hace esto por usted.

109 

110Si trabaja en múltiples git worktrees del mismo repositorio, un `CLAUDE.local.md` ignorado por git solo existe en el worktree donde lo creó. Para compartir instrucciones personales entre worktrees, importe un archivo desde su directorio de inicio en su lugar:

111 

112```text theme={null}

113# Preferencias individuales

114- @~/.claude/my-project-instructions.md

115```

116 

117<Warning>

118 La primera vez que Claude Code encuentra importaciones externas en un proyecto, muestra un diálogo de aprobación que enumera los archivos. Si rechaza, las importaciones permanecen deshabilitadas y el diálogo no aparece nuevamente.

119</Warning>

120 

121Para un enfoque más estructurado para organizar instrucciones, consulte [`.claude/rules/`](#organize-rules-with-claude/rules/).

122 

123### AGENTS.md

124 

125Claude Code lee `CLAUDE.md`, no `AGENTS.md`. Si su repositorio ya usa `AGENTS.md` para otros agentes de codificación, cree un `CLAUDE.md` que lo importe para que ambas herramientas lean las mismas instrucciones sin duplicarlas. También puede agregar instrucciones específicas de Claude Code debajo de la importación. Claude carga el archivo importado al inicio de la sesión, luego agrega el resto:

126 

127```markdown CLAUDE.md theme={null}

128@AGENTS.md

129 

130## Claude Code

131 

132Use plan mode para cambios bajo `src/billing/`.

133```

134 

135### Cómo se cargan los archivos CLAUDE.md

136 

137Claude Code lee los archivos CLAUDE.md caminando hacia arriba en el árbol de directorios desde su directorio de trabajo actual, verificando cada directorio en el camino para archivos `CLAUDE.md` y `CLAUDE.local.md`. Esto significa que si ejecuta Claude Code en `foo/bar/`, carga instrucciones desde `foo/bar/CLAUDE.md`, `foo/CLAUDE.md` y cualquier archivo `CLAUDE.local.md` junto a ellos.

138 

139Todos los archivos descubiertos se concatenan en contexto en lugar de anularse entre sí. Dentro de la jerarquía de directorios, el contenido se ordena desde la raíz del sistema de archivos hasta su directorio de trabajo. Para el ejemplo `foo/bar/`, `foo/CLAUDE.md` aparece en contexto antes de `foo/bar/CLAUDE.md`, por lo que las instrucciones más cercanas a donde lanzó Claude se leen al final. Dentro de cada directorio, `CLAUDE.local.md` se agrega después de `CLAUDE.md`, por lo que sus notas personales son lo último que Claude lee en ese nivel.

140 

141Claude también descubre archivos `CLAUDE.md` y `CLAUDE.local.md` en subdirectorios bajo su directorio de trabajo actual. En lugar de cargarlos al iniciar, se incluyen cuando Claude lee archivos en esos subdirectorios.

142 

143Si trabaja en un monorepo grande donde se recogen archivos CLAUDE.md de otros equipos, use [`claudeMdExcludes`](#exclude-specific-claude-md-files) para omitirlos.

144 

145Los comentarios HTML a nivel de bloque (`<!-- notas de mantenimiento -->`) en archivos CLAUDE.md se eliminan antes de que el contenido se inyecte en el contexto de Claude. Úselos para dejar notas para los mantenedores humanos sin gastar tokens de contexto en ellas. Los comentarios dentro de bloques de código se conservan. Cuando abre un archivo CLAUDE.md directamente con la herramienta Read, los comentarios permanecen visibles.

146 

147#### Cargar desde directorios adicionales

148 

149La bandera `--add-dir` da a Claude acceso a directorios adicionales fuera de su directorio de trabajo principal. De forma predeterminada, los archivos CLAUDE.md de estos directorios no se cargan.

150 

151Para cargar también archivos de memoria desde directorios adicionales, establezca la variable de entorno `CLAUDE_CODE_ADDITIONAL_DIRECTORIES_CLAUDE_MD`:

152 

153```bash theme={null}

154CLAUDE_CODE_ADDITIONAL_DIRECTORIES_CLAUDE_MD=1 claude --add-dir ../shared-config

155```

156 

157Esto carga `CLAUDE.md`, `.claude/CLAUDE.md`, `.claude/rules/*.md` y `CLAUDE.local.md` desde el directorio adicional. `CLAUDE.local.md` se omite si excluye `local` de [`--setting-sources`](/es/cli-reference).

158 

159### Organizar reglas con `.claude/rules/`

160 

161Para proyectos más grandes, puede organizar instrucciones en múltiples archivos usando el directorio `.claude/rules/`. Esto mantiene las instrucciones modulares y más fáciles de mantener para los equipos. Las reglas también pueden ser [limitadas a rutas de archivo específicas](#path-specific-rules), por lo que solo se cargan en contexto cuando Claude trabaja con archivos coincidentes, reduciendo ruido y ahorrando espacio de contexto.

162 

163<Note>

164 Las reglas se cargan en contexto cada sesión o cuando se abren archivos coincidentes. Para instrucciones específicas de tareas que no necesitan estar en contexto todo el tiempo, use [skills](/es/skills) en su lugar, que solo se cargan cuando las invoca o cuando Claude determina que son relevantes para su prompt.

165</Note>

166 

167#### Configurar reglas

168 

169Coloque archivos markdown en el directorio `.claude/rules/` de su proyecto. Cada archivo debe cubrir un tema, con un nombre de archivo descriptivo como `testing.md` o `api-design.md`. Todos los archivos `.md` se descubren recursivamente, por lo que puede organizar reglas en subdirectorios como `frontend/` o `backend/`:

170 

171```text theme={null}

172your-project/

173├── .claude/

174│ ├── CLAUDE.md # Instrucciones principales del proyecto

175│ └── rules/

176│ ├── code-style.md # Directrices de estilo de código

177│ ├── testing.md # Convenciones de prueba

178│ └── security.md # Requisitos de seguridad

179```

180 

181Las reglas sin [frontmatter `paths`](#path-specific-rules) se cargan al iniciar con la misma prioridad que `.claude/CLAUDE.md`.

182 

183#### Reglas específicas de ruta

184 

185Las reglas pueden limitarse a archivos específicos usando frontmatter YAML con el campo `paths`. Estas reglas condicionales solo se aplican cuando Claude trabaja con archivos que coinciden con los patrones especificados.

186 

187```markdown theme={null}

188---

189paths:

190 - "src/api/**/*.ts"

191---

192 

193# Reglas de desarrollo de API

194 

195- Todos los puntos finales de API deben incluir validación de entrada

196- Usar el formato de respuesta de error estándar

197- Incluir comentarios de documentación OpenAPI

198```

199 

200Las reglas sin un campo `paths` se cargan incondicionalmente y se aplican a todos los archivos. Las reglas con alcance de ruta se activan cuando Claude lee archivos que coinciden con el patrón, no en cada uso de herramienta.

201 

202Use patrones glob en el campo `paths` para hacer coincidir archivos por extensión, directorio o cualquier combinación:

203 

204| Patrón | Coincide con |

205| ---------------------- | ----------------------------------------------------- |

206| `**/*.ts` | Todos los archivos TypeScript en cualquier directorio |

207| `src/**/*` | Todos los archivos bajo el directorio `src/` |

208| `*.md` | Archivos Markdown en la raíz del proyecto |

209| `src/components/*.tsx` | Componentes React en un directorio específico |

210 

211Puede especificar múltiples patrones y usar expansión de llaves para hacer coincidir múltiples extensiones en un patrón:

212 

213```markdown theme={null}

214---

215paths:

216 - "src/**/*.{ts,tsx}"

217 - "lib/**/*.ts"

218 - "tests/**/*.test.ts"

219---

220```

221 

222#### Compartir reglas entre proyectos con enlaces simbólicos

223 

224El directorio `.claude/rules/` admite enlaces simbólicos, por lo que puede mantener un conjunto compartido de reglas y vincularlas en múltiples proyectos. Los enlaces simbólicos se resuelven y se cargan normalmente, y los enlaces simbólicos circulares se detectan y se manejan correctamente.

225 

226Este ejemplo vincula tanto un directorio compartido como un archivo individual:

227 

228```bash theme={null}

229ln -s ~/shared-claude-rules .claude/rules/shared

230ln -s ~/company-standards/security.md .claude/rules/security.md

231```

232 

233#### Reglas a nivel de usuario

234 

235Las reglas personales en `~/.claude/rules/` se aplican a cada proyecto en su máquina. Úselas para preferencias que no son específicas del proyecto:

236 

237```text theme={null}

238~/.claude/rules/

239├── preferences.md # Sus preferencias personales de codificación

240└── workflows.md # Sus flujos de trabajo preferidos

241```

242 

243Las reglas a nivel de usuario se cargan antes que las reglas del proyecto, dando a las reglas del proyecto mayor prioridad.

244 

245### Gestionar CLAUDE.md para equipos grandes

246 

247Para organizaciones que implementan Claude Code en equipos, puede centralizar instrucciones y controlar qué archivos CLAUDE.md se cargan.

248 

249#### Implementar CLAUDE.md en toda la organización

250 

251Las organizaciones pueden implementar un CLAUDE.md gestionado centralmente que se aplique a todos los usuarios en una máquina. Este archivo no puede ser excluido por configuraciones individuales.

252 

253<Steps>

254 <Step title="Crear el archivo en la ubicación de política gestionada">

255 * macOS: `/Library/Application Support/ClaudeCode/CLAUDE.md`

256 * Linux y WSL: `/etc/claude-code/CLAUDE.md`

257 * Windows: `C:\Program Files\ClaudeCode\CLAUDE.md`

258 </Step>

259 

260 <Step title="Implementar con su sistema de gestión de configuración">

261 Use MDM, Group Policy, Ansible o herramientas similares para distribuir el archivo en máquinas de desarrolladores. Consulte [configuración gestionada](/es/permissions#managed-settings) para otras opciones de configuración de toda la organización.

262 </Step>

263</Steps>

264 

265Un CLAUDE.md gestionado y [configuración gestionada](/es/settings#settings-files) sirven para propósitos diferentes. Use configuración para aplicación técnica y CLAUDE.md para orientación conductual:

266 

267| Preocupación | Configurar en |

268| :------------------------------------------------------------- | :---------------------------------------------------------------- |

269| Bloquear herramientas, comandos o rutas de archivo específicas | Configuración gestionada: `permissions.deny` |

270| Aplicar aislamiento de sandbox | Configuración gestionada: `sandbox.enabled` |

271| Variables de entorno y enrutamiento de proveedor de API | Configuración gestionada: `env` |

272| Método de autenticación y bloqueo de organización | Configuración gestionada: `forceLoginMethod`, `forceLoginOrgUUID` |

273| Directrices de estilo de código y calidad | CLAUDE.md gestionado |

274| Recordatorios de manejo de datos y cumplimiento | CLAUDE.md gestionado |

275| Instrucciones conductuales para Claude | CLAUDE.md gestionado |

276 

277Las reglas de configuración se aplican por el cliente independientemente de lo que Claude decida hacer. Las instrucciones de CLAUDE.md moldean el comportamiento de Claude pero no son una capa de aplicación forzada.

278 

279#### Excluir archivos CLAUDE.md específicos

280 

281En monorepos grandes, los archivos CLAUDE.md ancestros pueden contener instrucciones que no son relevantes para su trabajo. La configuración `claudeMdExcludes` le permite omitir archivos específicos por ruta o patrón glob.

282 

283Este ejemplo excluye un CLAUDE.md de nivel superior y un directorio de reglas de una carpeta principal. Agréguelo a `.claude/settings.local.json` para que la exclusión permanezca local en su máquina:

284 

285```json theme={null}

286{

287 "claudeMdExcludes": [

288 "**/monorepo/CLAUDE.md",

289 "/home/user/monorepo/other-team/.claude/rules/**"

290 ]

291}

292```

293 

294Los patrones se comparan contra rutas de archivo absolutas usando sintaxis glob. Puede configurar `claudeMdExcludes` en cualquier [capa de configuración](/es/settings#settings-files): usuario, proyecto, local o política gestionada. Los arrays se fusionan entre capas.

295 

296Los archivos CLAUDE.md de política gestionada no pueden ser excluidos. Esto asegura que las instrucciones de toda la organización siempre se apliquen independientemente de la configuración individual.

297 

298## Auto memory

299 

300Auto memory permite que Claude acumule conocimiento entre sesiones sin que usted escriba nada. Claude guarda notas para sí mismo mientras trabaja: comandos de compilación, información de depuración, notas de arquitectura, preferencias de estilo de código y hábitos de flujo de trabajo. Claude no guarda algo cada sesión. Decide qué vale la pena recordar basándose en si la información sería útil en una conversación futura.

301 

302<Note>

303 Auto memory requiere Claude Code v2.1.59 o posterior. Verifique su versión con `claude --version`.

304</Note>

305 

306### Habilitar o deshabilitar auto memory

307 

308Auto memory está habilitado de forma predeterminada. Para alternarlo, abra `/memory` en una sesión y use el botón de alternancia de auto memory, o establezca `autoMemoryEnabled` en la configuración de su proyecto:

309 

310```json theme={null}

311{

312 "autoMemoryEnabled": false

313}

314```

315 

316Para deshabilitar auto memory a través de variable de entorno, establezca `CLAUDE_CODE_DISABLE_AUTO_MEMORY=1`.

317 

318### Ubicación de almacenamiento

319 

320Cada proyecto obtiene su propio directorio de memoria en `~/.claude/projects/<project>/memory/`. La ruta `<project>` se deriva del repositorio git, por lo que todos los worktrees y subdirectorios dentro del mismo repositorio comparten un directorio de auto memory. Fuera de un repositorio git, se usa la raíz del proyecto en su lugar.

321 

322Para almacenar auto memory en una ubicación diferente, establezca `autoMemoryDirectory` en la configuración de usuario en `~/.claude/settings.json`:

323 

324```json theme={null}

325{

326 "autoMemoryDirectory": "~/my-custom-memory-dir"

327}

328```

329 

330El valor debe ser una ruta absoluta o comenzar con `~/`. Esta configuración se acepta desde la política y la configuración de usuario, y desde la bandera `--settings`. No se acepta desde la configuración del proyecto o local, ya que ambos archivos viven dentro del directorio del proyecto y un repositorio clonado podría proporcionar cualquiera de ellos para redirigir las escrituras de auto memory a ubicaciones sensibles.

331 

332El directorio contiene un punto de entrada `MEMORY.md` y archivos de tema opcionales:

333 

334```text theme={null}

335~/.claude/projects/<project>/memory/

336├── MEMORY.md # Índice conciso, cargado en cada sesión

337├── debugging.md # Notas detalladas sobre patrones de depuración

338├── api-conventions.md # Decisiones de diseño de API

339└── ... # Cualquier otro archivo de tema que Claude cree

340```

341 

342`MEMORY.md` actúa como un índice del directorio de memoria. Claude lee y escribe archivos en este directorio durante su sesión, usando `MEMORY.md` para mantener un registro de lo que se almacena dónde.

343 

344Auto memory es local de la máquina. Todos los worktrees y subdirectorios dentro del mismo repositorio git comparten un directorio de auto memory. Los archivos no se comparten entre máquinas o entornos en la nube.

345 

346### Cómo funciona

347 

348Las primeras 200 líneas de `MEMORY.md`, o los primeros 25KB, lo que sea menor, se cargan al inicio de cada conversación. El contenido más allá de ese umbral no se carga al inicio de la sesión. Claude mantiene `MEMORY.md` conciso moviendo notas detalladas a archivos de tema separados.

349 

350Este límite se aplica solo a `MEMORY.md`. Los archivos CLAUDE.md se cargan completamente independientemente de la longitud, aunque los archivos más cortos producen mejor adherencia.

351 

352Los archivos de tema como `debugging.md` o `patterns.md` no se cargan al iniciar. Claude los lee bajo demanda usando sus herramientas de archivo estándar cuando necesita la información.

353 

354Claude lee y escribe archivos de memoria durante su sesión. Cuando ve "Writing memory" o "Recalled memory" en la interfaz de Claude Code, Claude está actualizando o leyendo activamente desde `~/.claude/projects/<project>/memory/`.

355 

356### Auditar y editar su memoria

357 

358Los archivos de auto memory son markdown plano que puede editar o eliminar en cualquier momento. Ejecute [`/memory`](#view-and-edit-with-memory) para examinar y abrir archivos de memoria desde dentro de una sesión.

359 

360## Ver y editar con `/memory`

361 

362El comando `/memory` enumera todos los archivos CLAUDE.md, CLAUDE.local.md y rules cargados en su sesión actual, le permite alternar auto memory activado o desactivado, y proporciona un enlace para abrir la carpeta de auto memory. Seleccione cualquier archivo para abrirlo en su editor.

363 

364Cuando le pide a Claude que recuerde algo, como "siempre usar pnpm, no npm" o "recuerde que las pruebas de API requieren una instancia local de Redis", Claude lo guarda en auto memory. Para agregar instrucciones a CLAUDE.md en su lugar, pídale a Claude directamente, como "agregue esto a CLAUDE.md", o edite el archivo usted mismo a través de `/memory`.

365 

366## Solucionar problemas de memoria

367 

368Estos son los problemas más comunes con CLAUDE.md y auto memory, junto con pasos para depurarlos.

369 

370### Claude no está siguiendo mi CLAUDE.md

371 

372El contenido de CLAUDE.md se entrega como un mensaje de usuario después del prompt del sistema, no como parte del prompt del sistema en sí. Claude lo lee e intenta seguirlo, pero no hay garantía de cumplimiento estricto, especialmente para instrucciones vagas o conflictivas.

373 

374Para depurar:

375 

376* Ejecute `/memory` para verificar que sus archivos CLAUDE.md y CLAUDE.local.md se están cargando. Si un archivo no aparece en la lista, Claude no puede verlo.

377* Verifique que el CLAUDE.md relevante esté en una ubicación que se cargue para su sesión (consulte [Elija dónde colocar los archivos CLAUDE.md](#choose-where-to-put-claude-md-files)).

378* Haga instrucciones más específicas. "Usar indentación de 2 espacios" funciona mejor que "formatear código bien".

379* Busque instrucciones conflictivas en archivos CLAUDE.md. Si dos archivos dan orientación diferente para el mismo comportamiento, Claude puede elegir uno arbitrariamente.

380 

381Para instrucciones que desea a nivel de prompt del sistema, use [`--append-system-prompt`](/es/cli-reference#system-prompt-flags). Esto debe pasarse en cada invocación, por lo que es más adecuado para scripts y automatización que para uso interactivo.

382 

383<Tip>

384 Use el hook [`InstructionsLoaded`](/es/hooks#instructionsloaded) para registrar exactamente qué archivos de instrucciones se cargan, cuándo se cargan y por qué. Esto es útil para depurar reglas específicas de ruta o archivos cargados perezosamente en subdirectorios.

385</Tip>

386 

387### No sé qué guardó auto memory

388 

389Ejecute `/memory` y seleccione la carpeta de auto memory para examinar lo que Claude ha guardado. Todo es markdown plano que puede leer, editar o eliminar.

390 

391### Mi CLAUDE.md es demasiado grande

392 

393Los archivos de más de 200 líneas consumen más contexto y pueden reducir la adherencia. Use [reglas con alcance de ruta](#path-specific-rules) para cargar instrucciones solo cuando Claude trabaja con archivos coincidentes, o recorte contenido que no sea necesario en cada sesión. Dividir en [importaciones `@path`](#import-additional-files) ayuda a la organización pero no reduce el contexto, ya que los archivos importados se cargan al iniciar.

394 

395### Las instrucciones parecen perdidas después de `/compact`

396 

397CLAUDE.md de raíz de proyecto sobrevive a la compactación: después de `/compact`, Claude vuelve a leer desde el disco e lo reinyecta en la sesión. Los archivos CLAUDE.md anidados en subdirectorios no se reinyectan automáticamente; se recargan la próxima vez que Claude lee un archivo en ese subdirectorio.

398 

399Si una instrucción desapareció después de la compactación, se dio solo en la conversación o vive en un CLAUDE.md anidado que aún no se ha recargado. Agregue instrucciones solo de conversación a CLAUDE.md para que persistan. Consulte [Qué sobrevive a la compactación](/es/context-window#what-survives-compaction) para el desglose completo.

400 

401Consulte [Escriba instrucciones efectivas](#write-effective-instructions) para obtener orientación sobre tamaño, estructura y especificidad.

402 

403## Recursos relacionados

404 

405* [Depurar su configuración](/es/debug-your-config): diagnosticar por qué CLAUDE.md o configuración no están surtiendo efecto

406* [Skills](/es/skills): empaquetar flujos de trabajo repetibles que se cargan bajo demanda

407* [Settings](/es/settings): configurar el comportamiento de Claude Code con archivos de configuración

408* [Subagent memory](/es/sub-agents#enable-persistent-memory): permitir que los subagents mantengan su propia auto memory

microsoft-foundry.md +314 −0 created

Details

1> ## Documentation Index

2> Fetch the complete documentation index at: https://code.claude.com/docs/llms.txt

3> Use this file to discover all available pages before exploring further.

4 

5# Claude Code en Microsoft Foundry

6 

7> Aprende a configurar Claude Code a través de Microsoft Foundry, incluyendo configuración, instalación y solución de problemas.

8 

9export const ContactSalesCard = ({surface}) => {

10 const utm = content => `utm_source=claude_code&utm_medium=docs&utm_content=${surface}_${content}`;

11 const iconArrowRight = (size = 13) => <svg width={size} height={size} viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2.5" strokeLinecap="round" strokeLinejoin="round" aria-hidden="true">

12 <line x1="5" y1="12" x2="19" y2="12" />

13 <polyline points="12 5 19 12 12 19" />

14 </svg>;

15 const STYLES = `

16.cc-cs {

17 --cs-slate: #141413;

18 --cs-clay: #d97757;

19 --cs-clay-deep: #c6613f;

20 --cs-gray-000: #ffffff;

21 --cs-gray-700: #3d3d3a;

22 --cs-border-default: rgba(31, 30, 29, 0.15);

23 font-family: inherit;

24}

25.dark .cc-cs {

26 --cs-slate: #f0eee6;

27 --cs-gray-000: #262624;

28 --cs-gray-700: #bfbdb4;

29 --cs-border-default: rgba(240, 238, 230, 0.14);

30}

31.cc-cs-card {

32 display: flex; align-items: center; justify-content: space-between;

33 gap: 16px; padding: 14px 16px; margin: 0;

34 background: var(--cs-gray-000); border: 0.5px solid var(--cs-border-default);

35 border-radius: 8px; flex-wrap: wrap;

36}

37.cc-cs-text { font-size: 13px; color: var(--cs-gray-700); line-height: 1.5; flex: 1; min-width: 240px; }

38.cc-cs-text strong { font-weight: 550; color: var(--cs-slate); }

39.cc-cs-actions { display: flex; align-items: center; gap: 8px; flex-shrink: 0; }

40.cc-cs-btn-clay {

41 display: inline-flex; align-items: center; gap: 8px;

42 background: var(--cs-clay-deep); color: #fff; border: none;

43 border-radius: 8px; padding: 8px 14px;

44 font-size: 13px; font-weight: 500;

45 transition: background-color 0.15s; white-space: nowrap;

46}

47.cc-cs-btn-clay:hover { background: var(--cs-clay); }

48.cc-cs-btn-ghost {

49 display: inline-flex; align-items: center; gap: 8px;

50 background: transparent; color: var(--cs-gray-700);

51 border: 0.5px solid var(--cs-border-default);

52 border-radius: 8px; padding: 8px 14px;

53 font-size: 13px; font-weight: 500;

54}

55.cc-cs-btn-ghost:hover { background: rgba(0, 0, 0, 0.04); }

56.dark .cc-cs-btn-ghost:hover { background: rgba(255, 255, 255, 0.04); }

57@media (max-width: 720px) {

58 .cc-cs-actions { width: 100%; }

59}

60`;

61 return <div className="cc-cs not-prose">

62 <style>{STYLES}</style>

63 <div className="cc-cs-card">

64 <div className="cc-cs-text">

65 <strong>Deploying Claude Code across your organization?</strong> Talk to sales about enterprise plans, SSO, and centralized billing.

66 </div>

67 <div className="cc-cs-actions">

68 <a href={`https://claude.com/pricing?${utm('view_plans')}#plans-business`} className="cc-cs-btn-ghost">

69 View plans

70 </a>

71 <a href={`https://claude.com/contact-sales?${utm('contact_sales')}`} className="cc-cs-btn-clay">

72 Contact sales {iconArrowRight()}

73 </a>

74 </div>

75 </div>

76 </div>;

77};

78 

79export const Experiment = ({flag, treatment, children}) => {

80 const VID_KEY = 'exp_vid';

81 const CONSENT_COUNTRIES = new Set(['AT', 'BE', 'BG', 'HR', 'CY', 'CZ', 'DK', 'EE', 'FI', 'FR', 'DE', 'GR', 'HU', 'IE', 'IT', 'LV', 'LT', 'LU', 'MT', 'NL', 'PL', 'PT', 'RO', 'SK', 'SI', 'ES', 'SE', 'RE', 'GP', 'MQ', 'GF', 'YT', 'BL', 'MF', 'PM', 'WF', 'PF', 'NC', 'AW', 'CW', 'SX', 'FO', 'GL', 'AX', 'GB', 'UK', 'AI', 'BM', 'IO', 'VG', 'KY', 'FK', 'GI', 'MS', 'PN', 'SH', 'TC', 'GG', 'JE', 'IM', 'CA', 'BR', 'IN']);

82 const fnv1a = s => {

83 let h = 0x811c9dc5;

84 for (let i = 0; i < s.length; i++) {

85 h ^= s.charCodeAt(i);

86 h += (h << 1) + (h << 4) + (h << 7) + (h << 8) + (h << 24);

87 }

88 return h >>> 0;

89 };

90 const bucket = (seed, vid) => fnv1a(fnv1a(seed + vid) + '') % 10000 < 5000 ? 'control' : 'treatment';

91 const [decision] = useState(() => {

92 const params = new URLSearchParams(location.search);

93 const preBucketed = document.documentElement.dataset['gb_' + flag.replace(/-/g, '_')];

94 const force = params.get('gb-force');

95 if (force) {

96 for (const p of force.split(',')) {

97 const [k, v] = p.split(':');

98 if (k === flag) return {

99 variant: v || 'treatment',

100 track: false

101 };

102 }

103 }

104 if (navigator.globalPrivacyControl) {

105 return {

106 variant: 'control',

107 track: false

108 };

109 }

110 const prefsMatch = document.cookie.match(/(?:^|; )anthropic-consent-preferences=([^;]+)/);

111 if (prefsMatch) {

112 try {

113 if (JSON.parse(decodeURIComponent(prefsMatch[1])).analytics !== true) {

114 return {

115 variant: 'control',

116 track: false

117 };

118 }

119 } catch {

120 return {

121 variant: 'control',

122 track: false

123 };

124 }

125 } else {

126 const country = params.get('country')?.toUpperCase() || (document.cookie.match(/(?:^|; )cf_geo=([A-Z]{2})/) || [])[1];

127 if (!country || CONSENT_COUNTRIES.has(country)) {

128 return {

129 variant: 'control',

130 track: false

131 };

132 }

133 }

134 let vid;

135 try {

136 const ajsMatch = document.cookie.match(/(?:^|; )ajs_anonymous_id=([^;]+)/);

137 if (ajsMatch) {

138 vid = decodeURIComponent(ajsMatch[1]).replace(/^"|"$/g, '');

139 } else {

140 vid = localStorage.getItem(VID_KEY);

141 if (!vid) {

142 vid = crypto.randomUUID();

143 }

144 document.cookie = `ajs_anonymous_id=${vid}; domain=.claude.com; path=/; Secure; SameSite=Lax; max-age=31536000`;

145 }

146 try {

147 localStorage.setItem(VID_KEY, vid);

148 } catch {}

149 } catch {

150 return {

151 variant: 'control',

152 track: false

153 };

154 }

155 const variant = preBucketed === '1' ? 'treatment' : preBucketed === '0' ? 'control' : bucket(flag, vid);

156 return {

157 variant,

158 track: true,

159 vid

160 };

161 });

162 useEffect(() => {

163 if (!decision.track) return;

164 fetch('https://api.anthropic.com/api/event_logging/v2/batch', {

165 method: 'POST',

166 headers: {

167 'Content-Type': 'application/json',

168 'x-service-name': 'claude_code_docs'

169 },

170 body: JSON.stringify({

171 events: [{

172 event_type: 'GrowthbookExperimentEvent',

173 event_data: {

174 device_id: decision.vid,

175 anonymous_id: decision.vid,

176 timestamp: new Date().toISOString(),

177 experiment_id: flag,

178 variation_id: decision.variant === 'treatment' ? 1 : 0,

179 environment: 'production'

180 }

181 }]

182 }),

183 keepalive: true

184 }).catch(() => {});

185 }, []);

186 return decision.variant === 'treatment' ? treatment : children;

187};

188 

189<Experiment flag="docs-contact-sales-cta" treatment={<ContactSalesCard surface="foundry" />} />

190 

191## Requisitos previos

192 

193Antes de configurar Claude Code con Microsoft Foundry, asegúrese de que tiene:

194 

195* Una suscripción de Azure con acceso a Microsoft Foundry

196* Permisos RBAC para crear recursos e implementaciones de Microsoft Foundry

197* Azure CLI instalado y configurado (opcional - solo necesario si no tiene otro mecanismo para obtener credenciales)

198 

199<Note>

200 Si está implementando Claude Code para múltiples usuarios, [fije las versiones de su modelo](#4-pin-model-versions) para evitar problemas cuando Anthropic lanza nuevos modelos.

201</Note>

202 

203## Configuración

204 

205### 1. Aprovisionar recurso de Microsoft Foundry

206 

207Primero, cree un recurso de Claude en Azure:

208 

2091. Navegue al [portal de Microsoft Foundry](https://ai.azure.com/)

2102. Cree un nuevo recurso, anotando el nombre de su recurso

2113. Cree implementaciones para los modelos de Claude:

212 * Claude Opus

213 * Claude Sonnet

214 * Claude Haiku

215 

216### 2. Configurar credenciales de Azure

217 

218Claude Code admite dos métodos de autenticación para Microsoft Foundry. Elija el método que mejor se ajuste a sus requisitos de seguridad.

219 

220**Opción A: Autenticación por clave API**

221 

2221. Navegue a su recurso en el portal de Microsoft Foundry

2232. Vaya a la sección **Endpoints and keys** (Puntos finales y claves)

2243. Copie **API Key** (Clave API)

2254. Establezca la variable de entorno:

226 

227```bash theme={null}

228export ANTHROPIC_FOUNDRY_API_KEY=your-azure-api-key

229```

230 

231**Opción B: Autenticación de Microsoft Entra ID**

232 

233Cuando `ANTHROPIC_FOUNDRY_API_KEY` no está configurado, Claude Code utiliza automáticamente la [cadena de credenciales predeterminada](https://learn.microsoft.com/en-us/azure/developer/javascript/sdk/authentication/credential-chains#defaultazurecredential-overview) del SDK de Azure.

234Esto admite una variedad de métodos para autenticar cargas de trabajo locales y remotas.

235 

236En entornos locales, comúnmente puede usar Azure CLI:

237 

238```bash theme={null}

239az login

240```

241 

242<Note>

243 Cuando se usa Microsoft Foundry, los comandos `/login` y `/logout` están deshabilitados ya que la autenticación se maneja a través de credenciales de Azure.

244</Note>

245 

246### 3. Configurar Claude Code

247 

248Establezca las siguientes variables de entorno para habilitar Microsoft Foundry:

249 

250```bash theme={null}

251# Enable Microsoft Foundry integration

252export CLAUDE_CODE_USE_FOUNDRY=1

253 

254# Azure resource name (replace {resource} with your resource name)

255export ANTHROPIC_FOUNDRY_RESOURCE={resource}

256# Or provide the full base URL:

257# export ANTHROPIC_FOUNDRY_BASE_URL=https://{resource}.services.ai.azure.com/anthropic

258```

259 

260### 4. Fijar versiones de modelo

261 

262<Warning>

263 Fije versiones de modelo específicas para cada implementación. Si utiliza alias de modelo (`sonnet`, `opus`, `haiku`) sin fijar, Claude Code puede intentar utilizar una versión de modelo más nueva que no está disponible en su cuenta de Foundry, rompiendo usuarios existentes cuando Anthropic lanza actualizaciones. Cuando cree implementaciones de Azure, seleccione una versión de modelo específica en lugar de "actualizar automáticamente a la última".

264</Warning>

265 

266Establezca las variables de modelo para que coincidan con los nombres de implementación que creó en el paso 1.

267 

268Sin `ANTHROPIC_DEFAULT_OPUS_MODEL`, el alias `opus` en Foundry se resuelve a Opus 4.6. Establézcalo en el ID de Opus 4.7 para usar el modelo más reciente:

269 

270```bash theme={null}

271export ANTHROPIC_DEFAULT_OPUS_MODEL='claude-opus-4-7'

272export ANTHROPIC_DEFAULT_SONNET_MODEL='claude-sonnet-4-6'

273export ANTHROPIC_DEFAULT_HAIKU_MODEL='claude-haiku-4-5'

274```

275 

276Para los ID de modelos actuales y heredados, consulte [Descripción general de modelos](https://platform.claude.com/docs/en/about-claude/models/overview). Consulte [Configuración de modelo](/es/model-config#pin-models-for-third-party-deployments) para la lista completa de variables de entorno.

277 

278[Prompt caching](https://platform.claude.com/docs/en/build-with-claude/prompt-caching) está habilitado automáticamente. Para solicitar un TTL de caché de 1 hora en lugar del predeterminado de 5 minutos, establezca la siguiente variable; las escrituras de caché con un TTL de 1 hora se facturan a una tasa más alta:

279 

280```bash theme={null}

281export ENABLE_PROMPT_CACHING_1H=1

282```

283 

284## Configuración de RBAC de Azure

285 

286Los roles predeterminados `Azure AI User` y `Cognitive Services User` incluyen todos los permisos necesarios para invocar modelos de Claude.

287 

288Para permisos más restrictivos, cree un rol personalizado con lo siguiente:

289 

290```json theme={null}

291{

292 "permissions": [

293 {

294 "dataActions": [

295 "Microsoft.CognitiveServices/accounts/providers/*"

296 ]

297 }

298 ]

299}

300```

301 

302Para más detalles, consulte la [documentación de RBAC de Microsoft Foundry](https://learn.microsoft.com/en-us/azure/ai-foundry/concepts/rbac-azure-ai-foundry).

303 

304## Solución de problemas

305 

306Si recibe un error "Failed to get token from azureADTokenProvider: ChainedTokenCredential authentication failed":

307 

308* Configure Entra ID en el entorno, o establezca `ANTHROPIC_FOUNDRY_API_KEY`.

309 

310## Recursos adicionales

311 

312* [Documentación de Microsoft Foundry](https://learn.microsoft.com/en-us/azure/ai-foundry/what-is-azure-ai-foundry)

313* [Modelos de Microsoft Foundry](https://ai.azure.com/explore/models)

314* [Precios de Microsoft Foundry](https://azure.microsoft.com/en-us/pricing/details/ai-foundry/)

model-config.md +382 −0 created

Details

1> ## Documentation Index

2> Fetch the complete documentation index at: https://code.claude.com/docs/llms.txt

3> Use this file to discover all available pages before exploring further.

4 

5# Configuración del modelo

6 

7> Aprenda sobre la configuración del modelo Claude Code, incluidos los alias de modelo como `opusplan`

8 

9## Modelos disponibles

10 

11Para la configuración de `model` en Claude Code, puede configurar:

12 

13* Un **alias de modelo**

14* Un **nombre de modelo**

15 * API de Anthropic: Un **[nombre de modelo](https://platform.claude.com/docs/es/about-claude/models/overview)** completo

16 * Bedrock: un ARN de perfil de inferencia

17 * Foundry: un nombre de implementación

18 * Vertex: un nombre de versión

19 

20### Alias de modelo

21 

22Los alias de modelo proporcionan una forma conveniente de seleccionar configuraciones de modelo sin necesidad de recordar números de versión exactos:

23 

24| Alias de modelo | Comportamiento |

25| ---------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

26| **`default`** | Valor especial que borra cualquier anulación de modelo y revierte al modelo recomendado para su tipo de cuenta. No es en sí mismo un alias de modelo |

27| **`best`** | Utiliza el modelo disponible más capaz, actualmente equivalente a `opus` |

28| **`sonnet`** | Utiliza el último modelo Sonnet para tareas de codificación diaria |

29| **`opus`** | Utiliza el último modelo Opus para tareas de razonamiento complejo |

30| **`haiku`** | Utiliza el modelo Haiku rápido y eficiente para tareas simples |

31| **`sonnet[1m]`** | Utiliza Sonnet con una [ventana de contexto de 1 millón de tokens](https://platform.claude.com/docs/es/build-with-claude/context-windows#1m-token-context-window) para sesiones largas |

32| **`opus[1m]`** | Utiliza Opus con una [ventana de contexto de 1 millón de tokens](https://platform.claude.com/docs/es/build-with-claude/context-windows#1m-token-context-window) para sesiones largas |

33| **`opusplan`** | Modo especial que utiliza `opus` durante el modo de plan, luego cambia a `sonnet` para la ejecución |

34 

35En la API de Anthropic, `opus` se resuelve a Opus 4.7 y `sonnet` se resuelve a Sonnet 4.6. En Bedrock, Vertex y Foundry, `opus` se resuelve a Opus 4.6 y `sonnet` se resuelve a Sonnet 4.5; hay modelos más nuevos disponibles en esos proveedores seleccionando el nombre de modelo completo explícitamente o estableciendo `ANTHROPIC_DEFAULT_OPUS_MODEL` o `ANTHROPIC_DEFAULT_SONNET_MODEL`.

36 

37Los alias siempre apuntan a la versión recomendada para su proveedor y se actualizan con el tiempo. Para fijar una versión específica, utilice el nombre de modelo completo (por ejemplo, `claude-opus-4-7`) o establezca la variable de entorno correspondiente como `ANTHROPIC_DEFAULT_OPUS_MODEL`.

38 

39<Note>

40 Opus 4.7 requiere Claude Code v2.1.111 o posterior. Ejecute `claude update` para actualizar.

41</Note>

42 

43### Configurar su modelo

44 

45Puede configurar su modelo de varias formas, enumeradas en orden de prioridad:

46 

471. **Durante la sesión** - Utilice `/model <alias|name>` para cambiar inmediatamente, o ejecute `/model` sin argumentos para abrir el selector. El selector solicita confirmación cuando la conversación tiene salida anterior, ya que la siguiente respuesta relee el historial completo sin contexto en caché

482. **Al inicio** - Inicie con `claude --model <alias|name>`

493. **Variable de entorno** - Establezca `ANTHROPIC_MODEL=<alias|name>`

504. **Configuración** - Configure permanentemente en su archivo de configuración utilizando el campo `model`.

51 

52Su selección de `/model` se guarda en la configuración del usuario y persiste entre reinicios. A partir de v2.1.117, si el archivo `.claude/settings.json` del proyecto fija un modelo diferente, Claude Code también escribe su selección en `.claude/settings.local.json` para que continúe aplicándose en ese proyecto después de un reinicio. La configuración administrada tiene prioridad y se reaplicará en el siguiente lanzamiento.

53 

54Cuando el modelo activo al inicio proviene de la configuración del proyecto o administrada en lugar de su propia selección, el encabezado de inicio muestra qué archivo de configuración lo estableció. Ejecute `/model` para anular la selección de la sesión actual.

55 

56Ejemplo de uso:

57 

58```bash theme={null}

59# Iniciar con Opus

60claude --model opus

61 

62# Cambiar a Sonnet durante la sesión

63/model sonnet

64```

65 

66Archivo de configuración de ejemplo:

67 

68```json theme={null}

69{

70 "permissions": {

71 ...

72 },

73 "model": "opus"

74}

75```

76 

77## Restringir la selección de modelo

78 

79Los administradores empresariales pueden utilizar `availableModels` en [configuración administrada o de política](/es/settings#settings-files) para restringir qué modelos pueden seleccionar los usuarios.

80 

81Cuando se establece `availableModels`, los usuarios no pueden cambiar a modelos que no estén en la lista a través de `/model`, la bandera `--model`, o la variable de entorno `ANTHROPIC_MODEL`.

82 

83```json theme={null}

84{

85 "availableModels": ["sonnet", "haiku"]

86}

87```

88 

89### Comportamiento del modelo predeterminado

90 

91La opción Predeterminado en el selector de modelo no se ve afectada por `availableModels`. Siempre permanece disponible y representa el valor predeterminado de tiempo de ejecución del sistema [basado en el nivel de suscripción del usuario](#default-model-setting).

92 

93Incluso con `availableModels: []`, los usuarios aún pueden usar Claude Code con el modelo Predeterminado para su nivel.

94 

95### Controlar el modelo en el que se ejecutan los usuarios

96 

97La configuración de `model` es una selección inicial, no una aplicación. Establece qué modelo está activo cuando comienza una sesión, pero los usuarios aún pueden abrir `/model` y elegir Predeterminado, que se resuelve al valor predeterminado del sistema para su nivel independientemente de lo que esté configurado en `model`.

98 

99Para controlar completamente la experiencia del modelo, combine tres configuraciones:

100 

101* **`availableModels`**: restringe a qué modelos nombrados pueden cambiar los usuarios

102* **`model`**: establece la selección de modelo inicial cuando comienza una sesión

103* **`ANTHROPIC_DEFAULT_SONNET_MODEL`** / **`ANTHROPIC_DEFAULT_OPUS_MODEL`** / **`ANTHROPIC_DEFAULT_HAIKU_MODEL`**: controlan a qué se resuelven la opción Predeterminado y los alias `sonnet`, `opus` y `haiku`

104 

105Este ejemplo inicia a los usuarios en Sonnet 4.5, limita el selector a Sonnet y Haiku, y fija Predeterminado para que se resuelva a Sonnet 4.5 en lugar de la versión más reciente:

106 

107```json theme={null}

108{

109 "model": "claude-sonnet-4-5",

110 "availableModels": ["claude-sonnet-4-5", "haiku"],

111 "env": {

112 "ANTHROPIC_DEFAULT_SONNET_MODEL": "claude-sonnet-4-5"

113 }

114}

115```

116 

117Sin el bloque `env`, un usuario que seleccione Predeterminado en el selector obtendría la versión más reciente de Sonnet, omitiendo la fijación de versión en `model` y `availableModels`.

118 

119### Comportamiento de fusión

120 

121Cuando `availableModels` se establece en múltiples niveles, como configuración de usuario y configuración de proyecto, los arrays se fusionan y se desduplican. Para aplicar una lista de permitidos estricta, establezca `availableModels` en configuración administrada o de política que tenga la máxima prioridad.

122 

123### IDs de modelo Mantle

124 

125Cuando el [punto final Bedrock Mantle](/es/amazon-bedrock#use-the-mantle-endpoint) está habilitado, las entradas en `availableModels` que comienzan con `anthropic.` se agregan al selector `/model` como opciones personalizadas y se enrutan al punto final Mantle. Esta es una excepción a la coincidencia solo de alias descrita en [Fijar modelos para implementaciones de terceros](#pin-models-for-third-party-deployments). La configuración aún restringe el selector a las entradas enumeradas, así que incluya los alias estándar junto con cualquier ID de Mantle.

126 

127## Comportamiento especial del modelo

128 

129### Configuración del modelo `default`

130 

131El comportamiento de `default` depende del tipo de cuenta:

132 

133* **Max y Team Premium**: por defecto Opus 4.7

134* **Pro, Team Standard, Enterprise y API de Anthropic**: por defecto Sonnet 4.6

135* **Bedrock, Vertex y Foundry**: por defecto Sonnet 4.5

136 

137Claude Code puede retroceder automáticamente a Sonnet si alcanza un umbral de uso con Opus.

138 

139<Note>

140 El 23 de abril de 2026, el modelo predeterminado para usuarios de Enterprise de pago por uso y API de Anthropic cambiará a Opus 4.7. Para mantener un predeterminado diferente, establezca `ANTHROPIC_MODEL` o el campo `model` en [configuración administrada por servidor](/es/server-managed-settings).

141</Note>

142 

143### Configuración del modelo `opusplan`

144 

145El alias de modelo `opusplan` proporciona un enfoque híbrido automatizado:

146 

147* **En Plan Mode** - Utiliza `opus` para razonamiento complejo y decisiones de arquitectura

148* **En modo de ejecución** - Cambia automáticamente a `sonnet` para generación de código e implementación

149 

150Esto le da lo mejor de ambos mundos: el razonamiento superior de Opus para la planificación y la eficiencia de Sonnet para la ejecución.

151 

152La fase Opus en Plan Mode se ejecuta con la ventana de contexto estándar de 200K. La actualización automática de 1M descrita en [Contexto extendido](#extended-context) se aplica a la configuración del modelo `opus` y no se extiende a `opusplan`.

153 

154### Ajustar el nivel de esfuerzo

155 

156[Los niveles de esfuerzo](https://platform.claude.com/docs/es/build-with-claude/effort) controlan el razonamiento adaptativo, que permite que el modelo decida si y cuánto pensar en cada paso basado en la complejidad de la tarea. El esfuerzo menor es más rápido y económico para tareas directas, mientras que el esfuerzo mayor proporciona un razonamiento más profundo para problemas complejos.

157 

158El esfuerzo es compatible con Opus 4.7, Opus 4.6 y Sonnet 4.6. Los niveles disponibles dependen del modelo:

159 

160| Modelo | Niveles |

161| :-------------------- | :-------------------------------------- |

162| Opus 4.7 | `low`, `medium`, `high`, `xhigh`, `max` |

163| Opus 4.6 y Sonnet 4.6 | `low`, `medium`, `high`, `max` |

164 

165Si establece un nivel que el modelo activo no admite, Claude Code retrocede al nivel más alto admitido en o por debajo del que estableció. Por ejemplo, `xhigh` se ejecuta como `high` en Opus 4.6.

166 

167A partir de v2.1.117, el esfuerzo predeterminado es `xhigh` en Opus 4.7 y `high` en Opus 4.6 y Sonnet 4.6.

168 

169Cuando ejecuta Opus 4.7 por primera vez, Claude Code aplica `xhigh` incluso si estableció anteriormente un nivel de esfuerzo diferente para Opus 4.6 o Sonnet 4.6. Ejecute `/effort` nuevamente para elegir un nivel diferente después de cambiar.

170 

171`low`, `medium`, `high` y `xhigh` persisten entre sesiones. `max` proporciona el razonamiento más profundo sin restricción en el gasto de tokens y se aplica solo a la sesión actual, excepto cuando se establece a través de la variable de entorno `CLAUDE_CODE_EFFORT_LEVEL`.

172 

173#### Elegir un nivel de esfuerzo

174 

175Cada nivel intercambia gasto de tokens contra capacidad. El predeterminado es adecuado para la mayoría de tareas de codificación; ajuste cuando desee un equilibrio diferente.

176 

177| Nivel | Cuándo usarlo |

178| :------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------ |

179| `low` | Reserve para tareas cortas, limitadas y sensibles a la latencia que no son sensibles a la inteligencia |

180| `medium` | Reduce el uso de tokens para trabajo sensible a costos que puede intercambiar algo de inteligencia |

181| `high` | Equilibra el uso de tokens e inteligencia. Utilice como mínimo para trabajo sensible a la inteligencia, o para reducir el gasto de tokens en relación con `xhigh` |

182| `xhigh` | Mejores resultados para la mayoría de tareas de codificación y agentes. Predeterminado recomendado en Opus 4.7 |

183| `max` | Puede mejorar el rendimiento en tareas exigentes pero puede mostrar rendimientos decrecientes y es propenso a pensar demasiado. Pruebe antes de adoptar ampliamente |

184 

185La escala de esfuerzo se calibra por modelo, por lo que el mismo nombre de nivel no representa el mismo valor subyacente en todos los modelos.

186 

187Para razonamiento profundo único sin cambiar su configuración de sesión, incluya "ultrathink" en su indicación. Esto agrega una instrucción en contexto que le dice al modelo que razone más en ese turno; no cambia el nivel de esfuerzo enviado a la API.

188 

189#### Establecer el nivel de esfuerzo

190 

191Puede cambiar el esfuerzo a través de cualquiera de los siguientes:

192 

193* **`/effort`**: ejecute `/effort` sin argumentos para abrir un control deslizante interactivo, `/effort` seguido de un nombre de nivel para establecerlo directamente, o `/effort auto` para restablecer el predeterminado del modelo

194* **En `/model`**: utilice las teclas de flecha izquierda/derecha para ajustar el control deslizante de esfuerzo al seleccionar un modelo

195* **Bandera `--effort`**: pase un nombre de nivel para establecerlo para una única sesión al iniciar Claude Code

196* **Variable de entorno**: establezca `CLAUDE_CODE_EFFORT_LEVEL` en un nombre de nivel o `auto`

197* **Configuración**: establezca `effortLevel` en su archivo de configuración

198* **Frontmatter de skill y subagent**: establezca `effort` en un archivo markdown de [skill](/es/skills#frontmatter-reference) o [subagent](/es/sub-agents#supported-frontmatter-fields) para anular el nivel de esfuerzo cuando ese skill o subagent se ejecuta

199 

200La variable de entorno tiene precedencia sobre todos los demás métodos, luego su nivel configurado, luego el predeterminado del modelo. El esfuerzo de frontmatter se aplica cuando ese skill o subagent está activo, anulando el nivel de sesión pero no la variable de entorno.

201 

202El control deslizante de esfuerzo aparece en `/model` cuando se selecciona un modelo compatible. El nivel de esfuerzo actual también se muestra junto al logotipo y al indicador, por ejemplo "with low effort", para que pueda confirmar qué configuración está activa sin abrir `/model`.

203 

204#### Razonamiento adaptativo y presupuestos de pensamiento fijo

205 

206El razonamiento adaptativo hace que el pensamiento sea opcional en cada paso, por lo que Claude puede responder más rápido a indicaciones rutinarias y reservar un pensamiento más profundo para pasos que se benefician de él. Si desea que Claude piense más o menos a menudo de lo que produce el nivel actual, puede decirlo directamente en su indicación o en `CLAUDE.md`; el modelo responde a esa orientación dentro de su configuración de esfuerzo.

207 

208Opus 4.7 siempre utiliza razonamiento adaptativo. El modo de presupuesto de pensamiento fijo y `CLAUDE_CODE_DISABLE_ADAPTIVE_THINKING` no se aplican a él.

209 

210En Opus 4.6 y Sonnet 4.6, puede establecer `CLAUDE_CODE_DISABLE_ADAPTIVE_THINKING=1` para revertir al presupuesto de pensamiento fijo anterior controlado por `MAX_THINKING_TOKENS`. Consulte [variables de entorno](/es/env-vars).

211 

212### Contexto extendido

213 

214Opus 4.7, Opus 4.6 y Sonnet 4.6 admiten una [ventana de contexto de 1 millón de tokens](https://platform.claude.com/docs/es/build-with-claude/context-windows#1m-token-context-window) para sesiones largas con bases de código grandes.

215 

216La disponibilidad varía según el modelo y el plan. En los planes Max, Team y Enterprise, Opus se actualiza automáticamente a contexto de 1M sin configuración adicional. Esto se aplica tanto a los asientos de Team Standard como de Team Premium.

217 

218| Plan | Opus con contexto de 1M | Sonnet con contexto de 1M |

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

220| Max, Team y Enterprise | Incluido en la suscripción | Requiere [uso adicional](https://support.claude.com/es/articles/12429409-extra-usage-for-paid-claude-plans) |

221| Pro | Requiere [uso adicional](https://support.claude.com/es/articles/12429409-extra-usage-for-paid-claude-plans) | Requiere [uso adicional](https://support.claude.com/es/articles/12429409-extra-usage-for-paid-claude-plans) |

222| API y pago por uso | Acceso completo | Acceso completo |

223 

224Para desactivar completamente el contexto de 1M, establezca `CLAUDE_CODE_DISABLE_1M_CONTEXT=1`. Esto elimina variantes de modelo de 1M del selector de modelo. Consulte [variables de entorno](/es/env-vars).

225 

226La ventana de contexto de 1M utiliza precios de modelo estándar sin prima para tokens más allá de 200K. Para planes donde el contexto extendido está incluido en su suscripción, el uso permanece cubierto por su suscripción. Para planes que acceden al contexto extendido a través de uso adicional, los tokens se facturan al uso adicional.

227 

228Si su cuenta admite contexto de 1M, la opción aparece en el selector de modelo (`/model`) en las últimas versiones de Claude Code. Si no la ve, intente reiniciar su sesión.

229 

230También puede utilizar el sufijo `[1m]` con alias de modelo o nombres de modelo completos:

231 

232```bash theme={null}

233# Utilizar el alias opus[1m] o sonnet[1m]

234/model opus[1m]

235/model sonnet[1m]

236 

237# O añadir [1m] a un nombre de modelo completo

238/model claude-opus-4-7[1m]

239```

240 

241## Verificar su modelo actual

242 

243Puede ver qué modelo está utilizando actualmente de varias formas:

244 

2451. En [línea de estado](/es/statusline) (si está configurada)

2462. En `/status`, que también muestra la información de su cuenta.

247 

248## Agregar una opción de modelo personalizado

249 

250Utilice `ANTHROPIC_CUSTOM_MODEL_OPTION` para agregar una única entrada personalizada al selector `/model` sin reemplazar los alias integrados. Esto es útil para probar IDs de modelo que Claude Code no enumera de forma predeterminada. Para implementaciones de puerta de enlace LLM, Claude Code completa automáticamente el selector desde el punto final `/v1/models` de la puerta de enlace, por lo que esta variable solo es necesaria cuando el descubrimiento no devuelve el modelo que desea. Consulte [Selección de modelo de puerta de enlace LLM](/es/llm-gateway#model-selection).

251 

252Este ejemplo establece las tres variables para hacer que una implementación de Opus enrutada por puerta de enlace sea seleccionable:

253 

254```bash theme={null}

255export ANTHROPIC_CUSTOM_MODEL_OPTION="my-gateway/claude-opus-4-7"

256export ANTHROPIC_CUSTOM_MODEL_OPTION_NAME="Opus via Gateway"

257export ANTHROPIC_CUSTOM_MODEL_OPTION_DESCRIPTION="Custom deployment routed through the internal LLM gateway"

258```

259 

260La entrada personalizada aparece en la parte inferior del selector `/model`. `ANTHROPIC_CUSTOM_MODEL_OPTION_NAME` y `ANTHROPIC_CUSTOM_MODEL_OPTION_DESCRIPTION` son opcionales. Si se omiten, el ID de modelo se utiliza como nombre y la descripción tiene como valor predeterminado `Custom model (<model-id>)`.

261 

262Claude Code omite la validación para el ID de modelo establecido en `ANTHROPIC_CUSTOM_MODEL_OPTION`, por lo que puede utilizar cualquier cadena que su punto final de API acepte.

263 

264## Variables de entorno

265 

266Puede utilizar las siguientes variables de entorno, que deben ser **nombres de modelo** completos (o equivalentes para su proveedor de API), para controlar los nombres de modelo a los que se asignan los alias.

267 

268| Variable de entorno | Descripción |

269| -------------------------------- | ----------------------------------------------------------------------------------------------- |

270| `ANTHROPIC_DEFAULT_OPUS_MODEL` | El modelo a utilizar para `opus`, o para `opusplan` cuando Plan Mode está activo. |

271| `ANTHROPIC_DEFAULT_SONNET_MODEL` | El modelo a utilizar para `sonnet`, o para `opusplan` cuando Plan Mode no está activo. |

272| `ANTHROPIC_DEFAULT_HAIKU_MODEL` | El modelo a utilizar para `haiku`, o [funcionalidad de fondo](/es/costs#background-token-usage) |

273| `CLAUDE_CODE_SUBAGENT_MODEL` | El modelo a utilizar para [subagents](/es/sub-agents) |

274 

275Nota: `ANTHROPIC_SMALL_FAST_MODEL` está deprecado en favor de `ANTHROPIC_DEFAULT_HAIKU_MODEL`.

276 

277### Fijar modelos para implementaciones de terceros

278 

279Al implementar Claude Code a través de [Bedrock](/es/amazon-bedrock), [Vertex AI](/es/google-vertex-ai), o [Foundry](/es/microsoft-foundry), fije versiones de modelo antes de implementar para usuarios.

280 

281Sin fijar, Claude Code utiliza alias de modelo (`sonnet`, `opus`, `haiku`) que se resuelven a la versión más reciente. Cuando Anthropic lanza un nuevo modelo que aún no está habilitado en la cuenta de un usuario, los usuarios de Bedrock y Vertex AI ven un aviso y retroceden a la versión anterior para esa sesión, mientras que los usuarios de Foundry ven errores porque Foundry no tiene ninguna verificación de inicio equivalente.

282 

283<Warning>

284 Establezca las tres variables de entorno de modelo en IDs de versión específicos como parte de su configuración inicial. Fijar le permite controlar cuándo sus usuarios se mueven a un nuevo modelo.

285</Warning>

286 

287Utilice las siguientes variables de entorno con IDs de modelo específicos de versión para su proveedor:

288 

289| Proveedor | Ejemplo |

290| :-------- | :------------------------------------------------------------------- |

291| Bedrock | `export ANTHROPIC_DEFAULT_OPUS_MODEL='us.anthropic.claude-opus-4-7'` |

292| Vertex AI | `export ANTHROPIC_DEFAULT_OPUS_MODEL='claude-opus-4-7'` |

293| Foundry | `export ANTHROPIC_DEFAULT_OPUS_MODEL='claude-opus-4-7'` |

294 

295Aplique el mismo patrón para `ANTHROPIC_DEFAULT_SONNET_MODEL` y `ANTHROPIC_DEFAULT_HAIKU_MODEL`. Para IDs de modelo actuales y heredados en todos los proveedores, consulte [Descripción general de modelos](https://platform.claude.com/docs/es/about-claude/models/overview). Para actualizar usuarios a una nueva versión de modelo, actualice estas variables de entorno e implemente nuevamente.

296 

297Para habilitar [contexto extendido](#extended-context) para un modelo fijo, añada `[1m]` al ID de modelo en `ANTHROPIC_DEFAULT_OPUS_MODEL` o `ANTHROPIC_DEFAULT_SONNET_MODEL`:

298 

299```bash theme={null}

300export ANTHROPIC_DEFAULT_OPUS_MODEL='claude-opus-4-7[1m]'

301```

302 

303El sufijo `[1m]` aplica la ventana de contexto de 1M a todo el uso de ese alias, incluido `opusplan`. Claude Code elimina el sufijo antes de enviar el ID de modelo a su proveedor. Solo añada `[1m]` cuando el modelo subyacente admita contexto de 1M, como Opus 4.7 o Sonnet 4.6.

304 

305<Note>

306 La lista de permitidos `settings.availableModels` aún se aplica cuando se utilizan proveedores de terceros. El filtrado coincide con el alias de modelo (`opus`, `sonnet`, `haiku`), no con el ID de modelo específico del proveedor.

307</Note>

308 

309### Personalizar la visualización y capacidades del modelo fijo

310 

311Cuando fija un modelo en un proveedor de terceros, el ID específico del proveedor aparece tal cual en el selector `/model` y Claude Code puede no reconocer qué características admite el modelo. Puede anular el nombre de visualización y declarar capacidades con variables de entorno complementarias para cada modelo fijo.

312 

313Estas variables tienen efecto en proveedores de terceros como Bedrock, Vertex AI y Foundry. Las variables `_NAME` y `_DESCRIPTION` también tienen efecto cuando `ANTHROPIC_BASE_URL` apunta a una [puerta de enlace LLM](/es/llm-gateway). No tienen efecto cuando se conecta directamente a `api.anthropic.com`.

314 

315| Variable de entorno | Descripción |

316| ----------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------- |

317| `ANTHROPIC_DEFAULT_OPUS_MODEL_NAME` | Nombre de visualización para el modelo Opus fijo en el selector `/model`. Por defecto al ID de modelo cuando no está configurado |

318| `ANTHROPIC_DEFAULT_OPUS_MODEL_DESCRIPTION` | Descripción de visualización para el modelo Opus fijo en el selector `/model`. Por defecto a `Custom Opus model` cuando no está configurado |

319| `ANTHROPIC_DEFAULT_OPUS_MODEL_SUPPORTED_CAPABILITIES` | Lista separada por comas de capacidades que admite el modelo Opus fijo |

320 

321Los mismos sufijos `_NAME`, `_DESCRIPTION` y `_SUPPORTED_CAPABILITIES` están disponibles para `ANTHROPIC_DEFAULT_SONNET_MODEL`, `ANTHROPIC_DEFAULT_HAIKU_MODEL` y `ANTHROPIC_CUSTOM_MODEL_OPTION`.

322 

323Claude Code habilita características como [niveles de esfuerzo](#adjust-effort-level) y [pensamiento extendido](/es/common-workflows#use-extended-thinking-thinking-mode) haciendo coincidir el ID de modelo con patrones conocidos. Los IDs específicos del proveedor como ARNs de Bedrock o nombres de implementación personalizados a menudo no coinciden con estos patrones, dejando las características compatibles deshabilitadas. Establezca `_SUPPORTED_CAPABILITIES` para indicar a Claude Code qué características admite realmente el modelo:

324 

325| Valor de capacidad | Habilita |

326| ---------------------- | ---------------------------------------------------------------------------------------------------- |

327| `effort` | [Niveles de esfuerzo](#adjust-effort-level) y el comando `/effort` |

328| `xhigh_effort` | {/* min-version: 2.1.111 */}El nivel de esfuerzo `xhigh` |

329| `max_effort` | El nivel de esfuerzo `max` |

330| `thinking` | [Pensamiento extendido](/es/common-workflows#use-extended-thinking-thinking-mode) |

331| `adaptive_thinking` | Razonamiento adaptativo que asigna dinámicamente el pensamiento basado en la complejidad de la tarea |

332| `interleaved_thinking` | Pensamiento entre llamadas de herramientas |

333 

334Cuando se establece `_SUPPORTED_CAPABILITIES`, las capacidades enumeradas se habilitan y las capacidades no enumeradas se deshabilitan para el modelo fijo coincidente. Cuando la variable no está configurada, Claude Code vuelve a la detección integrada basada en el ID de modelo.

335 

336Este ejemplo fija Opus a un ARN de modelo personalizado de Bedrock, establece un nombre amigable y declara sus capacidades:

337 

338```bash theme={null}

339export ANTHROPIC_DEFAULT_OPUS_MODEL='arn:aws:bedrock:us-east-1:123456789012:custom-model/abc'

340export ANTHROPIC_DEFAULT_OPUS_MODEL_NAME='Opus via Bedrock'

341export ANTHROPIC_DEFAULT_OPUS_MODEL_DESCRIPTION='Opus 4.7 routed through a Bedrock custom endpoint'

342export ANTHROPIC_DEFAULT_OPUS_MODEL_SUPPORTED_CAPABILITIES='effort,xhigh_effort,max_effort,thinking,adaptive_thinking,interleaved_thinking'

343```

344 

345### Anular IDs de modelo por versión

346 

347Las variables de entorno a nivel de familia anteriores configuran un ID de modelo por alias de familia. Si necesita asignar varias versiones dentro de la misma familia a IDs de proveedor distintos, utilice la configuración `modelOverrides` en su lugar.

348 

349`modelOverrides` asigna IDs de modelo individuales de Anthropic a las cadenas específicas del proveedor que Claude Code envía a la API de su proveedor. Cuando un usuario selecciona un modelo asignado en el selector `/model`, Claude Code utiliza su valor configurado en lugar del predeterminado integrado.

350 

351Esto permite a los administradores empresariales enrutar cada versión de modelo a un ARN de perfil de inferencia de Bedrock específico, nombre de versión de Vertex AI o nombre de implementación de Foundry para gobernanza, asignación de costos o enrutamiento regional.

352 

353Establezca `modelOverrides` en su [archivo de configuración](/es/settings#settings-files):

354 

355```json theme={null}

356{

357 "modelOverrides": {

358 "claude-opus-4-7": "arn:aws:bedrock:us-east-2:123456789012:application-inference-profile/opus-prod",

359 "claude-opus-4-6": "arn:aws:bedrock:us-east-2:123456789012:application-inference-profile/opus-46-prod",

360 "claude-sonnet-4-6": "arn:aws:bedrock:us-east-2:123456789012:application-inference-profile/sonnet-prod"

361 }

362}

363```

364 

365Las claves deben ser IDs de modelo de Anthropic como se enumeran en la [Descripción general de modelos](https://platform.claude.com/docs/es/about-claude/models/overview). Para IDs de modelo con fecha, incluya el sufijo de fecha exactamente como aparece allí. Las claves desconocidas se ignoran.

366 

367Las anulaciones reemplazan los IDs de modelo integrados que respaldan cada entrada en el selector `/model`. En Bedrock, las anulaciones tienen precedencia sobre cualquier perfil de inferencia que Claude Code descubra automáticamente al inicio. Los valores que proporciona directamente a través de `ANTHROPIC_MODEL`, `--model`, o las variables de entorno `ANTHROPIC_DEFAULT_*_MODEL` se pasan al proveedor tal como están y no se transforman por `modelOverrides`.

368 

369`modelOverrides` funciona junto con `availableModels`. La lista de permitidos se evalúa contra el ID de modelo de Anthropic, no el valor de anulación, por lo que una entrada como `"opus"` en `availableModels` continúa coincidiendo incluso cuando las versiones de Opus se asignan a ARNs.

370 

371### Configuración de almacenamiento en caché de indicaciones

372 

373Claude Code utiliza automáticamente [almacenamiento en caché de indicaciones](https://platform.claude.com/docs/es/build-with-claude/prompt-caching) para optimizar el rendimiento y reducir costos. Puede desactivar el almacenamiento en caché de indicaciones globalmente o para niveles de modelo específicos:

374 

375| Variable de entorno | Descripción |

376| ------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------- |

377| `DISABLE_PROMPT_CACHING` | Establezca en `1` para desactivar el almacenamiento en caché de indicaciones para todos los modelos (tiene precedencia sobre configuraciones por modelo) |

378| `DISABLE_PROMPT_CACHING_HAIKU` | Establezca en `1` para desactivar el almacenamiento en caché de indicaciones solo para modelos Haiku |

379| `DISABLE_PROMPT_CACHING_SONNET` | Establezca en `1` para desactivar el almacenamiento en caché de indicaciones solo para modelos Sonnet |

380| `DISABLE_PROMPT_CACHING_OPUS` | Establezca en `1` para desactivar el almacenamiento en caché de indicaciones solo para modelos Opus |

381 

382Estas variables de entorno le dan control granular sobre el comportamiento del almacenamiento en caché de indicaciones. La configuración global `DISABLE_PROMPT_CACHING` tiene precedencia sobre las configuraciones específicas del modelo, permitiéndole desactivar rápidamente todo el almacenamiento en caché cuando sea necesario. Las configuraciones por modelo son útiles para control selectivo, como cuando se depura modelos específicos o se trabaja con proveedores de nube que pueden tener diferentes implementaciones de almacenamiento en caché.

monitoring-usage.md +955 −0 created

Details

1> ## Documentation Index

2> Fetch the complete documentation index at: https://code.claude.com/docs/llms.txt

3> Use this file to discover all available pages before exploring further.

4 

5# Monitoreo

6 

7> Aprende cómo habilitar y configurar OpenTelemetry para Claude Code.

8 

9Rastrea el uso de Claude Code, costos y actividad de herramientas en toda tu organización exportando datos de telemetría a través de OpenTelemetry (OTel). Claude Code exporta métricas como datos de series temporales a través del protocolo estándar de métricas, eventos a través del protocolo de registros/eventos, y opcionalmente trazas distribuidas a través del [protocolo de trazas](#traces-beta). Configura tus backends de métricas, registros y trazas para que coincidan con tus requisitos de monitoreo.

10 

11## Inicio rápido

12 

13Configura OpenTelemetry usando variables de entorno:

14 

15```bash theme={null}

16# 1. Habilitar telemetría

17export CLAUDE_CODE_ENABLE_TELEMETRY=1

18 

19# 2. Elegir exportadores (ambos son opcionales - configura solo lo que necesites)

20export OTEL_METRICS_EXPORTER=otlp # Opciones: otlp, prometheus, console, none

21export OTEL_LOGS_EXPORTER=otlp # Opciones: otlp, console, none

22 

23# 3. Configurar punto final OTLP (para exportador OTLP)

24export OTEL_EXPORTER_OTLP_PROTOCOL=grpc

25export OTEL_EXPORTER_OTLP_ENDPOINT=http://localhost:4317

26 

27# 4. Establecer autenticación (si es requerida)

28export OTEL_EXPORTER_OTLP_HEADERS="Authorization=Bearer your-token"

29 

30# 5. Para depuración: reducir intervalos de exportación

31export OTEL_METRIC_EXPORT_INTERVAL=10000 # 10 segundos (predeterminado: 60000ms)

32export OTEL_LOGS_EXPORT_INTERVAL=5000 # 5 segundos (predeterminado: 5000ms)

33 

34# 6. Ejecutar Claude Code

35claude

36```

37 

38<Note>

39 Los intervalos de exportación predeterminados son 60 segundos para métricas y 5 segundos para registros. Durante la configuración, es posible que desees usar intervalos más cortos para propósitos de depuración. Recuerda restablecer estos valores para uso en producción.

40</Note>

41 

42Para opciones de configuración completas, consulta la [especificación de OpenTelemetry](https://github.com/open-telemetry/opentelemetry-specification/blob/main/specification/protocol/exporter.md#configuration-options).

43 

44## Configuración del administrador

45 

46Los administradores pueden configurar los ajustes de OpenTelemetry para todos los usuarios a través del [archivo de configuración administrada](/es/settings#settings-files). Esto permite el control centralizado de los ajustes de telemetría en toda una organización. Consulta la [precedencia de configuración](/es/settings#settings-precedence) para obtener más información sobre cómo se aplican los ajustes.

47 

48Ejemplo de configuración de ajustes administrados:

49 

50```json theme={null}

51{

52 "env": {

53 "CLAUDE_CODE_ENABLE_TELEMETRY": "1",

54 "OTEL_METRICS_EXPORTER": "otlp",

55 "OTEL_LOGS_EXPORTER": "otlp",

56 "OTEL_EXPORTER_OTLP_PROTOCOL": "grpc",

57 "OTEL_EXPORTER_OTLP_ENDPOINT": "http://collector.example.com:4317",

58 "OTEL_EXPORTER_OTLP_HEADERS": "Authorization=Bearer example-token"

59 }

60}

61```

62 

63<Note>

64 Los ajustes administrados pueden distribuirse a través de MDM (Mobile Device Management) u otras soluciones de gestión de dispositivos. Las variables de entorno definidas en el archivo de configuración administrada tienen alta precedencia y no pueden ser anuladas por los usuarios.

65</Note>

66 

67## Detalles de configuración

68 

69### Variables de configuración comunes

70 

71| Variable de Entorno | Descripción | Valores de Ejemplo |

72| --------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------- |

73| `CLAUDE_CODE_ENABLE_TELEMETRY` | Habilita la recopilación de telemetría (requerido) | `1` |

74| `OTEL_METRICS_EXPORTER` | Tipos de exportador de métricas, separados por comas. Usa `none` para deshabilitar | `console`, `otlp`, `prometheus`, `none` |

75| `OTEL_LOGS_EXPORTER` | Tipos de exportador de registros/eventos, separados por comas. Usa `none` para deshabilitar | `console`, `otlp`, `none` |

76| `OTEL_EXPORTER_OTLP_PROTOCOL` | Protocolo para exportador OTLP, se aplica a todas las señales | `grpc`, `http/json`, `http/protobuf` |

77| `OTEL_EXPORTER_OTLP_ENDPOINT` | Punto final del recopilador OTLP para todas las señales | `http://localhost:4317` |

78| `OTEL_EXPORTER_OTLP_METRICS_PROTOCOL` | Protocolo para métricas, anula la configuración general | `grpc`, `http/json`, `http/protobuf` |

79| `OTEL_EXPORTER_OTLP_METRICS_ENDPOINT` | Punto final de métricas OTLP, anula la configuración general | `http://localhost:4318/v1/metrics` |

80| `OTEL_EXPORTER_OTLP_LOGS_PROTOCOL` | Protocolo para registros, anula la configuración general | `grpc`, `http/json`, `http/protobuf` |

81| `OTEL_EXPORTER_OTLP_LOGS_ENDPOINT` | Punto final de registros OTLP, anula la configuración general | `http://localhost:4318/v1/logs` |

82| `OTEL_EXPORTER_OTLP_HEADERS` | Encabezados de autenticación para OTLP | `Authorization=Bearer token` |

83| `OTEL_EXPORTER_OTLP_METRICS_CLIENT_KEY` | Clave de cliente para autenticación mTLS | Ruta al archivo de clave de cliente |

84| `OTEL_EXPORTER_OTLP_METRICS_CLIENT_CERTIFICATE` | Certificado de cliente para autenticación mTLS | Ruta al archivo de certificado de cliente |

85| `OTEL_METRIC_EXPORT_INTERVAL` | Intervalo de exportación en milisegundos (predeterminado: 60000) | `5000`, `60000` |

86| `OTEL_LOGS_EXPORT_INTERVAL` | Intervalo de exportación de registros en milisegundos (predeterminado: 5000) | `1000`, `10000` |

87| `OTEL_LOG_USER_PROMPTS` | Habilitar registro del contenido del mensaje del usuario (predeterminado: deshabilitado) | `1` para habilitar |

88| `OTEL_LOG_TOOL_DETAILS` | Habilitar registro de parámetros de herramientas e argumentos de entrada en eventos de herramientas y atributos de span de traza: comandos Bash, nombres de servidor MCP y herramienta, nombres de habilidades, e entrada de herramienta. También habilita nombres de comandos personalizados, de plugin y MCP en eventos `user_prompt` (predeterminado: deshabilitado) | `1` para habilitar |

89| `OTEL_LOG_TOOL_CONTENT` | Habilitar registro de contenido de entrada y salida de herramientas en eventos de span (predeterminado: deshabilitado). Requiere [trazas](#traces-beta). El contenido se trunca en 60 KB | `1` para habilitar |

90| `OTEL_LOG_RAW_API_BODIES` | Emitir el cuerpo completo de solicitud y respuesta JSON de la API de Mensajes de Anthropic como eventos de registro `api_request_body` / `api_response_body` (predeterminado: deshabilitado). Los cuerpos incluyen el historial de conversación completo. Habilitar esto implica consentimiento a todo lo que `OTEL_LOG_USER_PROMPTS`, `OTEL_LOG_TOOL_DETAILS`, y `OTEL_LOG_TOOL_CONTENT` revelarían | `1` para cuerpos en línea truncados en 60 KB, o `file:<dir>` para cuerpos sin truncar en disco con un puntero `body_ref` en el evento |

91| `OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE` | Preferencia de temporalidad de métricas (predeterminado: `delta`). Establece en `cumulative` si tu backend espera temporalidad acumulativa | `delta`, `cumulative` |

92| `CLAUDE_CODE_OTEL_HEADERS_HELPER_DEBOUNCE_MS` | Intervalo para actualizar encabezados dinámicos (predeterminado: 1740000ms / 29 minutos) | `900000` |

93 

94### Control de cardinalidad de métricas

95 

96Las siguientes variables de entorno controlan qué atributos se incluyen en las métricas para gestionar la cardinalidad:

97 

98| Variable de Entorno | Descripción | Valor Predeterminado | Ejemplo para Deshabilitar |

99| ----------------------------------- | ------------------------------------------------------------------- | -------------------- | ------------------------- |

100| `OTEL_METRICS_INCLUDE_SESSION_ID` | Incluir atributo session.id en métricas | `true` | `false` |

101| `OTEL_METRICS_INCLUDE_VERSION` | Incluir atributo app.version en métricas | `false` | `true` |

102| `OTEL_METRICS_INCLUDE_ACCOUNT_UUID` | Incluir atributos user.account\_uuid y user.account\_id en métricas | `true` | `false` |

103 

104Estas variables ayudan a controlar la cardinalidad de las métricas, lo que afecta los requisitos de almacenamiento y el rendimiento de las consultas en tu backend de métricas. Una cardinalidad más baja generalmente significa mejor rendimiento y costos de almacenamiento más bajos, pero datos menos granulares para el análisis.

105 

106### Trazas (beta)

107 

108Las trazas distribuidas exportan spans que vinculan cada mensaje del usuario a las solicitudes de API y ejecuciones de herramientas que desencadena, para que puedas ver una solicitud completa como una única traza en tu backend de trazas.

109 

110Las trazas están deshabilitadas por defecto. Para habilitarlas, establece tanto `CLAUDE_CODE_ENABLE_TELEMETRY=1` como `CLAUDE_CODE_ENHANCED_TELEMETRY_BETA=1`, luego establece `OTEL_TRACES_EXPORTER` para elegir dónde se envían los spans. Las trazas reutilizan la [configuración OTLP común](#common-configuration-variables) para punto final, protocolo y encabezados.

111 

112| Variable de Entorno | Descripción | Valores de Ejemplo |

113| ------------------------------------- | ---------------------------------------------------------------------------------------- | ------------------------------------ |

114| `CLAUDE_CODE_ENHANCED_TELEMETRY_BETA` | Habilitar trazas de span (requerido). `ENABLE_ENHANCED_TELEMETRY_BETA` también se acepta | `1` |

115| `OTEL_TRACES_EXPORTER` | Tipos de exportador de trazas, separados por comas. Usa `none` para deshabilitar | `console`, `otlp`, `none` |

116| `OTEL_EXPORTER_OTLP_TRACES_PROTOCOL` | Protocolo para trazas, anula `OTEL_EXPORTER_OTLP_PROTOCOL` | `grpc`, `http/json`, `http/protobuf` |

117| `OTEL_EXPORTER_OTLP_TRACES_ENDPOINT` | Punto final de trazas OTLP, anula `OTEL_EXPORTER_OTLP_ENDPOINT` | `http://localhost:4318/v1/traces` |

118| `OTEL_TRACES_EXPORT_INTERVAL` | Intervalo de exportación de lote de span en milisegundos (predeterminado: 5000) | `1000`, `10000` |

119 

120Los spans redactan el texto del mensaje del usuario, los detalles de entrada de herramientas y el contenido de herramientas por defecto. Establece `OTEL_LOG_USER_PROMPTS=1`, `OTEL_LOG_TOOL_DETAILS=1`, y `OTEL_LOG_TOOL_CONTENT=1` para incluirlos.

121 

122Cuando el trazado está activo, los subprocesos de Bash y PowerShell heredan automáticamente una variable de entorno `TRACEPARENT` que contiene el contexto de traza W3C del span de ejecución de herramienta activo. Esto permite que cualquier subproceso que lea `TRACEPARENT` padre sus propios spans bajo la misma traza, habilitando trazado distribuido de extremo a extremo a través de scripts y comandos que Claude ejecuta.

123 

124En sesiones del SDK de Agent y no interactivas iniciadas con `-p`, Claude Code también lee `TRACEPARENT` y `TRACESTATE` de su propio entorno cuando inicia cada span de interacción. Esto permite que un proceso de incrustación pase su contexto de traza W3C activo al subproceso para que los spans de Claude Code aparezcan como hijos de la traza distribuida del llamador. Las sesiones interactivas ignoran `TRACEPARENT` entrante para evitar heredar accidentalmente valores ambientes de entornos de CI o contenedor.

125 

126#### Jerarquía de spans

127 

128Cada mensaje del usuario inicia un span raíz `claude_code.interaction`. Las llamadas de API, llamadas de herramientas y ejecuciones de hooks se registran como sus hijos. Los spans de herramientas tienen dos spans hijos propios: uno para el tiempo dedicado a esperar una decisión de permiso y otro para la ejecución en sí. Cuando la herramienta Task genera un subagente, los spans de API y herramienta del subagente se anidan bajo el span `claude_code.tool` del padre.

129 

130```text theme={null}

131claude_code.interaction

132├── claude_code.llm_request

133├── claude_code.hook (requiere trazado beta detallado)

134└── claude_code.tool

135 ├── claude_code.tool.blocked_on_user

136 ├── claude_code.tool.execution

137 └── (herramienta Task) spans de claude_code.llm_request / claude_code.tool del subagente

138```

139 

140En sesiones del SDK de Agent y `claude -p`, `claude_code.interaction` en sí se convierte en un hijo del span del llamador cuando `TRACEPARENT` se establece en el entorno.

141 

142#### Atributos de spans

143 

144Cada span lleva los [atributos estándar](#standard-attributes) más un atributo `span.type` que coincide con su nombre. Las tablas a continuación enumeran los atributos adicionales establecidos en cada span. Los spans `llm_request`, `tool.execution`, y `hook` establecen el estado de OpenTelemetry `ERROR` cuando registran una falla; los otros spans siempre terminan con estado `UNSET`.

145 

146**`claude_code.interaction`**

147 

148| Atributo | Descripción | Controlado Por |

149| ------------------------- | ---------------------------------------------------------------------------------- | ----------------------- |

150| `user_prompt` | Texto del mensaje. El valor es `<REDACTED>` a menos que la puerta esté establecida | `OTEL_LOG_USER_PROMPTS` |

151| `user_prompt_length` | Longitud del mensaje en caracteres | |

152| `interaction.sequence` | Contador basado en 1 de interacciones en esta sesión | |

153| `interaction.duration_ms` | Duración de pared del turno | |

154 

155**`claude_code.llm_request`**

156 

157| Atributo | Descripción | Controlado Por |

158| -------------------------------- | --------------------------------------------------------------------------------------------------------------------- | -------------- |

159| `model` | Identificador de modelo | |

160| `gen_ai.system` | Siempre `anthropic`. Convención semántica de GenAI de OpenTelemetry | |

161| `gen_ai.request.model` | Mismo valor que `model`. Convención semántica de GenAI de OpenTelemetry | |

162| `query_source` | Subsistema que emitió la solicitud, como `repl_main_thread` o un nombre de subagente | |

163| `speed` | `fast` o `normal` | |

164| `llm_request.context` | `interaction`, `tool`, o `standalone` dependiendo del span padre | |

165| `duration_ms` | Duración de pared incluyendo reintentos | |

166| `ttft_ms` | Tiempo al primer token en milisegundos | |

167| `input_tokens` | Recuento de tokens de entrada del bloque de uso de API | |

168| `output_tokens` | Recuento de tokens de salida | |

169| `cache_read_tokens` | Tokens leídos del caché de mensaje | |

170| `cache_creation_tokens` | Tokens escritos en el caché de mensaje | |

171| `request_id` | ID de solicitud de API de Anthropic del encabezado de respuesta `request-id` | |

172| `gen_ai.response.id` | Mismo valor que `request_id`. Convención semántica de GenAI de OpenTelemetry | |

173| `client_request_id` | `x-client-request-id` generado por cliente del intento final | |

174| `attempt` | Intentos totales realizados para esta solicitud | |

175| `success` | `true` o `false` | |

176| `status_code` | Código de estado HTTP cuando la solicitud falló | |

177| `error` | Mensaje de error cuando la solicitud falló | |

178| `response.has_tool_call` | `true` cuando la respuesta contenía bloques de uso de herramientas | |

179| `stop_reason` | Respuesta de API `stop_reason`, como `end_turn`, `tool_use`, `max_tokens`, `stop_sequence`, `pause_turn`, o `refusal` | |

180| `gen_ai.response.finish_reasons` | Mismo valor que `stop_reason`, envuelto en una matriz de cadena. Convención semántica de GenAI de OpenTelemetry | |

181 

182Cada intento de reintento también se registra como un evento de span `gen_ai.request.attempt` con atributos `attempt` e `client_request_id`.

183 

184**`claude_code.tool`**

185 

186| Atributo | Descripción | Controlado Por |

187| --------------- | ---------------------------------------------------------------- | ----------------------- |

188| `tool_name` | Nombre de la herramienta | |

189| `duration_ms` | Duración de pared incluyendo espera de permiso y ejecución | |

190| `result_tokens` | Tamaño aproximado de token del resultado de la herramienta | |

191| `file_path` | Ruta de archivo de destino para herramientas Read, Edit, y Write | `OTEL_LOG_TOOL_DETAILS` |

192| `full_command` | Cadena de comando para la herramienta Bash | `OTEL_LOG_TOOL_DETAILS` |

193| `skill_name` | Nombre de habilidad para la herramienta Skill | `OTEL_LOG_TOOL_DETAILS` |

194| `subagent_type` | Tipo de subagente para la herramienta Task | `OTEL_LOG_TOOL_DETAILS` |

195 

196Cuando `OTEL_LOG_TOOL_CONTENT=1`, este span también registra un evento de span `tool.output` cuyos atributos contienen los cuerpos de entrada y salida de la herramienta, truncados en 60 KB por atributo.

197 

198**`claude_code.tool.blocked_on_user`**

199 

200| Atributo | Descripción | Controlado Por |

201| ------------- | ------------------------------------------------------------------------------------------ | -------------- |

202| `duration_ms` | Tiempo dedicado a esperar la decisión de permiso | |

203| `decision` | `accept` o `reject` | |

204| `source` | Fuente de decisión, coincidiendo con el evento [Tool decision event](#tool-decision-event) | |

205 

206**`claude_code.tool.execution`**

207 

208| Atributo | Descripción | Controlado Por |

209| ------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------- |

210| `duration_ms` | Tiempo dedicado a ejecutar el cuerpo de la herramienta | |

211| `success` | `true` o `false` | |

212| `error` | Cadena de categoría de error cuando la ejecución falló, como `Error:ENOENT` o `ShellError`. Contiene el mensaje de error completo en su lugar cuando la puerta está establecida | `OTEL_LOG_TOOL_DETAILS` |

213 

214**`claude_code.hook`**

215 

216Este span se emite solo cuando el trazado beta detallado está activo, lo que requiere `ENABLE_BETA_TRACING_DETAILED=1` y `BETA_TRACING_ENDPOINT` además de la configuración del exportador de trazas anterior. En sesiones de CLI interactivas, esto también requiere que tu organización esté en la lista de permitidos para la característica. Las sesiones del SDK de Agent y no interactivas `-p` no están controladas. No se emite cuando solo `CLAUDE_CODE_ENHANCED_TELEMETRY_BETA` está establecido.

217 

218| Atributo | Descripción | Controlado Por |

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

220| `hook_event` | Tipo de evento de hook, como `PreToolUse` | |

221| `hook_name` | Nombre completo del hook, como `PreToolUse:Write` | |

222| `num_hooks` | Número de comandos de hook coincidentes ejecutados | |

223| `hook_definitions` | Configuración de hook serializada en JSON | `OTEL_LOG_TOOL_DETAILS` |

224| `duration_ms` | Duración de pared de todos los hooks coincidentes | |

225| `num_success` | Recuento de hooks que se completaron exitosamente | |

226| `num_blocking` | Recuento de hooks que devolvieron una decisión de bloqueo | |

227| `num_non_blocking_error` | Recuento de hooks que fallaron sin bloquear | |

228| `num_cancelled` | Recuento de hooks cancelados antes de completarse | |

229 

230<Note>

231 Atributos adicionales que contienen contenido como `new_context`, `system_prompt_preview`, `user_system_prompt`, `tool_input`, y `response.model_output` se emiten solo cuando el trazado beta detallado está activo. No son parte del esquema de span estable. `user_system_prompt` además requiere `OTEL_LOG_USER_PROMPTS=1`. Lleva solo el texto del mensaje del sistema que proporcionas a través de la opción `systemPrompt` del SDK o las banderas `--system-prompt` y `--append-system-prompt`, truncado en 60 KB, y se emite una vez por sesión en lugar de por solicitud.

232</Note>

233 

234### Encabezados dinámicos

235 

236Para entornos empresariales que requieren autenticación dinámica, puedes configurar un script para generar encabezados dinámicamente:

237 

238#### Configuración de ajustes

239 

240Agrega a tu `.claude/settings.json`:

241 

242```json theme={null}

243{

244 "otelHeadersHelper": "/bin/generate_opentelemetry_headers.sh"

245}

246```

247 

248#### Requisitos del script

249 

250El script debe generar JSON válido con pares clave-valor de cadena que representen encabezados HTTP:

251 

252```bash theme={null}

253#!/bin/bash

254# Ejemplo: Múltiples encabezados

255echo "{\"Authorization\": \"Bearer $(get-token.sh)\", \"X-API-Key\": \"$(get-api-key.sh)\"}"

256```

257 

258#### Comportamiento de actualización

259 

260El script auxiliar de encabezados se ejecuta al inicio y periódicamente después para admitir la actualización de tokens. Por defecto, el script se ejecuta cada 29 minutos. Personaliza el intervalo con la variable de entorno `CLAUDE_CODE_OTEL_HEADERS_HELPER_DEBOUNCE_MS`.

261 

262### Soporte de organización multi-equipo

263 

264Las organizaciones con múltiples equipos o departamentos pueden agregar atributos personalizados para distinguir entre diferentes grupos usando la variable de entorno `OTEL_RESOURCE_ATTRIBUTES`:

265 

266```bash theme={null}

267# Agregar atributos personalizados para identificación de equipo

268export OTEL_RESOURCE_ATTRIBUTES="department=engineering,team.id=platform,cost_center=eng-123"

269```

270 

271Estos atributos personalizados se incluirán en todas las métricas y eventos, permitiéndote:

272 

273* Filtrar métricas por equipo o departamento

274* Rastrear costos por centro de costos

275* Crear paneles específicos del equipo

276* Configurar alertas para equipos específicos

277 

278<Warning>

279 **Requisitos de formato importantes para OTEL\_RESOURCE\_ATTRIBUTES:**

280 

281 La variable de entorno `OTEL_RESOURCE_ATTRIBUTES` utiliza pares clave=valor separados por comas con requisitos de formato estrictos:

282 

283 * **No se permiten espacios**: Los valores no pueden contener espacios. Por ejemplo, `user.organizationName=My Company` es inválido

284 * **Formato**: Debe ser pares clave=valor separados por comas: `key1=value1,key2=value2`

285 * **Caracteres permitidos**: Solo caracteres US-ASCII excluyendo caracteres de control, espacios en blanco, comillas dobles, comas, puntos y comas, y barras invertidas

286 * **Caracteres especiales**: Los caracteres fuera del rango permitido deben estar codificados en porcentaje

287 

288 **Ejemplos:**

289 

290 ```bash theme={null}

291 # ❌ Inválido - contiene espacios

292 export OTEL_RESOURCE_ATTRIBUTES="org.name=John's Organization"

293 

294 # ✅ Válido - usar guiones bajos o camelCase en su lugar

295 export OTEL_RESOURCE_ATTRIBUTES="org.name=Johns_Organization"

296 export OTEL_RESOURCE_ATTRIBUTES="org.name=JohnsOrganization"

297 

298 # ✅ Válido - codificar en porcentaje caracteres especiales si es necesario

299 export OTEL_RESOURCE_ATTRIBUTES="org.name=John%27s%20Organization"

300 ```

301 

302 Nota: envolver valores entre comillas no escapa espacios. Por ejemplo, `org.name="My Company"` resulta en el valor literal `"My Company"` (con comillas incluidas), no `My Company`.

303</Warning>

304 

305### Configuraciones de ejemplo

306 

307Establece estas variables de entorno antes de ejecutar `claude`. Cada bloque muestra una configuración completa para un exportador diferente o escenario de implementación:

308 

309```bash theme={null}

310# Depuración de consola (intervalos de 1 segundo)

311export CLAUDE_CODE_ENABLE_TELEMETRY=1

312export OTEL_METRICS_EXPORTER=console

313export OTEL_METRIC_EXPORT_INTERVAL=1000

314 

315# OTLP/gRPC

316export CLAUDE_CODE_ENABLE_TELEMETRY=1

317export OTEL_METRICS_EXPORTER=otlp

318export OTEL_EXPORTER_OTLP_PROTOCOL=grpc

319export OTEL_EXPORTER_OTLP_ENDPOINT=http://localhost:4317

320 

321# Prometheus

322export CLAUDE_CODE_ENABLE_TELEMETRY=1

323export OTEL_METRICS_EXPORTER=prometheus

324 

325# Múltiples exportadores

326export CLAUDE_CODE_ENABLE_TELEMETRY=1

327export OTEL_METRICS_EXPORTER=console,otlp

328export OTEL_EXPORTER_OTLP_PROTOCOL=http/json

329 

330# Diferentes puntos finales/backends para métricas y registros

331export CLAUDE_CODE_ENABLE_TELEMETRY=1

332export OTEL_METRICS_EXPORTER=otlp

333export OTEL_LOGS_EXPORTER=otlp

334export OTEL_EXPORTER_OTLP_METRICS_PROTOCOL=http/protobuf

335export OTEL_EXPORTER_OTLP_METRICS_ENDPOINT=http://metrics.example.com:4318

336export OTEL_EXPORTER_OTLP_LOGS_PROTOCOL=grpc

337export OTEL_EXPORTER_OTLP_LOGS_ENDPOINT=http://logs.example.com:4317

338 

339# Solo métricas (sin eventos/registros)

340export CLAUDE_CODE_ENABLE_TELEMETRY=1

341export OTEL_METRICS_EXPORTER=otlp

342export OTEL_EXPORTER_OTLP_PROTOCOL=grpc

343export OTEL_EXPORTER_OTLP_ENDPOINT=http://localhost:4317

344 

345# Solo eventos/registros (sin métricas)

346export CLAUDE_CODE_ENABLE_TELEMETRY=1

347export OTEL_LOGS_EXPORTER=otlp

348export OTEL_EXPORTER_OTLP_PROTOCOL=grpc

349export OTEL_EXPORTER_OTLP_ENDPOINT=http://localhost:4317

350```

351 

352## Métricas y eventos disponibles

353 

354### Atributos estándar

355 

356Todas las métricas y eventos comparten estos atributos estándar:

357 

358| Atributo | Descripción | Controlado Por |

359| ------------------- | --------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------- |

360| `session.id` | Identificador único de sesión | `OTEL_METRICS_INCLUDE_SESSION_ID` (predeterminado: true) |

361| `app.version` | Versión actual de Claude Code | `OTEL_METRICS_INCLUDE_VERSION` (predeterminado: false) |

362| `organization.id` | UUID de organización (cuando está autenticado) | Siempre incluido cuando está disponible |

363| `user.account_uuid` | UUID de cuenta (cuando está autenticado) | `OTEL_METRICS_INCLUDE_ACCOUNT_UUID` (predeterminado: true) |

364| `user.account_id` | ID de cuenta en formato etiquetado que coincide con las API de administrador de Anthropic (cuando está autenticado), como `user_01BWBeN28...` | `OTEL_METRICS_INCLUDE_ACCOUNT_UUID` (predeterminado: true) |

365| `user.id` | Identificador anónimo de dispositivo/instalación, generado por instalación de Claude Code | Siempre incluido |

366| `user.email` | Dirección de correo electrónico del usuario (cuando está autenticado a través de OAuth) | Siempre incluido cuando está disponible |

367| `terminal.type` | Tipo de terminal, como `iTerm.app`, `vscode`, `cursor`, o `tmux` | Siempre incluido cuando se detecta |

368 

369Los eventos incluyen adicionalmente los siguientes atributos. Estos nunca se adjuntan a las métricas porque causarían cardinalidad ilimitada:

370 

371* `prompt.id`: UUID que correlaciona un mensaje del usuario con todos los eventos posteriores hasta el siguiente mensaje. Consulta [Atributos de correlación de eventos](#event-correlation-attributes).

372* `workspace.host_paths`: directorios de espacio de trabajo del host seleccionados en la aplicación de escritorio, como una matriz de cadenas

373 

374### Métricas

375 

376Claude Code exporta las siguientes métricas:

377 

378| Nombre de Métrica | Descripción | Unidad |

379| ------------------------------------- | ---------------------------------------------------------------------- | ------ |

380| `claude_code.session.count` | Recuento de sesiones CLI iniciadas | count |

381| `claude_code.lines_of_code.count` | Recuento de líneas de código modificadas | count |

382| `claude_code.pull_request.count` | Número de solicitudes de extracción creadas | count |

383| `claude_code.commit.count` | Número de confirmaciones de git creadas | count |

384| `claude_code.cost.usage` | Costo de la sesión de Claude Code | USD |

385| `claude_code.token.usage` | Número de tokens utilizados | tokens |

386| `claude_code.code_edit_tool.decision` | Recuento de decisiones de permisos de herramienta de edición de código | count |

387| `claude_code.active_time.total` | Tiempo activo total en segundos | s |

388 

389### Detalles de métricas

390 

391Cada métrica incluye los atributos estándar enumerados anteriormente. Las métricas con atributos adicionales específicos del contexto se indican a continuación.

392 

393#### Contador de sesión

394 

395Se incrementa al inicio de cada sesión.

396 

397**Atributos**:

398 

399* Todos los [atributos estándar](#standard-attributes)

400* `start_type`: Cómo se inició la sesión. Uno de `"fresh"`, `"resume"`, o `"continue"`

401 

402#### Contador de líneas de código

403 

404Se incrementa cuando se agrega o se elimina código.

405 

406**Atributos**:

407 

408* Todos los [atributos estándar](#standard-attributes)

409* `type`: (`"added"`, `"removed"`)

410 

411#### Contador de solicitud de extracción

412 

413Se incrementa al crear solicitudes de extracción a través de Claude Code.

414 

415**Atributos**:

416 

417* Todos los [atributos estándar](#standard-attributes)

418 

419#### Contador de confirmación

420 

421Se incrementa al crear confirmaciones de git a través de Claude Code.

422 

423**Atributos**:

424 

425* Todos los [atributos estándar](#standard-attributes)

426 

427#### Contador de costo

428 

429Se incrementa después de cada solicitud de API.

430 

431**Atributos**:

432 

433* Todos los [atributos estándar](#standard-attributes)

434* `model`: Identificador de modelo (por ejemplo, "claude-sonnet-4-6")

435* `query_source`: Categoría del subsistema que emitió la solicitud. Uno de `"main"`, `"subagent"`, o `"auxiliary"`

436* `speed`: `"fast"` cuando la solicitud utilizó modo rápido. Ausente de otra manera

437* `effort`: [Nivel de esfuerzo](/es/model-config#adjust-effort-level) aplicado a la solicitud: `"low"`, `"medium"`, `"high"`, `"xhigh"`, o `"max"`. Ausente cuando el modelo no admite esfuerzo.

438 

439#### Contador de tokens

440 

441Se incrementa después de cada solicitud de API.

442 

443**Atributos**:

444 

445* Todos los [atributos estándar](#standard-attributes)

446* `type`: (`"input"`, `"output"`, `"cacheRead"`, `"cacheCreation"`)

447* `model`: Identificador de modelo (por ejemplo, "claude-sonnet-4-6")

448* `query_source`: Categoría del subsistema que emitió la solicitud. Uno de `"main"`, `"subagent"`, o `"auxiliary"`

449* `speed`: `"fast"` cuando la solicitud utilizó modo rápido. Ausente de otra manera

450* `effort`: [Nivel de esfuerzo](/es/model-config#adjust-effort-level) aplicado a la solicitud. Consulta [Contador de costo](#cost-counter) para detalles.

451 

452#### Contador de decisión de herramienta de edición de código

453 

454Se incrementa cuando el usuario acepta o rechaza el uso de herramientas Edit, Write, o NotebookEdit.

455 

456**Atributos**:

457 

458* Todos los [atributos estándar](#standard-attributes)

459* `tool_name`: Nombre de la herramienta (`"Edit"`, `"Write"`, `"NotebookEdit"`)

460* `decision`: Decisión del usuario (`"accept"`, `"reject"`)

461* `source`: Fuente de decisión. Uno de `"config"`, `"hook"`, `"user_permanent"`, `"user_temporary"`, `"user_abort"`, o `"user_reject"`. Consulta el [Evento de decisión de herramienta](#tool-decision-event) para saber qué significa cada valor.

462* `language`: Lenguaje de programación del archivo editado, como `"TypeScript"`, `"Python"`, `"JavaScript"`, o `"Markdown"`. Devuelve `"unknown"` para extensiones de archivo no reconocidas.

463 

464#### Contador de tiempo activo

465 

466Rastrea el tiempo real dedicado a usar activamente Claude Code, excluyendo tiempo inactivo. Esta métrica se incrementa durante interacciones del usuario (escribir, leer respuestas) y durante procesamiento de CLI (ejecución de herramientas, generación de respuestas de IA).

467 

468**Atributos**:

469 

470* Todos los [atributos estándar](#standard-attributes)

471* `type`: `"user"` para interacciones de teclado, `"cli"` para ejecución de herramientas y respuestas de IA

472 

473### Eventos

474 

475Claude Code exporta los siguientes eventos a través de registros/eventos de OpenTelemetry (cuando `OTEL_LOGS_EXPORTER` está configurado):

476 

477#### Atributos de correlación de eventos

478 

479Cuando un usuario envía un mensaje, Claude Code puede hacer múltiples llamadas de API y ejecutar varias herramientas. El atributo `prompt.id` te permite vincular todos esos eventos al único mensaje que los desencadenó.

480 

481| Atributo | Descripción |

482| ----------- | --------------------------------------------------------------------------------------------------------------- |

483| `prompt.id` | Identificador UUID v4 que vincula todos los eventos producidos mientras se procesa un único mensaje del usuario |

484 

485Para rastrear toda la actividad desencadenada por un único mensaje, filtra tus eventos por un valor específico de `prompt.id`. Esto devuelve el evento user\_prompt, cualquier evento api\_request, y cualquier evento tool\_result que ocurrió mientras se procesaba ese mensaje.

486 

487<Note>

488 `prompt.id` se excluye intencionalmente de las métricas porque cada mensaje genera un ID único, lo que crearía un número siempre creciente de series temporales. Úsalo solo para análisis a nivel de evento y auditoría.

489</Note>

490 

491#### Evento de mensaje del usuario

492 

493Se registra cuando un usuario envía un mensaje.

494 

495**Nombre del Evento**: `claude_code.user_prompt`

496 

497**Atributos**:

498 

499* Todos los [atributos estándar](#standard-attributes)

500* `event.name`: `"user_prompt"`

501* `event.timestamp`: Marca de tiempo ISO 8601

502* `event.sequence`: Contador monotónicamente creciente para ordenar eventos dentro de una sesión

503* `prompt_length`: Longitud del mensaje

504* `prompt`: Contenido del mensaje (redactado por defecto, habilitar con `OTEL_LOG_USER_PROMPTS=1`)

505* `command_name`: Nombre del comando cuando el mensaje invoca uno. Los nombres de comandos integrados y agrupados como `compact` o `debug` se emiten tal cual; los alias como `reset` se emiten como se escribieron en lugar del nombre canónico. Los nombres de comandos personalizados, de plugin y MCP se contraen a `custom` o `mcp` a menos que `OTEL_LOG_TOOL_DETAILS=1` esté establecido

506* `command_source`: Origen del comando cuando está presente: `builtin`, `custom`, o `mcp`. Los comandos proporcionados por plugins reportan como `custom`

507 

508#### Evento de resultado de herramienta

509 

510Se registra cuando una herramienta completa la ejecución.

511 

512**Nombre del Evento**: `claude_code.tool_result`

513 

514**Atributos**:

515 

516* Todos los [atributos estándar](#standard-attributes)

517* `event.name`: `"tool_result"`

518* `event.timestamp`: Marca de tiempo ISO 8601

519* `event.sequence`: Contador monotónicamente creciente para ordenar eventos dentro de una sesión

520* `tool_name`: Nombre de la herramienta

521* `tool_use_id`: Identificador único para esta invocación de herramienta. Coincide con el `tool_use_id` pasado a hooks, permitiendo correlación entre eventos OTel y datos capturados por hooks.

522* `success`: `"true"` o `"false"`

523* `duration_ms`: Tiempo de ejecución en milisegundos

524* `error_type`: Cadena de categoría de error cuando la herramienta falló, como `"Error:ENOENT"` o `"ShellError"`

525* `error` (cuando `OTEL_LOG_TOOL_DETAILS=1`): Mensaje de error completo cuando la herramienta falló

526* `decision_type`: Ya sea `"accept"` o `"reject"`

527* `decision_source`: Fuente de decisión. Uno de `"config"`, `"hook"`, `"user_permanent"`, `"user_temporary"`, `"user_abort"`, o `"user_reject"`. Consulta el [Evento de decisión de herramienta](#tool-decision-event) para saber qué significa cada valor.

528* `tool_input_size_bytes`: Tamaño de la entrada de herramienta serializada en JSON en bytes

529* `tool_result_size_bytes`: Tamaño del resultado de la herramienta en bytes

530* `mcp_server_scope`: Identificador de alcance del servidor MCP (para herramientas MCP)

531* `tool_parameters` (cuando `OTEL_LOG_TOOL_DETAILS=1`): Cadena JSON que contiene parámetros específicos de la herramienta:

532 * Para herramienta Bash: incluye `bash_command`, `full_command`, `timeout`, `description`, `dangerouslyDisableSandbox`, y `git_commit_id` (el SHA del commit, cuando un comando `git commit` tiene éxito)

533 * Para herramientas MCP: incluye `mcp_server_name`, `mcp_tool_name`

534 * Para herramienta Skill: incluye `skill_name`

535 * Para herramienta Task: incluye `subagent_type`

536* `tool_input` (cuando `OTEL_LOG_TOOL_DETAILS=1`): Argumentos de herramienta serializados en JSON. Los valores individuales superiores a 512 caracteres se truncan, y la carga útil completa está limitada a aproximadamente 4 K caracteres. Se aplica a todas las herramientas, incluidas las herramientas MCP.

537 

538#### Evento de solicitud de API

539 

540Se registra para cada solicitud de API a Claude.

541 

542**Nombre del Evento**: `claude_code.api_request`

543 

544**Atributos**:

545 

546* Todos los [atributos estándar](#standard-attributes)

547* `event.name`: `"api_request"`

548* `event.timestamp`: Marca de tiempo ISO 8601

549* `event.sequence`: Contador monotónicamente creciente para ordenar eventos dentro de una sesión

550* `model`: Modelo utilizado (por ejemplo, "claude-sonnet-4-6")

551* `cost_usd`: Costo estimado en USD

552* `duration_ms`: Duración de la solicitud en milisegundos

553* `input_tokens`: Número de tokens de entrada

554* `output_tokens`: Número de tokens de salida

555* `cache_read_tokens`: Número de tokens leídos del caché

556* `cache_creation_tokens`: Número de tokens utilizados para la creación del caché

557* `request_id`: ID de solicitud de API de Anthropic del encabezado `request-id` de la respuesta, como `"req_011..."`. Presente solo cuando la API devuelve uno.

558* `speed`: `"fast"` o `"normal"`, indicando si el modo rápido estaba activo

559* `query_source`: Subsistema que emitió la solicitud, como `"repl_main_thread"`, `"compact"`, o un nombre de subagenteagente

560* `effort`: [Nivel de esfuerzo](/es/model-config#adjust-effort-level) aplicado a la solicitud: `"low"`, `"medium"`, `"high"`, `"xhigh"`, o `"max"`. Ausente cuando el modelo no admite esfuerzo.

561 

562#### Evento de error de API

563 

564Se registra cuando una solicitud de API a Claude falla.

565 

566**Nombre del Evento**: `claude_code.api_error`

567 

568**Atributos**:

569 

570* Todos los [atributos estándar](#standard-attributes)

571* `event.name`: `"api_error"`

572* `event.timestamp`: Marca de tiempo ISO 8601

573* `event.sequence`: Contador monotónicamente creciente para ordenar eventos dentro de una sesión

574* `model`: Modelo utilizado (por ejemplo, "claude-sonnet-4-6")

575* `error`: Mensaje de error

576* `status_code`: Código de estado HTTP como número. Ausente para errores no HTTP como fallos de conexión.

577* `duration_ms`: Duración de la solicitud en milisegundos

578* `attempt`: Número total de intentos realizados, incluyendo la solicitud inicial (`1` significa que no ocurrieron reintentos)

579* `request_id`: ID de solicitud de API de Anthropic del encabezado `request-id` de la respuesta, como `"req_011..."`. Presente solo cuando la API devuelve uno.

580* `speed`: `"fast"` o `"normal"`, indicando si el modo rápido estaba activo

581* `query_source`: Subsistema que emitió la solicitud, como `"repl_main_thread"`, `"compact"`, o un nombre de subagenteagente

582* `effort`: [Nivel de esfuerzo](/es/model-config#adjust-effort-level) aplicado a la solicitud. Ausente cuando el modelo no admite esfuerzo.

583 

584#### Evento de cuerpo de solicitud de API

585 

586Se registra para cada intento de solicitud de API cuando `OTEL_LOG_RAW_API_BODIES` está establecido. Se emite un evento por intento, por lo que los reintentos con parámetros ajustados producen cada uno su propio evento.

587 

588**Nombre del Evento**: `claude_code.api_request_body`

589 

590**Atributos**:

591 

592* Todos los [atributos estándar](#standard-attributes)

593* `event.name`: `"api_request_body"`

594* `event.timestamp`: Marca de tiempo ISO 8601

595* `event.sequence`: Contador monotónicamente creciente para ordenar eventos dentro de una sesión

596* `body`: Parámetros de solicitud de API de Mensajes serializados en JSON (mensaje del sistema, mensajes, herramientas, etc.), truncados en 60 KB. El contenido de pensamiento extendido en turnos de asistente anteriores se redacta. Se emite solo en modo en línea (`OTEL_LOG_RAW_API_BODIES=1`).

597* `body_ref`: Ruta absoluta a un archivo `<dir>/<uuid>.request.json` que contiene el cuerpo sin truncar. Se emite solo en modo de archivo (`OTEL_LOG_RAW_API_BODIES=file:<dir>`).

598* `body_length`: Longitud del cuerpo sin truncar. Bytes UTF-8 cuando `OTEL_LOG_RAW_API_BODIES=file:<dir>`, o unidades de código UTF-16 cuando `=1`

599* `body_truncated`: `"true"` cuando ocurrió truncamiento en línea. Ausente en modo de archivo y cuando no ocurrió truncamiento.

600* `model`: Identificador de modelo de los parámetros de solicitud

601* `query_source`: Subsistema que emitió la solicitud (por ejemplo, `"compact"`)

602 

603#### Evento de cuerpo de respuesta de API

604 

605Se registra para cada respuesta de API exitosa cuando `OTEL_LOG_RAW_API_BODIES` está establecido.

606 

607**Nombre del Evento**: `claude_code.api_response_body`

608 

609**Atributos**:

610 

611* Todos los [atributos estándar](#standard-attributes)

612* `event.name`: `"api_response_body"`

613* `event.timestamp`: Marca de tiempo ISO 8601

614* `event.sequence`: Contador monotónicamente creciente para ordenar eventos dentro de una sesión

615* `body`: Respuesta de API de Mensajes serializada en JSON (id, bloques de contenido, uso, razón de parada), truncada en 60 KB. El contenido de pensamiento extendido se redacta. Se emite solo en modo en línea (`OTEL_LOG_RAW_API_BODIES=1`).

616* `body_ref`: Ruta absoluta a un archivo `<dir>/<request_id>.response.json` que contiene el cuerpo sin truncar. Se emite solo en modo de archivo (`OTEL_LOG_RAW_API_BODIES=file:<dir>`).

617* `body_length`: Longitud del cuerpo sin truncar. Bytes UTF-8 cuando `OTEL_LOG_RAW_API_BODIES=file:<dir>`, o unidades de código UTF-16 cuando `=1`

618* `body_truncated`: `"true"` cuando ocurrió truncamiento en línea. Ausente en modo de archivo y cuando no ocurrió truncamiento.

619* `model`: Identificador de modelo

620* `query_source`: Subsistema que emitió la solicitud

621* `request_id`: ID de solicitud de API de Anthropic del encabezado `request-id` de la respuesta, como `"req_011..."`. Presente solo cuando la API devuelve uno.

622 

623#### Evento de decisión de herramienta

624 

625Se registra cuando se toma una decisión de permiso de herramienta (aceptar/rechazar).

626 

627**Nombre del Evento**: `claude_code.tool_decision`

628 

629**Atributos**:

630 

631* Todos los [atributos estándar](#standard-attributes)

632* `event.name`: `"tool_decision"`

633* `event.timestamp`: Marca de tiempo ISO 8601

634* `event.sequence`: Contador monotónicamente creciente para ordenar eventos dentro de una sesión

635* `tool_name`: Nombre de la herramienta (por ejemplo, "Read", "Edit", "Write", "NotebookEdit")

636* `tool_use_id`: Identificador único para esta invocación de herramienta. Coincide con el `tool_use_id` pasado a hooks, permitiendo correlación entre eventos OTel y datos capturados por hooks.

637* `decision`: Ya sea `"accept"` o `"reject"`

638* `source`: Fuente de decisión:

639 * `"config"`: Decidido automáticamente sin solicitar, basado en configuración del proyecto, política administrada empresarial, banderas `--allowedTools` o `--disallowedTools`, el modo de permiso activo, o porque la herramienta es inherentemente segura.

640 * `"hook"`: Un hook `PreToolUse` o `PermissionRequest` devolvió la decisión.

641 * `"user_permanent"`: Se emite cuando el usuario eligió "Siempre permitir" cuando se le solicitó, guardando una regla en su configuración personal. También se emite para llamadas posteriores que coincidan con esa regla guardada. Se trata como una aceptación.

642 * `"user_temporary"`: Se emite cuando el usuario eligió "Sí" o "Sí, para esta sesión" cuando se le solicitó, sin guardar una regla. También se emite para llamadas posteriores en la misma sesión que coincidan con esa permisión con alcance de sesión. Se trata como una aceptación.

643 * `"user_abort"`: Se emite cuando el usuario descartó el mensaje de permiso sin responder. Se trata como un rechazo.

644 * `"user_reject"`: Se emite cuando el usuario eligió "No" cuando se le solicitó, o una llamada coincidió con una regla de denegación en su configuración personal. Se trata como un rechazo.

645 

646#### Evento de cambio de modo de permiso

647 

648Se registra cuando el modo de permiso cambia, por ejemplo al ciclar con Shift+Tab, salir del modo de plan, o una verificación de puerta de modo automático.

649 

650**Nombre del Evento**: `claude_code.permission_mode_changed`

651 

652**Atributos**:

653 

654* Todos los [atributos estándar](#standard-attributes)

655* `event.name`: `"permission_mode_changed"`

656* `event.timestamp`: Marca de tiempo ISO 8601

657* `event.sequence`: Contador monotónicamente creciente para ordenar eventos dentro de una sesión

658* `from_mode`: El modo de permiso anterior, por ejemplo `"default"`, `"plan"`, `"acceptEdits"`, `"auto"`, o `"bypassPermissions"`

659* `to_mode`: El nuevo modo de permiso

660* `trigger`: Qué causó el cambio. Uno de `"shift_tab"`, `"exit_plan_mode"`, `"auto_gate_denied"`, o `"auto_opt_in"`. Ausente cuando la transición se origina del SDK o puente

661 

662#### Evento de autenticación

663 

664Se registra cuando `/login` o `/logout` se completa.

665 

666**Nombre del Evento**: `claude_code.auth`

667 

668**Atributos**:

669 

670* Todos los [atributos estándar](#standard-attributes)

671* `event.name`: `"auth"`

672* `event.timestamp`: Marca de tiempo ISO 8601

673* `event.sequence`: Contador monotónicamente creciente para ordenar eventos dentro de una sesión

674* `action`: `"login"` o `"logout"`

675* `success`: `"true"` o `"false"`

676* `auth_method`: Método de autenticación, como `"oauth"`

677* `error_category`: Tipo de error categórico cuando la acción falló. El mensaje de error sin procesar nunca se incluye

678* `status_code`: Código de estado HTTP como cadena cuando la acción falló con un error HTTP

679 

680#### Evento de conexión del servidor MCP

681 

682Se registra cuando un servidor MCP se conecta, desconecta o falla al conectarse.

683 

684**Nombre del Evento**: `claude_code.mcp_server_connection`

685 

686**Atributos**:

687 

688* Todos los [atributos estándar](#standard-attributes)

689* `event.name`: `"mcp_server_connection"`

690* `event.timestamp`: Marca de tiempo ISO 8601

691* `event.sequence`: Contador monotónicamente creciente para ordenar eventos dentro de una sesión

692* `status`: `"connected"`, `"failed"`, o `"disconnected"`

693* `transport_type`: Transporte del servidor, como `"stdio"`, `"sse"`, o `"http"`

694* `server_scope`: Alcance en el que está configurado el servidor, como `"user"`, `"project"`, o `"local"`

695* `duration_ms`: Duración del intento de conexión en milisegundos

696* `error_code`: Código de error cuando la conexión falló

697* `server_name` (cuando `OTEL_LOG_TOOL_DETAILS=1`): Nombre del servidor configurado

698* `error` (cuando `OTEL_LOG_TOOL_DETAILS=1`): Mensaje de error completo cuando la conexión falló

699 

700#### Evento de error interno

701 

702Se registra cuando Claude Code captura un error interno inesperado. Solo se registran el nombre de la clase de error y un código de estilo errno. El mensaje de error y el seguimiento de pila nunca se incluyen. Este evento no se emite cuando se ejecuta contra Bedrock, Vertex, o Foundry, o cuando `DISABLE_ERROR_REPORTING` está establecido.

703 

704**Nombre del Evento**: `claude_code.internal_error`

705 

706**Atributos**:

707 

708* Todos los [atributos estándar](#standard-attributes)

709* `event.name`: `"internal_error"`

710* `event.timestamp`: Marca de tiempo ISO 8601

711* `event.sequence`: Contador monotónicamente creciente para ordenar eventos dentro de una sesión

712* `error_name`: Nombre de la clase de error, como `"TypeError"` o `"SyntaxError"`

713* `error_code`: Código errno de Node.js como `"ENOENT"` cuando está presente en el error

714 

715#### Evento de plugin instalado

716 

717Se registra cuando un plugin termina de instalarse, tanto desde el comando CLI `claude plugin install` como desde la interfaz de usuario interactiva `/plugin`.

718 

719**Nombre del Evento**: `claude_code.plugin_installed`

720 

721**Atributos**:

722 

723* Todos los [atributos estándar](#standard-attributes)

724* `event.name`: `"plugin_installed"`

725* `event.timestamp`: Marca de tiempo ISO 8601

726* `event.sequence`: Contador monotónicamente creciente para ordenar eventos dentro de una sesión

727* `marketplace.is_official`: `"true"` si el mercado es un mercado oficial de Anthropic, `"false"` de otra manera

728* `install.trigger`: `"cli"` o `"ui"`

729* `plugin.name`: Nombre del plugin instalado. Para mercados de terceros esto se incluye solo cuando `OTEL_LOG_TOOL_DETAILS=1`

730* `plugin.version`: Versión del plugin cuando se declara en la entrada del mercado. Para mercados de terceros esto se incluye solo cuando `OTEL_LOG_TOOL_DETAILS=1`

731* `marketplace.name`: Mercado desde el que se instaló el plugin. Para mercados de terceros esto se incluye solo cuando `OTEL_LOG_TOOL_DETAILS=1`

732 

733#### Evento de habilidad activada

734 

735Se registra cuando se invoca una habilidad, ya sea que Claude la llame a través de la herramienta Skill o que la ejecutes como un comando `/`.

736 

737**Nombre del Evento**: `claude_code.skill_activated`

738 

739**Atributos**:

740 

741* Todos los [atributos estándar](#standard-attributes)

742* `event.name`: `"skill_activated"`

743* `event.timestamp`: Marca de tiempo ISO 8601

744* `event.sequence`: Contador monotónicamente creciente para ordenar eventos dentro de una sesión

745* `skill.name`: Nombre de la habilidad. Para habilidades definidas por el usuario y de plugin de terceros el valor es el marcador de posición `"custom_skill"` a menos que `OTEL_LOG_TOOL_DETAILS=1`

746* `invocation_trigger`: Cómo se activó la habilidad (`"user-slash"`, `"claude-proactive"`, o `"nested-skill"`)

747* `skill.source`: De dónde se cargó la habilidad (por ejemplo, `"bundled"`, `"userSettings"`, `"projectSettings"`, `"plugin"`)

748* `plugin.name` (cuando `OTEL_LOG_TOOL_DETAILS=1` o el plugin es de un mercado oficial): Nombre del plugin propietario cuando la habilidad es proporcionada por un plugin

749* `marketplace.name` (cuando `OTEL_LOG_TOOL_DETAILS=1` o el plugin es de un mercado oficial): Mercado desde el que se instaló el plugin propietario, cuando la habilidad es proporcionada por un plugin

750 

751#### Evento de mención @

752 

753Se registra cuando Claude Code resuelve una mención `@` en un mensaje. No todas las menciones emiten un evento: las rutas de salida anticipada como denegaciones de permisos, archivos de tamaño excesivo, archivos adjuntos de referencia PDF, y fallos de listado de directorios se devuelven sin registrar.

754 

755**Nombre del Evento**: `claude_code.at_mention`

756 

757**Atributos**:

758 

759* Todos los [atributos estándar](#standard-attributes)

760* `event.name`: `"at_mention"`

761* `event.timestamp`: Marca de tiempo ISO 8601

762* `event.sequence`: Contador monotónicamente creciente para ordenar eventos dentro de una sesión

763* `mention_type`: Tipo de mención (`"file"`, `"directory"`, `"agent"`, `"mcp_resource"`)

764* `success`: Si la mención se resolvió exitosamente (`"true"` o `"false"`)

765 

766#### Evento de reintentos de API agotados

767 

768Se registra una vez cuando una solicitud de API falla después de más de un intento. Se emite junto con el evento `api_error` final.

769 

770**Nombre del Evento**: `claude_code.api_retries_exhausted`

771 

772**Atributos**:

773 

774* Todos los [atributos estándar](#standard-attributes)

775* `event.name`: `"api_retries_exhausted"`

776* `event.timestamp`: Marca de tiempo ISO 8601

777* `event.sequence`: Contador monotónicamente creciente para ordenar eventos dentro de una sesión

778* `model`: Modelo utilizado

779* `error`: Mensaje de error final

780* `status_code`: Código de estado HTTP como número. Ausente para errores no HTTP.

781* `total_attempts`: Número total de intentos realizados

782* `total_retry_duration_ms`: Tiempo total de pared en todos los intentos

783* `speed`: `"fast"` o `"normal"`

784 

785#### Evento de inicio de ejecución de hook

786 

787Se registra cuando uno o más hooks comienzan a ejecutarse para un evento de hook.

788 

789**Nombre del Evento**: `claude_code.hook_execution_start`

790 

791**Atributos**:

792 

793* Todos los [atributos estándar](#standard-attributes)

794* `event.name`: `"hook_execution_start"`

795* `event.timestamp`: Marca de tiempo ISO 8601

796* `event.sequence`: Contador monotónicamente creciente para ordenar eventos dentro de una sesión

797* `hook_event`: Tipo de evento de hook, como `"PreToolUse"` o `"PostToolUse"`

798* `hook_name`: Nombre completo del hook incluyendo coincidencia, como `"PreToolUse:Write"`

799* `num_hooks`: Número de comandos de hook coincidentes

800* `managed_only`: `"true"` cuando solo se permiten hooks de política administrada

801* `hook_source`: `"policySettings"` o `"merged"`

802* `hook_definitions`: Configuración de hook serializada en JSON. Se incluye solo cuando tanto el trazado beta detallado como `OTEL_LOG_TOOL_DETAILS=1` están habilitados

803 

804#### Evento de ejecución de hook completado

805 

806Se registra cuando todos los hooks para un evento de hook han terminado.

807 

808**Nombre del Evento**: `claude_code.hook_execution_complete`

809 

810**Atributos**:

811 

812* Todos los [atributos estándar](#standard-attributes)

813* `event.name`: `"hook_execution_complete"`

814* `event.timestamp`: Marca de tiempo ISO 8601

815* `event.sequence`: Contador monotónicamente creciente para ordenar eventos dentro de una sesión

816* `hook_event`: Tipo de evento de hook

817* `hook_name`: Nombre completo del hook incluyendo coincidencia

818* `num_hooks`: Número de comandos de hook coincidentes

819* `num_success`: Recuento que se completó exitosamente

820* `num_blocking`: Recuento que devolvió una decisión de bloqueo

821* `num_non_blocking_error`: Recuento que falló sin bloquear

822* `num_cancelled`: Recuento cancelado antes de completarse

823* `total_duration_ms`: Duración de pared de todos los hooks coincidentes

824* `managed_only`: `"true"` cuando solo se permiten hooks de política administrada

825* `hook_source`: `"policySettings"` o `"merged"`

826* `hook_definitions`: Configuración de hook serializada en JSON. Se incluye solo cuando tanto el trazado beta detallado como `OTEL_LOG_TOOL_DETAILS=1` están habilitados

827 

828#### Evento de compactación

829 

830Se registra cuando la compactación de conversación se completa.

831 

832**Nombre del Evento**: `claude_code.compaction`

833 

834**Atributos**:

835 

836* Todos los [atributos estándar](#standard-attributes)

837* `event.name`: `"compaction"`

838* `event.timestamp`: Marca de tiempo ISO 8601

839* `event.sequence`: Contador monotónicamente creciente para ordenar eventos dentro de una sesión

840* `trigger`: `"auto"` o `"manual"`

841* `success`: `"true"` o `"false"`

842* `duration_ms`: Duración de compactación

843* `pre_tokens`: Recuento aproximado de tokens antes de compactación

844* `post_tokens`: Recuento aproximado de tokens después de compactación

845* `error`: Mensaje de error cuando la compactación falló

846 

847## Interpretar datos de métricas y eventos

848 

849Las métricas y eventos exportados admiten una variedad de análisis:

850 

851### Monitoreo de uso

852 

853| Métrica | Oportunidad de Análisis |

854| ------------------------------------------------------------- | ---------------------------------------------------------------- |

855| `claude_code.token.usage` | Desglosar por `type` (entrada/salida), usuario, equipo o modelo |

856| `claude_code.session.count` | Rastrear adopción y compromiso a lo largo del tiempo |

857| `claude_code.lines_of_code.count` | Medir productividad rastreando adiciones/eliminaciones de código |

858| `claude_code.commit.count` & `claude_code.pull_request.count` | Entender el impacto en los flujos de trabajo de desarrollo |

859 

860### Monitoreo de costos

861 

862La métrica `claude_code.cost.usage` ayuda con:

863 

864* Rastrear tendencias de uso entre equipos o individuos

865* Identificar sesiones de alto uso para optimización

866 

867<Note>

868 Las métricas de costo son aproximaciones. Para datos de facturación oficiales, consulte su proveedor de API (Claude Console, Amazon Bedrock, o Google Cloud Vertex).

869</Note>

870 

871### Alertas y segmentación

872 

873Alertas comunes a considerar:

874 

875* Picos de costo

876* Consumo inusual de tokens

877* Alto volumen de sesiones de usuarios específicos

878 

879Todas las métricas pueden segmentarse por `user.account_uuid`, `user.account_id`, `organization.id`, `session.id`, `model`, y `app.version`.

880 

881### Detectar agotamiento de reintentos

882 

883Claude Code reintenta solicitudes de API fallidas internamente y emite un único evento `claude_code.api_error` solo después de rendirse, por lo que el evento en sí es la señal terminal para esa solicitud. Los intentos de reintento intermedios no se registran como eventos separados.

884 

885El atributo `attempt` en el evento registra cuántos intentos se realizaron en total. Un valor mayor que `CLAUDE_CODE_MAX_RETRIES` (predeterminado `10`) indica que la solicitud agotó todos los reintentos en un error transitorio. Un valor más bajo indica un error no reintentable como una respuesta `400`.

886 

887Para distinguir una sesión que se recuperó de una que se estancó, agrupe eventos por `session.id` y verifique si existe un evento `api_request` posterior después del error.

888 

889### Análisis de eventos

890 

891Los datos de eventos proporcionan información detallada sobre las interacciones de Claude Code:

892 

893**Patrones de Uso de Herramientas**: analice eventos de resultado de herramientas para identificar:

894 

895* Herramientas más utilizadas frecuentemente

896* Tasas de éxito de herramientas

897* Tiempos de ejecución promedio de herramientas

898* Patrones de error por tipo de herramienta

899 

900**Monitoreo de Rendimiento**: rastreé duraciones de solicitudes de API y tiempos de ejecución de herramientas para identificar cuellos de botella de rendimiento.

901 

902## Consideraciones de backend

903 

904Tu elección de backends de métricas, registros y trazas determina los tipos de análisis que puedes realizar:

905 

906### Para métricas

907 

908* **Bases de datos de series temporales (por ejemplo, Prometheus)**: Cálculos de tasa, métricas agregadas

909* **Almacenes columnares (por ejemplo, ClickHouse)**: Consultas complejas, análisis de usuario único

910* **Plataformas de observabilidad completas (por ejemplo, Honeycomb, Datadog)**: Consultas avanzadas, visualización, alertas

911 

912### Para eventos/registros

913 

914* **Sistemas de agregación de registros (por ejemplo, Elasticsearch, Loki)**: Búsqueda de texto completo, análisis de registros

915* **Almacenes columnares (por ejemplo, ClickHouse)**: Análisis de eventos estructurados

916* **Plataformas de observabilidad completas (por ejemplo, Honeycomb, Datadog)**: Correlación entre métricas y eventos

917 

918### Para trazas

919 

920Elige un backend que admita almacenamiento de trazas distribuidas y correlación de spans:

921 

922* **Sistemas de trazas distribuidas (por ejemplo, Jaeger, Zipkin, Grafana Tempo)**: Visualización de spans, cascadas de solicitudes, análisis de latencia

923* **Plataformas de observabilidad completas (por ejemplo, Honeycomb, Datadog)**: Búsqueda de trazas y correlación con métricas y registros

924 

925Para organizaciones que requieren métricas de Usuarios Activos Diarios/Semanales/Mensuales (DAU/WAU/MAU), considera backends que admitan consultas de valores únicos eficientes.

926 

927## Información del servicio

928 

929Todas las métricas y eventos se exportan con los siguientes atributos de recurso:

930 

931* `service.name`: `claude-code`

932* `service.version`: Versión actual de Claude Code

933* `os.type`: Tipo de sistema operativo (por ejemplo, `linux`, `darwin`, `windows`)

934* `os.version`: Cadena de versión del sistema operativo

935* `host.arch`: Arquitectura del host (por ejemplo, `amd64`, `arm64`)

936* `wsl.version`: Número de versión de WSL (solo presente cuando se ejecuta en Windows Subsystem for Linux)

937* Nombre del Medidor: `com.anthropic.claude_code`

938 

939## Recursos de medición de ROI

940 

941Para una guía completa sobre cómo medir el retorno de inversión para Claude Code, incluyendo configuración de telemetría, análisis de costos, métricas de productividad e informes automatizados, consulta la [Guía de Medición de ROI de Claude Code](https://github.com/anthropics/claude-code-monitoring-guide). Este repositorio proporciona configuraciones de Docker Compose listas para usar, configuraciones de Prometheus y OpenTelemetry, y plantillas para generar informes de productividad integrados con herramientas como Linear.

942 

943## Seguridad y privacidad

944 

945* La exportación de OpenTelemetry a tu backend es opcional y requiere configuración explícita. Para la telemetría operativa separada de Anthropic y cómo deshabilitarla, consulta [Uso de datos](/es/data-usage#telemetry-services)

946* Los contenidos de archivos sin procesar y fragmentos de código no se incluyen en métricas o eventos. Las trazas de span son una ruta de datos separada: consulta la viñeta `OTEL_LOG_TOOL_CONTENT` a continuación

947* Cuando está autenticado a través de OAuth, `user.email` se incluye en atributos de telemetría. Si esto es una preocupación para tu organización, trabaja con tu backend de telemetría para filtrar o redactar este campo

948* El contenido del mensaje del usuario no se recopila por defecto. Solo se registra la longitud del mensaje. Para incluir contenido del mensaje, establece `OTEL_LOG_USER_PROMPTS=1`

949* Los argumentos de entrada de herramientas y parámetros no se registran por defecto. Para incluirlos, establece `OTEL_LOG_TOOL_DETAILS=1`. Cuando está habilitado, los eventos `tool_result` incluyen un atributo `tool_parameters` con comandos Bash, nombres de servidor MCP y herramienta, y nombres de skills, más un atributo `tool_input` con rutas de archivo, URLs, patrones de búsqueda y otros argumentos. Los eventos `user_prompt` incluyen el `command_name` verbatim para comandos personalizados, de plugin y MCP. Los spans de traza incluyen el mismo atributo `tool_input` y atributos derivados de entrada como `file_path`. Los valores individuales superiores a 512 caracteres se truncan y el total está limitado a aproximadamente 4 K caracteres, pero los argumentos aún pueden contener valores sensibles. Configura tu backend de telemetría para filtrar o redactar estos atributos según sea necesario

950* El contenido de entrada y salida de herramientas no se registra en spans de trazas por defecto. Para incluirlo, establece `OTEL_LOG_TOOL_CONTENT=1`. Cuando está habilitado, los eventos de span incluyen contenido completo de entrada y salida de herramientas truncado en 60 KB por span. Esto puede incluir contenidos de archivo sin procesar de resultados de herramienta Read y salida de comandos Bash. Configura tu backend de telemetría para filtrar o redactar estos atributos según sea necesario

951* Los cuerpos de solicitud y respuesta de la API de Mensajes de Anthropic sin procesar no se registran por defecto. Para incluirlos, establece `OTEL_LOG_RAW_API_BODIES`. Con `=1`, cada llamada de API emite eventos de registro `api_request_body` y `api_response_body` cuyo atributo `body` es la carga útil serializada en JSON, truncada en 60 KB. Con `=file:<dir>`, los cuerpos sin truncar se escriben en archivos `.request.json` y `.response.json` bajo ese directorio y los eventos llevan una ruta `body_ref` en su lugar del cuerpo en línea. Envía el directorio con un recopilador de registros o sidecar en lugar de a través del flujo de telemetría. En ambos modos, los cuerpos contienen el historial de conversación completo (mensaje del sistema, cada turno anterior de usuario y asistente, resultados de herramientas), por lo que habilitar esto implica consentimiento a todo lo que las otras banderas de contenido `OTEL_LOG_*` revelarían. El contenido de pensamiento extendido de Claude siempre se redacta de estos cuerpos independientemente de otras configuraciones

952 

953## Monitorear Claude Code en Amazon Bedrock

954 

955Para orientación detallada sobre monitoreo de uso de Claude Code para Amazon Bedrock, consulta [Implementación de Monitoreo de Claude Code (Bedrock)](https://github.com/aws-solutions-library-samples/guidance-for-claude-code-with-amazon-bedrock/blob/main/assets/docs/MONITORING.md).

network-config.md +132 −0 created

Details

1> ## Documentation Index

2> Fetch the complete documentation index at: https://code.claude.com/docs/llms.txt

3> Use this file to discover all available pages before exploring further.

4 

5# Configuración de red empresarial

6 

7> Configure Claude Code para entornos empresariales con servidores proxy, Autoridades de Certificación (CA) personalizadas y autenticación mutua de Seguridad de la Capa de Transporte (mTLS).

8 

9Claude Code admite varias configuraciones de red y seguridad empresarial a través de variables de entorno. Esto incluye enrutar el tráfico a través de servidores proxy corporativos, confiar en Autoridades de Certificación (CA) personalizadas y autenticarse con certificados de Seguridad de la Capa de Transporte mutua (mTLS) para mayor seguridad.

10 

11<Note>

12 Todas las variables de entorno que se muestran en esta página también se pueden configurar en [`settings.json`](/es/settings).

13</Note>

14 

15## Configuración de proxy

16 

17### Variables de entorno

18 

19Claude Code respeta las variables de entorno de proxy estándar:

20 

21```bash theme={null}

22# Proxy HTTPS (recomendado)

23export HTTPS_PROXY=https://proxy.example.com:8080

24 

25# Proxy HTTP (si HTTPS no está disponible)

26export HTTP_PROXY=http://proxy.example.com:8080

27 

28# Omitir proxy para solicitudes específicas - formato separado por espacios

29export NO_PROXY="localhost 192.168.1.1 example.com .example.com"

30# Omitir proxy para solicitudes específicas - formato separado por comas

31export NO_PROXY="localhost,192.168.1.1,example.com,.example.com"

32# Omitir proxy para todas las solicitudes

33export NO_PROXY="*"

34```

35 

36<Note>

37 Claude Code no admite proxies SOCKS.

38</Note>

39 

40### Autenticación básica

41 

42Si su proxy requiere autenticación básica, incluya las credenciales en la URL del proxy:

43 

44```bash theme={null}

45export HTTPS_PROXY=http://username:password@proxy.example.com:8080

46```

47 

48<Warning>

49 Evite codificar contraseñas en scripts. Utilice variables de entorno o almacenamiento seguro de credenciales en su lugar.

50</Warning>

51 

52<Tip>

53 Para proxies que requieren autenticación avanzada (NTLM, Kerberos, etc.), considere utilizar un servicio LLM Gateway que admita su método de autenticación.

54</Tip>

55 

56## Almacén de certificados CA

57 

58De forma predeterminada, Claude Code confía tanto en sus certificados CA de Mozilla incluidos como en el almacén de certificados de su sistema operativo. Los proxies de inspección TLS empresariales como CrowdStrike Falcon y Zscaler funcionan sin configuración adicional cuando su certificado raíz se instala en el almacén de confianza del sistema operativo.

59 

60<Note>

61 La integración del almacén CA del sistema requiere la distribución binaria nativa de Claude Code. Cuando se ejecuta en el runtime de Node.js, el almacén CA del sistema no se fusiona automáticamente. En ese caso, establezca `NODE_EXTRA_CA_CERTS=/path/to/ca-cert.pem` para confiar en una CA raíz empresarial.

62</Note>

63 

64`CLAUDE_CODE_CERT_STORE` acepta una lista separada por comas de fuentes. Los valores reconocidos son `bundled` para el conjunto de CA de Mozilla incluido con Claude Code y `system` para el almacén de confianza del sistema operativo. El valor predeterminado es `bundled,system`.

65 

66Para confiar solo en el conjunto de CA de Mozilla incluido:

67 

68```bash theme={null}

69export CLAUDE_CODE_CERT_STORE=bundled

70```

71 

72Para confiar solo en el almacén de certificados del sistema operativo:

73 

74```bash theme={null}

75export CLAUDE_CODE_CERT_STORE=system

76```

77 

78<Note>

79 `CLAUDE_CODE_CERT_STORE` no tiene una clave de esquema dedicada en `settings.json`. Establézcalo a través del bloque `env` en `~/.claude/settings.json` o directamente en el entorno del proceso.

80</Note>

81 

82## Certificados CA personalizados

83 

84Si su entorno empresarial utiliza una CA personalizada, configure Claude Code para confiar en ella directamente:

85 

86```bash theme={null}

87export NODE_EXTRA_CA_CERTS=/path/to/ca-cert.pem

88```

89 

90## Autenticación mTLS

91 

92Para entornos empresariales que requieren autenticación de certificado de cliente:

93 

94```bash theme={null}

95# Certificado de cliente para autenticación

96export CLAUDE_CODE_CLIENT_CERT=/path/to/client-cert.pem

97 

98# Clave privada del cliente

99export CLAUDE_CODE_CLIENT_KEY=/path/to/client-key.pem

100 

101# Opcional: Frase de contraseña para clave privada cifrada

102export CLAUDE_CODE_CLIENT_KEY_PASSPHRASE="your-passphrase"

103```

104 

105## Requisitos de acceso a la red

106 

107Claude Code requiere acceso a las siguientes URL. Agregue estas a la lista blanca en su configuración de proxy y reglas de firewall, especialmente en entornos de red en contenedores o restringidos.

108 

109| URL | Requerido para |

110| ------------------------------ | ---------------------------------------------------------------------------------------------------------------- |

111| `api.anthropic.com` | Solicitudes de API de Claude |

112| `claude.ai` | Autenticación de cuenta de claude.ai |

113| `platform.claude.com` | Autenticación de cuenta de Anthropic Console |

114| `downloads.claude.ai` | Descargas de ejecutables de plugins; instalador nativo y actualizador automático nativo |

115| `storage.googleapis.com` | {/* max-version: 2.1.115 */}Instalador nativo y actualizador automático nativo en versiones anteriores a 2.1.116 |

116| `bridge.claudeusercontent.com` | Puente WebSocket de la extensión [Claude en Chrome](/es/chrome) |

117 

118Si instala Claude Code a través de npm o administra su propia distribución binaria, es posible que los usuarios finales no necesiten acceso a `downloads.claude.ai` o `storage.googleapis.com`.

119 

120Claude Code también envía telemetría operativa opcional de forma predeterminada, que puede desactivar con variables de entorno. Consulte [Servicios de telemetría](/es/data-usage#telemetry-services) para saber cómo desactivarla antes de finalizar su lista blanca.

121 

122Cuando utiliza [Amazon Bedrock](/es/amazon-bedrock), [Google Vertex AI](/es/google-vertex-ai) o [Microsoft Foundry](/es/microsoft-foundry), el tráfico del modelo y la autenticación van a su proveedor en lugar de `api.anthropic.com`, `claude.ai` o `platform.claude.com`. La herramienta WebFetch aún llama a `api.anthropic.com` para su [verificación de seguridad de dominio](/es/data-usage#webfetch-domain-safety-check) a menos que establezca `skipWebFetchPreflight: true` en [configuración](/es/settings).

123 

124[Claude Code en la web](/es/claude-code-on-the-web) y [Code Review](/es/code-review) se conectan a sus repositorios desde infraestructura administrada por Anthropic. Si su organización de GitHub Enterprise Cloud restringe el acceso por dirección IP, habilite [herencia de lista de permitidos de IP para aplicaciones de GitHub instaladas](https://docs.github.com/en/enterprise-cloud@latest/organizations/keeping-your-organization-secure/managing-security-settings-for-your-organization/managing-allowed-ip-addresses-for-your-organization#allowing-access-by-github-apps). La aplicación de GitHub de Claude registra sus rangos de IP, por lo que habilitar esta configuración permite el acceso sin configuración manual. Para [agregar los rangos a su lista de permitidos manualmente](https://docs.github.com/en/enterprise-cloud@latest/organizations/keeping-your-organization-secure/managing-security-settings-for-your-organization/managing-allowed-ip-addresses-for-your-organization#adding-an-allowed-ip-address) en su lugar, o para configurar otros firewalls, consulte [direcciones IP de la API de Anthropic](https://platform.claude.com/docs/en/api/ip-addresses).

125 

126Para instancias de [GitHub Enterprise Server](/es/github-enterprise-server) autohospedadas detrás de un firewall, agregue a la lista blanca las mismas [direcciones IP de la API de Anthropic](https://platform.claude.com/docs/en/api/ip-addresses) para que la infraestructura de Anthropic pueda acceder a su host GHES para clonar repositorios y publicar comentarios de revisión.

127 

128## Recursos adicionales

129 

130* [Configuración de Claude Code](/es/settings)

131* [Referencia de variables de entorno](/es/env-vars)

132* [Guía de solución de problemas](/es/troubleshooting)

output-styles.md +90 −0 created

Details

1> ## Documentation Index

2> Fetch the complete documentation index at: https://code.claude.com/docs/llms.txt

3> Use this file to discover all available pages before exploring further.

4 

5# Estilos de salida

6 

7> Adapte Claude Code para usos más allá de la ingeniería de software

8 

9Los estilos de salida le permiten usar Claude Code como cualquier tipo de agente mientras se mantienen sus capacidades principales, como ejecutar scripts locales, leer/escribir archivos y realizar un seguimiento de TODOs.

10 

11## Estilos de salida integrados

12 

13El estilo de salida **Default** de Claude Code es el mensaje del sistema existente, diseñado para ayudarle a completar tareas de ingeniería de software de manera eficiente.

14 

15Hay dos estilos de salida integrados adicionales enfocados en enseñarle la base de código y cómo funciona Claude:

16 

17* **Explanatory**: Proporciona "Insights" educativos entre ayudarle a completar tareas de ingeniería de software. Le ayuda a entender las opciones de implementación y los patrones de la base de código.

18 

19* **Learning**: Modo colaborativo de aprendizaje práctico donde Claude no solo compartirá "Insights" mientras codifica, sino que también le pedirá que contribuya con pequeñas piezas de código estratégicas. Claude Code agregará marcadores `TODO(human)` en su código para que usted implemente.

20 

21## Cómo funcionan los estilos de salida

22 

23Los estilos de salida modifican directamente el mensaje del sistema de Claude Code.

24 

25* Los estilos de salida personalizados excluyen instrucciones para codificación (como verificar código con pruebas), a menos que `keep-coding-instructions` sea verdadero.

26* Todos los estilos de salida tienen sus propias instrucciones personalizadas agregadas al final del mensaje del sistema.

27* Todos los estilos de salida activan recordatorios para que Claude se adhiera a las instrucciones del estilo de salida durante la conversación.

28 

29El uso de tokens depende del estilo. Agregar instrucciones al mensaje del sistema aumenta los tokens de entrada, aunque el almacenamiento en caché de prompts reduce este costo después de la primera solicitud en una sesión. Los estilos integrados Explanatory y Learning producen respuestas más largas que Default por diseño, lo que aumenta los tokens de salida. Para estilos personalizados, el uso de tokens de salida depende de lo que sus instrucciones le digan a Claude que produzca.

30 

31## Cambiar su estilo de salida

32 

33Ejecute `/config` y seleccione **Output style** para elegir un estilo de un menú. Su selección se guarda en `.claude/settings.local.json` en el [nivel de proyecto local](/es/settings).

34 

35Para establecer un estilo sin el menú, edite el campo `outputStyle` directamente en un archivo de configuración:

36 

37```json theme={null}

38{

39 "outputStyle": "Explanatory"

40}

41```

42 

43Debido a que el estilo de salida se establece en el mensaje del sistema al inicio de la sesión, los cambios surten efecto la próxima vez que inicie una nueva sesión. Esto mantiene el mensaje del sistema estable durante una conversación para que el almacenamiento en caché de prompts pueda reducir la latencia y el costo.

44 

45## Crear un estilo de salida personalizado

46 

47Los estilos de salida personalizados son archivos Markdown con frontmatter y el texto que se agregará al mensaje del sistema:

48 

49```markdown theme={null}

50---

51name: My Custom Style

52description:

53 A brief description of what this style does, to be displayed to the user

54---

55 

56# Custom Style Instructions

57 

58You are an interactive CLI tool that helps users with software engineering

59tasks. [Your custom instructions here...]

60 

61## Specific Behaviors

62 

63[Define how the assistant should behave in this style...]

64```

65 

66Puede guardar estos archivos en el nivel de usuario (`~/.claude/output-styles`) o en el nivel de proyecto (`.claude/output-styles`).

67 

68### Frontmatter

69 

70Los archivos de estilo de salida admiten frontmatter para especificar metadatos:

71 

72| Frontmatter | Propósito | Predeterminado |

73| :------------------------- | :------------------------------------------------------------------------------------------------------- | :------------------------------- |

74| `name` | Nombre del estilo de salida, si no es el nombre del archivo | Se hereda del nombre del archivo |

75| `description` | Descripción del estilo de salida, mostrada en el selector `/config` | Ninguno |

76| `keep-coding-instructions` | Si se deben mantener las partes del mensaje del sistema de Claude Code relacionadas con la codificación. | false |

77 

78## Comparaciones con características relacionadas

79 

80### Estilos de salida vs. CLAUDE.md vs. --append-system-prompt

81 

82Los estilos de salida "apagan" completamente las partes del mensaje del sistema predeterminado de Claude Code específicas de la ingeniería de software. Ni CLAUDE.md ni `--append-system-prompt` editan el mensaje del sistema predeterminado de Claude Code. CLAUDE.md agrega el contenido como un mensaje de usuario *después* del mensaje del sistema predeterminado de Claude Code. `--append-system-prompt` agrega el contenido al mensaje del sistema.

83 

84### Estilos de salida vs. [Agents](/es/sub-agents)

85 

86Los estilos de salida afectan directamente el bucle del agente principal y solo afectan el mensaje del sistema. Los agentes se invocan para manejar tareas específicas y pueden incluir configuraciones adicionales como el modelo a usar, las herramientas disponibles y algo de contexto sobre cuándo usar el agente.

87 

88### Estilos de salida vs. [Skills](/es/skills)

89 

90Los estilos de salida modifican cómo responde Claude (formato, tono, estructura) y siempre están activos una vez seleccionados. Skills son prompts específicos de tareas que invoca con `/skill-name` o que Claude carga automáticamente cuando es relevante. Use estilos de salida para preferencias de formato consistentes; use skills para flujos de trabajo y tareas reutilizables.

overview.md +875 −0 created

Details

1> ## Documentation Index

2> Fetch the complete documentation index at: https://code.claude.com/docs/llms.txt

3> Use this file to discover all available pages before exploring further.

4 

5# Descripción general de Claude Code

6 

7> Claude Code es una herramienta de codificación agencial que lee tu base de código, edita archivos, ejecuta comandos e integra con tus herramientas de desarrollo. Disponible en tu terminal, IDE, aplicación de escritorio y navegador.

8 

9export const InstallConfigurator = ({defaultSurface = 'terminal'}) => {

10 const TERM = {

11 mac: {

12 label: 'macOS / Linux',

13 cmd: 'curl -fsSL https://claude.ai/install.sh | bash'

14 },

15 win: {

16 label: 'Windows'

17 },

18 brew: {

19 label: 'Homebrew',

20 cmd: 'brew install --cask claude-code'

21 },

22 winget: {

23 label: 'WinGet',

24 cmd: 'winget install Anthropic.ClaudeCode'

25 }

26 };

27 const WIN_VARIANTS = {

28 ps: 'irm https://claude.ai/install.ps1 | iex',

29 cmd: 'curl -fsSL https://claude.ai/install.cmd -o install.cmd && install.cmd && del install.cmd'

30 };

31 const TABS = [{

32 key: 'terminal',

33 label: 'Terminal'

34 }, {

35 key: 'desktop',

36 label: 'Desktop'

37 }, {

38 key: 'vscode',

39 label: 'VS Code'

40 }, {

41 key: 'jetbrains',

42 label: 'JetBrains'

43 }];

44 const ALT_TARGETS = {

45 desktop: {

46 name: 'Desktop',

47 tagline: 'The full agent in a native app for macOS and Windows.',

48 installLabel: 'Download the app',

49 installHref: 'https://claude.com/download?utm_source=claude_code&utm_medium=docs&utm_content=configurator_desktop_download',

50 guideHref: '/en/desktop-quickstart'

51 },

52 vscode: {

53 name: 'VS Code',

54 tagline: 'Review diffs, manage context, and chat without leaving your editor.',

55 installLabel: 'Install from Marketplace',

56 installHref: 'https://marketplace.visualstudio.com/items?itemName=anthropic.claude-code',

57 altCmd: 'code --install-extension anthropic.claude-code',

58 guideHref: '/en/vs-code'

59 },

60 jetbrains: {

61 name: 'JetBrains',

62 tagline: 'Native plugin for IntelliJ, PyCharm, WebStorm, and other JetBrains IDEs.',

63 installLabel: 'Install from Marketplace',

64 installHref: 'https://plugins.jetbrains.com/plugin/27310-claude-code-beta-',

65 guideHref: '/en/jetbrains'

66 }

67 };

68 const PROVIDERS = [{

69 key: 'anthropic',

70 label: 'Anthropic'

71 }, {

72 key: 'bedrock',

73 label: 'Amazon Bedrock'

74 }, {

75 key: 'foundry',

76 label: 'Microsoft Foundry'

77 }, {

78 key: 'vertex',

79 label: 'Google Vertex AI'

80 }];

81 const PROVIDER_NOTICE = {

82 bedrock: <>

83 <strong>Configure your AWS account first.</strong> Running on Bedrock

84 requires model access enabled in the AWS console and IAM credentials.{' '}

85 <a href="/en/amazon-bedrock">Bedrock setup guide →</a>

86 </>,

87 vertex: <>

88 <strong>Configure your GCP project first.</strong> Running on Vertex AI

89 requires the Vertex API enabled and a service account with the right

90 permissions.{' '}

91 <a href="/en/google-vertex-ai">Vertex setup guide →</a>

92 </>,

93 foundry: <>

94 <strong>Configure your Azure resources first.</strong> Running on

95 Microsoft Foundry requires an Azure subscription with a Foundry resource

96 and model deployments provisioned.{' '}

97 <a href="/en/microsoft-foundry">Foundry setup guide →</a>

98 </>

99 };

100 const iconCheck = (size = 14) => <svg width={size} height={size} viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="3" strokeLinecap="round" strokeLinejoin="round" aria-hidden="true">

101 <polyline points="20 6 9 17 4 12" />

102 </svg>;

103 const iconCopy = (size = 14) => <svg width={size} height={size} viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round" aria-hidden="true">

104 <rect x="9" y="9" width="13" height="13" rx="2" />

105 <path d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1" />

106 </svg>;

107 const iconArrowRight = (size = 13) => <svg width={size} height={size} viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2.5" strokeLinecap="round" strokeLinejoin="round" aria-hidden="true">

108 <line x1="5" y1="12" x2="19" y2="12" />

109 <polyline points="12 5 19 12 12 19" />

110 </svg>;

111 const iconArrowUpRight = (size = 14) => <svg width={size} height={size} viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2.5" strokeLinecap="round" strokeLinejoin="round" aria-hidden="true">

112 <line x1="7" y1="17" x2="17" y2="7" />

113 <polyline points="7 7 17 7 17 17" />

114 </svg>;

115 const iconInfo = (size = 16) => <svg width={size} height={size} viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round" aria-hidden="true">

116 <circle cx="12" cy="12" r="10" />

117 <line x1="12" y1="16" x2="12" y2="12" />

118 <line x1="12" y1="8" x2="12.01" y2="8" />

119 </svg>;

120 const [target, setTarget] = useState(defaultSurface);

121 const [team, setTeam] = useState(false);

122 const [provider, setProvider] = useState('anthropic');

123 const [pkg, setPkg] = useState(() => (/Win/).test(navigator.userAgent) ? 'win' : 'mac');

124 const [winCmd, setWinCmd] = useState(false);

125 const [copied, setCopied] = useState(null);

126 const copyTimer = useRef(null);

127 const handleCopy = async (text, key) => {

128 try {

129 await navigator.clipboard.writeText(text);

130 } catch {

131 const ta = document.createElement('textarea');

132 ta.value = text;

133 document.body.appendChild(ta);

134 ta.select();

135 document.execCommand('copy');

136 document.body.removeChild(ta);

137 }

138 clearTimeout(copyTimer.current);

139 setCopied(key);

140 copyTimer.current = setTimeout(() => setCopied(null), 1800);

141 };

142 const cardBodyCmd = (cmd, prompt) => {

143 const on = copied === 'term';

144 return <div className="cc-ic-card-body">

145 <span className="cc-ic-prompt">{prompt || '$'}</span>

146 <div className="cc-ic-cmd">{cmd}</div>

147 <button type="button" className={'cc-ic-copy' + (on ? ' cc-ic-copied' : '')} onClick={() => handleCopy(cmd, 'term')}>

148 {on ? iconCheck(13) : iconCopy(13)}

149 <span>{on ? 'Copied' : 'Copy'}</span>

150 </button>

151 </div>;

152 };

153 const isWinInstaller = pkg === 'win';

154 const isWinPrompt = pkg === 'win' || pkg === 'winget';

155 const terminalCmd = isWinInstaller ? WIN_VARIANTS[winCmd ? 'cmd' : 'ps'] : TERM[pkg].cmd;

156 const alt = ALT_TARGETS[target];

157 const showNotice = team && provider !== 'anthropic';

158 const STYLES = `

159.cc-ic {

160 --ic-slate: #141413;

161 --ic-clay: #d97757;

162 --ic-clay-deep: #c6613f;

163 --ic-gray-000: #ffffff;

164 --ic-gray-150: #f0eee6;

165 --ic-gray-550: #73726c;

166 --ic-gray-700: #3d3d3a;

167 --ic-border-subtle: rgba(31, 30, 29, 0.08);

168 --ic-border-default: rgba(31, 30, 29, 0.15);

169 --ic-border-strong: rgba(31, 30, 29, 0.3);

170 --ic-font-mono: ui-monospace, SFMono-Regular, Menlo, Monaco, 'Courier New', monospace;

171 font-family: 'Anthropic Sans', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;

172 font-size: 14px; line-height: 1.5; color: var(--ic-slate);

173 margin: 8px 0 32px;

174}

175.dark .cc-ic {

176 --ic-slate: #f0eee6;

177 --ic-gray-000: #262624;

178 --ic-gray-150: #1f1e1d;

179 --ic-gray-550: #91908a;

180 --ic-gray-700: #bfbdb4;

181 --ic-border-subtle: rgba(240, 238, 230, 0.08);

182 --ic-border-default: rgba(240, 238, 230, 0.14);

183 --ic-border-strong: rgba(240, 238, 230, 0.28);

184}

185.dark .cc-ic-check { background: transparent; }

186.dark .cc-ic-card { border: 0.5px solid var(--ic-border-subtle); }

187.dark .cc-ic-p-pill.cc-ic-active { box-shadow: 0 1px 2px rgba(0, 0, 0, 0.3); }

188.cc-ic *, .cc-ic *::before, .cc-ic *::after { box-sizing: border-box; }

189.cc-ic a { text-decoration: none; }

190.cc-ic a:not([class]) { color: inherit; }

191.cc-ic button { font-family: inherit; cursor: pointer; }

192 

193.cc-ic-tab-strip {

194 display: inline-flex; gap: 2px;

195 padding: 4px; background: var(--ic-gray-150);

196 border-radius: 10px; overflow-x: auto;

197 max-width: 100%;

198}

199.cc-ic-tab {

200 appearance: none; background: none; border: none;

201 padding: 10px 18px; font-size: 15px; font-weight: 430;

202 color: var(--ic-gray-550); border-radius: 7px;

203 white-space: nowrap;

204 transition: color 0.12s, background-color 0.12s;

205}

206.cc-ic-tab:hover { color: var(--ic-gray-700); }

207.cc-ic-tab.cc-ic-active {

208 color: var(--ic-slate); font-weight: 500;

209 background: var(--ic-gray-000);

210 box-shadow: 0 1px 3px rgba(0, 0, 0, 0.08);

211}

212.dark .cc-ic-tab.cc-ic-active { box-shadow: 0 1px 3px rgba(0, 0, 0, 0.4); }

213 

214.cc-ic-team-wrap { padding: 16px 0 20px; }

215.cc-ic-team-toggle {

216 display: flex; align-items: center; gap: 12px; font-family: inherit;

217 padding: 12px 16px; font-size: 14px; font-weight: 430;

218 color: var(--ic-gray-700); cursor: pointer; user-select: none;

219 width: fit-content; background: var(--ic-gray-150);

220 border: 0.5px solid var(--ic-border-subtle); border-radius: 8px;

221 transition: border-color 0.15s;

222}

223.cc-ic-team-toggle:hover { border-color: var(--ic-border-default); }

224.cc-ic-team-toggle.cc-ic-checked {

225 background: rgba(217, 119, 87, 0.08);

226 border-color: rgba(217, 119, 87, 0.25);

227}

228.cc-ic-check {

229 width: 16px; height: 16px;

230 border: 1px solid var(--ic-border-strong); border-radius: 4px;

231 background: var(--ic-gray-000);

232 display: flex; align-items: center; justify-content: center;

233 flex-shrink: 0;

234}

235.cc-ic-check svg { color: #fff; display: none; }

236.cc-ic-team-toggle.cc-ic-checked .cc-ic-check { background: var(--ic-clay-deep); border-color: var(--ic-clay-deep); }

237.cc-ic-team-toggle.cc-ic-checked .cc-ic-check svg { display: block; }

238 

239.cc-ic-team-reveal { display: flex; flex-direction: column; gap: 12px; margin-bottom: 16px; }

240.cc-ic-sales {

241 display: flex; align-items: center; justify-content: space-between;

242 gap: 16px; padding: 14px 16px;

243 background: var(--ic-gray-000); border: 0.5px solid var(--ic-border-default);

244 border-radius: 8px; flex-wrap: wrap;

245}

246.cc-ic-sales-text { font-size: 13px; color: var(--ic-gray-700); line-height: 1.5; flex: 1; min-width: 200px; }

247.cc-ic-sales-text strong { font-weight: 550; color: var(--ic-slate); }

248.cc-ic-sales-actions { display: flex; align-items: center; gap: 8px; flex-shrink: 0; }

249.cc-ic-btn-clay {

250 display: inline-flex; align-items: center; gap: 8px;

251 background: var(--ic-clay-deep); color: #fff; border: none;

252 border-radius: 8px; padding: 8px 14px;

253 font-size: 13px; font-weight: 500;

254 transition: background-color 0.15s; white-space: nowrap;

255}

256.cc-ic-btn-clay:hover { background: var(--ic-clay); }

257.cc-ic-btn-ghost {

258 display: inline-flex; align-items: center; gap: 8px;

259 background: transparent; color: var(--ic-gray-700);

260 border: 0.5px solid var(--ic-border-default);

261 border-radius: 8px; padding: 8px 14px;

262 font-size: 13px; font-weight: 500;

263}

264.cc-ic-btn-ghost:hover { background: rgba(0, 0, 0, 0.04); }

265 

266.cc-ic-provider-bar {

267 display: flex; align-items: center; gap: 12px;

268 padding: 14px 16px; background: var(--ic-gray-150);

269 border-radius: 8px; font-size: 13px; flex-wrap: wrap;

270}

271.cc-ic-provider-bar .cc-ic-label { color: var(--ic-gray-550); flex-shrink: 0; }

272.cc-ic-provider-pills { display: flex; gap: 4px; flex-wrap: wrap; }

273.cc-ic-p-pill {

274 appearance: none; border: none; background: transparent;

275 padding: 6px 12px; border-radius: 6px;

276 font-size: 13px; font-weight: 430; color: var(--ic-gray-700);

277 white-space: nowrap;

278}

279.cc-ic-p-pill:hover { background: rgba(0, 0, 0, 0.04); }

280.cc-ic-p-pill.cc-ic-active {

281 background: var(--ic-gray-000); color: var(--ic-slate);

282 font-weight: 500; box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);

283}

284.cc-ic-provider-notice {

285 display: flex; padding: 16px 18px;

286 background: var(--ic-gray-000); border: 0.5px solid var(--ic-border-default);

287 border-radius: 8px; gap: 14px; align-items: flex-start;

288}

289.cc-ic-provider-notice > svg { color: var(--ic-gray-550); margin-top: 2px; flex-shrink: 0; }

290.cc-ic-provider-notice-body { font-size: 14px; line-height: 1.55; color: var(--ic-gray-700); }

291.cc-ic-provider-notice-body strong { font-weight: 550; color: var(--ic-slate); }

292.cc-ic-provider-notice-body a { color: var(--ic-clay-deep); font-weight: 500; }

293.cc-ic-provider-notice-body a:hover { text-decoration: underline; }

294 

295.cc-ic-card { background: #141413; border-radius: 12px; overflow: hidden; }

296.cc-ic-subtabs {

297 display: flex; align-items: center;

298 background: #1a1918;

299 border-bottom: 0.5px solid rgba(255, 255, 255, 0.08);

300 padding: 0 8px; overflow-x: auto;

301}

302.cc-ic-subtab {

303 appearance: none; background: none; border: none;

304 padding: 12px 16px; font-size: 12px;

305 color: rgba(255, 255, 255, 0.5);

306 position: relative; white-space: nowrap;

307}

308.cc-ic-subtab:hover { color: rgba(255, 255, 255, 0.75); }

309.cc-ic-subtab.cc-ic-active { color: #fff; }

310.cc-ic-subtab.cc-ic-active::after {

311 content: ''; position: absolute;

312 left: 12px; right: 12px; bottom: -0.5px;

313 height: 2px; background: var(--ic-clay);

314}

315.cc-ic-shell-switch {

316 display: inline-flex; gap: 2px;

317 margin: 14px 26px 0; padding: 3px;

318 background: rgba(255, 255, 255, 0.06);

319 border: 0.5px solid rgba(255, 255, 255, 0.08);

320 border-radius: 8px;

321 font-family: inherit;

322}

323.cc-ic-shell-option {

324 font: inherit; font-size: 12px; font-weight: 500;

325 padding: 5px 12px; border-radius: 6px;

326 background: transparent; border: none;

327 color: rgba(255, 255, 255, 0.55);

328 cursor: pointer; user-select: none; white-space: nowrap;

329 transition: color 120ms ease, background-color 120ms ease;

330}

331.cc-ic-shell-option:hover { color: rgba(255, 255, 255, 0.85); }

332.cc-ic-shell-option.cc-ic-active {

333 background: rgba(255, 255, 255, 0.12);

334 color: #fff;

335 box-shadow: 0 1px 2px rgba(0, 0, 0, 0.25);

336}

337 

338.cc-ic-card-body { padding: 24px 26px; display: flex; align-items: flex-start; gap: 14px; }

339.cc-ic-prompt {

340 color: var(--ic-clay); font-family: var(--ic-font-mono);

341 font-size: 17px; user-select: none; padding-top: 2px;

342}

343.cc-ic-cmd {

344 flex: 1; font-family: var(--ic-font-mono);

345 font-size: 17px; color: #f0eee6;

346 line-height: 1.55; white-space: pre-wrap; word-break: break-word;

347}

348.cc-ic-copy {

349 display: inline-flex; align-items: center; gap: 6px;

350 background: rgba(255, 255, 255, 0.08);

351 border: 0.5px solid rgba(255, 255, 255, 0.12);

352 color: rgba(255, 255, 255, 0.85);

353 padding: 7px 13px; border-radius: 8px;

354 font-size: 13px; font-weight: 500; flex-shrink: 0;

355}

356.cc-ic-copy:hover { background: rgba(255, 255, 255, 0.14); }

357.cc-ic-copy.cc-ic-copied { background: var(--ic-clay-deep); border-color: var(--ic-clay-deep); color: #fff; }

358 

359.cc-ic-below {

360 margin-top: 12px; font-size: 13px; color: var(--ic-gray-550);

361 display: flex; gap: 16px; flex-wrap: wrap; align-items: baseline;

362}

363.cc-ic-below a { color: var(--ic-gray-700); border-bottom: 0.5px solid var(--ic-border-default); }

364.cc-ic-below a:hover { color: var(--ic-clay-deep); border-bottom-color: var(--ic-clay-deep); }

365.cc-ic-handoff {

366 padding: 22px 24px;

367 background: linear-gradient(180deg, #faf9f4 0%, #f3f1e9 100%);

368 border: 0.5px solid var(--ic-border-default);

369 border-radius: 12px;

370 box-shadow: 0 1px 2px rgba(31, 30, 29, 0.04), 0 6px 16px -4px rgba(31, 30, 29, 0.06);

371}

372.dark .cc-ic-handoff {

373 background: linear-gradient(180deg, #262624 0%, #1f1e1d 100%);

374 box-shadow: 0 1px 2px rgba(0, 0, 0, 0.3), 0 6px 16px -4px rgba(0, 0, 0, 0.4);

375}

376.cc-ic-handoff-title {

377 font-size: 16px; font-weight: 550; color: var(--ic-slate);

378 letter-spacing: -0.01em; margin-bottom: 4px;

379}

380.cc-ic-handoff-sub {

381 font-size: 14px; line-height: 1.5; color: var(--ic-gray-700);

382 margin-bottom: 18px;

383}

384.cc-ic-handoff-actions { display: flex; gap: 10px; flex-wrap: wrap; }

385.cc-ic-handoff-alt {

386 margin-top: 12px; font-size: 12px; color: var(--ic-gray-550);

387}

388.cc-ic-handoff-alt code {

389 font-family: var(--ic-font-mono); font-size: 11px;

390 background: var(--ic-gray-150); padding: 2px 6px;

391 border-radius: 4px; color: var(--ic-gray-700);

392}

393.cc-ic-copy-sm {

394 appearance: none; border: none;

395 display: inline-flex; align-items: center; justify-content: center;

396 width: 22px; height: 22px;

397 margin-left: 4px; vertical-align: middle;

398 background: var(--ic-gray-150); color: var(--ic-gray-550);

399 border-radius: 4px;

400 transition: color 0.1s, background-color 0.1s;

401}

402.cc-ic-copy-sm:hover { color: var(--ic-gray-700); background: var(--ic-border-default); }

403.cc-ic-copy-sm.cc-ic-copied { background: var(--ic-clay-deep); color: #fff; }

404 

405@media (max-width: 720px) {

406 .cc-ic-tab { padding: 12px 14px; font-size: 14px; }

407 .cc-ic-sales-actions { width: 100%; }

408 .cc-ic-card-body { padding: 20px; }

409 .cc-ic-cmd { font-size: 15px; }

410}

411`;

412 return <div className="cc-ic not-prose">

413 <style>{STYLES}</style>

414 

415 {}

416 <div className="cc-ic-tab-strip" role="tablist">

417 {TABS.map(t => <button key={t.key} type="button" role="tab" aria-selected={target === t.key} className={'cc-ic-tab' + (target === t.key ? ' cc-ic-active' : '')} onClick={() => setTarget(t.key)}>

418 {t.label}

419 </button>)}

420 </div>

421 

422 {}

423 <div className="cc-ic-team-wrap">

424 <button type="button" role="switch" aria-checked={team} className={'cc-ic-team-toggle' + (team ? ' cc-ic-checked' : '')} onClick={() => setTeam(!team)}>

425 <span className="cc-ic-check">{iconCheck(11)}</span>

426 <span>

427 I’m buying for a team or company (SSO, AWS/Azure/GCP, central billing)

428 </span>

429 </button>

430 </div>

431 

432 {}

433 {team && <div className="cc-ic-team-reveal">

434 <div className="cc-ic-sales">

435 <div className="cc-ic-sales-text">

436 <strong>Set up your team:</strong> self-serve or talk to sales.

437 </div>

438 <div className="cc-ic-sales-actions">

439 <a href="https://claude.ai/upgrade?initialPlanType=team&amp;utm_source=claude_code&amp;utm_medium=docs&amp;utm_content=configurator_team_get_started" className="cc-ic-btn-ghost">

440 Get started

441 </a>

442 <a href="https://www.anthropic.com/contact-sales?utm_source=claude_code&amp;utm_medium=docs&amp;utm_content=configurator_team_contact_sales" className="cc-ic-btn-clay">

443 Contact sales {iconArrowRight()}

444 </a>

445 </div>

446 </div>

447 

448 <div className="cc-ic-provider-bar">

449 <span className="cc-ic-label">Run on</span>

450 <div className="cc-ic-provider-pills" role="radiogroup" aria-label="Provider">

451 {PROVIDERS.map(p => <button key={p.key} type="button" role="radio" aria-checked={provider === p.key} className={'cc-ic-p-pill' + (provider === p.key ? ' cc-ic-active' : '')} onClick={() => setProvider(p.key)}>

452 {p.label}

453 </button>)}

454 </div>

455 </div>

456 

457 {showNotice && <div className="cc-ic-provider-notice">

458 {iconInfo()}

459 <div className="cc-ic-provider-notice-body">

460 {PROVIDER_NOTICE[provider]}

461 </div>

462 </div>}

463 </div>}

464 

465 {}

466 {target === 'terminal' && <div className="cc-ic-card">

467 <div className="cc-ic-subtabs" role="tablist" aria-label="Install method">

468 {Object.keys(TERM).map(k => <button key={k} type="button" role="tab" aria-selected={pkg === k} className={'cc-ic-subtab' + (pkg === k ? ' cc-ic-active' : '')} onClick={() => setPkg(k)}>

469 {TERM[k].label}

470 </button>)}

471 </div>

472 {isWinInstaller && <div className="cc-ic-shell-switch" role="tablist" aria-label="Shell">

473 {[{

474 k: 'ps',

475 label: 'PowerShell'

476 }, {

477 k: 'cmd',

478 label: 'CMD'

479 }].map(({k, label}) => {

480 const active = k === 'cmd' === winCmd;

481 return <button key={k} type="button" role="tab" aria-selected={active} className={'cc-ic-shell-option' + (active ? ' cc-ic-active' : '')} onClick={() => setWinCmd(k === 'cmd')}>

482 {label}

483 </button>;

484 })}

485 </div>}

486 {cardBodyCmd(terminalCmd, isWinPrompt ? '>' : '$')}

487 </div>}

488 

489 {}

490 {target === 'terminal' && <div className="cc-ic-below">

491 {isWinInstaller && <span>

492 <a href="https://git-scm.com/downloads/win" target="_blank" rel="noopener">

493 Git for Windows

494 </a>{' '}

495 recommended. PowerShell is used if Git Bash is absent.

496 </span>}

497 {(pkg === 'brew' || pkg === 'winget') && <span>

498 Does not auto-update. Run{' '}

499 <code>{pkg === 'brew' ? 'brew upgrade claude-code' : 'winget upgrade Anthropic.ClaudeCode'}</code>{' '}

500 periodically.

501 </span>}

502 <a href="/en/troubleshoot-install">Installation troubleshooting</a>

503 </div>}

504 

505 {alt && <div className="cc-ic-handoff">

506 <div className="cc-ic-handoff-title">Claude Code for {alt.name}</div>

507 <div className="cc-ic-handoff-sub">{alt.tagline}</div>

508 <div className="cc-ic-handoff-actions">

509 <a href={alt.installHref} className="cc-ic-btn-clay" {...alt.installHref.startsWith('http') ? {

510 target: '_blank',

511 rel: 'noopener'

512 } : {}}>

513 {alt.installLabel} {iconArrowUpRight(13)}

514 </a>

515 <a href={alt.guideHref} className="cc-ic-btn-ghost">

516 {alt.name} guide {iconArrowRight(12)}

517 </a>

518 </div>

519 {alt.altCmd && <div className="cc-ic-handoff-alt">

520 or run <code>{alt.altCmd}</code>

521 <button type="button" className={'cc-ic-copy-sm' + (copied === 'alt' ? ' cc-ic-copied' : '')} onClick={() => handleCopy(alt.altCmd, 'alt')} aria-label="Copy command">

522 {copied === 'alt' ? iconCheck(11) : iconCopy(11)}

523 </button>

524 </div>}

525 </div>}

526 </div>;

527};

528 

529export const Experiment = ({flag, treatment, children}) => {

530 const VID_KEY = 'exp_vid';

531 const CONSENT_COUNTRIES = new Set(['AT', 'BE', 'BG', 'HR', 'CY', 'CZ', 'DK', 'EE', 'FI', 'FR', 'DE', 'GR', 'HU', 'IE', 'IT', 'LV', 'LT', 'LU', 'MT', 'NL', 'PL', 'PT', 'RO', 'SK', 'SI', 'ES', 'SE', 'RE', 'GP', 'MQ', 'GF', 'YT', 'BL', 'MF', 'PM', 'WF', 'PF', 'NC', 'AW', 'CW', 'SX', 'FO', 'GL', 'AX', 'GB', 'UK', 'AI', 'BM', 'IO', 'VG', 'KY', 'FK', 'GI', 'MS', 'PN', 'SH', 'TC', 'GG', 'JE', 'IM', 'CA', 'BR', 'IN']);

532 const fnv1a = s => {

533 let h = 0x811c9dc5;

534 for (let i = 0; i < s.length; i++) {

535 h ^= s.charCodeAt(i);

536 h += (h << 1) + (h << 4) + (h << 7) + (h << 8) + (h << 24);

537 }

538 return h >>> 0;

539 };

540 const bucket = (seed, vid) => fnv1a(fnv1a(seed + vid) + '') % 10000 < 5000 ? 'control' : 'treatment';

541 const [decision] = useState(() => {

542 const params = new URLSearchParams(location.search);

543 const preBucketed = document.documentElement.dataset['gb_' + flag.replace(/-/g, '_')];

544 const force = params.get('gb-force');

545 if (force) {

546 for (const p of force.split(',')) {

547 const [k, v] = p.split(':');

548 if (k === flag) return {

549 variant: v || 'treatment',

550 track: false

551 };

552 }

553 }

554 if (navigator.globalPrivacyControl) {

555 return {

556 variant: 'control',

557 track: false

558 };

559 }

560 const prefsMatch = document.cookie.match(/(?:^|; )anthropic-consent-preferences=([^;]+)/);

561 if (prefsMatch) {

562 try {

563 if (JSON.parse(decodeURIComponent(prefsMatch[1])).analytics !== true) {

564 return {

565 variant: 'control',

566 track: false

567 };

568 }

569 } catch {

570 return {

571 variant: 'control',

572 track: false

573 };

574 }

575 } else {

576 const country = params.get('country')?.toUpperCase() || (document.cookie.match(/(?:^|; )cf_geo=([A-Z]{2})/) || [])[1];

577 if (!country || CONSENT_COUNTRIES.has(country)) {

578 return {

579 variant: 'control',

580 track: false

581 };

582 }

583 }

584 let vid;

585 try {

586 const ajsMatch = document.cookie.match(/(?:^|; )ajs_anonymous_id=([^;]+)/);

587 if (ajsMatch) {

588 vid = decodeURIComponent(ajsMatch[1]).replace(/^"|"$/g, '');

589 } else {

590 vid = localStorage.getItem(VID_KEY);

591 if (!vid) {

592 vid = crypto.randomUUID();

593 }

594 document.cookie = `ajs_anonymous_id=${vid}; domain=.claude.com; path=/; Secure; SameSite=Lax; max-age=31536000`;

595 }

596 try {

597 localStorage.setItem(VID_KEY, vid);

598 } catch {}

599 } catch {

600 return {

601 variant: 'control',

602 track: false

603 };

604 }

605 const variant = preBucketed === '1' ? 'treatment' : preBucketed === '0' ? 'control' : bucket(flag, vid);

606 return {

607 variant,

608 track: true,

609 vid

610 };

611 });

612 useEffect(() => {

613 if (!decision.track) return;

614 fetch('https://api.anthropic.com/api/event_logging/v2/batch', {

615 method: 'POST',

616 headers: {

617 'Content-Type': 'application/json',

618 'x-service-name': 'claude_code_docs'

619 },

620 body: JSON.stringify({

621 events: [{

622 event_type: 'GrowthbookExperimentEvent',

623 event_data: {

624 device_id: decision.vid,

625 anonymous_id: decision.vid,

626 timestamp: new Date().toISOString(),

627 experiment_id: flag,

628 variation_id: decision.variant === 'treatment' ? 1 : 0,

629 environment: 'production'

630 }

631 }]

632 }),

633 keepalive: true

634 }).catch(() => {});

635 }, []);

636 return decision.variant === 'treatment' ? treatment : children;

637};

638 

639Claude Code es un asistente de codificación impulsado por IA que te ayuda a construir características, corregir errores y automatizar tareas de desarrollo. Entiende tu base de código completa y puede trabajar en múltiples archivos y herramientas para lograr las cosas.

640 

641<div data-gb-slot="overview-install-configurator">

642 <Experiment flag="overview-install-configurator" treatment={<InstallConfigurator />} />

643</div>

644 

645## Comenzar

646 

647Elige tu entorno para comenzar. La mayoría de las superficies requieren una [suscripción a Claude](https://claude.com/pricing?utm_source=claude_code\&utm_medium=docs\&utm_content=overview_pricing) o una cuenta de [Anthropic Console](https://console.anthropic.com/). La CLI de Terminal y VS Code también admiten [proveedores de terceros](/es/third-party-integrations).

648 

649<Tabs>

650 <Tab title="Terminal">

651 La CLI completa para trabajar con Claude Code directamente en tu terminal. Edita archivos, ejecuta comandos y gestiona tu proyecto completo desde la línea de comandos.

652 

653 To install Claude Code, use one of the following methods:

654 

655 <Tabs>

656 <Tab title="Native Install (Recommended)">

657 **macOS, Linux, WSL:**

658 

659 ```bash theme={null}

660 curl -fsSL https://claude.ai/install.sh | bash

661 ```

662 

663 **Windows PowerShell:**

664 

665 ```powershell theme={null}

666 irm https://claude.ai/install.ps1 | iex

667 ```

668 

669 **Windows CMD:**

670 

671 ```batch theme={null}

672 curl -fsSL https://claude.ai/install.cmd -o install.cmd && install.cmd && del install.cmd

673 ```

674 

675 If you see `The token '&&' is not a valid statement separator`, you're in PowerShell, not CMD. If you see `'irm' is not recognized as an internal or external command`, you're in CMD, not PowerShell. Your prompt shows `PS C:\` when you're in PowerShell and `C:\` without the `PS` when you're in CMD.

676 

677 [Git for Windows](https://git-scm.com/downloads/win) is recommended on native Windows so Claude Code can use the Bash tool. If Git for Windows is not installed, Claude Code uses PowerShell as the shell tool instead. WSL setups do not need Git for Windows.

678 

679 <Info>

680 Native installations automatically update in the background to keep you on the latest version.

681 </Info>

682 </Tab>

683 

684 <Tab title="Homebrew">

685 ```bash theme={null}

686 brew install --cask claude-code

687 ```

688 

689 Homebrew offers two casks. `claude-code` tracks the stable release channel, which is typically about a week behind and skips releases with major regressions. `claude-code@latest` tracks the latest channel and receives new versions as soon as they ship.

690 

691 <Info>

692 Homebrew installations do not auto-update. Run `brew upgrade claude-code` or `brew upgrade claude-code@latest`, depending on which cask you installed, to get the latest features and security fixes.

693 </Info>

694 </Tab>

695 

696 <Tab title="WinGet">

697 ```powershell theme={null}

698 winget install Anthropic.ClaudeCode

699 ```

700 

701 <Info>

702 WinGet installations do not auto-update. Run `winget upgrade Anthropic.ClaudeCode` periodically to get the latest features and security fixes.

703 </Info>

704 </Tab>

705 </Tabs>

706 

707 You can also install with [apt, dnf, or apk](/en/setup#install-with-linux-package-managers) on Debian, Fedora, RHEL, and Alpine.

708 

709 Luego inicia Claude Code en cualquier proyecto:

710 

711 ```bash theme={null}

712 cd your-project

713 claude

714 ```

715 

716 Se te pedirá que inicies sesión en el primer uso. ¡Eso es todo! [Continúa con la Guía de inicio rápido →](/es/quickstart)

717 

718 <Tip>

719 Consulta [configuración avanzada](/es/setup) para opciones de instalación, actualizaciones manuales o instrucciones de desinstalación. Visita [solución de problemas de instalación](/es/troubleshoot-install) si encuentras problemas.

720 </Tip>

721 </Tab>

722 

723 <Tab title="VS Code">

724 La extensión de VS Code proporciona diffs en línea, menciones @, revisión de planes e historial de conversación directamente en tu editor.

725 

726 * [Instalar para VS Code](vscode:extension/anthropic.claude-code)

727 * [Instalar para Cursor](cursor:extension/anthropic.claude-code)

728 

729 O busca "Claude Code" en la vista de Extensiones (`Cmd+Shift+X` en Mac, `Ctrl+Shift+X` en Windows/Linux). Después de instalar, abre la Paleta de comandos (`Cmd+Shift+P` / `Ctrl+Shift+P`), escribe "Claude Code" y selecciona **Abrir en Nueva Pestaña**.

730 

731 [Comenzar con VS Code →](/es/vs-code#get-started)

732 </Tab>

733 

734 <Tab title="Aplicación de escritorio">

735 Una aplicación independiente para ejecutar Claude Code fuera de tu IDE o terminal. Revisa diffs visualmente, ejecuta múltiples sesiones lado a lado, programa tareas recurrentes e inicia sesiones en la nube.

736 

737 Descarga e instala:

738 

739 * [macOS](https://claude.ai/api/desktop/darwin/universal/dmg/latest/redirect?utm_source=claude_code\&utm_medium=docs) (Intel y Apple Silicon)

740 * [Windows](https://claude.ai/api/desktop/win32/x64/setup/latest/redirect?utm_source=claude_code\&utm_medium=docs) (x64)

741 * [Windows ARM64](https://claude.ai/api/desktop/win32/arm64/setup/latest/redirect?utm_source=claude_code\&utm_medium=docs)

742 

743 Después de instalar, lanza Claude, inicia sesión y haz clic en la pestaña **Code** para comenzar a codificar. Se requiere una [suscripción de pago](https://claude.com/pricing?utm_source=claude_code\&utm_medium=docs\&utm_content=overview_desktop_pricing).

744 

745 [Obtén más información sobre la aplicación de escritorio →](/es/desktop-quickstart)

746 </Tab>

747 

748 <Tab title="Web">

749 Ejecuta Claude Code en tu navegador sin configuración local. Inicia tareas de larga duración y vuelve cuando estén listas, trabaja en repositorios que no tienes localmente o ejecuta múltiples tareas en paralelo. Disponible en navegadores de escritorio y la aplicación Claude iOS.

750 

751 Comienza a codificar en [claude.ai/code](https://claude.ai/code).

752 

753 [Comenzar en la web →](/es/web-quickstart)

754 </Tab>

755 

756 <Tab title="JetBrains">

757 Un plugin para IntelliJ IDEA, PyCharm, WebStorm y otros IDEs de JetBrains con visualización de diff interactiva y compartición de contexto de selección.

758 

759 Instala el [plugin Claude Code](https://plugins.jetbrains.com/plugin/27310-claude-code-beta-) desde el Marketplace de JetBrains y reinicia tu IDE.

760 

761 [Comenzar con JetBrains →](/es/jetbrains)

762 </Tab>

763</Tabs>

764 

765## Lo que puedes hacer

766 

767Aquí hay algunas de las formas en que puedes usar Claude Code:

768 

769<AccordionGroup>

770 <Accordion title="Automatiza el trabajo que sigues posponiendo" icon="wand-magic-sparkles">

771 Claude Code maneja las tareas tediosas que consumen tu día: escribir pruebas para código sin probar, corregir errores de lint en un proyecto, resolver conflictos de fusión, actualizar dependencias y escribir notas de lanzamiento.

772 

773 ```bash theme={null}

774 claude "write tests for the auth module, run them, and fix any failures"

775 ```

776 </Accordion>

777 

778 <Accordion title="Construye características y corrige errores" icon="hammer">

779 Describe lo que quieres en lenguaje natural. Claude Code planifica el enfoque, escribe el código en múltiples archivos y verifica que funcione.

780 

781 Para errores, pega un mensaje de error o describe el síntoma. Claude Code rastrea el problema a través de tu base de código, identifica la causa raíz e implementa una corrección. Consulta [flujos de trabajo comunes](/es/common-workflows) para más ejemplos.

782 </Accordion>

783 

784 <Accordion title="Crea commits y solicitudes de extracción" icon="code-branch">

785 Claude Code funciona directamente con git. Prepara cambios, escribe mensajes de commit, crea ramas y abre solicitudes de extracción.

786 

787 ```bash theme={null}

788 claude "commit my changes with a descriptive message"

789 ```

790 

791 En CI, puedes automatizar la revisión de código y la clasificación de problemas con [GitHub Actions](/es/github-actions) o [GitLab CI/CD](/es/gitlab-ci-cd).

792 </Accordion>

793 

794 <Accordion title="Conecta tus herramientas con MCP" icon="plug">

795 El [Protocolo de Contexto de Modelo (MCP)](/es/mcp) es un estándar abierto para conectar herramientas de IA a fuentes de datos externas. Con MCP, Claude Code puede leer tus documentos de diseño en Google Drive, actualizar tickets en Jira, extraer datos de Slack o usar tu propia herramienta personalizada.

796 </Accordion>

797 

798 <Accordion title="Personaliza con instrucciones, skills y hooks" icon="sliders">

799 [`CLAUDE.md`](/es/memory) es un archivo markdown que añades a la raíz de tu proyecto que Claude Code lee al inicio de cada sesión. Úsalo para establecer estándares de codificación, decisiones de arquitectura, librerías preferidas y listas de verificación de revisión. Claude también construye [memoria automática](/es/memory#auto-memory) mientras trabaja, guardando aprendizajes como comandos de compilación e insights de depuración en sesiones sin que escribas nada.

800 

801 Crea [comandos personalizados](/es/skills) para empaquetar flujos de trabajo repetibles que tu equipo pueda compartir, como `/review-pr` o `/deploy-staging`.

802 

803 [Hooks](/es/hooks) te permiten ejecutar comandos de shell antes o después de acciones de Claude Code, como formateo automático después de cada edición de archivo o ejecución de lint antes de un commit.

804 </Accordion>

805 

806 <Accordion title="Ejecuta equipos de agentes y construye agentes personalizados" icon="users">

807 Genera [múltiples agentes de Claude Code](/es/sub-agents) que trabajen en diferentes partes de una tarea simultáneamente. Un agente líder coordina el trabajo, asigna subtareas y fusiona resultados.

808 

809 Para flujos de trabajo completamente personalizados, el [Agent SDK](/es/agent-sdk/overview) te permite construir tus propios agentes impulsados por las herramientas y capacidades de Claude Code, con control total sobre orquestación, acceso a herramientas y permisos.

810 </Accordion>

811 

812 <Accordion title="Canaliza, secuencia y automatiza con la CLI" icon="terminal">

813 Claude Code es componible y sigue la filosofía de Unix. Canaliza registros en él, ejecútalo en CI o encadénalo con otras herramientas:

814 

815 ```bash theme={null}

816 # Analiza la salida de registros recientes

817 tail -200 app.log | claude -p "Slack me if you see any anomalies"

818 

819 # Automatiza traducciones en CI

820 claude -p "translate new strings into French and raise a PR for review"

821 

822 # Operaciones en masa en archivos

823 git diff main --name-only | claude -p "review these changed files for security issues"

824 ```

825 

826 Consulta la [referencia de CLI](/es/cli-reference) para el conjunto completo de comandos y banderas.

827 </Accordion>

828 

829 <Accordion title="Programa tareas recurrentes" icon="clock">

830 Ejecuta Claude en un horario para automatizar el trabajo que se repite: revisiones de PR matutinas, análisis de fallos de CI durante la noche, auditorías de dependencias semanales o sincronización de documentos después de que se fusionen los PR.

831 

832 * [Routines](/es/routines) se ejecutan en infraestructura administrada por Anthropic, por lo que siguen ejecutándose incluso cuando tu computadora está apagada. También pueden activarse en llamadas de API o eventos de GitHub. Créalas desde la web, la aplicación de escritorio o ejecutando `/schedule` en la CLI.

833 * [Tareas programadas de escritorio](/es/desktop-scheduled-tasks) se ejecutan en tu máquina, con acceso directo a tus archivos y herramientas locales

834 * [`/loop`](/es/scheduled-tasks) repite un prompt dentro de una sesión de CLI para sondeo rápido

835 </Accordion>

836 

837 <Accordion title="Trabaja desde cualquier lugar" icon="globe">

838 Las sesiones no están vinculadas a una única superficie. Mueve el trabajo entre entornos a medida que cambia tu contexto:

839 

840 * Aléjate de tu escritorio y sigue trabajando desde tu teléfono o cualquier navegador con [Remote Control](/es/remote-control)

841 * Envía un mensaje a [Dispatch](/es/desktop#sessions-from-dispatch) con una tarea desde tu teléfono y abre la sesión de escritorio que crea

842 * Inicia una tarea de larga duración en la [web](/es/claude-code-on-the-web) o [aplicación iOS](https://apps.apple.com/app/claude-by-anthropic/id6473753684), luego extráela a tu terminal con `claude --teleport`

843 * Transfiere una sesión de terminal a la [aplicación de escritorio](/es/desktop) con `/desktop` para revisión visual de diff

844 * Enruta tareas desde el chat del equipo: menciona `@Claude` en [Slack](/es/slack) con un informe de error y obtén una solicitud de extracción de vuelta

845 </Accordion>

846</AccordionGroup>

847 

848## Usa Claude Code en todas partes

849 

850Cada superficie se conecta al mismo motor subyacente de Claude Code, por lo que tus archivos CLAUDE.md, configuración y servidores MCP funcionan en todos ellos.

851 

852Más allá de los entornos [Terminal](/es/quickstart), [VS Code](/es/vs-code), [JetBrains](/es/jetbrains), [Desktop](/es/desktop) y [Web](/es/claude-code-on-the-web) anteriores, Claude Code se integra con flujos de trabajo de CI/CD, chat y navegador:

853 

854| Quiero... | Mejor opción |

855| ------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------ |

856| Continuar una sesión local desde mi teléfono u otro dispositivo | [Remote Control](/es/remote-control) |

857| Enviar eventos desde Telegram, Discord, iMessage o mis propios webhooks a una sesión | [Channels](/es/channels) |

858| Iniciar una tarea localmente, continuar en móvil | [Web](/es/claude-code-on-the-web) o [aplicación Claude iOS](https://apps.apple.com/app/claude-by-anthropic/id6473753684) |

859| Ejecutar Claude en un horario recurrente | [Routines](/es/routines) o [Tareas programadas de escritorio](/es/desktop-scheduled-tasks) |

860| Automatizar revisiones de PR y clasificación de problemas | [GitHub Actions](/es/github-actions) o [GitLab CI/CD](/es/gitlab-ci-cd) |

861| Obtener revisión de código automática en cada PR | [GitHub Code Review](/es/code-review) |

862| Enrutar informes de errores de Slack a solicitudes de extracción | [Slack](/es/slack) |

863| Depurar aplicaciones web en vivo | [Chrome](/es/chrome) |

864| Construir agentes personalizados para tus propios flujos de trabajo | [Agent SDK](/es/agent-sdk/overview) |

865 

866## Próximos pasos

867 

868Una vez que hayas instalado Claude Code, estas guías te ayudan a profundizar.

869 

870* [Guía de inicio rápido](/es/quickstart): recorre tu primera tarea real, desde explorar una base de código hasta confirmar una corrección

871* [Almacena instrucciones y memorias](/es/memory): proporciona a Claude instrucciones persistentes con archivos CLAUDE.md y memoria automática

872* [Flujos de trabajo comunes](/es/common-workflows) y [mejores prácticas](/es/best-practices): patrones para obtener lo máximo de Claude Code

873* [Configuración](/es/settings): personaliza Claude Code para tu flujo de trabajo

874* [Solución de problemas](/es/troubleshooting): soluciones para problemas comunes

875* [code.claude.com](https://code.claude.com/): demostraciones, precios y detalles del producto

permission-modes.md +290 −0 created

Details

1> ## Documentation Index

2> Fetch the complete documentation index at: https://code.claude.com/docs/llms.txt

3> Use this file to discover all available pages before exploring further.

4 

5# Elige un modo de permisos

6 

7> Controla si Claude pregunta antes de editar archivos o ejecutar comandos. Cicla entre modos con Shift+Tab en la CLI o usa el selector de modo en VS Code, Desktop y claude.ai.

8 

9Cuando Claude quiere editar un archivo, ejecutar un comando de shell o hacer una solicitud de red, se detiene y te pide que apruebes la acción. Los modos de permisos controlan con qué frecuencia ocurre esa pausa. El modo que elijas forma el flujo de una sesión: el modo predeterminado te hace revisar cada acción a medida que llega, mientras que los modos más flexibles permiten que Claude trabaje en tramos más largos sin interrupciones e informe cuando haya terminado. Elige más supervisión para trabajo sensible, o menos interrupciones cuando confías en la dirección.

10 

11## Modos disponibles

12 

13Cada modo hace un compromiso diferente entre conveniencia y supervisión. La tabla a continuación muestra qué puede hacer Claude sin un aviso de permisos en cada modo.

14 

15| Modo | Lo que se ejecuta sin preguntar | Mejor para |

16| :------------------------------------------------------------------ | :-------------------------------------------------------------------------------------------------------------- | :---------------------------------------------- |

17| `default` | Solo lecturas | Comenzar, trabajo sensible |

18| [`acceptEdits`](#auto-approve-file-edits-with-acceptedits-mode) | Lecturas, ediciones de archivos y comandos comunes del sistema de archivos (`mkdir`, `touch`, `mv`, `cp`, etc.) | Iterar en código que estás revisando |

19| [`plan`](#analyze-before-you-edit-with-plan-mode) | Solo lecturas | Explorar una base de código antes de cambiarla |

20| [`auto`](#eliminate-prompts-with-auto-mode) | Todo, con verificaciones de seguridad de fondo | Tareas largas, reducir fatiga de avisos |

21| [`dontAsk`](#allow-only-pre-approved-tools-with-dontask-mode) | Solo herramientas preaprobadas | CI bloqueado y scripts |

22| [`bypassPermissions`](#skip-all-checks-with-bypasspermissions-mode) | Todo | Solo contenedores e máquinas virtuales aisladas |

23 

24En 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 propia de Claude contra corrupción accidental.

25 

26Los modos establecen la línea base. Superpón [reglas de permisos](/es/permissions#manage-permissions) encima para preaprobación o bloqueo de herramientas específicas en cualquier modo excepto `bypassPermissions`, que omite completamente la capa de permisos.

27 

28## Cambiar modos de permisos

29 

30Puedes cambiar modos en medio de una sesión, al inicio o como predeterminado persistente. El modo se establece a través de estos controles, no pidiendo a Claude en el chat. Selecciona tu interfaz a continuación para ver cómo cambiarlo.

31 

32<Tabs>

33 <Tab title="CLI">

34 **Durante una sesión**: presiona `Shift+Tab` para ciclar `default` → `acceptEdits` → `plan`. El modo actual aparece en la barra de estado. No todos los modos están en el ciclo predeterminado:

35 

36 * `auto`: aparece cuando tu cuenta cumple los [requisitos del modo auto](#eliminate-prompts-with-auto-mode); ciclar hacia auto muestra un aviso de aceptación hasta que lo aceptes, o selecciona **No, no vuelvas a preguntar** para eliminar auto del ciclo

37 * `bypassPermissions`: aparece después de que inicies con `--permission-mode bypassPermissions`, `--dangerously-skip-permissions`, o `--allow-dangerously-skip-permissions`; la variante `--allow-` añade el modo al ciclo sin activarlo

38 * `dontAsk`: nunca aparece en el ciclo; establécelo con `--permission-mode dontAsk`

39 

40 Los modos opcionales habilitados se insertan después de `plan`, con `bypassPermissions` primero y `auto` último. Si tienes ambos habilitados, ciclarás a través de `bypassPermissions` en el camino a `auto`.

41 

42 **Al inicio**: pasa el modo como una bandera.

43 

44 ```bash theme={null}

45 claude --permission-mode plan

46 ```

47 

48 **Como predeterminado**: establece `defaultMode` en [settings](/es/settings#settings-files).

49 

50 ```json theme={null}

51 {

52 "permissions": {

53 "defaultMode": "acceptEdits"

54 }

55 }

56 ```

57 

58 La misma bandera `--permission-mode` funciona con `-p` para [ejecuciones no interactivas](/es/headless).

59 </Tab>

60 

61 <Tab title="VS Code">

62 **Durante una sesión**: haz clic en el indicador de modo en la parte inferior del cuadro de solicitud.

63 

64 **Como predeterminado**: establece `claudeCode.initialPermissionMode` en la configuración de VS Code, o usa el panel de configuración de la extensión Claude Code.

65 

66 El indicador de modo muestra estas etiquetas, asignadas al modo que cada una aplica:

67 

68 | Etiqueta de interfaz de usuario | Modo |

69 | :------------------------------ | :------------------ |

70 | Pedir antes de editar | `default` |

71 | Editar automáticamente | `acceptEdits` |

72 | Modo de planificación | `plan` |

73 | Modo automático | `auto` |

74 | Omitir permisos | `bypassPermissions` |

75 

76 El modo automático aparece en el indicador de modo después de que habilites **Permitir omitir permisos peligrosamente** en la configuración de la extensión, pero permanece no disponible hasta que tu cuenta cumpla todos los requisitos listados en la [sección de modo auto](#eliminate-prompts-with-auto-mode). La configuración `claudeCode.initialPermissionMode` no acepta `auto`; para comenzar en modo auto por defecto, establece `defaultMode` en tu [`settings.json`](/es/settings#settings-files) de Claude Code en su lugar.

77 

78 Omitir permisos también requiere el interruptor **Permitir omitir permisos peligrosamente** antes de que aparezca en el indicador de modo.

79 

80 Consulta la [guía de VS Code](/es/vs-code) para detalles específicos de la extensión.

81 </Tab>

82 

83 <Tab title="JetBrains">

84 El plugin de JetBrains ejecuta Claude Code en la terminal del IDE, por lo que cambiar modos funciona igual que en la CLI: presiona `Shift+Tab` para ciclar, o pasa `--permission-mode` al lanzar.

85 </Tab>

86 

87 <Tab title="Desktop">

88 Usa el selector de modo junto al botón de envío. Auto y Omitir permisos aparecen solo después de que los habilites en la configuración de Desktop. Consulta la [guía de Desktop](/es/desktop#choose-a-permission-mode).

89 </Tab>

90 

91 <Tab title="Web y móvil">

92 Usa el menú desplegable de modo junto al cuadro de solicitud en [claude.ai/code](https://claude.ai/code) o en la aplicación móvil. Los avisos de permisos aparecen en claude.ai para aprobación. Qué modos aparecen depende de dónde se ejecute la sesión:

93 

94 * **Sesiones en la nube** en [Claude Code en la web](/es/claude-code-on-the-web): Aceptar ediciones automáticamente y Modo de planificación. Pedir permisos, Automático y Omitir permisos no están disponibles.

95 * **Sesiones de [Control remoto](/es/remote-control)** en tu máquina local: Pedir permisos, Aceptar ediciones automáticamente y Modo de planificación. Automático y Omitir permisos no están disponibles.

96 

97 Para Control remoto, también puedes establecer el modo de inicio al lanzar el host:

98 

99 ```bash theme={null}

100 claude remote-control --permission-mode acceptEdits

101 ```

102 </Tab>

103</Tabs>

104 

105## Auto-aprobar ediciones de archivos con modo acceptEdits

106 

107El 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.

108 

109Además de ediciones de archivos, el modo `acceptEdits` auto-aprueba comandos Bash comunes del sistema de archivos: `mkdir`, `touch`, `rm`, `rmdir`, `mv`, `cp`, y `sed`. Estos comandos también se auto-aprueban cuando se prefijan con variables de entorno seguras como `LANG=C` o `NO_COLOR=1`, o envoltorios de procesos como `timeout`, `nice`, o `nohup`. Como las ediciones de archivos, la auto-aprobación se aplica solo a rutas dentro de su directorio de trabajo o `additionalDirectories`. Las rutas fuera de ese alcance, escrituras en [rutas protegidas](#protected-paths), y todos los demás comandos Bash aún solicitan confirmación.

110 

111Cuando la [herramienta PowerShell](/es/tools-reference#powershell-tool) está habilitada, el modo `acceptEdits` también auto-aprueba `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.

112 

113Utilice `acceptEdits` cuando desee revisar cambios en su editor o a través de `git diff` después del hecho en lugar de aprobar cada edición en línea. Presione `Shift+Tab` una vez desde el modo predeterminado para entrar en él, o comience directamente con él:

114 

115```bash theme={null}

116claude --permission-mode acceptEdits

117```

118 

119## Analizar antes de editar con modo de planificación

120 

121El modo de planificación le dice a Claude que investigue y proponga cambios sin hacerlos. Claude lee archivos, ejecuta comandos de shell para explorar, y escribe un plan, pero no edita tu fuente. Los avisos de permisos aún se aplican igual que en el modo predeterminado.

122 

123Entra en modo de planificación presionando `Shift+Tab` o prefijando una solicitud única con `/plan`. También puedes comenzar en modo de planificación desde la CLI:

124 

125```bash theme={null}

126claude --permission-mode plan

127```

128 

129Presiona `Shift+Tab` de nuevo para salir del modo de planificación sin aprobar un plan.

130 

131Cuando el plan está listo, Claude lo presenta y pregunta cómo proceder. Desde ese aviso puedes:

132 

133* Aprobar e iniciar en modo automático

134* Aprobar y aceptar ediciones

135* Aprobar y revisar cada edición manualmente

136* Continuar planificando con retroalimentación

137* Refinar con [Ultraplan](/es/ultraplan) para revisión basada en navegador

138 

139Cada opción de aprobación también ofrece borrar el contexto de planificación primero.

140 

141## Eliminar avisos con modo automático

142 

143<Note>

144 El modo automático requiere Claude Code v2.1.83 o posterior.

145</Note>

146 

147El modo automático permite que Claude ejecute sin avisos de permisos. Un modelo clasificador separado revisa las acciones antes de que se ejecuten, bloqueando cualquier cosa que escale más allá de tu solicitud, apunte a infraestructura no reconocida, o parezca impulsada por contenido hostil que Claude leyó.

148 

149<Warning>

150 El modo automático es una vista previa de investigación. Reduce avisos pero no garantiza seguridad. Úsalo para tareas donde confías en la dirección general, no como reemplazo para revisión en operaciones sensibles.

151</Warning>

152 

153El modo automático está disponible solo cuando tu cuenta cumple todos estos requisitos:

154 

155* **Plan**: Max, Team, Enterprise, o API. No disponible en Pro.

156* **Admin**: en Team y Enterprise, un administrador debe habilitarlo en [configuración de administrador de Claude Code](https://claude.ai/admin-settings/claude-code) antes de que los usuarios puedan activarlo. Los administradores también pueden bloquearlo estableciendo `permissions.disableAutoMode` a `"disable"` en [configuración administrada](/es/permissions#managed-settings).

157* **Modelo**: Claude Sonnet 4.6, Opus 4.6, u Opus 4.7 en planes Team, Enterprise y API; solo Claude Opus 4.7 en planes Max. Otros modelos, incluyendo Haiku y modelos claude-3, no son compatibles.

158* **Proveedor**: Solo API de Anthropic. No disponible en Bedrock, Vertex, o Foundry.

159 

160Si Claude Code reporta el modo automático como no disponible, uno de estos requisitos no se cumple; esto no es una interrupción transitoria. Un mensaje separado que nombra un modelo y dice que el modo automático "no puede determinar la seguridad" de una acción es una interrupción transitoria del clasificador; consulta la [referencia de errores](/es/errors#auto-mode-cannot-determine-the-safety-of-an-action).

161 

162### Qué bloquea el clasificador por defecto

163 

164El clasificador confía en tu directorio de trabajo y en los remotos configurados de tu repositorio. Todo lo demás se trata como externo hasta que [configures infraestructura confiable](/es/auto-mode-config).

165 

166**Bloqueado por defecto**:

167 

168* Descargar y ejecutar código, como `curl | bash`

169* Enviar datos sensibles a puntos finales externos

170* Despliegues y migraciones de producción

171* Eliminación masiva en almacenamiento en la nube

172* Otorgar permisos de IAM o repositorio

173* Modificar infraestructura compartida

174* Destruir irreversiblemente archivos que existían antes de la sesión

175* Push forzado, o empujar directamente a `main`

176 

177**Permitido por defecto**:

178 

179* Operaciones de archivos locales en tu directorio de trabajo

180* Instalar dependencias declaradas en tus archivos de bloqueo o manifiestos

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

182* Solicitudes HTTP de solo lectura

183* Empujar a la rama en la que comenzaste o una que Claude creó

184 

185Las solicitudes de acceso de red de sandbox se enrutan a través del clasificador en lugar de permitirse por defecto. Ejecuta `claude auto-mode defaults` para ver las listas de reglas completas. Si las acciones rutinarias se bloquean, un administrador puede añadir repositorios confiables, depósitos y servicios a través de la configuración `autoMode.environment`: consulta [Configurar modo automático](/es/auto-mode-config).

186 

187### Límites que estableces en la conversación

188 

189El clasificador trata los límites que estableces en la conversación como una señal de bloqueo. Si le dices a Claude "no empujes" o "espera hasta que revise antes de desplegar", el clasificador bloquea acciones coincidentes incluso cuando las reglas predeterminadas las permitirían. Un límite permanece en vigor hasta que lo levantes en un mensaje posterior. El propio juicio de Claude de que se cumplió una condición no lo levanta.

190 

191Los límites no se almacenan como reglas. El clasificador los relee de la transcripción en cada verificación, por lo que un límite puede perderse si [la compactación de contexto](/es/costs#reduce-token-usage) elimina el mensaje que lo estableció. Para una garantía dura, añade una [regla de denegación](/es/permissions#permission-rule-syntax) en su lugar.

192 

193### Cuándo el modo automático retrocede

194 

195Cada acción denegada muestra una notificación y aparece en `/permissions` bajo la pestaña Recientemente denegado, donde puedes presionar `r` para reintentar con una aprobación manual.

196 

197Si el clasificador bloquea una acción 3 veces seguidas o 20 veces en total, el modo automático se pausa y Claude Code reanuda la solicitud. Aprobar la acción solicitada reanuda el modo automático. Estos umbrales no son configurables. Cualquier acción permitida reinicia el contador consecutivo, mientras que el contador total persiste para la sesión y se reinicia solo cuando su propio límite desencadena un retroceso.

198 

199En [modo no interactivo](/es/headless) con la bandera `-p`, los bloqueos repetidos abortan la sesión ya que no hay usuario para solicitar.

200 

201Los bloqueos repetidos generalmente significan que el clasificador carece de contexto sobre tu infraestructura. Usa `/feedback` para reportar falsos positivos, o haz que un administrador [configure infraestructura confiable](/es/auto-mode-config).

202 

203<AccordionGroup>

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

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

206 

207 1. Las acciones que coinciden con tus [reglas de permitir o denegar](/es/permissions#manage-permissions) se resuelven inmediatamente

208 2. Las acciones de solo lectura y ediciones de archivos en tu directorio de trabajo se auto-aprueban, excepto escrituras en [rutas protegidas](#protected-paths)

209 3. Todo lo demás va al clasificador

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

211 

212 Al entrar en modo automático, se descartan las reglas de permitir amplias que otorgan ejecución de código arbitrario:

213 

214 * `Bash(*)` sin restricciones

215 * Intérpretes con comodín como `Bash(python*)`

216 * Comandos de ejecución del gestor de paquetes

217 * Reglas `Agent` de permitir

218 

219 Las reglas estrechas como `Bash(npm test)` se mantienen. Las reglas descartadas se restauran cuando sales del modo automático.

220 

221 El clasificador ve mensajes de usuario, llamadas de herramientas, y tu contenido de CLAUDE.md. Los resultados de herramientas se eliminan, por lo que el contenido hostil en un archivo o página web no puede manipularlo directamente. Una sonda separada del lado del servidor escanea los resultados de herramientas entrantes y marca contenido sospechoso antes de que Claude lo lea. Para más sobre cómo funcionan estas capas juntas, consulta el [anuncio del modo automático](https://claude.com/blog/auto-mode) y la [inmersión profunda de ingeniería](https://www.anthropic.com/engineering/claude-code-auto-mode).

222 </Accordion>

223 

224 <Accordion title="Cómo el modo automático maneja subagentes">

225 El clasificador verifica el trabajo de [subagentes](/es/sub-agents) en tres puntos:

226 

227 1. Antes de que un subagente comience, la descripción de tarea delegada se evalúa, por lo que una tarea que se ve peligrosa se bloquea en el momento de generación.

228 2. Mientras el subagente se ejecuta, cada una de sus acciones pasa por el clasificador con las mismas reglas que la sesión principal, y cualquier `permissionMode` en el frontmatter del subagente se ignora.

229 3. Cuando el subagente termina, el clasificador revisa su historial de acciones completo; si esa verificación de retorno marca una preocupación, se antepone una advertencia de seguridad a los resultados del subagente.

230 </Accordion>

231 

232 <Accordion title="Costo y latencia">

233 El clasificador se ejecuta en un modelo configurado por servidor que es independiente de tu selección de `/model`, por lo que cambiar modelos no cambia la disponibilidad del clasificador. Las llamadas del clasificador cuentan hacia tu uso de tokens. Cada verificación envía una porción de la transcripción más la acción pendiente, añadiendo un viaje de ida y vuelta antes de la ejecución. Las lecturas y ediciones de directorio de trabajo fuera de rutas protegidas omiten el clasificador, por lo que la sobrecarga proviene principalmente de comandos de shell y operaciones de red.

234 </Accordion>

235</AccordionGroup>

236 

237## Permitir solo herramientas preaprobadas con modo dontAsk

238 

239El modo `dontAsk` auto-deniega cada llamada de herramienta que de otro modo solicitaría. Solo las acciones que coinciden con tus reglas `permissions.allow` y [comandos Bash de solo lectura](/es/permissions#read-only-commands) pueden ejecutarse; las reglas `ask` explícitas se deniegan en lugar de solicitar. Esto hace que el modo sea completamente no interactivo para tuberías de CI o entornos restringidos donde predefines exactamente qué puede hacer Claude.

240 

241Establécelo al inicio con la bandera:

242 

243```bash theme={null}

244claude --permission-mode dontAsk

245```

246 

247## Omitir todas las verificaciones con modo bypassPermissions

248 

249El modo `bypassPermissions` desactiva los avisos de permisos y las verificaciones de seguridad para que las llamadas de 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 eliminaciones dirigidas al directorio raíz del sistema de archivos o al directorio de inicio, como `rm -rf /` y `rm -rf ~`, aún solicitan como un cortacircuitos contra errores del modelo. Use este modo solo en entornos aislados como contenedores, máquinas virtuales, o devcontainers sin acceso a internet, donde Claude Code no puede dañar su sistema anfitrión.

250 

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

252 

253```bash theme={null}

254claude --permission-mode bypassPermissions

255```

256 

257La bandera `--dangerously-skip-permissions` es equivalente.

258 

259<Warning>

260 `bypassPermissions` no ofrece protección contra inyección de solicitud o acciones no intencionadas. Para verificaciones de seguridad de fondo sin avisos, use [modo automático](#eliminate-prompts-with-auto-mode) en su lugar. Los administradores pueden bloquear este modo estableciendo `permissions.disableBypassPermissionsMode` a `"disable"` en [configuración administrada](/es/permissions#managed-settings).

261</Warning>

262 

263## Rutas protegidas

264 

265Las escrituras en un pequeño conjunto de rutas nunca se auto-aprueban, en cada modo excepto `bypassPermissions`. Esto previene la corrupción accidental del estado del repositorio y la configuración propia de Claude. En `default`, `acceptEdits`, y `plan` estas escrituras solicitan; en `auto` se enrutan al clasificador; en `dontAsk` se deniegan; en `bypassPermissions` se permiten.

266 

267Directorios protegidos:

268 

269* `.git`

270* `.vscode`

271* `.idea`

272* `.husky`

273* `.claude`, excepto para `.claude/commands`, `.claude/agents`, `.claude/skills`, y `.claude/worktrees` donde Claude crea rutinariamente contenido

274 

275Archivos protegidos:

276 

277* `.gitconfig`, `.gitmodules`

278* `.bashrc`, `.bash_profile`, `.zshrc`, `.zprofile`, `.profile`

279* `.ripgreprc`

280* `.mcp.json`, `.claude.json`

281 

282## Ver también

283 

284* [Permissions](/es/permissions): reglas de permitir, preguntar y denegar; políticas administradas

285* [Configure auto mode](/es/auto-mode-config): dile al clasificador qué infraestructura confía tu organización

286* [Hooks](/es/hooks): lógica de permisos personalizada a través de hooks `PreToolUse` y `PermissionRequest`

287* [Ultraplan](/es/ultraplan): ejecuta modo de planificación en una sesión de Claude Code en la web con revisión basada en navegador

288* [Security](/es/security): salvaguardas y mejores prácticas

289* [Sandboxing](/es/sandboxing): aislamiento de sistema de archivos y red para comandos Bash

290* [Non-interactive mode](/es/headless): ejecuta Claude Code con la bandera `-p`

permissions.md +473 −0 created

Details

1> ## Documentation Index

2> Fetch the complete documentation index at: https://code.claude.com/docs/llms.txt

3> Use this file to discover all available pages before exploring further.

4 

5# Configurar permisos

6 

7> Controle lo que Claude Code puede acceder y hacer con reglas de permisos granulares, modos y políticas administradas.

8 

9Claude Code admite permisos granulares para que pueda especificar exactamente qué puede hacer el agente y qué no puede hacer. La configuración de permisos se puede registrar en el control de versiones y distribuir a todos los desarrolladores de su organización, así como personalizarse por desarrolladores individuales.

10 

11## Sistema de permisos

12 

13Claude Code utiliza un sistema de permisos escalonado para equilibrar potencia y seguridad:

14 

15| Tipo de herramienta | Ejemplo | Se requiere aprobación | Comportamiento de "Sí, no preguntar de nuevo" |

16| :----------------------- | :------------------------- | :--------------------- | :--------------------------------------------------- |

17| Solo lectura | Lecturas de archivos, Grep | No | N/A |

18| Comandos Bash | Ejecución de shell | Sí | Permanentemente por directorio de proyecto y comando |

19| Modificación de archivos | Editar/escribir archivos | Sí | Hasta el final de la sesión |

20 

21## Administrar permisos

22 

23Puede ver y administrar los permisos de herramientas de Claude Code con `/permissions`. Esta interfaz de usuario enumera todas las reglas de permisos y el archivo settings.json del que se obtienen.

24 

25* Las reglas **Allow** permiten que Claude Code use la herramienta especificada sin aprobación manual.

26* Las reglas **Ask** solicitan confirmación cada vez que Claude Code intenta usar la herramienta especificada.

27* Las reglas **Deny** impiden que Claude Code use la herramienta especificada.

28 

29Las reglas se evalúan en orden: **deny -> ask -> allow**. La primera regla coincidente gana, por lo que las reglas de negación siempre tienen prioridad.

30 

31## Modos de permisos

32 

33Claude Code admite varios modos de permisos que controlan cómo se aprueban las herramientas. Consulte [Permission modes](/es/permission-modes) para saber cuándo usar cada uno. Establezca `defaultMode` en sus [archivos de configuración](/es/settings#settings-files):

34 

35| Modo | Descripción |

36| :------------------ | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

37| `default` | Comportamiento estándar: solicita permiso en el primer uso de cada herramienta |

38| `acceptEdits` | Acepta automáticamente ediciones de archivos y comandos comunes del sistema de archivos (`mkdir`, `touch`, `mv`, `cp`, etc.) para rutas en el directorio de trabajo o `additionalDirectories` |

39| `plan` | Plan Mode: Claude puede analizar pero no modificar archivos ni ejecutar comandos |

40| `auto` | Auto-aprueba llamadas de herramientas con comprobaciones de seguridad en segundo plano que verifican que las acciones se alineen con su solicitud. Actualmente una vista previa de investigación |

41| `dontAsk` | Deniega automáticamente las herramientas a menos que estén preaprobadas a través de `/permissions` o reglas `permissions.allow` |

42| `bypassPermissions` | Omite todos los avisos de permisos. Las eliminaciones de directorio raíz y directorio de inicio como `rm -rf /` aún solicitan como un disyuntor de circuito |

43 

44<Warning>

45 El modo `bypassPermissions` omite todos los avisos de permisos, incluyendo escrituras en `.git`, `.claude`, `.vscode`, `.idea` y `.husky`. 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 como un disyuntor de circuito contra errores del modelo. Use este modo solo en entornos aislados como contenedores o máquinas virtuales donde Claude Code no pueda causar daño. Los administradores pueden evitar este modo estableciendo `permissions.disableBypassPermissionsMode` en `"disable"` en [configuración administrada](#managed-settings).

46</Warning>

47 

48Para evitar que se use el modo `bypassPermissions` o `auto`, establezca `permissions.disableBypassPermissionsMode` o `permissions.disableAutoMode` en `"disable"` en cualquier [archivo de configuración](/es/settings#settings-files). Estos son más útiles en [configuración administrada](#managed-settings) donde no pueden ser anulados.

49 

50## Sintaxis de reglas de permisos

51 

52Las reglas de permisos siguen el formato `Tool` o `Tool(specifier)`.

53 

54### Coincidir con todos los usos de una herramienta

55 

56Para coincidir con todos los usos de una herramienta, use solo el nombre de la herramienta sin paréntesis:

57 

58| Regla | Efecto |

59| :--------- | :-------------------------------------------------- |

60| `Bash` | Coincide con todos los comandos Bash |

61| `WebFetch` | Coincide con todas las solicitudes de obtención web |

62| `Read` | Coincide con todas las lecturas de archivos |

63 

64`Bash(*)` es equivalente a `Bash` y coincide con todos los comandos Bash.

65 

66### Usar especificadores para control granular

67 

68Agregue un especificador entre paréntesis para coincidir con usos específicos de herramientas:

69 

70| Regla | Efecto |

71| :----------------------------- | :----------------------------------------------------------------- |

72| `Bash(npm run build)` | Coincide con el comando exacto `npm run build` |

73| `Read(./.env)` | Coincide con la lectura del archivo `.env` en el directorio actual |

74| `WebFetch(domain:example.com)` | Coincide con solicitudes de obtención a example.com |

75 

76### Patrones de comodín

77 

78Las reglas de Bash admiten patrones glob con `*`. Los comodines pueden aparecer en cualquier posición del comando. Esta configuración permite comandos npm y git commit mientras bloquea git push:

79 

80```json theme={null}

81{

82 "permissions": {

83 "allow": [

84 "Bash(npm run *)",

85 "Bash(git commit *)",

86 "Bash(git * main)",

87 "Bash(* --version)",

88 "Bash(* --help *)"

89 ],

90 "deny": [

91 "Bash(git push *)"

92 ]

93 }

94}

95```

96 

97El espacio antes de `*` importa: `Bash(ls *)` coincide con `ls -la` pero no con `lsof`, mientras que `Bash(ls*)` coincide con ambos. El sufijo `:*` es una forma equivalente de escribir un comodín final, por lo que `Bash(ls:*)` coincide con los mismos comandos que `Bash(ls *)`.

98 

99El diálogo de permisos escribe la forma separada por espacios cuando selecciona "Sí, no preguntar de nuevo" para un prefijo de comando. La forma `:*` solo se reconoce al final de un patrón. En un patrón como `Bash(git:* push)`, el dos puntos se trata como un carácter literal y no coincidirá con comandos git.

100 

101## Reglas de permisos específicas de herramientas

102 

103### Bash

104 

105Las reglas de permisos de Bash admiten coincidencia de comodines con `*`. Los comodines pueden aparecer en cualquier posición del comando, incluyendo al principio, en el medio o al final:

106 

107* `Bash(npm run build)` coincide con el comando Bash exacto `npm run build`

108* `Bash(npm run test *)` coincide con comandos Bash que comienzan con `npm run test`

109* `Bash(npm *)` coincide con cualquier comando que comience con `npm `

110* `Bash(* install)` coincide con cualquier comando que termine con ` install`

111* `Bash(git * main)` coincide con comandos como `git checkout main` y `git log --oneline main`

112 

113Un único `*` coincide con cualquier secuencia de caracteres incluyendo espacios, por lo que un comodín puede abarcar múltiples argumentos. `Bash(git *)` coincide con `git log --oneline --all`, y `Bash(git * main)` coincide con `git push origin main` así como con `git merge main`.

114 

115Cuando `*` aparece al final con un espacio antes (como `Bash(ls *)`), aplica un límite de palabra, requiriendo que el prefijo sea seguido por un espacio o fin de cadena. Por ejemplo, `Bash(ls *)` coincide con `ls -la` pero no con `lsof`. En contraste, `Bash(ls*)` sin espacio coincide con ambos `ls -la` y `lsof` porque no hay restricción de límite de palabra.

116 

117#### Comandos compuestos

118 

119<Tip>

120 Claude Code es consciente de los operadores de shell, por lo que una regla como `Bash(safe-cmd *)` no le dará permiso para ejecutar el comando `safe-cmd && other-cmd`. Los separadores de comando reconocidos son `&&`, `||`, `;`, `|`, `|&`, `&` y saltos de línea. Una regla debe coincidir con cada subcomando de forma independiente.

121</Tip>

122 

123Cuando aprueba un comando compuesto con "Sí, no preguntar de nuevo", Claude Code guarda una regla separada para cada subcomando que requiere aprobación, en lugar de una sola regla para la cadena completa. Por ejemplo, aprobar `git status && npm test` guarda una regla para `npm test`, por lo que futuras invocaciones de `npm test` se reconocen independientemente de lo que preceda a `&&`. Los subcomandos como `cd` en un subdirectorio generan su propia regla Read para esa ruta. Se pueden guardar hasta 5 reglas para un solo comando compuesto.

124 

125#### Envoltorios de procesos

126 

127Antes de coincidir con reglas de Bash, Claude Code elimina un conjunto fijo de envoltorios de procesos para que una regla como `Bash(npm test *)` también coincida con `timeout 30 npm test`. Los envoltorios reconocidos son `timeout`, `time`, `nice`, `nohup` y `stdbuf`.

128 

129`xargs` desnudo también se elimina, por lo que `Bash(grep *)` coincide con `xargs grep pattern`. La eliminación solo se aplica cuando `xargs` no tiene banderas: una invocación como `xargs -n1 grep pattern` se coincide como un comando `xargs`, por lo que las reglas escritas para el comando interno no la cubren.

130 

131Esta lista de envoltorios está integrada y no es configurable. Los ejecutores de entorno de desarrollo como `direnv exec`, `devbox run`, `mise exec`, `npx` y `docker exec` no están en la lista. Porque estas herramientas ejecutan sus argumentos como un comando, una regla como `Bash(devbox run *)` coincide con lo que viene después de `run`, incluyendo `devbox run rm -rf .`. Para aprobar trabajo dentro de un ejecutor de entorno, escriba una regla específica que incluya tanto el ejecutor como el comando interno, como `Bash(devbox run npm test)`. Agregue una regla por comando interno que desee permitir.

132 

133Los envoltorios exec como `watch`, `setsid`, `ionice` y `flock` siempre solicitan y no pueden ser auto-aprobados por una regla de prefijo como `Bash(watch *)`. Lo mismo se aplica a `find` con `-exec` o `-delete`: una regla `Bash(find *)` no cubre estas formas. Para aprobar una invocación específica, escriba una regla de coincidencia exacta para la cadena de comando completa.

134 

135#### Comandos de solo lectura

136 

137Claude Code reconoce un conjunto integrado de comandos Bash como de solo lectura y los ejecuta sin un aviso de permisos en cada modo. Estos incluyen `ls`, `cat`, `head`, `tail`, `grep`, `find`, `wc`, `diff`, `stat`, `du`, `cd` y formas de solo lectura de `git`. El conjunto no es configurable; para requerir un aviso para uno de estos comandos, agregue una regla `ask` o `deny` para él.

138 

139Los patrones glob sin comillas se permiten para comandos cuya cada bandera es de solo lectura, por lo que `ls *.ts` y `wc -l src/*.py` se ejecutan sin un aviso. Los comandos con banderas capaces de escritura o ejecución, como `find`, `sort`, `sed` y `git`, aún solicitan cuando un glob sin comillas está presente porque el glob podría expandirse a una bandera como `-delete`.

140 

141Un `cd` en una ruta dentro de su directorio de trabajo o un [directorio adicional](#working-directories) también es de solo lectura. Un comando compuesto como `cd packages/api && ls` se ejecuta sin un aviso cuando cada parte se califica por su cuenta. Combinar `cd` con `git` en un comando compuesto siempre solicita, independientemente del directorio de destino.

142 

143<Warning>

144 Los patrones de permisos de Bash que intentan restringir argumentos de comando son frágiles. Por ejemplo, `Bash(curl http://github.com/ *)` intenta restringir curl a URLs de GitHub, pero no coincidirá con variaciones como:

145 

146 * Opciones antes de URL: `curl -X GET http://github.com/...`

147 * Protocolo diferente: `curl https://github.com/...`

148 * Redirecciones: `curl -L http://bit.ly/xyz` (redirige a github)

149 * Variables: `URL=http://github.com && curl $URL`

150 * Espacios adicionales: `curl http://github.com`

151 

152 Para un filtrado de URL más confiable, considere:

153 

154 * **Restringir herramientas de red de Bash**: use reglas de negación para bloquear `curl`, `wget` y comandos similares, luego use la herramienta WebFetch con permiso `WebFetch(domain:github.com)` para dominios permitidos

155 * **Usar hooks PreToolUse**: implemente un hook que valide URLs en comandos Bash y bloquee dominios no permitidos

156 * Instruir a Claude Code sobre sus patrones curl permitidos a través de CLAUDE.md

157 

158 Tenga en cuenta que usar WebFetch solo no previene el acceso a la red. Si se permite Bash, Claude aún puede usar `curl`, `wget` u otras herramientas para alcanzar cualquier URL.

159</Warning>

160 

161### PowerShell

162 

163Las reglas de permisos de PowerShell usan la misma forma que las reglas de Bash. Los comodines con `*` coinciden en cualquier posición, el sufijo `:*` es equivalente a un ` *` final, y un `PowerShell` desnudo o `PowerShell(*)` coincide con cada comando. Esta configuración permite comandos `Get-ChildItem` y `git commit` mientras bloquea `Remove-Item`:

164 

165```json theme={null}

166{

167 "permissions": {

168 "allow": [

169 "PowerShell(Get-ChildItem *)",

170 "PowerShell(git commit *)"

171 ],

172 "deny": [

173 "PowerShell(Remove-Item *)"

174 ]

175 }

176}

177```

178 

179Los alias comunes se canonicalizan antes de coincidir. Una regla escrita para el nombre del cmdlet también coincide con sus alias, por lo que `PowerShell(Get-ChildItem *)` coincide con `gci`, `ls` y `dir` también. La coincidencia no distingue mayúsculas de minúsculas.

180 

181Claude Code analiza el AST de PowerShell y verifica cada comando en un comando compuesto de forma independiente. Los operadores de tubería `|`, separadores de declaración `;` y en PowerShell 7+ los operadores de cadena `&&` y `||` dividen un comando compuesto en subcomandos. Una regla debe coincidir con cada subcomando para que se permita el comando compuesto.

182 

183### Read y Edit

184 

185Las reglas `Edit` se aplican a todas las herramientas integradas que editan archivos. Claude hace un esfuerzo de mejor intento para aplicar reglas `Read` a todas las herramientas integradas que leen archivos como Grep y Glob.

186 

187<Warning>

188 Las reglas de negación Read y Edit se aplican a las herramientas de archivo integradas de Claude, no a los subprocesos de Bash. Una regla de negación `Read(./.env)` bloquea la herramienta Read pero no previene `cat .env` en Bash. Para aplicación a nivel del SO que bloquea todos los procesos de acceder a una ruta, [habilite el sandbox](/es/sandboxing).

189</Warning>

190 

191Las reglas Read y Edit siguen la especificación [gitignore](https://git-scm.com/docs/gitignore) con cuatro tipos de patrones distintos:

192 

193| Patrón | Significado | Ejemplo | Coincide |

194| ----------------- | ------------------------------------------------------- | -------------------------------- | ------------------------------ |

195| `//path` | Ruta **absoluta** desde la raíz del sistema de archivos | `Read(//Users/alice/secrets/**)` | `/Users/alice/secrets/**` |

196| `~/path` | Ruta desde el directorio **home** | `Read(~/Documents/*.pdf)` | `/Users/alice/Documents/*.pdf` |

197| `/path` | Ruta **relativa a la raíz del proyecto** | `Edit(/src/**/*.ts)` | `<project root>/src/**/*.ts` |

198| `path` o `./path` | Ruta **relativa al directorio actual** | `Read(*.env)` | `<cwd>/*.env` |

199 

200<Warning>

201 Un patrón como `/Users/alice/file` NO es una ruta absoluta. Es relativa a la raíz del proyecto. Use `//Users/alice/file` para rutas absolutas.

202</Warning>

203 

204En Windows, las rutas se normalizan a forma POSIX antes de coincidir. `C:\Users\alice` se convierte en `/c/Users/alice`, así que use `//c/**/.env` para coincidir con archivos `.env` en cualquier lugar de esa unidad. Para coincidir en todas las unidades, use `//**/.env`.

205 

206Ejemplos:

207 

208* `Edit(/docs/**)`: edita en `<project>/docs/` (NO `/docs/` y NO `<project>/.claude/docs/`)

209* `Read(~/.zshrc)`: lee el `.zshrc` de su directorio home

210* `Edit(//tmp/scratch.txt)`: edita la ruta absoluta `/tmp/scratch.txt`

211* `Read(src/**)`: lee desde `<current-directory>/src/`

212 

213<Note>

214 En patrones gitignore, `*` coincide con archivos en un solo directorio mientras que `**` coincide recursivamente en directorios. Para permitir todo acceso a archivos, use solo el nombre de la herramienta sin paréntesis: `Read`, `Edit` o `Write`.

215</Note>

216 

217Cuando Claude accede a un symlink, las reglas de permisos verifican dos rutas: el symlink mismo y el archivo al que se resuelve. Las reglas de permiso y negación tratan ese par de manera diferente: las reglas de permiso recurren a solicitarle, mientras que las reglas de negación bloquean directamente.

218 

219* **Reglas de permiso**: se aplican solo cuando tanto la ruta del symlink como su destino coinciden. Un symlink dentro de un directorio permitido que apunta fuera de él aún le solicita.

220* **Reglas de negación**: se aplican cuando la ruta del symlink o su destino coincide. Un symlink que apunta a un archivo denegado está denegado.

221 

222Por ejemplo, con `Read(./project/**)` permitido y `Read(~/.ssh/**)` denegado, un symlink en `./project/key` que apunta a `~/.ssh/id_rsa` está bloqueado: el destino falla la regla de permiso y coincide con la regla de negación.

223 

224### WebFetch

225 

226* `WebFetch(domain:example.com)` coincide con solicitudes de obtención a example.com

227 

228### MCP

229 

230* `mcp__puppeteer` coincide con cualquier herramienta proporcionada por el servidor `puppeteer` (nombre configurado en Claude Code)

231* `mcp__puppeteer__*` sintaxis de comodín que también coincide con todas las herramientas del servidor `puppeteer`

232* `mcp__puppeteer__puppeteer_navigate` coincide con la herramienta `puppeteer_navigate` proporcionada por el servidor `puppeteer`

233 

234### Agent (subagents)

235 

236Use reglas `Agent(AgentName)` para controlar qué [subagents](/es/sub-agents) puede usar Claude:

237 

238* `Agent(Explore)` coincide con el subagent Explore

239* `Agent(Plan)` coincide con el subagent Plan

240* `Agent(my-custom-agent)` coincide con un subagent personalizado llamado `my-custom-agent`

241 

242Agregue estas reglas a la matriz `deny` en su configuración o use la bandera CLI `--disallowedTools` para deshabilitar agentes específicos. Para deshabilitar el agente Explore:

243 

244```json theme={null}

245{

246 "permissions": {

247 "deny": ["Agent(Explore)"]

248 }

249}

250```

251 

252## Extender permisos con hooks

253 

254Los [hooks de Claude Code](/es/hooks-guide) proporcionan una forma de registrar comandos de shell personalizados para realizar evaluación de permisos en tiempo de ejecución. Cuando Claude Code realiza una llamada de herramienta, los hooks PreToolUse se ejecutan antes del aviso de permisos. La salida del hook puede denegar la llamada de herramienta, forzar un aviso u omitir el aviso para permitir que la llamada continúe.

255 

256Las decisiones del hook no omiten las reglas de permisos. Las reglas de negación y solicitud se evalúan independientemente de lo que devuelva un hook PreToolUse, por lo que una regla de negación coincidente bloquea la llamada y una regla de solicitud coincidente aún solicita incluso cuando el hook devolvió `"allow"` u `"ask"`. Esto preserva la precedencia de negación primero descrita en [Administrar permisos](#manage-permissions), incluyendo reglas de negación establecidas en configuración administrada.

257 

258Un hook de bloqueo también tiene precedencia sobre las reglas de permiso. Un hook que sale con código 2 detiene la llamada de herramienta antes de que se evalúen las reglas de permisos, por lo que el bloqueo se aplica incluso cuando una regla de permiso permitiría que la llamada continúe. Para ejecutar todos los comandos Bash sin avisos excepto algunos que desea bloquear, agregue `"Bash"` a su lista de permiso y registre un hook PreToolUse que rechace esos comandos específicos. Consulte [Bloquear ediciones a archivos protegidos](/es/hooks-guide#block-edits-to-protected-files) para un script de hook que puede adaptar.

259 

260## Directorios de trabajo

261 

262Por defecto, Claude tiene acceso a archivos en el directorio donde fue lanzado. Puede extender este acceso:

263 

264* **Durante el inicio**: use el argumento CLI `--add-dir <path>`

265* **Durante la sesión**: use el comando `/add-dir`

266* **Configuración persistente**: agregue a `additionalDirectories` en [archivos de configuración](/es/settings#settings-files)

267 

268Los archivos en directorios adicionales siguen las mismas reglas de permisos que el directorio de trabajo original: se vuelven legibles sin avisos, y los permisos de edición de archivos siguen el modo de permisos actual.

269 

270### Los directorios adicionales otorgan acceso a archivos, no configuración

271 

272Agregar un directorio extiende dónde Claude puede leer y editar archivos. No hace que ese directorio sea una raíz de configuración completa: la mayoría de la configuración `.claude/` no se descubre desde directorios adicionales, aunque algunos tipos se cargan como excepciones.

273 

274Los siguientes tipos de configuración se cargan desde directorios `--add-dir`:

275 

276| Configuración | Cargado desde `--add-dir` |

277| :--------------------------------------------------------------------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

278| [Skills](/es/skills) en `.claude/skills/` | Sí, con recarga en vivo |

279| Configuración de plugins en `.claude/settings.json` | Solo `enabledPlugins` y `extraKnownMarketplaces` |

280| Archivos [CLAUDE.md](/es/memory), `.claude/rules/` y `CLAUDE.local.md` | Solo cuando `CLAUDE_CODE_ADDITIONAL_DIRECTORIES_CLAUDE_MD=1` está establecido. `CLAUDE.local.md` además requiere la fuente de configuración `local`, que está habilitada por defecto |

281 

282Todo lo demás, incluyendo subagents, comandos, estilos de salida, hooks y otras configuraciones, se descubre solo desde el directorio de trabajo actual y sus padres, su directorio de usuario en `~/.claude/` y configuración administrada. Para compartir esa configuración entre proyectos, use uno de estos enfoques:

283 

284* **Configuración a nivel de usuario**: coloque archivos en `~/.claude/agents/`, `~/.claude/output-styles/` o `~/.claude/settings.json` para hacerlos disponibles en cada proyecto

285* **Plugins**: empaquete y distribuya configuración como un [plugin](/es/plugins) que los equipos pueden instalar

286* **Lanzar desde el directorio de configuración**: ejecute Claude Code desde el directorio que contiene la configuración `.claude/` que desea

287 

288## Cómo interactúan los permisos con el sandboxing

289 

290Los permisos y el [sandboxing](/es/sandboxing) son capas de seguridad complementarias:

291 

292* **Permisos** controlan qué herramientas puede usar Claude Code y qué archivos o dominios puede acceder. Se aplican a todas las herramientas (Bash, Read, Edit, WebFetch, MCP y otras).

293* **Sandboxing** proporciona aplicación a nivel del SO que restringe el acceso del sistema de archivos y red de la herramienta Bash. Se aplica solo a comandos Bash y sus procesos secundarios.

294 

295Use ambos para defensa en profundidad:

296 

297* Las reglas de negación de permisos bloquean que Claude intente acceder a recursos restringidos

298* Las restricciones de sandbox previenen que comandos Bash alcancen recursos fuera de límites definidos, incluso si una inyección de solicitud omite la toma de decisiones de Claude

299* Las restricciones del sistema de archivos en el sandbox usan reglas de negación Read y Edit, no configuración de sandbox separada

300* Las restricciones de red combinan reglas de permisos WebFetch con las listas `allowedDomains` y `deniedDomains` del sandbox

301 

302Cuando el sandboxing está habilitado con `autoAllowBashIfSandboxed: true`, que es el valor predeterminado, los comandos Bash en sandbox se ejecutan sin solicitar incluso si sus permisos incluyen `ask: Bash(*)`. El límite del sandbox sustituye el aviso por comando. Las reglas de negación explícitas aún se aplican, y los comandos `rm` o `rmdir` que apunten a `/`, su directorio de inicio u otras rutas críticas del sistema aún desencadenan un aviso. Consulte [modos de sandbox](/es/sandboxing#sandbox-modes) para cambiar este comportamiento.

303 

304## Configuración administrada

305 

306Para organizaciones que necesitan control centralizado sobre la configuración de Claude Code, los administradores pueden implementar configuración administrada que no puede ser anulada por configuración de usuario o proyecto. Estas configuraciones de política siguen el mismo formato que archivos de configuración regulares y se pueden entregar a través de políticas MDM/a nivel del SO, archivos de configuración administrada o [configuración administrada por servidor](/es/server-managed-settings). Consulte [archivos de configuración](/es/settings#settings-files) para mecanismos de entrega y ubicaciones de archivos.

307 

308### Configuración solo administrada

309 

310Las siguientes configuraciones solo se leen desde configuración administrada. Colocarlas en archivos de configuración de usuario o proyecto no tiene efecto.

311 

312| Configuración | Descripción |

313| :--------------------------------------------- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

314| `allowedChannelPlugins` | Lista de permitidos de plugins de canal que pueden enviar mensajes. Reemplaza la lista de permitidos predeterminada de Anthropic cuando se establece. Requiere `channelsEnabled: true`. Consulte [Restringir qué plugins de canal pueden ejecutarse](/es/channels#restrict-which-channel-plugins-can-run) |

315| `allowManagedHooksOnly` | Cuando es `true`, solo se cargan hooks administrados, hooks SDK y hooks de plugins forzados habilitados en la configuración administrada `enabledPlugins`. Los hooks de usuario, proyecto y todos los demás plugins están bloqueados |

316| `allowManagedMcpServersOnly` | Cuando es `true`, solo se respetan `allowedMcpServers` de configuración administrada. `deniedMcpServers` aún se fusiona de todas las fuentes. Consulte [Configuración MCP administrada](/es/mcp#managed-mcp-configuration) |

317| `allowManagedPermissionRulesOnly` | Cuando es `true`, evita que la configuración de usuario y proyecto defina reglas de permisos `allow`, `ask` o `deny`. Solo se aplican las reglas en configuración administrada |

318| `blockedMarketplaces` | Lista de bloqueo de fuentes de marketplace. Las fuentes bloqueadas se verifican antes de descargar, por lo que nunca tocan el sistema de archivos. Consulte [restricciones de marketplace administradas](/es/plugin-marketplaces#managed-marketplace-restrictions) |

319| `channelsEnabled` | Permitir [channels](/es/channels) para usuarios de Team y Enterprise. Sin establecer o `false` bloquea la entrega de mensajes de canal independientemente de lo que los usuarios pasen a `--channels` |

320| `forceRemoteSettingsRefresh` | Cuando es `true`, bloquea el inicio de CLI hasta que la configuración administrada remota se obtenga recientemente y sale si la obtención falla. Consulte [aplicación de cierre de falla](/es/server-managed-settings#enforce-fail-closed-startup) |

321| `pluginTrustMessage` | Mensaje personalizado agregado a la advertencia de confianza de plugin mostrada antes de la instalación |

322| `sandbox.filesystem.allowManagedReadPathsOnly` | Cuando es `true`, solo se respetan rutas `filesystem.allowRead` de configuración administrada. `denyRead` aún se fusiona de todas las fuentes |

323| `sandbox.network.allowManagedDomainsOnly` | Cuando es `true`, solo se respetan `allowedDomains` y reglas de permiso `WebFetch(domain:...)` de configuración administrada. Los dominios no permitidos se bloquean automáticamente sin solicitar al usuario. Los dominios denegados aún se fusionan de todas las fuentes |

324| `strictKnownMarketplaces` | Controla qué marketplaces de plugins pueden agregar los usuarios e instalar plugins desde. Consulte [restricciones de marketplace administradas](/es/plugin-marketplaces#managed-marketplace-restrictions) |

325| `wslInheritsWindowsSettings` | Cuando es `true` en la clave del registro HKLM de Windows o `C:\Program Files\ClaudeCode\managed-settings.json`, WSL lee configuración administrada de la cadena de política de Windows además de `/etc/claude-code`. Consulte [Archivos de configuración](/es/settings#settings-files) |

326 

327`disableBypassPermissionsMode` generalmente se coloca en configuración administrada para aplicar la política organizacional, pero funciona desde cualquier alcance. Un usuario puede establecerlo en su propia configuración para bloquearse a sí mismo del modo de bypass.

328 

329<Note>

330 El acceso a [Remote Control](/es/remote-control) y [sesiones web](/es/claude-code-on-the-web) no se controla mediante una clave de configuración administrada. En planes Team y Enterprise, un administrador habilita o deshabilita estas características en [configuración de administrador de Claude Code](https://claude.ai/admin-settings/claude-code).

331</Note>

332 

333## Revisar denegaciones del modo auto

334 

335Cuando el [modo auto](/es/permission-modes#eliminate-prompts-with-auto-mode) deniega una llamada de herramienta, aparece una notificación y la acción denegada se registra en `/permissions` bajo la pestaña Recently denied. Presione `r` en una acción denegada para marcarla para reintentar: cuando salga del diálogo, Claude Code envía un mensaje indicando al modelo que puede reintentar esa llamada de herramienta y reanuda la conversación.

336 

337Para reaccionar a denegaciones programáticamente, use el [hook `PermissionDenied`](/es/hooks#permissiondenied).

338 

339## Configurar el clasificador del modo auto

340 

341El [modo auto](/es/permission-modes#eliminate-prompts-with-auto-mode) utiliza un modelo clasificador para decidir si cada acción es segura de ejecutar sin solicitar. De fábrica, solo confía en el directorio de trabajo y, si está presente, los remotos del repositorio actual. Acciones como empujar a la organización de control de fuente de su empresa o escribir en un bucket de nube de equipo serán bloqueadas como posible exfiltración de datos.

342 

343Para ajustar lo que el clasificador permite o bloquea, agregue instrucciones a su archivo [CLAUDE.md](/es/memory). El clasificador lee CLAUDE.md desde directorios confiables junto a la conversación, por lo que una instrucción como "nunca force push" dirige tanto a Claude como al clasificador al mismo tiempo. Comience aquí para convenciones de proyecto y reglas de comportamiento.

344 

345Para reglas que se aplican en todos los proyectos, como infraestructura confiable o reglas de denegación en toda la organización, use el bloque de configuración `autoMode`. El clasificador lee `autoMode` desde configuración de usuario, `.claude/settings.local.json` y configuración administrada. No lee desde configuración de proyecto compartida en `.claude/settings.json`, porque un repositorio registrado podría inyectar sus propias reglas de permiso.

346 

347| Alcance | Archivo | Usar para |

348| :---------------------------- | :---------------------------- | :---------------------------------------------------------------- |

349| Un desarrollador | `~/.claude/settings.json` | Infraestructura confiable personal |

350| Un proyecto, un desarrollador | `.claude/settings.local.json` | Buckets o servicios confiables por proyecto, gitignored |

351| Organización completa | Configuración administrada | Infraestructura confiable aplicada para todos los desarrolladores |

352 

353Las entradas de cada alcance se combinan. Un desarrollador puede extender `environment`, `allow` y `soft_deny` con entradas personales pero no puede eliminar entradas que proporciona la configuración administrada. Porque las reglas de permiso actúan como excepciones a las reglas de bloqueo dentro del clasificador, una entrada `allow` agregada por desarrollador puede anular una entrada `soft_deny` de organización: la combinación es aditiva, no un límite de política duro. Si necesita una regla que los desarrolladores no puedan eludir, use `permissions.deny` en configuración administrada en su lugar, que bloquea acciones antes de que se consulte el clasificador.

354 

355### Definir infraestructura confiable

356 

357Para la mayoría de las organizaciones, `autoMode.environment` es el único campo que necesita establecer. Le dice al clasificador qué repositorios, buckets y dominios son confiables, sin tocar las reglas de bloqueo y permiso integradas. El clasificador usa `environment` para decidir qué significa "externo": cualquier destino no listado es un objetivo potencial de exfiltración.

358 

359```json theme={null}

360{

361 "autoMode": {

362 "environment": [

363 "Source control: github.example.com/acme-corp and all repos under it",

364 "Trusted cloud buckets: s3://acme-build-artifacts, gs://acme-ml-datasets",

365 "Trusted internal domains: *.corp.example.com, api.internal.example.com",

366 "Key internal services: Jenkins at ci.example.com, Artifactory at artifacts.example.com"

367 ]

368 }

369}

370```

371 

372Las entradas son prosa, no regex o patrones de herramienta. El clasificador las lee como reglas de lenguaje natural. Escríbalas de la manera que describiría su infraestructura a un ingeniero nuevo. Una sección de entorno exhaustiva cubre:

373 

374* **Organización**: el nombre de su empresa y para qué se usa principalmente Claude Code, como desarrollo de software, automatización de infraestructura o ingeniería de datos

375* **Control de fuente**: cada organización de GitHub, GitLab o Bitbucket a la que sus desarrolladores empujan

376* **Proveedores de nube y buckets confiables**: nombres de buckets o prefijos a los que Claude debería poder leer y escribir

377* **Dominios internos confiables**: nombres de host para APIs, paneles y servicios dentro de su red, como `*.internal.example.com`

378* **Servicios internos clave**: CI, registros de artefactos, índices de paquetes internos, herramientas de incidentes

379* **Contexto adicional**: restricciones de industria regulada, infraestructura multiinquilino o requisitos de cumplimiento que afecten lo que el clasificador debería tratar como riesgoso

380 

381Una plantilla de inicio útil: complete los campos entre corchetes y elimine cualquier línea que no se aplique:

382 

383```json theme={null}

384{

385 "autoMode": {

386 "environment": [

387 "Organization: {COMPANY_NAME}. Primary use: {PRIMARY_USE_CASE, e.g. software development, infrastructure automation}",

388 "Source control: {SOURCE_CONTROL, e.g. GitHub org github.example.com/acme-corp}",

389 "Cloud provider(s): {CLOUD_PROVIDERS, e.g. AWS, GCP, Azure}",

390 "Trusted cloud buckets: {TRUSTED_BUCKETS, e.g. s3://acme-builds, gs://acme-datasets}",

391 "Trusted internal domains: {TRUSTED_DOMAINS, e.g. *.internal.example.com, api.example.com}",

392 "Key internal services: {SERVICES, e.g. Jenkins at ci.example.com, Artifactory at artifacts.example.com}",

393 "Additional context: {EXTRA, e.g. regulated industry, multi-tenant infrastructure, compliance requirements}"

394 ]

395 }

396}

397```

398 

399Cuanto más contexto específico proporcione, mejor el clasificador puede distinguir operaciones internas rutinarias de intentos de exfiltración.

400 

401No necesita completar todo a la vez. Un despliegue razonable: comience con los valores predeterminados y agregue su organización de control de fuente y servicios internos clave, que resuelve los falsos positivos más comunes como empujar a sus propios repositorios. Agregue dominios confiables y buckets de nube a continuación. Complete el resto a medida que surjan bloqueos.

402 

403### Anular las reglas de bloqueo y permiso

404 

405Dos campos adicionales le permiten reemplazar las listas de reglas integradas del clasificador: `autoMode.soft_deny` controla qué se bloquea, y `autoMode.allow` controla qué excepciones se aplican. Cada uno es una matriz de descripciones en prosa, leídas como reglas de lenguaje natural.

406 

407Dentro del clasificador, la precedencia es: las reglas `soft_deny` bloquean primero, luego las reglas `allow` anulan como excepciones, luego la intención explícita del usuario anula ambas. Si el mensaje del usuario describe directa y específicamente la acción exacta que Claude está a punto de tomar, el clasificador la permite incluso si una regla `soft_deny` coincide. Las solicitudes generales no cuentan: pedir a Claude que "limpie el repositorio" no autoriza un force-push, pero pedir a Claude que "force-push esta rama" sí.

408 

409Para aflojar: elimine reglas de `soft_deny` cuando los valores predeterminados bloquean algo que su pipeline ya protege con revisión de PR, CI o entornos de ensayo, o agregue a `allow` cuando el clasificador marca repetidamente un patrón rutinario que las excepciones predeterminadas no cubren. Para apretar: agregue a `soft_deny` para riesgos específicos de su entorno que los valores predeterminados pierden, o elimine de `allow` para mantener una excepción predeterminada a las reglas de bloqueo. En todos los casos, ejecute `claude auto-mode defaults` para obtener las listas predeterminadas completas, luego copie y edite: nunca comience desde una lista vacía.

410 

411```json theme={null}

412{

413 "autoMode": {

414 "environment": [

415 "Source control: github.example.com/acme-corp and all repos under it"

416 ],

417 "allow": [

418 "Deploying to the staging namespace is allowed: staging is isolated from production and resets nightly",

419 "Writing to s3://acme-scratch/ is allowed: ephemeral bucket with a 7-day lifecycle policy"

420 ],

421 "soft_deny": [

422 "Never run database migrations outside the migrations CLI, even against dev databases",

423 "Never modify files under infra/terraform/prod/: production infrastructure changes go through the review workflow",

424 "...copy full default soft_deny list here first, then add your rules..."

425 ]

426 }

427}

428```

429 

430<Danger>

431 Establecer `allow` o `soft_deny` reemplaza la lista predeterminada completa para esa sección. Si establece `soft_deny` con una sola entrada, cada regla de bloqueo integrada se descarta: force push, exfiltración de datos, `curl | bash`, despliegues de producción y todas las otras reglas de bloqueo predeterminadas se permiten. Para personalizar de forma segura, ejecute `claude auto-mode defaults` para imprimir las reglas integradas, cópielas en su archivo de configuración, luego revise cada regla contra su propio pipeline y tolerancia de riesgo. Solo elimine reglas para riesgos que su infraestructura ya mitiga.

432</Danger>

433 

434Las tres secciones se evalúan independientemente, por lo que establecer `environment` solo deja intactas las listas predeterminadas `allow` y `soft_deny`.

435 

436### Inspeccionar los valores predeterminados y su configuración efectiva

437 

438Porque establecer `allow` o `soft_deny` reemplaza los valores predeterminados, comience cualquier personalización copiando las listas predeterminadas completas. Tres subcomandos CLI lo ayudan a inspeccionar y validar:

439 

440```bash theme={null}

441claude auto-mode defaults # the built-in environment, allow, and soft_deny rules

442claude auto-mode config # what the classifier actually uses: your settings where set, defaults otherwise

443claude auto-mode critique # get AI feedback on your custom allow and soft_deny rules

444```

445 

446Guarde la salida de `claude auto-mode defaults` en un archivo, edite las listas para que coincidan con su política y pegue el resultado en su archivo de configuración. Después de guardar, ejecute `claude auto-mode config` para confirmar que las reglas efectivas son lo que espera. Si ha escrito reglas personalizadas, `claude auto-mode critique` las revisa y marca entradas que son ambiguas, redundantes o probables de causar falsos positivos.

447 

448## Precedencia de configuración

449 

450Las reglas de permisos siguen la misma [precedencia de configuración](/es/settings#settings-precedence) que todas las demás configuraciones de Claude Code:

451 

4521. **Configuración administrada**: no puede ser anulada por ningún otro nivel, incluyendo argumentos de línea de comandos

4532. **Argumentos de línea de comandos**: anulaciones de sesión temporal

4543. **Configuración de proyecto local** (`.claude/settings.local.json`)

4554. **Configuración de proyecto compartida** (`.claude/settings.json`)

4565. **Configuración de usuario** (`~/.claude/settings.json`)

457 

458Si una herramienta se deniega en cualquier nivel, ningún otro nivel puede permitirla. Por ejemplo, una negación de configuración administrada no puede ser anulada por `--allowedTools`, y `--disallowedTools` puede agregar restricciones más allá de lo que define la configuración administrada.

459 

460Si un permiso se permite en configuración de usuario pero se deniega en configuración de proyecto, la configuración de proyecto tiene prioridad y el permiso se bloquea.

461 

462## Configuraciones de ejemplo

463 

464Este [repositorio](https://github.com/anthropics/claude-code/tree/main/examples/settings) incluye configuraciones de configuración inicial para escenarios de implementación comunes. Use estos como puntos de partida y ajústelos para que se adapten a sus necesidades.

465 

466## Ver también

467 

468* [Settings](/es/settings): referencia de configuración completa incluyendo la tabla de configuración de permisos

469* [Configure auto mode](/es/auto-mode-config): indique al clasificador del modo auto qué infraestructura confía su organización

470* [Sandboxing](/es/sandboxing): aislamiento del sistema de archivos y red a nivel del SO para comandos Bash

471* [Authentication](/es/authentication): configure el acceso de usuario a Claude Code

472* [Security](/es/security): salvaguardas de seguridad y mejores prácticas

473* [Hooks](/es/hooks-guide): automatice flujos de trabajo y extienda la evaluación de permisos

platforms.md +78 −0 created

Details

1> ## Documentation Index

2> Fetch the complete documentation index at: https://code.claude.com/docs/llms.txt

3> Use this file to discover all available pages before exploring further.

4 

5# Plataformas e integraciones

6 

7> Elija dónde ejecutar Claude Code y qué conectar. Compare la CLI, Desktop, VS Code, JetBrains, web e integraciones como Chrome, Slack e CI/CD.

8 

9Claude Code ejecuta el mismo motor subyacente en todas partes, pero cada superficie está optimizada para una forma diferente de trabajar. Esta página le ayuda a elegir la plataforma adecuada para su flujo de trabajo y conectar las herramientas que ya utiliza.

10 

11## Dónde ejecutar Claude Code

12 

13Elija una plataforma según cómo le guste trabajar y dónde viva su proyecto.

14 

15| Plataforma | Mejor para | Lo que obtiene |

16| :-------------------------------- | :--------------------------------------------------------------------------------------------------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

17| [CLI](/es/quickstart) | Flujos de trabajo de terminal, scripting, servidores remotos | Conjunto completo de características, [Agent SDK](/es/headless), proveedores de terceros |

18| [Desktop](/es/desktop) | Revisión visual, sesiones paralelas, configuración administrada | Visor de diferencias, vista previa de aplicaciones, [uso de computadora](/es/desktop#let-claude-use-your-computer) y [Dispatch](/es/desktop#sessions-from-dispatch) en Pro y Max |

19| [VS Code](/es/vs-code) | Trabajar dentro de VS Code sin cambiar a una terminal | Diferencias en línea, terminal integrada, contexto de archivo |

20| [JetBrains](/es/jetbrains) | Trabajar dentro de IntelliJ, PyCharm, WebStorm u otros IDE de JetBrains | Visor de diferencias, intercambio de selección, sesión de terminal |

21| [Web](/es/claude-code-on-the-web) | Tareas de larga duración que no necesitan mucha dirección, o trabajo que debe continuar cuando está desconectado | Nube administrada por Anthropic, continúa después de desconectarse |

22 

23La CLI es la superficie más completa para el trabajo nativo de terminal: scripting, proveedores de terceros y el Agent SDK son solo CLI. Desktop y las extensiones de IDE intercambian algunas características solo de CLI por revisión visual e integración más estrecha del editor. La web se ejecuta en la nube de Anthropic, por lo que las tareas continúan después de desconectarse.

24 

25Puede mezclar superficies en el mismo proyecto. La configuración, la memoria del proyecto y los servidores MCP se comparten entre las superficies locales.

26 

27## Conecte sus herramientas

28 

29Las integraciones permiten que Claude trabaje con servicios fuera de su base de código.

30 

31| Integración | Qué hace | Úselo para |

32| :----------------------------------- | :----------------------------------------------- | :---------------------------------------------------------------------------------- |

33| [Chrome](/es/chrome) | Controla su navegador con sus sesiones iniciadas | Prueba de aplicaciones web, rellenar formularios, automatizar sitios sin una API |

34| [GitHub Actions](/es/github-actions) | Ejecuta Claude en su canalización de CI | Revisiones automáticas de PR, clasificación de problemas, mantenimiento programado |

35| [GitLab CI/CD](/es/gitlab-ci-cd) | Lo mismo que GitHub Actions para GitLab | Automatización impulsada por CI en GitLab |

36| [Code Review](/es/code-review) | Revisa automáticamente cada PR | Detectar errores antes de la revisión humana |

37| [Slack](/es/slack) | Responde a menciones de `@Claude` en sus canales | Convertir informes de errores en solicitudes de extracción desde el chat del equipo |

38 

39Para integraciones no listadas aquí, [servidores MCP](/es/mcp) y [conectores](/es/desktop#connect-external-tools) le permiten conectar casi cualquier cosa: Linear, Notion, Google Drive o sus propias API internas.

40 

41## Trabaje cuando está lejos de su terminal

42 

43Claude Code offers several ways to work when you're not at your terminal. They differ in what triggers the work, where Claude runs, and how much you need to set up.

44 

45| | Trigger | Claude runs on | Setup | Best for |

46| :--------------------------------------------- | :--------------------------------------------------------------------------------------------- | :------------------------------------------------------------------------------------------- | :----------------------------------------------------------------------------------------------------------------------------------- | :------------------------------------------------------------ |

47| [Dispatch](/en/desktop#sessions-from-dispatch) | Message a task from the Claude mobile app | Your machine (Desktop) | [Pair the mobile app with Desktop](https://support.claude.com/en/articles/13947068) | Delegating work while you're away, minimal setup |

48| [Remote Control](/en/remote-control) | Drive a running session from [claude.ai/code](https://claude.ai/code) or the Claude mobile app | Your machine (CLI or VS Code) | Run `claude remote-control` | Steering in-progress work from another device |

49| [Channels](/en/channels) | Push events from a chat app like Telegram or Discord, or your own server | Your machine (CLI) | [Install a channel plugin](/en/channels#quickstart) or [build your own](/en/channels-reference) | Reacting to external events like CI failures or chat messages |

50| [Slack](/en/slack) | Mention `@Claude` in a team channel | Anthropic cloud | [Install the Slack app](/en/slack#setting-up-claude-code-in-slack) with [Claude Code on the web](/en/claude-code-on-the-web) enabled | PRs and reviews from team chat |

51| [Scheduled tasks](/en/scheduled-tasks) | Set a schedule | [CLI](/en/scheduled-tasks), [Desktop](/en/desktop-scheduled-tasks), or [cloud](/en/routines) | Pick a frequency | Recurring automation like daily reviews |

52 

53Si no está seguro de por dónde empezar, [instale la CLI](/es/quickstart) y ejecútela en un directorio de proyecto. Si prefiere no usar una terminal, [Desktop](/es/desktop-quickstart) le proporciona el mismo motor con una interfaz gráfica.

54 

55## Recursos relacionados

56 

57### Plataformas

58 

59* [Inicio rápido de CLI](/es/quickstart): instale y ejecute su primer comando en la terminal

60* [Desktop](/es/desktop): revisión visual de diferencias, sesiones paralelas, uso de computadora y Dispatch

61* [VS Code](/es/vs-code): la extensión Claude Code dentro de su editor

62* [JetBrains](/es/jetbrains): la extensión para IntelliJ, PyCharm y otros IDE de JetBrains

63* [Claude Code en la web](/es/claude-code-on-the-web): sesiones en la nube que continúan ejecutándose cuando se desconecta

64 

65### Integraciones

66 

67* [Chrome](/es/chrome): automatice tareas del navegador con sus sesiones iniciadas

68* [GitHub Actions](/es/github-actions): ejecute Claude en su canalización de CI

69* [GitLab CI/CD](/es/gitlab-ci-cd): lo mismo para GitLab

70* [Code Review](/es/code-review): revisión automática en cada solicitud de extracción

71* [Slack](/es/slack): envíe tareas desde el chat del equipo, obtenga PR de vuelta

72 

73### Acceso remoto

74 

75* [Dispatch](/es/desktop#sessions-from-dispatch): envíe un mensaje con una tarea desde su teléfono y puede generar una sesión de Desktop

76* [Remote Control](/es/remote-control): controle una sesión en ejecución desde su teléfono o navegador

77* [Channels](/es/channels): envíe eventos desde aplicaciones de chat o sus propios servidores a una sesión

78* [Scheduled tasks](/es/scheduled-tasks): ejecute indicaciones en un horario recurrente

plugin-dependencies.md +153 −0 created

Details

1> ## Documentation Index

2> Fetch the complete documentation index at: https://code.claude.com/docs/llms.txt

3> Use this file to discover all available pages before exploring further.

4 

5# Restringir versiones de dependencias de plugins

6 

7> Declare restricciones de versión en las dependencias de plugins para que su plugin siga funcionando cuando un plugin ascendente envíe un cambio importante.

8 

9Un plugin puede depender de otros plugins listándolos en `plugin.json` o en su entrada de marketplace. De forma predeterminada, una dependencia rastrea la versión más reciente disponible, por lo que un lanzamiento ascendente puede cambiar la dependencia bajo su plugin sin previo aviso. Las restricciones de versión le permiten mantener una dependencia en un rango de versión probado hasta que elija cambiar.

10 

11Cuando instala un plugin que declara dependencias, Claude Code resuelve e instala automáticamente y lista qué dependencias se agregaron al final de la salida de instalación. Si una dependencia desaparece más tarde, `/reload-plugins` y la actualización automática de plugins en segundo plano la reinstalan, siempre que su marketplace ya esté en sus marketplaces configurados. Volver a ejecutar `claude plugin install` en el plugin dependiente, o agregar un marketplace con `claude plugin marketplace add`, también resuelve cualquier dependencia faltante pendiente. Las dependencias de un marketplace que no ha agregado se dejan sin resolver.

12 

13Esta guía es para autores de plugins que declaran dependencias en `plugin.json` y para mantenedores de marketplace que etiquetan lanzamientos. Para instalar plugins que tienen dependencias, consulte [Descubrir e instalar plugins](/es/discover-plugins). Para el esquema de manifiesto completo, consulte la [referencia de Plugins](/es/plugins-reference).

14 

15<Note>

16 Las restricciones de versión de dependencias requieren Claude Code v2.1.110 o posterior.

17</Note>

18 

19## Por qué restringir versiones de dependencias

20 

21Considere un marketplace interno donde dos equipos publican plugins. El equipo de plataforma mantiene `secrets-vault`, un servidor MCP que envuelve un backend de secretos. El equipo de implementación mantiene `deploy-kit`, que llama a `secrets-vault` para obtener credenciales durante las implementaciones.

22 

23`deploy-kit` se prueba contra `secrets-vault` v2.1.0. Sin una restricción de versión, la próxima vez que el equipo de plataforma etiquete un lanzamiento que renombre una herramienta MCP, la actualización automática mueve `secrets-vault` de cada ingeniero a la nueva versión y `deploy-kit` se rompe.

24 

25Con una restricción de versión, `deploy-kit` declara que necesita `secrets-vault` en el rango `~2.1.0`. Los ingenieros con `deploy-kit` instalado permanecen en el parche `2.1.x` más alto que coincida. El equipo de implementación se actualiza en su propio cronograma publicando una nueva versión de `deploy-kit` con una restricción más amplia.

26 

27## Declarar una dependencia con una restricción de versión

28 

29Liste las dependencias en el array `dependencies` del `plugin.json` de su plugin. Cada entrada es un nombre de plugin u objeto con una restricción de versión.

30 

31El siguiente manifiesto declara una dependencia sin versión y una dependencia restringida:

32 

33```json .claude-plugin/plugin.json theme={null}

34{

35 "name": "deploy-kit",

36 "version": "3.1.0",

37 "dependencies": [

38 "audit-logger",

39 { "name": "secrets-vault", "version": "~2.1.0" }

40 ]

41}

42```

43 

44Una entrada puede ser una cadena simple con solo el nombre del plugin, como `"audit-logger"` en el ejemplo anterior, que depende de cualquier versión que proporcione el marketplace de ese plugin. Para más control, use un objeto con estos campos:

45 

46| Field | Type | Description |

47| :------------ | :----- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |

48| `name` | string | Nombre del plugin. Se resuelve dentro del mismo marketplace que el plugin declarante. Requerido. |

49| `version` | string | Un [rango semver](https://github.com/npm/node-semver#ranges) como `~2.1.0`, `^2.0`, `>=1.4`, o `=2.1.0`. La dependencia se obtiene en la versión etiquetada más alta que satisface este rango. |

50| `marketplace` | string | Un marketplace diferente para resolver `name` en. Las dependencias entre marketplaces están bloqueadas a menos que el marketplace de destino esté listado en [`allowCrossMarketplaceDependenciesOn`](#depend-on-a-plugin-from-another-marketplace) en el `marketplace.json` del marketplace raíz. |

51 

52El campo `version` acepta cualquier expresión soportada por el paquete `semver` de Node, incluyendo rangos de circunflejo, tilde, guión y comparador. Las versiones previas al lanzamiento como `2.0.0-beta.1` se excluyen a menos que su rango opte por un sufijo previo al lanzamiento como `^2.0.0-0`.

53 

54## Depender de un plugin de otro marketplace

55 

56De forma predeterminada, Claude Code se niega a instalar automáticamente una dependencia que vive en un marketplace diferente al del plugin que la declara. Esto evita que un marketplace extraiga silenciosamente plugins de una fuente que no ha revisado.

57 

58Para permitirlo, el mantenedor del marketplace raíz agrega el nombre del marketplace de destino a `allowCrossMarketplaceDependenciesOn` en `marketplace.json`. El marketplace raíz es el que aloja el plugin que el usuario está instalando; solo se consulta su lista de permitidos, por lo que la confianza no se encadena a través de marketplaces intermedios.

59 

60El siguiente `marketplace.json` permite que `deploy-kit` dependa de un plugin de `acme-shared`:

61 

62```json .claude-plugin/marketplace.json theme={null}

63{

64 "name": "acme-tools",

65 "owner": { "name": "Acme" },

66 "allowCrossMarketplaceDependenciesOn": ["acme-shared"],

67 "plugins": [

68 {

69 "name": "deploy-kit",

70 "source": "./deploy-kit",

71 "dependencies": [

72 { "name": "audit-logger", "marketplace": "acme-shared" }

73 ]

74 }

75 ]

76}

77```

78 

79Si el campo falta o no incluye el marketplace de destino, la instalación falla con un error `cross-marketplace` que nombra el campo a establecer. Los usuarios aún pueden instalar la dependencia manualmente primero, lo que satisface la restricción sin cambiar la lista de permitidos.

80 

81## Etiquetar lanzamientos de plugins para la resolución de versiones

82 

83Las restricciones de versión se resuelven contra etiquetas de git en el repositorio del marketplace. Para que Claude Code encuentre las versiones disponibles de una dependencia, los lanzamientos del plugin ascendente deben etiquetarse usando una convención de nomenclatura específica.

84 

85Etiquete cada lanzamiento como `{plugin-name}--v{version}`, donde `{version}` coincide con el campo `version` en el `plugin.json` de ese commit. Desde el directorio del plugin, ejecute:

86 

87```bash theme={null}

88claude plugin tag --push

89```

90 

91El comando `claude plugin tag` deriva el nombre de la etiqueta del manifiesto del plugin y de la entrada del marketplace que lo contiene. Antes de crear la etiqueta, valida el contenido del plugin, verifica que `plugin.json` y la entrada del marketplace coincidan en la versión, requiere un árbol de trabajo limpio bajo el directorio del plugin, y rechaza si la etiqueta ya existe. Agregue `--dry-run` para ver qué se etiquetaría sin crearlo. Ejecutar `git tag secrets-vault--v2.1.0` directamente es equivalente si mantiene `plugin.json` y la entrada del marketplace sincronizados usted mismo.

92 

93El prefijo del nombre del plugin permite que un repositorio de marketplace aloje múltiples plugins con líneas de versión independientes. El separador `--v` se analiza como una coincidencia de prefijo en el nombre completo del plugin, por lo que los nombres de plugins que contienen guiones se manejan correctamente.

94 

95Cuando instala un plugin que declara `{ "name": "secrets-vault", "version": "~2.1.0" }`, Claude Code lista las etiquetas del marketplace, filtra las que comienzan con `secrets-vault--v`, y obtiene la versión más alta que satisface `~2.1.0`. Si no existe una etiqueta coincidente, el plugin dependiente se deshabilita con un error que lista las versiones disponibles.

96 

97La versión semver de la etiqueta resuelta se registra por separado del `version` de `plugin.json`, por lo que las verificaciones de restricción utilizan la etiqueta que se obtuvo realmente incluso si el `plugin.json` en ese commit tiene un valor obsoleto. El nombre del directorio de caché para una instalación resuelta por etiqueta incluye un sufijo SHA de commit de 12 caracteres, por lo que si un mantenedor mueve forzadamente una etiqueta a un commit diferente, la siguiente instalación obtiene un directorio de caché nuevo en lugar de reutilizar contenido obsoleto.

98 

99<Note>

100 Para fuentes de marketplace `npm`, la restricción no controla qué versión se obtiene, ya que la resolución basada en etiquetas se aplica solo a fuentes respaldadas por git. La restricción aún se verifica en tiempo de carga, y el plugin dependiente se deshabilita con `dependency-version-unsatisfied` si la versión instalada no la satisface.

101</Note>

102 

103## Cómo interactúan las restricciones

104 

105Cuando varios plugins instalados restringen la misma dependencia, Claude Code intersecta sus rangos y resuelve la dependencia a la versión más alta que satisface todos ellos. La tabla a continuación muestra cómo se resuelven las combinaciones comunes.

106 

107| Plugin A requiere | Plugin B requiere | Resultado |

108| :---------------- | :---------------- | :------------------------------------------------------------------------------------------------------------------------------- |

109| `^2.0` | `>=2.1` | Una instalación en la etiqueta `2.x` más alta en o por encima de `2.1.0`. Ambos plugins se cargan. |

110| `~2.1` | `~3.0` | La instalación del plugin B falla con `range-conflict`. El plugin A y la dependencia permanecen como estaban. |

111| `=2.1.0` | ninguno | La dependencia permanece en `2.1.0`. La actualización automática omite versiones más nuevas mientras el plugin A está instalado. |

112 

113La actualización automática obtiene una dependencia restringida en la etiqueta git más alta que satisface el rango de cada plugin instalado, en lugar de obtenerla en la versión más reciente del marketplace, por lo que la dependencia continúa recibiendo actualizaciones dentro de su rango permitido. Si ninguna etiqueta satisface todos los rangos, la actualización se omite y la omisión aparece en `/doctor` y en la pestaña Errores de `/plugin`, nombrando el plugin que la restringe.

114 

115Cuando desinstala el último plugin que restringe una dependencia, la dependencia ya no se mantiene y reanuda el seguimiento de su entrada de marketplace en la próxima actualización.

116 

117## Eliminar dependencias auto-instaladas huérfanas

118 

119Las dependencias auto-instaladas permanecen en el disco después de que se desinstalan los plugins que las instalaron, en caso de que desee reinstalar un plugin dependiente o desee seguir usando la dependencia directamente. Para limpiarlas, ejecute `claude plugin prune` para listar las dependencias auto-instaladas que ya no tienen ningún plugin instalado que las requiera y eliminarlas después de un mensaje de confirmación. Esto requiere Claude Code v2.1.121 o posterior.

120 

121```bash theme={null}

122claude plugin prune

123```

124 

125De forma predeterminada, prune opera en el ámbito del usuario. Use `--scope project` o `--scope local` para dirigirse a un ámbito diferente. Pase `--dry-run` para listar qué se eliminaría sin cambiar nada. Pase `-y` para omitir el mensaje de confirmación. Cuando stdin o stdout no es una terminal, prune lista los huérfanos y sale sin eliminarlos a menos que se pase `-y`.

126 

127Para prune como parte de una desinstalación, pase `--prune` a `claude plugin uninstall`. Después de eliminar el plugin nombrado, Claude Code escanea y elimina cualquier dependencia auto-instalada que ahora esté huérfana. Los plugins que instaló usted mismo nunca se podan, solo los instalados automáticamente a través del array `dependencies` de otro plugin.

128 

129Por ejemplo, para desinstalar `deploy-kit` y limpiar las dependencias que deja atrás:

130 

131```bash theme={null}

132claude plugin uninstall deploy-kit --prune

133```

134 

135## Resolver errores de dependencia

136 

137Los problemas de dependencia aparecen en `claude plugin list`, en la interfaz `/plugin`, y en `/doctor`. El plugin afectado se deshabilita hasta que resuelva el error. Los errores más comunes y sus soluciones se enumeran a continuación.

138 

139| Error | Significado | Cómo resolver |

140| :------------------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

141| `dependency-unsatisfied` | Una dependencia declarada no está instalada, o está instalada pero deshabilitada. | Ejecute el comando `claude plugin install` que se muestra en el mensaje de error. Si el marketplace de la dependencia aún no está configurado, agréguelo con `claude plugin marketplace add` y Claude Code resuelve la dependencia automáticamente. Si la dependencia está deshabilitada, habilítela. |

142| `range-conflict` | Los requisitos de versión para una dependencia no se pueden combinar. El mensaje de error nombra la causa: ninguna versión satisface todos los rangos, un rango no es una sintaxis semver válida, o los rangos combinados son demasiado complejos para intersectar. | Desinstale o actualice uno de los plugins en conflicto, corrija cualquier cadena `version` inválida, simplifique cadenas `\|\|` largas, o pida al autor ascendente que amplíe su restricción. |

143| `dependency-version-unsatisfied` | La versión de la dependencia instalada está fuera del rango declarado de este plugin. | Ejecute `claude plugin install <dependency>@<marketplace>` para re-resolver la dependencia contra todas las restricciones actuales. |

144| `no-matching-tag` | El repositorio de la dependencia no tiene una etiqueta `{name}--v*` que satisfaga el rango. | Verifique que el ascendente haya etiquetado lanzamientos usando la convención anterior, o relaje su rango. |

145 

146Para verificar estos errores mediante programación, ejecute `claude plugin list --json` y lea el campo `errors` en cada plugin.

147 

148## Ver también

149 

150* [Crear plugins](/es/plugins): construir plugins con skills, agentes y hooks

151* [Crear y distribuir un marketplace de plugins](/es/plugin-marketplaces): alojar plugins para su equipo

152* [Referencia de Plugins](/es/plugins-reference#plugin-manifest-schema): el esquema completo de `plugin.json`

153* [Gestión de versiones](/es/plugins-reference#version-management): cómo se resuelve la versión propia de un plugin y se utiliza como clave de caché

plugin-marketplaces.md +1055 −0 created

Details

1> ## Documentation Index

2> Fetch the complete documentation index at: https://code.claude.com/docs/llms.txt

3> Use this file to discover all available pages before exploring further.

4 

5# Crear y distribuir un marketplace de plugins

6 

7> Cree y aloje marketplaces de plugins para distribuir extensiones de Claude Code en equipos y comunidades.

8 

9Un **marketplace de plugins** es un catálogo que le permite distribuir plugins a otros. Los marketplaces proporcionan descubrimiento centralizado, seguimiento de versiones, actualizaciones automáticas y soporte para múltiples tipos de fuentes (repositorios git, rutas locales y más). Esta guía le muestra cómo crear su propio marketplace para compartir plugins con su equipo o comunidad.

10 

11¿Busca instalar plugins desde un marketplace existente? Consulte [Descubrir e instalar plugins precompilados](/es/discover-plugins).

12 

13## Descripción general

14 

15Crear y distribuir un marketplace implica:

16 

171. **Crear plugins**: construya uno o más plugins con skills, agentes, hooks, servidores MCP o servidores LSP. Esta guía asume que ya tiene plugins para distribuir; consulte [Crear plugins](/es/plugins) para obtener detalles sobre cómo crearlos.

182. **Crear un archivo de marketplace**: defina un `marketplace.json` que enumere sus plugins y dónde encontrarlos (consulte [Crear el archivo de marketplace](#create-the-marketplace-file)).

193. **Alojar el marketplace**: envíe a GitHub, GitLab u otro host git (consulte [Alojar y distribuir marketplaces](#host-and-distribute-marketplaces)).

204. **Compartir con usuarios**: los usuarios agregan su marketplace con `/plugin marketplace add` e instalan plugins individuales (consulte [Descubrir e instalar plugins](/es/discover-plugins)).

21 

22Una vez que su marketplace esté activo, puede actualizarlo enviando cambios a su repositorio. Los usuarios actualizan su copia local con `/plugin marketplace update`.

23 

24## Tutorial: crear un marketplace local

25 

26Este ejemplo crea un marketplace con un plugin: una skill `/quality-review` para revisiones de código. Creará la estructura de directorios, agregará una skill, creará el manifiesto del plugin y el catálogo del marketplace, luego lo instalará y probará.

27 

28<Steps>

29 <Step title="Crear la estructura de directorios">

30 ```bash theme={null}

31 mkdir -p my-marketplace/.claude-plugin

32 mkdir -p my-marketplace/plugins/quality-review-plugin/.claude-plugin

33 mkdir -p my-marketplace/plugins/quality-review-plugin/skills/quality-review

34 ```

35 </Step>

36 

37 <Step title="Crear la skill">

38 Cree un archivo `SKILL.md` que defina qué hace la skill `/quality-review`.

39 

40 ```markdown my-marketplace/plugins/quality-review-plugin/skills/quality-review/SKILL.md theme={null}

41 ---

42 description: Review code for bugs, security, and performance

43 disable-model-invocation: true

44 ---

45 

46 Review the code I've selected or the recent changes for:

47 - Potential bugs or edge cases

48 - Security concerns

49 - Performance issues

50 - Readability improvements

51 

52 Be concise and actionable.

53 ```

54 </Step>

55 

56 <Step title="Crear el manifiesto del plugin">

57 Cree un archivo `plugin.json` que describa el plugin. El manifiesto va en el directorio `.claude-plugin/`.

58 

59 ```json my-marketplace/plugins/quality-review-plugin/.claude-plugin/plugin.json theme={null}

60 {

61 "name": "quality-review-plugin",

62 "description": "Adds a /quality-review skill for quick code reviews",

63 "version": "1.0.0"

64 }

65 ```

66 

67 <Note>

68 Establecer `version` significa que los usuarios solo reciben actualizaciones cuando cambia este campo, así que incremente la versión en cada lanzamiento. Si omite `version` y aloja este marketplace en git, cada commit cuenta automáticamente como una nueva versión. Consulte [Resolución de versiones](#version-resolution-and-release-channels) para elegir el enfoque correcto.

69 </Note>

70 </Step>

71 

72 <Step title="Crear el archivo de marketplace">

73 Cree el catálogo de marketplace que enumera su plugin.

74 

75 ```json my-marketplace/.claude-plugin/marketplace.json theme={null}

76 {

77 "name": "my-plugins",

78 "owner": {

79 "name": "Your Name"

80 },

81 "plugins": [

82 {

83 "name": "quality-review-plugin",

84 "source": "./plugins/quality-review-plugin",

85 "description": "Adds a /quality-review skill for quick code reviews"

86 }

87 ]

88 }

89 ```

90 </Step>

91 

92 <Step title="Agregar e instalar">

93 Agregue el marketplace e instale el plugin.

94 

95 ```shell theme={null}

96 /plugin marketplace add ./my-marketplace

97 /plugin install quality-review-plugin@my-plugins

98 ```

99 </Step>

100 

101 <Step title="Pruébelo">

102 Seleccione algo de código en su editor y ejecute su nueva skill.

103 

104 ```shell theme={null}

105 /quality-review

106 ```

107 </Step>

108</Steps>

109 

110Para obtener más información sobre lo que los plugins pueden hacer, incluidos hooks, agentes, servidores MCP y servidores LSP, consulte [Plugins](/es/plugins).

111 

112<Note>

113 **Cómo se instalan los plugins**: Cuando los usuarios instalan un plugin, Claude Code copia el directorio del plugin a una ubicación de caché. Esto significa que los plugins no pueden hacer referencia a archivos fuera de su directorio usando rutas como `../shared-utils`, porque esos archivos no se copiarán.

114 

115 Si necesita compartir archivos entre plugins, use enlaces simbólicos. Consulte [Plugin caching and file resolution](/es/plugins-reference#plugin-caching-and-file-resolution) para obtener detalles.

116</Note>

117 

118## Crear el archivo de marketplace

119 

120Cree `.claude-plugin/marketplace.json` en la raíz de su repositorio. Este archivo define el nombre de su marketplace, información del propietario y una lista de plugins con sus fuentes.

121 

122Cada entrada de plugin necesita como mínimo un `name` y `source` (dónde obtenerlo). Consulte el [esquema completo](#marketplace-schema) a continuación para todos los campos disponibles.

123 

124```json theme={null}

125{

126 "name": "company-tools",

127 "owner": {

128 "name": "DevTools Team",

129 "email": "devtools@example.com"

130 },

131 "plugins": [

132 {

133 "name": "code-formatter",

134 "source": "./plugins/formatter",

135 "description": "Automatic code formatting on save",

136 "version": "2.1.0",

137 "author": {

138 "name": "DevTools Team"

139 }

140 },

141 {

142 "name": "deployment-tools",

143 "source": {

144 "source": "github",

145 "repo": "company/deploy-plugin"

146 },

147 "description": "Deployment automation tools"

148 }

149 ]

150}

151```

152 

153## Esquema de marketplace

154 

155### Campos requeridos

156 

157| Campo | Tipo | Descripción | Ejemplo |

158| :-------- | :----- | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :----------------- |

159| `name` | string | Identificador de marketplace (kebab-case, sin espacios). Esto es público: los usuarios lo ven al instalar plugins (por ejemplo, `/plugin install my-tool@your-marketplace`). | `"acme-tools"` |

160| `owner` | object | Información del mantenedor del marketplace ([consulte los campos a continuación](#owner-fields)) | |

161| `plugins` | array | Lista de plugins disponibles | Ver a continuación |

162 

163<Note>

164 **Nombres reservados**: Los siguientes nombres de marketplace están reservados para uso oficial de Anthropic y no pueden ser utilizados por marketplaces de terceros: `claude-code-marketplace`, `claude-code-plugins`, `claude-plugins-official`, `anthropic-marketplace`, `anthropic-plugins`, `agent-skills`, `knowledge-work-plugins`, `life-sciences`. Los nombres que se hacen pasar por marketplaces oficiales (como `official-claude-plugins` o `anthropic-tools-v2`) también están bloqueados.

165</Note>

166 

167### Campos del propietario

168 

169| Campo | Tipo | Requerido | Descripción |

170| :------ | :----- | :-------- | :-------------------------------------------- |

171| `name` | string | Sí | Nombre del mantenedor o equipo |

172| `email` | string | No | Correo electrónico de contacto del mantenedor |

173 

174### Campos opcionales

175 

176| Campo | Tipo | Descripción |

177| :------------------------------------ | :----- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |

178| `$schema` | string | URL del esquema JSON para autocompletado y validación del editor. Claude Code ignora este campo al cargar. |

179| `description` | string | Descripción breve del marketplace |

180| `version` | string | Versión del manifiesto del marketplace |

181| `metadata.pluginRoot` | string | Directorio base antepuesto a rutas de fuente de plugin relativas (por ejemplo, `"./plugins"` le permite escribir `"source": "formatter"` en lugar de `"source": "./plugins/formatter"`) |

182| `allowCrossMarketplaceDependenciesOn` | array | Otros marketplaces en los que los plugins en este marketplace pueden depender. Las dependencias de un marketplace no listado aquí se bloquean en la instalación. Consulte [Depender de un plugin de otro marketplace](/es/plugin-dependencies#depend-on-a-plugin-from-another-marketplace). |

183 

184`description` y `version` también se aceptan bajo `metadata` para compatibilidad con versiones anteriores.

185 

186## Entradas de plugins

187 

188Cada entrada de plugin en el array `plugins` describe un plugin y dónde encontrarlo. Puede incluir cualquier campo del [esquema de manifiesto de plugin](/es/plugins-reference#plugin-manifest-schema) (como `description`, `version`, `author`, `commands`, `hooks`, etc.), más estos campos específicos del marketplace: `source`, `category`, `tags` y `strict`.

189 

190### Campos requeridos

191 

192| Campo | Tipo | Descripción |

193| :------- | :------------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------- |

194| `name` | string | Identificador de plugin (kebab-case, sin espacios). Esto es público: los usuarios lo ven al instalar (por ejemplo, `/plugin install my-plugin@marketplace`). |

195| `source` | string\|object | Dónde obtener el plugin (consulte [Fuentes de plugins](#plugin-sources) a continuación) |

196 

197### Campos de plugin opcionales

198 

199**Campos de metadatos estándar:**

200 

201| Campo | Tipo | Descripción |

202| :------------ | :------ | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |

203| `description` | string | Descripción breve del plugin |

204| `version` | string | Versión del plugin. Si se establece (aquí o en `plugin.json`), el plugin se fija a esta cadena y los usuarios solo reciben actualizaciones cuando cambia. Omita para recurrir al SHA del commit de git. Consulte [Resolución de versiones](#version-resolution-and-release-channels). |

205| `author` | object | Información del autor del plugin (`name` requerido, `email` opcional) |

206| `homepage` | string | URL de página de inicio o documentación del plugin |

207| `repository` | string | URL del repositorio de código fuente |

208| `license` | string | Identificador de licencia SPDX (por ejemplo, MIT, Apache-2.0) |

209| `keywords` | array | Etiquetas para descubrimiento y categorización de plugins |

210| `category` | string | Categoría del plugin para organización |

211| `tags` | array | Etiquetas para búsqueda |

212| `strict` | boolean | Controla si `plugin.json` es la autoridad para definiciones de componentes (predeterminado: true). Consulte [Modo estricto](#strict-mode) a continuación. |

213 

214**Campos de configuración de componentes:**

215 

216| Campo | Tipo | Descripción |

217| :----------- | :------------- | :--------------------------------------------------------------------------- |

218| `skills` | string\|array | Rutas personalizadas a directorios de skills que contienen `<name>/SKILL.md` |

219| `commands` | string\|array | Rutas personalizadas a archivos de skills planos o directorios |

220| `agents` | string\|array | Rutas personalizadas a archivos de agentes |

221| `hooks` | string\|object | Configuración de hooks personalizada o ruta a archivo de hooks |

222| `mcpServers` | string\|object | Configuraciones de servidor MCP o ruta a configuración de MCP |

223| `lspServers` | string\|object | Configuraciones de servidor LSP o ruta a configuración de LSP |

224 

225## Fuentes de plugins

226 

227Las fuentes de plugins le indican a Claude Code dónde obtener cada plugin individual listado en su marketplace. Estos se establecen en el campo `source` de cada entrada de plugin en `marketplace.json`.

228 

229Una vez que un plugin se clona o copia en la máquina local, se copia en el caché de plugins versionado local en `~/.claude/plugins/cache`.

230 

231| Fuente | Tipo | Campos | Notas |

232| ------------- | --------------------------------- | ---------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------ |

233| Ruta relativa | `string` (p. ej. `"./my-plugin"`) | ninguno | Directorio local dentro del repositorio de marketplace. Debe comenzar con `./`. Se resuelve relativo a la raíz del marketplace, no al directorio `.claude-plugin/` |

234| `github` | object | `repo`, `ref?`, `sha?` | |

235| `url` | object | `url`, `ref?`, `sha?` | Fuente de URL de Git |

236| `git-subdir` | object | `url`, `path`, `ref?`, `sha?` | Subdirectorio dentro de un repositorio git. Clona escasamente para minimizar el ancho de banda para monorepos |

237| `npm` | object | `package`, `version?`, `registry?` | Instalado vía `npm install` |

238 

239<Note>

240 **Fuentes de marketplace vs fuentes de plugins**: Estos son conceptos diferentes que controlan cosas diferentes.

241 

242 * **Fuente de marketplace** — dónde obtener el catálogo `marketplace.json` en sí. Se establece cuando los usuarios ejecutan `/plugin marketplace add` o en la configuración `extraKnownMarketplaces`. Soporta `ref` (rama/etiqueta) pero no `sha`.

243 * **Fuente de plugin** — dónde obtener un plugin individual listado en el marketplace. Se establece en el campo `source` de cada entrada de plugin dentro de `marketplace.json`. Soporta tanto `ref` (rama/etiqueta) como `sha` (commit exacto).

244 

245 Por ejemplo, un marketplace alojado en `acme-corp/plugin-catalog` (fuente de marketplace) puede listar un plugin obtenido de `acme-corp/code-formatter` (fuente de plugin). La fuente de marketplace y la fuente de plugin apuntan a diferentes repositorios y se fijan independientemente.

246</Note>

247 

248### Rutas relativas

249 

250Para plugins en el mismo repositorio, use una ruta que comience con `./`:

251 

252```json theme={null}

253{

254 "name": "my-plugin",

255 "source": "./plugins/my-plugin"

256}

257```

258 

259Las rutas se resuelven relativas a la raíz del marketplace, que es el directorio que contiene `.claude-plugin/`. En el ejemplo anterior, `./plugins/my-plugin` apunta a `<repo>/plugins/my-plugin`, aunque `marketplace.json` vive en `<repo>/.claude-plugin/marketplace.json`. No use `../` para hacer referencia a rutas fuera de la raíz del marketplace.

260 

261<Note>

262 Las rutas relativas solo funcionan cuando los usuarios agregan su marketplace a través de Git (GitHub, GitLab o URL de git). Si los usuarios agregan su marketplace a través de una URL directa al archivo `marketplace.json`, las rutas relativas no se resolverán correctamente. Para distribución basada en URL, use fuentes de GitHub, npm o URL de git en su lugar. Consulte [Solución de problemas](#plugins-with-relative-paths-fail-in-url-based-marketplaces) para obtener detalles.

263</Note>

264 

265### Repositorios de GitHub

266 

267```json theme={null}

268{

269 "name": "github-plugin",

270 "source": {

271 "source": "github",

272 "repo": "owner/plugin-repo"

273 }

274}

275```

276 

277Puede fijar a una rama, etiqueta o commit específico:

278 

279```json theme={null}

280{

281 "name": "github-plugin",

282 "source": {

283 "source": "github",

284 "repo": "owner/plugin-repo",

285 "ref": "v2.0.0",

286 "sha": "a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0"

287 }

288}

289```

290 

291| Campo | Tipo | Descripción |

292| :----- | :----- | :--------------------------------------------------------------------------------------- |

293| `repo` | string | Requerido. Repositorio de GitHub en formato `owner/repo` |

294| `ref` | string | Opcional. Rama o etiqueta de Git (por defecto es la rama predeterminada del repositorio) |

295| `sha` | string | Opcional. SHA de commit de git completo de 40 caracteres para fijar a una versión exacta |

296 

297### Repositorios de Git

298 

299```json theme={null}

300{

301 "name": "git-plugin",

302 "source": {

303 "source": "url",

304 "url": "https://gitlab.com/team/plugin.git"

305 }

306}

307```

308 

309Puede fijar a una rama, etiqueta o commit específico:

310 

311```json theme={null}

312{

313 "name": "git-plugin",

314 "source": {

315 "source": "url",

316 "url": "https://gitlab.com/team/plugin.git",

317 "ref": "main",

318 "sha": "a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0"

319 }

320}

321```

322 

323| Campo | Tipo | Descripción |

324| :---- | :----- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

325| `url` | string | Requerido. URL completa del repositorio de git (`https://` o `git@`). El sufijo `.git` es opcional, por lo que las URLs de Azure DevOps y AWS CodeCommit sin el sufijo funcionan |

326| `ref` | string | Opcional. Rama o etiqueta de Git (por defecto es la rama predeterminada del repositorio) |

327| `sha` | string | Opcional. SHA de commit de git completo de 40 caracteres para fijar a una versión exacta |

328 

329### Subdirectorios de Git

330 

331Use `git-subdir` para apuntar a un plugin que vive dentro de un subdirectorio de un repositorio de git. Claude Code usa un clon parcial y escaso para obtener solo el subdirectorio, minimizando el ancho de banda para monorepos grandes.

332 

333```json theme={null}

334{

335 "name": "my-plugin",

336 "source": {

337 "source": "git-subdir",

338 "url": "https://github.com/acme-corp/monorepo.git",

339 "path": "tools/claude-plugin"

340 }

341}

342```

343 

344Puede fijar a una rama, etiqueta o commit específico:

345 

346```json theme={null}

347{

348 "name": "my-plugin",

349 "source": {

350 "source": "git-subdir",

351 "url": "https://github.com/acme-corp/monorepo.git",

352 "path": "tools/claude-plugin",

353 "ref": "v2.0.0",

354 "sha": "a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0"

355 }

356}

357```

358 

359El campo `url` también acepta una abreviatura de GitHub (`owner/repo`) o URLs SSH (`git@github.com:owner/repo.git`).

360 

361| Campo | Tipo | Descripción |

362| :----- | :----- | :--------------------------------------------------------------------------------------------------------------------- |

363| `url` | string | Requerido. URL del repositorio de Git, abreviatura de GitHub `owner/repo` o URL SSH |

364| `path` | string | Requerido. Ruta del subdirectorio dentro del repositorio que contiene el plugin (por ejemplo, `"tools/claude-plugin"`) |

365| `ref` | string | Opcional. Rama o etiqueta de Git (por defecto es la rama predeterminada del repositorio) |

366| `sha` | string | Opcional. SHA de commit de git completo de 40 caracteres para fijar a una versión exacta |

367 

368### Paquetes npm

369 

370Los plugins distribuidos como paquetes npm se instalan usando `npm install`. Esto funciona con cualquier paquete en el registro npm público o un registro privado que su equipo aloje.

371 

372```json theme={null}

373{

374 "name": "my-npm-plugin",

375 "source": {

376 "source": "npm",

377 "package": "@acme/claude-plugin"

378 }

379}

380```

381 

382Para fijar a una versión específica, agregue el campo `version`:

383 

384```json theme={null}

385{

386 "name": "my-npm-plugin",

387 "source": {

388 "source": "npm",

389 "package": "@acme/claude-plugin",

390 "version": "2.1.0"

391 }

392}

393```

394 

395Para instalar desde un registro privado o interno, agregue el campo `registry`:

396 

397```json theme={null}

398{

399 "name": "my-npm-plugin",

400 "source": {

401 "source": "npm",

402 "package": "@acme/claude-plugin",

403 "version": "^2.0.0",

404 "registry": "https://npm.example.com"

405 }

406}

407```

408 

409| Campo | Tipo | Descripción |

410| :--------- | :----- | :-------------------------------------------------------------------------------------------------------------- |

411| `package` | string | Requerido. Nombre del paquete o paquete con alcance (por ejemplo, `@org/plugin`) |

412| `version` | string | Opcional. Versión o rango de versión (por ejemplo, `2.1.0`, `^2.0.0`, `~1.5.0`) |

413| `registry` | string | Opcional. URL de registro npm personalizado. Por defecto es el registro npm del sistema (típicamente npmjs.org) |

414 

415### Entradas de plugins avanzadas

416 

417Este ejemplo muestra una entrada de plugin usando muchos de los campos opcionales, incluidas rutas personalizadas para skills, agentes, hooks y servidores MCP:

418 

419```json theme={null}

420{

421 "name": "enterprise-tools",

422 "source": {

423 "source": "github",

424 "repo": "company/enterprise-plugin"

425 },

426 "description": "Enterprise workflow automation tools",

427 "version": "2.1.0",

428 "author": {

429 "name": "Enterprise Team",

430 "email": "enterprise@example.com"

431 },

432 "homepage": "https://docs.example.com/plugins/enterprise-tools",

433 "repository": "https://github.com/company/enterprise-plugin",

434 "license": "MIT",

435 "keywords": ["enterprise", "workflow", "automation"],

436 "category": "productivity",

437 "skills": ["./skills/core/", "./skills/enterprise/"],

438 "commands": [

439 "./commands/core/",

440 "./commands/enterprise/",

441 "./commands/experimental/preview.md"

442 ],

443 "agents": ["./agents/security-reviewer.md", "./agents/compliance-checker.md"],

444 "hooks": {

445 "PostToolUse": [

446 {

447 "matcher": "Write|Edit",

448 "hooks": [

449 {

450 "type": "command",

451 "command": "${CLAUDE_PLUGIN_ROOT}/scripts/validate.sh"

452 }

453 ]

454 }

455 ]

456 },

457 "mcpServers": {

458 "enterprise-db": {

459 "command": "${CLAUDE_PLUGIN_ROOT}/servers/db-server",

460 "args": ["--config", "${CLAUDE_PLUGIN_ROOT}/config.json"]

461 }

462 },

463 "strict": false

464}

465```

466 

467Cosas clave a notar:

468 

469* **`skills`, `commands` y `agents`**: Puede especificar múltiples directorios o archivos individuales. Las rutas son relativas a la raíz del plugin.

470* **`${CLAUDE_PLUGIN_ROOT}`**: Use esta variable en hooks y configuraciones de MCP server para hacer referencia a archivos dentro del directorio de instalación del plugin. Esto es necesario porque los plugins se copian a una ubicación de caché cuando se instalan. Para dependencias o estado que deben sobrevivir a las actualizaciones de plugins, use [`${CLAUDE_PLUGIN_DATA}`](/es/plugins-reference#persistent-data-directory) en su lugar.

471* **`strict: false`**: Dado que esto se establece en false, el plugin no necesita su propio `plugin.json`. La entrada del marketplace define todo. Consulte [Modo estricto](#strict-mode) a continuación.

472 

473### Modo estricto

474 

475El campo `strict` controla si `plugin.json` es la autoridad para definiciones de componentes (skills, agentes, hooks, servidores MCP, estilos de salida).

476 

477| Valor | Comportamiento |

478| :---------------------- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

479| `true` (predeterminado) | `plugin.json` es la autoridad. La entrada del marketplace puede complementarla con componentes adicionales, y ambas fuentes se fusionan. |

480| `false` | La entrada del marketplace es la definición completa. Si el plugin también tiene un `plugin.json` que declara componentes, eso es un conflicto y el plugin falla al cargar. |

481 

482**Cuándo usar cada modo:**

483 

484* **`strict: true`**: el plugin tiene su propio `plugin.json` y gestiona sus propios componentes. La entrada del marketplace puede agregar skills o hooks adicionales encima. Este es el predeterminado y funciona para la mayoría de los plugins.

485* **`strict: false`**: el operador del marketplace quiere control total. El repositorio del plugin proporciona archivos sin procesar, y la entrada del marketplace define cuáles de esos archivos se exponen como skills, agentes, hooks, etc. Útil cuando el marketplace reestructura o cura los componentes de un plugin de manera diferente a la que el autor del plugin pretendía.

486 

487## Alojar y distribuir marketplaces

488 

489### Alojar en GitHub (recomendado)

490 

491GitHub proporciona el método de distribución más fácil:

492 

4931. **Crear un repositorio**: Configure un nuevo repositorio para su marketplace

4942. **Agregar archivo de marketplace**: Cree `.claude-plugin/marketplace.json` con sus definiciones de plugins

4953. **Compartir con equipos**: Los usuarios agregan su marketplace con `/plugin marketplace add owner/repo`

496 

497**Beneficios**: Control de versiones integrado, seguimiento de problemas y características de colaboración en equipo.

498 

499### Alojar en otros servicios de git

500 

501Cualquier servicio de alojamiento de git funciona, como GitLab, Bitbucket y servidores autohospedados. Los usuarios agregan con la URL completa del repositorio:

502 

503```shell theme={null}

504/plugin marketplace add https://gitlab.com/company/plugins.git

505```

506 

507### Repositorios privados

508 

509Claude Code soporta instalar plugins desde repositorios privados. Para instalación manual y actualizaciones, Claude Code usa sus ayudantes de credenciales de git existentes, por lo que el acceso HTTPS a través de `gh auth login`, Keychain de macOS o `git-credential-store` funciona igual que en su terminal. El acceso SSH funciona siempre que el host ya esté en su archivo `known_hosts` y la clave esté cargada en `ssh-agent`, ya que Claude Code suprime los mensajes interactivos de SSH para la huella digital del host y la contraseña de la clave.

510 

511Las actualizaciones automáticas en segundo plano se ejecutan al inicio sin ayudantes de credenciales, ya que los mensajes interactivos bloquearían que Claude Code se inicie. Para habilitar actualizaciones automáticas para marketplaces privados, establezca el token de autenticación apropiado en su entorno:

512 

513| Proveedor | Variables de entorno | Notas |

514| :-------- | :-------------------------- | :-------------------------------------------------------- |

515| GitHub | `GITHUB_TOKEN` o `GH_TOKEN` | Token de acceso personal o token de GitHub App |

516| GitLab | `GITLAB_TOKEN` o `GL_TOKEN` | Token de acceso personal o token de proyecto |

517| Bitbucket | `BITBUCKET_TOKEN` | Contraseña de aplicación o token de acceso al repositorio |

518 

519Establezca el token en su configuración de shell (por ejemplo, `.bashrc`, `.zshrc`) o páselo al ejecutar Claude Code:

520 

521```bash theme={null}

522export GITHUB_TOKEN=ghp_xxxxxxxxxxxxxxxxxxxx

523```

524 

525<Note>

526 Para entornos de CI/CD, configure el token como una variable de entorno secreta. GitHub Actions proporciona automáticamente `GITHUB_TOKEN` para repositorios en la misma organización.

527</Note>

528 

529### Probar localmente antes de la distribución

530 

531Pruebe su marketplace localmente antes de compartirlo:

532 

533```shell theme={null}

534/plugin marketplace add ./my-local-marketplace

535/plugin install test-plugin@my-local-marketplace

536```

537 

538Para el rango completo de comandos add (GitHub, URLs de Git, rutas locales, URLs remotas), consulte [Agregar marketplaces](/es/discover-plugins#add-marketplaces).

539 

540### Requerir marketplaces para su equipo

541 

542Puede configurar su repositorio para que los miembros del equipo sean automáticamente solicitados para instalar su marketplace cuando confíen en la carpeta del proyecto. Agregue su marketplace a `.claude/settings.json`:

543 

544```json theme={null}

545{

546 "extraKnownMarketplaces": {

547 "company-tools": {

548 "source": {

549 "source": "github",

550 "repo": "your-org/claude-plugins"

551 }

552 }

553 }

554}

555```

556 

557También puede especificar qué plugins deben estar habilitados de forma predeterminada:

558 

559```json theme={null}

560{

561 "enabledPlugins": {

562 "code-formatter@company-tools": true,

563 "deployment-tools@company-tools": true

564 }

565}

566```

567 

568Para opciones de configuración completas, consulte [Configuración de plugins](/es/settings#plugin-settings).

569 

570<Note>

571 Si usa una fuente local `directory` o `file` con una ruta relativa, la ruta se resuelve contra el checkout principal de su repositorio. Cuando ejecuta Claude Code desde un git worktree, la ruta aún apunta al checkout principal, por lo que todos los worktrees comparten la misma ubicación de marketplace. El estado del marketplace se almacena una vez por usuario en `~/.claude/plugins/known_marketplaces.json`, no por proyecto.

572</Note>

573 

574### Precargar plugins para contenedores

575 

576Para imágenes de contenedor y entornos de CI, puede precargar un directorio de plugins en tiempo de compilación para que Claude Code comience con marketplaces y plugins ya disponibles, sin clonar nada en tiempo de ejecución. Establezca la variable de entorno `CLAUDE_CODE_PLUGIN_SEED_DIR` para apuntar a este directorio.

577 

578Para superponer múltiples directorios seed, separe las rutas con `:` en Unix o `;` en Windows. Claude Code busca cada directorio en orden, y el primer seed que contiene un marketplace o caché de plugin dado gana.

579 

580El directorio seed refleja la estructura de `~/.claude/plugins`:

581 

582```

583$CLAUDE_CODE_PLUGIN_SEED_DIR/

584 known_marketplaces.json

585 marketplaces/<name>/...

586 cache/<marketplace>/<plugin>/<version>/...

587```

588 

589Para construir un directorio seed, ejecute Claude Code una vez durante la compilación de la imagen, instale los plugins que necesita, luego copie el directorio `~/.claude/plugins` resultante en su imagen y apunte `CLAUDE_CODE_PLUGIN_SEED_DIR` a él.

590 

591Para omitir el paso de copia, establezca `CLAUDE_CODE_PLUGIN_CACHE_DIR` en su ruta de seed de destino durante la compilación para que los plugins se instalen directamente allí:

592 

593```bash theme={null}

594CLAUDE_CODE_PLUGIN_CACHE_DIR=/opt/claude-seed claude plugin marketplace add your-org/plugins

595CLAUDE_CODE_PLUGIN_CACHE_DIR=/opt/claude-seed claude plugin install my-tool@your-plugins

596```

597 

598Luego establezca `CLAUDE_CODE_PLUGIN_SEED_DIR=/opt/claude-seed` en el entorno de tiempo de ejecución de su contenedor para que Claude Code lea desde el seed al inicio.

599 

600Al inicio, Claude Code registra los marketplaces encontrados en el `known_marketplaces.json` del seed en la configuración principal, y usa cachés de plugins encontrados bajo `cache/` en su lugar sin re-clonar. Esto funciona tanto en modo interactivo como en modo no interactivo con la bandera `-p`.

601 

602Detalles de comportamiento:

603 

604* **Solo lectura**: el directorio seed nunca se escribe. Las actualizaciones automáticas están deshabilitadas para marketplaces seed ya que git pull fallaría en un sistema de archivos de solo lectura.

605* **Las entradas seed tienen precedencia**: los marketplaces declarados en el seed sobrescriben cualquier entrada coincidente en la configuración del usuario en cada inicio. Para optar por no participar en un plugin seed, use `/plugin disable` en lugar de eliminar el marketplace.

606* **Resolución de rutas**: Claude Code localiza contenido de marketplace sondeando `$CLAUDE_CODE_PLUGIN_SEED_DIR/marketplaces/<name>/` en tiempo de ejecución, no confiando en rutas almacenadas dentro del JSON del seed. Esto significa que el seed funciona correctamente incluso cuando se monta en una ruta diferente a donde fue construido.

607* **Se bloquea la mutación**: ejecutar `/plugin marketplace remove` o `/plugin marketplace update` contra un marketplace administrado por seed falla con orientación para pedir a su administrador que actualice la imagen seed.

608* **Se compone con configuración**: si `extraKnownMarketplaces` o `enabledPlugins` declaran un marketplace que ya existe en el seed, Claude Code usa la copia del seed en lugar de clonar.

609 

610### Restricciones de marketplace administrado

611 

612Para organizaciones que requieren control estricto sobre las fuentes de plugins, los administradores pueden restringir qué marketplaces de plugins se permite a los usuarios agregar usando la configuración [`strictKnownMarketplaces`](/es/settings#strictknownmarketplaces) en configuración administrada.

613 

614Cuando `strictKnownMarketplaces` se configura en configuración administrada, el comportamiento de restricción depende del valor:

615 

616| Valor | Comportamiento |

617| --------------------------- | -------------------------------------------------------------------------------------------------- |

618| Indefinido (predeterminado) | Sin restricciones. Los usuarios pueden agregar cualquier marketplace |

619| Array vacío `[]` | Bloqueo completo. Los usuarios no pueden agregar nuevos marketplaces |

620| Lista de fuentes | Los usuarios solo pueden agregar marketplaces que coincidan exactamente con la lista de permitidos |

621 

622#### Configuraciones comunes

623 

624Deshabilitar todas las adiciones de marketplace:

625 

626```json theme={null}

627{

628 "strictKnownMarketplaces": []

629}

630```

631 

632Permitir solo marketplaces específicos:

633 

634```json theme={null}

635{

636 "strictKnownMarketplaces": [

637 {

638 "source": "github",

639 "repo": "acme-corp/approved-plugins"

640 },

641 {

642 "source": "github",

643 "repo": "acme-corp/security-tools",

644 "ref": "v2.0"

645 },

646 {

647 "source": "url",

648 "url": "https://plugins.example.com/marketplace.json"

649 }

650 ]

651}

652```

653 

654Permitir todos los marketplaces desde un servidor git interno usando coincidencia de patrón regex en el host. Este es el enfoque recomendado para [GitHub Enterprise Server](/es/github-enterprise-server#plugin-marketplaces-on-ghes) o instancias de GitLab autohospedadas:

655 

656```json theme={null}

657{

658 "strictKnownMarketplaces": [

659 {

660 "source": "hostPattern",

661 "hostPattern": "^github\\.example\\.com$"

662 }

663 ]

664}

665```

666 

667Permitir marketplaces basados en sistema de archivos desde un directorio específico usando coincidencia de patrón regex en la ruta:

668 

669```json theme={null}

670{

671 "strictKnownMarketplaces": [

672 {

673 "source": "pathPattern",

674 "pathPattern": "^/opt/approved/"

675 }

676 ]

677}

678```

679 

680Use `".*"` como `pathPattern` para permitir cualquier ruta del sistema de archivos mientras aún controla fuentes de red con `hostPattern`.

681 

682<Note>

683 `strictKnownMarketplaces` restringe lo que los usuarios pueden agregar, pero no registra marketplaces por sí solo. Para hacer que los marketplaces permitidos estén disponibles automáticamente sin que los usuarios ejecuten `/plugin marketplace add`, emparéjelo con [`extraKnownMarketplaces`](/es/settings#extraknownmarketplaces) en el mismo `managed-settings.json`. Consulte [Usar ambos juntos](/es/settings#strictknownmarketplaces).

684</Note>

685 

686#### Cómo funcionan las restricciones

687 

688Las restricciones se validan antes de cualquier operación de red o del sistema de archivos. La verificación se ejecuta al agregar marketplace y al instalar, actualizar, actualizar y auto-actualizar plugins. Si un marketplace se agregó antes de que se configurara la política y su fuente ya no coincide con la lista de permitidos, Claude Code se niega a instalar o actualizar plugins desde él. La misma aplicación se aplica a `blockedMarketplaces`.

689 

690La lista de permitidos usa coincidencia exacta para la mayoría de tipos de fuente. Para que un marketplace sea permitido, todos los campos especificados deben coincidir exactamente:

691 

692* Para fuentes de GitHub: `repo` es requerido, y `ref` o `path` también deben coincidir si se especifican en la lista de permitidos

693* Para fuentes de URL: la URL completa debe coincidir exactamente

694* Para fuentes `hostPattern`: el host del marketplace se compara contra el patrón regex

695* Para fuentes `pathPattern`: la ruta del sistema de archivos del marketplace se compara contra el patrón regex

696 

697Debido a que `strictKnownMarketplaces` se establece en [configuración administrada](/es/settings#settings-files), los usuarios individuales y las configuraciones del proyecto no pueden anular estas restricciones.

698 

699Para detalles de configuración completos incluyendo todos los tipos de fuente soportados y comparación con `extraKnownMarketplaces`, consulte la [referencia de strictKnownMarketplaces](/es/settings#strictknownmarketplaces).

700 

701### Resolución de versiones y canales de lanzamiento

702 

703Las versiones de plugins determinan rutas de caché y detección de actualizaciones: si la versión resuelta coincide con lo que un usuario ya tiene, `/plugin update` y auto-actualización omiten el plugin.

704 

705Claude Code resuelve la versión de un plugin desde el primero de estos que esté establecido:

706 

7071. `version` en el `plugin.json` del plugin

7082. `version` en la entrada del marketplace del plugin

7093. El SHA del commit de git de la fuente del plugin

710 

711Para los tipos de fuente basados en git `github`, `url`, `git-subdir` y rutas relativas dentro de un marketplace alojado en git, puede omitir `version` completamente y cada nuevo commit se trata como una nueva versión. Esta es la configuración más simple para plugins internos o en desarrollo activo.

712 

713<Warning>

714 Establecer `version` fija el plugin. Si `plugin.json` declara `"version": "1.0.0"`, empujar nuevos commits sin cambiar esa cadena no hace nada para usuarios existentes, porque Claude Code ve la misma versión y mantiene la copia en caché. Aumente el campo en cada lanzamiento, u omítalo para usar el SHA del commit.

715 

716 Evite establecer `version` en ambos `plugin.json` y la entrada del marketplace. El valor de `plugin.json` siempre gana silenciosamente, por lo que una versión de manifiesto obsoleta puede enmascarar una versión que estableció en `marketplace.json`.

717</Warning>

718 

719#### Configurar canales de lanzamiento

720 

721Para soportar canales de lanzamiento "estable" y "último" para sus plugins, puede configurar dos marketplaces que apunten a diferentes refs o SHAs del mismo repositorio. Luego puede asignar los dos marketplaces a diferentes grupos de usuarios a través de [configuración administrada](/es/settings#settings-files).

722 

723<Warning>

724 Cada canal debe resolver a una versión diferente. Si usa versiones explícitas, `plugin.json` debe declarar una `version` diferente en cada ref fijado. Si omite `version`, los SHAs de commit distintos ya distinguen los canales. Si dos refs resuelven a la misma cadena de versión, Claude Code los trata como idénticos y omite la actualización.

725</Warning>

726 

727##### Ejemplo

728 

729```json theme={null}

730{

731 "name": "stable-tools",

732 "plugins": [

733 {

734 "name": "code-formatter",

735 "source": {

736 "source": "github",

737 "repo": "acme-corp/code-formatter",

738 "ref": "stable"

739 }

740 }

741 ]

742}

743```

744 

745```json theme={null}

746{

747 "name": "latest-tools",

748 "plugins": [

749 {

750 "name": "code-formatter",

751 "source": {

752 "source": "github",

753 "repo": "acme-corp/code-formatter",

754 "ref": "latest"

755 }

756 }

757 ]

758}

759```

760 

761##### Asignar canales a grupos de usuarios

762 

763Asigne cada marketplace al grupo de usuarios apropiado a través de configuración administrada. Por ejemplo, el grupo estable recibe:

764 

765```json theme={null}

766{

767 "extraKnownMarketplaces": {

768 "stable-tools": {

769 "source": {

770 "source": "github",

771 "repo": "acme-corp/stable-tools"

772 }

773 }

774 }

775}

776```

777 

778El grupo de acceso temprano recibe `latest-tools` en su lugar:

779 

780```json theme={null}

781{

782 "extraKnownMarketplaces": {

783 "latest-tools": {

784 "source": {

785 "source": "github",

786 "repo": "acme-corp/latest-tools"

787 }

788 }

789 }

790}

791```

792 

793#### Fijar versiones de dependencias

794 

795Un plugin puede restringir sus dependencias a un rango semver para que las actualizaciones de una dependencia no rompan el plugin dependiente. Consulte [Restringir versiones de dependencias de plugins](/es/plugin-dependencies) para la convención de etiqueta de git `{plugin-name}--v{version}`, sintaxis de rango y cómo se combinan múltiples restricciones en la misma dependencia.

796 

797## Validación y pruebas

798 

799Pruebe su marketplace antes de compartirlo.

800 

801Valide la sintaxis JSON de su marketplace:

802 

803```bash theme={null}

804claude plugin validate .

805```

806 

807O desde dentro de Claude Code:

808 

809```shell theme={null}

810/plugin validate .

811```

812 

813Agregue el marketplace para pruebas:

814 

815```shell theme={null}

816/plugin marketplace add ./path/to/marketplace

817```

818 

819Instale un plugin de prueba para verificar que todo funciona:

820 

821```shell theme={null}

822/plugin install test-plugin@marketplace-name

823```

824 

825Para flujos de trabajo completos de prueba de plugins, consulte [Pruebe sus plugins localmente](/es/plugins#test-your-plugins-locally). Para solución de problemas técnicos, consulte [Referencia de plugins](/es/plugins-reference).

826 

827## Administrar marketplaces desde la CLI

828 

829Claude Code proporciona subcomandos no interactivos `claude plugin marketplace` para scripting y automatización. Estos son equivalentes a los comandos `/plugin marketplace` disponibles dentro de una sesión interactiva.

830 

831### Plugin marketplace add

832 

833Agregue un marketplace desde un repositorio de GitHub, URL de git, URL remota o ruta local.

834 

835```bash theme={null}

836claude plugin marketplace add <source> [options]

837```

838 

839**Argumentos:**

840 

841* `<source>`: Abreviatura de GitHub `owner/repo`, URL de git, URL remota a un archivo `marketplace.json` o ruta de directorio local. Para fijar a una rama o etiqueta, agregue `@ref` a la abreviatura de GitHub o `#ref` a una URL de git

842 

843**Opciones:**

844 

845| Opción | Descripción | Predeterminado |

846| :-------------------- | :-------------------------------------------------------------------------------------------------------------------------------------------------- | :------------- |

847| `--scope <scope>` | Dónde declarar el marketplace: `user`, `project` o `local`. Consulte [Plugin installation scopes](/es/plugins-reference#plugin-installation-scopes) | `user` |

848| `--sparse <paths...>` | Limitar el checkout a directorios específicos a través de git sparse-checkout. Útil para monorepos | |

849 

850Agregue un marketplace desde GitHub usando la abreviatura `owner/repo`:

851 

852```bash theme={null}

853claude plugin marketplace add acme-corp/claude-plugins

854```

855 

856Fije a una rama o etiqueta específica con `@ref`:

857 

858```bash theme={null}

859claude plugin marketplace add acme-corp/claude-plugins@v2.0

860```

861 

862Agregue desde una URL de git en un host que no sea GitHub:

863 

864```bash theme={null}

865claude plugin marketplace add https://gitlab.example.com/team/plugins.git

866```

867 

868Agregue desde una URL remota que sirva el archivo `marketplace.json` directamente:

869 

870```bash theme={null}

871claude plugin marketplace add https://example.com/marketplace.json

872```

873 

874Agregue desde un directorio local para pruebas:

875 

876```bash theme={null}

877claude plugin marketplace add ./my-marketplace

878```

879 

880Declare el marketplace en alcance de proyecto para que se comparta con su equipo a través de `.claude/settings.json`:

881 

882```bash theme={null}

883claude plugin marketplace add acme-corp/claude-plugins --scope project

884```

885 

886Para un monorepo, limite el checkout a los directorios que contienen contenido de plugins:

887 

888```bash theme={null}

889claude plugin marketplace add acme-corp/monorepo --sparse .claude-plugin plugins

890```

891 

892### Plugin marketplace list

893 

894Enumere todos los marketplaces configurados.

895 

896```bash theme={null}

897claude plugin marketplace list [options]

898```

899 

900**Opciones:**

901 

902| Opción | Descripción |

903| :------- | :--------------- |

904| `--json` | Salida como JSON |

905 

906### Plugin marketplace remove

907 

908Elimine un marketplace configurado. El alias `rm` también se acepta.

909 

910```bash theme={null}

911claude plugin marketplace remove <name>

912```

913 

914**Argumentos:**

915 

916* `<name>`: nombre del marketplace a eliminar, como se muestra en `claude plugin marketplace list`. Este es el `name` de `marketplace.json`, no la fuente que pasó a `add`

917 

918<Warning>

919 Eliminar un marketplace también desinstala cualquier plugin que haya instalado desde él. Para actualizar un marketplace sin perder plugins instalados, use `claude plugin marketplace update` en su lugar.

920</Warning>

921 

922### Plugin marketplace update

923 

924Actualice marketplaces desde sus fuentes para recuperar nuevos plugins y cambios de versión.

925 

926```bash theme={null}

927claude plugin marketplace update [name]

928```

929 

930**Argumentos:**

931 

932* `[name]`: nombre del marketplace a actualizar, como se muestra en `claude plugin marketplace list`. Actualiza todos los marketplaces si se omite

933 

934Tanto `remove` como `update` fallan cuando se ejecutan contra un marketplace administrado por seed, que es de solo lectura. Al actualizar todos los marketplaces, las entradas administradas por seed se omiten y otros marketplaces aún se actualizan. Para cambiar plugins proporcionados por seed, pida a su administrador que actualice la imagen seed. Consulte [Precargar plugins para contenedores](#pre-populate-plugins-for-containers).

935 

936## Solución de problemas

937 

938### Marketplace no se carga

939 

940**Síntomas**: No puede agregar marketplace o ver plugins de él

941 

942**Soluciones**:

943 

944* Verifique que la URL del marketplace sea accesible

945* Compruebe que `.claude-plugin/marketplace.json` existe en la ruta especificada

946* Asegúrese de que la sintaxis JSON sea válida y el frontmatter esté bien formado usando `claude plugin validate` o `/plugin validate`

947* Para repositorios privados, confirme que tiene permisos de acceso

948 

949### Errores de validación de marketplace

950 

951Ejecute `claude plugin validate .` o `/plugin validate .` desde su directorio de marketplace para verificar problemas. El validador verifica `plugin.json`, frontmatter de skill/agente/comando y `hooks/hooks.json` para errores de sintaxis y esquema. Errores comunes:

952 

953| Error | Causa | Solución |

954| :------------------------------------------------ | :----------------------------------------------------- | :------------------------------------------------------------------------------------------------------------- |

955| `File not found: .claude-plugin/marketplace.json` | Manifiesto faltante | Cree `.claude-plugin/marketplace.json` con campos requeridos |

956| `Invalid JSON syntax: Unexpected token...` | Error de sintaxis JSON en marketplace.json | Verifique comas faltantes, comas extra o cadenas sin comillas |

957| `Duplicate plugin name "x" found in marketplace` | Dos plugins comparten el mismo nombre | Dé a cada plugin un valor `name` único |

958| `plugins[0].source: Path contains ".."` | La ruta de fuente contiene `..` | Use rutas relativas a la raíz del marketplace sin `..`. Consulte [Rutas relativas](#relative-paths) |

959| `YAML frontmatter failed to parse: ...` | YAML inválido en un archivo de skill, agente o comando | Corrija la sintaxis YAML en el bloque frontmatter. En tiempo de ejecución este archivo se carga sin metadatos. |

960| `Invalid JSON syntax: ...` (hooks.json) | `hooks/hooks.json` malformado | Corrija la sintaxis JSON. Un `hooks/hooks.json` malformado previene que todo el plugin se cargue. |

961 

962**Advertencias** (no bloqueantes):

963 

964* `Marketplace has no plugins defined`: agregue al menos un plugin al array `plugins`

965* `No marketplace description provided`: agregue una `description` de nivel superior para ayudar a los usuarios a entender su marketplace

966* `Plugin name "x" is not kebab-case`: el nombre del plugin contiene letras mayúsculas, espacios o caracteres especiales. Renombre a letras minúsculas, dígitos y guiones solamente (por ejemplo, `my-plugin`). Claude Code acepta otras formas, pero la sincronización del marketplace de Claude.ai las rechaza.

967 

968### Fallos de instalación de plugins

969 

970**Síntomas**: El marketplace aparece pero la instalación del plugin falla

971 

972**Soluciones**:

973 

974* Verifique que las URLs de fuente del plugin sean accesibles

975* Compruebe que los directorios de plugins contengan archivos requeridos

976* Para fuentes de GitHub, asegúrese de que los repositorios sean públicos o tenga acceso

977* Pruebe las fuentes de plugins manualmente clonando/descargando

978 

979### La autenticación del repositorio privado falla

980 

981**Síntomas**: Errores de autenticación al instalar plugins desde repositorios privados

982 

983**Soluciones**:

984 

985Para instalación manual y actualizaciones:

986 

987* Verifique que esté autenticado con su proveedor de git (por ejemplo, ejecute `gh auth status` para GitHub)

988* Compruebe que su ayudante de credenciales esté configurado correctamente: `git config --global credential.helper`

989* Intente clonar el repositorio manualmente para verificar que sus credenciales funcionan

990 

991Para actualizaciones automáticas en segundo plano:

992 

993* Establezca el token apropiado en su entorno: `echo $GITHUB_TOKEN`

994* Compruebe que el token tiene los permisos requeridos (acceso de lectura al repositorio)

995* Para GitHub, asegúrese de que el token tiene el alcance `repo` para repositorios privados

996* Para GitLab, asegúrese de que el token tiene al menos alcance `read_repository`

997* Verifique que el token no haya expirado

998 

999### Las actualizaciones del marketplace fallan en entornos sin conexión

1000 

1001**Síntomas**: El `git pull` del marketplace falla y Claude Code borra el caché existente, causando que los plugins se vuelvan no disponibles.

1002 

1003**Causa**: Por defecto, cuando un `git pull` falla, Claude Code elimina el clon obsoleto e intenta re-clonar. En entornos sin conexión o aislados, el re-clonado falla de la misma manera, dejando el directorio del marketplace vacío.

1004 

1005**Solución**: Establezca `CLAUDE_CODE_PLUGIN_KEEP_MARKETPLACE_ON_FAILURE=1` para mantener el caché existente cuando el pull falla en lugar de borrarlo:

1006 

1007```bash theme={null}

1008export CLAUDE_CODE_PLUGIN_KEEP_MARKETPLACE_ON_FAILURE=1

1009```

1010 

1011Con esta variable establecida, Claude Code retiene el clon obsoleto del marketplace en fallo de `git pull` y continúa usando el último estado conocido bueno. Para implementaciones completamente sin conexión donde el repositorio nunca será alcanzable, use [`CLAUDE_CODE_PLUGIN_SEED_DIR`](#pre-populate-plugins-for-containers) para precargar el directorio de plugins en tiempo de compilación en su lugar.

1012 

1013### Las operaciones de Git agotan el tiempo de espera

1014 

1015**Síntomas**: La instalación del plugin o las actualizaciones del marketplace fallan con un error de tiempo de espera como "Git clone timed out after 120s" o "Git pull timed out after 120s".

1016 

1017**Causa**: Claude Code usa un tiempo de espera de 120 segundos para todas las operaciones de git, incluida la clonación de repositorios de plugins y la extracción de actualizaciones de marketplace. Los repositorios grandes o las conexiones de red lentas pueden exceder este límite.

1018 

1019**Solución**: Aumente el tiempo de espera usando la variable de entorno `CLAUDE_CODE_PLUGIN_GIT_TIMEOUT_MS`. El valor está en milisegundos:

1020 

1021```bash theme={null}

1022export CLAUDE_CODE_PLUGIN_GIT_TIMEOUT_MS=300000 # 5 minutos

1023```

1024 

1025### Los plugins con rutas relativas fallan en marketplaces basados en URL

1026 

1027**Síntomas**: Agregó un marketplace a través de URL (como `https://example.com/marketplace.json`), pero los plugins con fuentes de ruta relativa como `"./plugins/my-plugin"` fallan al instalar con errores "path not found".

1028 

1029**Causa**: Los marketplaces basados en URL solo descargan el archivo `marketplace.json` en sí. No descargan archivos de plugins del servidor. Las rutas relativas en la entrada del marketplace hacen referencia a archivos en el servidor remoto que no fueron descargados.

1030 

1031**Soluciones**:

1032 

1033* **Use fuentes externas**: Cambie las entradas de plugins para usar fuentes de GitHub, npm o URL de git en lugar de rutas relativas:

1034 ```json theme={null}

1035 { "name": "my-plugin", "source": { "source": "github", "repo": "owner/repo" } }

1036 ```

1037* **Use un marketplace basado en Git**: Aloje su marketplace en un repositorio de Git y agréguelo con la URL de git. Los marketplaces basados en Git clonan el repositorio completo, haciendo que las rutas relativas funcionen correctamente.

1038 

1039### Archivos no encontrados después de la instalación

1040 

1041**Síntomas**: El plugin se instala pero las referencias a archivos fallan, especialmente archivos fuera del directorio del plugin

1042 

1043**Causa**: Los plugins se copian a un directorio de caché en lugar de usarse en el lugar. Las rutas que hacen referencia a archivos fuera del directorio del plugin (como `../shared-utils`) no funcionarán porque esos archivos no se copian.

1044 

1045**Soluciones**: Consulte [Plugin caching and file resolution](/es/plugins-reference#plugin-caching-and-file-resolution) para soluciones alternativas incluyendo enlaces simbólicos y reestructuración de directorios.

1046 

1047Para herramientas de depuración adicionales y problemas comunes, consulte [Debugging and development tools](/es/plugins-reference#debugging-and-development-tools).

1048 

1049## Ver también

1050 

1051* [Descubrir e instalar plugins precompilados](/es/discover-plugins) - Instalación de plugins desde marketplaces existentes

1052* [Plugins](/es/plugins) - Creación de sus propios plugins

1053* [Referencia de plugins](/es/plugins-reference) - Especificaciones técnicas completas y esquemas

1054* [Configuración de plugins](/es/settings#plugin-settings) - Opciones de configuración de plugins

1055* [Referencia de strictKnownMarketplaces](/es/settings#strictknownmarketplaces) - Restricciones de marketplace administrado

plugins.md +454 −0 created

Details

1> ## Documentation Index

2> Fetch the complete documentation index at: https://code.claude.com/docs/llms.txt

3> Use this file to discover all available pages before exploring further.

4 

5# Crear plugins

6 

7> Crea plugins personalizados para extender Claude Code con skills, agentes, hooks y servidores MCP.

8 

9Los plugins le permiten extender Claude Code con funcionalidad personalizada que se puede compartir entre proyectos y equipos. Esta guía cubre la creación de sus propios plugins con skills, agentes, hooks y servidores MCP.

10 

11¿Buscando instalar plugins existentes? Consulte [Descubrir e instalar plugins](/es/discover-plugins). Para especificaciones técnicas completas, consulte [Referencia de plugins](/es/plugins-reference).

12 

13## Cuándo usar plugins versus configuración independiente

14 

15Claude Code admite dos formas de agregar skills, agentes y hooks personalizados:

16 

17| Enfoque | Nombres de skills | Mejor para |

18| :--------------------------------------------------------- | :------------------- | :--------------------------------------------------------------------------------------------------------------------------- |

19| **Independiente** (directorio `.claude/`) | `/hello` | Flujos de trabajo personales, personalizaciones específicas del proyecto, experimentos rápidos |

20| **Plugins** (directorios con `.claude-plugin/plugin.json`) | `/plugin-name:hello` | Compartir con compañeros de equipo, distribuir a la comunidad, lanzamientos versionados, reutilizable en múltiples proyectos |

21 

22**Use configuración independiente cuando**:

23 

24* Esté personalizando Claude Code para un único proyecto

25* La configuración es personal y no necesita ser compartida

26* Esté experimentando con skills o hooks antes de empaquetarlos

27* Quiera nombres de skills cortos como `/hello` o `/deploy`

28 

29**Use plugins cuando**:

30 

31* Quiera compartir funcionalidad con su equipo o comunidad

32* Necesite los mismos skills/agentes en múltiples proyectos

33* Quiera control de versiones y actualizaciones fáciles para sus extensiones

34* Esté distribuyendo a través de un marketplace

35* Esté de acuerdo con skills con espacios de nombres como `/my-plugin:hello` (los espacios de nombres previenen conflictos entre plugins)

36 

37<Tip>

38 Comience con configuración independiente en `.claude/` para iteración rápida, luego [convierta a un plugin](#convert-existing-configurations-to-plugins) cuando esté listo para compartir.

39</Tip>

40 

41## Inicio rápido

42 

43Este inicio rápido le guía a través de la creación de un plugin con un skill personalizado. Creará un manifiesto (el archivo de configuración que define su plugin), agregará un skill y lo probará localmente usando la bandera `--plugin-dir`.

44 

45### Requisitos previos

46 

47* Claude Code [instalado y autenticado](/es/quickstart#step-1-install-claude-code)

48 

49<Note>

50 Si no ve el comando `/plugin`, actualice Claude Code a la última versión. Consulte [Troubleshooting](/es/troubleshooting) para obtener instrucciones de actualización.

51</Note>

52 

53### Cree su primer plugin

54 

55<Steps>

56 <Step title="Cree el directorio del plugin">

57 Cada plugin vive en su propio directorio que contiene un manifiesto y sus skills, agentes o hooks. Cree uno ahora:

58 

59 ```bash theme={null}

60 mkdir my-first-plugin

61 ```

62 </Step>

63 

64 <Step title="Cree el manifiesto del plugin">

65 El archivo de manifiesto en `.claude-plugin/plugin.json` define la identidad de su plugin: su nombre, descripción y versión. Claude Code usa estos metadatos para mostrar su plugin en el administrador de plugins.

66 

67 Cree el directorio `.claude-plugin` dentro de su carpeta de plugin:

68 

69 ```bash theme={null}

70 mkdir my-first-plugin/.claude-plugin

71 ```

72 

73 Luego cree `my-first-plugin/.claude-plugin/plugin.json` con este contenido:

74 

75 ```json my-first-plugin/.claude-plugin/plugin.json theme={null}

76 {

77 "name": "my-first-plugin",

78 "description": "A greeting plugin to learn the basics",

79 "version": "1.0.0",

80 "author": {

81 "name": "Your Name"

82 }

83 }

84 ```

85 

86 | Campo | Propósito |

87 | :------------ | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

88 | `name` | Identificador único y espacio de nombres de skill. Los skills tienen este prefijo (por ejemplo, `/my-first-plugin:hello`). |

89 | `description` | Se muestra en el administrador de plugins al examinar o instalar plugins. |

90 | `version` | Opcional. Si se establece, los usuarios solo reciben actualizaciones cuando usted incrementa este campo. Si se omite y su plugin se distribuye a través de git, se usa el SHA del commit y cada commit cuenta como una nueva versión. Consulte [gestión de versiones](/es/plugins-reference#version-management). |

91 | `author` | Opcional. Útil para atribución. |

92 

93 Para campos adicionales como `homepage`, `repository` y `license`, consulte el [esquema de manifiesto completo](/es/plugins-reference#plugin-manifest-schema).

94 </Step>

95 

96 <Step title="Agregue un skill">

97 Los skills viven en el directorio `skills/`. Cada skill es una carpeta que contiene un archivo `SKILL.md`. El nombre de la carpeta se convierte en el nombre del skill, con el prefijo del espacio de nombres del plugin (`hello/` en un plugin llamado `my-first-plugin` crea `/my-first-plugin:hello`).

98 

99 Cree un directorio de skill en su carpeta de plugin:

100 

101 ```bash theme={null}

102 mkdir -p my-first-plugin/skills/hello

103 ```

104 

105 Luego cree `my-first-plugin/skills/hello/SKILL.md` con este contenido:

106 

107 ```markdown my-first-plugin/skills/hello/SKILL.md theme={null}

108 ---

109 description: Greet the user with a friendly message

110 disable-model-invocation: true

111 ---

112 

113 Greet the user warmly and ask how you can help them today.

114 ```

115 </Step>

116 

117 <Step title="Pruebe su plugin">

118 Ejecute Claude Code con la bandera `--plugin-dir` para cargar su plugin:

119 

120 ```bash theme={null}

121 claude --plugin-dir ./my-first-plugin

122 ```

123 

124 Una vez que Claude Code se inicie, pruebe su nuevo skill:

125 

126 ```shell theme={null}

127 /my-first-plugin:hello

128 ```

129 

130 Verá que Claude responde con un saludo. Ejecute `/help` para ver su skill listado bajo el espacio de nombres del plugin.

131 

132 <Note>

133 **¿Por qué espacios de nombres?** Los skills de plugin siempre tienen espacios de nombres (como `/my-first-plugin:hello`) para prevenir conflictos cuando múltiples plugins tienen skills con el mismo nombre.

134 

135 Para cambiar el prefijo del espacio de nombres, actualice el campo `name` en `plugin.json`.

136 </Note>

137 </Step>

138 

139 <Step title="Agregue argumentos de skill">

140 Haga su skill dinámico aceptando entrada del usuario. El marcador de posición `$ARGUMENTS` captura cualquier texto que el usuario proporcione después del nombre del skill.

141 

142 Actualice su archivo `SKILL.md`:

143 

144 ```markdown my-first-plugin/skills/hello/SKILL.md theme={null}

145 ---

146 description: Greet the user with a personalized message

147 ---

148 

149 # Hello Skill

150 

151 Greet the user named "$ARGUMENTS" warmly and ask how you can help them today. Make the greeting personal and encouraging.

152 ```

153 

154 Ejecute `/reload-plugins` para recoger los cambios, luego pruebe el skill con su nombre:

155 

156 ```shell theme={null}

157 /my-first-plugin:hello Alex

158 ```

159 

160 Claude le saludará por su nombre. Para más información sobre pasar argumentos a skills, consulte [Skills](/es/skills#pass-arguments-to-skills).

161 </Step>

162</Steps>

163 

164Ha creado y probado exitosamente un plugin con estos componentes clave:

165 

166* **Manifiesto del plugin** (`.claude-plugin/plugin.json`): describe los metadatos de su plugin

167* **Directorio de skills** (`skills/`): contiene sus skills personalizados

168* **Argumentos de skill** (`$ARGUMENTS`): captura entrada del usuario para comportamiento dinámico

169 

170<Tip>

171 La bandera `--plugin-dir` es útil para desarrollo y pruebas. Cuando esté listo para compartir su plugin con otros, consulte [Crear y distribuir un marketplace de plugins](/es/plugin-marketplaces).

172</Tip>

173 

174## Descripción general de la estructura del plugin

175 

176Ha creado un plugin con un skill, pero los plugins pueden incluir mucho más: agentes personalizados, hooks, servidores MCP y servidores LSP.

177 

178<Warning>

179 **Error común**: No ponga `commands/`, `agents/`, `skills/` o `hooks/` dentro del directorio `.claude-plugin/`. Solo `plugin.json` va dentro de `.claude-plugin/`. Todos los otros directorios deben estar en el nivel raíz del plugin.

180</Warning>

181 

182| Directorio | Ubicación | Propósito |

183| :---------------- | :-------------- | :-------------------------------------------------------------------------------------------------- |

184| `.claude-plugin/` | Raíz del plugin | Contiene el manifiesto `plugin.json` (opcional si los componentes usan ubicaciones predeterminadas) |

185| `skills/` | Raíz del plugin | Skills como directorios `<name>/SKILL.md` |

186| `commands/` | Raíz del plugin | Skills como archivos Markdown planos. Use `skills/` para plugins nuevos |

187| `agents/` | Raíz del plugin | Definiciones de agentes personalizados |

188| `hooks/` | Raíz del plugin | Manejadores de eventos en `hooks.json` |

189| `.mcp.json` | Raíz del plugin | Configuraciones de servidor MCP |

190| `.lsp.json` | Raíz del plugin | Configuraciones de servidor LSP para inteligencia de código |

191| `monitors/` | Raíz del plugin | Configuraciones de monitor de fondo en `monitors.json` |

192| `bin/` | Raíz del plugin | Ejecutables agregados a la `PATH` de la herramienta Bash mientras el plugin está habilitado |

193| `settings.json` | Raíz del plugin | [Configuraciones](/es/settings) predeterminadas aplicadas cuando el plugin está habilitado |

194 

195<Note>

196 **Próximos pasos**: ¿Listo para agregar más características? Salte a [Desarrollar plugins más complejos](#develop-more-complex-plugins) para agregar agentes, hooks, servidores MCP y servidores LSP. Para especificaciones técnicas completas de todos los componentes del plugin, consulte [Referencia de plugins](/es/plugins-reference).

197</Note>

198 

199## Desarrollar plugins más complejos

200 

201Una vez que se sienta cómodo con plugins básicos, puede crear extensiones más sofisticadas.

202 

203### Agregue Skills a su plugin

204 

205Los plugins pueden incluir [Agent Skills](/es/skills) para extender las capacidades de Claude. Los skills son invocados por el modelo: Claude los usa automáticamente basándose en el contexto de la tarea.

206 

207Agregue un directorio `skills/` en la raíz de su plugin con carpetas de Skill que contengan archivos `SKILL.md`:

208 

209```text theme={null}

210my-plugin/

211├── .claude-plugin/

212│ └── plugin.json

213└── skills/

214 └── code-review/

215 └── SKILL.md

216```

217 

218Cada `SKILL.md` contiene frontmatter YAML e instrucciones. Incluya una `description` para que Claude sepa cuándo usar el skill:

219 

220```yaml theme={null}

221---

222description: Reviews code for best practices and potential issues. Use when reviewing code, checking PRs, or analyzing code quality.

223---

224 

225When reviewing code, check for:

2261. Code organization and structure

2272. Error handling

2283. Security concerns

2294. Test coverage

230```

231 

232Después de instalar el plugin, ejecute `/reload-plugins` para cargar los Skills. Para orientación completa sobre la autoría de Skills incluyendo divulgación progresiva y restricciones de herramientas, consulte [Agent Skills](/es/skills).

233 

234### Agregue servidores LSP a su plugin

235 

236<Tip>

237 Para lenguajes comunes como TypeScript, Python y Rust, instale los plugins LSP precompilados desde el marketplace oficial. Cree plugins LSP personalizados solo cuando necesite soporte para lenguajes que aún no están cubiertos.

238</Tip>

239 

240Los plugins LSP (Language Server Protocol) dan a Claude inteligencia de código en tiempo real. Si necesita soportar un lenguaje que no tiene un plugin LSP oficial, puede crear uno propio agregando un archivo `.lsp.json` a su plugin:

241 

242```json .lsp.json theme={null}

243{

244 "go": {

245 "command": "gopls",

246 "args": ["serve"],

247 "extensionToLanguage": {

248 ".go": "go"

249 }

250 }

251}

252```

253 

254Los usuarios que instalen su plugin deben tener el binario del servidor de lenguaje instalado en su máquina.

255 

256Para opciones de configuración LSP completas, consulte [Servidores LSP](/es/plugins-reference#lsp-servers).

257 

258### Agregue monitores de fondo a su plugin

259 

260Los monitores de fondo permiten que su plugin observe registros, archivos o estado externo en el fondo y notifique a Claude cuando lleguen eventos. Claude Code inicia cada monitor automáticamente cuando el plugin está activo, por lo que no necesita instruir a Claude para que inicie la observación.

261 

262Agregue un archivo `monitors/monitors.json` en la raíz del plugin con una matriz de entradas de monitor:

263 

264```json monitors/monitors.json theme={null}

265[

266 {

267 "name": "error-log",

268 "command": "tail -F ./logs/error.log",

269 "description": "Application error log"

270 }

271]

272```

273 

274Cada línea de stdout del `command` se entrega a Claude como una notificación durante la sesión. Para el esquema completo, incluyendo el disparador `when` y la sustitución de variables, consulte [Monitors](/es/plugins-reference#monitors).

275 

276### Envíe configuraciones predeterminadas con su plugin

277 

278Los plugins pueden incluir un archivo `settings.json` en la raíz del plugin para aplicar configuración predeterminada cuando el plugin está habilitado. Actualmente, solo se admiten las claves `agent` y `subagentStatusLine`.

279 

280Establecer `agent` activa uno de los [agentes personalizados](/es/sub-agents) del plugin como el hilo principal, aplicando su indicación del sistema, restricciones de herramientas y modelo. Esto permite que un plugin cambie cómo se comporta Claude Code por defecto cuando está habilitado.

281 

282```json settings.json theme={null}

283{

284 "agent": "security-reviewer"

285}

286```

287 

288Este ejemplo activa el agente `security-reviewer` definido en el directorio `agents/` del plugin. Las configuraciones de `settings.json` tienen prioridad sobre `settings` declarados en `plugin.json`. Las claves desconocidas se ignoran silenciosamente.

289 

290### Organice plugins complejos

291 

292Para plugins con muchos componentes, organice su estructura de directorios por funcionalidad. Para diseños de directorios completos y patrones de organización, consulte [Estructura de directorios del plugin](/es/plugins-reference#plugin-directory-structure).

293 

294### Pruebe sus plugins localmente

295 

296Use la bandera `--plugin-dir` para probar plugins durante el desarrollo. Esto carga su plugin directamente sin requerir instalación.

297 

298```bash theme={null}

299claude --plugin-dir ./my-plugin

300```

301 

302Cuando un plugin `--plugin-dir` tiene el mismo nombre que un plugin de marketplace instalado, la copia local tiene prioridad para esa sesión. Esto le permite probar cambios en un plugin que ya tiene instalado sin desinstalarlo primero. Los plugins de marketplace forzados a estar habilitados por configuraciones administradas son la única excepción y no pueden ser anulados.

303 

304A medida que haga cambios en su plugin, ejecute `/reload-plugins` para recoger las actualizaciones sin reiniciar. Esto recarga plugins, skills, agentes, hooks, servidores MCP de plugin y servidores LSP de plugin. Pruebe los componentes de su plugin:

305 

306* Pruebe sus skills con `/plugin-name:skill-name`

307* Verifique que los agentes aparezcan en `/agents`

308* Verifique que los hooks funcionen como se espera

309 

310<Tip>

311 Puede cargar múltiples plugins a la vez especificando la bandera varias veces:

312 

313 ```bash theme={null}

314 claude --plugin-dir ./plugin-one --plugin-dir ./plugin-two

315 ```

316</Tip>

317 

318### Depure problemas del plugin

319 

320Si su plugin no funciona como se espera:

321 

3221. **Verifique la estructura**: Asegúrese de que sus directorios estén en la raíz del plugin, no dentro de `.claude-plugin/`

3232. **Pruebe componentes individualmente**: Verifique cada skill, agente y hook por separado

3243. **Use herramientas de validación y depuración**: Consulte [Herramientas de depuración y desarrollo](/es/plugins-reference#debugging-and-development-tools) para comandos CLI y técnicas de solución de problemas

325 

326### Comparta sus plugins

327 

328Cuando su plugin esté listo para compartir:

329 

3301. **Agregue documentación**: Incluya un `README.md` con instrucciones de instalación y uso

3312. **Elija una estrategia de versionado**: Decida si establecer una `version` explícita o confiar en el SHA del commit de git. Consulte [gestión de versiones](/es/plugins-reference#version-management)

3323. **Cree o use un marketplace**: Distribuya a través de [marketplaces de plugins](/es/plugin-marketplaces) para instalación

3334. **Pruebe con otros**: Haga que los miembros del equipo prueben el plugin antes de una distribución más amplia

334 

335Una vez que su plugin esté en un marketplace, otros pueden instalarlo usando las instrucciones en [Descubrir e instalar plugins](/es/discover-plugins). Para mantener un plugin interno en su equipo, aloje el marketplace en un [repositorio privado](/es/plugin-marketplaces#private-repositories).

336 

337### Envíe su plugin al marketplace oficial

338 

339Para enviar un plugin al marketplace oficial de Anthropic, use uno de los formularios de envío en la aplicación:

340 

341* **Claude.ai**: [claude.ai/settings/plugins/submit](https://claude.ai/settings/plugins/submit)

342* **Console**: [platform.claude.com/plugins/submit](https://platform.claude.com/plugins/submit)

343 

344Una vez que su plugin esté listado, puede tener su propio CLI que solicite a los usuarios de Claude Code que lo instalen. Consulte [Recomienda su plugin desde su CLI](/es/plugin-hints).

345 

346<Note>

347 Para especificaciones técnicas completas, técnicas de depuración y estrategias de distribución, consulte [Referencia de plugins](/es/plugins-reference).

348</Note>

349 

350## Convierta configuraciones existentes en plugins

351 

352Si ya tiene skills o hooks en su directorio `.claude/`, puede convertirlos en un plugin para compartir y distribución más fácil.

353 

354### Pasos de migración

355 

356<Steps>

357 <Step title="Cree la estructura del plugin">

358 Cree un nuevo directorio de plugin:

359 

360 ```bash theme={null}

361 mkdir -p my-plugin/.claude-plugin

362 ```

363 

364 Cree el archivo de manifiesto en `my-plugin/.claude-plugin/plugin.json`:

365 

366 ```json my-plugin/.claude-plugin/plugin.json theme={null}

367 {

368 "name": "my-plugin",

369 "description": "Migrated from standalone configuration",

370 "version": "1.0.0"

371 }

372 ```

373 </Step>

374 

375 <Step title="Copie sus archivos existentes">

376 Copie sus configuraciones existentes al directorio del plugin:

377 

378 ```bash theme={null}

379 # Copy commands

380 cp -r .claude/commands my-plugin/

381 

382 # Copy agents (if any)

383 cp -r .claude/agents my-plugin/

384 

385 # Copy skills (if any)

386 cp -r .claude/skills my-plugin/

387 ```

388 </Step>

389 

390 <Step title="Migre hooks">

391 Si tiene hooks en su configuración, cree un directorio de hooks:

392 

393 ```bash theme={null}

394 mkdir my-plugin/hooks

395 ```

396 

397 Cree `my-plugin/hooks/hooks.json` con su configuración de hooks. Copie el objeto `hooks` de su `.claude/settings.json` o `settings.local.json`, ya que el formato es el mismo. El comando recibe entrada de hook como JSON en stdin, así que use `jq` para extraer la ruta del archivo:

398 

399 ```json my-plugin/hooks/hooks.json theme={null}

400 {

401 "hooks": {

402 "PostToolUse": [

403 {

404 "matcher": "Write|Edit",

405 "hooks": [{ "type": "command", "command": "jq -r '.tool_input.file_path' | xargs npm run lint:fix" }]

406 }

407 ]

408 }

409 }

410 ```

411 </Step>

412 

413 <Step title="Pruebe su plugin migrado">

414 Cargue su plugin para verificar que todo funciona:

415 

416 ```bash theme={null}

417 claude --plugin-dir ./my-plugin

418 ```

419 

420 Pruebe cada componente: ejecute sus skills, verifique que los agentes aparezcan en `/agents` y verifique que los hooks se activen correctamente.

421 </Step>

422</Steps>

423 

424### Qué cambia al migrar

425 

426| Independiente (`.claude/`) | Plugin |

427| :------------------------------------- | :------------------------------------------ |

428| Solo disponible en un proyecto | Se puede compartir a través de marketplaces |

429| Archivos en `.claude/commands/` | Archivos en `plugin-name/commands/` |

430| Hooks en `settings.json` | Hooks en `hooks/hooks.json` |

431| Debe copiar manualmente para compartir | Instalar con `/plugin install` |

432 

433<Note>

434 Después de migrar, puede eliminar los archivos originales de `.claude/` para evitar duplicados. La versión del plugin tendrá prioridad cuando se cargue.

435</Note>

436 

437## Próximos pasos

438 

439Ahora que entiende el sistema de plugins de Claude Code, aquí hay caminos sugeridos para diferentes objetivos:

440 

441### Para usuarios de plugins

442 

443* [Descubrir e instalar plugins](/es/discover-plugins): examine marketplaces e instale plugins

444* [Configure marketplaces de equipo](/es/discover-plugins#configure-team-marketplaces): configure plugins a nivel de repositorio para su equipo

445 

446### Para desarrolladores de plugins

447 

448* [Crear y distribuir un marketplace](/es/plugin-marketplaces): empaquete y comparta sus plugins

449* [Referencia de plugins](/es/plugins-reference): especificaciones técnicas completas

450* Profundice en componentes específicos del plugin:

451 * [Skills](/es/skills): detalles de desarrollo de skills

452 * [Subagents](/es/sub-agents): configuración y capacidades del agente

453 * [Hooks](/es/hooks): manejo de eventos y automatización

454 * [MCP](/es/mcp): integración de herramientas externas

plugins-reference.md +1011 −0 created

Details

1> ## Documentation Index

2> Fetch the complete documentation index at: https://code.claude.com/docs/llms.txt

3> Use this file to discover all available pages before exploring further.

4 

5# Referencia de plugins

6 

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

8 

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).

11</Tip>

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.

14 

15Un **plugin** es un directorio independiente de componentes que extiende Claude Code con funcionalidad personalizada. Los componentes del plugin incluyen skills, agents, hooks, servidores MCP, servidores LSP y monitores.

16 

17## Referencia de componentes de plugins

18 

19### Skills

20 

21Los plugins añaden skills a Claude Code, creando atajos `/name` que usted o Claude pueden invocar.

22 

23**Ubicación**: Directorio `skills/` o `commands/` en la raíz del plugin

24 

25**Formato de archivo**: Los skills son directorios con `SKILL.md`; los comandos son archivos markdown simples

26 

27**Estructura de skill**:

28 

29```text theme={null}

30skills/

31├── pdf-processor/

32│ ├── SKILL.md

33│ ├── reference.md (opcional)

34│ └── scripts/ (opcional)

35└── code-reviewer/

36 └── SKILL.md

37```

38 

39**Comportamiento de integración**:

40 

41* Los skills y comandos se descubren automáticamente cuando se instala el plugin

42* Claude puede invocarlos automáticamente según el contexto de la tarea

43* Los skills pueden incluir archivos de apoyo junto a SKILL.md

44 

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

46 

47### Agents

48 

49Los plugins pueden proporcionar subagents especializados para tareas específicas que Claude puede invocar automáticamente cuando sea apropiado.

50 

51**Ubicación**: Directorio `agents/` en la raíz del plugin

52 

53**Formato de archivo**: Archivos markdown que describen las capacidades del agent

54 

55**Estructura del agent**:

56 

57```markdown theme={null}

58---

59name: agent-name

60description: En qué se especializa este agent y cuándo Claude debe invocarlo

61model: sonnet

62effort: medium

63maxTurns: 20

64disallowedTools: Write, Edit

65---

66 

67Prompt del sistema detallado para el agent describiendo su rol, experiencia y comportamiento.

68```

69 

70Los agents del plugin soportan campos frontmatter `name`, `description`, `model`, `effort`, `maxTurns`, `tools`, `disallowedTools`, `skills`, `memory`, `background` e `isolation`. El único valor válido de `isolation` es `"worktree"`. Por razones de seguridad, `hooks`, `mcpServers` y `permissionMode` no se soportan para agents distribuidos con plugins.

71 

72**Puntos de integración**:

73 

74* Los agents aparecen en la interfaz `/agents`

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

76* Los agents pueden ser invocados manualmente por los usuarios

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

78 

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

80 

81### Hooks

82 

83Los plugins pueden proporcionar manejadores de eventos que responden automáticamente a eventos de Claude Code.

84 

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

86 

87**Formato**: Configuración JSON con coincidencias de eventos y acciones

88 

89**Configuración de hook**:

90 

91```json theme={null}

92{

93 "hooks": {

94 "PostToolUse": [

95 {

96 "matcher": "Write|Edit",

97 "hooks": [

98 {

99 "type": "command",

100 "command": "${CLAUDE_PLUGIN_ROOT}/scripts/format-code.sh"

101 }

102 ]

103 }

104 ]

105 }

106}

107```

108 

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

110 

111| Event | When it fires |

112| :-------------------- | :----------------------------------------------------------------------------------------------------------------------------------------------------- |

113| `SessionStart` | When a session begins or resumes |

114| `Setup` | When you start Claude Code with `--init-only`, or with `--init` or `--maintenance` in `-p` mode. For one-time preparation in CI or scripts |

115| `UserPromptSubmit` | When you submit a prompt, before Claude processes it |

116| `UserPromptExpansion` | When a user-typed command expands into a prompt, before it reaches Claude. Can block the expansion |

117| `PreToolUse` | Before a tool call executes. Can block it |

118| `PermissionRequest` | When a permission dialog appears |

119| `PermissionDenied` | When a tool call is denied by the auto mode classifier. Return `{retry: true}` to tell the model it may retry the denied tool call |

120| `PostToolUse` | After a tool call succeeds |

121| `PostToolUseFailure` | After a tool call fails |

122| `PostToolBatch` | After a full batch of parallel tool calls resolves, before the next model call |

123| `Notification` | When Claude Code sends a notification |

124| `SubagentStart` | When a subagent is spawned |

125| `SubagentStop` | When a subagent finishes |

126| `TaskCreated` | When a task is being created via `TaskCreate` |

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

128| `Stop` | When Claude finishes responding |

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

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

131| `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 |

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

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

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

135| `WorktreeCreate` | When a worktree is being created via `--worktree` or `isolation: "worktree"`. Replaces default git behavior |

136| `WorktreeRemove` | When a worktree is being removed, either at session exit or when a subagent finishes |

137| `PreCompact` | Before context compaction |

138| `PostCompact` | After context compaction completes |

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

140| `ElicitationResult` | After a user responds to an MCP elicitation, before the response is sent back to the server |

141| `SessionEnd` | When a session terminates |

142 

143**Tipos de hook**:

144 

145* `command`: ejecutar comandos de shell o scripts

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

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

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

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

150 

151### MCP servers

152 

153Los plugins pueden agrupar servidores Model Context Protocol (MCP) para conectar Claude Code con herramientas y servicios externos.

154 

155**Ubicación**: `.mcp.json` en la raíz del plugin, o en línea en plugin.json

156 

157**Formato**: Configuración estándar del servidor MCP

158 

159**Configuración del servidor MCP**:

160 

161```json theme={null}

162{

163 "mcpServers": {

164 "plugin-database": {

165 "command": "${CLAUDE_PLUGIN_ROOT}/servers/db-server",

166 "args": ["--config", "${CLAUDE_PLUGIN_ROOT}/config.json"],

167 "env": {

168 "DB_PATH": "${CLAUDE_PLUGIN_ROOT}/data"

169 }

170 },

171 "plugin-api-client": {

172 "command": "npx",

173 "args": ["@company/mcp-server", "--plugin-mode"],

174 "cwd": "${CLAUDE_PLUGIN_ROOT}"

175 }

176 }

177}

178```

179 

180**Comportamiento de integración**:

181 

182* Los servidores MCP del plugin se inician automáticamente cuando se habilita el plugin

183* Los servidores aparecen como herramientas MCP estándar en el kit de herramientas de Claude

184* Las capacidades del servidor se integran sin problemas con las herramientas existentes de Claude

185* Los servidores del plugin se pueden configurar independientemente de los servidores MCP del usuario

186 

187### LSP servers

188 

189<Tip>

190 ¿Buscas usar plugins LSP? Instálalos desde el marketplace oficial: busca "lsp" en la pestaña Discover de `/plugin`. Esta sección documenta cómo crear plugins LSP para lenguajes no cubiertos por el marketplace oficial.

191</Tip>

192 

193Los plugins pueden proporcionar servidores [Language Server Protocol](https://microsoft.github.io/language-server-protocol/) (LSP) para dar a Claude inteligencia de código en tiempo real mientras trabaja en su base de código.

194 

195La integración de LSP proporciona:

196 

197* **Diagnósticos instantáneos**: Claude ve errores y advertencias inmediatamente después de cada edición

198* **Navegación de código**: ir a definición, encontrar referencias e información al pasar el ratón

199* **Conciencia del lenguaje**: información de tipo y documentación para símbolos de código

200 

201**Ubicación**: `.lsp.json` en la raíz del plugin, o en línea en `plugin.json`

202 

203**Formato**: Configuración JSON que asigna nombres de servidores de lenguaje a sus configuraciones

204 

205**Formato del archivo `.lsp.json`**:

206 

207```json theme={null}

208{

209 "go": {

210 "command": "gopls",

211 "args": ["serve"],

212 "extensionToLanguage": {

213 ".go": "go"

214 }

215 }

216}

217```

218 

219**En línea en `plugin.json`**:

220 

221```json theme={null}

222{

223 "name": "my-plugin",

224 "lspServers": {

225 "go": {

226 "command": "gopls",

227 "args": ["serve"],

228 "extensionToLanguage": {

229 ".go": "go"

230 }

231 }

232 }

233}

234```

235 

236**Campos requeridos:**

237 

238| Campo | Descripción |

239| :-------------------- | :---------------------------------------------------------- |

240| `command` | El binario LSP a ejecutar (debe estar en PATH) |

241| `extensionToLanguage` | Asigna extensiones de archivo a identificadores de lenguaje |

242 

243**Campos opcionales:**

244 

245| Campo | Descripción |

246| :---------------------- | :------------------------------------------------------------------ |

247| `args` | Argumentos de línea de comandos para el servidor LSP |

248| `transport` | Transporte de comunicación: `stdio` (predeterminado) o `socket` |

249| `env` | Variables de entorno a establecer al iniciar el servidor |

250| `initializationOptions` | Opciones pasadas al servidor durante la inicialización |

251| `settings` | Configuración pasada a través de `workspace/didChangeConfiguration` |

252| `workspaceFolder` | Ruta de carpeta de espacio de trabajo para el servidor |

253| `startupTimeout` | Tiempo máximo para esperar el inicio del servidor (milisegundos) |

254| `shutdownTimeout` | Tiempo máximo para esperar el apagado elegante (milisegundos) |

255| `restartOnCrash` | Si se debe reiniciar automáticamente el servidor si se bloquea |

256| `maxRestarts` | Número máximo de intentos de reinicio antes de rendirse |

257 

258<Warning>

259 **Debe instalar el binario del servidor de lenguaje por separado.** Los plugins LSP configuran cómo Claude Code se conecta a un servidor de lenguaje, pero no incluyen el servidor en sí. Si ve `Executable not found in $PATH` en la pestaña Errors de `/plugin`, instale el binario requerido para su lenguaje.

260</Warning>

261 

262**Plugins LSP disponibles:**

263 

264| Plugin | Servidor de lenguaje | Comando de instalación |

265| :--------------- | :------------------------- | :------------------------------------------------------------------------------------------- |

266| `pyright-lsp` | Pyright (Python) | `pip install pyright` o `npm install -g pyright` |

267| `typescript-lsp` | TypeScript Language Server | `npm install -g typescript-language-server typescript` |

268| `rust-lsp` | rust-analyzer | [Ver instalación de rust-analyzer](https://rust-analyzer.github.io/manual.html#installation) |

269 

270Instale el servidor de lenguaje primero, luego instale el plugin desde el marketplace.

271 

272### Monitors

273 

274Los 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.

275 

276Los 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.

277 

278<Note>

279 Los monitores del plugin requieren Claude Code v2.1.105 o posterior.

280</Note>

281 

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

283 

284**Formato**: Array JSON de entradas de monitor

285 

286El siguiente `monitors/monitors.json` vigila un endpoint de estado de implementación y un registro de errores local:

287 

288```json theme={null}

289[

290 {

291 "name": "deploy-status",

292 "command": "${CLAUDE_PLUGIN_ROOT}/scripts/poll-deploy.sh ${user_config.api_endpoint}",

293 "description": "Cambios de estado de implementación"

294 },

295 {

296 "name": "error-log",

297 "command": "tail -F ./logs/error.log",

298 "description": "Registro de errores de la aplicación",

299 "when": "on-skill-invoke:debug"

300 }

301]

302```

303 

304Para declarar monitores en línea, establezca la clave `monitors` en `plugin.json` en el mismo array. Para cargar desde una ruta no predeterminada, establezca `monitors` en una cadena de ruta relativa como `"./config/monitors.json"`.

305 

306**Campos requeridos:**

307 

308| Campo | Descripción |

309| :------------ | :------------------------------------------------------------------------------------------------------------------------------- |

310| `name` | Identificador único dentro del plugin. Previene procesos duplicados cuando el plugin se recarga o se invoca una skill nuevamente |

311| `command` | Comando de shell ejecutado como un proceso de fondo persistente en el directorio de trabajo de la sesión |

312| `description` | Resumen breve de lo que se está vigilando. Se muestra en el panel de tareas y en resúmenes de notificaciones |

313 

314**Campos opcionales:**

315 

316| Campo | Descripción |

317| :----- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

318| `when` | Controla cuándo se inicia el monitor. `"always"` lo inicia al inicio de la sesión y en la recarga del plugin, y es el predeterminado. `"on-skill-invoke:<skill-name>"` lo inicia la primera vez que se distribuye la skill nombrada en este plugin |

319 

320El valor `command` soporta las mismas [sustituciones de variables](#environment-variables) que las configuraciones de servidores MCP y LSP: `${CLAUDE_PLUGIN_ROOT}`, `${CLAUDE_PLUGIN_DATA}`, `${user_config.*}` y cualquier `${ENV_VAR}` del entorno. Prefije el comando con `cd "${CLAUDE_PLUGIN_ROOT}" && ` si el script necesita ejecutarse desde el directorio del plugin.

321 

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

323 

324### Themes

325 

326Los plugins pueden distribuir temas de color que aparecen en `/theme` junto con los presets integrados y los temas locales del usuario. Un tema es un archivo JSON en `themes/` con un preset `base` y un mapa disperso `overrides` de tokens de color.

327 

328```json theme={null}

329{

330 "name": "Dracula",

331 "base": "dark",

332 "overrides": {

333 "claude": "#bd93f9",

334 "error": "#ff5555",

335 "success": "#50fa7b"

336 }

337}

338```

339 

340Seleccionar un tema de plugin persiste `custom:<plugin-name>:<slug>` en la configuración del usuario. Los temas de plugin son de solo lectura; presionar `Ctrl+E` en uno en `/theme` lo copia en `~/.claude/themes/` para que el usuario pueda editar la copia.

341 

342***

343 

344## Alcances de instalación de plugins

345 

346Cuando instalas un plugin, eliges un **alcance** que determina dónde está disponible el plugin y quién más puede usarlo:

347 

348| Alcance | Archivo de configuración | Caso de uso |

349| :-------- | :-------------------------------------------------------- | :--------------------------------------------------------------------- |

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

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

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

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

354 

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

356 

357***

358 

359## Esquema del manifiesto del plugin

360 

361El archivo `.claude-plugin/plugin.json` define los metadatos y la configuración de tu plugin. Esta sección documenta todos los campos y opciones soportados.

362 

363El manifiesto es opcional. Si se omite, Claude Code descubre automáticamente componentes en [ubicaciones predeterminadas](#file-locations-reference) y deriva el nombre del plugin del nombre del directorio. Usa un manifiesto cuando necesites proporcionar metadatos o rutas de componentes personalizadas.

364 

365### Esquema completo

366 

367```json theme={null}

368{

369 "name": "plugin-name",

370 "version": "1.2.0",

371 "description": "Brief plugin description",

372 "author": {

373 "name": "Author Name",

374 "email": "author@example.com",

375 "url": "https://github.com/author"

376 },

377 "homepage": "https://docs.example.com/plugin",

378 "repository": "https://github.com/author/plugin",

379 "license": "MIT",

380 "keywords": ["keyword1", "keyword2"],

381 "skills": "./custom/skills/",

382 "commands": ["./custom/commands/special.md"],

383 "agents": ["./custom/agents/reviewer.md"],

384 "hooks": "./config/hooks.json",

385 "mcpServers": "./mcp-config.json",

386 "outputStyles": "./styles/",

387 "themes": "./themes/",

388 "lspServers": "./.lsp.json",

389 "monitors": "./monitors.json",

390 "dependencies": [

391 "helper-lib",

392 { "name": "secrets-vault", "version": "~2.1.0" }

393 ]

394}

395```

396 

397### Campos requeridos

398 

399Si incluyes un manifiesto, `name` es el único campo requerido.

400 

401| Campo | Tipo | Descripción | Ejemplo |

402| :----- | :----- | :--------------------------------------------- | :------------------- |

403| `name` | string | Identificador único (kebab-case, sin espacios) | `"deployment-tools"` |

404 

405Este 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`.

406 

407### Campos de metadatos

408 

409| Campo | Tipo | Descripción | Ejemplo |

410| :------------ | :----- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :---------------------------------------------------------------- |

411| `$schema` | string | URL del esquema JSON para autocompletado y validación del editor. Claude Code ignora este campo en el momento de la carga. | `"https://json.schemastore.org/claude-code-plugin-manifest.json"` |

412| `version` | string | Opcional. Versión semántica. Establecer esto fija el plugin a esa cadena de versión, por lo que los usuarios solo reciben actualizaciones cuando la incrementas. Si se omite, Claude Code recurre al SHA del commit de git, por lo que cada commit se trata como una nueva versión. Si también se establece en la entrada del marketplace, `plugin.json` gana. Consulta [Gestión de versiones](#version-management). | `"2.1.0"` |

413| `description` | string | Explicación breve del propósito del plugin | `"Deployment automation tools"` |

414| `author` | object | Información del autor | `{"name": "Dev Team", "email": "dev@company.com"}` |

415| `homepage` | string | URL de documentación | `"https://docs.example.com"` |

416| `repository` | string | URL del código fuente | `"https://github.com/user/plugin"` |

417| `license` | string | Identificador de licencia | `"MIT"`, `"Apache-2.0"` |

418| `keywords` | array | Etiquetas de descubrimiento | `["deployment", "ci-cd"]` |

419 

420### Campos de ruta de componentes

421 

422| Campo | Tipo | Descripción | Ejemplo |

423| :------------- | :-------------------- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :--------------------------------------------------- |

424| `skills` | string\|array | Directorios de skills personalizados que contienen `<name>/SKILL.md` (reemplaza el predeterminado `skills/`) | `"./custom/skills/"` |

425| `commands` | string\|array | Archivos de skill planos `.md` o directorios personalizados (reemplaza el predeterminado `commands/`) | `"./custom/cmd.md"` o `["./cmd1.md"]` |

426| `agents` | string\|array | Archivos de agent personalizados (reemplaza el predeterminado `agents/`) | `"./custom/agents/reviewer.md"` |

427| `hooks` | string\|array\|object | Rutas de configuración de hooks o configuración en línea | `"./my-extra-hooks.json"` |

428| `mcpServers` | string\|array\|object | Rutas de configuración de MCP o configuración en línea | `"./my-extra-mcp-config.json"` |

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

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

431| `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"` |

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

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

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

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

436 

437### Configuración del usuario

438 

439El campo `userConfig` declara valores que Claude Code solicita al usuario cuando se habilita el plugin. Usa esto en lugar de requerir que los usuarios editen manualmente `settings.json`.

440 

441```json theme={null}

442{

443 "userConfig": {

444 "api_endpoint": {

445 "type": "string",

446 "title": "API endpoint",

447 "description": "Tu endpoint de API del equipo"

448 },

449 "api_token": {

450 "type": "string",

451 "title": "API token",

452 "description": "Token de autenticación de API",

453 "sensitive": true

454 }

455 }

456}

457```

458 

459Las claves deben ser identificadores válidos. Cada opción soporta estos campos:

460 

461| Campo | Requerido | Descripción |

462| :------------ | :-------- | :---------------------------------------------------------------------------------------------------------- |

463| `type` | Sí | Uno de `string`, `number`, `boolean`, `directory`, o `file` |

464| `title` | Sí | Etiqueta mostrada en el diálogo de configuración |

465| `description` | Sí | Texto de ayuda mostrado debajo del campo |

466| `sensitive` | No | Si es `true`, enmascara la entrada y almacena el valor en almacenamiento seguro en lugar de `settings.json` |

467| `required` | No | Si es `true`, la validación falla cuando el campo está vacío |

468| `default` | No | Valor utilizado cuando el usuario no proporciona nada |

469| `multiple` | No | Para tipo `string`, permite un array de cadenas |

470| `min` / `max` | No | Límites para tipo `number` |

471 

472Cada 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 subprocesos del plugin como variables de entorno `CLAUDE_PLUGIN_OPTION_<KEY>`.

473 

474Los valores no sensibles se almacenan en `settings.json` bajo `pluginConfigs[<plugin-id>].options`. Los valores sensibles van al llavero del sistema (o `~/.claude/.credentials.json` donde el llavero no está disponible). El almacenamiento en llavero se comparte con tokens OAuth y tiene un límite total aproximado de 2 KB, así que mantén los valores sensibles pequeños.

475 

476### Canales

477 

478El campo `channels` permite que un plugin declare uno o más canales de mensajes que inyecten contenido en la conversación. Cada canal se vincula a un servidor MCP que proporciona el plugin.

479 

480```json theme={null}

481{

482 "channels": [

483 {

484 "server": "telegram",

485 "userConfig": {

486 "bot_token": {

487 "type": "string",

488 "title": "Bot token",

489 "description": "Token del bot de Telegram",

490 "sensitive": true

491 },

492 "owner_id": {

493 "type": "string",

494 "title": "Owner ID",

495 "description": "Tu ID de usuario de Telegram"

496 }

497 }

498 }

499 ]

500}

501```

502 

503El campo `server` es requerido y debe coincidir con una clave en los `mcpServers` del plugin. El `userConfig` opcional por canal usa el mismo esquema que el campo de nivel superior, permitiendo que el plugin solicite tokens de bot o IDs de propietario cuando se habilita el plugin.

504 

505### Reglas de comportamiento de rutas

506 

507Para `skills`, `commands`, `agents`, `outputStyles`, `themes` y `monitors`, una ruta personalizada reemplaza la predeterminada. Si el manifiesto especifica `skills`, el directorio predeterminado `skills/` no se escanea; si especifica `monitors`, el `monitors/monitors.json` predeterminado no se carga. [Hooks](#hooks), [MCP servers](#mcp-servers) y [LSP servers](#lsp-servers) tienen semántica diferente para manejar múltiples fuentes.

508 

509* Todas las rutas deben ser relativas a la raíz del plugin y comenzar con `./`

510* Los componentes de rutas personalizadas utilizan las mismas reglas de nomenclatura y espacios de nombres

511* Se pueden especificar múltiples rutas como arrays

512* Para mantener el directorio predeterminado y añadir más rutas para skills, comandos, agents o estilos de salida, incluye el predeterminado en tu array: `"skills": ["./skills/", "./extras/"]`

513* Cuando una ruta de skill apunta a un directorio que contiene un `SKILL.md` directamente, por ejemplo `"skills": ["./"]` apuntando a la raíz del plugin, el campo frontmatter `name` en `SKILL.md` determina el nombre de invocación de la skill. Esto proporciona un nombre estable independientemente del directorio de instalación. Si `name` no se establece en el frontmatter, el nombre base del directorio se usa como alternativa.

514 

515**Ejemplos de rutas**:

516 

517```json theme={null}

518{

519 "commands": [

520 "./specialized/deploy.md",

521 "./utilities/batch-process.md"

522 ],

523 "agents": [

524 "./custom-agents/reviewer.md",

525 "./custom-agents/tester.md"

526 ]

527}

528```

529 

530### Variables de entorno

531 

532Claude Code proporciona dos variables para hacer referencia a rutas de plugins. Ambas se sustituyen en línea en cualquier lugar donde aparezcan en contenido de skills, contenido de agents, comandos de hooks, comandos de monitores y configuraciones de servidores MCP o LSP. Ambas también se exportan como variables de entorno a procesos de hooks y subprocesos de servidores MCP o LSP.

533 

534**`${CLAUDE_PLUGIN_ROOT}`**: la ruta absoluta al directorio de instalación de tu plugin. Úsala para hacer referencia a scripts, binarios y archivos de configuración incluidos con el plugin. Esta ruta cambia cuando se actualiza el plugin, así que los archivos que escribas aquí no sobreviven a una actualización.

535 

536**`${CLAUDE_PLUGIN_DATA}`**: un directorio persistente para el estado del plugin que sobrevive a las actualizaciones. Úsalo para dependencias instaladas como `node_modules` o entornos virtuales de Python, código generado, cachés y cualquier otro archivo que deba persistir entre versiones del plugin. El directorio se crea automáticamente la primera vez que se hace referencia a esta variable.

537 

538```json theme={null}

539{

540 "hooks": {

541 "PostToolUse": [

542 {

543 "hooks": [

544 {

545 "type": "command",

546 "command": "${CLAUDE_PLUGIN_ROOT}/scripts/process.sh"

547 }

548 ]

549 }

550 ]

551 }

552}

553```

554 

555#### Directorio de datos persistente

556 

557El directorio `${CLAUDE_PLUGIN_DATA}` se resuelve a `~/.claude/plugins/data/{id}/`, donde `{id}` es el identificador del plugin con caracteres fuera de `a-z`, `A-Z`, `0-9`, `_` y `-` reemplazados por `-`. Para un plugin instalado como `formatter@my-marketplace`, el directorio es `~/.claude/plugins/data/formatter-my-marketplace/`.

558 

559Un uso común es instalar dependencias de lenguaje una vez y reutilizarlas en sesiones y actualizaciones de plugins. Porque el directorio de datos sobrevive a cualquier versión única del plugin, una verificación de existencia de directorio solo no puede detectar cuándo una actualización cambia el manifiesto de dependencias del plugin. El patrón recomendado compara el manifiesto incluido contra una copia en el directorio de datos y reinstala cuando difieren.

560 

561Este hook `SessionStart` instala `node_modules` en la primera ejecución y nuevamente siempre que una actualización del plugin incluya un `package.json` cambiado:

562 

563```json theme={null}

564{

565 "hooks": {

566 "SessionStart": [

567 {

568 "hooks": [

569 {

570 "type": "command",

571 "command": "diff -q \"${CLAUDE_PLUGIN_ROOT}/package.json\" \"${CLAUDE_PLUGIN_DATA}/package.json\" >/dev/null 2>&1 || (cd \"${CLAUDE_PLUGIN_DATA}\" && cp \"${CLAUDE_PLUGIN_ROOT}/package.json\" . && npm install) || rm -f \"${CLAUDE_PLUGIN_DATA}/package.json\""

572 }

573 ]

574 }

575 ]

576 }

577}

578```

579 

580El `diff` sale con código distinto de cero cuando la copia almacenada falta o difiere de la incluida, cubriendo tanto la primera ejecución como las actualizaciones que cambian dependencias. Si `npm install` falla, el `rm` final elimina el manifiesto copiado para que la siguiente sesión reintente.

581 

582Los scripts incluidos en `${CLAUDE_PLUGIN_ROOT}` pueden ejecutarse contra los `node_modules` persistidos:

583 

584```json theme={null}

585{

586 "mcpServers": {

587 "routines": {

588 "command": "node",

589 "args": ["${CLAUDE_PLUGIN_ROOT}/server.js"],

590 "env": {

591 "NODE_PATH": "${CLAUDE_PLUGIN_DATA}/node_modules"

592 }

593 }

594 }

595}

596```

597 

598El directorio de datos se elimina automáticamente cuando desinstales el plugin del último alcance donde está instalado. La interfaz `/plugin` muestra el tamaño del directorio y solicita confirmación antes de eliminar. La CLI elimina por defecto; pasa [`--keep-data`](#plugin-uninstall) para preservarlo.

599 

600***

601 

602## Almacenamiento en caché de plugins y resolución de archivos

603 

604Los plugins se especifican de una de dos formas:

605 

606* A través de `claude --plugin-dir`, durante la duración de una sesión.

607* A través de un marketplace, instalado para sesiones futuras.

608 

609Por razones de seguridad y verificación, Claude Code copia plugins del *marketplace* a la **caché de plugins** local del usuario (`~/.claude/plugins/cache`) en lugar de usarlos en su lugar. Entender este comportamiento es importante al desarrollar plugins que hacen referencia a archivos externos.

610 

611Cada versión instalada es un directorio separado en la caché. Cuando actualizas o desinstales un plugin, el directorio de versión anterior se marca como huérfano y se elimina automáticamente 7 días después. El período de gracia permite que las sesiones de Claude Code concurrentes que ya cargaron la versión anterior sigan ejecutándose sin errores.

612 

613Las herramientas Glob y Grep de Claude omiten directorios de versión huérfanos durante búsquedas, por lo que los resultados de archivos no incluyen código de plugin obsoleto.

614 

615### Limitaciones de traversal de rutas

616 

617Los plugins instalados no pueden hacer referencia a archivos fuera de su directorio. Las rutas que traversan fuera de la raíz del plugin (como `../shared-utils`) no funcionarán después de la instalación porque esos archivos externos no se copian a la caché.

618 

619### Trabajar con dependencias externas

620 

621Si tu plugin necesita acceder a archivos fuera de su directorio, puedes crear enlaces simbólicos a archivos externos dentro de tu directorio de plugin. Los enlaces simbólicos se preservan en la caché en lugar de ser desreferenciados, y se resuelven a su destino en tiempo de ejecución. El siguiente comando crea un enlace desde dentro de tu directorio de plugin a una ubicación de utilidades compartidas:

622 

623```bash theme={null}

624ln -s /path/to/shared-utils ./shared-utils

625```

626 

627Esto proporciona flexibilidad mientras se mantienen los beneficios de seguridad del sistema de almacenamiento en caché.

628 

629***

630 

631## Estructura del directorio del plugin

632 

633### Diseño estándar del plugin

634 

635Un plugin completo sigue esta estructura:

636 

637```text theme={null}

638enterprise-plugin/

639├── .claude-plugin/ # Directorio de metadatos (opcional)

640│ └── plugin.json # manifiesto del plugin

641├── skills/ # Skills

642│ ├── code-reviewer/

643│ │ └── SKILL.md

644│ └── pdf-processor/

645│ ├── SKILL.md

646│ └── scripts/

647├── commands/ # Skills como archivos .md planos

648│ ├── status.md

649│ └── logs.md

650├── agents/ # Definiciones de subagent

651│ ├── security-reviewer.md

652│ ├── performance-tester.md

653│ └── compliance-checker.md

654├── output-styles/ # Definiciones de estilo de salida

655│ └── terse.md

656├── themes/ # Definiciones de tema de color

657│ └── dracula.json

658├── monitors/ # Configuraciones de monitor de fondo

659│ └── monitors.json

660├── hooks/ # Configuraciones de hooks

661│ ├── hooks.json # Configuración principal de hooks

662│ └── security-hooks.json # Hooks adicionales

663├── bin/ # Ejecutables del plugin añadidos a PATH

664│ └── my-tool # Invocable como comando desnudo en herramienta Bash

665├── settings.json # Configuración predeterminada para el plugin

666├── .mcp.json # Definiciones del servidor MCP

667├── .lsp.json # Configuraciones del servidor LSP

668├── scripts/ # Scripts de hooks y utilidades

669│ ├── security-scan.sh

670│ ├── format-code.py

671│ └── deploy.js

672├── LICENSE # Archivo de licencia

673└── CHANGELOG.md # Historial de versiones

674```

675 

676<Warning>

677 El directorio `.claude-plugin/` contiene el archivo `plugin.json`. Todos los otros directorios (commands/, agents/, skills/, output-styles/, themes/, monitors/, hooks/) deben estar en la raíz del plugin, no dentro de `.claude-plugin/`.

678</Warning>

679 

680### Referencia de ubicaciones de archivos

681 

682| Componente | Ubicación predeterminada | Propósito |

683| :-------------------- | :--------------------------- | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

684| **Manifiesto** | `.claude-plugin/plugin.json` | Metadatos y configuración del plugin (opcional) |

685| **Skills** | `skills/` | Skills con estructura `<name>/SKILL.md` |

686| **Comandos** | `commands/` | Skills como archivos Markdown planos. Usa `skills/` para nuevos plugins |

687| **Agents** | `agents/` | Archivos Markdown de Subagent |

688| **Estilos de salida** | `output-styles/` | Definiciones de estilo de salida |

689| **Temas** | `themes/` | Definiciones de tema de color |

690| **Hooks** | `hooks/hooks.json` | Configuración de hooks |

691| **Servidores MCP** | `.mcp.json` | Definiciones del servidor MCP |

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

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

694| **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 |

695| **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) |

696 

697***

698 

699## Referencia de comandos CLI

700 

701Claude Code proporciona comandos CLI para la gestión de plugins no interactiva, útil para scripting y automatización.

702 

703### plugin install

704 

705Instala un plugin desde los marketplaces disponibles.

706 

707```bash theme={null}

708claude plugin install <plugin> [options]

709```

710 

711**Argumentos:**

712 

713* `<plugin>`: Nombre del plugin o `plugin-name@marketplace-name` para un marketplace específico

714 

715**Opciones:**

716 

717| Opción | Descripción | Predeterminado |

718| :-------------------- | :--------------------------------------------------- | :------------- |

719| `-s, --scope <scope>` | Alcance de instalación: `user`, `project`, o `local` | `user` |

720| `-h, --help` | Mostrar ayuda para el comando | |

721 

722El alcance determina qué archivo de configuración se añade el plugin instalado. Por ejemplo, `--scope project` escribe en `enabledPlugins` en .claude/settings.json, haciendo que el plugin esté disponible para todos los que clonan el repositorio del proyecto.

723 

724**Ejemplos:**

725 

726```bash theme={null}

727# Instalar en alcance de usuario (predeterminado)

728claude plugin install formatter@my-marketplace

729 

730# Instalar en alcance de proyecto (compartido con el equipo)

731claude plugin install formatter@my-marketplace --scope project

732 

733# Instalar en alcance local (ignorado por git)

734claude plugin install formatter@my-marketplace --scope local

735```

736 

737### plugin uninstall

738 

739Elimina un plugin instalado.

740 

741```bash theme={null}

742claude plugin uninstall <plugin> [options]

743```

744 

745**Argumentos:**

746 

747* `<plugin>`: Nombre del plugin o `plugin-name@marketplace-name`

748 

749**Opciones:**

750 

751| Opción | Descripción | Predeterminado |

752| :-------------------- | :----------------------------------------------------------------------------------------------------------------------------------- | :------------- |

753| `-s, --scope <scope>` | Desinstalar del alcance: `user`, `project`, o `local` | `user` |

754| `--keep-data` | Preservar el directorio de datos persistente del plugin | |

755| `--prune` | También eliminar las dependencias instaladas automáticamente que ningún otro plugin requiere. Consulta [plugin prune](#plugin-prune) | |

756| `-y, --yes` | Omitir la solicitud de confirmación de `--prune`. Requerido cuando stdin no es un TTY | |

757| `-h, --help` | Mostrar ayuda para el comando | |

758 

759**Alias:** `remove`, `rm`

760 

761Por defecto, desinstalar del último alcance restante también elimina el directorio `${CLAUDE_PLUGIN_DATA}` del plugin. Usa `--keep-data` para preservarlo, por ejemplo cuando reinstales después de probar una nueva versión.

762 

763### plugin prune

764 

765Elimina 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 instalaste directamente nunca se tocan.

766 

767```bash theme={null}

768claude plugin prune [options]

769```

770 

771**Opciones:**

772 

773| Opción | Descripción | Predeterminado |

774| :-------------------- | :----------------------------------------------------------------------- | :------------- |

775| `-s, --scope <scope>` | Limpiar en alcance: `user`, `project`, o `local` | `user` |

776| `--dry-run` | Listar lo que se eliminaría sin eliminar nada | |

777| `-y, --yes` | Omitir la solicitud de confirmación. Requerido cuando stdin no es un TTY | |

778| `-h, --help` | Mostrar ayuda para el comando | |

779 

780**Alias:** `autoremove`

781 

782El comando lista las dependencias huérfanas y solicita confirmación antes de eliminarlas. Para eliminar un plugin y limpiar sus dependencias en un paso, ejecuta `claude plugin uninstall <plugin> --prune`.

783 

784<Note>

785 `claude plugin prune` requiere Claude Code v2.1.121 o posterior.

786</Note>

787 

788### plugin enable

789 

790Habilita un plugin deshabilitado.

791 

792```bash theme={null}

793claude plugin enable <plugin> [options]

794```

795 

796**Argumentos:**

797 

798* `<plugin>`: Nombre del plugin o `plugin-name@marketplace-name`

799 

800**Opciones:**

801 

802| Opción | Descripción | Predeterminado |

803| :-------------------- | :------------------------------------------------ | :------------- |

804| `-s, --scope <scope>` | Alcance a habilitar: `user`, `project`, o `local` | `user` |

805| `-h, --help` | Mostrar ayuda para el comando | |

806 

807### plugin disable

808 

809Deshabilita un plugin sin desinstalarlo.

810 

811```bash theme={null}

812claude plugin disable <plugin> [options]

813```

814 

815**Argumentos:**

816 

817* `<plugin>`: Nombre del plugin o `plugin-name@marketplace-name`

818 

819**Opciones:**

820 

821| Opción | Descripción | Predeterminado |

822| :-------------------- | :--------------------------------------------------- | :------------- |

823| `-s, --scope <scope>` | Alcance a deshabilitar: `user`, `project`, o `local` | `user` |

824| `-h, --help` | Mostrar ayuda para el comando | |

825 

826### plugin update

827 

828Actualiza un plugin a la versión más reciente.

829 

830```bash theme={null}

831claude plugin update <plugin> [options]

832```

833 

834**Argumentos:**

835 

836* `<plugin>`: Nombre del plugin o `plugin-name@marketplace-name`

837 

838**Opciones:**

839 

840| Opción | Descripción | Predeterminado |

841| :-------------------- | :------------------------------------------------------------ | :------------- |

842| `-s, --scope <scope>` | Alcance a actualizar: `user`, `project`, `local`, o `managed` | `user` |

843| `-h, --help` | Mostrar ayuda para el comando | |

844 

845***

846 

847### plugin list

848 

849Lista los plugins instalados con su versión, marketplace de origen y estado de habilitación.

850 

851```bash theme={null}

852claude plugin list [options]

853```

854 

855**Opciones:**

856 

857| Opción | Descripción | Predeterminado |

858| :------------ | :---------------------------------------------------------------- | :------------- |

859| `--json` | Salida como JSON | |

860| `--available` | Incluir plugins disponibles desde marketplaces. Requiere `--json` | |

861| `-h, --help` | Mostrar ayuda para el comando | |

862 

863### plugin tag

864 

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

866 

867```bash theme={null}

868claude plugin tag [options]

869```

870 

871**Opciones:**

872 

873| Opción | Descripción | Predeterminado |

874| :------------ | :---------------------------------------------------------------------------------- | :------------- |

875| `--push` | Enviar la etiqueta al repositorio remoto después de crearla | |

876| `--dry-run` | Imprimir lo que se etiquetaría sin crear la etiqueta | |

877| `-f, --force` | Crear la etiqueta incluso si el árbol de trabajo está sucio o la etiqueta ya existe | |

878| `-h, --help` | Mostrar ayuda para el comando | |

879 

880***

881 

882## Herramientas de depuración y desarrollo

883 

884### Comandos de depuración

885 

886Usa `claude --debug` para ver detalles de carga de plugins:

887 

888Esto muestra:

889 

890* Qué plugins se están cargando

891* Cualquier error en los manifiestos del plugin

892* Registro de skills, agents y hooks

893* Inicialización del servidor MCP

894 

895### Problemas comunes

896 

897| Problema | Causa | Solución |

898| :---------------------------------- | :---------------------------------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

899| Plugin no se carga | `plugin.json` inválido | Ejecuta `claude plugin validate` o `/plugin validate` para verificar `plugin.json`, frontmatter de skill/agent/comando y `hooks/hooks.json` para errores de sintaxis y esquema |

900| Skills no aparecen | Estructura de directorio incorrecta | Asegúrate de que `skills/` o `commands/` esté en la raíz del plugin, no dentro de `.claude-plugin/` |

901| Hooks no se disparan | Script no ejecutable | Ejecuta `chmod +x script.sh` |

902| MCP server falla | Falta `${CLAUDE_PLUGIN_ROOT}` | Usa la variable para todas las rutas del plugin |

903| Errores de ruta | Se utilizan rutas absolutas | Todas las rutas deben ser relativas y comenzar con `./` |

904| LSP `Executable not found in $PATH` | Servidor de lenguaje no instalado | Instala el binario (p. ej., `npm install -g typescript-language-server typescript`) |

905 

906### Mensajes de error de ejemplo

907 

908**Errores de validación de manifiesto**:

909 

910* `Invalid JSON syntax: Unexpected token } in JSON at position 142`: busca comas faltantes, comas extra o cadenas sin comillas

911* `Plugin has an invalid manifest file at .claude-plugin/plugin.json. Validation errors: name: Required`: falta un campo requerido

912* `Plugin has a corrupt manifest file at .claude-plugin/plugin.json. JSON parse error: ...`: error de sintaxis JSON

913 

914**Errores de carga de plugin**:

915 

916* `Warning: No commands found in plugin my-plugin custom directory: ./cmds. Expected .md files or SKILL.md in subdirectories.`: la ruta del comando existe pero no contiene archivos de comando válidos

917* `Plugin directory not found at path: ./plugins/my-plugin. Check that the marketplace entry has the correct path.`: la ruta `source` en marketplace.json apunta a un directorio inexistente

918* `Plugin my-plugin has conflicting manifests: both plugin.json and marketplace entry specify components.`: elimina definiciones de componentes duplicadas o elimina `strict: false` en la entrada del marketplace

919 

920### Solución de problemas de hooks

921 

922**El script del hook no se ejecuta**:

923 

9241. Verifica que el script sea ejecutable: `chmod +x ./scripts/your-script.sh`

9252. Verifica la línea shebang: La primera línea debe ser `#!/bin/bash` o `#!/usr/bin/env bash`

9263. Verifica que la ruta use `${CLAUDE_PLUGIN_ROOT}`: `"command": "${CLAUDE_PLUGIN_ROOT}/scripts/your-script.sh"`

9274. Prueba el script manualmente: `./scripts/your-script.sh`

928 

929**El hook no se dispara en los eventos esperados**:

930 

9311. Verifica que el nombre del evento sea correcto (sensible a mayúsculas): `PostToolUse`, no `postToolUse`

9322. Verifica que el patrón del matcher coincida con tus herramientas: `"matcher": "Write|Edit"` para operaciones de archivo

9333. Confirma que el tipo de hook sea válido: `command`, `http`, `mcp_tool`, `prompt`, o `agent`

934 

935### Solución de problemas del servidor MCP

936 

937**El servidor no se inicia**:

938 

9391. Verifica que el comando exista y sea ejecutable

9402. Verifica que todas las rutas usen la variable `${CLAUDE_PLUGIN_ROOT}`

9413. Verifica los registros del servidor MCP: `claude --debug` muestra errores de inicialización

9424. Prueba el servidor manualmente fuera de Claude Code

943 

944**Las herramientas del servidor no aparecen**:

945 

9461. Asegúrate de que el servidor esté correctamente configurado en `.mcp.json` o `plugin.json`

9472. Verifica que el servidor implemente correctamente el protocolo MCP

9483. Busca tiempos de espera de conexión en la salida de depuración

949 

950### Errores de estructura de directorio

951 

952**Síntomas**: El plugin se carga pero faltan componentes (skills, agents, hooks).

953 

954**Estructura correcta**: Los componentes deben estar en la raíz del plugin, no dentro de `.claude-plugin/`. Solo `plugin.json` pertenece a `.claude-plugin/`.

955 

956```text theme={null}

957my-plugin/

958├── .claude-plugin/

959│ └── plugin.json ← Solo el manifiesto aquí

960├── commands/ ← A nivel de raíz

961├── agents/ ← A nivel de raíz

962└── hooks/ ← A nivel de raíz

963```

964 

965Si tus componentes están dentro de `.claude-plugin/`, muévelos a la raíz del plugin.

966 

967**Lista de verificación de depuración**:

968 

9691. Ejecuta `claude --debug` y busca mensajes "loading plugin"

9702. Verifica que cada directorio de componentes esté listado en la salida de depuración

9713. Verifica que los permisos de archivo permitan leer los archivos del plugin

972 

973***

974 

975## Referencia de distribución y versionado

976 

977### Gestión de versiones

978 

979Claude Code utiliza la versión del plugin como clave de caché que determina si hay una actualización disponible. Cuando ejecuta `/plugin update` o se activa la actualización automática, Claude Code calcula la versión actual y omite la actualización si coincide con la que ya está instalada.

980 

981La versión se resuelve a partir de la primera de estas que esté configurada:

982 

9831. El campo `version` en el `plugin.json` del plugin

9842. El campo `version` en la entrada del marketplace del plugin en `marketplace.json`

9853. El SHA del commit de git del origen del plugin, para fuentes `github`, `url`, `git-subdir` y relative-path en un marketplace alojado en git

9864. `unknown`, para fuentes `npm` o directorios locales que no estén dentro de un repositorio de git

987 

988Esto le proporciona dos formas de versionar un plugin:

989 

990| Enfoque | Cómo | Comportamiento de actualización | Mejor para |

991| :------------------------ | :------------------------------------------------------------------------ | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :---------------------------------------------------- |

992| **Versión explícita** | Establezca `"version": "2.1.0"` en `plugin.json` | Los usuarios reciben actualizaciones solo cuando aumenta este campo. Enviar nuevos commits sin aumentarlo no tiene efecto, y `/plugin update` informa "already at the latest version". | Plugins publicados con ciclos de lanzamiento estables |

993| **Versión de commit-SHA** | Omita `version` tanto de `plugin.json` como de la entrada del marketplace | Los usuarios reciben actualizaciones en cada nuevo commit a la fuente de git del plugin | Plugins internos o de equipo en desarrollo activo |

994 

995<Warning>

996 Si establece `version` en `plugin.json`, debe aumentarlo cada vez que desee que los usuarios reciban cambios. Enviar nuevos commits por sí solo no es suficiente, porque Claude Code ve la misma cadena de versión y mantiene la copia en caché. Si está iterando rápidamente, deje `version` sin establecer para que se use el SHA del commit de git en su lugar.

997</Warning>

998 

999Si utiliza versiones explícitas, siga el [versionado semántico](https://semver.org) (`MAJOR.MINOR.PATCH`): aumente MAJOR para cambios de ruptura, MINOR para nuevas características, PATCH para correcciones de errores. Documente los cambios en un `CHANGELOG.md`.

1000 

1001***

1002 

1003## Ver también

1004 

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

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

1007* [Skills](/es/skills) - Detalles de desarrollo de skills

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

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

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

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

quickstart.md +976 −0 created

Details

1> ## Documentation Index

2> Fetch the complete documentation index at: https://code.claude.com/docs/llms.txt

3> Use this file to discover all available pages before exploring further.

4 

5# Inicio rápido

6 

7> ¡Bienvenido a Claude Code!

8 

9export const InstallConfigurator = ({defaultSurface = 'terminal'}) => {

10 const TERM = {

11 mac: {

12 label: 'macOS / Linux',

13 cmd: 'curl -fsSL https://claude.ai/install.sh | bash'

14 },

15 win: {

16 label: 'Windows'

17 },

18 brew: {

19 label: 'Homebrew',

20 cmd: 'brew install --cask claude-code'

21 },

22 winget: {

23 label: 'WinGet',

24 cmd: 'winget install Anthropic.ClaudeCode'

25 }

26 };

27 const WIN_VARIANTS = {

28 ps: 'irm https://claude.ai/install.ps1 | iex',

29 cmd: 'curl -fsSL https://claude.ai/install.cmd -o install.cmd && install.cmd && del install.cmd'

30 };

31 const TABS = [{

32 key: 'terminal',

33 label: 'Terminal'

34 }, {

35 key: 'desktop',

36 label: 'Desktop'

37 }, {

38 key: 'vscode',

39 label: 'VS Code'

40 }, {

41 key: 'jetbrains',

42 label: 'JetBrains'

43 }];

44 const ALT_TARGETS = {

45 desktop: {

46 name: 'Desktop',

47 tagline: 'The full agent in a native app for macOS and Windows.',

48 installLabel: 'Download the app',

49 installHref: 'https://claude.com/download?utm_source=claude_code&utm_medium=docs&utm_content=configurator_desktop_download',

50 guideHref: '/en/desktop-quickstart'

51 },

52 vscode: {

53 name: 'VS Code',

54 tagline: 'Review diffs, manage context, and chat without leaving your editor.',

55 installLabel: 'Install from Marketplace',

56 installHref: 'https://marketplace.visualstudio.com/items?itemName=anthropic.claude-code',

57 altCmd: 'code --install-extension anthropic.claude-code',

58 guideHref: '/en/vs-code'

59 },

60 jetbrains: {

61 name: 'JetBrains',

62 tagline: 'Native plugin for IntelliJ, PyCharm, WebStorm, and other JetBrains IDEs.',

63 installLabel: 'Install from Marketplace',

64 installHref: 'https://plugins.jetbrains.com/plugin/27310-claude-code-beta-',

65 guideHref: '/en/jetbrains'

66 }

67 };

68 const PROVIDERS = [{

69 key: 'anthropic',

70 label: 'Anthropic'

71 }, {

72 key: 'bedrock',

73 label: 'Amazon Bedrock'

74 }, {

75 key: 'foundry',

76 label: 'Microsoft Foundry'

77 }, {

78 key: 'vertex',

79 label: 'Google Vertex AI'

80 }];

81 const PROVIDER_NOTICE = {

82 bedrock: <>

83 <strong>Configure your AWS account first.</strong> Running on Bedrock

84 requires model access enabled in the AWS console and IAM credentials.{' '}

85 <a href="/en/amazon-bedrock">Bedrock setup guide →</a>

86 </>,

87 vertex: <>

88 <strong>Configure your GCP project first.</strong> Running on Vertex AI

89 requires the Vertex API enabled and a service account with the right

90 permissions.{' '}

91 <a href="/en/google-vertex-ai">Vertex setup guide →</a>

92 </>,

93 foundry: <>

94 <strong>Configure your Azure resources first.</strong> Running on

95 Microsoft Foundry requires an Azure subscription with a Foundry resource

96 and model deployments provisioned.{' '}

97 <a href="/en/microsoft-foundry">Foundry setup guide →</a>

98 </>

99 };

100 const iconCheck = (size = 14) => <svg width={size} height={size} viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="3" strokeLinecap="round" strokeLinejoin="round" aria-hidden="true">

101 <polyline points="20 6 9 17 4 12" />

102 </svg>;

103 const iconCopy = (size = 14) => <svg width={size} height={size} viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round" aria-hidden="true">

104 <rect x="9" y="9" width="13" height="13" rx="2" />

105 <path d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1" />

106 </svg>;

107 const iconArrowRight = (size = 13) => <svg width={size} height={size} viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2.5" strokeLinecap="round" strokeLinejoin="round" aria-hidden="true">

108 <line x1="5" y1="12" x2="19" y2="12" />

109 <polyline points="12 5 19 12 12 19" />

110 </svg>;

111 const iconArrowUpRight = (size = 14) => <svg width={size} height={size} viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2.5" strokeLinecap="round" strokeLinejoin="round" aria-hidden="true">

112 <line x1="7" y1="17" x2="17" y2="7" />

113 <polyline points="7 7 17 7 17 17" />

114 </svg>;

115 const iconInfo = (size = 16) => <svg width={size} height={size} viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round" aria-hidden="true">

116 <circle cx="12" cy="12" r="10" />

117 <line x1="12" y1="16" x2="12" y2="12" />

118 <line x1="12" y1="8" x2="12.01" y2="8" />

119 </svg>;

120 const [target, setTarget] = useState(defaultSurface);

121 const [team, setTeam] = useState(false);

122 const [provider, setProvider] = useState('anthropic');

123 const [pkg, setPkg] = useState(() => (/Win/).test(navigator.userAgent) ? 'win' : 'mac');

124 const [winCmd, setWinCmd] = useState(false);

125 const [copied, setCopied] = useState(null);

126 const copyTimer = useRef(null);

127 const handleCopy = async (text, key) => {

128 try {

129 await navigator.clipboard.writeText(text);

130 } catch {

131 const ta = document.createElement('textarea');

132 ta.value = text;

133 document.body.appendChild(ta);

134 ta.select();

135 document.execCommand('copy');

136 document.body.removeChild(ta);

137 }

138 clearTimeout(copyTimer.current);

139 setCopied(key);

140 copyTimer.current = setTimeout(() => setCopied(null), 1800);

141 };

142 const cardBodyCmd = (cmd, prompt) => {

143 const on = copied === 'term';

144 return <div className="cc-ic-card-body">

145 <span className="cc-ic-prompt">{prompt || '$'}</span>

146 <div className="cc-ic-cmd">{cmd}</div>

147 <button type="button" className={'cc-ic-copy' + (on ? ' cc-ic-copied' : '')} onClick={() => handleCopy(cmd, 'term')}>

148 {on ? iconCheck(13) : iconCopy(13)}

149 <span>{on ? 'Copied' : 'Copy'}</span>

150 </button>

151 </div>;

152 };

153 const isWinInstaller = pkg === 'win';

154 const isWinPrompt = pkg === 'win' || pkg === 'winget';

155 const terminalCmd = isWinInstaller ? WIN_VARIANTS[winCmd ? 'cmd' : 'ps'] : TERM[pkg].cmd;

156 const alt = ALT_TARGETS[target];

157 const showNotice = team && provider !== 'anthropic';

158 const STYLES = `

159.cc-ic {

160 --ic-slate: #141413;

161 --ic-clay: #d97757;

162 --ic-clay-deep: #c6613f;

163 --ic-gray-000: #ffffff;

164 --ic-gray-150: #f0eee6;

165 --ic-gray-550: #73726c;

166 --ic-gray-700: #3d3d3a;

167 --ic-border-subtle: rgba(31, 30, 29, 0.08);

168 --ic-border-default: rgba(31, 30, 29, 0.15);

169 --ic-border-strong: rgba(31, 30, 29, 0.3);

170 --ic-font-mono: ui-monospace, SFMono-Regular, Menlo, Monaco, 'Courier New', monospace;

171 font-family: 'Anthropic Sans', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;

172 font-size: 14px; line-height: 1.5; color: var(--ic-slate);

173 margin: 8px 0 32px;

174}

175.dark .cc-ic {

176 --ic-slate: #f0eee6;

177 --ic-gray-000: #262624;

178 --ic-gray-150: #1f1e1d;

179 --ic-gray-550: #91908a;

180 --ic-gray-700: #bfbdb4;

181 --ic-border-subtle: rgba(240, 238, 230, 0.08);

182 --ic-border-default: rgba(240, 238, 230, 0.14);

183 --ic-border-strong: rgba(240, 238, 230, 0.28);

184}

185.dark .cc-ic-check { background: transparent; }

186.dark .cc-ic-card { border: 0.5px solid var(--ic-border-subtle); }

187.dark .cc-ic-p-pill.cc-ic-active { box-shadow: 0 1px 2px rgba(0, 0, 0, 0.3); }

188.cc-ic *, .cc-ic *::before, .cc-ic *::after { box-sizing: border-box; }

189.cc-ic a { text-decoration: none; }

190.cc-ic a:not([class]) { color: inherit; }

191.cc-ic button { font-family: inherit; cursor: pointer; }

192 

193.cc-ic-tab-strip {

194 display: inline-flex; gap: 2px;

195 padding: 4px; background: var(--ic-gray-150);

196 border-radius: 10px; overflow-x: auto;

197 max-width: 100%;

198}

199.cc-ic-tab {

200 appearance: none; background: none; border: none;

201 padding: 10px 18px; font-size: 15px; font-weight: 430;

202 color: var(--ic-gray-550); border-radius: 7px;

203 white-space: nowrap;

204 transition: color 0.12s, background-color 0.12s;

205}

206.cc-ic-tab:hover { color: var(--ic-gray-700); }

207.cc-ic-tab.cc-ic-active {

208 color: var(--ic-slate); font-weight: 500;

209 background: var(--ic-gray-000);

210 box-shadow: 0 1px 3px rgba(0, 0, 0, 0.08);

211}

212.dark .cc-ic-tab.cc-ic-active { box-shadow: 0 1px 3px rgba(0, 0, 0, 0.4); }

213 

214.cc-ic-team-wrap { padding: 16px 0 20px; }

215.cc-ic-team-toggle {

216 display: flex; align-items: center; gap: 12px; font-family: inherit;

217 padding: 12px 16px; font-size: 14px; font-weight: 430;

218 color: var(--ic-gray-700); cursor: pointer; user-select: none;

219 width: fit-content; background: var(--ic-gray-150);

220 border: 0.5px solid var(--ic-border-subtle); border-radius: 8px;

221 transition: border-color 0.15s;

222}

223.cc-ic-team-toggle:hover { border-color: var(--ic-border-default); }

224.cc-ic-team-toggle.cc-ic-checked {

225 background: rgba(217, 119, 87, 0.08);

226 border-color: rgba(217, 119, 87, 0.25);

227}

228.cc-ic-check {

229 width: 16px; height: 16px;

230 border: 1px solid var(--ic-border-strong); border-radius: 4px;

231 background: var(--ic-gray-000);

232 display: flex; align-items: center; justify-content: center;

233 flex-shrink: 0;

234}

235.cc-ic-check svg { color: #fff; display: none; }

236.cc-ic-team-toggle.cc-ic-checked .cc-ic-check { background: var(--ic-clay-deep); border-color: var(--ic-clay-deep); }

237.cc-ic-team-toggle.cc-ic-checked .cc-ic-check svg { display: block; }

238 

239.cc-ic-team-reveal { display: flex; flex-direction: column; gap: 12px; margin-bottom: 16px; }

240.cc-ic-sales {

241 display: flex; align-items: center; justify-content: space-between;

242 gap: 16px; padding: 14px 16px;

243 background: var(--ic-gray-000); border: 0.5px solid var(--ic-border-default);

244 border-radius: 8px; flex-wrap: wrap;

245}

246.cc-ic-sales-text { font-size: 13px; color: var(--ic-gray-700); line-height: 1.5; flex: 1; min-width: 200px; }

247.cc-ic-sales-text strong { font-weight: 550; color: var(--ic-slate); }

248.cc-ic-sales-actions { display: flex; align-items: center; gap: 8px; flex-shrink: 0; }

249.cc-ic-btn-clay {

250 display: inline-flex; align-items: center; gap: 8px;

251 background: var(--ic-clay-deep); color: #fff; border: none;

252 border-radius: 8px; padding: 8px 14px;

253 font-size: 13px; font-weight: 500;

254 transition: background-color 0.15s; white-space: nowrap;

255}

256.cc-ic-btn-clay:hover { background: var(--ic-clay); }

257.cc-ic-btn-ghost {

258 display: inline-flex; align-items: center; gap: 8px;

259 background: transparent; color: var(--ic-gray-700);

260 border: 0.5px solid var(--ic-border-default);

261 border-radius: 8px; padding: 8px 14px;

262 font-size: 13px; font-weight: 500;

263}

264.cc-ic-btn-ghost:hover { background: rgba(0, 0, 0, 0.04); }

265 

266.cc-ic-provider-bar {

267 display: flex; align-items: center; gap: 12px;

268 padding: 14px 16px; background: var(--ic-gray-150);

269 border-radius: 8px; font-size: 13px; flex-wrap: wrap;

270}

271.cc-ic-provider-bar .cc-ic-label { color: var(--ic-gray-550); flex-shrink: 0; }

272.cc-ic-provider-pills { display: flex; gap: 4px; flex-wrap: wrap; }

273.cc-ic-p-pill {

274 appearance: none; border: none; background: transparent;

275 padding: 6px 12px; border-radius: 6px;

276 font-size: 13px; font-weight: 430; color: var(--ic-gray-700);

277 white-space: nowrap;

278}

279.cc-ic-p-pill:hover { background: rgba(0, 0, 0, 0.04); }

280.cc-ic-p-pill.cc-ic-active {

281 background: var(--ic-gray-000); color: var(--ic-slate);

282 font-weight: 500; box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);

283}

284.cc-ic-provider-notice {

285 display: flex; padding: 16px 18px;

286 background: var(--ic-gray-000); border: 0.5px solid var(--ic-border-default);

287 border-radius: 8px; gap: 14px; align-items: flex-start;

288}

289.cc-ic-provider-notice > svg { color: var(--ic-gray-550); margin-top: 2px; flex-shrink: 0; }

290.cc-ic-provider-notice-body { font-size: 14px; line-height: 1.55; color: var(--ic-gray-700); }

291.cc-ic-provider-notice-body strong { font-weight: 550; color: var(--ic-slate); }

292.cc-ic-provider-notice-body a { color: var(--ic-clay-deep); font-weight: 500; }

293.cc-ic-provider-notice-body a:hover { text-decoration: underline; }

294 

295.cc-ic-card { background: #141413; border-radius: 12px; overflow: hidden; }

296.cc-ic-subtabs {

297 display: flex; align-items: center;

298 background: #1a1918;

299 border-bottom: 0.5px solid rgba(255, 255, 255, 0.08);

300 padding: 0 8px; overflow-x: auto;

301}

302.cc-ic-subtab {

303 appearance: none; background: none; border: none;

304 padding: 12px 16px; font-size: 12px;

305 color: rgba(255, 255, 255, 0.5);

306 position: relative; white-space: nowrap;

307}

308.cc-ic-subtab:hover { color: rgba(255, 255, 255, 0.75); }

309.cc-ic-subtab.cc-ic-active { color: #fff; }

310.cc-ic-subtab.cc-ic-active::after {

311 content: ''; position: absolute;

312 left: 12px; right: 12px; bottom: -0.5px;

313 height: 2px; background: var(--ic-clay);

314}

315.cc-ic-shell-switch {

316 display: inline-flex; gap: 2px;

317 margin: 14px 26px 0; padding: 3px;

318 background: rgba(255, 255, 255, 0.06);

319 border: 0.5px solid rgba(255, 255, 255, 0.08);

320 border-radius: 8px;

321 font-family: inherit;

322}

323.cc-ic-shell-option {

324 font: inherit; font-size: 12px; font-weight: 500;

325 padding: 5px 12px; border-radius: 6px;

326 background: transparent; border: none;

327 color: rgba(255, 255, 255, 0.55);

328 cursor: pointer; user-select: none; white-space: nowrap;

329 transition: color 120ms ease, background-color 120ms ease;

330}

331.cc-ic-shell-option:hover { color: rgba(255, 255, 255, 0.85); }

332.cc-ic-shell-option.cc-ic-active {

333 background: rgba(255, 255, 255, 0.12);

334 color: #fff;

335 box-shadow: 0 1px 2px rgba(0, 0, 0, 0.25);

336}

337 

338.cc-ic-card-body { padding: 24px 26px; display: flex; align-items: flex-start; gap: 14px; }

339.cc-ic-prompt {

340 color: var(--ic-clay); font-family: var(--ic-font-mono);

341 font-size: 17px; user-select: none; padding-top: 2px;

342}

343.cc-ic-cmd {

344 flex: 1; font-family: var(--ic-font-mono);

345 font-size: 17px; color: #f0eee6;

346 line-height: 1.55; white-space: pre-wrap; word-break: break-word;

347}

348.cc-ic-copy {

349 display: inline-flex; align-items: center; gap: 6px;

350 background: rgba(255, 255, 255, 0.08);

351 border: 0.5px solid rgba(255, 255, 255, 0.12);

352 color: rgba(255, 255, 255, 0.85);

353 padding: 7px 13px; border-radius: 8px;

354 font-size: 13px; font-weight: 500; flex-shrink: 0;

355}

356.cc-ic-copy:hover { background: rgba(255, 255, 255, 0.14); }

357.cc-ic-copy.cc-ic-copied { background: var(--ic-clay-deep); border-color: var(--ic-clay-deep); color: #fff; }

358 

359.cc-ic-below {

360 margin-top: 12px; font-size: 13px; color: var(--ic-gray-550);

361 display: flex; gap: 16px; flex-wrap: wrap; align-items: baseline;

362}

363.cc-ic-below a { color: var(--ic-gray-700); border-bottom: 0.5px solid var(--ic-border-default); }

364.cc-ic-below a:hover { color: var(--ic-clay-deep); border-bottom-color: var(--ic-clay-deep); }

365.cc-ic-handoff {

366 padding: 22px 24px;

367 background: linear-gradient(180deg, #faf9f4 0%, #f3f1e9 100%);

368 border: 0.5px solid var(--ic-border-default);

369 border-radius: 12px;

370 box-shadow: 0 1px 2px rgba(31, 30, 29, 0.04), 0 6px 16px -4px rgba(31, 30, 29, 0.06);

371}

372.dark .cc-ic-handoff {

373 background: linear-gradient(180deg, #262624 0%, #1f1e1d 100%);

374 box-shadow: 0 1px 2px rgba(0, 0, 0, 0.3), 0 6px 16px -4px rgba(0, 0, 0, 0.4);

375}

376.cc-ic-handoff-title {

377 font-size: 16px; font-weight: 550; color: var(--ic-slate);

378 letter-spacing: -0.01em; margin-bottom: 4px;

379}

380.cc-ic-handoff-sub {

381 font-size: 14px; line-height: 1.5; color: var(--ic-gray-700);

382 margin-bottom: 18px;

383}

384.cc-ic-handoff-actions { display: flex; gap: 10px; flex-wrap: wrap; }

385.cc-ic-handoff-alt {

386 margin-top: 12px; font-size: 12px; color: var(--ic-gray-550);

387}

388.cc-ic-handoff-alt code {

389 font-family: var(--ic-font-mono); font-size: 11px;

390 background: var(--ic-gray-150); padding: 2px 6px;

391 border-radius: 4px; color: var(--ic-gray-700);

392}

393.cc-ic-copy-sm {

394 appearance: none; border: none;

395 display: inline-flex; align-items: center; justify-content: center;

396 width: 22px; height: 22px;

397 margin-left: 4px; vertical-align: middle;

398 background: var(--ic-gray-150); color: var(--ic-gray-550);

399 border-radius: 4px;

400 transition: color 0.1s, background-color 0.1s;

401}

402.cc-ic-copy-sm:hover { color: var(--ic-gray-700); background: var(--ic-border-default); }

403.cc-ic-copy-sm.cc-ic-copied { background: var(--ic-clay-deep); color: #fff; }

404 

405@media (max-width: 720px) {

406 .cc-ic-tab { padding: 12px 14px; font-size: 14px; }

407 .cc-ic-sales-actions { width: 100%; }

408 .cc-ic-card-body { padding: 20px; }

409 .cc-ic-cmd { font-size: 15px; }

410}

411`;

412 return <div className="cc-ic not-prose">

413 <style>{STYLES}</style>

414 

415 {}

416 <div className="cc-ic-tab-strip" role="tablist">

417 {TABS.map(t => <button key={t.key} type="button" role="tab" aria-selected={target === t.key} className={'cc-ic-tab' + (target === t.key ? ' cc-ic-active' : '')} onClick={() => setTarget(t.key)}>

418 {t.label}

419 </button>)}

420 </div>

421 

422 {}

423 <div className="cc-ic-team-wrap">

424 <button type="button" role="switch" aria-checked={team} className={'cc-ic-team-toggle' + (team ? ' cc-ic-checked' : '')} onClick={() => setTeam(!team)}>

425 <span className="cc-ic-check">{iconCheck(11)}</span>

426 <span>

427 I’m buying for a team or company (SSO, AWS/Azure/GCP, central billing)

428 </span>

429 </button>

430 </div>

431 

432 {}

433 {team && <div className="cc-ic-team-reveal">

434 <div className="cc-ic-sales">

435 <div className="cc-ic-sales-text">

436 <strong>Set up your team:</strong> self-serve or talk to sales.

437 </div>

438 <div className="cc-ic-sales-actions">

439 <a href="https://claude.ai/upgrade?initialPlanType=team&amp;utm_source=claude_code&amp;utm_medium=docs&amp;utm_content=configurator_team_get_started" className="cc-ic-btn-ghost">

440 Get started

441 </a>

442 <a href="https://www.anthropic.com/contact-sales?utm_source=claude_code&amp;utm_medium=docs&amp;utm_content=configurator_team_contact_sales" className="cc-ic-btn-clay">

443 Contact sales {iconArrowRight()}

444 </a>

445 </div>

446 </div>

447 

448 <div className="cc-ic-provider-bar">

449 <span className="cc-ic-label">Run on</span>

450 <div className="cc-ic-provider-pills" role="radiogroup" aria-label="Provider">

451 {PROVIDERS.map(p => <button key={p.key} type="button" role="radio" aria-checked={provider === p.key} className={'cc-ic-p-pill' + (provider === p.key ? ' cc-ic-active' : '')} onClick={() => setProvider(p.key)}>

452 {p.label}

453 </button>)}

454 </div>

455 </div>

456 

457 {showNotice && <div className="cc-ic-provider-notice">

458 {iconInfo()}

459 <div className="cc-ic-provider-notice-body">

460 {PROVIDER_NOTICE[provider]}

461 </div>

462 </div>}

463 </div>}

464 

465 {}

466 {target === 'terminal' && <div className="cc-ic-card">

467 <div className="cc-ic-subtabs" role="tablist" aria-label="Install method">

468 {Object.keys(TERM).map(k => <button key={k} type="button" role="tab" aria-selected={pkg === k} className={'cc-ic-subtab' + (pkg === k ? ' cc-ic-active' : '')} onClick={() => setPkg(k)}>

469 {TERM[k].label}

470 </button>)}

471 </div>

472 {isWinInstaller && <div className="cc-ic-shell-switch" role="tablist" aria-label="Shell">

473 {[{

474 k: 'ps',

475 label: 'PowerShell'

476 }, {

477 k: 'cmd',

478 label: 'CMD'

479 }].map(({k, label}) => {

480 const active = k === 'cmd' === winCmd;

481 return <button key={k} type="button" role="tab" aria-selected={active} className={'cc-ic-shell-option' + (active ? ' cc-ic-active' : '')} onClick={() => setWinCmd(k === 'cmd')}>

482 {label}

483 </button>;

484 })}

485 </div>}

486 {cardBodyCmd(terminalCmd, isWinPrompt ? '>' : '$')}

487 </div>}

488 

489 {}

490 {target === 'terminal' && <div className="cc-ic-below">

491 {isWinInstaller && <span>

492 <a href="https://git-scm.com/downloads/win" target="_blank" rel="noopener">

493 Git for Windows

494 </a>{' '}

495 recommended. PowerShell is used if Git Bash is absent.

496 </span>}

497 {(pkg === 'brew' || pkg === 'winget') && <span>

498 Does not auto-update. Run{' '}

499 <code>{pkg === 'brew' ? 'brew upgrade claude-code' : 'winget upgrade Anthropic.ClaudeCode'}</code>{' '}

500 periodically.

501 </span>}

502 <a href="/en/troubleshoot-install">Installation troubleshooting</a>

503 </div>}

504 

505 {alt && <div className="cc-ic-handoff">

506 <div className="cc-ic-handoff-title">Claude Code for {alt.name}</div>

507 <div className="cc-ic-handoff-sub">{alt.tagline}</div>

508 <div className="cc-ic-handoff-actions">

509 <a href={alt.installHref} className="cc-ic-btn-clay" {...alt.installHref.startsWith('http') ? {

510 target: '_blank',

511 rel: 'noopener'

512 } : {}}>

513 {alt.installLabel} {iconArrowUpRight(13)}

514 </a>

515 <a href={alt.guideHref} className="cc-ic-btn-ghost">

516 {alt.name} guide {iconArrowRight(12)}

517 </a>

518 </div>

519 {alt.altCmd && <div className="cc-ic-handoff-alt">

520 or run <code>{alt.altCmd}</code>

521 <button type="button" className={'cc-ic-copy-sm' + (copied === 'alt' ? ' cc-ic-copied' : '')} onClick={() => handleCopy(alt.altCmd, 'alt')} aria-label="Copy command">

522 {copied === 'alt' ? iconCheck(11) : iconCopy(11)}

523 </button>

524 </div>}

525 </div>}

526 </div>;

527};

528 

529export const Experiment = ({flag, treatment, children}) => {

530 const VID_KEY = 'exp_vid';

531 const CONSENT_COUNTRIES = new Set(['AT', 'BE', 'BG', 'HR', 'CY', 'CZ', 'DK', 'EE', 'FI', 'FR', 'DE', 'GR', 'HU', 'IE', 'IT', 'LV', 'LT', 'LU', 'MT', 'NL', 'PL', 'PT', 'RO', 'SK', 'SI', 'ES', 'SE', 'RE', 'GP', 'MQ', 'GF', 'YT', 'BL', 'MF', 'PM', 'WF', 'PF', 'NC', 'AW', 'CW', 'SX', 'FO', 'GL', 'AX', 'GB', 'UK', 'AI', 'BM', 'IO', 'VG', 'KY', 'FK', 'GI', 'MS', 'PN', 'SH', 'TC', 'GG', 'JE', 'IM', 'CA', 'BR', 'IN']);

532 const fnv1a = s => {

533 let h = 0x811c9dc5;

534 for (let i = 0; i < s.length; i++) {

535 h ^= s.charCodeAt(i);

536 h += (h << 1) + (h << 4) + (h << 7) + (h << 8) + (h << 24);

537 }

538 return h >>> 0;

539 };

540 const bucket = (seed, vid) => fnv1a(fnv1a(seed + vid) + '') % 10000 < 5000 ? 'control' : 'treatment';

541 const [decision] = useState(() => {

542 const params = new URLSearchParams(location.search);

543 const preBucketed = document.documentElement.dataset['gb_' + flag.replace(/-/g, '_')];

544 const force = params.get('gb-force');

545 if (force) {

546 for (const p of force.split(',')) {

547 const [k, v] = p.split(':');

548 if (k === flag) return {

549 variant: v || 'treatment',

550 track: false

551 };

552 }

553 }

554 if (navigator.globalPrivacyControl) {

555 return {

556 variant: 'control',

557 track: false

558 };

559 }

560 const prefsMatch = document.cookie.match(/(?:^|; )anthropic-consent-preferences=([^;]+)/);

561 if (prefsMatch) {

562 try {

563 if (JSON.parse(decodeURIComponent(prefsMatch[1])).analytics !== true) {

564 return {

565 variant: 'control',

566 track: false

567 };

568 }

569 } catch {

570 return {

571 variant: 'control',

572 track: false

573 };

574 }

575 } else {

576 const country = params.get('country')?.toUpperCase() || (document.cookie.match(/(?:^|; )cf_geo=([A-Z]{2})/) || [])[1];

577 if (!country || CONSENT_COUNTRIES.has(country)) {

578 return {

579 variant: 'control',

580 track: false

581 };

582 }

583 }

584 let vid;

585 try {

586 const ajsMatch = document.cookie.match(/(?:^|; )ajs_anonymous_id=([^;]+)/);

587 if (ajsMatch) {

588 vid = decodeURIComponent(ajsMatch[1]).replace(/^"|"$/g, '');

589 } else {

590 vid = localStorage.getItem(VID_KEY);

591 if (!vid) {

592 vid = crypto.randomUUID();

593 }

594 document.cookie = `ajs_anonymous_id=${vid}; domain=.claude.com; path=/; Secure; SameSite=Lax; max-age=31536000`;

595 }

596 try {

597 localStorage.setItem(VID_KEY, vid);

598 } catch {}

599 } catch {

600 return {

601 variant: 'control',

602 track: false

603 };

604 }

605 const variant = preBucketed === '1' ? 'treatment' : preBucketed === '0' ? 'control' : bucket(flag, vid);

606 return {

607 variant,

608 track: true,

609 vid

610 };

611 });

612 useEffect(() => {

613 if (!decision.track) return;

614 fetch('https://api.anthropic.com/api/event_logging/v2/batch', {

615 method: 'POST',

616 headers: {

617 'Content-Type': 'application/json',

618 'x-service-name': 'claude_code_docs'

619 },

620 body: JSON.stringify({

621 events: [{

622 event_type: 'GrowthbookExperimentEvent',

623 event_data: {

624 device_id: decision.vid,

625 anonymous_id: decision.vid,

626 timestamp: new Date().toISOString(),

627 experiment_id: flag,

628 variation_id: decision.variant === 'treatment' ? 1 : 0,

629 environment: 'production'

630 }

631 }]

632 }),

633 keepalive: true

634 }).catch(() => {});

635 }, []);

636 return decision.variant === 'treatment' ? treatment : children;

637};

638 

639Esta guía de inicio rápido le permitirá usar asistencia de codificación impulsada por IA en pocos minutos. Al final, comprenderá cómo usar Claude Code para tareas comunes de desarrollo.

640 

641<Experiment flag="quickstart-install-configurator" treatment={<InstallConfigurator />} />

642 

643## Antes de comenzar

644 

645Asegúrese de tener:

646 

647* Una terminal o símbolo del sistema abiertos

648 * Si nunca ha usado la terminal antes, consulte la [guía de terminal](/es/terminal-guide)

649* Un proyecto de código con el que trabajar

650* Una [suscripción a Claude](https://claude.com/pricing?utm_source=claude_code\&utm_medium=docs\&utm_content=quickstart_prereq) (Pro, Max, Teams o Enterprise), una cuenta de [Claude Console](https://console.anthropic.com/), o acceso a través de un [proveedor de nube compatible](/es/third-party-integrations)

651 

652<Note>

653 Esta guía cubre la CLI de terminal. Claude Code también está disponible en la [web](https://claude.ai/code), como una [aplicación de escritorio](/es/desktop), en [VS Code](/es/vs-code) e [IDEs de JetBrains](/es/jetbrains), en [Slack](/es/slack), y en CI/CD con [GitHub Actions](/es/github-actions) y [GitLab](/es/gitlab-ci-cd). Consulte [todas las interfaces](/es/overview#use-claude-code-everywhere).

654</Note>

655 

656## Paso 1: Instalar Claude Code

657 

658To install Claude Code, use one of the following methods:

659 

660<Tabs>

661 <Tab title="Native Install (Recommended)">

662 **macOS, Linux, WSL:**

663 

664 ```bash theme={null}

665 curl -fsSL https://claude.ai/install.sh | bash

666 ```

667 

668 **Windows PowerShell:**

669 

670 ```powershell theme={null}

671 irm https://claude.ai/install.ps1 | iex

672 ```

673 

674 **Windows CMD:**

675 

676 ```batch theme={null}

677 curl -fsSL https://claude.ai/install.cmd -o install.cmd && install.cmd && del install.cmd

678 ```

679 

680 If you see `The token '&&' is not a valid statement separator`, you're in PowerShell, not CMD. If you see `'irm' is not recognized as an internal or external command`, you're in CMD, not PowerShell. Your prompt shows `PS C:\` when you're in PowerShell and `C:\` without the `PS` when you're in CMD.

681 

682 [Git for Windows](https://git-scm.com/downloads/win) is recommended on native Windows so Claude Code can use the Bash tool. If Git for Windows is not installed, Claude Code uses PowerShell as the shell tool instead. WSL setups do not need Git for Windows.

683 

684 <Info>

685 Native installations automatically update in the background to keep you on the latest version.

686 </Info>

687 </Tab>

688 

689 <Tab title="Homebrew">

690 ```bash theme={null}

691 brew install --cask claude-code

692 ```

693 

694 Homebrew offers two casks. `claude-code` tracks the stable release channel, which is typically about a week behind and skips releases with major regressions. `claude-code@latest` tracks the latest channel and receives new versions as soon as they ship.

695 

696 <Info>

697 Homebrew installations do not auto-update. Run `brew upgrade claude-code` or `brew upgrade claude-code@latest`, depending on which cask you installed, to get the latest features and security fixes.

698 </Info>

699 </Tab>

700 

701 <Tab title="WinGet">

702 ```powershell theme={null}

703 winget install Anthropic.ClaudeCode

704 ```

705 

706 <Info>

707 WinGet installations do not auto-update. Run `winget upgrade Anthropic.ClaudeCode` periodically to get the latest features and security fixes.

708 </Info>

709 </Tab>

710</Tabs>

711 

712You can also install with [apt, dnf, or apk](/en/setup#install-with-linux-package-managers) on Debian, Fedora, RHEL, and Alpine.

713 

714## Paso 2: Inicie sesión en su cuenta

715 

716Claude Code requiere una cuenta para usarse. Cuando inicie una sesión interactiva con el comando `claude`, deberá iniciar sesión:

717 

718```bash theme={null}

719claude

720# Se le pedirá que inicie sesión en el primer uso

721```

722 

723```bash theme={null}

724/login

725# Siga las indicaciones para iniciar sesión con su cuenta

726```

727 

728Puede iniciar sesión usando cualquiera de estos tipos de cuenta:

729 

730* [Claude Pro, Max, Teams o Enterprise](https://claude.com/pricing?utm_source=claude_code\&utm_medium=docs\&utm_content=quickstart_login) (recomendado)

731* [Claude Console](https://console.anthropic.com/) (acceso a API con créditos prepagados). En el primer inicio de sesión, se crea automáticamente un espacio de trabajo "Claude Code" en la Console para el seguimiento centralizado de costos.

732* [Amazon Bedrock, Google Vertex AI o Microsoft Foundry](/es/third-party-integrations) (proveedores de nube empresariales)

733 

734Una vez que haya iniciado sesión, sus credenciales se almacenan y no necesitará iniciar sesión nuevamente. Para cambiar de cuenta más tarde, use el comando `/login`.

735 

736## Paso 3: Inicie su primera sesión

737 

738Abra su terminal en cualquier directorio de proyecto e inicie Claude Code:

739 

740```bash theme={null}

741cd /path/to/your/project

742claude

743```

744 

745Verá la pantalla de bienvenida de Claude Code con la información de su sesión, conversaciones recientes y las últimas actualizaciones. Escriba `/help` para ver los comandos disponibles o `/resume` para continuar una conversación anterior.

746 

747<Tip>

748 Después de iniciar sesión (Paso 2), sus credenciales se almacenan en su sistema. Obtenga más información en [Gestión de credenciales](/es/authentication#credential-management).

749</Tip>

750 

751## Paso 4: Haga su primera pregunta

752 

753Comencemos por entender su base de código. Intente uno de estos comandos:

754 

755```text theme={null}

756¿qué hace este proyecto?

757```

758 

759Claude analizará sus archivos y proporcionará un resumen. También puede hacer preguntas más específicas:

760 

761```text theme={null}

762¿qué tecnologías usa este proyecto?

763```

764 

765```text theme={null}

766¿dónde está el punto de entrada principal?

767```

768 

769```text theme={null}

770explique la estructura de carpetas

771```

772 

773También puede preguntarle a Claude sobre sus propias capacidades:

774 

775```text theme={null}

776¿qué puede hacer Claude Code?

777```

778 

779```text theme={null}

780¿cómo creo skills personalizados en Claude Code?

781```

782 

783```text theme={null}

784¿puede Claude Code trabajar con Docker?

785```

786 

787<Note>

788 Claude Code lee los archivos de su proyecto según sea necesario. No tiene que agregar contexto manualmente.

789</Note>

790 

791## Paso 5: Realice su primer cambio de código

792 

793Ahora hagamos que Claude Code haga algo de codificación real. Intente una tarea simple:

794 

795```text theme={null}

796agrega una función hello world al archivo principal

797```

798 

799Claude Code hará lo siguiente:

800 

8011. Encontrará el archivo apropiado

8022. Le mostrará los cambios propuestos

8033. Le pedirá su aprobación

8044. Realizará la edición

805 

806<Note>

807 Claude Code siempre pide permiso antes de modificar archivos. Puede aprobar cambios individuales o habilitar el modo "Aceptar todo" para una sesión.

808</Note>

809 

810## Paso 6: Use Git con Claude Code

811 

812Claude Code hace que las operaciones de Git sean conversacionales:

813 

814```text theme={null}

815¿qué archivos he cambiado?

816```

817 

818```text theme={null}

819confirma mis cambios con un mensaje descriptivo

820```

821 

822También puede solicitar operaciones de Git más complejas:

823 

824```text theme={null}

825crea una nueva rama llamada feature/quickstart

826```

827 

828```text theme={null}

829muéstrame los últimos 5 commits

830```

831 

832```text theme={null}

833ayúdame a resolver conflictos de fusión

834```

835 

836## Paso 7: Corrija un error o agregue una función

837 

838Claude es competente en depuración e implementación de funciones.

839 

840Describa lo que desea en lenguaje natural:

841 

842```text theme={null}

843agrega validación de entrada al formulario de registro de usuarios

844```

845 

846O corrija problemas existentes:

847 

848```text theme={null}

849hay un error donde los usuarios pueden enviar formularios vacíos - corrígelo

850```

851 

852Claude Code hará lo siguiente:

853 

854* Localizará el código relevante

855* Comprenderá el contexto

856* Implementará una solución

857* Ejecutará pruebas si están disponibles

858 

859## Paso 8: Pruebe otros flujos de trabajo comunes

860 

861Hay varias formas de trabajar con Claude:

862 

863**Refactorizar código**

864 

865```text theme={null}

866refactoriza el módulo de autenticación para usar async/await en lugar de callbacks

867```

868 

869**Escribir pruebas**

870 

871```text theme={null}

872escribe pruebas unitarias para las funciones de calculadora

873```

874 

875**Actualizar documentación**

876 

877```text theme={null}

878actualiza el README con instrucciones de instalación

879```

880 

881**Revisión de código**

882 

883```text theme={null}

884revisa mis cambios y sugiere mejoras

885```

886 

887<Tip>

888 Hable con Claude como lo haría con un colega útil. Describa lo que desea lograr y le ayudará a llegar allí.

889</Tip>

890 

891## Comandos esenciales

892 

893Aquí están los comandos más importantes para el uso diario:

894 

895| Comando | Qué hace | Ejemplo |

896| ------------------- | ------------------------------------------------------------- | ----------------------------------- |

897| `claude` | Inicia el modo interactivo | `claude` |

898| `claude "task"` | Ejecuta una tarea única | `claude "fix the build error"` |

899| `claude -p "query"` | Ejecuta una consulta única y luego sale | `claude -p "explain this function"` |

900| `claude -c` | Continúa la conversación más reciente en el directorio actual | `claude -c` |

901| `claude -r` | Reanuda una conversación anterior | `claude -r` |

902| `claude commit` | Crea un commit de Git | `claude commit` |

903| `/clear` | Borra el historial de conversación | `/clear` |

904| `/help` | Muestra los comandos disponibles | `/help` |

905| `exit` o Ctrl+C | Salir de Claude Code | `exit` |

906 

907Consulte la [referencia de CLI](/es/cli-reference) para obtener una lista completa de comandos.

908 

909## Consejos profesionales para principiantes

910 

911Para más información, consulte [mejores prácticas](/es/best-practices) y [flujos de trabajo comunes](/es/common-workflows).

912 

913<AccordionGroup>

914 <Accordion title="Sea específico con sus solicitudes">

915 En lugar de: "corrige el error"

916 

917 Intente: "corrige el error de inicio de sesión donde los usuarios ven una pantalla en blanco después de ingresar credenciales incorrectas"

918 </Accordion>

919 

920 <Accordion title="Use instrucciones paso a paso">

921 Divida tareas complejas en pasos:

922 

923 ```text theme={null}

924 1. crea una nueva tabla de base de datos para perfiles de usuario

925 2. crea un endpoint de API para obtener y actualizar perfiles de usuario

926 3. construye una página web que permita a los usuarios ver y editar su información

927 ```

928 </Accordion>

929 

930 <Accordion title="Deje que Claude explore primero">

931 Antes de hacer cambios, deje que Claude entienda su código:

932 

933 ```text theme={null}

934 analiza el esquema de la base de datos

935 ```

936 

937 ```text theme={null}

938 construye un panel que muestre los productos que nuestros clientes del Reino Unido devuelven con más frecuencia

939 ```

940 </Accordion>

941 

942 <Accordion title="Ahorre tiempo con atajos de teclado">

943 * Presione `?` para ver todos los atajos de teclado disponibles

944 * Use Tab para completar comandos

945 * Presione ↑ para el historial de comandos

946 * Escriba `/` para ver todos los comandos y skills

947 </Accordion>

948</AccordionGroup>

949 

950## ¿Qué sigue?

951 

952Ahora que ha aprendido lo básico, explore funciones más avanzadas:

953 

954<CardGroup cols={2}>

955 <Card title="Cómo funciona Claude Code" icon="microchip" href="/es/how-claude-code-works">

956 Comprenda el bucle de agente, las herramientas integradas y cómo Claude Code interactúa con su proyecto

957 </Card>

958 

959 <Card title="Mejores prácticas" icon="star" href="/es/best-practices">

960 Obtenga mejores resultados con indicaciones efectivas y configuración de proyecto

961 </Card>

962 

963 <Card title="Flujos de trabajo comunes" icon="graduation-cap" href="/es/common-workflows">

964 Guías paso a paso para tareas comunes

965 </Card>

966 

967 <Card title="Extiende Claude Code" icon="puzzle-piece" href="/es/features-overview">

968 Personalice con CLAUDE.md, skills, hooks, MCP y más

969 </Card>

970</CardGroup>

971 

972## Obtener ayuda

973 

974* **En Claude Code**: Escriba `/help` o pregunte "¿cómo..."

975* **Documentación**: ¡Está aquí! Explore otras guías

976* **Comunidad**: Únase a nuestro [Discord](https://www.anthropic.com/discord) para consejos y soporte

remote-control.md +259 −0 created

Details

1> ## Documentation Index

2> Fetch the complete documentation index at: https://code.claude.com/docs/llms.txt

3> Use this file to discover all available pages before exploring further.

4 

5# Continúe sesiones locales desde cualquier dispositivo con Remote Control

6 

7> Continúe una sesión local de Claude Code desde su teléfono, tableta o cualquier navegador usando Remote Control. Funciona con claude.ai/code y la aplicación móvil de Claude.

8 

9<Note>

10 Remote Control está en vista previa de investigación y está disponible en todos los planes. En Team y Enterprise, está deshabilitado de forma predeterminada hasta que un administrador habilite el botón de alternancia de Remote Control en [configuración de administración de Claude Code](https://claude.ai/admin-settings/claude-code).

11</Note>

12 

13Remote Control conecta [claude.ai/code](https://claude.ai/code) o la aplicación Claude para [iOS](https://apps.apple.com/us/app/claude-by-anthropic/id6473753684) y [Android](https://play.google.com/store/apps/details?id=com.anthropic.claude) a una sesión de Claude Code que se ejecuta en su máquina. Inicie una tarea en su escritorio y luego continúela desde su teléfono en el sofá o desde un navegador en otra computadora.

14 

15Cuando inicia una sesión de Remote Control en su máquina, Claude sigue ejecutándose localmente todo el tiempo, por lo que nada se mueve a la nube. Con Remote Control puede:

16 

17* **Usar su entorno local completo de forma remota**: su sistema de archivos, [MCP servers](/es/mcp), herramientas y configuración del proyecto permanecen disponibles, y escribir `@` completa automáticamente las rutas de archivo de su proyecto local

18* **Trabajar desde ambas superficies a la vez**: la conversación se mantiene sincronizada en todos los dispositivos conectados, por lo que puede enviar mensajes desde su terminal, navegador y teléfono indistintamente

19* **Sobrevivir a interrupciones**: si su portátil se duerme o su red se cae, la sesión se reconecta automáticamente cuando su máquina vuelve a estar en línea

20 

21A diferencia de [Claude Code en la web](/es/claude-code-on-the-web), que se ejecuta en infraestructura en la nube, las sesiones de Remote Control se ejecutan directamente en su máquina e interactúan con su sistema de archivos local. Las interfaces web y móvil son solo una ventana a esa sesión local.

22 

23<Note>

24 Remote Control requiere Claude Code v2.1.51 o posterior. Verifique su versión con `claude --version`.

25</Note>

26 

27Esta página cubre la configuración, cómo iniciar y conectarse a sesiones, y cómo Remote Control se compara con Claude Code en la web.

28 

29## Requisitos

30 

31Antes de usar Remote Control, confirme que su entorno cumple con estas condiciones:

32 

33* **Suscripción**: disponible en planes Pro, Max, Team y Enterprise. Las claves API no son compatibles. En Team y Enterprise, un administrador debe habilitar primero el botón de alternancia de Remote Control en [configuración de administración de Claude Code](https://claude.ai/admin-settings/claude-code).

34* **Autenticación**: ejecute `claude` y use `/login` para iniciar sesión a través de claude.ai si aún no lo ha hecho.

35* **Confianza del espacio de trabajo**: ejecute `claude` en su directorio de proyecto al menos una vez para aceptar el diálogo de confianza del espacio de trabajo.

36 

37## Inicie una sesión de Remote Control

38 

39Puede iniciar una sesión de Remote Control desde la CLI o la extensión de VS Code. La CLI ofrece tres modos de invocación; VS Code usa el comando `/remote-control`.

40 

41<Tabs>

42 <Tab title="Modo servidor">

43 Navegue a su directorio de proyecto y ejecute:

44 

45 ```bash theme={null}

46 claude remote-control

47 ```

48 

49 El proceso sigue ejecutándose en su terminal en modo servidor, esperando conexiones remotas. Muestra una URL de sesión que puede usar para [conectarse desde otro dispositivo](#connect-from-another-device), y puede presionar la barra espaciadora para mostrar un código QR para acceso rápido desde su teléfono. Mientras una sesión remota está activa, la terminal muestra el estado de la conexión y la actividad de las herramientas.

50 

51 Banderas disponibles:

52 

53 | Bandera | Descripción |

54 | ----------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

55 | `--name "My Project"` | Establezca un título de sesión personalizado visible en la lista de sesiones en claude.ai/code. |

56 | `--remote-control-session-name-prefix <prefix>` | Prefijo para nombres de sesión generados automáticamente cuando no se establece un nombre explícito. El valor predeterminado es el nombre de host de su máquina, produciendo nombres como `myhost-graceful-unicorn`. Establezca `CLAUDE_REMOTE_CONTROL_SESSION_NAME_PREFIX` para el mismo efecto. |

57 | `--spawn <mode>` | Cómo el servidor crea sesiones.<br />• `same-dir` (predeterminado): todas las sesiones comparten el directorio de trabajo actual, por lo que pueden entrar en conflicto si editan los mismos archivos.<br />• `worktree`: cada sesión bajo demanda obtiene su propio [git worktree](/es/common-workflows#run-parallel-claude-code-sessions-with-git-worktrees). Requiere un repositorio git.<br />• `session`: modo de sesión única. Sirve exactamente una sesión y rechaza conexiones adicionales. Se establece solo al inicio.<br />Presione `w` en tiempo de ejecución para alternar entre `same-dir` y `worktree`. |

58 | `--capacity <N>` | Número máximo de sesiones concurrentes. El valor predeterminado es 32. No se puede usar con `--spawn=session`. |

59 | `--verbose` | Mostrar registros detallados de conexión y sesión. |

60 | `--sandbox` / `--no-sandbox` | Habilitar o deshabilitar [sandboxing](/es/sandboxing) para aislamiento del sistema de archivos y red. Deshabilitado de forma predeterminada. |

61 </Tab>

62 

63 <Tab title="Sesión interactiva">

64 Para iniciar una sesión normal interactiva de Claude Code con Remote Control habilitado, use la bandera `--remote-control` (o `--rc`):

65 

66 ```bash theme={null}

67 claude --remote-control

68 ```

69 

70 Opcionalmente, pase un nombre para la sesión:

71 

72 ```bash theme={null}

73 claude --remote-control "My Project"

74 ```

75 

76 Esto le proporciona una sesión interactiva completa en su terminal que también puede controlar desde claude.ai o la aplicación Claude. A diferencia de `claude remote-control` (modo servidor), puede escribir mensajes localmente mientras la sesión también está disponible de forma remota.

77 </Tab>

78 

79 <Tab title="Desde una sesión existente">

80 Si ya está en una sesión de Claude Code y desea continuarla de forma remota, use el comando `/remote-control` (o `/rc`):

81 

82 ```text theme={null}

83 /remote-control

84 ```

85 

86 Pase un nombre como argumento para establecer un título de sesión personalizado:

87 

88 ```text theme={null}

89 /remote-control My Project

90 ```

91 

92 Esto inicia una sesión de Remote Control que lleva su historial de conversación actual y muestra una URL de sesión y código QR que puede usar para [conectarse desde otro dispositivo](#connect-from-another-device). Las banderas `--verbose`, `--sandbox` y `--no-sandbox` no están disponibles con este comando.

93 </Tab>

94 

95 <Tab title="VS Code">

96 En la [extensión de VS Code de Claude Code](/es/vs-code), escriba `/remote-control` o `/rc` en el cuadro de solicitud, o abra el menú de comandos con `/` y selecciónelo. Requiere Claude Code v2.1.79 o posterior.

97 

98 ```text theme={null}

99 /remote-control

100 ```

101 

102 Un banner aparece encima del cuadro de solicitud mostrando el estado de la conexión. Una vez conectado, haga clic en **Open in browser** en el banner para ir directamente a la sesión, o encuéntrela en la lista de sesiones en [claude.ai/code](https://claude.ai/code). La URL de la sesión también se publica en la conversación.

103 

104 Para desconectarse, haga clic en el icono de cierre en el banner o ejecute `/remote-control` nuevamente.

105 

106 A diferencia de la CLI, el comando de VS Code no acepta un argumento de nombre ni muestra un código QR. El título de la sesión se deriva del historial de conversación o del primer mensaje.

107 </Tab>

108</Tabs>

109 

110### Conectarse desde otro dispositivo

111 

112Una vez que una sesión de Remote Control está activa, tiene varias formas de conectarse desde otro dispositivo:

113 

114* **Abra la URL de la sesión** en cualquier navegador para ir directamente a la sesión en [claude.ai/code](https://claude.ai/code).

115* **Escanee el código QR** que se muestra junto a la URL de la sesión para abrirlo directamente en la aplicación Claude. Con `claude remote-control`, presione la barra espaciadora para alternar la visualización del código QR.

116* **Abra [claude.ai/code](https://claude.ai/code) o la aplicación Claude** y encuentre la sesión por nombre en la lista de sesiones. Las sesiones de Remote Control muestran un icono de computadora con un punto de estado verde cuando están en línea.

117 

118El título de la sesión remota se elige en este orden:

119 

1201. El nombre que pasó a `--name`, `--remote-control`, o `/remote-control`

1212. El título que estableció con `/rename`

1223. El último mensaje significativo en el historial de conversación existente

1234. Un nombre generado automáticamente como `myhost-graceful-unicorn`, donde `myhost` es el nombre de host de su máquina o el prefijo que estableció con `--remote-control-session-name-prefix`

124 

125Si no estableció un nombre explícito, el título se actualiza para reflejar su solicitud una vez que envíe una.

126 

127Si el entorno ya tiene una sesión activa, se le preguntará si desea continuarla o iniciar una nueva.

128 

129Si aún no tiene la aplicación Claude, use el comando `/mobile` dentro de Claude Code para mostrar un código QR de descarga para [iOS](https://apps.apple.com/us/app/claude-by-anthropic/id6473753684) o [Android](https://play.google.com/store/apps/details?id=com.anthropic.claude).

130 

131### Habilite Remote Control para todas las sesiones

132 

133De forma predeterminada, Remote Control solo se activa cuando ejecuta explícitamente `claude remote-control`, `claude --remote-control`, o `/remote-control`. Para habilitarlo automáticamente para cada sesión interactiva, ejecute `/config` dentro de Claude Code y establezca **Enable Remote Control for all sessions** en `true`. Establézcalo de nuevo en `false` para deshabilitar.

134 

135Con esta configuración activada, cada proceso interactivo de Claude Code registra una sesión remota. Si ejecuta varias instancias, cada una obtiene su propio entorno y sesión. Para ejecutar varias sesiones concurrentes desde un único proceso, use el [modo servidor](#start-a-remote-control-session) en su lugar.

136 

137## Conexión y seguridad

138 

139Su sesión local de Claude Code realiza solo solicitudes HTTPS salientes y nunca abre puertos entrantes en su máquina. Cuando inicia Remote Control, se registra con la API de Anthropic y sondea el trabajo. Cuando se conecta desde otro dispositivo, el servidor enruta mensajes entre el cliente web o móvil y su sesión local a través de una conexión de transmisión.

140 

141Todo el tráfico viaja a través de la API de Anthropic sobre TLS, el mismo transporte de seguridad que cualquier sesión de Claude Code. La conexión utiliza múltiples credenciales de corta duración, cada una limitada a un único propósito y expirando de forma independiente.

142 

143## Remote Control vs Claude Code en la web

144 

145Remote Control y [Claude Code en la web](/es/claude-code-on-the-web) ambos usan la interfaz claude.ai/code. La diferencia clave es dónde se ejecuta la sesión: Remote Control se ejecuta en su máquina, por lo que sus MCP servers locales, herramientas y configuración del proyecto permanecen disponibles. Claude Code en la web se ejecuta en infraestructura en la nube administrada por Anthropic.

146 

147Use Remote Control cuando esté en medio del trabajo local y desee continuar desde otro dispositivo. Use Claude Code en la web cuando desee iniciar una tarea sin ninguna configuración local, trabajar en un repositorio que no tiene clonado, o ejecutar varias tareas en paralelo.

148 

149## Notificaciones push móviles

150 

151Cuando Remote Control está activo, Claude puede enviar notificaciones push a su teléfono.

152 

153Claude decide cuándo enviar. Típicamente envía una cuando una tarea de larga duración finaliza o cuando necesita una decisión de usted para continuar. También puede solicitar un push en su solicitud, por ejemplo `notify me when the tests finish`. Más allá del botón de alternancia activado/desactivado a continuación, no hay configuración por evento.

154 

155<Note>

156 Las notificaciones push móviles requieren Claude Code v2.1.110 o posterior.

157</Note>

158 

159Para configurar notificaciones push móviles:

160 

161<Steps>

162 <Step title="Instale la aplicación móvil Claude">

163 Descargue la aplicación Claude para [iOS](https://apps.apple.com/us/app/claude-by-anthropic/id6473753684) o [Android](https://play.google.com/store/apps/details?id=com.anthropic.claude).

164 </Step>

165 

166 <Step title="Inicie sesión con su cuenta de Claude Code">

167 Use la misma cuenta y organización que usa para Claude Code en la terminal.

168 </Step>

169 

170 <Step title="Permita notificaciones">

171 Acepte el mensaje de solicitud de permiso de notificación del sistema operativo.

172 </Step>

173 

174 <Step title="Habilite push en Claude Code">

175 En su terminal, ejecute `/config` y habilite **Push when Claude decides**.

176 </Step>

177</Steps>

178 

179Si las notificaciones no llegan:

180 

181* Si `/config` muestra **No mobile registered**, abra la aplicación Claude en su teléfono para que pueda actualizar su token push. La advertencia se borra la próxima vez que Remote Control se conecte.

182* En iOS, los modos Focus y los resúmenes de notificaciones pueden suprimir o retrasar los pushes. Verifique Configuración → Notificaciones → Claude.

183* En Android, la optimización agresiva de batería puede retrasar la entrega. Exima la aplicación Claude de la optimización de batería en la configuración del sistema.

184 

185## Limitaciones

186 

187* **Una sesión remota por proceso interactivo**: fuera del modo servidor, cada instancia de Claude Code admite una sesión remota a la vez. Use el [modo servidor](#start-a-remote-control-session) para ejecutar varias sesiones concurrentes desde un único proceso.

188* **El proceso local debe seguir ejecutándose**: Remote Control se ejecuta como un proceso local. Si cierra la terminal, cierra VS Code, o detiene el proceso `claude` de otra manera, la sesión finaliza.

189* **Interrupción de red extendida**: si su máquina está despierta pero no puede alcanzar la red durante más de aproximadamente 10 minutos, la sesión agota el tiempo de espera y el proceso se cierra. Ejecute `claude remote-control` nuevamente para iniciar una nueva sesión.

190* **Ultraplan desconecta Remote Control**: iniciar una sesión de [ultraplan](/es/ultraplan) desconecta cualquier sesión de Remote Control activa porque ambas características ocupan la interfaz claude.ai/code y solo una puede estar conectada a la vez.

191* **Algunos comandos son solo locales**: comandos que abren un selector interactivo en la terminal, como `/mcp`, `/plugin`, o `/resume`, funcionan solo desde la CLI local. Los comandos que producen salida de texto, incluyendo `/compact`, `/clear`, `/context`, `/usage`, `/exit`, `/extra-usage`, `/recap`, y `/reload-plugins`, funcionan desde móvil y web.

192 

193## Solución de problemas

194 

195### "Remote Control requires a claude.ai subscription"

196 

197No está autenticado con una cuenta de claude.ai. Ejecute `claude auth login` y elija la opción de claude.ai. Si `ANTHROPIC_API_KEY` está configurado en su entorno, desactívelo primero.

198 

199### "Remote Control requires a full-scope login token"

200 

201Está autenticado con un token de larga duración de `claude setup-token` o la variable de entorno `CLAUDE_CODE_OAUTH_TOKEN`. Estos tokens se limitan a solo inferencia y no pueden establecer sesiones de Remote Control. Ejecute `claude auth login` para autenticarse con un token de sesión de alcance completo en su lugar.

202 

203### "Unable to determine your organization for Remote Control eligibility"

204 

205Su información de cuenta en caché está obsoleta o incompleta. Ejecute `claude auth login` para actualizarla.

206 

207### "Remote Control is not yet enabled for your account"

208 

209La verificación de elegibilidad puede fallar con ciertas variables de entorno presentes:

210 

211* `CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC` o `DISABLE_TELEMETRY`: desactívelas e intente de nuevo.

212* `CLAUDE_CODE_USE_BEDROCK`, `CLAUDE_CODE_USE_VERTEX`, o `CLAUDE_CODE_USE_FOUNDRY`: Remote Control requiere autenticación de claude.ai y no funciona con proveedores de terceros.

213 

214Si ninguno de estos está configurado, ejecute `/logout` luego `/login` para actualizar.

215 

216### "Remote Control is disabled by your organization's policy"

217 

218Este error tiene tres causas distintas. Ejecute `/status` primero para ver qué método de inicio de sesión y suscripción está usando.

219 

220* **Está autenticado con una clave API o cuenta de Console**: Remote Control requiere OAuth de claude.ai. Ejecute `/login` y elija la opción de claude.ai. Si `ANTHROPIC_API_KEY` está configurado en su entorno, desactívelo.

221* **Su administrador de Team o Enterprise no lo ha habilitado**: Remote Control está deshabilitado de forma predeterminada en estos planes. Un administrador puede habilitarlo en [claude.ai/admin-settings/claude-code](https://claude.ai/admin-settings/claude-code) activando el botón de alternancia **Remote Control**. Esta es una configuración de organización del lado del servidor, no una clave de [configuración administrada](/es/permissions#managed-only-settings).

222* **El botón de alternancia del administrador está atenuado**: su organización tiene una configuración de retención de datos o cumplimiento que es incompatible con Remote Control. Esto no se puede cambiar desde el panel de administración. Póngase en contacto con el soporte de Anthropic para discutir opciones.

223 

224### "Remote credentials fetch failed"

225 

226Claude Code no pudo obtener una credencial de corta duración de la API de Anthropic para establecer la conexión. Vuelva a ejecutar con `--verbose` para ver el error completo:

227 

228```bash theme={null}

229claude remote-control --verbose

230```

231 

232Causas comunes:

233 

234* No ha iniciado sesión: ejecute `claude` y use `/login` para autenticarse con su cuenta de claude.ai. La autenticación con clave API no es compatible con Remote Control.

235* Problema de red o proxy: un firewall o proxy puede estar bloqueando la solicitud HTTPS saliente. Remote Control requiere acceso a la API de Anthropic en el puerto 443.

236* Error en la creación de sesión: si también ve `Session creation failed — see debug log`, el error ocurrió antes en la configuración. Verifique que su suscripción esté activa.

237 

238## Elija el enfoque correcto

239 

240Claude Code offers several ways to work when you're not at your terminal. They differ in what triggers the work, where Claude runs, and how much you need to set up.

241 

242| | Trigger | Claude runs on | Setup | Best for |

243| :--------------------------------------------- | :--------------------------------------------------------------------------------------------- | :------------------------------------------------------------------------------------------- | :----------------------------------------------------------------------------------------------------------------------------------- | :------------------------------------------------------------ |

244| [Dispatch](/en/desktop#sessions-from-dispatch) | Message a task from the Claude mobile app | Your machine (Desktop) | [Pair the mobile app with Desktop](https://support.claude.com/en/articles/13947068) | Delegating work while you're away, minimal setup |

245| [Remote Control](/en/remote-control) | Drive a running session from [claude.ai/code](https://claude.ai/code) or the Claude mobile app | Your machine (CLI or VS Code) | Run `claude remote-control` | Steering in-progress work from another device |

246| [Channels](/en/channels) | Push events from a chat app like Telegram or Discord, or your own server | Your machine (CLI) | [Install a channel plugin](/en/channels#quickstart) or [build your own](/en/channels-reference) | Reacting to external events like CI failures or chat messages |

247| [Slack](/en/slack) | Mention `@Claude` in a team channel | Anthropic cloud | [Install the Slack app](/en/slack#setting-up-claude-code-in-slack) with [Claude Code on the web](/en/claude-code-on-the-web) enabled | PRs and reviews from team chat |

248| [Scheduled tasks](/en/scheduled-tasks) | Set a schedule | [CLI](/en/scheduled-tasks), [Desktop](/en/desktop-scheduled-tasks), or [cloud](/en/routines) | Pick a frequency | Recurring automation like daily reviews |

249 

250## Recursos relacionados

251 

252* [Claude Code en la web](/es/claude-code-on-the-web): ejecute sesiones en entornos en la nube administrados por Anthropic en lugar de en su máquina

253* [Ultraplan](/es/ultraplan): inicie una sesión de planificación en la nube desde su terminal y revise el plan en su navegador

254* [Channels](/es/channels): reenvíe Telegram, Discord o iMessage a una sesión para que Claude reaccione a los mensajes mientras está fuera

255* [Dispatch](/es/desktop#sessions-from-dispatch): envíe un mensaje de una tarea desde su teléfono y puede generar una sesión de Desktop para manejarla

256* [Autenticación](/es/authentication): configure `/login` y administre credenciales para claude.ai

257* [Referencia de CLI](/es/cli-reference): lista completa de banderas y comandos incluyendo `claude remote-control`

258* [Seguridad](/es/security): cómo las sesiones de Remote Control se ajustan al modelo de seguridad de Claude Code

259* [Uso de datos](/es/data-usage): qué datos fluyen a través de la API de Anthropic durante sesiones locales y remotas

routines.md +317 −0 created

Details

1> ## Documentation Index

2> Fetch the complete documentation index at: https://code.claude.com/docs/llms.txt

3> Use this file to discover all available pages before exploring further.

4 

5# Automatizar el trabajo con rutinas

6 

7> Ponga Claude Code en piloto automático. Defina rutinas que se ejecuten en un horario, se activen en llamadas API o reaccionen a eventos de GitHub desde la infraestructura en la nube administrada por Anthropic.

8 

9<Note>

10 Las rutinas están en vista previa de investigación. El comportamiento, los límites y la superficie de la API pueden cambiar.

11</Note>

12 

13Una rutina es una configuración guardada de Claude Code: un prompt, uno o más repositorios y un conjunto de [conectores](/es/mcp), empaquetados una vez y ejecutados automáticamente. Las rutinas se ejecutan en la infraestructura en la nube administrada por Anthropic, por lo que siguen funcionando cuando su portátil está cerrado.

14 

15Cada rutina puede tener uno o más disparadores adjuntos:

16 

17* **Programada**: se ejecuta en una cadencia recurrente como cada hora, cada noche o semanalmente

18* **API**: se activa bajo demanda enviando un POST HTTP a un punto final por rutina con un token de portador

19* **GitHub**: se ejecuta automáticamente en respuesta a eventos del repositorio como solicitudes de extracción o lanzamientos

20 

21Una única rutina puede combinar disparadores. Por ejemplo, una rutina de revisión de PR puede ejecutarse cada noche, activarse desde un script de implementación y también reaccionar a cada nuevo PR.

22 

23Las rutinas están disponibles en planes Pro, Max, Team y Enterprise con [Claude Code en la web](/es/claude-code-on-the-web) habilitado. Créelas y adminístrelas en [claude.ai/code/routines](https://claude.ai/code/routines), o desde la CLI con `/schedule`.

24 

25Esta página cubre la creación de una rutina, la configuración de cada tipo de disparador, la administración de ejecuciones y cómo se aplican los límites de uso.

26 

27## Casos de uso de ejemplo

28 

29Cada ejemplo empareja un tipo de disparador con el tipo de trabajo para el que las rutinas son adecuadas: desatendido, repetible y vinculado a un resultado claro.

30 

31**Mantenimiento del trabajo pendiente.** Un disparador de horario se ejecuta cada noche de la semana contra su rastreador de problemas a través de un conector. La rutina lee los problemas abiertos desde la última ejecución, aplica etiquetas, asigna propietarios según el área de código referenciada y publica un resumen en Slack para que el equipo comience el día con una cola organizada.

32 

33**Triaje de alertas.** Su herramienta de monitoreo llama al punto final de la API de la rutina cuando se cruza un umbral de error, pasando el cuerpo de la alerta como `text`. La rutina extrae el seguimiento de pila, lo correlaciona con commits recientes en el repositorio y abre una solicitud de extracción en borrador con una corrección propuesta y un enlace de vuelta a la alerta. El personal de guardia revisa el PR en lugar de comenzar desde una terminal en blanco.

34 

35**Revisión de código personalizada.** Un disparador de GitHub se ejecuta en `pull_request.opened`. La rutina aplica la lista de verificación de revisión de su equipo, deja comentarios en línea para problemas de seguridad, rendimiento y estilo, y agrega un comentario de resumen para que los revisores humanos puedan enfocarse en el diseño en lugar de verificaciones mecánicas.

36 

37**Verificación de implementación.** Su canalización de CD llama al punto final de la API de la rutina después de cada implementación en producción. La rutina ejecuta verificaciones de humo contra la nueva compilación, escanea registros de errores en busca de regresiones y publica un sí o no al canal de lanzamiento antes de que se cierre la ventana de implementación.

38 

39**Desfase de documentación.** Un disparador de horario se ejecuta semanalmente. La rutina escanea los PR fusionados desde la última ejecución, marca la documentación que hace referencia a API modificadas y abre PR de actualización contra el repositorio de documentación para que un editor revise.

40 

41**Puerto de biblioteca.** Un disparador de GitHub se ejecuta en `pull_request.closed` filtrado a PR fusionados en un repositorio de SDK. La rutina porta el cambio a un SDK paralelo en otro idioma y abre un PR coincidente, manteniendo las dos bibliotecas sincronizadas sin que un humano reimplemente cada cambio.

42 

43Las secciones a continuación le guían a través de la creación de una rutina y la configuración de cada uno de estos tipos de disparadores.

44 

45## Crear una rutina

46 

47Cree una rutina desde la web, la aplicación de escritorio o la CLI. Las tres superficies escriben en la misma cuenta en la nube, por lo que una rutina que cree en la CLI aparece en claude.ai/code/routines inmediatamente. En la aplicación de escritorio, haga clic en **Nueva tarea** y elija **Nueva tarea remota**; elegir **Nueva tarea local** en su lugar crea una [tarea programada local de escritorio](/es/desktop-scheduled-tasks), que se ejecuta en su máquina y no es una rutina.

48 

49El formulario de creación configura el prompt de la rutina, repositorios, entorno, conectores y disparadores.

50 

51Las rutinas se ejecutan de forma autónoma como sesiones completas de Claude Code en la nube: no hay selector de modo de permiso y no hay mensajes de aprobación durante una ejecución. La sesión puede ejecutar comandos de shell, usar [skills](/es/skills) comprometidas con el repositorio clonado y llamar a cualquier conector que incluya. Lo que una rutina puede alcanzar está determinado por los repositorios que seleccione y su configuración de rama-push, el [acceso a la red del entorno](/es/claude-code-on-the-web#the-cloud-environment) y variables, y los conectores que incluya. Delimite cada uno de esos a lo que la rutina realmente necesita.

52 

53Las rutinas pertenecen a su cuenta individual de claude.ai. No se comparten con compañeros de equipo y cuentan contra la asignación diaria de ejecuciones de su cuenta. Cualquier cosa que una rutina haga a través de su identidad de GitHub conectada o conectores aparece como usted: los commits y las solicitudes de extracción llevan su usuario de GitHub, y los mensajes de Slack, tickets de Linear u otras acciones de conectores utilizan sus cuentas vinculadas para esos servicios.

54 

55### Crear desde la web

56 

57<Steps>

58 <Step title="Abrir el formulario de creación">

59 Visite [claude.ai/code/routines](https://claude.ai/code/routines) y haga clic en **Nueva rutina**.

60 </Step>

61 

62 <Step title="Nombrar la rutina y escribir el prompt">

63 Dé a la rutina un nombre descriptivo y escriba el prompt que Claude ejecuta cada vez. El prompt es la parte más importante: la rutina se ejecuta de forma autónoma, por lo que el prompt debe ser autónomo y explícito sobre qué hacer y qué significa el éxito.

64 

65 La entrada del prompt incluye un selector de modelo. Claude utiliza el modelo seleccionado en cada ejecución.

66 </Step>

67 

68 <Step title="Seleccionar repositorios">

69 Agregue uno o más repositorios de GitHub para que Claude trabaje. Cada repositorio se clona al inicio de una ejecución, comenzando desde la rama predeterminada. Claude crea ramas con prefijo `claude/` para sus cambios. Para permitir inserciones en cualquier rama, habilite **Permitir inserciones de rama sin restricciones** para ese repositorio.

70 </Step>

71 

72 <Step title="Seleccionar un entorno">

73 Elija un [entorno en la nube](/es/claude-code-on-the-web#the-cloud-environment) para la rutina. Los entornos controlan a qué tiene acceso la sesión en la nube:

74 

75 * **Acceso a la red**: establezca el nivel de acceso a Internet disponible durante cada ejecución

76 * **Variables de entorno**: proporcione claves de API, tokens u otros secretos que Claude pueda usar

77 * **Script de configuración**: instale dependencias y herramientas que la rutina necesita. El resultado se [almacena en caché](/es/claude-code-on-the-web#environment-caching), por lo que el script no se vuelve a ejecutar en cada sesión

78 

79 Se proporciona un entorno **Predeterminado**. Para usar un entorno personalizado, [cree uno](/es/claude-code-on-the-web#the-cloud-environment) antes de crear la rutina.

80 </Step>

81 

82 <Step title="Seleccionar un disparador">

83 En **Seleccionar un disparador**, elija cómo comienza la rutina. Puede elegir un tipo de disparador o combinar varios.

84 

85 <Tabs>

86 <Tab title="Horario">

87 Elija una frecuencia preestablecida: cada hora, diaria, días de semana o semanal. Consulte [Agregar un disparador de horario](#add-a-schedule-trigger) para el manejo de zonas horarias, escalonamiento e intervalos cron personalizados.

88 </Tab>

89 

90 <Tab title="Evento de GitHub">

91 Seleccione el repositorio, el evento al que reaccionar y filtros opcionales. Consulte [Agregar un disparador de GitHub](#add-a-github-trigger) para la lista completa de eventos admitidos y campos de filtro.

92 </Tab>

93 

94 <Tab title="API">

95 Seleccione **API** aquí, luego guarde la rutina. La URL y el token se generan después de que se guarda la rutina, ya que dependen del ID de la rutina. Consulte [Agregar un disparador de API](#add-an-api-trigger) para copiar la URL y generar un token.

96 </Tab>

97 </Tabs>

98 </Step>

99 

100 <Step title="Revisar conectores">

101 Todos sus [conectores MCP](/es/mcp) conectados se incluyen de forma predeterminada. Elimine cualquiera que la rutina no necesite. Los conectores dan a Claude acceso a servicios externos como Slack, Linear o Google Drive durante cada ejecución.

102 </Step>

103 

104 <Step title="Crear la rutina">

105 Haga clic en **Crear**. La rutina aparece en la lista y se ejecuta la próxima vez que uno de sus disparadores coincida. Para iniciar una ejecución inmediatamente, haga clic en **Ejecutar ahora** en la página de detalles de la rutina.

106 

107 Cada ejecución crea una nueva sesión junto con sus otras sesiones, donde puede ver qué hizo Claude, revisar cambios y crear una solicitud de extracción.

108 </Step>

109</Steps>

110 

111### Crear desde la CLI

112 

113Ejecute `/schedule` en cualquier sesión para crear una rutina programada conversacionalmente. También puede pasar una descripción directamente, como en `/schedule daily PR review at 9am`. Claude recorre la misma información que recopila el formulario web, luego guarda la rutina en su cuenta.

114 

115`/schedule` en la CLI crea solo rutinas programadas. Para agregar un disparador de API o GitHub, edite la rutina en la web en [claude.ai/code/routines](https://claude.ai/code/routines).

116 

117La CLI también admite la administración de rutinas existentes. Ejecute `/schedule list` para ver todas las rutinas, `/schedule update` para cambiar una, o `/schedule run` para activarla inmediatamente.

118 

119### Crear desde la aplicación de escritorio

120 

121Abra la página **Horario** en la aplicación de escritorio, haga clic en **Nueva tarea** y elija **Nueva tarea remota**. La aplicación de escritorio muestra tanto tareas programadas locales como rutinas en la misma cuadrícula. Consulte [Tareas programadas de escritorio](/es/desktop-scheduled-tasks) para obtener detalles sobre la opción local.

122 

123## Configurar disparadores

124 

125Una rutina comienza cuando uno de sus disparadores coincide. Puede adjuntar cualquier combinación de disparadores de horario, API y GitHub a la misma rutina, y agregarlos o quitarlos en cualquier momento desde la sección **Seleccionar un disparador** del formulario de edición de la rutina.

126 

127### Agregar un disparador de horario

128 

129Un disparador de horario ejecuta la rutina en una cadencia recurrente. Elija una frecuencia preestablecida en la sección **Seleccionar un disparador**: cada hora, diaria, días de semana o semanal. Los tiempos se ingresan en su zona local y se convierten automáticamente, por lo que la rutina se ejecuta a esa hora de reloj de pared independientemente de dónde se encuentre la infraestructura en la nube.

130 

131Las ejecuciones pueden comenzar unos minutos después de la hora programada debido al escalonamiento. El desplazamiento es consistente para cada rutina.

132 

133Para un intervalo personalizado como cada dos horas o el primero de cada mes, elija el preestablecido más cercano en el formulario, luego ejecute `/schedule update` en la CLI para establecer una expresión cron específica. El intervalo mínimo es una hora; las expresiones que se ejecutan con más frecuencia se rechazan.

134 

135### Agregar un disparador de API

136 

137Un disparador de API proporciona a una rutina un punto final HTTP dedicado. POSTear al punto final con el token de portador de la rutina inicia una nueva sesión y devuelve una URL de sesión. Úselo para conectar Claude Code en sistemas de alertas, canalizaciones de implementación, herramientas internas o en cualquier lugar donde pueda hacer una solicitud HTTP autenticada.

138 

139Los disparadores de API se agregan a una rutina existente desde la web. La CLI actualmente no puede crear ni revocar tokens.

140 

141<Steps>

142 <Step title="Abrir la rutina para editar">

143 Vaya a [claude.ai/code/routines](https://claude.ai/code/routines), haga clic en la rutina que desea activar a través de API, luego haga clic en el icono de lápiz para abrir **Editar rutina**.

144 </Step>

145 

146 <Step title="Agregar un disparador de API">

147 Desplácese hasta la sección **Seleccionar un disparador** debajo del prompt, haga clic en **Agregar otro disparador** y elija **API**.

148 </Step>

149 

150 <Step title="Copiar la URL y generar un token">

151 El modal muestra la URL para esta rutina junto con un comando curl de ejemplo. Copie la URL, luego haga clic en **Generar token** y copie el token inmediatamente. El token se muestra una vez y no se puede recuperar más tarde, así que guárdelo en un lugar seguro como el almacén de secretos de su herramienta de alertas.

152 </Step>

153 

154 <Step title="Llamar al punto final">

155 Envíe el token en el encabezado `Authorization: Bearer` cuando POST a la URL. La sección [Activar una rutina](#trigger-a-routine) a continuación muestra un ejemplo completo.

156 </Step>

157</Steps>

158 

159Cada rutina tiene su propio token, limitado a activar solo esa rutina. Para rotarlo o revocarlo, vuelva al mismo modal y haga clic en **Regenerar** o **Revocar**.

160 

161#### Activar una rutina

162 

163Envíe una solicitud POST al punto final `/fire` con el token de portador en el encabezado `Authorization`. El cuerpo de la solicitud acepta un campo `text` opcional para contexto específico de la ejecución, como un cuerpo de alerta o un registro fallido, pasado a la rutina junto con su prompt guardado. El valor es texto de forma libre y no se analiza: si envía JSON u otra carga útil estructurada, la rutina la recibe como una cadena literal.

164 

165El ejemplo a continuación activa una rutina desde un shell:

166 

167```bash theme={null}

168curl -X POST https://api.anthropic.com/v1/claude_code/routines/trig_01ABCDEFGHJKLMNOPQRSTUVW/fire \

169 -H "Authorization: Bearer sk-ant-oat01-xxxxx" \

170 -H "anthropic-beta: experimental-cc-routine-2026-04-01" \

171 -H "anthropic-version: 2023-06-01" \

172 -H "Content-Type: application/json" \

173 -d '{"text": "Sentry alert SEN-4521 fired in prod. Stack trace attached."}'

174```

175 

176Una solicitud exitosa devuelve un cuerpo JSON con el nuevo ID de sesión y URL:

177 

178```json theme={null}

179{

180 "type": "routine_fire",

181 "claude_code_session_id": "session_01HJKLMNOPQRSTUVWXYZ",

182 "claude_code_session_url": "https://claude.ai/code/session_01HJKLMNOPQRSTUVWXYZ"

183}

184```

185 

186Abra la URL de sesión en un navegador para ver la ejecución en tiempo real, revisar cambios o continuar la conversación manualmente.

187 

188<Warning>

189 El punto final `/fire` se envía bajo el encabezado beta `experimental-cc-routine-2026-04-01`. Las formas de solicitud y respuesta, los límites de velocidad y la semántica de tokens pueden cambiar mientras la característica está en vista previa de investigación. Los cambios importantes se envían detrás de nuevas versiones de encabezado beta con fecha, y las dos versiones de encabezado anteriores más recientes continúan funcionando para que los llamadores tengan tiempo de migrar.

190</Warning>

191 

192#### Referencia de API

193 

194Para la referencia completa de la API, incluidas todas las respuestas de error, reglas de validación y límites de campo, consulte [Activar una rutina a través de API](https://platform.claude.com/docs/es/api/claude-code/routines-fire) en la documentación de la plataforma Claude.

195 

196El punto final `/fire` está disponible solo para usuarios de claude.ai y no es parte de la superficie de la API de Claude Platform.

197 

198### Agregar un disparador de GitHub

199 

200Un disparador de GitHub inicia una nueva sesión automáticamente cuando ocurre un evento coincidente en un repositorio conectado. Cada evento coincidente inicia su propia sesión.

201 

202<Note>

203 Durante la vista previa de investigación, los eventos de webhook de GitHub están sujetos a límites por hora por rutina y por cuenta. Los eventos más allá del límite se descartan hasta que se reinicia la ventana. Vea sus límites actuales en [claude.ai/code/routines](https://claude.ai/code/routines).

204</Note>

205 

206Los disparadores de GitHub se configuran solo desde la interfaz de usuario web.

207 

208<Steps>

209 <Step title="Abrir la rutina para editar">

210 Vaya a [claude.ai/code/routines](https://claude.ai/code/routines), haga clic en la rutina, luego haga clic en el icono de lápiz para abrir **Editar rutina**.

211 </Step>

212 

213 <Step title="Agregar un disparador de evento de GitHub">

214 Desplácese hasta la sección **Seleccionar un disparador**, haga clic en **Agregar otro disparador** y elija **Evento de GitHub**.

215 </Step>

216 

217 <Step title="Instalar la aplicación Claude GitHub">

218 La aplicación Claude GitHub debe estar instalada en el repositorio al que desea suscribirse. La configuración del disparador le solicita que la instale si aún no está instalada.

219 

220 <Note>

221 Ejecutar `/web-setup` en la CLI otorga acceso al repositorio para clonar, pero no instala la aplicación Claude GitHub y no habilita la entrega de webhook. Los disparadores de GitHub requieren instalar la aplicación Claude GitHub, que la configuración del disparador le solicita que haga.

222 </Note>

223 </Step>

224 

225 <Step title="Configurar el disparador">

226 Seleccione el repositorio, elija un evento de la lista de [eventos admitidos](#supported-events) y opcionalmente agregue filtros. Guarde el disparador.

227 </Step>

228</Steps>

229 

230#### Eventos admitidos

231 

232Los disparadores de GitHub pueden suscribirse a cualquiera de las siguientes categorías de eventos. Dentro de cada categoría, puede elegir una acción específica, como `pull_request.opened`, o reaccionar a todas las acciones en la categoría.

233 

234| Evento | Se activa cuando |

235| :---------------------- | :----------------------------------------------------------------------------- |

236| Solicitud de extracción | Se abre, cierra, asigna, etiqueta, sincroniza o actualiza de otra manera un PR |

237| Lanzamiento | Se crea, publica, edita o elimina un lanzamiento |

238 

239#### Filtrar solicitudes de extracción

240 

241Use filtros para reducir qué solicitudes de extracción inician una nueva sesión. Todas las condiciones de filtro deben coincidir para que la rutina se active. Los campos de filtro disponibles son:

242 

243| Filtro | Coincide |

244| :------------- | :------------------------------------------- |

245| Autor | Nombre de usuario de GitHub del autor del PR |

246| Título | Texto del título del PR |

247| Cuerpo | Texto de descripción del PR |

248| Rama base | Rama a la que se dirige el PR |

249| Rama principal | Rama de la que proviene el PR |

250| Etiquetas | Etiquetas aplicadas al PR |

251| Es borrador | Si el PR está en estado de borrador |

252| Está fusionado | Si el PR ha sido fusionado |

253 

254Cada filtro empareja un campo con un operador: es igual a, contiene, comienza con, es uno de, no es uno de o coincide con regex.

255 

256El operador `matches regex` prueba el valor de campo completo, no una subcadena dentro de él. Para coincidir con cualquier título que contenga `hotfix`, escriba `.*hotfix.*`. Sin el `.*` circundante, el filtro coincide solo con un título que es exactamente `hotfix` sin nada antes o después. Para coincidencia de subcadena literal sin sintaxis regex, use el operador `contains` en su lugar.

257 

258Algunos ejemplos de combinaciones de filtros:

259 

260* **Revisión del módulo de autenticación**: rama base `main`, rama principal contiene `auth-provider`. Envía cualquier PR que toque autenticación a un revisor enfocado.

261* **Solo listo para revisión**: es borrador es `false`. Omite borradores para que la rutina solo se ejecute cuando el PR esté listo para revisión.

262* **Retroportación controlada por etiqueta**: las etiquetas incluyen `needs-backport`. Activa una rutina de puerto a otra rama solo cuando un mantenedor etiqueta el PR.

263 

264#### Cómo se asignan las sesiones a los eventos

265 

266Cada evento de GitHub coincidente inicia una nueva sesión. La reutilización de sesiones entre eventos no está disponible para rutinas activadas por GitHub, por lo que dos actualizaciones de PR producen dos sesiones independientes.

267 

268## Administrar rutinas

269 

270Haga clic en una rutina en la lista para abrir su página de detalles. La página de detalles muestra los repositorios de la rutina, conectores, prompt, horario, tokens de API, disparadores de GitHub y una lista de ejecuciones anteriores.

271 

272### Ver e interactuar con ejecuciones

273 

274Haga clic en cualquier ejecución para abrirla como una sesión completa. Desde allí puede ver qué hizo Claude, revisar cambios, crear una solicitud de extracción o continuar la conversación. Cada sesión de ejecución funciona como cualquier otra sesión: use el menú desplegable junto al título de la sesión para renombrar, archivar o eliminar.

275 

276### Editar y controlar rutinas

277 

278Desde la página de detalles de la rutina puede:

279 

280* Haga clic en **Ejecutar ahora** para iniciar una ejecución inmediatamente sin esperar la próxima hora programada.

281* Use el botón de alternancia en la sección **Se repite** para pausar o reanudar el horario. Las rutinas pausadas mantienen su configuración pero no se ejecutan hasta que las vuelva a habilitar.

282* Haga clic en el icono de lápiz para abrir **Editar rutina** y cambiar el nombre, prompt, repositorios, entorno, conectores o cualquiera de los disparadores de la rutina. La sección **Seleccionar un disparador** es donde agrega o elimina horarios, tokens de API y disparadores de eventos de GitHub.

283* Haga clic en el icono de eliminar para eliminar la rutina. Las sesiones anteriores creadas por la rutina permanecen en su lista de sesiones.

284 

285### Repositorios y permisos de rama

286 

287Las rutinas necesitan acceso a GitHub para clonar repositorios. Cuando crea una rutina desde la CLI con `/schedule`, Claude verifica si su cuenta tiene GitHub conectado y le solicita que ejecute `/web-setup` si no es así. Consulte [Opciones de autenticación de GitHub](/es/claude-code-on-the-web#github-authentication-options) para las dos formas de otorgar acceso.

288 

289Cada repositorio que agregue se clona en cada ejecución. Claude comienza desde la rama predeterminada del repositorio a menos que su prompt especifique lo contrario.

290 

291De forma predeterminada, Claude solo puede insertar en ramas con prefijo `claude/`. Esto evita que las rutinas modifiquen accidentalmente ramas protegidas o de larga duración. Para eliminar esta restricción para un repositorio específico, habilite **Permitir inserciones de rama sin restricciones** para ese repositorio al crear o editar la rutina.

292 

293### Conectores

294 

295Las rutinas pueden usar sus conectores MCP conectados para leer y escribir en servicios externos durante cada ejecución. Por ejemplo, una rutina que clasifica solicitudes de soporte podría leer de un canal de Slack y crear problemas en Linear.

296 

297Cuando crea una rutina, todos sus conectores actualmente conectados se incluyen de forma predeterminada. Elimine cualquiera que no sea necesario para limitar a qué herramientas tiene acceso Claude durante la ejecución. También puede agregar conectores directamente desde el formulario de rutina.

298 

299Para administrar o agregar conectores fuera del formulario de rutina, visite **Configuración > Conectores** en claude.ai o use `/schedule update` en la CLI.

300 

301### Entornos

302 

303Cada rutina se ejecuta en un [entorno en la nube](/es/claude-code-on-the-web#the-cloud-environment) que controla el acceso a la red, variables de entorno y scripts de configuración. Configure entornos antes de crear una rutina para dar a Claude acceso a API, instalar dependencias o restringir el alcance de la red. Consulte [entorno en la nube](/es/claude-code-on-the-web#the-cloud-environment) para la guía de configuración completa.

304 

305## Uso y límites

306 

307Las rutinas reducen el uso de suscripción de la misma manera que lo hacen las sesiones interactivas. Además de los límites de suscripción estándar, las rutinas tienen un límite diario de cuántas ejecuciones pueden comenzar por cuenta. Vea su consumo actual y ejecuciones diarias de rutina restantes en [claude.ai/code/routines](https://claude.ai/code/routines) o [claude.ai/settings/usage](https://claude.ai/settings/usage).

308 

309Cuando una rutina alcanza el límite diario o el límite de uso de su suscripción, las organizaciones con uso adicional habilitado pueden continuar ejecutando rutinas en exceso medido. Sin uso adicional, las ejecuciones adicionales se rechazan hasta que se reinicia la ventana. Habilite el uso adicional desde **Configuración > Facturación** en claude.ai.

310 

311## Recursos relacionados

312 

313* [`/loop` e programación en sesión](/es/scheduled-tasks): programe tareas locales dentro de una sesión de CLI abierta

314* [Tareas programadas de escritorio](/es/desktop-scheduled-tasks): tareas programadas locales que se ejecutan en su máquina con acceso a archivos locales

315* [Entorno en la nube](/es/claude-code-on-the-web#the-cloud-environment): configure el entorno de tiempo de ejecución para sesiones en la nube

316* [Conectores MCP](/es/mcp): conecte servicios externos como Slack, Linear y Google Drive

317* [GitHub Actions](/es/github-actions): ejecute Claude en su canalización de CI en eventos del repositorio

sandboxing.md +329 −0 created

Details

1> ## Documentation Index

2> Fetch the complete documentation index at: https://code.claude.com/docs/llms.txt

3> Use this file to discover all available pages before exploring further.

4 

5# Sandboxing

6 

7> Aprenda cómo la herramienta bash aislada de Claude Code proporciona aislamiento del sistema de archivos y la red para una ejecución de agentes más segura y autónoma.

8 

9## Descripción general

10 

11Claude Code incluye sandboxing nativo para proporcionar un entorno más seguro para la ejecución de agentes mientras reduce la necesidad de solicitudes de permiso constantes. En lugar de pedir permiso para cada comando bash, el sandboxing crea límites definidos de antemano donde Claude Code puede trabajar más libremente con riesgo reducido.

12 

13La herramienta bash aislada utiliza primitivas a nivel del sistema operativo para aplicar tanto aislamiento del sistema de archivos como de la red.

14 

15## Por qué el sandboxing es importante

16 

17La seguridad tradicional basada en permisos requiere aprobación constante del usuario para comandos bash. Si bien esto proporciona control, puede llevar a:

18 

19* **Fatiga de aprobación**: Hacer clic repetidamente en "aprobar" puede hacer que los usuarios presten menos atención a lo que están aprobando

20* **Productividad reducida**: Las interrupciones constantes ralentizan los flujos de trabajo de desarrollo

21* **Autonomía limitada**: Claude Code no puede trabajar de manera eficiente cuando espera aprobaciones

22 

23El sandboxing aborda estos desafíos mediante:

24 

251. **Definir límites claros**: Especifique exactamente qué directorios y hosts de red puede acceder Claude Code

262. **Reducir solicitudes de permiso**: Los comandos seguros dentro del sandbox no requieren aprobación

273. **Mantener la seguridad**: Los intentos de acceder a recursos fuera del sandbox desencadenan notificaciones inmediatas

284. **Habilitar autonomía**: Claude Code puede ejecutarse de manera más independiente dentro de límites definidos

29 

30<Warning>

31 El sandboxing efectivo requiere **tanto** aislamiento del sistema de archivos como de la red. Sin aislamiento de red, un agente comprometido podría exfiltrar archivos sensibles como claves SSH. Sin aislamiento del sistema de archivos, un agente comprometido podría instalar una puerta trasera en recursos del sistema para obtener acceso a la red. Al configurar el sandboxing, es importante asegurarse de que la configuración no cree omisiones en estos sistemas.

32</Warning>

33 

34## Cómo funciona

35 

36### Aislamiento del sistema de archivos

37 

38La herramienta bash aislada restringe el acceso al sistema de archivos a directorios específicos:

39 

40* **Comportamiento de escritura predeterminado**: Acceso de lectura y escritura al directorio de trabajo actual y sus subdirectorios

41* **Comportamiento de lectura predeterminado**: Acceso de lectura a toda la computadora, excepto ciertos directorios denegados

42* **Acceso bloqueado**: No puede modificar archivos fuera del directorio de trabajo actual sin permiso explícito

43* **Configurable**: Defina rutas permitidas y denegadas personalizadas a través de la configuración

44 

45Puede otorgar acceso de escritura a rutas adicionales usando `sandbox.filesystem.allowWrite` en su configuración. Estas restricciones se aplican a nivel del sistema operativo (Seatbelt en macOS, bubblewrap en Linux), por lo que se aplican a todos los comandos de subproceso, incluidas herramientas como `kubectl`, `terraform` y `npm`, no solo a las herramientas de archivo de Claude.

46 

47### Aislamiento de red

48 

49El acceso a la red se controla a través de un servidor proxy que se ejecuta fuera del sandbox:

50 

51* **Restricciones de dominio**: Solo se pueden acceder a dominios aprobados

52* **Confirmación del usuario**: Las nuevas solicitudes de dominio desencadenan solicitudes de permiso (a menos que [`allowManagedDomainsOnly`](/es/settings#sandbox-settings) esté habilitado, que bloquea automáticamente dominios no permitidos)

53* **Soporte de proxy personalizado**: Los usuarios avanzados pueden implementar reglas personalizadas en el tráfico saliente

54* **Cobertura integral**: Las restricciones se aplican a todos los scripts, programas y subprocesos generados por comandos

55 

56### Aplicación a nivel del sistema operativo

57 

58La herramienta bash aislada aprovecha las primitivas de seguridad del sistema operativo:

59 

60* **macOS**: Utiliza Seatbelt para la aplicación del sandbox

61* **Linux**: Utiliza [bubblewrap](https://github.com/containers/bubblewrap) para el aislamiento

62* **WSL2**: Utiliza bubblewrap, igual que Linux

63 

64WSL1 no es compatible porque bubblewrap requiere características del kernel solo disponibles en WSL2.

65 

66Estas restricciones a nivel del sistema operativo garantizan que todos los procesos secundarios generados por los comandos de Claude Code hereden los mismos límites de seguridad.

67 

68## Primeros pasos

69 

70### Requisitos previos

71 

72En **macOS**, el sandboxing funciona de inmediato usando el marco Seatbelt integrado.

73 

74En **Linux y WSL2**, instale primero los paquetes requeridos:

75 

76<Tabs>

77 <Tab title="Ubuntu/Debian">

78 ```bash theme={null}

79 sudo apt-get install bubblewrap socat

80 ```

81 </Tab>

82 

83 <Tab title="Fedora">

84 ```bash theme={null}

85 sudo dnf install bubblewrap socat

86 ```

87 </Tab>

88</Tabs>

89 

90WSL1 no admite sandboxing porque carece de las primitivas de espacio de nombres de Linux requeridas. Si ve `Sandboxing requires WSL2`, actualice su distribución a WSL2 o ejecute Claude Code sin sandboxing.

91 

92En WSL2, los comandos aislados no pueden lanzar binarios de Windows como `cmd.exe`, `powershell.exe`, o cualquier cosa bajo `/mnt/c/`. WSL entrega estos al host de Windows a través de un socket Unix, que el sandbox bloquea. Si un comando necesita invocar un binario de Windows, agréguelo a [`excludedCommands`](/es/settings#sandbox-settings) para que se ejecute fuera del sandbox.

93 

94### Habilitar sandboxing

95 

96Puede habilitar el sandboxing ejecutando el comando `/sandbox`:

97 

98```text theme={null}

99/sandbox

100```

101 

102Esto abre un menú donde puede elegir entre modos de sandbox. Si faltan dependencias requeridas (como `bubblewrap` o `socat` en Linux), el menú muestra instrucciones de instalación para su plataforma.

103 

104De forma predeterminada, si el sandbox no puede iniciarse (dependencias faltantes o plataforma no compatible), Claude Code muestra una advertencia y ejecuta comandos sin sandboxing. Para hacer que esto sea un error grave en su lugar, configure [`sandbox.failIfUnavailable`](/es/settings#sandbox-settings) a `true`. Esto está destinado a implementaciones administradas que requieren sandboxing como una puerta de seguridad.

105 

106### Modos de sandbox

107 

108Claude Code ofrece dos modos de sandbox:

109 

110**Modo de auto-permitir**: Los comandos Bash intentarán ejecutarse dentro del sandbox y se permitirán automáticamente sin requerir permiso. Los comandos que no se pueden aislar (como aquellos que necesitan acceso a la red a hosts no permitidos) vuelven al flujo de permiso regular. Las reglas de denegación explícitas siempre se respetan, y los comandos `rm` o `rmdir` que apunten a `/`, su directorio de inicio u otras rutas críticas del sistema aún desencadenan un aviso de permiso. Las reglas de solicitud se aplican solo a comandos que vuelven al flujo de permiso regular.

111 

112**Modo de permisos regulares**: Todos los comandos bash pasan por el flujo de permiso estándar, incluso cuando están aislados. Esto proporciona más control pero requiere más aprobaciones.

113 

114En ambos modos, el sandbox aplica las mismas restricciones de sistema de archivos y red. La diferencia es solo si los comandos aislados se aprueban automáticamente o requieren permiso explícito.

115 

116<Info>

117 El modo de auto-permitir funciona independientemente de su configuración de modo de permiso. Incluso si no está en modo "aceptar ediciones", los comandos bash aislados se ejecutarán automáticamente cuando el auto-permitir esté habilitado. Esto significa que los comandos bash que modifican archivos dentro de los límites del sandbox se ejecutarán sin solicitar, incluso cuando las herramientas de edición de archivos normalmente requerirían aprobación.

118</Info>

119 

120### Configurar sandboxing

121 

122Personalice el comportamiento del sandbox a través de su archivo `settings.json`. Consulte [Configuración](/es/settings#sandbox-settings) para obtener la referencia de configuración completa.

123 

124#### Otorgar acceso de escritura de subproceso a rutas específicas

125 

126De forma predeterminada, los comandos aislados solo pueden escribir en el directorio de trabajo actual. Si comandos de subproceso como `kubectl`, `terraform` o `npm` necesitan escribir fuera del directorio del proyecto, use `sandbox.filesystem.allowWrite` para otorgar acceso a rutas específicas:

127 

128```json theme={null}

129{

130 "sandbox": {

131 "enabled": true,

132 "filesystem": {

133 "allowWrite": ["~/.kube", "/tmp/build"]

134 }

135 }

136}

137```

138 

139Estas rutas se aplican a nivel del sistema operativo, por lo que todos los comandos que se ejecutan dentro del sandbox, incluidos sus procesos secundarios, las respetan. Este es el enfoque recomendado cuando una herramienta necesita acceso de escritura a una ubicación específica, en lugar de excluir la herramienta del sandbox por completo con `excludedCommands`.

140 

141Cuando `allowWrite` (o `denyWrite`/`denyRead`/`allowRead`) se define en múltiples [ámbitos de configuración](/es/settings#settings-precedence), los arrays se **fusionan**, lo que significa que las rutas de cada ámbito se combinan, no se reemplazan. Por ejemplo, si la configuración administrada permite escrituras en `/opt/company-tools` y un usuario agrega `~/.kube` en su configuración personal, ambas rutas se incluyen en la configuración final del sandbox. Esto significa que los usuarios y proyectos pueden extender la lista sin duplicar ni anular las rutas establecidas por ámbitos de mayor prioridad.

142 

143Los prefijos de ruta controlan cómo se resuelven las rutas:

144 

145| Prefijo | Significado | Ejemplo |

146| :----------------- | :------------------------------------------------------------------------------------------------------------ | :-------------------------------------------------------------------------- |

147| `/` | Ruta absoluta desde la raíz del sistema de archivos | `/tmp/build` se mantiene como `/tmp/build` |

148| `~/` | Relativo al directorio de inicio | `~/.kube` se convierte en `$HOME/.kube` |

149| `./` o sin prefijo | Relativo a la raíz del proyecto para configuración de proyecto, o a `~/.claude` para configuración de usuario | `./output` en `.claude/settings.json` se resuelve a `<project-root>/output` |

150 

151El prefijo anterior `//path` para rutas absolutas sigue funcionando. Si anteriormente usó `/path` esperando resolución relativa al proyecto, cambie a `./path`. Esta sintaxis difiere de las [reglas de permiso Read y Edit](/es/permissions#read-and-edit), que usan `//path` para absoluto y `/path` para relativo al proyecto. Las rutas del sistema de archivos del sandbox usan convenciones estándar: `/tmp/build` es una ruta absoluta.

152 

153También puede denegar acceso de escritura o lectura usando `sandbox.filesystem.denyWrite` y `sandbox.filesystem.denyRead`. Estos se fusionan con cualquier ruta de las reglas de permiso `Edit(...)` y `Read(...)`. Para permitir nuevamente la lectura de rutas específicas dentro de una región denegada, use `sandbox.filesystem.allowRead`, que tiene prioridad sobre `denyRead`. Cuando `allowManagedReadPathsOnly` está habilitado en la configuración administrada, solo se respetan las entradas `allowRead` administradas; las entradas `allowRead` de usuario, proyecto y local se ignoran. `denyRead` sigue fusionándose desde todas las fuentes.

154 

155Por ejemplo, para bloquear la lectura de todo el directorio de inicio mientras aún se permite la lectura del proyecto actual, agregue esto al `.claude/settings.json` de su proyecto:

156 

157```json theme={null}

158{

159 "sandbox": {

160 "enabled": true,

161 "filesystem": {

162 "denyRead": ["~/"],

163 "allowRead": ["."]

164 }

165 }

166}

167```

168 

169El `.` en `allowRead` se resuelve a la raíz del proyecto porque esta configuración se encuentra en la configuración del proyecto. Si colocara la misma configuración en `~/.claude/settings.json`, `.` se resolvería a `~/.claude` en su lugar, y los archivos del proyecto permanecerían bloqueados por la regla `denyRead`.

170 

171<Tip>

172 No todos los comandos son compatibles con el sandboxing de inmediato. Algunas notas que pueden ayudarle a aprovechar al máximo el sandbox:

173 

174 * Muchas herramientas CLI requieren acceder a ciertos hosts. A medida que utiliza estas herramientas, solicitarán permiso para acceder a ciertos hosts. Otorgar permiso les permitirá acceder a estos hosts ahora y en el futuro, permitiéndoles ejecutarse de manera segura dentro del sandbox.

175 * `watchman` es incompatible con la ejecución en el sandbox. Si está ejecutando `jest`, considere usar `jest --no-watchman`

176 * `docker` es incompatible con la ejecución en el sandbox. Considere especificar `docker *` en `excludedCommands` para forzarlo a ejecutarse fuera del sandbox.

177</Tip>

178 

179<Note>

180 Claude Code incluye un mecanismo de escape intencional que permite que los comandos se ejecuten fuera del sandbox cuando sea necesario. Cuando un comando falla debido a restricciones del sandbox (como problemas de conectividad de red o herramientas incompatibles), se solicita a Claude que analice la falla y puede reintentar el comando con el parámetro `dangerouslyDisableSandbox`. Los comandos que utilizan este parámetro pasan por el flujo de permisos normal de Claude Code que requiere permiso del usuario para ejecutarse. Esto permite que Claude Code maneje casos extremos donde ciertas herramientas u operaciones de red no pueden funcionar dentro de las restricciones del sandbox.

181 

182 Puede deshabilitar este mecanismo de escape configurando `"allowUnsandboxedCommands": false` en su [configuración de sandbox](/es/settings#sandbox-settings). Cuando está deshabilitado, el parámetro `dangerouslyDisableSandbox` se ignora completamente y todos los comandos deben ejecutarse aislados o estar explícitamente listados en `excludedCommands`.

183</Note>

184 

185## Beneficios de seguridad

186 

187### Protección contra inyección de solicitud

188 

189Incluso si un atacante manipula con éxito el comportamiento de Claude Code a través de inyección de solicitud, el sandbox garantiza que su sistema permanezca seguro:

190 

191**Protección del sistema de archivos:**

192 

193* No puede modificar archivos de configuración críticos como `~/.bashrc`

194* No puede modificar archivos a nivel del sistema en `/bin/`

195* No puede leer archivos que se deniegan en su [configuración de permisos de Claude](/es/permissions#manage-permissions)

196 

197**Protección de red:**

198 

199* No puede exfiltrar datos a servidores controlados por atacantes

200* No puede descargar scripts maliciosos de dominios no autorizados

201* No puede realizar llamadas API inesperadas a servicios no aprobados

202* No puede contactar a ningún dominio que no esté explícitamente permitido

203 

204**Monitoreo y control:**

205 

206* Todos los intentos de acceso fuera del sandbox se bloquean a nivel del sistema operativo

207* Recibe notificaciones inmediatas cuando se prueban los límites

208* Puede elegir denegar, permitir una vez o actualizar permanentemente su configuración

209 

210### Superficie de ataque reducida

211 

212El sandboxing limita el daño potencial de:

213 

214* **Dependencias maliciosas**: Paquetes NPM u otras dependencias con código dañino

215* **Scripts comprometidos**: Scripts de compilación o herramientas con vulnerabilidades de seguridad

216* **Ingeniería social**: Ataques que engañan a los usuarios para que ejecuten comandos peligrosos

217* **Inyección de solicitud**: Ataques que engañan a Claude para que ejecute comandos peligrosos

218 

219### Operación transparente

220 

221Cuando Claude Code intenta acceder a recursos de red fuera del sandbox:

222 

2231. La operación se bloquea a nivel del sistema operativo

2242. Recibe una notificación inmediata

2253. Puede elegir:

226 * Denegar la solicitud

227 * Permitirla una vez

228 * Actualizar su configuración de sandbox para permitirla permanentemente

229 

230## Limitaciones de seguridad

231 

232* Limitaciones de sandboxing de red: El sistema de filtrado de red funciona restringiendo los dominios a los que se permite que se conecten los procesos. De lo contrario, no inspecciona el tráfico que pasa a través del proxy y los usuarios son responsables de asegurarse de que solo permitan dominios confiables en su política.

233 

234<Warning>

235 Los usuarios deben ser conscientes de los riesgos potenciales que conlleva permitir dominios amplios como `github.com` que pueden permitir la exfiltración de datos. Además, en algunos casos puede ser posible eludir el filtrado de red a través de [domain fronting](https://en.wikipedia.org/wiki/Domain_fronting).

236</Warning>

237 

238* Escalada de privilegios a través de sockets Unix: La configuración `allowUnixSockets` puede otorgar inadvertidamente acceso a servicios del sistema poderosos que podrían llevar a omisiones del sandbox. Por ejemplo, si se usa para permitir acceso a `/var/run/docker.sock`, esto efectivamente otorgaría acceso al sistema host explotando el socket de docker. Se anima a los usuarios a considerar cuidadosamente cualquier socket unix que permitan a través del sandbox.

239* Escalada de permisos del sistema de archivos: Los permisos de escritura del sistema de archivos demasiado amplios pueden permitir ataques de escalada de privilegios. Permitir escrituras en directorios que contienen ejecutables en `$PATH`, directorios de configuración del sistema o archivos de configuración de shell del usuario (`.bashrc`, `.zshrc`) puede llevar a la ejecución de código en diferentes contextos de seguridad cuando otros usuarios o procesos del sistema acceden a estos archivos.

240* Fortaleza del sandbox de Linux: La implementación de Linux proporciona un fuerte aislamiento del sistema de archivos y la red pero incluye un modo `enableWeakerNestedSandbox` que le permite funcionar dentro de entornos Docker sin espacios de nombres privilegiados. Esta opción debilita considerablemente la seguridad y solo debe usarse en casos donde se aplica aislamiento adicional de otra manera.

241 

242## Cómo se relaciona el sandboxing con los permisos

243 

244El sandboxing y los [permisos](/es/permissions) son capas de seguridad complementarias que funcionan juntas:

245 

246* **Permisos** controlan qué herramientas puede usar Claude Code y se evalúan antes de que se ejecute cualquier herramienta. Se aplican a todas las herramientas: Bash, Read, Edit, WebFetch, MCP y otras.

247* **Sandboxing** proporciona aplicación a nivel del sistema operativo que restringe lo que los comandos Bash pueden acceder a nivel del sistema de archivos y la red. Se aplica solo a comandos Bash y sus procesos secundarios.

248 

249Las restricciones del sistema de archivos y la red se configuran tanto a través de la configuración del sandbox como de las reglas de permiso:

250 

251* Use `sandbox.filesystem.allowWrite` para otorgar acceso de escritura de subproceso a rutas fuera del directorio de trabajo

252* Use `sandbox.filesystem.denyWrite` y `sandbox.filesystem.denyRead` para bloquear el acceso de subproceso a rutas específicas

253* Use `sandbox.filesystem.allowRead` para permitir nuevamente la lectura de rutas específicas dentro de una región `denyRead`

254* Use reglas de denegación `Read` y `Edit` para bloquear el acceso a archivos o directorios específicos

255* Use reglas de permitir/denegar `WebFetch` para controlar el acceso al dominio

256* Use `allowedDomains` del sandbox para controlar qué dominios pueden alcanzar los comandos Bash

257* Use `deniedDomains` del sandbox para bloquear dominios específicos incluso cuando un comodín `allowedDomains` más amplio de otra manera los permitiría

258 

259Las rutas de ambas configuraciones `sandbox.filesystem` y reglas de permiso se fusionan en la configuración final del sandbox.

260 

261Este [repositorio](https://github.com/anthropics/claude-code/tree/main/examples/settings) incluye configuraciones de configuración de inicio para escenarios de implementación comunes, incluidos ejemplos específicos del sandbox. Úselos como puntos de partida y ajústelos según sus necesidades.

262 

263## Uso avanzado

264 

265### Configuración de proxy personalizado

266 

267Para organizaciones que requieren seguridad de red avanzada, puede implementar un proxy personalizado para:

268 

269* Descifrar e inspeccionar tráfico HTTPS

270* Aplicar reglas de filtrado personalizadas

271* Registrar todas las solicitudes de red

272* Integrar con infraestructura de seguridad existente

273 

274```json theme={null}

275{

276 "sandbox": {

277 "network": {

278 "httpProxyPort": 8080,

279 "socksProxyPort": 8081

280 }

281 }

282}

283```

284 

285### Integración con herramientas de seguridad existentes

286 

287La herramienta bash aislada funciona junto con:

288 

289* **Reglas de permiso**: Combinar con [configuración de permisos](/es/permissions) para defensa en profundidad

290* **Contenedores de desarrollo**: Usar con [devcontainers](/es/devcontainer) para aislamiento adicional

291* **Políticas empresariales**: Aplicar configuraciones de sandbox a través de [configuración administrada](/es/settings#settings-precedence)

292 

293## Mejores prácticas

294 

2951. **Comience restrictivo**: Comience con permisos mínimos y expanda según sea necesario

2962. **Monitoree registros**: Revise los intentos de violación del sandbox para entender las necesidades de Claude Code

2973. **Use configuraciones específicas del entorno**: Diferentes reglas de sandbox para contextos de desarrollo versus producción

2984. **Combine con permisos**: Use sandboxing junto con políticas IAM para seguridad integral

2995. **Pruebe configuraciones**: Verifique que su configuración de sandbox no bloquee flujos de trabajo legítimos

300 

301## Código abierto

302 

303El tiempo de ejecución del sandbox está disponible como un paquete npm de código abierto para usar en sus propios proyectos de agentes. Esto permite que la comunidad más amplia de agentes de IA construya sistemas autónomos más seguros y protegidos. Esto también se puede usar para aislar otros programas que desee ejecutar. Por ejemplo, para aislar un servidor MCP podría ejecutar:

304 

305```bash theme={null}

306npx @anthropic-ai/sandbox-runtime <command-to-sandbox>

307```

308 

309Para detalles de implementación y código fuente, visite el [repositorio de GitHub](https://github.com/anthropic-experimental/sandbox-runtime).

310 

311## Limitaciones

312 

313* **Sobrecarga de rendimiento**: Mínima, pero algunas operaciones del sistema de archivos pueden ser ligeramente más lentas

314* **Compatibilidad**: Algunas herramientas que requieren patrones de acceso específicos del sistema pueden necesitar ajustes de configuración, o incluso pueden necesitar ejecutarse fuera del sandbox

315* **Soporte de plataforma**: Admite macOS, Linux y WSL2. WSL1 no es compatible. Se planea soporte nativo de Windows.

316 

317## Lo que el sandboxing no cubre

318 

319El sandbox aísla subprocesos Bash. Otras herramientas operan bajo límites diferentes:

320 

321* **Herramientas de archivo integradas**: Read, Edit y Write usan el sistema de permisos directamente en lugar de ejecutarse a través del sandbox. Consulte [permisos](/es/permissions).

322* **Uso de computadora**: Cuando Claude abre aplicaciones y controla su pantalla, se ejecuta en su escritorio real en lugar de en un entorno aislado. Los mensajes de permiso por aplicación controlan cada aplicación. Consulte [uso de computadora en CLI](/es/computer-use) o [uso de computadora en Desktop](/es/desktop#let-claude-use-your-computer).

323 

324## Ver también

325 

326* [Seguridad](/es/security) - Características de seguridad integral y mejores prácticas

327* [Permisos](/es/permissions) - Configuración de permisos y control de acceso

328* [Configuración](/es/settings) - Referencia de configuración completa

329* [Referencia de CLI](/es/cli-reference) - Opciones de línea de comandos

scheduled-tasks.md +213 −0 created

Details

1> ## Documentation Index

2> Fetch the complete documentation index at: https://code.claude.com/docs/llms.txt

3> Use this file to discover all available pages before exploring further.

4 

5# Ejecutar prompts en un horario

6 

7> Utilice /loop y las herramientas de programación cron para ejecutar prompts repetidamente, sondear el estado o establecer recordatorios únicos dentro de una sesión de Claude Code.

8 

9<Note>

10 Las tareas programadas requieren Claude Code v2.1.72 o posterior. Verifique su versión con `claude --version`.

11</Note>

12 

13Las tareas programadas permiten que Claude vuelva a ejecutar un prompt automáticamente en un intervalo. Úselas para sondear una implementación, supervisar un PR, verificar una compilación de larga duración o recordarse a sí mismo que debe hacer algo más adelante en la sesión. Para reaccionar a eventos a medida que ocurren en lugar de sondear, consulte [Channels](/es/channels): su CI puede insertar el error directamente en la sesión.

14 

15Las tareas tienen alcance de sesión: viven en la conversación actual y se detienen cuando inicia una nueva. Reanudar con `--resume` o `--continue` trae de vuelta cualquier tarea que no haya [expirado](#seven-day-expiry): una tarea recurrente creada en los últimos 7 días, o una única cuyo tiempo programado aún no ha pasado. Para la programación que sobrevive independientemente de cualquier sesión, utilice [Routines](/es/routines), [tareas programadas de Desktop](/es/desktop-scheduled-tasks) o [GitHub Actions](/es/github-actions).

16 

17## Comparar opciones de programación

18 

19Claude Code offers three ways to schedule recurring or one-off work:

20 

21| | [Cloud](/en/routines) | [Desktop](/en/desktop-scheduled-tasks) | [`/loop`](/en/scheduled-tasks) |

22| :------------------------- | :----------------------------- | :------------------------------------- | :---------------------------------- |

23| Runs on | Anthropic cloud | Your machine | Your machine |

24| Requires machine on | No | Yes | Yes |

25| Requires open session | No | No | Yes |

26| Persistent across restarts | Yes | Yes | Restored on `--resume` if unexpired |

27| Access to local files | No (fresh clone) | Yes | Yes |

28| MCP servers | Connectors configured per task | [Config files](/en/mcp) and connectors | Inherits from session |

29| Permission prompts | No (runs autonomously) | Configurable per task | Inherits from session |

30| Customizable schedule | Via `/schedule` in the CLI | Yes | Yes |

31| Minimum interval | 1 hour | 1 minute | 1 minute |

32 

33<Tip>

34 Use **cloud tasks** for work that should run reliably without your machine. Use **Desktop tasks** when you need access to local files and tools. Use **`/loop`** for quick polling during a session.

35</Tip>

36 

37## Ejecutar un prompt repetidamente con /loop

38 

39El `/loop` [bundled skill](/es/commands) es la forma más rápida de ejecutar un prompt repetidamente mientras la sesión permanece abierta. Tanto el intervalo como el prompt son opcionales, y lo que proporcione determina cómo se comporta el bucle.

40 

41| Lo que proporciona | Ejemplo | Qué sucede |

42| :--------------------- | :-------------------------- | :-------------------------------------------------------------------------------------------------------------------- |

43| Intervalo y prompt | `/loop 5m check the deploy` | Su prompt se ejecuta en un [horario fijo](#run-on-a-fixed-interval) |

44| Solo prompt | `/loop check the deploy` | Su prompt se ejecuta en un [intervalo que Claude elige](#let-claude-choose-the-interval) en cada iteración |

45| Solo intervalo, o nada | `/loop` | El [prompt de mantenimiento integrado](#run-the-built-in-maintenance-prompt) se ejecuta, o su `loop.md` si existe uno |

46 

47También puede pasar otro comando como el prompt, por ejemplo `/loop 20m /review-pr 1234`, para volver a ejecutar un flujo de trabajo empaquetado en cada iteración.

48 

49### Ejecutar en un intervalo fijo

50 

51Cuando proporciona un intervalo, Claude lo convierte en una expresión cron, programa el trabajo y confirma la cadencia y el ID del trabajo.

52 

53```text theme={null}

54/loop 5m check if the deployment finished and tell me what happened

55```

56 

57El intervalo puede encabezar el prompt como un token simple como `30m`, o seguirlo como una cláusula como `every 2 hours`. Las unidades admitidas son `s` para segundos, `m` para minutos, `h` para horas y `d` para días.

58 

59Los segundos se redondean al minuto más cercano ya que cron tiene una granularidad de un minuto. Los intervalos que no se asignan a un paso cron limpio, como `7m` o `90m`, se redondean al intervalo más cercano que sí lo hace y Claude le dice cuál eligió.

60 

61### Dejar que Claude elija el intervalo

62 

63Cuando omite el intervalo, Claude elige uno dinámicamente en lugar de ejecutarse en un horario cron fijo. Después de cada iteración, elige un retraso entre un minuto y una hora según lo que observó: esperas cortas mientras una compilación se está terminando o un PR está activo, esperas más largas cuando no hay nada pendiente. El retraso elegido y la razón del mismo se imprimen al final de cada iteración.

64 

65El ejemplo a continuación verifica CI y comentarios de revisión, con Claude esperando más tiempo entre iteraciones una vez que el PR se queda en silencio:

66 

67```text theme={null}

68/loop check whether CI passed and address any review comments

69```

70 

71Cuando solicita un horario `/loop` dinámico, Claude puede usar la [herramienta Monitor](/es/tools-reference#monitor-tool) directamente. Monitor ejecuta un script de fondo y transmite cada línea de salida, lo que evita el sondeo por completo y a menudo es más eficiente en tokens y más receptivo que volver a ejecutar un prompt en un intervalo.

72 

73Un bucle programado dinámicamente aparece en su [lista de tareas programadas](#manage-scheduled-tasks) como cualquier otra tarea, por lo que puede enumerarla o cancelarla de la misma manera. Las [reglas de jitter](#jitter) no se aplican a ella, pero el [vencimiento de siete días](#seven-day-expiry) sí: el bucle termina automáticamente siete días después de iniciarlo.

74 

75<Note>

76 En Bedrock, Vertex AI y Microsoft Foundry, un prompt sin intervalo se ejecuta en un horario fijo de 10 minutos en su lugar.

77</Note>

78 

79### Ejecutar el prompt de mantenimiento integrado

80 

81Cuando omite el prompt, Claude usa un prompt de mantenimiento integrado en lugar de uno que proporcione. En cada iteración, trabaja a través de lo siguiente, en orden:

82 

83* continuar cualquier trabajo inacabado de la conversación

84* cuidar el pull request de la rama actual: comentarios de revisión, ejecuciones de CI fallidas, conflictos de fusión

85* ejecutar pasadas de limpieza como búsquedas de errores o simplificación cuando no hay nada más pendiente

86 

87Claude no inicia nuevas iniciativas fuera de ese alcance, y las acciones irreversibles como insertar o eliminar solo proceden cuando continúan algo que la transcripción ya autorizó.

88 

89```text theme={null}

90/loop

91```

92 

93Un `/loop` simple ejecuta este prompt en un [intervalo elegido dinámicamente](#let-claude-choose-the-interval). Agregue un intervalo, por ejemplo `/loop 15m`, para ejecutarlo en un horario fijo en su lugar. Para reemplazar el prompt integrado con el suyo propio, consulte [Personalizar el prompt predeterminado con loop.md](#customize-the-default-prompt-with-loop-md).

94 

95<Note>

96 En Bedrock, Vertex AI y Microsoft Foundry, `/loop` sin prompt imprime el mensaje de uso en lugar de iniciar el bucle de mantenimiento.

97</Note>

98 

99### Personalizar el prompt predeterminado con loop.md

100 

101Un archivo `loop.md` reemplaza el prompt de mantenimiento integrado con sus propias instrucciones. Define un único prompt predeterminado para `/loop` simple, no una lista de tareas programadas separadas, e se ignora siempre que proporcione un prompt en la línea de comandos. Para programar prompts adicionales junto a él, use `/loop <prompt>` o [pida a Claude directamente](#manage-scheduled-tasks).

102 

103Claude busca el archivo en dos ubicaciones y usa el primero que encuentra.

104 

105| Ruta | Alcance |

106| :------------------ | :------------------------------------------------------------------------------ |

107| `.claude/loop.md` | Nivel de proyecto. Tiene precedencia cuando ambos archivos existen. |

108| `~/.claude/loop.md` | Nivel de usuario. Se aplica en cualquier proyecto que no defina el suyo propio. |

109 

110El archivo es Markdown simple sin estructura requerida. Escríbalo como si estuviera escribiendo el prompt `/loop` directamente. El siguiente ejemplo mantiene una rama de lanzamiento saludable:

111 

112```markdown title=".claude/loop.md" theme={null}

113Check the `release/next` PR. If CI is red, pull the failing job log,

114diagnose, and push a minimal fix. If new review comments have arrived,

115address each one and resolve the thread. If everything is green and

116quiet, say so in one line.

117```

118 

119Las ediciones a `loop.md` tienen efecto en la siguiente iteración, por lo que puede refinar las instrucciones mientras un bucle se está ejecutando. Cuando no existe `loop.md` en ninguna ubicación, el bucle vuelve al prompt de mantenimiento integrado. Mantenga el archivo conciso: el contenido más allá de 25,000 bytes se trunca.

120 

121### Detener un bucle

122 

123Para detener un `/loop` mientras espera la siguiente iteración, presione `Esc`. Esto borra el despertar pendiente para que el bucle no se ejecute nuevamente. Las tareas que programó [pidiendo a Claude directamente](#manage-scheduled-tasks) no se ven afectadas por `Esc` y permanecen en su lugar hasta que las elimine.

124 

125## Establecer un recordatorio único

126 

127Para recordatorios únicos, describa lo que desea en lenguaje natural en lugar de usar `/loop`. Claude programa una tarea de un solo disparo que se elimina a sí misma después de ejecutarse.

128 

129```text theme={null}

130remind me at 3pm to push the release branch

131```

132 

133```text theme={null}

134in 45 minutes, check whether the integration tests passed

135```

136 

137Claude fija la hora de disparo a un minuto y hora específicos usando una expresión cron y confirma cuándo se ejecutará.

138 

139## Gestionar tareas programadas

140 

141Pida a Claude en lenguaje natural que enumere o cancele tareas, o haga referencia directamente a las herramientas subyacentes.

142 

143```text theme={null}

144what scheduled tasks do I have?

145```

146 

147```text theme={null}

148cancel the deploy check job

149```

150 

151Bajo el capó, Claude utiliza estas herramientas:

152 

153| Herramienta | Propósito |

154| :----------- | :------------------------------------------------------------------------------------------------------------------------------- |

155| `CronCreate` | Programar una nueva tarea. Acepta una expresión cron de 5 campos, el prompt a ejecutar y si se repite o se ejecuta una sola vez. |

156| `CronList` | Enumerar todas las tareas programadas con sus IDs, horarios y prompts. |

157| `CronDelete` | Cancelar una tarea por ID. |

158 

159Cada tarea programada tiene un ID de 8 caracteres que puede pasar a `CronDelete`. Una sesión puede contener hasta 50 tareas programadas a la vez.

160 

161## Cómo se ejecutan las tareas programadas

162 

163El programador verifica cada segundo si hay tareas vencidas y las encola con baja prioridad. Un prompt programado se ejecuta entre sus turnos, no mientras Claude está en medio de una respuesta. Si Claude está ocupado cuando vence una tarea, el prompt espera hasta que termine el turno actual.

164 

165Todos los tiempos se interpretan en su zona horaria local. Una expresión cron como `0 9 * * *` significa las 9am donde está ejecutando Claude Code, no UTC.

166 

167### Jitter

168 

169Para evitar que cada sesión golpee la API en el mismo momento de reloj de pared, el programador agrega un pequeño desplazamiento determinista a los tiempos de disparo:

170 

171* Las tareas recurrentes se ejecutan hasta un 10% de su período tarde, limitado a 15 minutos. Un trabajo por hora podría ejecutarse en cualquier momento desde `:00` hasta `:06`.

172* Las tareas únicas programadas para la parte superior o inferior de la hora se ejecutan hasta 90 segundos antes.

173 

174El desplazamiento se deriva del ID de la tarea, por lo que la misma tarea siempre obtiene el mismo desplazamiento. Si el tiempo exacto es importante, elija un minuto que no sea `:00` o `:30`, por ejemplo `3 9 * * *` en lugar de `0 9 * * *`, y el jitter único no se aplicará.

175 

176### Vencimiento de siete días

177 

178Las tareas recurrentes expiran automáticamente 7 días después de su creación. La tarea se ejecuta una última vez, luego se elimina a sí misma. Esto limita cuánto tiempo puede ejecutarse un bucle olvidado. Si necesita que una tarea recurrente dure más, cancele y recree antes de que expire, o utilice [Routines](/es/routines) o [tareas programadas de Desktop](/es/desktop-scheduled-tasks) para programación duradera.

179 

180## Referencia de expresión cron

181 

182`CronCreate` acepta expresiones cron estándar de 5 campos: `minute hour day-of-month month day-of-week`. Todos los campos admiten comodines (`*`), valores únicos (`5`), pasos (`*/15`), rangos (`1-5`) y listas separadas por comas (`1,15,30`).

183 

184| Ejemplo | Significado |

185| :------------- | :----------------------------- |

186| `*/5 * * * *` | Cada 5 minutos |

187| `0 * * * *` | Cada hora en punto |

188| `7 * * * *` | Cada hora a los 7 minutos |

189| `0 9 * * *` | Todos los días a las 9am local |

190| `0 9 * * 1-5` | Días de semana a las 9am local |

191| `30 14 15 3 *` | 15 de marzo a las 2:30pm local |

192 

193El día de la semana usa `0` o `7` para domingo hasta `6` para sábado. La sintaxis extendida como `L`, `W`, `?` y alias de nombres como `MON` o `JAN` no se admiten.

194 

195Cuando tanto el día del mes como el día de la semana están restringidos, una fecha coincide si cualquiera de los campos coincide. Esto sigue la semántica estándar de vixie-cron.

196 

197## Deshabilitar tareas programadas

198 

199Establezca `CLAUDE_CODE_DISABLE_CRON=1` en su entorno para deshabilitar completamente el programador. Las herramientas cron y `/loop` dejan de estar disponibles, y cualquier tarea ya programada deja de ejecutarse. Consulte [Variables de entorno](/es/env-vars) para la lista completa de banderas de deshabilitación.

200 

201## Limitaciones

202 

203La programación con alcance de sesión tiene limitaciones inherentes:

204 

205* Las tareas solo se ejecutan mientras Claude Code está ejecutándose e inactivo. Cerrar la terminal o dejar que la sesión salga detiene su ejecución.

206* Sin recuperación de disparos perdidos. Si el tiempo programado de una tarea pasa mientras Claude está ocupado en una solicitud de larga duración, se ejecuta una vez cuando Claude queda inactivo, no una vez por intervalo perdido.

207* Iniciar una conversación nueva borra todas las tareas con alcance de sesión. Reanudar con `claude --resume` o `claude --continue` restaura tareas que no han expirado: tareas recurrentes dentro de siete días de creación, y tareas únicas cuyo tiempo programado aún no ha pasado. Las tareas de Bash de fondo y monitor nunca se restauran al reanudar.

208 

209Para la automatización impulsada por cron que necesita ejecutarse sin supervisión:

210 

211* [Routines](/es/routines): se ejecutan en infraestructura administrada por Anthropic en un horario, mediante llamada a API o en eventos de GitHub

212* [GitHub Actions](/es/github-actions): utilice un disparador `schedule` en CI

213* [tareas programadas de Desktop](/es/desktop-scheduled-tasks): se ejecutan localmente en su máquina

security.md +143 −0 created

Details

1> ## Documentation Index

2> Fetch the complete documentation index at: https://code.claude.com/docs/llms.txt

3> Use this file to discover all available pages before exploring further.

4 

5# Seguridad

6 

7> Aprenda sobre las medidas de seguridad de Claude Code y las mejores prácticas para un uso seguro.

8 

9## Cómo abordamos la seguridad

10 

11### Fundamento de seguridad

12 

13La seguridad de su código es primordial. Claude Code está construido con la seguridad en su núcleo, desarrollado de acuerdo con el programa de seguridad integral de Anthropic. Obtenga más información y acceda a recursos (informe SOC 2 Type 2, certificado ISO 27001, etc.) en [Anthropic Trust Center](https://trust.anthropic.com).

14 

15### Arquitectura basada en permisos

16 

17Claude Code utiliza permisos de solo lectura estrictos de forma predeterminada. Cuando se necesitan acciones adicionales (editar archivos, ejecutar pruebas, ejecutar comandos), Claude Code solicita permiso explícito. Los usuarios controlan si aprobar acciones una sola vez o permitirlas automáticamente.

18 

19Diseñamos Claude Code para ser transparente y seguro. Por ejemplo, requerimos aprobación para comandos bash antes de ejecutarlos, lo que le da control directo. Este enfoque permite a los usuarios y organizaciones configurar permisos directamente.

20 

21Para la configuración detallada de permisos, consulte [Permissions](/es/permissions).

22 

23### Protecciones integradas

24 

25Para mitigar riesgos en sistemas agénticos:

26 

27* **Herramienta bash en sandbox**: [Sandbox](/es/sandboxing) comandos bash con aislamiento del sistema de archivos y red, reduciendo solicitudes de permiso mientras se mantiene la seguridad. Habilite con `/sandbox` para definir límites donde Claude Code puede trabajar de forma autónoma

28* **Restricción de acceso de escritura**: Claude Code solo puede escribir en la carpeta donde se inició y sus subcarpetas—no puede modificar archivos en directorios principales sin permiso explícito. Aunque Claude Code puede leer archivos fuera del directorio de trabajo (útil para acceder a bibliotecas del sistema y dependencias), las operaciones de escritura están estrictamente limitadas al alcance del proyecto, creando un límite de seguridad claro

29* **Mitigación de fatiga de solicitudes**: Soporte para listas de permitidos de comandos seguros frecuentemente utilizados por usuario, por base de código u por organización

30* **Modo Aceptar Ediciones**: Aceptar por lotes múltiples ediciones mientras se mantienen solicitudes de permiso para comandos con efectos secundarios

31 

32### Responsabilidad del usuario

33 

34Claude Code solo tiene los permisos que usted le otorga. Usted es responsable de revisar el código y los comandos propuestos para verificar su seguridad antes de aprobarlos.

35 

36## Protéjase contra la inyección de solicitudes

37 

38La inyección de solicitudes es una técnica donde un atacante intenta anular o manipular las instrucciones de un asistente de IA insertando texto malicioso. Claude Code incluye varias medidas de protección contra estos ataques:

39 

40### Protecciones principales

41 

42* **Sistema de permisos**: Las operaciones sensibles requieren aprobación explícita

43* **Análisis consciente del contexto**: Detecta instrucciones potencialmente dañinas analizando la solicitud completa

44* **Sanitización de entrada**: Previene la inyección de comandos procesando entradas del usuario

45* **Lista de bloqueo de comandos**: Bloquea comandos arriesgados que obtienen contenido arbitrario de la web como `curl` y `wget` de forma predeterminada. Cuando se permite explícitamente, tenga en cuenta las [limitaciones del patrón de permisos](/es/permissions#tool-specific-permission-rules)

46 

47### Medidas de protección de privacidad

48 

49Hemos implementado varias medidas de protección para proteger sus datos, incluyendo:

50 

51* Períodos de retención limitados para información sensible (consulte el [Privacy Center](https://privacy.anthropic.com/en/articles/10023548-how-long-do-you-store-my-data) para obtener más información)

52* Acceso restringido a datos de sesión del usuario

53* Control del usuario sobre preferencias de entrenamiento de datos. Los usuarios de consumidor pueden cambiar su [configuración de privacidad](https://claude.ai/settings/privacy) en cualquier momento.

54 

55Para obtener detalles completos, consulte nuestros [Términos de Servicio Comerciales](https://www.anthropic.com/legal/commercial-terms) (para usuarios de Team, Enterprise y API) o [Términos de Consumidor](https://www.anthropic.com/legal/consumer-terms) (para usuarios de Free, Pro y Max) y [Política de Privacidad](https://www.anthropic.com/legal/privacy).

56 

57### Medidas de protección adicionales

58 

59* **Aprobación de solicitudes de red**: Las herramientas que realizan solicitudes de red requieren aprobación del usuario de forma predeterminada

60* **Ventanas de contexto aisladas**: La obtención web utiliza una ventana de contexto separada para evitar inyectar solicitudes potencialmente maliciosas

61* **Verificación de confianza**: Las primeras ejecuciones de base de código y los nuevos servidores MCP requieren verificación de confianza

62 * Nota: La verificación de confianza está deshabilitada cuando se ejecuta de forma no interactiva con la bandera `-p`

63* **Detección de inyección de comandos**: Los comandos bash sospechosos requieren aprobación manual incluso si fueron permitidos previamente

64* **Coincidencia de cierre seguro**: Los comandos no coincidentes se establecen de forma predeterminada para requerir aprobación manual

65* **Descripciones en lenguaje natural**: Los comandos bash complejos incluyen explicaciones para la comprensión del usuario

66* **Almacenamiento seguro de credenciales**: Las claves API y tokens están encriptados. Consulte [Credential Management](/es/authentication#credential-management)

67 

68<Warning>

69 **Riesgo de seguridad de WebDAV en Windows**: Cuando ejecute Claude Code en Windows, le recomendamos que no habilite WebDAV ni permita que Claude Code acceda a rutas como `\\*` que pueden contener subdirectorios de WebDAV. [WebDAV ha sido deprecado por Microsoft](https://learn.microsoft.com/en-us/windows/whats-new/deprecated-features#:~:text=The%20Webclient%20\(WebDAV\)%20service%20is%20deprecated) debido a riesgos de seguridad. Habilitar WebDAV puede permitir que Claude Code desencadene solicitudes de red a hosts remotos, eludiendo el sistema de permisos.

70</Warning>

71 

72**Mejores prácticas para trabajar con contenido no confiable**:

73 

741. Revise los comandos sugeridos antes de aprobarlos

752. Evite canalizar contenido no confiable directamente a Claude

763. Verifique los cambios propuestos en archivos críticos

774. Utilice máquinas virtuales (VMs) para ejecutar scripts y realizar llamadas de herramientas, especialmente cuando interactúe con servicios web externos

785. Reporte comportamiento sospechoso con `/feedback`

79 

80<Warning>

81 Aunque estas protecciones reducen significativamente el riesgo, ningún sistema es completamente

82 inmune a todos los ataques. Siempre mantenga buenas prácticas de seguridad cuando trabaje

83 con cualquier herramienta de IA.

84</Warning>

85 

86## Seguridad de MCP

87 

88Claude Code permite a los usuarios configurar servidores del Protocolo de Contexto del Modelo (MCP). La lista de servidores MCP permitidos se configura en su código fuente, como parte de la configuración de Claude Code que los ingenieros verifican en el control de versiones.

89 

90Le recomendamos que escriba sus propios servidores MCP o utilice servidores MCP de proveedores en los que confíe. Puede configurar permisos de Claude Code para servidores MCP. Anthropic no gestiona ni audita ningún servidor MCP.

91 

92## Seguridad del IDE

93 

94Consulte [Seguridad y privacidad de VS Code](/es/vs-code#security-and-privacy) para obtener más información sobre cómo ejecutar Claude Code en un IDE.

95 

96## Seguridad de ejecución en la nube

97 

98Cuando utiliza [Claude Code en la web](/es/claude-code-on-the-web), hay controles de seguridad adicionales en su lugar:

99 

100* **Máquinas virtuales aisladas**: Cada sesión en la nube se ejecuta en una VM aislada gestionada por Anthropic

101* **Controles de acceso a la red**: El acceso a la red está limitado de forma predeterminada y se puede configurar para deshabilitarse o permitir solo dominios específicos

102* **Protección de credenciales**: La autenticación se maneja a través de un proxy seguro que utiliza una credencial con alcance dentro del sandbox, que luego se traduce a su token de autenticación de GitHub real

103* **Restricciones de rama**: Las operaciones de inserción de Git están restringidas a la rama de trabajo actual

104* **Registro de auditoría**: Todas las operaciones en entornos en la nube se registran para fines de cumplimiento y auditoría

105* **Limpieza automática**: Los entornos en la nube se terminan automáticamente después de la finalización de la sesión

106 

107Para obtener más detalles sobre la ejecución en la nube, consulte [Claude Code en la web](/es/claude-code-on-the-web).

108 

109Las sesiones de [Remote Control](/es/remote-control) funcionan de manera diferente: la interfaz web se conecta a un proceso de Claude Code que se ejecuta en su máquina local. Toda la ejecución de código y el acceso a archivos permanecen locales, y los mismos datos que fluyen durante cualquier sesión local de Claude Code viajan a través de la API de Anthropic sobre TLS. No hay VMs en la nube ni sandboxing involucrados. La conexión utiliza múltiples credenciales de corta duración y alcance estrecho, cada una limitada a un propósito específico y expirando independientemente, para limitar el radio de explosión de cualquier credencial comprometida.

110 

111## Mejores prácticas de seguridad

112 

113### Trabajar con código sensible

114 

115* Revise todos los cambios sugeridos antes de aprobarlos

116* Utilice configuración de permisos específica del proyecto para repositorios sensibles

117* Considere utilizar [dev containers](/es/devcontainer) para aislamiento adicional

118* Audite regularmente su configuración de permisos con `/permissions`

119 

120### Seguridad del equipo

121 

122* Utilice [configuración gestionada](/es/settings#settings-files) para aplicar estándares organizacionales

123* Comparta configuraciones de permisos aprobadas a través del control de versiones

124* Capacite a los miembros del equipo sobre mejores prácticas de seguridad

125* Monitoree el uso de Claude Code a través de [métricas de OpenTelemetry](/es/monitoring-usage)

126* Audite o bloquee cambios de configuración durante sesiones con [hooks `ConfigChange`](/es/hooks#configchange)

127 

128### Reportar problemas de seguridad

129 

130Si descubre una vulnerabilidad de seguridad en Claude Code:

131 

1321. No la divulgue públicamente

1332. Repórtela a través de nuestro [programa HackerOne](https://hackerone.com/4f1f16ba-10d3-4d09-9ecc-c721aad90f24/embedded_submissions/new)

1343. Incluya pasos de reproducción detallados

1354. Permita tiempo para que abordemos el problema antes de la divulgación pública

136 

137## Recursos relacionados

138 

139* [Sandboxing](/es/sandboxing) - Aislamiento del sistema de archivos y red para comandos bash

140* [Permissions](/es/permissions) - Configure permisos y controles de acceso

141* [Monitoring usage](/es/monitoring-usage) - Rastree y audite la actividad de Claude Code

142* [Development containers](/es/devcontainer) - Entornos seguros y aislados

143* [Anthropic Trust Center](https://trust.anthropic.com) - Certificaciones de seguridad y cumplimiento

server-managed-settings.md +224 −0 created

Details

1> ## Documentation Index

2> Fetch the complete documentation index at: https://code.claude.com/docs/llms.txt

3> Use this file to discover all available pages before exploring further.

4 

5# Configurar la configuración administrada por servidor

6 

7> Configure Claude Code centralmente para su organización a través de configuración entregada por servidor, sin requerir infraestructura de administración de dispositivos.

8 

9La configuración administrada por servidor permite a los administradores configurar Claude Code centralmente a través de una interfaz basada en web en Claude.ai. Los clientes de Claude Code reciben automáticamente estas configuraciones cuando los usuarios se autentican con sus credenciales organizacionales.

10 

11Este enfoque está diseñado para organizaciones que no tienen infraestructura de administración de dispositivos implementada, o que necesitan administrar configuraciones para usuarios en dispositivos no administrados.

12 

13<Note>

14 La configuración administrada por servidor está disponible para clientes de [Claude for Teams](https://claude.com/pricing?utm_source=claude_code\&utm_medium=docs\&utm_content=server_settings_teams#team-&-enterprise) y [Claude for Enterprise](https://anthropic.com/contact-sales?utm_source=claude_code\&utm_medium=docs\&utm_content=server_settings_enterprise).

15</Note>

16 

17## Requisitos

18 

19Para usar la configuración administrada por servidor, necesita:

20 

21* Plan Claude for Teams o Claude for Enterprise

22* Claude Code versión 2.1.38 o posterior para Claude for Teams, o versión 2.1.30 o posterior para Claude for Enterprise

23* Acceso de red a `api.anthropic.com`

24 

25## Elegir entre configuración administrada por servidor y administrada por endpoint

26 

27Claude Code admite dos enfoques para la configuración centralizada. La configuración administrada por servidor entrega la configuración desde los servidores de Anthropic. La [configuración administrada por endpoint](/es/settings#settings-files) se implementa directamente en dispositivos a través de políticas nativas del sistema operativo (preferencias administradas de macOS, registro de Windows) o archivos de configuración administrados.

28 

29| Enfoque | Mejor para | Modelo de seguridad |

30| :------------------------------------------------------------------------- | :------------------------------------------------------------------ | :---------------------------------------------------------------------------------------------------------------------------------------------------- |

31| **Configuración administrada por servidor** | Organizaciones sin MDM, o usuarios en dispositivos no administrados | Configuración entregada desde los servidores de Anthropic en el momento de la autenticación |

32| **[Configuración administrada por endpoint](/es/settings#settings-files)** | Organizaciones con MDM o administración de endpoint | Configuración implementada en dispositivos a través de perfiles de configuración MDM, políticas de registro o archivos de configuración administrados |

33 

34Si sus dispositivos están inscritos en una solución MDM o de administración de endpoint, la configuración administrada por endpoint proporciona garantías de seguridad más sólidas porque el archivo de configuración puede protegerse de la modificación del usuario a nivel del sistema operativo.

35 

36## Configurar la configuración administrada por servidor

37 

38<Steps>

39 <Step title="Abrir la consola de administración">

40 En [Claude.ai](https://claude.ai), navegue a **Admin Settings > Claude Code > Managed settings**.

41 </Step>

42 

43 <Step title="Definir su configuración">

44 Agregue su configuración como JSON. Todas las [configuraciones disponibles en `settings.json`](/es/settings#available-settings) son compatibles, incluidos [hooks](/es/hooks), [variables de entorno](/es/env-vars) y [configuraciones solo administradas](/es/permissions#managed-only-settings) como `allowManagedPermissionRulesOnly`.

45 

46 Este ejemplo aplica una lista de denegación de permisos, impide que los usuarios omitan permisos y restringe las reglas de permisos a las definidas en la configuración administrada:

47 

48 ```json theme={null}

49 {

50 "permissions": {

51 "deny": [

52 "Bash(curl *)",

53 "Read(./.env)",

54 "Read(./.env.*)",

55 "Read(./secrets/**)"

56 ],

57 "disableBypassPermissionsMode": "disable"

58 },

59 "allowManagedPermissionRulesOnly": true

60 }

61 ```

62 

63 Los hooks utilizan el mismo formato que en `settings.json`.

64 

65 Este ejemplo ejecuta un script de auditoría después de cada edición de archivo en toda la organización:

66 

67 ```json theme={null}

68 {

69 "hooks": {

70 "PostToolUse": [

71 {

72 "matcher": "Edit|Write",

73 "hooks": [

74 { "type": "command", "command": "/usr/local/bin/audit-edit.sh" }

75 ]

76 }

77 ]

78 }

79 }

80 ```

81 

82 Para configurar el clasificador del [modo automático](/es/permission-modes#eliminate-prompts-with-auto-mode) para que sepa qué repositorios, buckets y dominios confía su organización:

83 

84 ```json theme={null}

85 {

86 "autoMode": {

87 "environment": [

88 "Source control: github.example.com/acme-corp and all repos under it",

89 "Trusted cloud buckets: s3://acme-build-artifacts, gs://acme-ml-datasets",

90 "Trusted internal domains: *.corp.example.com"

91 ]

92 }

93 }

94 ```

95 

96 Debido a que los hooks ejecutan comandos de shell, los usuarios ven un [diálogo de aprobación de seguridad](#security-approval-dialogs) antes de que se apliquen. Consulte [Configurar el modo automático](/es/auto-mode-config) para ver cómo las entradas de `autoMode` afectan lo que el clasificador bloquea y advertencias importantes sobre los campos `allow` y `soft_deny`.

97 </Step>

98 

99 <Step title="Guardar e implementar">

100 Guarde sus cambios. Los clientes de Claude Code reciben la configuración actualizada en su próximo inicio o ciclo de sondeo por hora.

101 </Step>

102</Steps>

103 

104### Verificar la entrega de configuración

105 

106Para confirmar que la configuración se está aplicando, pida a un usuario que reinicie Claude Code. Si la configuración incluye configuraciones que activan el [diálogo de aprobación de seguridad](#security-approval-dialogs), el usuario ve un mensaje que describe la configuración administrada al inicio. También puede verificar que las reglas de permisos administrados estén activas haciendo que un usuario ejecute `/permissions` para ver sus reglas de permisos efectivas.

107 

108### Control de acceso

109 

110Los siguientes roles pueden administrar la configuración administrada por servidor:

111 

112* **Propietario principal**

113* **Propietario**

114 

115Restrinja el acceso al personal de confianza, ya que los cambios de configuración se aplican a todos los usuarios de la organización.

116 

117### Configuraciones solo administradas

118 

119La mayoría de las [claves de configuración](/es/settings#available-settings) funcionan en cualquier ámbito. Un puñado de claves solo se leen de la configuración administrada y no tienen efecto cuando se colocan en archivos de configuración de usuario o proyecto. Consulte [configuraciones solo administradas](/es/permissions#managed-only-settings) para obtener la lista completa. Cualquier configuración que no esté en esa lista aún puede colocarse en la configuración administrada y tiene la precedencia más alta.

120 

121### Limitaciones actuales

122 

123La configuración administrada por servidor tiene las siguientes limitaciones:

124 

125* La configuración se aplica uniformemente a todos los usuarios de la organización. Las configuraciones por grupo aún no son compatibles.

126* Las [configuraciones de servidor MCP](/es/mcp#managed-mcp-configuration) no se pueden distribuir a través de la configuración administrada por servidor.

127 

128## Entrega de configuración

129 

130### Precedencia de configuración

131 

132La configuración administrada por servidor y la [configuración administrada por endpoint](/es/settings#settings-files) ocupan el nivel más alto en la [jerarquía de configuración](/es/settings#settings-precedence) de Claude Code. Ningún otro nivel de configuración puede anularlas, incluidos los argumentos de línea de comandos.

133 

134Dentro del nivel administrado, la primera fuente que entrega una configuración no vacía gana. La configuración administrada por servidor se verifica primero, luego la configuración administrada por endpoint. Las fuentes no se fusionan: si la configuración administrada por servidor entrega alguna clave, la configuración administrada por endpoint se ignora completamente. Si la configuración administrada por servidor no entrega nada, se aplica la configuración administrada por endpoint.

135 

136Si borra su configuración administrada por servidor en la consola de administración con la intención de volver a una política plist administrada por endpoint o de registro, tenga en cuenta que la [configuración en caché](#fetch-and-caching-behavior) persiste en máquinas cliente hasta la siguiente obtención exitosa. Ejecute `/status` para ver qué fuente administrada está activa.

137 

138### Comportamiento de obtención y almacenamiento en caché

139 

140Claude Code obtiene la configuración de los servidores de Anthropic al inicio y sondea actualizaciones cada hora durante sesiones activas.

141 

142**Primer lanzamiento sin configuración en caché:**

143 

144* Claude Code obtiene la configuración de forma asincrónica

145* Si la obtención falla, Claude Code continúa sin configuración administrada

146* Hay una breve ventana antes de que se cargue la configuración donde las restricciones aún no se aplican

147 

148**Lanzamientos posteriores con configuración en caché:**

149 

150* La configuración en caché se aplica inmediatamente al inicio

151* Claude Code obtiene configuración nueva en segundo plano

152* La configuración en caché persiste a través de fallos de red

153 

154Claude Code aplica actualizaciones de configuración automáticamente sin reinicio, excepto para configuraciones avanzadas como la configuración de OpenTelemetry, que requieren un reinicio completo para tomar efecto.

155 

156### Aplicar inicio cerrado por fallo

157 

158De forma predeterminada, si la obtención de configuración remota falla al inicio, la CLI continúa sin configuración administrada. Para entornos donde esta breve ventana no aplicada es inaceptable, establezca `forceRemoteSettingsRefresh: true` en su configuración administrada.

159 

160Cuando esta configuración está activa, la CLI se bloquea al inicio hasta que la configuración remota se obtiene recientemente. Si la obtención falla, la CLI se cierra en lugar de continuar sin la política. Esta configuración se autoperpetúa: una vez entregada desde el servidor, también se almacena en caché localmente para que los inicios posteriores apliquen el mismo comportamiento incluso antes de la primera obtención exitosa de una nueva sesión.

161 

162Para habilitarlo, agregue la clave a su configuración de configuración administrada:

163 

164```json theme={null}

165{

166 "forceRemoteSettingsRefresh": true

167}

168```

169 

170Antes de habilitar esta configuración, asegúrese de que sus políticas de red permitan la conectividad a `api.anthropic.com`. Si ese endpoint no es accesible, la CLI se cierra al inicio y los usuarios no pueden iniciar Claude Code.

171 

172### Diálogos de aprobación de seguridad

173 

174Ciertas configuraciones que podrían presentar riesgos de seguridad requieren aprobación explícita del usuario antes de ser aplicadas:

175 

176* **Configuraciones de comandos de shell**: configuraciones que ejecutan comandos de shell

177* **Variables de entorno personalizadas**: variables que no están en la lista de permitidos conocida y segura

178* **Configuraciones de hooks**: cualquier definición de hook

179 

180Cuando estas configuraciones están presentes, los usuarios ven un diálogo de seguridad que explica qué se está configurando. Los usuarios deben aprobar para continuar. Si un usuario rechaza la configuración, Claude Code se cierra.

181 

182<Note>

183 En modo no interactivo con la bandera `-p`, Claude Code omite los diálogos de seguridad y aplica la configuración sin aprobación del usuario.

184</Note>

185 

186## Disponibilidad de plataforma

187 

188La configuración administrada por servidor requiere una conexión directa a `api.anthropic.com` y no está disponible cuando se utilizan proveedores de modelos de terceros:

189 

190* Amazon Bedrock

191* Google Vertex AI

192* Microsoft Foundry

193* Endpoints de API personalizados a través de `ANTHROPIC_BASE_URL` o [puertas de enlace LLM](/es/llm-gateway)

194 

195## Registro de auditoría

196 

197Los eventos del registro de auditoría para cambios de configuración están disponibles a través de la API de cumplimiento o exportación del registro de auditoría. Póngase en contacto con su equipo de cuenta de Anthropic para obtener acceso.

198 

199Los eventos de auditoría incluyen el tipo de acción realizada, la cuenta y el dispositivo que realizó la acción, y referencias a los valores anteriores y nuevos.

200 

201## Consideraciones de seguridad

202 

203La configuración administrada por servidor proporciona aplicación de políticas centralizada, pero funciona como un control del lado del cliente. En dispositivos no administrados, los usuarios con acceso de administrador o sudo pueden modificar el binario de Claude Code, el sistema de archivos o la configuración de red.

204 

205| Escenario | Comportamiento |

206| :-------------------------------------------------------------------------------- | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

207| El usuario edita el archivo de configuración en caché | El archivo manipulado se aplica al inicio, pero la configuración correcta se restaura en la siguiente obtención del servidor |

208| El usuario elimina el archivo de configuración en caché | Ocurre el comportamiento del primer lanzamiento: la configuración se obtiene de forma asincrónica con una breve ventana no aplicada |

209| La API no está disponible | La configuración en caché se aplica si está disponible, de lo contrario, la configuración administrada no se aplica hasta la siguiente obtención exitosa. Con `forceRemoteSettingsRefresh: true`, la CLI se cierra en lugar de continuar |

210| El usuario se autentica con una organización diferente | La configuración no se entrega para cuentas fuera de la organización administrada |

211| El usuario configura un [proveedor de modelo de terceros](#platform-availability) | La configuración administrada por servidor se omite. Esto incluye establecer `CLAUDE_CODE_USE_BEDROCK`, `CLAUDE_CODE_USE_MANTLE`, `CLAUDE_CODE_USE_VERTEX`, `CLAUDE_CODE_USE_FOUNDRY`, o un `ANTHROPIC_BASE_URL` no predeterminado |

212 

213Para detectar cambios de configuración en tiempo de ejecución, use [hooks `ConfigChange`](/es/hooks#configchange) para registrar modificaciones o bloquear cambios no autorizados antes de que surtan efecto.

214 

215Para garantías de aplicación más sólidas, use la [configuración administrada por endpoint](/es/settings#settings-files) en dispositivos inscritos en una solución MDM.

216 

217## Ver también

218 

219Páginas relacionadas para administrar la configuración de Claude Code:

220 

221* [Settings](/es/settings): referencia de configuración completa que incluye todas las configuraciones disponibles

222* [Endpoint-managed settings](/es/settings#settings-files): configuración administrada implementada en dispositivos por TI

223* [Authentication](/es/authentication): configurar el acceso de usuarios a Claude Code

224* [Security](/es/security): salvaguardas de seguridad y mejores prácticas

settings.md +914 −0 created

Details

1> ## Documentation Index

2> Fetch the complete documentation index at: https://code.claude.com/docs/llms.txt

3> Use this file to discover all available pages before exploring further.

4 

5# Configuración de Claude Code

6 

7> Configure Claude Code con configuraciones globales y a nivel de proyecto, y variables de entorno.

8 

9Claude Code ofrece una variedad de configuraciones para personalizar su comportamiento según sus necesidades. Puede configurar Claude Code ejecutando el comando `/config` cuando utiliza el REPL interactivo, que abre una interfaz de Configuración con pestañas donde puede ver información de estado y modificar opciones de configuración.

10 

11## Ámbitos de configuración

12 

13Claude Code utiliza un **sistema de ámbitos** para determinar dónde se aplican las configuraciones y quién las comparte. Comprender los ámbitos le ayuda a decidir cómo configurar Claude Code para uso personal, colaboración en equipo o implementación empresarial.

14 

15### Ámbitos disponibles

16 

17| Ámbito | Ubicación | A quién afecta | ¿Se comparte con el equipo? |

18| :---------- | :--------------------------------------------------------------------------------------------------------- | :------------------------------------------ | :-------------------------- |

19| **Managed** | Configuraciones administradas por servidor, plist / registro, o `managed-settings.json` a nivel de sistema | Todos los usuarios en la máquina | Sí (implementado por TI) |

20| **User** | Directorio `~/.claude/` | Usted, en todos los proyectos | No |

21| **Project** | `.claude/` en el repositorio | Todos los colaboradores en este repositorio | Sí (confirmado en git) |

22| **Local** | `.claude/settings.local.json` | Usted, solo en este repositorio | No (ignorado por git) |

23 

24### Cuándo usar cada ámbito

25 

26El **ámbito Managed** es para:

27 

28* Políticas de seguridad que deben aplicarse en toda la organización

29* Requisitos de cumplimiento que no se pueden anular

30* Configuraciones estandarizadas implementadas por TI/DevOps

31 

32El **ámbito User** es mejor para:

33 

34* Preferencias personales que desea en todas partes (temas, configuración del editor)

35* Herramientas y plugins que utiliza en todos los proyectos

36* Claves API y autenticación (almacenadas de forma segura)

37 

38El **ámbito Project** es mejor para:

39 

40* Configuraciones compartidas por el equipo (permisos, hooks, MCP servers)

41* Plugins que todo el equipo debe tener

42* Estandarizar herramientas entre colaboradores

43 

44El **ámbito Local** es mejor para:

45 

46* Anulaciones personales para un proyecto específico

47* Probar configuraciones antes de compartirlas con el equipo

48* Configuraciones específicas de la máquina que no funcionarán para otros

49 

50### Cómo interactúan los ámbitos

51 

52Cuando la misma configuración se configura en múltiples ámbitos, los ámbitos más específicos tienen precedencia:

53 

541. **Managed** (más alto) - no puede ser anulado por nada

552. **Argumentos de línea de comandos** - anulaciones de sesión temporal

563. **Local** - anula configuraciones de proyecto y usuario

574. **Project** - anula configuraciones de usuario

585. **User** (más bajo) - se aplica cuando nada más especifica la configuración

59 

60Por ejemplo, si un permiso se permite en la configuración de usuario pero se deniega en la configuración de proyecto, la configuración de proyecto tiene precedencia y el permiso se bloquea.

61 

62### Qué usa ámbitos

63 

64Los ámbitos se aplican a muchas características de Claude Code:

65 

66| Característica | Ubicación de usuario | Ubicación de proyecto | Ubicación local |

67| :-------------- | :------------------------ | :-------------------------------- | :------------------------------ |

68| **Settings** | `~/.claude/settings.json` | `.claude/settings.json` | `.claude/settings.local.json` |

69| **Subagents** | `~/.claude/agents/` | `.claude/agents/` | Ninguno |

70| **MCP servers** | `~/.claude.json` | `.mcp.json` | `~/.claude.json` (por proyecto) |

71| **Plugins** | `~/.claude/settings.json` | `.claude/settings.json` | `.claude/settings.local.json` |

72| **CLAUDE.md** | `~/.claude/CLAUDE.md` | `CLAUDE.md` o `.claude/CLAUDE.md` | `CLAUDE.local.md` |

73 

74***

75 

76## Archivos de configuración

77 

78El archivo `settings.json` es el mecanismo oficial para configurar Claude Code a través de configuraciones jerárquicas:

79 

80* **Configuraciones de usuario** se definen en `~/.claude/settings.json` y se aplican a todos los proyectos.

81* **Configuraciones de proyecto** se guardan en su directorio de proyecto:

82 * `.claude/settings.json` para configuraciones que se verifican en el control de código fuente y se comparten con su equipo

83 * `.claude/settings.local.json` para configuraciones que no se verifican, útil para preferencias personales y experimentación. Claude Code configurará git para ignorar `.claude/settings.local.json` cuando se cree.

84* **Configuraciones administradas**: Para organizaciones que necesitan control centralizado, Claude Code admite múltiples mecanismos de entrega para configuraciones administradas. Todos utilizan el mismo formato JSON y no pueden ser anulados por configuraciones de usuario o proyecto:

85 

86 * **Configuraciones administradas por servidor**: entregadas desde los servidores de Anthropic a través de la consola de administración de Claude.ai. Consulte [configuraciones administradas por servidor](/es/server-managed-settings).

87 * **Políticas de MDM/nivel de SO**: entregadas a través de administración de dispositivos nativa en macOS y Windows:

88 * macOS: dominio de preferencias administradas `com.anthropic.claudecode`. El plist de nivel superior refleja las claves de `managed-settings.json`, con configuraciones anidadas como diccionarios y matrices como matrices de plist. Implemente a través de perfiles de configuración en Jamf, Iru (Kandji) u herramientas MDM similares.

89 * Windows: clave de registro `HKLM\SOFTWARE\Policies\ClaudeCode` con un valor `Settings` (REG\_SZ o REG\_EXPAND\_SZ) que contiene JSON (implementado a través de Política de grupo o Intune)

90 * Windows (nivel de usuario): `HKCU\SOFTWARE\Policies\ClaudeCode` (prioridad de política más baja, solo se usa cuando no existe una fuente a nivel de administrador)

91 * **Basado en archivos**: `managed-settings.json` y `managed-mcp.json` implementados en directorios del sistema:

92 

93 * macOS: `/Library/Application Support/ClaudeCode/`

94 * Linux y WSL: `/etc/claude-code/`

95 * Windows: `C:\Program Files\ClaudeCode\`

96 

97 <Warning>

98 La ruta heredada de Windows `C:\ProgramData\ClaudeCode\managed-settings.json` ya no se admite a partir de v2.1.75. Los administradores que implementaron configuraciones en esa ubicación deben migrar archivos a `C:\Program Files\ClaudeCode\managed-settings.json`.

99 </Warning>

100 

101 Las configuraciones administradas basadas en archivos también admiten un directorio de entrega en `managed-settings.d/` en el mismo directorio del sistema junto a `managed-settings.json`. Esto permite que equipos separados implementen fragmentos de política independientes sin coordinar ediciones a un único archivo.

102 

103 Siguiendo la convención de systemd, `managed-settings.json` se fusiona primero como base, luego todos los archivos `*.json` en el directorio de entrega se ordenan alfabéticamente y se fusionan encima. Los archivos posteriores anulan los anteriores para valores escalares; las matrices se concatenan y se deduplicán; los objetos se fusionan profundamente. Se ignoran los archivos ocultos que comienzan con `.`.

104 

105 Use prefijos numéricos para controlar el orden de fusión, por ejemplo `10-telemetry.json` y `20-security.json`.

106 

107 Consulte [configuraciones administradas](/es/permissions#managed-only-settings) y [Configuración de MCP administrada](/es/mcp#managed-mcp-configuration) para obtener detalles.

108 

109 Este [repositorio](https://github.com/anthropics/claude-code/tree/main/examples/mdm) incluye plantillas de implementación de inicio para Jamf, Iru (Kandji), Intune y Política de grupo. Use estas como puntos de partida y ajústelas para que se adapten a sus necesidades.

110 

111 <Note>

112 Las implementaciones administradas también pueden restringir **adiciones de marketplace de plugins** usando `strictKnownMarketplaces`. Para obtener más información, consulte [Restricciones de marketplace administradas](/es/plugin-marketplaces#managed-marketplace-restrictions).

113 </Note>

114* **Otra configuración** se almacena en `~/.claude.json`. Este archivo contiene su sesión OAuth, configuraciones de [MCP server](/es/mcp) para ámbitos de usuario y local, estado por proyecto (herramientas permitidas, configuración de confianza) y varios cachés. Los MCP servers con ámbito de proyecto se almacenan por separado en `.mcp.json`.

115 

116<Note>

117 Claude Code crea automáticamente copias de seguridad con marca de tiempo de archivos de configuración y retiene las cinco copias de seguridad más recientes para prevenir pérdida de datos.

118</Note>

119 

120```JSON Ejemplo settings.json theme={null}

121{

122 "$schema": "https://json.schemastore.org/claude-code-settings.json",

123 "permissions": {

124 "allow": [

125 "Bash(npm run lint)",

126 "Bash(npm run test *)",

127 "Read(~/.zshrc)"

128 ],

129 "deny": [

130 "Bash(curl *)",

131 "Read(./.env)",

132 "Read(./.env.*)",

133 "Read(./secrets/**)"

134 ]

135 },

136 "env": {

137 "CLAUDE_CODE_ENABLE_TELEMETRY": "1",

138 "OTEL_METRICS_EXPORTER": "otlp"

139 },

140 "companyAnnouncements": [

141 "Welcome to Acme Corp! Review our code guidelines at docs.acme.com",

142 "Reminder: Code reviews required for all PRs",

143 "New security policy in effect"

144 ]

145}

146```

147 

148La línea `$schema` en el ejemplo anterior apunta al [esquema JSON oficial](https://json.schemastore.org/claude-code-settings.json) para configuraciones de Claude Code. Agregarlo a su `settings.json` habilita autocompletado y validación en línea en VS Code, Cursor y cualquier otro editor que admita validación de esquema JSON.

149 

150El esquema publicado se actualiza periódicamente y puede no incluir configuraciones agregadas en los lanzamientos de CLI más recientes, por lo que una advertencia de validación en un campo documentado recientemente no necesariamente significa que su configuración sea inválida.

151 

152### Configuraciones disponibles

153 

154`settings.json` admite varias opciones:

155 

156| Clave | Descripción | Ejemplo |

157| :-------------------------------- | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :---------------------------------------------------------------------------------------------------------------------------- |

158| `agent` | Ejecutar el hilo principal como un subagent nombrado. Aplica el indicador del sistema del subagent, restricciones de herramientas y modelo. Consulte [Invocar subagents explícitamente](/es/sub-agents#invoke-subagents-explicitly) | `"code-reviewer"` |

159| `allowedChannelPlugins` | (Solo configuraciones administradas) Lista blanca de plugins de canal que pueden enviar mensajes. Reemplaza la lista blanca predeterminada de Anthropic cuando se establece. Sin definir = recurrir a la predeterminada, matriz vacía = bloquear todos los plugins de canal. Requiere `channelsEnabled: true`. Consulte [Restringir qué plugins de canal pueden ejecutarse](/es/channels#restrict-which-channel-plugins-can-run) | `[{ "marketplace": "claude-plugins-official", "plugin": "telegram" }]` |

160| `allowedHttpHookUrls` | Lista blanca de patrones de URL que los hooks HTTP pueden dirigirse. Admite `*` como comodín. Cuando se establece, los hooks con URLs que no coinciden se bloquean. Sin definir = sin restricción, matriz vacía = bloquear todos los hooks HTTP. Las matrices se fusionan entre fuentes de configuración. Consulte [Configuración de hooks](#hook-configuration) | `["https://hooks.example.com/*"]` |

161| `allowedMcpServers` | Cuando se establece en managed-settings.json, lista blanca de MCP servers que los usuarios pueden configurar. Sin definir = sin restricciones, matriz vacía = bloqueo. Se aplica a todos los ámbitos. La lista de denegación tiene precedencia. Consulte [Configuración de MCP administrada](/es/mcp#managed-mcp-configuration) | `[{ "serverName": "github" }]` |

162| `allowManagedHooksOnly` | (Solo configuraciones administradas) Solo se cargan hooks administrados, hooks SDK y hooks de plugins forzadamente habilitados en la configuración administrada `enabledPlugins`. Se bloquean hooks de usuario, proyecto y todos los demás plugins. Consulte [Configuración de hooks](#hook-configuration) | `true` |

163| `allowManagedMcpServersOnly` | (Solo configuraciones administradas) Solo se respetan `allowedMcpServers` de configuraciones administradas. `deniedMcpServers` aún se fusiona desde todas las fuentes. Los usuarios aún pueden agregar MCP servers, pero solo se aplica la lista blanca definida por el administrador. Consulte [Configuración de MCP administrada](/es/mcp#managed-mcp-configuration) | `true` |

164| `allowManagedPermissionRulesOnly` | (Solo configuraciones administradas) Evitar que configuraciones de usuario y proyecto definan reglas de permiso `allow`, `ask` o `deny`. Solo se aplican las reglas en configuraciones administradas. Consulte [Configuraciones solo administradas](/es/permissions#managed-only-settings) | `true` |

165| `alwaysThinkingEnabled` | Habilitar [pensamiento extendido](/es/model-config#extended-thinking) de forma predeterminada para todas las sesiones. Típicamente configurado a través del comando `/config` en lugar de editar directamente | `true` |

166| `apiKeyHelper` | Script personalizado, a ejecutarse en `/bin/sh`, para generar un valor de autenticación. Este valor se enviará como encabezados `X-Api-Key` y `Authorization: Bearer` para solicitudes de modelo | `/bin/generate_temp_api_key.sh` |

167| `attribution` | Personalizar atribución para commits de git y solicitudes de extracción. Consulte [Configuración de atribución](#attribution-settings) | `{"commit": "🤖 Generated with Claude Code", "pr": ""}` |

168| `autoMemoryDirectory` | Directorio personalizado para almacenamiento de [memoria automática](/es/memory#storage-location). Acepta una ruta absoluta o una ruta con prefijo `~/`. Se acepta desde configuraciones de política y usuario, y desde la bandera `--settings`. No se acepta desde configuraciones de proyecto o local, ya que un repositorio clonado podría proporcionar cualquiera de los archivos para redirigir escrituras de memoria a ubicaciones sensibles | `"~/my-memory-dir"` |

169| `autoMode` | Personalizar qué bloquea y permite el clasificador de [modo automático](/es/permission-modes#eliminate-prompts-with-auto-mode). Contiene matrices `environment`, `allow` y `soft_deny` de reglas en prosa. Incluya la cadena literal `"$defaults"` en una matriz para heredar las reglas integradas en esa posición. Consulte [Configurar modo automático](/es/auto-mode-config). No se lee desde configuraciones de proyecto compartidas | `{"soft_deny": ["$defaults", "Never run terraform apply"]}` |

170| `autoScrollEnabled` | En [renderizado de pantalla completa](/es/fullscreen), seguir la nueva salida hasta el final de la conversación. Predeterminado: `true`. Aparece en `/config` como **Auto-scroll**. Los avisos de permiso aún se desplazan a la vista cuando esto está desactivado | `false` |

171| `autoUpdatesChannel` | Canal de lanzamiento a seguir para actualizaciones. Use `"stable"` para una versión que típicamente tiene aproximadamente una semana de antigüedad y omite versiones con regresiones importantes, o `"latest"` (predeterminado) para el lanzamiento más reciente | `"stable"` |

172| `availableModels` | Restringir qué modelos pueden seleccionar los usuarios a través de `/model`, `--model`, o `ANTHROPIC_MODEL`. No afecta la opción Predeterminado. Consulte [Restringir selección de modelo](/es/model-config#restrict-model-selection) | `["sonnet", "haiku"]` |

173| `awaySummaryEnabled` | Mostrar un resumen de sesión de una línea cuando regresa a la terminal después de estar ausente unos minutos. Establezca en `false` o desactive Resumen de sesión en `/config` para deshabilitar. Igual que [`CLAUDE_CODE_ENABLE_AWAY_SUMMARY`](/es/env-vars) | `true` |

174| `awsAuthRefresh` | Script personalizado que modifica el directorio `.aws` (consulte [configuración avanzada de credenciales](/es/amazon-bedrock#advanced-credential-configuration)) | `aws sso login --profile myprofile` |

175| `awsCredentialExport` | Script personalizado que genera JSON con credenciales de AWS (consulte [configuración avanzada de credenciales](/es/amazon-bedrock#advanced-credential-configuration)) | `/bin/generate_aws_grant.sh` |

176| `blockedMarketplaces` | (Solo configuraciones administradas) Lista negra de fuentes de marketplace. Aplicada en adición de marketplace y en instalación, actualización, actualización y auto-actualización de plugins, por lo que un marketplace agregado antes de que se estableciera la política no puede usarse para obtener plugins. Las fuentes bloqueadas se verifican antes de descargar, por lo que nunca tocan el sistema de archivos. Consulte [Restricciones de marketplace administradas](/es/plugin-marketplaces#managed-marketplace-restrictions) | `[{ "source": "github", "repo": "untrusted/plugins" }]` |

177| `channelsEnabled` | (Solo configuraciones administradas) Permitir [canales](/es/channels) para usuarios de Team y Enterprise. Sin definir o `false` bloquea la entrega de mensajes de canal independientemente de lo que los usuarios pasen a `--channels` | `true` |

178| `cleanupPeriodDays` | Las sesiones inactivas durante más tiempo que este período se eliminan al inicio (predeterminado: 30 días, mínimo 1). Establecer en `0` se rechaza con un error de validación. También controla el corte de edad para la eliminación automática de [worktrees de subagent huérfanos](/es/worktrees#clean-up-worktrees) al inicio. Para deshabilitar completamente las escrituras de transcripción, establezca la variable de entorno [`CLAUDE_CODE_SKIP_PROMPT_HISTORY`](/es/env-vars), o en modo no interactivo (`-p`) use la bandera `--no-session-persistence` o la opción SDK `persistSession: false`. | `20` |

179| `companyAnnouncements` | Anuncio a mostrar a los usuarios al inicio. Si se proporcionan múltiples anuncios, se alternarán aleatoriamente. | `["Welcome to Acme Corp! Review our code guidelines at docs.acme.com"]` |

180| `defaultShell` | Shell predeterminado para comandos `!` de cuadro de entrada. Acepta `"bash"` (predeterminado) o `"powershell"`. Establecer `"powershell"` enruta comandos `!` interactivos a través de PowerShell en Windows. Requiere `CLAUDE_CODE_USE_POWERSHELL_TOOL=1`. Consulte [herramienta PowerShell](/es/tools-reference#powershell-tool) | `"powershell"` |

181| `deniedMcpServers` | Cuando se establece en managed-settings.json, lista negra de MCP servers que están explícitamente bloqueados. Se aplica a todos los ámbitos incluyendo servers administrados. La lista de denegación tiene precedencia sobre la lista blanca. Consulte [Configuración de MCP administrada](/es/mcp#managed-mcp-configuration) | `[{ "serverName": "filesystem" }]` |

182| `disableAllHooks` | Deshabilitar todos los [hooks](/es/hooks) y cualquier [línea de estado](/es/statusline) personalizada | `true` |

183| `disableAutoMode` | Establecer en `"disable"` para evitar que se active el [modo automático](/es/permission-modes#eliminate-prompts-with-auto-mode). Elimina `auto` del ciclo `Shift+Tab` y rechaza `--permission-mode auto` al inicio. Más útil en [configuraciones administradas](/es/permissions#managed-settings) donde los usuarios no pueden anularlo | `"disable"` |

184| `disableDeepLinkRegistration` | Establecer en `"disable"` para evitar que Claude Code registre el controlador de protocolo `claude-cli://` con el sistema operativo al inicio. Los [enlaces profundos](/es/deep-links) permiten que herramientas externas abran una sesión de Claude Code con un indicador rellenado previamente. Útil en entornos donde el registro del controlador de protocolo está restringido o se gestiona por separado | `"disable"` |

185| `disabledMcpjsonServers` | Lista de MCP servers específicos de archivos `.mcp.json` para rechazar | `["filesystem"]` |

186| `disableSkillShellExecution` | Deshabilitar la ejecución de shell en línea para bloques `` !`...` `` y ` ```! ` en [skills](/es/skills) y comandos personalizados de fuentes de usuario, proyecto, plugin o directorio adicional. Los comandos se reemplazan con `[shell command execution disabled by policy]` en lugar de ejecutarse. Los skills agrupados y administrados no se ven afectados. Más útil en [configuraciones administradas](/es/permissions#managed-settings) donde los usuarios no pueden anularlo | `true` |

187| `editorMode` | Modo de atajos de teclado para el indicador de entrada: `"normal"` o `"vim"`. Predeterminado: `"normal"`. Aparece en `/config` como **Editor mode** | `"vim"` |

188| `effortLevel` | Persistir el [nivel de esfuerzo](/es/model-config#adjust-effort-level) entre sesiones. Acepta `"low"`, `"medium"`, `"high"`, o `"xhigh"`. Se escribe automáticamente cuando ejecuta `/effort` con uno de esos valores. Consulte [Ajustar nivel de esfuerzo](/es/model-config#adjust-effort-level) para modelos compatibles | `"xhigh"` |

189| `enableAllProjectMcpServers` | Aprobar automáticamente todos los MCP servers definidos en archivos `.mcp.json` de proyecto | `true` |

190| `enabledMcpjsonServers` | Lista de MCP servers específicos de archivos `.mcp.json` para aprobar | `["memory", "github"]` |

191| `env` | Variables de entorno que se aplicarán a cada sesión | `{"FOO": "bar"}` |

192| `fastModePerSessionOptIn` | Cuando es `true`, el modo rápido no persiste entre sesiones. Cada sesión comienza con el modo rápido desactivado, requiriendo que los usuarios lo habiliten con `/fast`. La preferencia de modo rápido del usuario aún se guarda. Consulte [Requerir opt-in por sesión](/es/fast-mode#require-per-session-opt-in) | `true` |

193| `feedbackSurveyRate` | Probabilidad (0–1) de que la [encuesta de calidad de sesión](/es/data-usage#session-quality-surveys) aparezca cuando sea elegible. Establecer en `0` para suprimir completamente. Útil cuando se usa Bedrock, Vertex, o Foundry donde la tasa de muestreo predeterminada no se aplica | `0.05` |

194| `fileSuggestion` | Configurar un script personalizado para autocompletado de archivo `@`. Consulte [Configuración de sugerencia de archivo](#file-suggestion-settings) | `{"type": "command", "command": "~/.claude/file-suggestion.sh"}` |

195| `forceLoginMethod` | Use `claudeai` para restringir el inicio de sesión a cuentas de Claude.ai, `console` para restringir el inicio de sesión a cuentas de Claude Console (facturación de uso de API) | `claudeai` |

196| `forceLoginOrgUUID` | Requerir que el inicio de sesión pertenezca a una organización específica. Acepta una cadena UUID única, que también preselecciona esa organización durante el inicio de sesión, o una matriz de UUID donde se acepta cualquier organización listada sin preselección. Cuando se establece en configuraciones administradas, el inicio de sesión falla si la cuenta autenticada no pertenece a una organización listada; una matriz vacía falla cerrada y bloquea el inicio de sesión con un mensaje de configuración incorrecta | `"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"` o `["xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx", "yyyyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy"]` |

197| `forceRemoteSettingsRefresh` | (Solo configuraciones administradas) Bloquear el inicio de CLI hasta que se obtengan configuraciones administradas remotas recientemente del servidor. Si la obtención falla, la CLI se cierra en lugar de continuar con configuraciones en caché o sin configuraciones. Cuando no se establece, el inicio continúa sin esperar configuraciones remotas. Consulte [aplicación de cierre de falla](/es/server-managed-settings#enforce-fail-closed-startup) | `true` |

198| `hooks` | Configurar comandos personalizados para ejecutarse en eventos del ciclo de vida. Consulte [documentación de hooks](/es/hooks) para el formato | Consulte [hooks](/es/hooks) |

199| `httpHookAllowedEnvVars` | Lista blanca de nombres de variables de entorno que los hooks HTTP pueden interpolar en encabezados. Cuando se establece, el `allowedEnvVars` efectivo de cada hook es la intersección con esta lista. Sin definir = sin restricción. Las matrices se fusionan entre fuentes de configuración. Consulte [Configuración de hooks](#hook-configuration) | `["MY_TOKEN", "HOOK_SECRET"]` |

200| `includeCoAuthoredBy` | **Obsoleto**: Use `attribution` en su lugar. Si incluir la línea `co-authored-by Claude` en commits de git y solicitudes de extracción (predeterminado: `true`) | `false` |

201| `includeGitInstructions` | Incluir instrucciones de flujo de trabajo de commit y PR integradas y la instantánea de estado de git en el indicador del sistema de Claude (predeterminado: `true`). Establecer en `false` para eliminar ambas, por ejemplo cuando se usan skills de flujo de trabajo de git personalizados. La variable de entorno `CLAUDE_CODE_DISABLE_GIT_INSTRUCTIONS` tiene precedencia sobre esta configuración cuando se establece | `false` |

202| `language` | Configurar el idioma de respuesta preferido de Claude (por ejemplo, `"japanese"`, `"spanish"`, `"french"`). Claude responderá en este idioma de forma predeterminada. También establece el idioma de [dictado de voz](/es/voice-dictation#change-the-dictation-language) | `"japanese"` |

203| `minimumVersion` | Piso que evita que las actualizaciones automáticas en segundo plano e `claude update` instalen una versión por debajo de esta. Cambiar del canal `"latest"` a `"stable"` a través de `/config` le solicita que permanezca en la versión actual o permita la degradación. Elegir permanecer establece este valor. También útil en [configuraciones administradas](/es/permissions#managed-settings) para fijar un mínimo en toda la organización | `"2.1.100"` |

204| `model` | Anular el modelo predeterminado a usar para Claude Code | `"claude-sonnet-4-6"` |

205| `modelOverrides` | Asignar IDs de modelo de Anthropic a IDs de modelo específicos del proveedor como ARNs de perfil de inferencia de Bedrock. Cada entrada del selector de modelo usa su valor asignado al llamar a la API del proveedor. Consulte [Anular IDs de modelo por versión](/es/model-config#override-model-ids-per-version) | `{"claude-opus-4-6": "arn:aws:bedrock:..."}` |

206| `otelHeadersHelper` | Script para generar encabezados dinámicos de OpenTelemetry. Se ejecuta al inicio y periódicamente (consulte [Encabezados dinámicos](/es/monitoring-usage#dynamic-headers)) | `/bin/generate_otel_headers.sh` |

207| `outputStyle` | Configurar un estilo de salida para ajustar el indicador del sistema. Consulte [documentación de estilos de salida](/es/output-styles) | `"Explanatory"` |

208| `permissions` | Consulte la tabla a continuación para la estructura de permisos. | |

209| `plansDirectory` | Personalizar dónde se almacenan los archivos de plan. La ruta es relativa a la raíz del proyecto. Predeterminado: `~/.claude/plans` | `"./plans"` |

210| `pluginTrustMessage` | (Solo configuraciones administradas) Mensaje personalizado agregado a la advertencia de confianza de plugin mostrada antes de la instalación. Use esto para agregar contexto específico de la organización, por ejemplo para confirmar que los plugins de su marketplace interno están verificados. | `"All plugins from our marketplace are approved by IT"` |

211| `preferredNotifChannel` | Método para notificaciones de tarea completada y solicitud de permiso: `"auto"`, `"terminal_bell"`, `"iterm2"`, `"iterm2_with_bell"`, `"kitty"`, `"ghostty"`, o `"notifications_disabled"`. Predeterminado: `"auto"`, que envía una notificación de escritorio en iTerm2, Ghostty y Kitty y no hace nada en otras terminales. Establezca `"terminal_bell"` para sonar el carácter de campana en cualquier terminal. Aparece en `/config` como **Notifications**. Consulte [Obtener una campana de terminal o notificación](/es/terminal-config#get-a-terminal-bell-or-notification) | `"terminal_bell"` |

212| `prefersReducedMotion` | Reducir o deshabilitar animaciones de UI (spinners, shimmer, efectos flash) para accesibilidad | `true` |

213| `prUrlTemplate` | Plantilla de URL para la insignia de PR mostrada en el pie de página y en resúmenes de resultados de herramientas. Sustituye `{host}`, `{owner}`, `{repo}`, `{number}` y `{url}` de la URL de PR reportada por `gh`. Use para apuntar enlaces de PR a una herramienta de revisión de código interna en lugar de `github.com`. No afecta autolinks `#123` en la prosa de Claude | `"https://reviews.example.com/{owner}/{repo}/pull/{number}"` |

214| `respectGitignore` | Controlar si el selector de archivo `@` respeta patrones `.gitignore`. Cuando es `true` (predeterminado), los archivos que coinciden con patrones `.gitignore` se excluyen de las sugerencias | `false` |

215| `showClearContextOnPlanAccept` | Mostrar la opción "borrar contexto" en la pantalla de aceptación del plan. Predeterminado: `false`. Establecer en `true` para restaurar la opción | `true` |

216| `showThinkingSummaries` | Mostrar resúmenes de [pensamiento extendido](/es/model-config#extended-thinking) en sesiones interactivas. Cuando no está definido o es `false` (predeterminado en modo interactivo), los bloques de pensamiento se redactan por la API y se muestran como un stub contraído. La redacción solo cambia lo que ve, no lo que genera el modelo: para reducir el gasto de pensamiento, [baje el presupuesto o deshabilite el pensamiento](/es/model-config#extended-thinking) en su lugar. El modo no interactivo (`-p`) y los llamadores de SDK siempre reciben resúmenes independientemente de esta configuración | `true` |

217| `showTurnDuration` | Mostrar mensajes de duración de turno después de respuestas, por ejemplo "Cooked for 1m 6s". Predeterminado: `true`. Aparece en `/config` como **Show turn duration** | `false` |

218| `skipWebFetchPreflight` | Omitir la [verificación de seguridad de dominio de WebFetch](/es/data-usage#webfetch-domain-safety-check) que envía cada nombre de host solicitado a `api.anthropic.com` antes de obtener. Establecer en `true` en entornos que bloquean tráfico a Anthropic, como implementaciones de Bedrock, Vertex AI, o Foundry con salida restrictiva. Cuando se omite, WebFetch intenta cualquier URL sin consultar la lista de bloqueos | `true` |

219| `spinnerTipsEnabled` | Mostrar consejos en el spinner mientras Claude está trabajando. Establecer en `false` para deshabilitar consejos (predeterminado: `true`) | `false` |

220| `spinnerTipsOverride` | Anular consejos del spinner con cadenas personalizadas. `tips`: matriz de cadenas de consejo. `excludeDefault`: si es `true`, mostrar solo consejos personalizados; si es `false` o está ausente, los consejos personalizados se fusionan con consejos integrados | `{ "excludeDefault": true, "tips": ["Use our internal tool X"] }` |

221| `spinnerVerbs` | Personalizar los verbos de acción mostrados en el spinner y mensajes de duración de turno. Establecer `mode` en `"replace"` para usar solo sus verbos, o `"append"` para agregarlos a los predeterminados | `{"mode": "append", "verbs": ["Pondering", "Crafting"]}` |

222| `sshConfigs` | Conexiones SSH a mostrar en el menú desplegable de entorno de [Desktop](/es/desktop#pre-configure-ssh-connections-for-your-team). Cada entrada requiere `id`, `name` y `sshHost`; `sshPort`, `sshIdentityFile` y `startDirectory` son opcionales. Cuando se establece en configuraciones administradas, las conexiones son de solo lectura para los usuarios. Se lee desde configuraciones administradas y de usuario solamente | `[{"id": "dev-vm", "name": "Dev VM", "sshHost": "user@dev.example.com"}]` |

223| `statusLine` | Configurar una línea de estado personalizada para mostrar contexto. Consulte [documentación de `statusLine`](/es/statusline) | `{"type": "command", "command": "~/.claude/statusline.sh"}` |

224| `strictKnownMarketplaces` | (Solo configuraciones administradas) Lista blanca de fuentes de marketplace de plugins. Sin definir = sin restricciones, matriz vacía = bloqueo. Aplicada en adición de marketplace y en instalación, actualización, actualización y auto-actualización de plugins, por lo que un marketplace agregado antes de que se estableciera la política no puede usarse para obtener plugins. Consulte [Restricciones de marketplace administradas](/es/plugin-marketplaces#managed-marketplace-restrictions) | `[{ "source": "github", "repo": "acme-corp/plugins" }]` |

225| `teammateMode` | Cómo se muestran los compañeros de [equipo de agentes](/es/agent-teams): `auto` (elige paneles divididos en tmux o iTerm2, en proceso de otra manera), `in-process`, o `tmux`. Consulte [elegir un modo de visualización](/es/agent-teams#choose-a-display-mode) | `"in-process"` |

226| `terminalProgressBarEnabled` | Mostrar la barra de progreso del terminal en terminales compatibles: ConEmu, Ghostty 1.2.0+, e iTerm2 3.6.6+. Predeterminado: `true`. Aparece en `/config` como **Terminal progress bar** | `false` |

227| `tui` | Renderizador de interfaz de usuario de terminal. Use `"fullscreen"` para el renderizador [alt-screen](/es/fullscreen) sin parpadeos con scrollback virtualizado. Use `"default"` para el renderizador clásico de pantalla principal. Establezca a través de `/tui` | `"fullscreen"` |

228| `useAutoModeDuringPlan` | Si el modo de plan usa semántica de modo automático cuando el modo automático está disponible. Predeterminado: `true`. No se lee desde configuraciones de proyecto compartidas. Aparece en `/config` como "Use auto mode during plan" | `false` |

229| `viewMode` | Modo de vista de transcripción predeterminado al inicio: `"default"`, `"verbose"`, o `"focus"`. Anula la selección pegajosa de `/focus` cuando se establece | `"verbose"` |

230| `voice` | Configuración de [dictado de voz](/es/voice-dictation): `enabled` activa el dictado, `mode` selecciona `"hold"` o `"tap"`, y `autoSubmit` envía el indicador al soltar la tecla en modo hold. Se escribe automáticamente cuando ejecuta `/voice`. Requiere una cuenta de Claude.ai | `{ "enabled": true, "mode": "tap" }` |

231| `voiceEnabled` | Alias heredado para `voice.enabled`. Prefiera el objeto `voice` | `true` |

232| `wslInheritsWindowsSettings` | (Solo configuraciones administradas de Windows) Cuando es `true`, Claude Code en WSL lee configuraciones administradas de la cadena de política de Windows además de `/etc/claude-code`, con fuentes de Windows teniendo prioridad. Solo se honra cuando se establece en la clave de registro HKLM o `C:\Program Files\ClaudeCode\managed-settings.json`, ambas requieren administrador de Windows para escribir. Para que la política HKCU también se aplique en WSL, la bandera debe establecerse además en HKCU mismo. No tiene efecto en Windows nativo | `true` |

233 

234### Configuración de config global

235 

236Estas configuraciones se almacenan en `~/.claude.json` en lugar de `settings.json`. Agregarlas a `settings.json` activará un error de validación de esquema.

237 

238<Note>

239 Las versiones anteriores a v2.1.119 también almacenan `autoScrollEnabled`, `editorMode`, `showTurnDuration`, `teammateMode` y `terminalProgressBarEnabled` aquí en lugar de en `settings.json`.

240</Note>

241 

242| Clave | Descripción | Ejemplo |

243| :------------------------ | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :------ |

244| `autoConnectIde` | Conectarse automáticamente a un IDE en ejecución cuando Claude Code se inicia desde una terminal externa. Predeterminado: `false`. Aparece en `/config` como **Auto-connect to IDE (external terminal)** cuando se ejecuta fuera de una terminal de VS Code o JetBrains | `true` |

245| `autoInstallIdeExtension` | Instalar automáticamente la extensión de Claude Code IDE cuando se ejecuta desde una terminal de VS Code. Predeterminado: `true`. Aparece en `/config` como **Auto-install IDE extension** cuando se ejecuta dentro de una terminal de VS Code o JetBrains. También puede establecer la variable de entorno [`CLAUDE_CODE_IDE_SKIP_AUTO_INSTALL`](/es/env-vars) | `false` |

246| `externalEditorContext` | Anteponer la respuesta anterior de Claude como contexto comentado con `#` cuando abre el editor externo con `Ctrl+G`. Predeterminado: `false`. Aparece en `/config` como **Show last response in external editor** | `true` |

247 

248### Configuración de worktrees

249 

250Configure cómo `--worktree` crea y gestiona git worktrees. Use estas configuraciones para reducir el uso de disco y el tiempo de inicio en monorepos grandes.

251 

252| Clave | Descripción | Ejemplo |

253| :---------------------------- | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :------------------------------------ |

254| `worktree.symlinkDirectories` | Directorios a enlazar simbólicamente desde el repositorio principal en cada worktree para evitar duplicar directorios grandes en disco. No se enlazan directorios de forma predeterminada | `["node_modules", ".cache"]` |

255| `worktree.sparsePaths` | Directorios a verificar en cada worktree a través de git sparse-checkout (modo cone). Solo las rutas listadas se escriben en disco, lo que es más rápido en monorepos grandes | `["packages/my-app", "shared/utils"]` |

256 

257Para copiar archivos ignorados por git como `.env` en nuevos worktrees, use un [archivo `.worktreeinclude`](/es/worktrees#copy-gitignored-files-into-worktrees) en la raíz de su proyecto en lugar de una configuración.

258 

259### Configuración de permisos

260 

261| Claves | Descripción | Ejemplo |

262| :---------------------------------- | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :--------------------------------------------------------------------- |

263| `allow` | Matriz de reglas de permiso para permitir el uso de herramientas. Consulte [Sintaxis de regla de permiso](#permission-rule-syntax) a continuación para detalles de coincidencia de patrones | `[ "Bash(git diff *)" ]` |

264| `ask` | Matriz de reglas de permiso para pedir confirmación al usar herramientas. Consulte [Sintaxis de regla de permiso](#permission-rule-syntax) a continuación | `[ "Bash(git push *)" ]` |

265| `deny` | Matriz de reglas de permiso para denegar el uso de herramientas. Use esto para excluir archivos sensibles del acceso de Claude Code. Consulte [Sintaxis de regla de permiso](#permission-rule-syntax) y [Limitaciones de permiso de Bash](/es/permissions#tool-specific-permission-rules) | `[ "WebFetch", "Bash(curl *)", "Read(./.env)", "Read(./secrets/**)" ]` |

266| `additionalDirectories` | [Directorios de trabajo](/es/permissions#working-directories) adicionales para acceso a archivos. La mayoría de la configuración de `.claude/` [no se descubre](/es/permissions#additional-directories-grant-file-access-not-configuration) desde estos directorios | `[ "../docs/" ]` |

267| `defaultMode` | [Modo de permiso](/es/permission-modes) predeterminado al abrir Claude Code. Valores válidos: `default`, `acceptEdits`, `plan`, `auto`, `dontAsk`, `bypassPermissions`. La bandera CLI `--permission-mode` anula esta configuración para una única sesión | `"acceptEdits"` |

268| `disableBypassPermissionsMode` | Establecer en `"disable"` para evitar que se active el modo `bypassPermissions`. Esto deshabilita la bandera de línea de comandos `--dangerously-skip-permissions`. Típicamente colocado en [configuraciones administradas](/es/permissions#managed-settings) para aplicar política organizacional, pero funciona desde cualquier ámbito | `"disable"` |

269| `skipDangerousModePermissionPrompt` | Omitir el aviso de confirmación mostrado antes de entrar en modo de permisos de derivación a través de `--dangerously-skip-permissions` o `defaultMode: "bypassPermissions"`. Se ignora cuando se establece en configuraciones de proyecto (`.claude/settings.json`) para evitar que repositorios no confiables omitan automáticamente el aviso | `true` |

270 

271### Sintaxis de regla de permiso

272 

273Las reglas de permiso siguen el formato `Tool` o `Tool(specifier)`. Las reglas se evalúan en orden: primero reglas de denegación, luego preguntar, luego permitir. La primera regla coincidente gana.

274 

275Ejemplos rápidos:

276 

277| Regla | Efecto |

278| :----------------------------- | :------------------------------------------------- |

279| `Bash` | Coincide con todos los comandos Bash |

280| `Bash(npm run *)` | Coincide con comandos que comienzan con `npm run` |

281| `Read(./.env)` | Coincide con la lectura del archivo `.env` |

282| `WebFetch(domain:example.com)` | Coincide con solicitudes de búsqueda a example.com |

283 

284Para la referencia completa de sintaxis de regla, incluyendo comportamiento de comodín, patrones específicos de herramientas para Read, Edit, WebFetch, MCP, y reglas de Agent, y limitaciones de seguridad de patrones de Bash, consulte [Sintaxis de regla de permiso](/es/permissions#permission-rule-syntax).

285 

286### Configuración de sandbox

287 

288Configure el comportamiento avanzado de sandboxing. El sandboxing aísla comandos bash de su sistema de archivos y red. Consulte [Sandboxing](/es/sandboxing) para obtener detalles.

289 

290| Claves | Descripción | Ejemplo |

291| :------------------------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :-------------------------------- |

292| `enabled` | Habilitar sandboxing de bash (macOS, Linux y WSL2). Predeterminado: false | `true` |

293| `failIfUnavailable` | Salir con un error al inicio si `sandbox.enabled` es true pero el sandbox no puede iniciarse (dependencias faltantes o plataforma no compatible). Cuando es false (predeterminado), se muestra una advertencia y los comandos se ejecutan sin sandbox. Destinado a implementaciones de configuraciones administradas que requieren sandboxing como una puerta dura | `true` |

294| `autoAllowBashIfSandboxed` | Aprobar automáticamente comandos bash cuando están en sandbox. Predeterminado: true | `true` |

295| `excludedCommands` | Comandos que deben ejecutarse fuera del sandbox | `["docker *"]` |

296| `allowUnsandboxedCommands` | Permitir que los comandos se ejecuten fuera del sandbox a través del parámetro `dangerouslyDisableSandbox`. Cuando se establece en `false`, el escape hatch `dangerouslyDisableSandbox` se deshabilita completamente y todos los comandos deben ejecutarse en sandbox (o estar en `excludedCommands`). Útil para políticas empresariales que requieren sandboxing estricto. Predeterminado: true | `false` |

297| `filesystem.allowWrite` | Rutas adicionales donde los comandos en sandbox pueden escribir. Las matrices se fusionan en todos los ámbitos de configuración: las rutas de usuario, proyecto y administradas se combinan, no se reemplazan. También se fusionan con rutas de reglas de permiso `Edit(...)` permitidas. Consulte [prefijos de ruta de sandbox](#sandbox-path-prefixes) a continuación. | `["/tmp/build", "~/.kube"]` |

298| `filesystem.denyWrite` | Rutas donde los comandos en sandbox no pueden escribir. Las matrices se fusionan en todos los ámbitos de configuración. También se fusionan con rutas de reglas de permiso `Edit(...)` denegadas. | `["/etc", "/usr/local/bin"]` |

299| `filesystem.denyRead` | Rutas donde los comandos en sandbox no pueden leer. Las matrices se fusionan en todos los ámbitos de configuración. También se fusionan con rutas de reglas de permiso `Read(...)` denegadas. | `["~/.aws/credentials"]` |

300| `filesystem.allowRead` | Rutas para permitir nuevamente la lectura dentro de regiones `denyRead`. Tiene precedencia sobre `denyRead`. Las matrices se fusionan en todos los ámbitos de configuración. Use esto para crear patrones de acceso de lectura solo para el espacio de trabajo. | `["."]` |

301| `filesystem.allowManagedReadPathsOnly` | (Solo configuraciones administradas) Solo se respetan rutas `allowRead` de configuraciones administradas. Las entradas `denyRead` aún se fusionan desde todas las fuentes. Predeterminado: false | `true` |

302| `network.allowUnixSockets` | (Solo macOS) Rutas de socket Unix accesibles en sandbox. Se ignora en Linux y WSL2, donde el filtro seccomp no puede inspeccionar rutas de socket; use `allowAllUnixSockets` en su lugar. | `["~/.ssh/agent-socket"]` |

303| `network.allowAllUnixSockets` | Permitir todas las conexiones de socket Unix en sandbox. En Linux y WSL2 esta es la única forma de permitir sockets Unix, ya que omite el filtro seccomp que de otra manera bloquea llamadas `socket(AF_UNIX, ...)`. Predeterminado: false | `true` |

304| `network.allowLocalBinding` | Permitir vinculación a puertos localhost (solo macOS). Predeterminado: false | `true` |

305| `network.allowMachLookup` | Nombres de servicio XPC/Mach adicionales que el sandbox puede buscar (solo macOS). Admite un único `*` final para coincidencia de prefijo. Necesario para herramientas que se comunican a través de XPC como el Simulador de iOS o Playwright. | `["com.apple.coresimulator.*"]` |

306| `network.allowedDomains` | Matriz de dominios para permitir tráfico de red saliente. Admite comodines (por ejemplo, `*.example.com`). | `["github.com", "*.npmjs.org"]` |

307| `network.deniedDomains` | Matriz de dominios para bloquear tráfico de red saliente. Admite la misma sintaxis de comodín que `allowedDomains`. Tiene precedencia sobre `allowedDomains` cuando ambos coinciden. Se fusiona desde todas las fuentes de configuración independientemente de `allowManagedDomainsOnly`. | `["sensitive.cloud.example.com"]` |

308| `network.allowManagedDomainsOnly` | (Solo configuraciones administradas) Solo se respetan `allowedDomains` y reglas de permiso `WebFetch(domain:...)` permitidas de configuraciones administradas. Los dominios de configuraciones de usuario, proyecto y local se ignoran. Los dominios no permitidos se bloquean automáticamente sin solicitar al usuario. Los dominios denegados aún se respetan desde todas las fuentes. Predeterminado: false | `true` |

309| `network.httpProxyPort` | Puerto de proxy HTTP usado si desea traer su propio proxy. Si no se especifica, Claude ejecutará su propio proxy. | `8080` |

310| `network.socksProxyPort` | Puerto de proxy SOCKS5 usado si desea traer su propio proxy. Si no se especifica, Claude ejecutará su propio proxy. | `8081` |

311| `enableWeakerNestedSandbox` | Habilitar sandbox más débil para entornos Docker sin privilegios (solo Linux y WSL2). **Reduce la seguridad.** Predeterminado: false | `true` |

312| `enableWeakerNetworkIsolation` | (Solo macOS) Permitir acceso al servicio de confianza TLS del sistema (`com.apple.trustd.agent`) en el sandbox. Requerido para herramientas basadas en Go como `gh`, `gcloud` y `terraform` para verificar certificados TLS cuando se usa `httpProxyPort` con un proxy MITM y CA personalizada. **Reduce la seguridad** al abrir una posible ruta de exfiltración de datos. Predeterminado: false | `true` |

313 

314#### Prefijos de ruta de sandbox

315 

316Las rutas en `filesystem.allowWrite`, `filesystem.denyWrite`, `filesystem.denyRead` y `filesystem.allowRead` admiten estos prefijos:

317 

318| Prefijo | Significado | Ejemplo |

319| :----------------- | :---------------------------------------------------------------------------------------------------------------- | :-------------------------------------------------------------------------- |

320| `/` | Ruta absoluta desde la raíz del sistema de archivos | `/tmp/build` se mantiene como `/tmp/build` |

321| `~/` | Relativo al directorio de inicio | `~/.kube` se convierte en `$HOME/.kube` |

322| `./` o sin prefijo | Relativo a la raíz del proyecto para configuraciones de proyecto, o a `~/.claude` para configuraciones de usuario | `./output` en `.claude/settings.json` se resuelve a `<project-root>/output` |

323 

324El prefijo anterior `//path` para rutas absolutas aún funciona. Si anteriormente usó `/path` esperando resolución relativa al proyecto, cambie a `./path`. Esta sintaxis difiere de [reglas de permiso Read y Edit](/es/permissions#read-and-edit), que usan `//path` para absoluto y `/path` para relativo al proyecto. Las rutas del sistema de archivos de sandbox usan convenciones estándar: `/tmp/build` es una ruta absoluta.

325 

326**Ejemplo de configuración:**

327 

328```json theme={null}

329{

330 "sandbox": {

331 "enabled": true,

332 "autoAllowBashIfSandboxed": true,

333 "excludedCommands": ["docker *"],

334 "filesystem": {

335 "allowWrite": ["/tmp/build", "~/.kube"],

336 "denyRead": ["~/.aws/credentials"]

337 },

338 "network": {

339 "allowedDomains": ["github.com", "*.npmjs.org", "registry.yarnpkg.com"],

340 "deniedDomains": ["uploads.github.com"],

341 "allowUnixSockets": [

342 "/var/run/docker.sock"

343 ],

344 "allowLocalBinding": true

345 }

346 }

347}

348```

349 

350**Las restricciones de sistema de archivos y red** se pueden configurar de dos formas que se fusionan:

351 

352* **Configuraciones `sandbox.filesystem`** (mostradas arriba): Controlan rutas en el límite del sandbox a nivel de SO. Estas restricciones se aplican a todos los comandos de subproceso (por ejemplo, `kubectl`, `terraform`, `npm`), no solo a las herramientas de archivo de Claude.

353* **Reglas de permiso**: Use reglas de permiso `Edit` permitidas/denegadas para controlar el acceso a la herramienta de archivo de Claude, reglas de denegación `Read` para bloquear lecturas, y reglas de permiso `WebFetch` permitidas/denegadas para controlar dominios de red. Las rutas de estas reglas también se fusionan en la configuración del sandbox.

354 

355### Configuración de atribución

356 

357Claude Code agrega atribución a commits de git y solicitudes de extracción. Estos se configuran por separado:

358 

359* Los commits usan [git trailers](https://git-scm.com/docs/git-interpret-trailers) (como `Co-Authored-By`) de forma predeterminada, que se pueden personalizar o deshabilitar

360* Las descripciones de solicitudes de extracción son texto sin formato

361 

362| Claves | Descripción |

363| :------- | :-------------------------------------------------------------------------------------------------------------------------- |

364| `commit` | Atribución para commits de git, incluyendo cualquier trailer. La cadena vacía oculta la atribución de commit |

365| `pr` | Atribución para descripciones de solicitudes de extracción. La cadena vacía oculta la atribución de solicitud de extracción |

366 

367**Atribución de commit predeterminada:**

368 

369```text theme={null}

370🤖 Generated with [Claude Code](https://claude.com/claude-code)

371 

372 Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

373```

374 

375**Atribución de solicitud de extracción predeterminada:**

376 

377```text theme={null}

378🤖 Generated with [Claude Code](https://claude.com/claude-code)

379```

380 

381**Ejemplo:**

382 

383```json theme={null}

384{

385 "attribution": {

386 "commit": "Generated with AI\n\nCo-Authored-By: AI <ai@example.com>",

387 "pr": ""

388 }

389}

390```

391 

392<Note>

393 La configuración `attribution` tiene precedencia sobre la configuración `includeCoAuthoredBy` obsoleta. Para ocultar toda la atribución, establezca `commit` y `pr` en cadenas vacías.

394</Note>

395 

396### Configuración de sugerencia de archivo

397 

398Configure un comando personalizado para autocompletado de ruta de archivo `@`. La sugerencia de archivo integrada utiliza recorrido rápido del sistema de archivos, pero los monorepos grandes pueden beneficiarse de indexación específica del proyecto como un índice de archivo precompilado o herramientas personalizadas.

399 

400```json theme={null}

401{

402 "fileSuggestion": {

403 "type": "command",

404 "command": "~/.claude/file-suggestion.sh"

405 }

406}

407```

408 

409El comando se ejecuta con las mismas variables de entorno que [hooks](/es/hooks), incluyendo `CLAUDE_PROJECT_DIR`. Recibe JSON a través de stdin con un campo `query`:

410 

411```json theme={null}

412{"query": "src/comp"}

413```

414 

415Genere rutas de archivo separadas por saltos de línea a stdout (actualmente limitado a 15):

416 

417```text theme={null}

418src/components/Button.tsx

419src/components/Modal.tsx

420src/components/Form.tsx

421```

422 

423**Ejemplo:**

424 

425```bash theme={null}

426#!/bin/bash

427query=$(cat | jq -r '.query')

428your-repo-file-index --query "$query" | head -20

429```

430 

431### Configuración de hooks

432 

433Estas configuraciones controlan qué hooks se pueden ejecutar y a qué pueden acceder los hooks HTTP. La configuración `allowManagedHooksOnly` solo se puede configurar en [configuraciones administradas](#settings-files). Las listas blancas de URL y variables de entorno se pueden establecer en cualquier nivel de configuración y se fusionan entre fuentes.

434 

435**Comportamiento cuando `allowManagedHooksOnly` es `true`:**

436 

437* Se cargan hooks administrados y hooks SDK

438* Se cargan hooks de plugins forzadamente habilitados en la configuración administrada `enabledPlugins`. Esto permite que los administradores distribuyan hooks verificados a través de un marketplace de organización mientras bloquean todo lo demás. La confianza se otorga por ID completo de `plugin@marketplace`, por lo que un plugin con el mismo nombre de un marketplace diferente permanece bloqueado

439* Se bloquean hooks de usuario, proyecto y todos los demás plugins

440 

441**Restringir URLs de hooks HTTP:**

442 

443Limitar qué URLs pueden dirigirse los hooks HTTP. Admite `*` como comodín para coincidencia. Cuando la matriz se define, los hooks HTTP que se dirigen a URLs que no coinciden se bloquean silenciosamente.

444 

445```json theme={null}

446{

447 "allowedHttpHookUrls": ["https://hooks.example.com/*", "http://localhost:*"]

448}

449```

450 

451**Restringir variables de entorno de hooks HTTP:**

452 

453Limitar qué nombres de variables de entorno pueden interpolar los hooks HTTP en valores de encabezado. El `allowedEnvVars` efectivo de cada hook es la intersección de su propia lista y esta configuración.

454 

455```json theme={null}

456{

457 "httpHookAllowedEnvVars": ["MY_TOKEN", "HOOK_SECRET"]

458}

459```

460 

461### Precedencia de configuración

462 

463Las configuraciones se aplican en orden de precedencia. De mayor a menor:

464 

4651. **Configuraciones administradas** ([administradas por servidor](/es/server-managed-settings), [políticas de MDM/nivel de SO](#configuration-scopes), o [configuraciones administradas](/es/settings#settings-files))

466 * Políticas implementadas por TI a través de entrega de servidor, perfiles de configuración MDM, políticas de registro o archivos de configuración administrados

467 * No pueden ser anuladas por ningún otro nivel, incluyendo argumentos de línea de comandos

468 * Dentro del nivel administrado, la precedencia es: administrado por servidor > políticas de MDM/nivel de SO > archivo basado (`managed-settings.d/*.json` + `managed-settings.json`) > registro HKCU (solo Windows). Solo se usa una fuente administrada; las fuentes no se fusionan entre niveles. Dentro del nivel basado en archivos, los archivos de entrega y el archivo base se fusionan juntos.

469 

4702. **Argumentos de línea de comandos**

471 * Anulaciones temporales para una sesión específica

472 

4733. **Configuraciones de proyecto local** (`.claude/settings.local.json`)

474 * Configuraciones personales específicas del proyecto

475 

4764. **Configuraciones de proyecto compartidas** (`.claude/settings.json`)

477 * Configuraciones de proyecto compartidas por el equipo en control de código fuente

478 

4795. **Configuraciones de usuario** (`~/.claude/settings.json`)

480 * Configuraciones personales globales

481 

482Esta jerarquía asegura que las políticas organizacionales siempre se apliquen mientras aún permite que equipos e individuos personalicen su experiencia. La misma precedencia se aplica si ejecuta Claude Code desde la CLI, la [extensión de VS Code](/es/vs-code), o un [IDE de JetBrains](/es/jetbrains).

483 

484Por ejemplo, si su configuración de usuario permite `Bash(npm run *)` pero la configuración compartida de un proyecto la deniega, la configuración del proyecto tiene precedencia y el comando se bloquea.

485 

486<Note>

487 **Las configuraciones de matriz se fusionan entre ámbitos.** Cuando la misma configuración con valor de matriz (como `sandbox.filesystem.allowWrite` o `permissions.allow`) aparece en múltiples ámbitos, las matrices se **concatenan y se deduplicán**, no se reemplazan. Esto significa que los ámbitos de menor prioridad pueden agregar entradas sin anular las establecidas por ámbitos de mayor prioridad, y viceversa. Por ejemplo, si las configuraciones administradas establecen `allowWrite` en `["/opt/company-tools"]` y un usuario agrega `["~/.kube"]`, ambas rutas se incluyen en la configuración final.

488</Note>

489 

490### Verificar configuraciones activas

491 

492Ejecute `/status` dentro de Claude Code para ver qué fuentes de configuración están activas y de dónde provienen. La salida muestra cada capa de configuración (administrada, usuario, proyecto) junto con su origen, como `Enterprise managed settings (remote)`, `Enterprise managed settings (plist)`, `Enterprise managed settings (HKLM)`, `Enterprise managed settings (HKCU)`, o `Enterprise managed settings (file)`. Si un archivo de configuración contiene errores, `/status` reporta el problema para que pueda corregirlo.

493 

494### Puntos clave sobre el sistema de configuración

495 

496* **Archivos de memoria (`CLAUDE.md`)**: Contienen instrucciones y contexto que Claude carga al inicio

497* **Archivos de configuración (JSON)**: Configurar permisos, variables de entorno y comportamiento de herramientas

498* **Skills**: Indicaciones personalizadas que se pueden invocar con `/skill-name` o cargar automáticamente por Claude

499* **MCP servers**: Extender Claude Code con herramientas e integraciones adicionales

500* **Precedencia**: Las configuraciones de nivel superior (Managed) anulan las de nivel inferior (User/Project)

501* **Herencia**: Las configuraciones se fusionan, con configuraciones más específicas agregando o anulando las más amplias

502 

503### Indicador del sistema

504 

505El indicador del sistema interno de Claude Code no se publica. Para agregar instrucciones personalizadas, use archivos `CLAUDE.md` o la bandera `--append-system-prompt`.

506 

507### Excluyendo archivos sensibles

508 

509Para evitar que Claude Code acceda a archivos que contienen información sensible como claves API, secretos y archivos de entorno, use la configuración `permissions.deny` en su archivo `.claude/settings.json`:

510 

511```json theme={null}

512{

513 "permissions": {

514 "deny": [

515 "Read(./.env)",

516 "Read(./.env.*)",

517 "Read(./secrets/**)",

518 "Read(./config/credentials.json)",

519 "Read(./build)"

520 ]

521 }

522}

523```

524 

525Esto reemplaza la configuración `ignorePatterns` obsoleta. Los archivos que coinciden con estos patrones se excluyen del descubrimiento de archivos y resultados de búsqueda, y las operaciones de lectura en estos archivos se deniegan.

526 

527## Configuración de subagents

528 

529Claude Code admite subagents de IA personalizados que se pueden configurar en niveles de usuario y proyecto. Estos subagents se almacenan como archivos Markdown con frontmatter YAML:

530 

531* **Subagents de usuario**: `~/.claude/agents/` - Disponibles en todos sus proyectos

532* **Subagents de proyecto**: `.claude/agents/` - Específicos de su proyecto y se pueden compartir con su equipo

533 

534Los archivos de subagent definen asistentes de IA especializados con indicaciones personalizadas y permisos de herramientas. Obtenga más información sobre cómo crear y usar subagents en la [documentación de subagents](/es/sub-agents).

535 

536## Configuración de plugins

537 

538Claude Code admite un sistema de plugins que le permite extender la funcionalidad con skills, agentes, hooks y servidores MCP. Los plugins se distribuyen a través de marketplaces y se pueden configurar en niveles de usuario y repositorio.

539 

540### Configuración de plugins

541 

542Configuraciones relacionadas con plugins en `settings.json`:

543 

544```json theme={null}

545{

546 "enabledPlugins": {

547 "formatter@acme-tools": true,

548 "deployer@acme-tools": true,

549 "analyzer@security-plugins": false

550 },

551 "extraKnownMarketplaces": {

552 "acme-tools": {

553 "source": "github",

554 "repo": "acme-corp/claude-plugins"

555 }

556 }

557}

558```

559 

560#### `enabledPlugins`

561 

562Controla qué plugins están habilitados. Formato: `"plugin-name@marketplace-name": true/false`

563 

564**Ámbitos**:

565 

566* **Configuraciones de usuario** (`~/.claude/settings.json`): Preferencias personales de plugins

567* **Configuraciones de proyecto** (`.claude/settings.json`): Plugins específicos del proyecto compartidos con el equipo

568* **Configuraciones locales** (`.claude/settings.local.json`): Anulaciones por máquina (no confirmadas)

569* **Configuraciones administradas** (`managed-settings.json`): Anulaciones de política a nivel de organización que bloquean la instalación en todos los ámbitos y ocultan el plugin del marketplace

570 

571**Ejemplo**:

572 

573```json theme={null}

574{

575 "enabledPlugins": {

576 "code-formatter@team-tools": true,

577 "deployment-tools@team-tools": true,

578 "experimental-features@personal": false

579 }

580}

581```

582 

583#### `extraKnownMarketplaces`

584 

585Define marketplaces adicionales que deben estar disponibles para el repositorio. Típicamente se usa en configuraciones a nivel de repositorio para asegurar que los miembros del equipo tengan acceso a fuentes de plugins requeridas.

586 

587**Cuando un repositorio incluye `extraKnownMarketplaces`**:

588 

5891. Los miembros del equipo reciben un aviso para instalar el marketplace cuando confían en la carpeta

5902. Los miembros del equipo reciben un aviso para instalar plugins de ese marketplace

5913. Los usuarios pueden omitir marketplaces o plugins no deseados (almacenados en configuraciones de usuario)

5924. La instalación respeta límites de confianza y requiere consentimiento explícito

593 

594**Ejemplo**:

595 

596```json theme={null}

597{

598 "extraKnownMarketplaces": {

599 "acme-tools": {

600 "source": {

601 "source": "github",

602 "repo": "acme-corp/claude-plugins"

603 }

604 },

605 "security-plugins": {

606 "source": {

607 "source": "git",

608 "url": "https://git.example.com/security/plugins.git"

609 }

610 }

611 }

612}

613```

614 

615**Tipos de fuente de marketplace**:

616 

617* `github`: Repositorio de GitHub (usa `repo`)

618* `git`: Cualquier URL de git (usa `url`)

619* `directory`: Ruta del sistema de archivos local (usa `path`, solo para desarrollo)

620* `hostPattern`: Patrón regex para coincidir con hosts de marketplace (usa `hostPattern`)

621* `settings`: marketplace en línea declarado directamente en settings.json sin un repositorio alojado separado (usa `name` y `plugins`)

622 

623Use `source: 'settings'` para declarar un pequeño conjunto de plugins en línea sin configurar un repositorio de marketplace alojado. Los plugins listados aquí deben hacer referencia a fuentes externas como GitHub o npm. Aún necesita habilitar cada plugin por separado en `enabledPlugins`.

624 

625```json theme={null}

626{

627 "extraKnownMarketplaces": {

628 "team-tools": {

629 "source": {

630 "source": "settings",

631 "name": "team-tools",

632 "plugins": [

633 {

634 "name": "code-formatter",

635 "source": {

636 "source": "github",

637 "repo": "acme-corp/code-formatter"

638 }

639 }

640 ]

641 }

642 }

643 }

644}

645```

646 

647#### `strictKnownMarketplaces`

648 

649**Solo configuraciones administradas**: Controla qué marketplaces de plugins se permite a los usuarios agregar e instalar plugins desde. Esta configuración solo se puede configurar en [configuraciones administradas](/es/settings#settings-files) y proporciona a los administradores control estricto sobre fuentes de marketplace.

650 

651**Ubicaciones de archivos de configuraciones administradas**:

652 

653* **macOS**: `/Library/Application Support/ClaudeCode/managed-settings.json`

654* **Linux y WSL**: `/etc/claude-code/managed-settings.json`

655* **Windows**: `C:\Program Files\ClaudeCode\managed-settings.json`

656 

657**Características clave**:

658 

659* Solo disponible en configuraciones administradas (`managed-settings.json`)

660* No puede ser anulada por configuraciones de usuario o proyecto (precedencia más alta)

661* Se aplica ANTES de operaciones de red/sistema de archivos (las fuentes bloqueadas nunca se ejecutan)

662* Usa coincidencia exacta para especificaciones de fuente (incluyendo `ref`, `path` para fuentes de git), excepto `hostPattern`, que usa coincidencia regex

663 

664**Comportamiento de lista blanca**:

665 

666* `undefined` (predeterminado): Sin restricciones - los usuarios pueden agregar cualquier marketplace

667* Matriz vacía `[]`: Bloqueo completo - los usuarios no pueden agregar nuevos marketplaces

668* Lista de fuentes: Los usuarios solo pueden agregar marketplaces que coincidan exactamente

669 

670**Todos los tipos de fuente admitidos**:

671 

672La lista blanca admite múltiples tipos de fuente de marketplace. La mayoría de las fuentes usan coincidencia exacta, mientras que `hostPattern` usa coincidencia regex contra el host del marketplace.

673 

6741. **Repositorios de GitHub**:

675 

676```json theme={null}

677{ "source": "github", "repo": "acme-corp/approved-plugins" }

678{ "source": "github", "repo": "acme-corp/security-tools", "ref": "v2.0" }

679{ "source": "github", "repo": "acme-corp/plugins", "ref": "main", "path": "marketplace" }

680```

681 

682Campos: `repo` (requerido), `ref` (opcional: rama/etiqueta/SHA), `path` (opcional: subdirectorio)

683 

6842. **Repositorios de Git**:

685 

686```json theme={null}

687{ "source": "git", "url": "https://gitlab.example.com/tools/plugins.git" }

688{ "source": "git", "url": "https://bitbucket.org/acme-corp/plugins.git", "ref": "production" }

689{ "source": "git", "url": "ssh://git@git.example.com/plugins.git", "ref": "v3.1", "path": "approved" }

690```

691 

692Campos: `url` (requerido), `ref` (opcional: rama/etiqueta/SHA), `path` (opcional: subdirectorio)

693 

6943. **Marketplaces basados en URL**:

695 

696```json theme={null}

697{ "source": "url", "url": "https://plugins.example.com/marketplace.json" }

698{ "source": "url", "url": "https://cdn.example.com/marketplace.json", "headers": { "Authorization": "Bearer ${TOKEN}" } }

699```

700 

701Campos: `url` (requerido), `headers` (opcional: encabezados HTTP para acceso autenticado)

702 

703<Note>

704 Los marketplaces basados en URL solo descargan el archivo `marketplace.json`. No descargan archivos de plugins del servidor. Los plugins en marketplaces basados en URL deben usar fuentes externas (URLs de GitHub, npm o git) en lugar de rutas relativas. Para plugins con rutas relativas, use un marketplace basado en Git en su lugar. Consulte [Troubleshooting](/es/plugin-marketplaces#plugins-with-relative-paths-fail-in-url-based-marketplaces) para obtener detalles.

705</Note>

706 

7074. **Paquetes NPM**:

708 

709```json theme={null}

710{ "source": "npm", "package": "@acme-corp/claude-plugins" }

711{ "source": "npm", "package": "@acme-corp/approved-marketplace" }

712```

713 

714Campos: `package` (requerido, admite paquetes con alcance)

715 

7165. **Rutas de archivo**:

717 

718```json theme={null}

719{ "source": "file", "path": "/usr/local/share/claude/acme-marketplace.json" }

720{ "source": "file", "path": "/opt/acme-corp/plugins/marketplace.json" }

721```

722 

723Campos: `path` (requerido: ruta absoluta al archivo marketplace.json)

724 

7256. **Rutas de directorio**:

726 

727```json theme={null}

728{ "source": "directory", "path": "/usr/local/share/claude/acme-plugins" }

729{ "source": "directory", "path": "/opt/acme-corp/approved-marketplaces" }

730```

731 

732Campos: `path` (requerido: ruta absoluta al directorio que contiene `.claude-plugin/marketplace.json`)

733 

7347. **Coincidencia de patrón de host**:

735 

736```json theme={null}

737{ "source": "hostPattern", "hostPattern": "^github\\.example\\.com$" }

738{ "source": "hostPattern", "hostPattern": "^gitlab\\.internal\\.example\\.com$" }

739```

740 

741Campos: `hostPattern` (requerido: patrón regex para coincidir contra el host del marketplace)

742 

743Use coincidencia de patrón de host cuando desee permitir todos los marketplaces de un host específico sin enumerar cada repositorio individualmente. Esto es útil para organizaciones con GitHub Enterprise interno o servidores GitLab donde los desarrolladores crean sus propios marketplaces.

744 

745Extracción de host por tipo de fuente:

746 

747* `github`: siempre coincide contra `github.com`

748* `git`: extrae nombre de host de la URL (admite formatos HTTPS y SSH)

749* `url`: extrae nombre de host de la URL

750* `npm`, `file`, `directory`: no admitido para coincidencia de patrón de host

751 

752**Ejemplos de configuración**:

753 

754Ejemplo: permitir solo marketplaces específicos:

755 

756```json theme={null}

757{

758 "strictKnownMarketplaces": [

759 {

760 "source": "github",

761 "repo": "acme-corp/approved-plugins"

762 },

763 {

764 "source": "github",

765 "repo": "acme-corp/security-tools",

766 "ref": "v2.0"

767 },

768 {

769 "source": "url",

770 "url": "https://plugins.example.com/marketplace.json"

771 },

772 {

773 "source": "npm",

774 "package": "@acme-corp/compliance-plugins"

775 }

776 ]

777}

778```

779 

780Ejemplo - Deshabilitar todas las adiciones de marketplace:

781 

782```json theme={null}

783{

784 "strictKnownMarketplaces": []

785}

786```

787 

788Ejemplo: permitir todos los marketplaces de un servidor git interno:

789 

790```json theme={null}

791{

792 "strictKnownMarketplaces": [

793 {

794 "source": "hostPattern",

795 "hostPattern": "^github\\.example\\.com$"

796 }

797 ]

798}

799```

800 

801**Requisitos de coincidencia exacta**:

802 

803Las fuentes de marketplace deben coincidir **exactamente** para que se permita la adición de un usuario. Para fuentes basadas en git (`github` y `git`), esto incluye todos los campos opcionales:

804 

805* El `repo` o `url` debe coincidir exactamente

806* El campo `ref` debe coincidir exactamente (o ambos estar sin definir)

807* El campo `path` debe coincidir exactamente (o ambos estar sin definir)

808 

809Ejemplos de fuentes que **NO coinciden**:

810 

811```json theme={null}

812// Estas son fuentes DIFERENTES:

813{ "source": "github", "repo": "acme-corp/plugins" }

814{ "source": "github", "repo": "acme-corp/plugins", "ref": "main" }

815 

816// Estas también son DIFERENTES:

817{ "source": "github", "repo": "acme-corp/plugins", "path": "marketplace" }

818{ "source": "github", "repo": "acme-corp/plugins" }

819```

820 

821**Comparación con `extraKnownMarketplaces`**:

822 

823| Aspecto | `strictKnownMarketplaces` | `extraKnownMarketplaces` |

824| ---------------------------- | ----------------------------------------------- | ---------------------------------------------- |

825| **Propósito** | Aplicación de política organizacional | Conveniencia del equipo |

826| **Archivo de configuración** | Solo `managed-settings.json` | Cualquier archivo de configuración |

827| **Comportamiento** | Bloquea adiciones no permitidas | Instala automáticamente marketplaces faltantes |

828| **Cuándo se aplica** | Antes de operaciones de red/sistema de archivos | Después del aviso de confianza del usuario |

829| **Puede ser anulada** | No (precedencia más alta) | Sí (por configuraciones de mayor precedencia) |

830| **Formato de fuente** | Objeto de fuente directo | Marketplace nombrado con fuente anidada |

831| **Caso de uso** | Restricciones de cumplimiento y seguridad | Incorporación, estandarización |

832 

833**Diferencia de formato**:

834 

835`strictKnownMarketplaces` usa objetos de fuente directos:

836 

837```json theme={null}

838{

839 "strictKnownMarketplaces": [

840 { "source": "github", "repo": "acme-corp/plugins" }

841 ]

842}

843```

844 

845`extraKnownMarketplaces` requiere marketplaces nombrados:

846 

847```json theme={null}

848{

849 "extraKnownMarketplaces": {

850 "acme-tools": {

851 "source": { "source": "github", "repo": "acme-corp/plugins" }

852 }

853 }

854}

855```

856 

857**Usando ambos juntos**:

858 

859`strictKnownMarketplaces` es una puerta de política: controla qué pueden agregar los usuarios pero no registra ningún marketplace. Para restringir y pre-registrar un marketplace para todos los usuarios, establezca ambos en `managed-settings.json`:

860 

861```json theme={null}

862{

863 "strictKnownMarketplaces": [

864 { "source": "github", "repo": "acme-corp/plugins" }

865 ],

866 "extraKnownMarketplaces": {

867 "acme-tools": {

868 "source": { "source": "github", "repo": "acme-corp/plugins" }

869 }

870 }

871}

872```

873 

874Con solo `strictKnownMarketplaces` establecido, los usuarios aún pueden agregar el marketplace permitido manualmente a través de `/plugin marketplace add`, pero no está disponible automáticamente.

875 

876**Notas importantes**:

877 

878* Las restricciones se verifican ANTES de cualquier solicitud de red u operación del sistema de archivos

879* Cuando se bloquea, los usuarios ven mensajes de error claros indicando que la fuente está bloqueada por política administrada

880* La restricción se aplica en agregar marketplace y en instalar, actualizar, actualizar y auto-actualizar plugins. Un marketplace agregado antes de que se estableciera la política no puede usarse para instalar o actualizar plugins una vez que su fuente ya no coincida con la lista blanca

881* Las configuraciones administradas tienen la precedencia más alta y no pueden ser anuladas

882 

883Consulte [Restricciones de marketplace administradas](/es/plugin-marketplaces#managed-marketplace-restrictions) para documentación dirigida al usuario.

884 

885### Gestionar plugins

886 

887Use el comando `/plugin` para gestionar plugins interactivamente:

888 

889* Examinar plugins disponibles de marketplaces

890* Instalar/desinstalar plugins

891* Habilitar/deshabilitar plugins

892* Ver detalles de plugins (skills, agentes, hooks proporcionados)

893* Agregar/eliminar marketplaces

894 

895Obtenga más información sobre el sistema de plugins en la [documentación de plugins](/es/plugins).

896 

897## Variables de entorno

898 

899Las variables de entorno le permiten controlar el comportamiento de Claude Code sin editar archivos de configuración. Cualquier variable también se puede configurar en [`settings.json`](#available-settings) bajo la clave `env` para aplicarla a cada sesión o implementarla en su equipo.

900 

901Consulte la [referencia de variables de entorno](/es/env-vars) para la lista completa.

902 

903## Herramientas disponibles para Claude

904 

905Claude Code tiene acceso a un conjunto de herramientas para leer, editar, buscar, ejecutar comandos y orquestar subagents. Los nombres de herramientas son las cadenas exactas que utiliza en reglas de permiso y coincidencias de hooks.

906 

907Consulte la [referencia de herramientas](/es/tools-reference) para la lista completa y detalles del comportamiento de la herramienta Bash.

908 

909## Ver también

910 

911* [Permisos](/es/permissions): sistema de permisos, sintaxis de regla, patrones específicos de herramientas y políticas administradas

912* [Autenticación](/es/authentication): configurar acceso de usuario a Claude Code

913* [Depurar su configuración](/es/debug-your-config): diagnosticar por qué una configuración, hook o servidor MCP no está surtiendo efecto

914* [Solucionar problemas de instalación e inicio de sesión](/es/troubleshoot-install): problemas de instalación, autenticación y plataforma

setup.md +606 −0 created

Details

1> ## Documentation Index

2> Fetch the complete documentation index at: https://code.claude.com/docs/llms.txt

3> Use this file to discover all available pages before exploring further.

4 

5# Configuración avanzada

6 

7> Requisitos del sistema, instalación específica de plataforma, gestión de versiones y desinstalación para Claude Code.

8 

9Esta página cubre requisitos del sistema, detalles de instalación específicos de plataforma, actualizaciones y desinstalación. Para un recorrido guiado de su primera sesión, consulte el [inicio rápido](/es/quickstart). Si nunca ha utilizado una terminal antes, consulte la [guía de terminal](/es/terminal-guide).

10 

11## Requisitos del sistema

12 

13Claude Code se ejecuta en las siguientes plataformas y configuraciones:

14 

15* **Sistema operativo**:

16 * macOS 13.0+

17 * Windows 10 1809+ o Windows Server 2019+

18 * Ubuntu 20.04+

19 * Debian 10+

20 * Alpine Linux 3.19+

21* **Hardware**: 4 GB+ de RAM, procesador x64 o ARM64

22* **Red**: se requiere conexión a Internet. Consulte [configuración de red](/es/network-config#network-access-requirements).

23* **Shell**: Bash, Zsh, PowerShell o CMD. En Windows nativo, se recomienda [Git for Windows](https://git-scm.com/downloads/win); Claude Code recurre a PowerShell cuando Git Bash no está presente. Las configuraciones de WSL no requieren Git for Windows.

24* **Ubicación**: [países compatibles con Anthropic](https://www.anthropic.com/supported-countries)

25 

26### Dependencias adicionales

27 

28* **ripgrep**: generalmente incluido con Claude Code. Si la búsqueda falla, consulte [solución de problemas de búsqueda](/es/troubleshooting#search-and-discovery-issues).

29 

30## Instalar Claude Code

31 

32<Tip>

33 ¿Prefiere una interfaz gráfica? La [aplicación de escritorio](/es/desktop-quickstart) le permite usar Claude Code sin la terminal. Descárguela para [macOS](https://claude.ai/api/desktop/darwin/universal/dmg/latest/redirect?utm_source=claude_code\&utm_medium=docs) o [Windows](https://claude.com/download?utm_source=claude_code\&utm_medium=docs).

34 

35 ¿Nuevo en la terminal? Consulte la [guía de terminal](/es/terminal-guide) para obtener instrucciones paso a paso.

36</Tip>

37 

38To install Claude Code, use one of the following methods:

39 

40<Tabs>

41 <Tab title="Native Install (Recommended)">

42 **macOS, Linux, WSL:**

43 

44 ```bash theme={null}

45 curl -fsSL https://claude.ai/install.sh | bash

46 ```

47 

48 **Windows PowerShell:**

49 

50 ```powershell theme={null}

51 irm https://claude.ai/install.ps1 | iex

52 ```

53 

54 **Windows CMD:**

55 

56 ```batch theme={null}

57 curl -fsSL https://claude.ai/install.cmd -o install.cmd && install.cmd && del install.cmd

58 ```

59 

60 If you see `The token '&&' is not a valid statement separator`, you're in PowerShell, not CMD. If you see `'irm' is not recognized as an internal or external command`, you're in CMD, not PowerShell. Your prompt shows `PS C:\` when you're in PowerShell and `C:\` without the `PS` when you're in CMD.

61 

62 [Git for Windows](https://git-scm.com/downloads/win) is recommended on native Windows so Claude Code can use the Bash tool. If Git for Windows is not installed, Claude Code uses PowerShell as the shell tool instead. WSL setups do not need Git for Windows.

63 

64 <Info>

65 Native installations automatically update in the background to keep you on the latest version.

66 </Info>

67 </Tab>

68 

69 <Tab title="Homebrew">

70 ```bash theme={null}

71 brew install --cask claude-code

72 ```

73 

74 Homebrew offers two casks. `claude-code` tracks the stable release channel, which is typically about a week behind and skips releases with major regressions. `claude-code@latest` tracks the latest channel and receives new versions as soon as they ship.

75 

76 <Info>

77 Homebrew installations do not auto-update. Run `brew upgrade claude-code` or `brew upgrade claude-code@latest`, depending on which cask you installed, to get the latest features and security fixes.

78 </Info>

79 </Tab>

80 

81 <Tab title="WinGet">

82 ```powershell theme={null}

83 winget install Anthropic.ClaudeCode

84 ```

85 

86 <Info>

87 WinGet installations do not auto-update. Run `winget upgrade Anthropic.ClaudeCode` periodically to get the latest features and security fixes.

88 </Info>

89 </Tab>

90</Tabs>

91 

92You can also install with [apt, dnf, or apk](/en/setup#install-with-linux-package-managers) on Debian, Fedora, RHEL, and Alpine.

93 

94Después de que se complete la instalación, abra una terminal en el proyecto en el que desea trabajar e inicie Claude Code:

95 

96```bash theme={null}

97claude

98```

99 

100Si encuentra algún problema durante la instalación, consulte [Solucionar problemas de instalación e inicio de sesión](/es/troubleshoot-install).

101 

102### Configurar en Windows

103 

104Puede ejecutar Claude Code de forma nativa en Windows o dentro de WSL. Elija según dónde se encuentren sus proyectos y qué características necesite:

105 

106| Opción | Requiere | [Sandboxing](/es/sandboxing) | Cuándo usar |

107| -------------- | ------------------------------------------------------------------------------------------------------------- | ---------------------------- | ------------------------------------------------------------------- |

108| Windows nativo | [Git for Windows](https://git-scm.com/downloads/win) recomendado; PowerShell se utiliza si no está disponible | No compatible | Proyectos y herramientas nativas de Windows |

109| WSL 2 | WSL 2 habilitado | Compatible | Cadenas de herramientas de Linux o ejecución de comandos en sandbox |

110| WSL 1 | WSL 1 habilitado | No compatible | Si WSL 2 no está disponible |

111 

112**Opción 1: Windows nativo con Git Bash**

113 

114Instale [Git for Windows](https://git-scm.com/downloads/win) y luego ejecute el comando de instalación desde PowerShell o CMD. No necesita ejecutar como Administrador.

115 

116Ya sea que instale desde PowerShell o CMD solo afecta qué comando de instalación ejecuta. Su indicador muestra `PS C:\Users\YourName>` en PowerShell y `C:\Users\YourName>` sin el `PS` en CMD. Si es nuevo en la terminal, la [guía de terminal](/es/terminal-guide#windows) le guía a través de cada paso.

117 

118Después de la instalación, inicie `claude` desde PowerShell, CMD o Git Bash. Cuando Git Bash está instalado, Claude Code lo utiliza internamente para ejecutar comandos independientemente de dónde lo inicie. Si Claude Code no puede encontrar su instalación de Git Bash, establezca la ruta en su [archivo settings.json](/es/settings):

119 

120```json theme={null}

121{

122 "env": {

123 "CLAUDE_CODE_GIT_BASH_PATH": "C:\\Program Files\\Git\\bin\\bash.exe"

124 }

125}

126```

127 

128Claude Code también puede ejecutar PowerShell de forma nativa en Windows. Cuando Git Bash está instalado, la herramienta PowerShell se está implementando progresivamente como una opción adicional: establezca `CLAUDE_CODE_USE_POWERSHELL_TOOL=1` para participar o `0` para no participar. Consulte [herramienta PowerShell](/es/tools-reference#powershell-tool) para configuración y limitaciones.

129 

130**Opción 2: WSL**

131 

132Abra su distribución de WSL y ejecute el instalador de Linux desde las [instrucciones de instalación](#install-claude-code) anteriores. Instala e inicia `claude` dentro del terminal de WSL, no desde PowerShell o CMD.

133 

134### Alpine Linux y distribuciones basadas en musl

135 

136El instalador nativo en Alpine y otras distribuciones basadas en musl/uClibc requiere `libgcc`, `libstdc++` y `ripgrep`. Instale estos usando el gestor de paquetes de su distribución y luego establezca `USE_BUILTIN_RIPGREP=0`.

137 

138Este ejemplo instala los paquetes requeridos en Alpine:

139 

140```bash theme={null}

141apk add libgcc libstdc++ ripgrep

142```

143 

144Luego establezca `USE_BUILTIN_RIPGREP` en `0` en su archivo [`settings.json`](/es/settings#available-settings):

145 

146```json theme={null}

147{

148 "env": {

149 "USE_BUILTIN_RIPGREP": "0"

150 }

151}

152```

153 

154## Verificar su instalación

155 

156Después de instalar, confirme que Claude Code está funcionando:

157 

158```bash theme={null}

159claude --version

160```

161 

162Si esto falla con `command not found` u otro error, consulte [Solucionar problemas de instalación e inicio de sesión](/es/troubleshoot-install).

163 

164Para una verificación más detallada de su instalación y configuración, ejecute [`claude doctor`](/es/troubleshooting#get-more-help):

165 

166```bash theme={null}

167claude doctor

168```

169 

170## Autenticar

171 

172Claude Code requiere una cuenta Pro, Max, Team, Enterprise o Console. El plan gratuito de Claude.ai no incluye acceso a Claude Code. También puede usar Claude Code con un proveedor de API de terceros como [Amazon Bedrock](/es/amazon-bedrock), [Google Vertex AI](/es/google-vertex-ai) o [Microsoft Foundry](/es/microsoft-foundry).

173 

174Después de instalar, inicie sesión ejecutando `claude` y siguiendo las indicaciones del navegador. Consulte [Autenticación](/es/authentication) para todos los tipos de cuenta y opciones de configuración de equipo.

175 

176## Actualizar Claude Code

177 

178Las instalaciones nativas se actualizan automáticamente en segundo plano. Puede [configurar el canal de lanzamiento](#configure-release-channel) para controlar si recibe actualizaciones inmediatamente o en un cronograma estable retrasado, o [deshabilitar las actualizaciones automáticas](#disable-auto-updates) completamente. Las instalaciones de Homebrew, WinGet y [gestor de paquetes de Linux](#install-with-linux-package-managers) requieren actualizaciones manuales.

179 

180### Actualizaciones automáticas

181 

182Claude Code busca actualizaciones al iniciar y periódicamente mientras se ejecuta. Las actualizaciones se descargan e instalan en segundo plano y luego surten efecto la próxima vez que inicie Claude Code.

183 

184<Note>

185 Las instalaciones de Homebrew, WinGet, apt, dnf y apk no se actualizan automáticamente. Para Homebrew, ejecute `brew upgrade claude-code` o `brew upgrade claude-code@latest`, dependiendo de qué cask instaló. Para WinGet, ejecute `winget upgrade Anthropic.ClaudeCode`. Para gestores de paquetes de Linux, consulte los comandos de actualización en [Instalar con gestores de paquetes de Linux](#install-with-linux-package-managers).

186 

187 **Problema conocido:** Claude Code puede notificarle sobre actualizaciones antes de que la nueva versión esté disponible en estos gestores de paquetes. Si una actualización falla, espere e intente más tarde.

188 

189 Homebrew mantiene versiones antiguas en el disco después de las actualizaciones. Ejecute `brew cleanup` periódicamente para recuperar espacio en disco.

190</Note>

191 

192### Configurar canal de lanzamiento

193 

194Controle qué canal de lanzamiento sigue Claude Code para actualizaciones automáticas y `claude update` con la configuración `autoUpdatesChannel`:

195 

196* `"latest"`, el predeterminado: reciba nuevas características tan pronto como se lancen

197* `"stable"`: use una versión que típicamente tiene aproximadamente una semana de antigüedad, omitiendo lanzamientos con regresiones importantes

198 

199Configure esto a través de `/config` → **Canal de actualización automática**, o agréguelo a su [archivo settings.json](/es/settings):

200 

201```json theme={null}

202{

203 "autoUpdatesChannel": "stable"

204}

205```

206 

207Para implementaciones empresariales, puede aplicar un canal de lanzamiento consistente en toda su organización usando [configuración administrada](/es/permissions#managed-settings).

208 

209Las instalaciones de Homebrew eligen un canal por nombre de cask en lugar de esta configuración: `claude-code` rastrea estable y `claude-code@latest` rastrea latest.

210 

211### Fijar una versión mínima

212 

213La configuración `minimumVersion` establece un piso. Las actualizaciones automáticas en segundo plano y `claude update` se niegan a instalar cualquier versión por debajo de este valor, por lo que cambiar al canal `"stable"` no lo degrada si ya está en una compilación `"latest"` más nueva.

214 

215Cambiar de `"latest"` a `"stable"` a través de `/config` le solicita que permanezca en la versión actual o permita la degradación. Elegir permanecer establece `minimumVersion` en esa versión. Cambiar de nuevo a `"latest"` lo borra.

216 

217Agréguelo a su [archivo settings.json](/es/settings) para fijar un piso explícitamente:

218 

219```json theme={null}

220{

221 "autoUpdatesChannel": "stable",

222 "minimumVersion": "2.1.100"

223}

224```

225 

226En [configuración administrada](/es/permissions#managed-settings), esto aplica un mínimo en toda la organización que la configuración de usuario y proyecto no puede anular.

227 

228### Deshabilitar actualizaciones automáticas

229 

230Establezca `DISABLE_AUTOUPDATER` en `"1"` en la clave `env` de su archivo [`settings.json`](/es/settings#available-settings):

231 

232```json theme={null}

233{

234 "env": {

235 "DISABLE_AUTOUPDATER": "1"

236 }

237}

238```

239 

240`DISABLE_AUTOUPDATER` solo detiene la verificación en segundo plano; `claude update` e `claude install` aún funcionan. Para bloquear todas las rutas de actualización, incluidas las actualizaciones manuales, establezca [`DISABLE_UPDATES`](/es/env-vars) en su lugar. Úselo cuando distribuya Claude Code a través de sus propios canales y necesite que los usuarios permanezcan en la versión que proporciona.

241 

242### Actualizar manualmente

243 

244Para aplicar una actualización inmediatamente sin esperar la próxima verificación en segundo plano, ejecute:

245 

246```bash theme={null}

247claude update

248```

249 

250## Opciones de instalación avanzadas

251 

252Estas opciones son para fijación de versiones, gestores de paquetes de Linux, npm y verificación de integridad binaria.

253 

254### Instalar una versión específica

255 

256El instalador nativo acepta un número de versión específico o un canal de lanzamiento (`latest` o `stable`). El canal que elija en el momento de la instalación se convierte en su predeterminado para actualizaciones automáticas. Consulte [configurar canal de lanzamiento](#configure-release-channel) para más información.

257 

258Para instalar la versión más reciente (predeterminada):

259 

260<Tabs>

261 <Tab title="macOS, Linux, WSL">

262 ```bash theme={null}

263 curl -fsSL https://claude.ai/install.sh | bash

264 ```

265 </Tab>

266 

267 <Tab title="Windows PowerShell">

268 ```powershell theme={null}

269 irm https://claude.ai/install.ps1 | iex

270 ```

271 </Tab>

272 

273 <Tab title="Windows CMD">

274 ```batch theme={null}

275 curl -fsSL https://claude.ai/install.cmd -o install.cmd && install.cmd && del install.cmd

276 ```

277 </Tab>

278</Tabs>

279 

280Para instalar la versión estable:

281 

282<Tabs>

283 <Tab title="macOS, Linux, WSL">

284 ```bash theme={null}

285 curl -fsSL https://claude.ai/install.sh | bash -s stable

286 ```

287 </Tab>

288 

289 <Tab title="Windows PowerShell">

290 ```powershell theme={null}

291 & ([scriptblock]::Create((irm https://claude.ai/install.ps1))) stable

292 ```

293 </Tab>

294 

295 <Tab title="Windows CMD">

296 ```batch theme={null}

297 curl -fsSL https://claude.ai/install.cmd -o install.cmd && install.cmd stable && del install.cmd

298 ```

299 </Tab>

300</Tabs>

301 

302Para instalar un número de versión específico:

303 

304<Tabs>

305 <Tab title="macOS, Linux, WSL">

306 ```bash theme={null}

307 curl -fsSL https://claude.ai/install.sh | bash -s 2.1.89

308 ```

309 </Tab>

310 

311 <Tab title="Windows PowerShell">

312 ```powershell theme={null}

313 & ([scriptblock]::Create((irm https://claude.ai/install.ps1))) 2.1.89

314 ```

315 </Tab>

316 

317 <Tab title="Windows CMD">

318 ```batch theme={null}

319 curl -fsSL https://claude.ai/install.cmd -o install.cmd && install.cmd 2.1.89 && del install.cmd

320 ```

321 </Tab>

322</Tabs>

323 

324### Instalar con gestores de paquetes de Linux

325 

326Claude Code publica repositorios apt, dnf y apk firmados. Reemplace `stable` con `latest` para el canal de actualización continua. Las instalaciones del gestor de paquetes no se actualizan automáticamente a través de Claude Code; las actualizaciones llegan a través de su flujo de trabajo de actualización del sistema normal.

327 

328Todos los repositorios están firmados con la [clave de firma de lanzamiento de Claude Code](#binary-integrity-and-code-signing). Antes de confiar en la clave, verifíquela como se describe en cada pestaña.

329 

330<Tabs>

331 <Tab title="apt">

332 Para Debian y Ubuntu. Para usar el canal de actualización continua, cambie ambas ocurrencias de `stable` en la línea `deb`: la ruta de URL y el nombre de la suite.

333 

334 ```bash theme={null}

335 sudo install -d -m 0755 /etc/apt/keyrings

336 sudo curl -fsSL https://downloads.claude.ai/keys/claude-code.asc \

337 -o /etc/apt/keyrings/claude-code.asc

338 echo "deb [signed-by=/etc/apt/keyrings/claude-code.asc] https://downloads.claude.ai/claude-code/apt/stable stable main" \

339 | sudo tee /etc/apt/sources.list.d/claude-code.list

340 sudo apt update

341 sudo apt install claude-code

342 ```

343 

344 Verifique la huella digital de la clave GPG antes de confiar en ella: `gpg --show-keys /etc/apt/keyrings/claude-code.asc` debe reportar `31DD DE24 DDFA B679 F42D 7BD2 BAA9 29FF 1A7E CACE`.

345 

346 Para actualizar más tarde, ejecute `sudo apt update && sudo apt upgrade claude-code`.

347 </Tab>

348 

349 <Tab title="dnf">

350 Para Fedora y RHEL:

351 

352 ```bash theme={null}

353 sudo tee /etc/yum.repos.d/claude-code.repo <<'EOF'

354 [claude-code]

355 name=Claude Code

356 baseurl=https://downloads.claude.ai/claude-code/rpm/stable

357 enabled=1

358 gpgcheck=1

359 gpgkey=https://downloads.claude.ai/keys/claude-code.asc

360 EOF

361 sudo dnf install claude-code

362 ```

363 

364 dnf descarga la clave en la primera instalación y le solicita que confirme la huella digital. Verifique que coincida con `31DD DE24 DDFA B679 F42D 7BD2 BAA9 29FF 1A7E CACE` antes de aceptar.

365 

366 Para actualizar más tarde, ejecute `sudo dnf upgrade claude-code`.

367 </Tab>

368 

369 <Tab title="apk">

370 Para Alpine Linux:

371 

372 ```sh theme={null}

373 wget -O /etc/apk/keys/claude-code.rsa.pub \

374 https://downloads.claude.ai/keys/claude-code.rsa.pub

375 echo "https://downloads.claude.ai/claude-code/apk/stable" >> /etc/apk/repositories

376 apk add claude-code

377 ```

378 

379 Verifique la clave descargada con `sha256sum /etc/apk/keys/claude-code.rsa.pub`, que debe reportar `395759c1f7449ef4cdef305a42e820f3c766d6090d142634ebdb049f113168b6`.

380 

381 Para actualizar más tarde, ejecute `apk update && apk upgrade claude-code`.

382 </Tab>

383</Tabs>

384 

385### Instalar con npm

386 

387También puede instalar Claude Code como un paquete npm global. El paquete requiere [Node.js 18 o posterior](https://nodejs.org/en/download).

388 

389```bash theme={null}

390npm install -g @anthropic-ai/claude-code

391```

392 

393El paquete npm instala el mismo binario nativo que el instalador independiente. npm extrae el binario a través de una dependencia opcional por plataforma como `@anthropic-ai/claude-code-darwin-arm64`, y un paso postinstall lo vincula en su lugar. El binario `claude` instalado no invoca Node en sí mismo.

394 

395Las plataformas de instalación npm compatibles son `darwin-arm64`, `darwin-x64`, `linux-x64`, `linux-arm64`, `linux-x64-musl`, `linux-arm64-musl`, `win32-x64` y `win32-arm64`. Su gestor de paquetes debe permitir dependencias opcionales. Consulte [solución de problemas](/es/troubleshoot-install#native-binary-not-found-after-npm-install) si falta el binario después de la instalación.

396 

397<Warning>

398 NO use `sudo npm install -g` ya que esto puede causar problemas de permisos y riesgos de seguridad. Si encuentra errores de permisos, consulte [solución de problemas de errores de permisos](/es/troubleshoot-install#permission-errors-during-installation).

399</Warning>

400 

401### Integridad binaria y firma de código

402 

403Cada lanzamiento publica un `manifest.json` que contiene sumas de verificación SHA256 para cada binario de plataforma. El manifiesto está firmado con una clave GPG de Anthropic, por lo que verificar la firma en el manifiesto verifica transitivamente cada binario que enumera.

404 

405#### Verificar la firma del manifiesto

406 

407Los pasos 1-3 requieren un shell POSIX con `gpg` y `curl`. En Windows, ejecútelos en Git Bash o WSL. El paso 4 incluye una opción de PowerShell.

408 

409<Steps>

410 <Step title="Descargar e importar la clave pública">

411 La clave de firma de lanzamiento se publica en una URL fija.

412 

413 ```bash theme={null}

414 curl -fsSL https://downloads.claude.ai/keys/claude-code.asc | gpg --import

415 ```

416 

417 Muestre la huella digital de la clave importada.

418 

419 ```bash theme={null}

420 gpg --fingerprint security@anthropic.com

421 ```

422 

423 Confirme que la salida incluye esta huella digital:

424 

425 ```text theme={null}

426 31DD DE24 DDFA B679 F42D 7BD2 BAA9 29FF 1A7E CACE

427 ```

428 </Step>

429 

430 <Step title="Descargar el manifiesto y la firma">

431 Establezca `VERSION` en el lanzamiento que desea verificar.

432 

433 ```bash theme={null}

434 REPO=https://downloads.claude.ai/claude-code-releases

435 VERSION=2.1.89

436 curl -fsSLO "$REPO/$VERSION/manifest.json"

437 curl -fsSLO "$REPO/$VERSION/manifest.json.sig"

438 ```

439 </Step>

440 

441 <Step title="Verificar la firma">

442 Verifique la firma separada contra el manifiesto.

443 

444 ```bash theme={null}

445 gpg --verify manifest.json.sig manifest.json

446 ```

447 

448 Un resultado válido reporta `Good signature from "Anthropic Claude Code Release Signing <security@anthropic.com>"`.

449 

450 `gpg` también imprime `WARNING: This key is not certified with a trusted signature!` para cualquier clave recién importada. Esto es esperado. La línea `Good signature` confirma que la verificación criptográfica pasó. La comparación de huella digital en el Paso 1 confirma que la clave en sí es auténtica.

451 </Step>

452 

453 <Step title="Verificar el binario contra el manifiesto">

454 Compare la suma de verificación SHA256 de su binario descargado con el valor listado bajo `platforms.<platform>.checksum` en `manifest.json`.

455 

456 <Tabs>

457 <Tab title="Linux">

458 ```bash theme={null}

459 sha256sum claude

460 ```

461 </Tab>

462 

463 <Tab title="macOS">

464 ```bash theme={null}

465 shasum -a 256 claude

466 ```

467 </Tab>

468 

469 <Tab title="Windows PowerShell">

470 ```powershell theme={null}

471 (Get-FileHash claude.exe -Algorithm SHA256).Hash.ToLower()

472 ```

473 </Tab>

474 </Tabs>

475 </Step>

476</Steps>

477 

478<Note>

479 Las firmas de manifiesto están disponibles para lanzamientos desde `2.1.89` en adelante. Los lanzamientos anteriores publican sumas de verificación en `manifest.json` sin una firma separada.

480</Note>

481 

482#### Firmas de código de plataforma

483 

484Además del manifiesto firmado, los binarios individuales llevan firmas de código nativas de plataforma donde se admiten.

485 

486* **macOS**: firmado por "Anthropic PBC" y notarizado por Apple. Verifique con `codesign --verify --verbose ./claude`.

487* **Windows**: firmado por "Anthropic, PBC". Verifique con `Get-AuthenticodeSignature .\claude.exe`.

488* **Linux**: los binarios no están firmados individualmente con código. Si descarga directamente del bucket `claude-code-releases` o usa el instalador nativo, verifique la integridad con la firma de manifiesto anterior. Si instala con [apt, dnf o apk](#install-with-linux-package-managers), su gestor de paquetes verifica las firmas automáticamente usando la clave de firma del repositorio.

489 

490## Desinstalar Claude Code

491 

492Para eliminar Claude Code, siga las instrucciones para su método de instalación.

493 

494### Instalación nativa

495 

496Elimine el binario de Claude Code y los archivos de versión:

497 

498<Tabs>

499 <Tab title="macOS, Linux, WSL">

500 ```bash theme={null}

501 rm -f ~/.local/bin/claude

502 rm -rf ~/.local/share/claude

503 ```

504 </Tab>

505 

506 <Tab title="Windows PowerShell">

507 ```powershell theme={null}

508 Remove-Item -Path "$env:USERPROFILE\.local\bin\claude.exe" -Force

509 Remove-Item -Path "$env:USERPROFILE\.local\share\claude" -Recurse -Force

510 ```

511 </Tab>

512</Tabs>

513 

514### Instalación de Homebrew

515 

516Elimine el cask de Homebrew que instaló. Si instaló el cask estable:

517 

518```bash theme={null}

519brew uninstall --cask claude-code

520```

521 

522Si instaló el cask latest:

523 

524```bash theme={null}

525brew uninstall --cask claude-code@latest

526```

527 

528### Instalación de WinGet

529 

530Elimine el paquete de WinGet:

531 

532```powershell theme={null}

533winget uninstall Anthropic.ClaudeCode

534```

535 

536### apt / dnf / apk

537 

538Elimine el paquete y la configuración del repositorio:

539 

540<Tabs>

541 <Tab title="apt">

542 ```bash theme={null}

543 sudo apt remove claude-code

544 sudo rm /etc/apt/sources.list.d/claude-code.list /etc/apt/keyrings/claude-code.asc

545 ```

546 </Tab>

547 

548 <Tab title="dnf">

549 ```bash theme={null}

550 sudo dnf remove claude-code

551 sudo rm /etc/yum.repos.d/claude-code.repo

552 ```

553 </Tab>

554 

555 <Tab title="apk">

556 ```sh theme={null}

557 apk del claude-code

558 sed -i '\|downloads.claude.ai/claude-code/apk|d' /etc/apk/repositories

559 rm /etc/apk/keys/claude-code.rsa.pub

560 ```

561 </Tab>

562</Tabs>

563 

564### npm

565 

566Elimine el paquete npm global:

567 

568```bash theme={null}

569npm uninstall -g @anthropic-ai/claude-code

570```

571 

572### Eliminar archivos de configuración

573 

574<Warning>

575 Eliminar archivos de configuración eliminará toda su configuración, herramientas permitidas, configuraciones de servidor MCP e historial de sesiones.

576</Warning>

577 

578La extensión de VS Code, el plugin de JetBrains y la aplicación de escritorio también escriben en `~/.claude/`. Si alguno de ellos aún está instalado, el directorio se recrea la próxima vez que se ejecuta. Para eliminar Claude Code completamente, desinstale la [extensión de VS Code](/es/vs-code#uninstall-the-extension), el plugin de JetBrains y la aplicación de escritorio antes de eliminar estos archivos.

579 

580Para eliminar la configuración y datos en caché de Claude Code:

581 

582<Tabs>

583 <Tab title="macOS, Linux, WSL">

584 ```bash theme={null}

585 # Eliminar configuración de usuario y estado

586 rm -rf ~/.claude

587 rm ~/.claude.json

588 

589 # Eliminar configuración específica del proyecto (ejecutar desde su directorio de proyecto)

590 rm -rf .claude

591 rm -f .mcp.json

592 ```

593 </Tab>

594 

595 <Tab title="Windows PowerShell">

596 ```powershell theme={null}

597 # Eliminar configuración de usuario y estado

598 Remove-Item -Path "$env:USERPROFILE\.claude" -Recurse -Force

599 Remove-Item -Path "$env:USERPROFILE\.claude.json" -Force

600 

601 # Eliminar configuración específica del proyecto (ejecutar desde su directorio de proyecto)

602 Remove-Item -Path ".claude" -Recurse -Force

603 Remove-Item -Path ".mcp.json" -Force

604 ```

605 </Tab>

606</Tabs>

skills.md +728 −0 created

Details

1> ## Documentation Index

2> Fetch the complete documentation index at: https://code.claude.com/docs/llms.txt

3> Use this file to discover all available pages before exploring further.

4 

5# Ampliar Claude con skills

6 

7> Crear, gestionar y compartir skills para ampliar las capacidades de Claude en Claude Code. Incluye comandos personalizados y skills agrupados.

8 

9Los skills amplían lo que Claude puede hacer. Cree un archivo `SKILL.md` con instrucciones, y Claude lo añade a su kit de herramientas. Claude utiliza skills cuando es relevante, o puede invocar uno directamente con `/skill-name`.

10 

11Cree un skill cuando siga pegando el mismo manual, lista de verificación o procedimiento de varios pasos en el chat, o cuando una sección de CLAUDE.md se haya convertido en un procedimiento en lugar de un hecho. A diferencia del contenido de CLAUDE.md, el cuerpo de un skill se carga solo cuando se usa, por lo que el material de referencia largo cuesta casi nada hasta que lo necesita.

12 

13<Note>

14 Para comandos integrados como `/help` y `/compact`, y skills agrupados como `/debug` y `/simplify`, consulte la [referencia de comandos](/es/commands).

15 

16 **Los comandos personalizados se han fusionado con los skills.** Un archivo en `.claude/commands/deploy.md` y un skill en `.claude/skills/deploy/SKILL.md` crean ambos `/deploy` y funcionan de la misma manera. Sus archivos existentes en `.claude/commands/` siguen funcionando. Los skills añaden características opcionales: un directorio para archivos de apoyo, frontmatter para [controlar si usted o Claude los invoca](#control-who-invokes-a-skill), y la capacidad de que Claude los cargue automáticamente cuando sea relevante.

17</Note>

18 

19Los skills de Claude Code siguen el estándar abierto [Agent Skills](https://agentskills.io), que funciona en múltiples herramientas de IA. Claude Code extiende el estándar con características adicionales como [control de invocación](#control-who-invokes-a-skill), [ejecución de subagent](#run-skills-in-a-subagent), e [inyección de contexto dinámico](#inject-dynamic-context).

20 

21## Skills agrupados

22 

23Claude Code incluye un conjunto de skills agrupados que están disponibles en cada sesión, incluyendo `/simplify`, `/batch`, `/debug`, `/loop` y `/claude-api`. A diferencia de la mayoría de comandos integrados, que ejecutan lógica fija directamente, los skills agrupados se basan en prompts: dan a Claude un manual detallado y le permiten orquestar el trabajo utilizando sus herramientas. Los invoca de la misma manera que cualquier otro skill, escribiendo `/` seguido del nombre del skill.

24 

25Los skills agrupados se enumeran junto con los comandos integrados en la [referencia de comandos](/es/commands), marcados como **Skill** en la columna Propósito.

26 

27## Primeros pasos

28 

29### Crear su primer skill

30 

31Este ejemplo crea un skill que enseña a Claude a explicar código usando diagramas visuales y analogías. Como utiliza frontmatter predeterminado, Claude puede cargarlo automáticamente cuando pregunta cómo funciona algo, o puede invocarlo directamente con `/explain-code`.

32 

33<Steps>

34 <Step title="Crear el directorio del skill">

35 Cree un directorio para el skill en su carpeta de skills personales. Los skills personales están disponibles en todos sus proyectos.

36 

37 ```bash theme={null}

38 mkdir -p ~/.claude/skills/explain-code

39 ```

40 </Step>

41 

42 <Step title="Escribir SKILL.md">

43 Cada skill necesita un archivo `SKILL.md` con dos partes: frontmatter YAML (entre marcadores `---`) que le dice a Claude cuándo usar el skill, y contenido markdown con instrucciones que Claude sigue cuando se invoca el skill. El nombre del directorio se convierte en el `/slash-command`, y la `description` ayuda a Claude a decidir cuándo cargarlo automáticamente.

44 

45 Cree `~/.claude/skills/explain-code/SKILL.md`:

46 

47 ```yaml theme={null}

48 ---

49 description: Explains code with visual diagrams and analogies. Use when explaining how code works, teaching about a codebase, or when the user asks "how does this work?"

50 ---

51 

52 When explaining code, always include:

53 

54 1. **Start with an analogy**: Compare the code to something from everyday life

55 2. **Draw a diagram**: Use ASCII art to show the flow, structure, or relationships

56 3. **Walk through the code**: Explain step-by-step what happens

57 4. **Highlight a gotcha**: What's a common mistake or misconception?

58 

59 Keep explanations conversational. For complex concepts, use multiple analogies.

60 ```

61 </Step>

62 

63 <Step title="Probar el skill">

64 Puede probarlo de dos maneras:

65 

66 **Dejar que Claude lo invoque automáticamente** haciendo una pregunta que coincida con la descripción:

67 

68 ```text theme={null}

69 How does this code work?

70 ```

71 

72 **O invocarlo directamente** con el nombre del skill:

73 

74 ```text theme={null}

75 /explain-code src/auth/login.ts

76 ```

77 

78 De cualquier manera, Claude debe incluir una analogía y un diagrama ASCII en su explicación.

79 </Step>

80</Steps>

81 

82### Dónde viven los skills

83 

84Dónde almacena un skill determina quién puede usarlo:

85 

86| Ubicación | Ruta | Se aplica a |

87| :--------- | :--------------------------------------------------------------- | :------------------------------------ |

88| Enterprise | Consulte [configuración gestionada](/es/settings#settings-files) | Todos los usuarios de su organización |

89| Personal | `~/.claude/skills/<skill-name>/SKILL.md` | Todos sus proyectos |

90| Proyecto | `.claude/skills/<skill-name>/SKILL.md` | Solo este proyecto |

91| Plugin | `<plugin>/skills/<skill-name>/SKILL.md` | Donde el plugin está habilitado |

92 

93Cuando los skills comparten el mismo nombre en diferentes niveles, enterprise anula personal, y personal anula proyecto. Los skills de plugin utilizan un espacio de nombres `plugin-name:skill-name`, por lo que no pueden entrar en conflicto con otros niveles. Si tiene archivos en `.claude/commands/`, funcionan de la misma manera, pero si un skill y un comando comparten el mismo nombre, el skill tiene prioridad.

94 

95#### Detección de cambios en vivo

96 

97Claude Code observa los directorios de skills para detectar cambios de archivos. Añadir, editar o eliminar un skill bajo `~/.claude/skills/`, el proyecto `.claude/skills/`, o un `.claude/skills/` dentro de un directorio `--add-dir` surte efecto dentro de la sesión actual sin reiniciar. Crear un directorio de skills de nivel superior que no existía cuando se inició la sesión requiere reiniciar Claude Code para que el nuevo directorio pueda ser observado.

98 

99#### Descubrimiento automático desde directorios anidados

100 

101Cuando trabaja con archivos en subdirectorios, Claude Code descubre automáticamente skills de directorios `.claude/skills/` anidados. Por ejemplo, si está editando un archivo en `packages/frontend/`, Claude Code también busca skills en `packages/frontend/.claude/skills/`. Esto admite configuraciones de monorepo donde los paquetes tienen sus propios skills.

102 

103Cada skill es un directorio con `SKILL.md` como punto de entrada:

104 

105```text theme={null}

106my-skill/

107├── SKILL.md # Main instructions (required)

108├── template.md # Template for Claude to fill in

109├── examples/

110│ └── sample.md # Example output showing expected format

111└── scripts/

112 └── validate.sh # Script Claude can execute

113```

114 

115El `SKILL.md` contiene las instrucciones principales y es obligatorio. Otros archivos son opcionales y le permiten crear skills más potentes: plantillas para que Claude las complete, salidas de ejemplo que muestren el formato esperado, scripts que Claude pueda ejecutar o documentación de referencia detallada. Haga referencia a estos archivos desde su `SKILL.md` para que Claude sepa qué contienen y cuándo cargarlos. Consulte [Añadir archivos de apoyo](#add-supporting-files) para más detalles.

116 

117<Note>

118 Los archivos en `.claude/commands/` siguen funcionando y admiten el mismo [frontmatter](#frontmatter-reference). Los skills se recomiendan ya que admiten características adicionales como archivos de apoyo.

119</Note>

120 

121#### Skills de directorios adicionales

122 

123La bandera `--add-dir` [otorga acceso a archivos](/es/permissions#additional-directories-grant-file-access-not-configuration) en lugar de descubrimiento de configuración, pero los skills son una excepción: `.claude/skills/` dentro de un directorio añadido se carga automáticamente. Consulte [Detección de cambios en vivo](#live-change-detection) para ver cómo se detectan las ediciones durante una sesión.

124 

125Otra configuración de `.claude/` como subagents, comandos y estilos de salida no se carga desde directorios adicionales. Consulte la [tabla de excepciones](/es/permissions#additional-directories-grant-file-access-not-configuration) para la lista completa de qué se carga y qué no, y las formas recomendadas de compartir configuración entre proyectos.

126 

127<Note>

128 Los archivos CLAUDE.md de directorios `--add-dir` no se cargan de forma predeterminada. Para cargarlos, establezca `CLAUDE_CODE_ADDITIONAL_DIRECTORIES_CLAUDE_MD=1`. Consulte [Cargar desde directorios adicionales](/es/memory#load-from-additional-directories).

129</Note>

130 

131## Configurar skills

132 

133Los skills se configuran a través de frontmatter YAML en la parte superior de `SKILL.md` y el contenido markdown que sigue.

134 

135### Tipos de contenido de skill

136 

137Los archivos de skill pueden contener cualquier instrucción, pero pensar en cómo desea invocarlos ayuda a guiar qué incluir:

138 

139**Contenido de referencia** añade conocimiento que Claude aplica a su trabajo actual. Convenciones, patrones, guías de estilo, conocimiento del dominio. Este contenido se ejecuta en línea para que Claude pueda usarlo junto con el contexto de su conversación.

140 

141```yaml theme={null}

142---

143name: api-conventions

144description: API design patterns for this codebase

145---

146 

147When writing API endpoints:

148- Use RESTful naming conventions

149- Return consistent error formats

150- Include request validation

151```

152 

153**Contenido de tarea** da a Claude instrucciones paso a paso para una acción específica, como despliegues, commits o generación de código. Estas son a menudo acciones que desea invocar directamente con `/skill-name` en lugar de dejar que Claude decida cuándo ejecutarlas. Añada `disable-model-invocation: true` para evitar que Claude la active automáticamente.

154 

155```yaml theme={null}

156---

157name: deploy

158description: Deploy the application to production

159context: fork

160disable-model-invocation: true

161---

162 

163Deploy the application:

1641. Run the test suite

1652. Build the application

1663. Push to the deployment target

167```

168 

169Su `SKILL.md` puede contener cualquier cosa, pero pensar en cómo desea que se invoque el skill (por usted, por Claude, o ambos) y dónde desea que se ejecute (en línea o en un subagent) ayuda a guiar qué incluir. Para skills complejos, también puede [añadir archivos de apoyo](#add-supporting-files) para mantener el skill principal enfocado.

170 

171### Referencia de frontmatter

172 

173Más allá del contenido markdown, puede configurar el comportamiento del skill utilizando campos de frontmatter YAML entre marcadores `---` en la parte superior de su archivo `SKILL.md`:

174 

175```yaml theme={null}

176---

177name: my-skill

178description: What this skill does

179disable-model-invocation: true

180allowed-tools: Read Grep

181---

182 

183Your skill instructions here...

184```

185 

186Todos los campos son opcionales. Solo se recomienda `description` para que Claude sepa cuándo usar el skill.

187 

188| Campo | Requerido | Descripción |

189| :------------------------- | :---------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

190| `name` | No | Nombre para mostrar del skill. Si se omite, utiliza el nombre del directorio. Solo letras minúsculas, números y guiones (máximo 64 caracteres). |

191| `description` | Recomendado | Qué hace el skill y cuándo usarlo. Claude utiliza esto para decidir cuándo aplicar el skill. Si se omite, utiliza el primer párrafo del contenido markdown. Coloque la clave de uso al principio: el texto combinado de `description` y `when_to_use` se trunca en 1.536 caracteres en la lista de skills para reducir el uso de contexto. |

192| `when_to_use` | No | Contexto adicional para cuándo Claude debe invocar el skill, como frases desencadenantes o solicitudes de ejemplo. Se añade a `description` en la lista de skills y cuenta hacia el límite de 1.536 caracteres. |

193| `argument-hint` | No | Sugerencia mostrada durante el autocompletado para indicar argumentos esperados. Ejemplo: `[issue-number]` o `[filename] [format]`. |

194| `arguments` | No | Argumentos posicionales nombrados para [sustitución de `$name`](#available-string-substitutions) en el contenido del skill. Acepta una cadena separada por espacios o una lista YAML. Los nombres se asignan a posiciones de argumentos en orden. |

195| `disable-model-invocation` | No | Establezca en `true` para evitar que Claude cargue automáticamente este skill. Utilice para flujos de trabajo que desea activar manualmente con `/name`. También evita que el skill sea [precargado en subagents](/es/sub-agents#preload-skills-into-subagents). Predeterminado: `false`. |

196| `user-invocable` | No | Establezca en `false` para ocultar del menú `/`. Utilice para conocimiento de fondo que los usuarios no deberían invocar directamente. Predeterminado: `true`. |

197| `allowed-tools` | No | Herramientas que Claude puede usar sin pedir permiso cuando este skill está activo. Acepta una cadena separada por espacios o una lista YAML. |

198| `model` | No | Modelo a usar cuando este skill está activo. La anulación se aplica al resto del turno actual y no se guarda en la configuración; el modelo de sesión se reanuda en su siguiente prompt. Acepta los mismos valores que [`/model`](/es/model-config), o `inherit` para mantener el modelo activo. |

199| `effort` | No | [Nivel de esfuerzo](/es/model-config#adjust-effort-level) cuando este skill está activo. Anula el nivel de esfuerzo de la sesión. Predeterminado: hereda de la sesión. Opciones: `low`, `medium`, `high`, `xhigh`, `max`; los niveles disponibles dependen del modelo. |

200| `context` | No | Establezca en `fork` para ejecutar en un contexto de subagent bifurcado. |

201| `agent` | No | Qué tipo de subagent usar cuando `context: fork` está establecido. |

202| `hooks` | No | Hooks limitados al ciclo de vida de este skill. Consulte [Hooks en skills y agents](/es/hooks#hooks-in-skills-and-agents) para el formato de configuración. |

203| `paths` | No | Patrones glob que limitan cuándo se activa este skill. Acepta una cadena separada por comas o una lista YAML. Cuando se establece, Claude carga el skill automáticamente solo cuando trabaja con archivos que coinciden con los patrones. Utiliza el mismo formato que [reglas específicas de ruta](/es/memory#path-specific-rules). |

204| `shell` | No | Shell a usar para `` !`command` `` y bloques ` ```! ` en este skill. Acepta `bash` (predeterminado) o `powershell`. Establecer `powershell` ejecuta comandos de shell en línea a través de PowerShell en Windows. Requiere `CLAUDE_CODE_USE_POWERSHELL_TOOL=1`. |

205 

206#### Sustituciones de cadena disponibles

207 

208Los skills admiten sustitución de cadena para valores dinámicos en el contenido del skill:

209 

210| Variable | Descripción |

211| :--------------------- | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

212| `$ARGUMENTS` | Todos los argumentos pasados al invocar el skill. Si `$ARGUMENTS` no está presente en el contenido, los argumentos se añaden como `ARGUMENTS: <value>`. |

213| `$ARGUMENTS[N]` | Acceda a un argumento específico por índice basado en 0, como `$ARGUMENTS[0]` para el primer argumento. |

214| `$N` | Abreviatura para `$ARGUMENTS[N]`, como `$0` para el primer argumento o `$1` para el segundo. |

215| `$name` | Argumento nombrado declarado en la lista de frontmatter [`arguments`](#frontmatter-reference). Los nombres se asignan a posiciones en orden, por lo que con `arguments: [issue, branch]` el marcador de posición `$issue` se expande al primer argumento y `$branch` al segundo. |

216| `${CLAUDE_SESSION_ID}` | El ID de sesión actual. Útil para registro, creación de archivos específicos de sesión o correlación de salida de skill con sesiones. |

217| `${CLAUDE_EFFORT}` | El nivel de esfuerzo actual: `low`, `medium`, `high`, `xhigh` o `max`. Utilice esto para adaptar instrucciones de skill a la configuración de esfuerzo activa. |

218| `${CLAUDE_SKILL_DIR}` | El directorio que contiene el archivo `SKILL.md` del skill. Para skills de plugin, este es el subdirectorio del skill dentro del plugin, no la raíz del plugin. Utilice esto en comandos de inyección bash para hacer referencia a scripts o archivos incluidos con el skill, independientemente del directorio de trabajo actual. |

219 

220Los argumentos indexados utilizan entrecomillado de estilo shell, por lo que envuelva valores de varias palabras entre comillas para pasarlos como un único argumento. Por ejemplo, `/my-skill "hello world" second` hace que `$0` se expanda a `hello world` y `$1` a `second`. El marcador de posición `$ARGUMENTS` siempre se expande a la cadena de argumento completa tal como se escribió.

221 

222**Ejemplo usando sustituciones:**

223 

224```yaml theme={null}

225---

226name: session-logger

227description: Log activity for this session

228---

229 

230Log the following to logs/${CLAUDE_SESSION_ID}.log:

231 

232$ARGUMENTS

233```

234 

235### Añadir archivos de apoyo

236 

237Los skills pueden incluir múltiples archivos en su directorio. Esto mantiene `SKILL.md` enfocado en lo esencial mientras permite que Claude acceda a material de referencia detallado solo cuando sea necesario. Documentos de referencia grandes, especificaciones de API o colecciones de ejemplos no necesitan cargarse en contexto cada vez que se ejecuta el skill.

238 

239```text theme={null}

240my-skill/

241├── SKILL.md (required - overview and navigation)

242├── reference.md (detailed API docs - loaded when needed)

243├── examples.md (usage examples - loaded when needed)

244└── scripts/

245 └── helper.py (utility script - executed, not loaded)

246```

247 

248Haga referencia a archivos de apoyo desde `SKILL.md` para que Claude sepa qué contiene cada archivo y cuándo cargarlo:

249 

250```markdown theme={null}

251## Additional resources

252 

253- For complete API details, see [reference.md](reference.md)

254- For usage examples, see [examples.md](examples.md)

255```

256 

257<Tip>Mantenga `SKILL.md` por debajo de 500 líneas. Mueva material de referencia detallado a archivos separados.</Tip>

258 

259### Controlar quién invoca un skill

260 

261De forma predeterminada, tanto usted como Claude pueden invocar cualquier skill. Puede escribir `/skill-name` para invocarlo directamente, y Claude puede cargarlo automáticamente cuando sea relevante para su conversación. Dos campos de frontmatter le permiten restringir esto:

262 

263* **`disable-model-invocation: true`**: Solo usted puede invocar el skill. Utilice esto para flujos de trabajo con efectos secundarios o que desea controlar el tiempo, como `/commit`, `/deploy` o `/send-slack-message`. No desea que Claude decida desplegar porque su código se ve listo.

264 

265* **`user-invocable: false`**: Solo Claude puede invocar el skill. Utilice esto para conocimiento de fondo que no es accionable como comando. Un skill `legacy-system-context` explica cómo funciona un sistema antiguo. Claude debe saber esto cuando sea relevante, pero `/legacy-system-context` no es una acción significativa para que los usuarios realicen.

266 

267Este ejemplo crea un skill de despliegue que solo usted puede activar. El campo `disable-model-invocation: true` evita que Claude lo ejecute automáticamente:

268 

269```yaml theme={null}

270---

271name: deploy

272description: Deploy the application to production

273disable-model-invocation: true

274---

275 

276Deploy $ARGUMENTS to production:

277 

2781. Run the test suite

2792. Build the application

2803. Push to the deployment target

2814. Verify the deployment succeeded

282```

283 

284Aquí se muestra cómo los dos campos afectan la invocación y la carga de contexto:

285 

286| Frontmatter | Puede invocar | Claude puede invocar | Cuándo se carga en contexto |

287| :------------------------------- | :------------ | :------------------- | :------------------------------------------------------------------------------ |

288| (predeterminado) | Sí | Sí | La descripción siempre en contexto, el skill completo se carga cuando se invoca |

289| `disable-model-invocation: true` | Sí | No | La descripción no está en contexto, el skill completo se carga cuando lo invoca |

290| `user-invocable: false` | No | Sí | La descripción siempre en contexto, el skill completo se carga cuando se invoca |

291 

292<Note>

293 En una sesión regular, las descripciones de skills se cargan en contexto para que Claude sepa qué está disponible, pero el contenido completo del skill solo se carga cuando se invoca. Los [subagents con skills precargados](/es/sub-agents#preload-skills-into-subagents) funcionan de manera diferente: el contenido completo del skill se inyecta al inicio.

294</Note>

295 

296### Ciclo de vida del contenido del skill

297 

298Cuando usted o Claude invoca un skill, el contenido `SKILL.md` renderizado entra en la conversación como un único mensaje y permanece allí durante el resto de la sesión. Claude Code no vuelve a leer el archivo de skill en turnos posteriores, por lo que escriba la orientación que debe aplicarse durante una tarea como instrucciones permanentes en lugar de pasos únicos.

299 

300[Auto-compactación](/es/how-claude-code-works#when-context-fills-up) lleva skills invocados hacia adelante dentro de un presupuesto de tokens. Cuando la conversación se resume para liberar contexto, Claude Code vuelve a adjuntar la invocación más reciente de cada skill después del resumen, manteniendo los primeros 5.000 tokens de cada uno. Los skills reajustados comparten un presupuesto combinado de 25.000 tokens. Claude Code llena este presupuesto comenzando desde el skill invocado más recientemente, por lo que los skills más antiguos pueden eliminarse completamente después de la compactación si ha invocado muchos en una sesión.

301 

302Si un skill parece dejar de influir en el comportamiento después de la primera respuesta, el contenido generalmente sigue presente y el modelo está eligiendo otras herramientas o enfoques. Fortalezca la `description` del skill e instrucciones para que el modelo siga prefiriéndolo, o use [hooks](/es/hooks) para aplicar comportamiento de manera determinista. Si el skill es grande o invocó varios otros después de él, vuelva a invocarlo después de la compactación para restaurar el contenido completo.

303 

304### Pre-aprobar herramientas para un skill

305 

306El campo `allowed-tools` otorga permiso para las herramientas enumeradas mientras el skill está activo, por lo que Claude puede usarlas sin solicitarle aprobación. No restringe qué herramientas están disponibles: cada herramienta sigue siendo invocable, y su [configuración de permisos](/es/permissions) sigue rigiendo las herramientas que no están enumeradas.

307 

308Este skill permite que Claude ejecute comandos git sin aprobación por uso cada vez que lo invoca:

309 

310```yaml theme={null}

311---

312name: commit

313description: Stage and commit the current changes

314disable-model-invocation: true

315allowed-tools: Bash(git add *) Bash(git commit *) Bash(git status *)

316---

317```

318 

319Para bloquear un skill de usar ciertas herramientas, añada reglas de denegación en su [configuración de permisos](/es/permissions) en su lugar.

320 

321### Pasar argumentos a skills

322 

323Tanto usted como Claude pueden pasar argumentos al invocar un skill. Los argumentos están disponibles a través del marcador de posición `$ARGUMENTS`.

324 

325Este skill corrige un problema de GitHub por número. El marcador de posición `$ARGUMENTS` se reemplaza con lo que sigue al nombre del skill:

326 

327```yaml theme={null}

328---

329name: fix-issue

330description: Fix a GitHub issue

331disable-model-invocation: true

332---

333 

334Fix GitHub issue $ARGUMENTS following our coding standards.

335 

3361. Read the issue description

3372. Understand the requirements

3383. Implement the fix

3394. Write tests

3405. Create a commit

341```

342 

343Cuando ejecuta `/fix-issue 123`, Claude recibe "Fix GitHub issue 123 following our coding standards..."

344 

345Si invoca un skill con argumentos pero el skill no incluye `$ARGUMENTS`, Claude Code añade `ARGUMENTS: <your input>` al final del contenido del skill para que Claude siga viendo lo que escribió.

346 

347Para acceder a argumentos individuales por posición, utilice `$ARGUMENTS[N]` o la forma más corta `$N`:

348 

349```yaml theme={null}

350---

351name: migrate-component

352description: Migrate a component from one framework to another

353---

354 

355Migrate the $ARGUMENTS[0] component from $ARGUMENTS[1] to $ARGUMENTS[2].

356Preserve all existing behavior and tests.

357```

358 

359Ejecutar `/migrate-component SearchBar React Vue` reemplaza `$ARGUMENTS[0]` con `SearchBar`, `$ARGUMENTS[1]` con `React` y `$ARGUMENTS[2]` con `Vue`. El mismo skill usando la abreviatura `$N`:

360 

361```yaml theme={null}

362---

363name: migrate-component

364description: Migrate a component from one framework to another

365---

366 

367Migrate the $0 component from $1 to $2.

368Preserve all existing behavior and tests.

369```

370 

371## Patrones avanzados

372 

373### Inyectar contexto dinámico

374 

375La sintaxis `` !`<command>` `` ejecuta comandos de shell antes de que el contenido del skill se envíe a Claude. La salida del comando reemplaza el marcador de posición, por lo que Claude recibe datos reales, no el comando en sí.

376 

377Este skill resume una solicitud de extracción obteniendo datos de PR en vivo con la CLI de GitHub. Los comandos `` !`gh pr diff` `` y otros se ejecutan primero, y su salida se inserta en el prompt:

378 

379```yaml theme={null}

380---

381name: pr-summary

382description: Summarize changes in a pull request

383context: fork

384agent: Explore

385allowed-tools: Bash(gh *)

386---

387 

388## Pull request context

389- PR diff: !`gh pr diff`

390- PR comments: !`gh pr view --comments`

391- Changed files: !`gh pr diff --name-only`

392 

393## Your task

394Summarize this pull request...

395```

396 

397Cuando se ejecuta este skill:

398 

3991. Cada `` !`<command>` `` se ejecuta inmediatamente (antes de que Claude vea algo)

4002. La salida reemplaza el marcador de posición en el contenido del skill

4013. Claude recibe el prompt completamente renderizado con datos de PR reales

402 

403Esto es preprocesamiento, no algo que Claude ejecute. Claude solo ve el resultado final.

404 

405Para comandos de varias líneas, utilice un bloque de código cercado abierto con ` ```! ` en lugar de la forma en línea:

406 

407````markdown theme={null}

408## Environment

409```!

410node --version

411npm --version

412git status --short

413```

414````

415 

416Para deshabilitar este comportamiento para skills y comandos personalizados de fuentes de usuario, proyecto, plugin o [directorio adicional](#skills-from-additional-directories), establezca `"disableSkillShellExecution": true` en [configuración](/es/settings). Cada comando se reemplaza con `[shell command execution disabled by policy]` en lugar de ejecutarse. Los skills agrupados y gestionados no se ven afectados. Esta configuración es más útil en [configuración gestionada](/es/permissions#managed-settings), donde los usuarios no pueden anularla.

417 

418<Tip>

419 Para habilitar [pensamiento extendido](/es/common-workflows#use-extended-thinking-thinking-mode) en un skill, incluya la palabra "ultrathink" en cualquier lugar en el contenido de su skill.

420</Tip>

421 

422### Ejecutar skills en un subagent

423 

424Añada `context: fork` a su frontmatter cuando desee que un skill se ejecute en aislamiento. El contenido del skill se convierte en el prompt que impulsa el subagent. No tendrá acceso a su historial de conversación.

425 

426<Warning>

427 `context: fork` solo tiene sentido para skills con instrucciones explícitas. Si su skill contiene directrices como "use estas convenciones de API" sin una tarea, el subagent recibe las directrices pero sin un prompt accionable, y regresa sin salida significativa.

428</Warning>

429 

430Los skills y los [subagents](/es/sub-agents) funcionan juntos en dos direcciones:

431 

432| Enfoque | Prompt del sistema | Tarea | También carga |

433| :-------------------------- | :------------------------------------------ | :------------------------------ | :----------------------------- |

434| Skill con `context: fork` | Del tipo de agent (`Explore`, `Plan`, etc.) | Contenido de SKILL.md | CLAUDE.md |

435| Subagent con campo `skills` | Cuerpo markdown del subagent | Mensaje de delegación de Claude | Skills precargados + CLAUDE.md |

436 

437Con `context: fork`, escribe la tarea en tu skill y elige un tipo de agent para ejecutarla. Para lo inverso (definir un subagent personalizado que use skills como material de referencia), consulte [Subagents](/es/sub-agents#preload-skills-into-subagents).

438 

439#### Ejemplo: Skill de investigación usando agent Explore

440 

441Este skill ejecuta investigación en un agent Explore bifurcado. El contenido del skill se convierte en la tarea, y el agent proporciona herramientas de solo lectura optimizadas para exploración de base de código:

442 

443```yaml theme={null}

444---

445name: deep-research

446description: Research a topic thoroughly

447context: fork

448agent: Explore

449---

450 

451Research $ARGUMENTS thoroughly:

452 

4531. Find relevant files using Glob and Grep

4542. Read and analyze the code

4553. Summarize findings with specific file references

456```

457 

458Cuando se ejecuta este skill:

459 

4601. Se crea un nuevo contexto aislado

4612. El subagent recibe el contenido del skill como su prompt ("Research \$ARGUMENTS thoroughly...")

4623. El campo `agent` determina el entorno de ejecución (modelo, herramientas y permisos)

4634. Los resultados se resumen y se devuelven a su conversación principal

464 

465El campo `agent` especifica qué configuración de subagent usar. Las opciones incluyen agents integrados (`Explore`, `Plan`, `general-purpose`) o cualquier subagent personalizado de `.claude/agents/`. Si se omite, utiliza `general-purpose`.

466 

467### Restringir el acceso de Claude a skills

468 

469De forma predeterminada, Claude puede invocar cualquier skill que no tenga `disable-model-invocation: true` establecido. Los skills que definen `allowed-tools` otorgan a Claude acceso a esas herramientas sin aprobación por uso cuando el skill está activo. Su [configuración de permisos](/es/permissions) sigue rigiendo el comportamiento de aprobación de línea base para todas las demás herramientas. Algunos comandos integrados también están disponibles a través de la herramienta Skill, incluyendo `/init`, `/review` y `/security-review`. Otros comandos integrados como `/compact` no lo están.

470 

471Tres formas de controlar qué skills puede invocar Claude:

472 

473**Deshabilitar todos los skills** negando la herramienta Skill en `/permissions`:

474 

475```text theme={null}

476# Add to deny rules:

477Skill

478```

479 

480**Permitir o denegar skills específicos** usando [reglas de permisos](/es/permissions):

481 

482```text theme={null}

483# Allow only specific skills

484Skill(commit)

485Skill(review-pr *)

486 

487# Deny specific skills

488Skill(deploy *)

489```

490 

491Sintaxis de permisos: `Skill(name)` para coincidencia exacta, `Skill(name *)` para coincidencia de prefijo con cualquier argumento.

492 

493**Ocultar skills individuales** añadiendo `disable-model-invocation: true` a su frontmatter. Esto elimina el skill del contexto de Claude por completo.

494 

495<Note>

496 El campo `user-invocable` solo controla la visibilidad del menú, no el acceso a la herramienta Skill. Utilice `disable-model-invocation: true` para bloquear la invocación programática.

497</Note>

498 

499## Compartir skills

500 

501Los skills se pueden distribuir en diferentes ámbitos dependiendo de su audiencia:

502 

503* **Skills de proyecto**: Confirme `.claude/skills/` en el control de versiones

504* **Plugins**: Cree un directorio `skills/` en su [plugin](/es/plugins)

505* **Gestionado**: Implemente en toda la organización a través de [configuración gestionada](/es/settings#settings-files)

506 

507### Generar salida visual

508 

509Los skills pueden agrupar y ejecutar scripts en cualquier idioma, dando a Claude capacidades más allá de lo que es posible en un único prompt. Un patrón poderoso es generar salida visual: archivos HTML interactivos que se abren en su navegador para explorar datos, depurar o crear informes.

510 

511Este ejemplo crea un explorador de base de código: una vista de árbol interactiva donde puede expandir y contraer directorios, ver tamaños de archivo de un vistazo e identificar tipos de archivo por color.

512 

513Cree el directorio Skill:

514 

515```bash theme={null}

516mkdir -p ~/.claude/skills/codebase-visualizer/scripts

517```

518 

519Cree `~/.claude/skills/codebase-visualizer/SKILL.md`. La descripción le dice a Claude cuándo activar este Skill, y las instrucciones le dicen a Claude que ejecute el script incluido:

520 

521````yaml theme={null}

522---

523name: codebase-visualizer

524description: Generate an interactive collapsible tree visualization of your codebase. Use when exploring a new repo, understanding project structure, or identifying large files.

525allowed-tools: Bash(python *)

526---

527 

528# Codebase Visualizer

529 

530Generate an interactive HTML tree view that shows your project's file structure with collapsible directories.

531 

532## Usage

533 

534Run the visualization script from your project root:

535 

536```bash

537python ~/.claude/skills/codebase-visualizer/scripts/visualize.py .

538```

539 

540This creates `codebase-map.html` in the current directory and opens it in your default browser.

541 

542## What the visualization shows

543 

544- **Collapsible directories**: Click folders to expand/collapse

545- **File sizes**: Displayed next to each file

546- **Colors**: Different colors for different file types

547- **Directory totals**: Shows aggregate size of each folder

548````

549 

550Cree `~/.claude/skills/codebase-visualizer/scripts/visualize.py`. Este script escanea un árbol de directorios y genera un archivo HTML independiente con:

551 

552* Una **barra lateral de resumen** que muestra el recuento de archivos, recuento de directorios, tamaño total y número de tipos de archivo

553* Un **gráfico de barras** que desglosa la base de código por tipo de archivo (los 8 principales por tamaño)

554* Un **árbol contraíble** donde puede expandir y contraer directorios, con indicadores de tipo de archivo codificados por color

555 

556El script requiere Python pero utiliza solo bibliotecas integradas, por lo que no hay paquetes para instalar:

557 

558```python expandable theme={null}

559#!/usr/bin/env python3

560"""Generate an interactive collapsible tree visualization of a codebase."""

561 

562import json

563import sys

564import webbrowser

565from pathlib import Path

566from collections import Counter

567 

568IGNORE = {'.git', 'node_modules', '__pycache__', '.venv', 'venv', 'dist', 'build'}

569 

570def scan(path: Path, stats: dict) -> dict:

571 result = {"name": path.name, "children": [], "size": 0}

572 try:

573 for item in sorted(path.iterdir()):

574 if item.name in IGNORE or item.name.startswith('.'):

575 continue

576 if item.is_file():

577 size = item.stat().st_size

578 ext = item.suffix.lower() or '(no ext)'

579 result["children"].append({"name": item.name, "size": size, "ext": ext})

580 result["size"] += size

581 stats["files"] += 1

582 stats["extensions"][ext] += 1

583 stats["ext_sizes"][ext] += size

584 elif item.is_dir():

585 stats["dirs"] += 1

586 child = scan(item, stats)

587 if child["children"]:

588 result["children"].append(child)

589 result["size"] += child["size"]

590 except PermissionError:

591 pass

592 return result

593 

594def generate_html(data: dict, stats: dict, output: Path) -> None:

595 ext_sizes = stats["ext_sizes"]

596 total_size = sum(ext_sizes.values()) or 1

597 sorted_exts = sorted(ext_sizes.items(), key=lambda x: -x[1])[:8]

598 colors = {

599 '.js': '#f7df1e', '.ts': '#3178c6', '.py': '#3776ab', '.go': '#00add8',

600 '.rs': '#dea584', '.rb': '#cc342d', '.css': '#264de4', '.html': '#e34c26',

601 '.json': '#6b7280', '.md': '#083fa1', '.yaml': '#cb171e', '.yml': '#cb171e',

602 '.mdx': '#083fa1', '.tsx': '#3178c6', '.jsx': '#61dafb', '.sh': '#4eaa25',

603 }

604 lang_bars = "".join(

605 f'<div class="bar-row"><span class="bar-label">{ext}</span>'

606 f'<div class="bar" style="width:{(size/total_size)*100}%;background:{colors.get(ext,"#6b7280")}"></div>'

607 f'<span class="bar-pct">{(size/total_size)*100:.1f}%</span></div>'

608 for ext, size in sorted_exts

609 )

610 def fmt(b):

611 if b < 1024: return f"{b} B"

612 if b < 1048576: return f"{b/1024:.1f} KB"

613 return f"{b/1048576:.1f} MB"

614 

615 html = f'''<!DOCTYPE html>

616<html><head>

617 <meta charset="utf-8"><title>Codebase Explorer</title>

618 <style>

619 body {{ font: 14px/1.5 system-ui, sans-serif; margin: 0; background: #1a1a2e; color: #eee; }}

620 .container {{ display: flex; height: 100vh; }}

621 .sidebar {{ width: 280px; background: #252542; padding: 20px; border-right: 1px solid #3d3d5c; overflow-y: auto; flex-shrink: 0; }}

622 .main {{ flex: 1; padding: 20px; overflow-y: auto; }}

623 h1 {{ margin: 0 0 10px 0; font-size: 18px; }}

624 h2 {{ margin: 20px 0 10px 0; font-size: 14px; color: #888; text-transform: uppercase; }}

625 .stat {{ display: flex; justify-content: space-between; padding: 8px 0; border-bottom: 1px solid #3d3d5c; }}

626 .stat-value {{ font-weight: bold; }}

627 .bar-row {{ display: flex; align-items: center; margin: 6px 0; }}

628 .bar-label {{ width: 55px; font-size: 12px; color: #aaa; }}

629 .bar {{ height: 18px; border-radius: 3px; }}

630 .bar-pct {{ margin-left: 8px; font-size: 12px; color: #666; }}

631 .tree {{ list-style: none; padding-left: 20px; }}

632 details {{ cursor: pointer; }}

633 summary {{ padding: 4px 8px; border-radius: 4px; }}

634 summary:hover {{ background: #2d2d44; }}

635 .folder {{ color: #ffd700; }}

636 .file {{ display: flex; align-items: center; padding: 4px 8px; border-radius: 4px; }}

637 .file:hover {{ background: #2d2d44; }}

638 .size {{ color: #888; margin-left: auto; font-size: 12px; }}

639 .dot {{ width: 8px; height: 8px; border-radius: 50%; margin-right: 8px; }}

640 </style>

641</head><body>

642 <div class="container">

643 <div class="sidebar">

644 <h1>📊 Summary</h1>

645 <div class="stat"><span>Files</span><span class="stat-value">{stats["files"]:,}</span></div>

646 <div class="stat"><span>Directories</span><span class="stat-value">{stats["dirs"]:,}</span></div>

647 <div class="stat"><span>Total size</span><span class="stat-value">{fmt(data["size"])}</span></div>

648 <div class="stat"><span>File types</span><span class="stat-value">{len(stats["extensions"])}</span></div>

649 <h2>By file type</h2>

650 {lang_bars}

651 </div>

652 <div class="main">

653 <h1>📁 {data["name"]}</h1>

654 <ul class="tree" id="root"></ul>

655 </div>

656 </div>

657 <script>

658 const data = {json.dumps(data)};

659 const colors = {json.dumps(colors)};

660 function fmt(b) {{ if (b < 1024) return b + ' B'; if (b < 1048576) return (b/1024).toFixed(1) + ' KB'; return (b/1048576).toFixed(1) + ' MB'; }}

661 function render(node, parent) {{

662 if (node.children) {{

663 const det = document.createElement('details');

664 det.open = parent === document.getElementById('root');

665 det.innerHTML = `<summary><span class="folder">📁 ${{node.name}}</span><span class="size">${{fmt(node.size)}}</span></summary>`;

666 const ul = document.createElement('ul'); ul.className = 'tree';

667 node.children.sort((a,b) => (b.children?1:0)-(a.children?1:0) || a.name.localeCompare(b.name));

668 node.children.forEach(c => render(c, ul));

669 det.appendChild(ul);

670 const li = document.createElement('li'); li.appendChild(det); parent.appendChild(li);

671 }} else {{

672 const li = document.createElement('li'); li.className = 'file';

673 li.innerHTML = `<span class="dot" style="background:${{colors[node.ext]||'#6b7280'}}"></span>${{node.name}}<span class="size">${{fmt(node.size)}}</span>`;

674 parent.appendChild(li);

675 }}

676 }}

677 data.children.forEach(c => render(c, document.getElementById('root')));

678 </script>

679</body></html>'''

680 output.write_text(html)

681 

682if __name__ == '__main__':

683 target = Path(sys.argv[1] if len(sys.argv) > 1 else '.').resolve()

684 stats = {"files": 0, "dirs": 0, "extensions": Counter(), "ext_sizes": Counter()}

685 data = scan(target, stats)

686 out = Path('codebase-map.html')

687 generate_html(data, stats, out)

688 print(f'Generated {out.absolute()}')

689 webbrowser.open(f'file://{out.absolute()}')

690```

691 

692Para probar, abra Claude Code en cualquier proyecto y pregunte "Visualize this codebase." Claude ejecuta el script, genera `codebase-map.html` y lo abre en su navegador.

693 

694Este patrón funciona para cualquier salida visual: gráficos de dependencias, informes de cobertura de pruebas, documentación de API o visualizaciones de esquema de base de datos. El script incluido hace el trabajo pesado mientras Claude maneja la orquestación.

695 

696## Solución de problemas

697 

698### Skill no se activa

699 

700Si Claude no usa su skill cuando se espera:

701 

7021. Verifique que la descripción incluya palabras clave que los usuarios dirían naturalmente

7032. Verifique que el skill aparezca en `What skills are available?`

7043. Intente reformular su solicitud para que coincida más estrechamente con la descripción

7054. Invóquelo directamente con `/skill-name` si el skill es invocable por el usuario

706 

707### Skill se activa demasiado a menudo

708 

709Si Claude usa su skill cuando no desea:

710 

7111. Haga la descripción más específica

7122. Añada `disable-model-invocation: true` si solo desea invocación manual

713 

714### Las descripciones de skills se cortan

715 

716Las descripciones de skills se cargan en contexto para que Claude sepa qué está disponible. Todos los nombres de skills siempre se incluyen, pero si tiene muchos skills, las descripciones se acortan para ajustarse al presupuesto de caracteres, lo que puede eliminar las palabras clave que Claude necesita para coincidir con su solicitud. El presupuesto se escala dinámicamente al 1% de la ventana de contexto, con un respaldo de 8.000 caracteres.

717 

718Para aumentar el límite, establezca la variable de entorno `SLASH_COMMAND_TOOL_CHAR_BUDGET`. O recorte el texto de `description` y `when_to_use` en la fuente: coloque la clave de uso al principio, ya que el texto combinado de cada entrada está limitado a 1.536 caracteres independientemente del presupuesto.

719 

720## Recursos relacionados

721 

722* **[Depura tu configuración](/es/debug-your-config)**: diagnostica por qué una skill no aparece o no se activa

723* **[Subagents](/es/sub-agents)**: delega tareas a agents especializados

724* **[Plugins](/es/plugins)**: empaqueta y distribuye skills con otras extensiones

725* **[Hooks](/es/hooks)**: automatiza flujos de trabajo alrededor de eventos de herramientas

726* **[Memory](/es/memory)**: gestiona archivos CLAUDE.md para contexto persistente

727* **[Comandos](/es/commands)**: referencia para comandos integrados y skills agrupados

728* **[Permisos](/es/permissions)**: controla el acceso a herramientas y skills

slack.md +210 −0 created

Details

1> ## Documentation Index

2> Fetch the complete documentation index at: https://code.claude.com/docs/llms.txt

3> Use this file to discover all available pages before exploring further.

4 

5# Claude Code en Slack

6 

7> Delega tareas de codificación directamente desde tu espacio de trabajo de Slack

8 

9Claude Code en Slack trae el poder de Claude Code directamente a tu espacio de trabajo de Slack. Cuando mencionas `@Claude` con una tarea de codificación, Claude detecta automáticamente la intención y crea una sesión de Claude Code en la web, permitiéndote delegar trabajo de desarrollo sin salir de tus conversaciones de equipo.

10 

11Esta integración se basa en la aplicación Claude para Slack existente pero agrega enrutamiento inteligente a Claude Code en la web para solicitudes relacionadas con codificación.

12 

13## Casos de uso

14 

15* **Investigación y corrección de errores**: Pídele a Claude que investigue y corrija errores tan pronto como se reporten en los canales de Slack.

16* **Revisiones de código rápidas y modificaciones**: Haz que Claude implemente pequeñas características o refactorice código basado en comentarios del equipo.

17* **Depuración colaborativa**: Cuando las discusiones del equipo proporcionan contexto crucial (por ejemplo, reproducciones de errores o reportes de usuarios), Claude puede usar esa información para informar su enfoque de depuración.

18* **Ejecución de tareas en paralelo**: Inicia tareas de codificación en Slack mientras continúas con otro trabajo, recibiendo notificaciones cuando se completen.

19 

20## Requisitos previos

21 

22Antes de usar Claude Code en Slack, asegúrate de tener lo siguiente:

23 

24| Requisito | Detalles |

25| :--------------------- | :------------------------------------------------------------------------------------ |

26| Plan de Claude | Pro, Max, Team o Enterprise con acceso a Claude Code (asientos premium) |

27| Claude Code en la web | El acceso a [Claude Code en la web](/es/claude-code-on-the-web) debe estar habilitado |

28| Cuenta de GitHub | Conectada a Claude Code en la web con al menos un repositorio autenticado |

29| Autenticación de Slack | Tu cuenta de Slack vinculada a tu cuenta de Claude a través de la aplicación Claude |

30 

31## Configuración de Claude Code en Slack

32 

33<Steps>

34 <Step title="Instala la aplicación Claude en Slack">

35 Un administrador del espacio de trabajo debe instalar la aplicación Claude desde el Slack App Marketplace. Visita el [Slack App Marketplace](https://slack.com/marketplace/A08SF47R6P4) y haz clic en "Add to Slack" para comenzar el proceso de instalación.

36 </Step>

37 

38 <Step title="Conecta tu cuenta de Claude">

39 Después de que la aplicación esté instalada, autentica tu cuenta individual de Claude:

40 

41 1. Abre la aplicación Claude en Slack haciendo clic en "Claude" en tu sección de Aplicaciones

42 2. Navega a la pestaña App Home

43 3. Haz clic en "Connect" para vincular tu cuenta de Slack con tu cuenta de Claude

44 4. Completa el flujo de autenticación en tu navegador

45 </Step>

46 

47 <Step title="Configura Claude Code en la web">

48 Asegúrate de que tu Claude Code en la web esté correctamente configurado:

49 

50 * Visita [claude.ai/code](https://claude.ai/code) e inicia sesión con la misma cuenta que conectaste a Slack

51 * Conecta tu cuenta de GitHub si aún no está conectada

52 * Autentica al menos un repositorio con el que quieras que Claude trabaje

53 </Step>

54 

55 <Step title="Elige tu modo de enrutamiento">

56 Después de conectar tus cuentas, configura cómo Claude maneja tus mensajes en Slack. Navega a la App Home de Claude en Slack para encontrar la configuración de **Routing Mode**.

57 

58 | Modo | Comportamiento |

59 | :-------------- | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

60 | **Code only** | Claude enruta todas las @menciones a sesiones de Claude Code. Mejor para equipos que usan Claude en Slack exclusivamente para tareas de desarrollo. |

61 | **Code + Chat** | Claude analiza cada mensaje y enruta inteligentemente entre Claude Code (para tareas de codificación) y Claude Chat (para escritura, análisis y preguntas generales). Mejor para equipos que quieren un único punto de entrada @Claude para todos los tipos de trabajo. |

62 

63 <Note>

64 En modo Code + Chat, si Claude enruta un mensaje a Chat pero querías una sesión de codificación, puedes hacer clic en "Retry as Code" para crear una sesión de Claude Code en su lugar. De manera similar, si se enruta a Code pero querías una sesión de Chat, puedes elegir esa opción en ese hilo.

65 </Note>

66 </Step>

67</Steps>

68 

69## Cómo funciona

70 

71### Detección automática

72 

73Cuando mencionas @Claude en un canal o hilo de Slack, Claude analiza automáticamente tu mensaje para determinar si es una tarea de codificación. Si Claude detecta intención de codificación, enrutará tu solicitud a Claude Code en la web en lugar de responder como un asistente de chat regular.

74 

75También puedes decirle explícitamente a Claude que maneje una solicitud como una tarea de codificación, incluso si no la detecta automáticamente.

76 

77<Note>

78 Claude Code en Slack solo funciona en canales (públicos o privados). No funciona en mensajes directos (DMs).

79</Note>

80 

81### Recopilación de contexto

82 

83**De hilos**: Cuando @mencionas a Claude en un hilo, recopila contexto de todos los mensajes en ese hilo para entender la conversación completa.

84 

85**De canales**: Cuando se menciona directamente en un canal, Claude observa los mensajes recientes del canal para obtener contexto relevante.

86 

87Este contexto ayuda a Claude a entender el problema, seleccionar el repositorio apropiado e informar su enfoque para la tarea.

88 

89<Warning>

90 Cuando @Claude se invoca en Slack, Claude tiene acceso al contexto de la conversación para entender mejor tu solicitud. Claude puede seguir direcciones de otros mensajes en el contexto, por lo que los usuarios deben asegurarse de usar Claude solo en conversaciones de Slack de confianza.

91</Warning>

92 

93### Flujo de sesión

94 

951. **Iniciación**: @mencionas a Claude con una solicitud de codificación

962. **Detección**: Claude analiza tu mensaje y detecta intención de codificación

973. **Creación de sesión**: Se crea una nueva sesión de Claude Code en claude.ai/code

984. **Actualizaciones de progreso**: Claude publica actualizaciones de estado en tu hilo de Slack a medida que avanza el trabajo

995. **Finalización**: Cuando termina, Claude te @menciona con un resumen y botones de acción

1006. **Revisión**: Haz clic en "View Session" para ver la transcripción completa, o "Create PR" para abrir una solicitud de extracción

101 

102## Elementos de la interfaz de usuario

103 

104### App Home

105 

106La pestaña App Home muestra tu estado de conexión y te permite conectar o desconectar tu cuenta de Claude de Slack.

107 

108### Acciones de mensaje

109 

110* **View Session**: Abre la sesión completa de Claude Code en tu navegador donde puedes ver todo el trabajo realizado, continuar la sesión o hacer solicitudes adicionales.

111* **Create PR**: Crea una solicitud de extracción directamente desde los cambios de la sesión.

112* **Retry as Code**: Si Claude inicialmente responde como un asistente de chat pero querías una sesión de codificación, haz clic en este botón para reintentar la solicitud como una tarea de Claude Code.

113* **Change Repo**: Te permite seleccionar un repositorio diferente si Claude eligió incorrectamente.

114 

115### Selección de repositorio

116 

117Claude selecciona automáticamente un repositorio basado en el contexto de tu conversación de Slack. Si múltiples repositorios podrían aplicarse, Claude puede mostrar un menú desplegable permitiéndote elegir el correcto.

118 

119## Acceso y permisos

120 

121### Acceso a nivel de usuario

122 

123| Tipo de acceso | Requisito |

124| :------------------------- | :------------------------------------------------------------------------------ |

125| Sesiones de Claude Code | Cada usuario ejecuta sesiones bajo su propia cuenta de Claude |

126| Uso y límites de velocidad | Las sesiones cuentan contra los límites del plan del usuario individual |

127| Acceso al repositorio | Los usuarios solo pueden acceder a repositorios que han conectado personalmente |

128| Historial de sesiones | Las sesiones aparecen en tu historial de Claude Code en claude.ai/code |

129 

130### Permisos de administrador del espacio de trabajo

131 

132Los administradores del espacio de trabajo de Slack controlan si la aplicación Claude puede instalarse en el espacio de trabajo. Los usuarios individuales luego se autentican con sus propias cuentas de Claude para usar la integración.

133 

134## Qué es accesible dónde

135 

136**En Slack**: Verás actualizaciones de estado, resúmenes de finalización y botones de acción. La transcripción completa se conserva y siempre es accesible.

137 

138**En la web**: La sesión completa de Claude Code con historial de conversación completo, todos los cambios de código, operaciones de archivo y la capacidad de continuar la sesión o crear solicitudes de extracción.

139 

140## Mejores prácticas

141 

142### Escribir solicitudes efectivas

143 

144* **Sé específico**: Incluye nombres de archivos, nombres de funciones o mensajes de error cuando sea relevante.

145* **Proporciona contexto**: Menciona el repositorio o proyecto si no está claro en la conversación.

146* **Define el éxito**: Explica qué significa "hecho"—¿debería Claude escribir pruebas? ¿Actualizar documentación? ¿Crear un PR?

147* **Usa hilos**: Responde en hilos cuando discutas errores o características para que Claude pueda recopilar el contexto completo.

148 

149### Cuándo usar Slack vs. web

150 

151**Usa Slack cuando**: El contexto ya existe en una discusión de Slack, quieres iniciar una tarea de forma asincrónica, o estás colaborando con compañeros de equipo que necesitan visibilidad.

152 

153**Usa la web directamente cuando**: Necesitas cargar archivos, quieres interacción en tiempo real durante el desarrollo, o estás trabajando en tareas más largas y complejas.

154 

155## Solución de problemas

156 

157### Las sesiones no se inician

158 

1591. Verifica que tu cuenta de Claude esté conectada en la App Home de Claude

1602. Comprueba que tengas acceso a Claude Code en la web habilitado

1613. Asegúrate de tener al menos un repositorio de GitHub conectado a Claude Code

162 

163### El repositorio no se muestra

164 

1651. Conecta el repositorio en Claude Code en la web en [claude.ai/code](https://claude.ai/code)

1662. Verifica tus permisos de GitHub para ese repositorio

1673. Intenta desconectar y reconectar tu cuenta de GitHub

168 

169### Se seleccionó el repositorio incorrecto

170 

1711. Haz clic en el botón "Change Repo" para seleccionar un repositorio diferente

1722. Incluye el nombre del repositorio en tu solicitud para una selección más precisa

173 

174### Errores de autenticación

175 

1761. Desconecta y reconecta tu cuenta de Claude en la App Home

1772. Asegúrate de estar conectado a la cuenta de Claude correcta en tu navegador

1783. Comprueba que tu plan de Claude incluya acceso a Claude Code

179 

180### Expiración de sesión

181 

1821. Las sesiones permanecen accesibles en tu historial de Claude Code en la web

1832. Puedes continuar o hacer referencia a sesiones pasadas desde [claude.ai/code](https://claude.ai/code)

184 

185## Limitaciones actuales

186 

187* **Solo GitHub**: Actualmente admite repositorios en GitHub.

188* **Un PR a la vez**: Cada sesión puede crear una solicitud de extracción.

189* **Se aplican límites de velocidad**: Las sesiones usan los límites de velocidad del plan de Claude individual.

190* **Se requiere acceso web**: Los usuarios deben tener acceso a Claude Code en la web; aquellos sin él solo recibirán respuestas de chat estándar de Claude.

191 

192## Recursos relacionados

193 

194<CardGroup>

195 <Card title="Claude Code en la web" icon="globe" href="/es/claude-code-on-the-web">

196 Obtén más información sobre Claude Code en la web

197 </Card>

198 

199 <Card title="Claude para Slack" icon="slack" href="https://claude.com/claude-and-slack">

200 Documentación general de Claude para Slack

201 </Card>

202 

203 <Card title="Slack App Marketplace" icon="store" href="https://slack.com/marketplace/A08SF47R6P4">

204 Instala la aplicación Claude desde el Slack Marketplace

205 </Card>

206 

207 <Card title="Centro de ayuda de Claude" icon="circle-question" href="https://support.claude.com">

208 Obtén soporte adicional

209 </Card>

210</CardGroup>

statusline.md +1062 −0 created

Details

1> ## Documentation Index

2> Fetch the complete documentation index at: https://code.claude.com/docs/llms.txt

3> Use this file to discover all available pages before exploring further.

4 

5# Personaliza tu línea de estado

6 

7> Configura una barra de estado personalizada para monitorear el uso de la ventana de contexto, costos y estado de git en Claude Code

8 

9La línea de estado es una barra personalizable en la parte inferior de Claude Code que ejecuta cualquier script de shell que configures. Recibe datos de sesión JSON en stdin y muestra lo que tu script imprime, dándote una vista persistente y de un vistazo del uso de contexto, costos, estado de git, o cualquier otra cosa que desees rastrear.

10 

11Las líneas de estado son útiles cuando:

12 

13* Deseas monitorear el uso de la ventana de contexto mientras trabajas

14* Necesitas rastrear los costos de la sesión

15* Trabajas en múltiples sesiones y necesitas distinguirlas

16* Deseas que la rama de git y el estado siempre sean visibles

17 

18Aquí hay un ejemplo de una [línea de estado de múltiples líneas](#display-multiple-lines) que muestra información de git en la primera línea y una barra de contexto codificada por colores en la segunda.

19 

20<Frame>

21 <img src="https://mintcdn.com/claude-code/nibzesLaJVh4ydOq/images/statusline-multiline.png?fit=max&auto=format&n=nibzesLaJVh4ydOq&q=85&s=60f11387658acc9ff75158ae85f2ac87" alt="Una línea de estado de múltiples líneas que muestra el nombre del modelo, directorio, rama de git en la primera línea, y una barra de progreso de uso de contexto con costo y duración en la segunda línea" width="776" height="212" data-path="images/statusline-multiline.png" />

22</Frame>

23 

24Esta página te guía a través de [configurar una línea de estado básica](#set-up-a-status-line), explica [cómo fluyen los datos](#how-status-lines-work) desde Claude Code a tu script, enumera [todos los campos que puedes mostrar](#available-data), y proporciona [ejemplos listos para usar](#examples) para patrones comunes como estado de git, seguimiento de costos y barras de progreso.

25 

26## Configurar una línea de estado

27 

28Usa el [comando `/statusline`](#use-the-%2Fstatusline-command) para que Claude Code genere un script para ti, o [crea manualmente un script](#manually-configure-a-status-line) y agrégalo a tu configuración.

29 

30### Usar el comando /statusline

31 

32El comando `/statusline` acepta instrucciones en lenguaje natural que describen lo que deseas mostrar. Claude Code genera un archivo de script en `~/.claude/` y actualiza tu configuración automáticamente:

33 

34```text theme={null}

35/statusline show model name and context percentage with a progress bar

36```

37 

38### Configurar manualmente una línea de estado

39 

40Agrega un campo `statusLine` a tu configuración de usuario (`~/.claude/settings.json`, donde `~` es tu directorio de inicio) o [configuración del proyecto](/es/settings#settings-files). Establece `type` en `"command"` y apunta `command` a una ruta de script o un comando de shell en línea. Para un tutorial completo sobre cómo crear un script, consulta [Construir una línea de estado paso a paso](#build-a-status-line-step-by-step).

41 

42```json theme={null}

43{

44 "statusLine": {

45 "type": "command",

46 "command": "~/.claude/statusline.sh",

47 "padding": 2

48 }

49}

50```

51 

52El campo `command` se ejecuta en un shell, por lo que también puedes usar comandos en línea en lugar de un archivo de script. Este ejemplo usa `jq` para analizar la entrada JSON y mostrar el nombre del modelo y el porcentaje de contexto:

53 

54```json theme={null}

55{

56 "statusLine": {

57 "type": "command",

58 "command": "jq -r '\"[\\(.model.display_name)] \\(.context_window.used_percentage // 0)% context\"'"

59 }

60}

61```

62 

63El campo `padding` opcional agrega espaciado horizontal adicional (en caracteres) al contenido de la línea de estado. Por defecto es `0`. Este relleno se suma al espaciado integrado de la interfaz, por lo que controla la indentación relativa en lugar de la distancia absoluta desde el borde de la terminal.

64 

65El campo `refreshInterval` opcional vuelve a ejecutar tu comando cada N segundos además de las [actualizaciones impulsadas por eventos](#how-status-lines-work). El mínimo es `1`. Establece esto cuando tu línea de estado muestra datos basados en tiempo, como un reloj, o cuando los subagentes de fondo cambian el estado de git mientras la sesión principal está inactiva. Déjalo sin establecer para ejecutar solo en eventos.

66 

67El campo `hideVimModeIndicator` opcional suprime el texto integrado `-- INSERT --` debajo del prompt. Establece esto en `true` cuando tu script renderiza [`vim.mode`](#available-data) por sí mismo, para que el modo no se muestre dos veces.

68 

69### Desactivar la línea de estado

70 

71Ejecuta `/statusline` y pídele que elimine o borre tu línea de estado (por ejemplo, `/statusline delete`, `/statusline clear`, `/statusline remove it`). También puedes eliminar manualmente el campo `statusLine` de tu settings.json.

72 

73## Construir una línea de estado paso a paso

74 

75Este tutorial muestra lo que está sucediendo bajo el capó creando manualmente una línea de estado que muestra el modelo actual, el directorio de trabajo y el porcentaje de uso de la ventana de contexto.

76 

77<Note>Ejecutar [`/statusline`](#use-the-%2Fstatusline-command) con una descripción de lo que deseas configura todo esto automáticamente para ti.</Note>

78 

79Estos ejemplos usan scripts de Bash, que funcionan en macOS y Linux. En Windows, consulta [Configuración de Windows](#windows-configuration) para ejemplos de PowerShell y Git Bash.

80 

81<Frame>

82 <img src="https://mintcdn.com/claude-code/nibzesLaJVh4ydOq/images/statusline-quickstart.png?fit=max&auto=format&n=nibzesLaJVh4ydOq&q=85&s=696445e59ca0059213250651ad23db6b" alt="Una línea de estado que muestra el nombre del modelo, directorio y porcentaje de contexto" width="726" height="164" data-path="images/statusline-quickstart.png" />

83</Frame>

84 

85<Steps>

86 <Step title="Crear un script que lea JSON e imprima salida">

87 Claude Code envía datos JSON a tu script a través de stdin. Este script usa [`jq`](https://jqlang.github.io/jq/), un analizador JSON de línea de comandos que es posible que necesites instalar, para extraer el nombre del modelo, el directorio y el porcentaje de contexto, luego imprime una línea formateada.

88 

89 Guarda esto en `~/.claude/statusline.sh` (donde `~` es tu directorio de inicio, como `/Users/username` en macOS o `/home/username` en Linux):

90 

91 ```bash theme={null}

92 #!/bin/bash

93 # Read JSON data that Claude Code sends to stdin

94 input=$(cat)

95 

96 # Extract fields using jq

97 MODEL=$(echo "$input" | jq -r '.model.display_name')

98 DIR=$(echo "$input" | jq -r '.workspace.current_dir')

99 # The "// 0" provides a fallback if the field is null

100 PCT=$(echo "$input" | jq -r '.context_window.used_percentage // 0' | cut -d. -f1)

101 

102 # Output the status line - ${DIR##*/} extracts just the folder name

103 echo "[$MODEL] 📁 ${DIR##*/} | ${PCT}% context"

104 ```

105 </Step>

106 

107 <Step title="Hacerlo ejecutable">

108 Marca el script como ejecutable para que tu shell pueda ejecutarlo:

109 

110 ```bash theme={null}

111 chmod +x ~/.claude/statusline.sh

112 ```

113 </Step>

114 

115 <Step title="Agregar a la configuración">

116 Dile a Claude Code que ejecute tu script como la línea de estado. Agrega esta configuración a `~/.claude/settings.json`, que establece `type` en `"command"` (lo que significa "ejecutar este comando de shell") y apunta `command` a tu script:

117 

118 ```json theme={null}

119 {

120 "statusLine": {

121 "type": "command",

122 "command": "~/.claude/statusline.sh"

123 }

124 }

125 ```

126 

127 Tu línea de estado aparece en la parte inferior de la interfaz. La configuración se recarga automáticamente, pero los cambios no aparecerán hasta tu próxima interacción con Claude Code.

128 </Step>

129</Steps>

130 

131## Cómo funcionan las líneas de estado

132 

133Claude Code ejecuta tu script y canaliza [datos de sesión JSON](#available-data) a través de stdin. Tu script lee el JSON, extrae lo que necesita e imprime texto a stdout. Claude Code muestra lo que tu script imprime.

134 

135**Cuándo se actualiza**

136 

137Tu script se ejecuta después de cada nuevo mensaje del asistente, cuando cambia el modo de permiso, o cuando se activa/desactiva el modo vim. Las actualizaciones se debounce en 300ms, lo que significa que los cambios rápidos se agrupan y tu script se ejecuta una vez que las cosas se estabilizan. Si una nueva actualización se activa mientras tu script aún se está ejecutando, la ejecución en vuelo se cancela. Si editas tu script, los cambios no aparecerán hasta que tu próxima interacción con Claude Code active una actualización.

138 

139Estos disparadores pueden quedarse en silencio cuando la sesión principal está inactiva, por ejemplo mientras un coordinador espera en subagentes de fondo. Para mantener segmentos basados en tiempo o de fuentes externas actuales durante períodos inactivos, establece [`refreshInterval`](#manually-configure-a-status-line) para también volver a ejecutar el comando en un temporizador fijo.

140 

141**Lo que tu script puede generar**

142 

143* **Múltiples líneas**: cada declaración `echo` o `print` se muestra como una fila separada. Consulta el [ejemplo de múltiples líneas](#display-multiple-lines).

144* **Colores**: usa [códigos de escape ANSI](https://en.wikipedia.org/wiki/ANSI_escape_code#Colors) como `\033[32m` para verde (la terminal debe admitirlos). Consulta el [ejemplo de estado de git](#git-status-with-colors).

145* **Enlaces**: usa [secuencias de escape OSC 8](https://en.wikipedia.org/wiki/ANSI_escape_code#OSC) para hacer que el texto sea clickeable (Cmd+clic en macOS, Ctrl+clic en Windows/Linux). Requiere una terminal que admita hipervínculos como iTerm2, Kitty o WezTerm. Consulta el [ejemplo de enlaces clickeables](#clickable-links).

146 

147<Note>La línea de estado se ejecuta localmente y no consume tokens de API. Se oculta temporalmente durante ciertas interacciones de la interfaz, incluidas sugerencias de autocompletado, el menú de ayuda y solicitudes de permiso.</Note>

148 

149## Datos disponibles

150 

151Claude Code envía los siguientes campos JSON a tu script a través de stdin:

152 

153| Campo | Descripción |

154| -------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

155| `model.id`, `model.display_name` | Identificador del modelo actual y nombre para mostrar |

156| `cwd`, `workspace.current_dir` | Directorio de trabajo actual. Ambos campos contienen el mismo valor; `workspace.current_dir` es preferido para consistencia con `workspace.project_dir`. |

157| `workspace.project_dir` | Directorio donde se lanzó Claude Code, que puede diferir de `cwd` si el directorio de trabajo cambia durante una sesión |

158| `workspace.added_dirs` | Directorios adicionales agregados a través de `/add-dir` o `--add-dir`. Array vacío si no se ha agregado ninguno |

159| `workspace.git_worktree` | Nombre de git worktree cuando el directorio actual está dentro de un worktree vinculado creado con `git worktree add`. Ausente en el árbol de trabajo principal. Poblado para cualquier git worktree, a diferencia de `worktree.*` que se aplica solo a sesiones `--worktree` |

160| `cost.total_cost_usd` | Costo total estimado de la sesión en USD, calculado del lado del cliente. Puede diferir de tu factura real |

161| `cost.total_duration_ms` | Tiempo total transcurrido desde que comenzó la sesión, en milisegundos |

162| `cost.total_api_duration_ms` | Tiempo total dedicado a esperar respuestas de API en milisegundos |

163| `cost.total_lines_added`, `cost.total_lines_removed` | Líneas de código cambiadas |

164| `context_window.total_input_tokens`, `context_window.total_output_tokens` | Conteos de tokens acumulativos en toda la sesión |

165| `context_window.context_window_size` | Tamaño máximo de la ventana de contexto en tokens. 200000 por defecto, o 1000000 para modelos con contexto extendido. |

166| `context_window.used_percentage` | Porcentaje precalculado de ventana de contexto utilizada |

167| `context_window.remaining_percentage` | Porcentaje precalculado de ventana de contexto restante |

168| `context_window.current_usage` | Conteos de tokens de la última llamada a API, descritos en [campos de ventana de contexto](#context-window-fields) |

169| `exceeds_200k_tokens` | Si el conteo total de tokens (tokens de entrada, caché y salida combinados) de la respuesta de API más reciente excede 200k. Este es un umbral fijo independientemente del tamaño real de la ventana de contexto. |

170| `effort.level` | Nivel de esfuerzo de razonamiento actual (`low`, `medium`, `high`, `xhigh`, o `max`). Refleja el valor de sesión en vivo, incluidos cambios de `/effort` a mitad de sesión. Ausente cuando el modelo actual no admite el parámetro de esfuerzo |

171| `thinking.enabled` | Si el pensamiento extendido está habilitado para la sesión |

172| `rate_limits.five_hour.used_percentage`, `rate_limits.seven_day.used_percentage` | Porcentaje del límite de velocidad de 5 horas o 7 días consumido, de 0 a 100 |

173| `rate_limits.five_hour.resets_at`, `rate_limits.seven_day.resets_at` | Segundos de época Unix cuando se reinicia la ventana de límite de velocidad de 5 horas o 7 días |

174| `session_id` | Identificador único de sesión |

175| `session_name` | Nombre de sesión personalizado establecido con la bandera `--name` o `/rename`. Ausente si no se ha establecido un nombre personalizado |

176| `transcript_path` | Ruta al archivo de transcripción de conversación |

177| `version` | Versión de Claude Code |

178| `output_style.name` | Nombre del estilo de salida actual |

179| `vim.mode` | Modo vim actual (`NORMAL`, `INSERT`, `VISUAL`, o `VISUAL LINE`) cuando [el modo vim](/es/interactive-mode#vim-editor-mode) está habilitado |

180| `agent.name` | Nombre del agente cuando se ejecuta con la bandera `--agent` o configuración de agente configurada |

181| `worktree.name` | Nombre del worktree activo. Presente solo durante sesiones `--worktree` |

182| `worktree.path` | Ruta absoluta al directorio del worktree |

183| `worktree.branch` | Nombre de rama de Git para el worktree (por ejemplo, `"worktree-my-feature"`). Ausente para worktrees basados en hooks |

184| `worktree.original_cwd` | El directorio en el que estaba Claude antes de entrar en el worktree |

185| `worktree.original_branch` | Rama de Git extraída antes de entrar en el worktree. Ausente para worktrees basados en hooks |

186 

187<Accordion title="Esquema JSON completo">

188 Tu comando de línea de estado recibe esta estructura JSON a través de stdin:

189 

190 ```json theme={null}

191 {

192 "cwd": "/current/working/directory",

193 "session_id": "abc123...",

194 "session_name": "my-session",

195 "transcript_path": "/path/to/transcript.jsonl",

196 "model": {

197 "id": "claude-opus-4-7",

198 "display_name": "Opus"

199 },

200 "workspace": {

201 "current_dir": "/current/working/directory",

202 "project_dir": "/original/project/directory",

203 "added_dirs": [],

204 "git_worktree": "feature-xyz"

205 },

206 "version": "2.1.90",

207 "output_style": {

208 "name": "default"

209 },

210 "cost": {

211 "total_cost_usd": 0.01234,

212 "total_duration_ms": 45000,

213 "total_api_duration_ms": 2300,

214 "total_lines_added": 156,

215 "total_lines_removed": 23

216 },

217 "context_window": {

218 "total_input_tokens": 15234,

219 "total_output_tokens": 4521,

220 "context_window_size": 200000,

221 "used_percentage": 8,

222 "remaining_percentage": 92,

223 "current_usage": {

224 "input_tokens": 8500,

225 "output_tokens": 1200,

226 "cache_creation_input_tokens": 5000,

227 "cache_read_input_tokens": 2000

228 }

229 },

230 "exceeds_200k_tokens": false,

231 "effort": {

232 "level": "high"

233 },

234 "thinking": {

235 "enabled": true

236 },

237 "rate_limits": {

238 "five_hour": {

239 "used_percentage": 23.5,

240 "resets_at": 1738425600

241 },

242 "seven_day": {

243 "used_percentage": 41.2,

244 "resets_at": 1738857600

245 }

246 },

247 "vim": {

248 "mode": "NORMAL"

249 },

250 "agent": {

251 "name": "security-reviewer"

252 },

253 "worktree": {

254 "name": "my-feature",

255 "path": "/path/to/.claude/worktrees/my-feature",

256 "branch": "worktree-my-feature",

257 "original_cwd": "/path/to/project",

258 "original_branch": "main"

259 }

260 }

261 ```

262 

263 **Campos que pueden estar ausentes** (no presentes en JSON):

264 

265 * `session_name`: aparece solo cuando se ha establecido un nombre personalizado con `--name` o `/rename`

266 * `workspace.git_worktree`: aparece solo cuando el directorio actual está dentro de un git worktree vinculado

267 * `effort`: aparece solo cuando el modelo actual admite el parámetro de esfuerzo de razonamiento

268 * `vim`: aparece solo cuando el modo vim está habilitado

269 * `agent`: aparece solo cuando se ejecuta con la bandera `--agent` o configuración de agente configurada

270 * `worktree`: aparece solo durante sesiones `--worktree`. Cuando está presente, `branch` y `original_branch` también pueden estar ausentes para worktrees basados en hooks

271 * `rate_limits`: aparece solo para suscriptores de Claude.ai (Pro/Max) después de la primera respuesta de API en la sesión. Cada ventana (`five_hour`, `seven_day`) puede estar independientemente ausente. Usa `jq -r '.rate_limits.five_hour.used_percentage // empty'` para manejar la ausencia con elegancia.

272 

273 **Campos que pueden ser `null`**:

274 

275 * `context_window.current_usage`: `null` antes de la primera llamada a API en una sesión

276 * `context_window.used_percentage`, `context_window.remaining_percentage`: pueden ser `null` al principio de la sesión

277 

278 Maneja campos faltantes con acceso condicional y valores nulos con valores predeterminados de respaldo en tus scripts.

279</Accordion>

280 

281### Campos de ventana de contexto

282 

283El objeto `context_window` proporciona dos formas de rastrear el uso de contexto:

284 

285* **Totales acumulativos** (`total_input_tokens`, `total_output_tokens`): suma de todos los tokens en toda la sesión, útil para rastrear el consumo total

286* **Uso actual** (`current_usage`): conteos de tokens de la llamada a API más reciente, úsalo para un porcentaje de contexto preciso ya que refleja el estado real del contexto

287 

288El objeto `current_usage` contiene:

289 

290* `input_tokens`: tokens de entrada en contexto actual

291* `output_tokens`: tokens de salida generados

292* `cache_creation_input_tokens`: tokens escritos en caché

293* `cache_read_input_tokens`: tokens leídos del caché

294 

295El campo `used_percentage` se calcula solo a partir de tokens de entrada: `input_tokens + cache_creation_input_tokens + cache_read_input_tokens`. No incluye `output_tokens`.

296 

297Si calculas el porcentaje de contexto manualmente desde `current_usage`, usa la misma fórmula de solo entrada para coincidir con `used_percentage`.

298 

299El objeto `current_usage` es `null` antes de la primera llamada a API en una sesión.

300 

301## Ejemplos

302 

303Estos ejemplos muestran patrones comunes de línea de estado. Para usar cualquier ejemplo:

304 

3051. Guarda el script en un archivo como `~/.claude/statusline.sh` (o `.py`/`.js`)

3062. Hazlo ejecutable: `chmod +x ~/.claude/statusline.sh`

3073. Agrega la ruta a tu [configuración](#manually-configure-a-status-line)

308 

309Los ejemplos de Bash usan [`jq`](https://jqlang.github.io/jq/) para analizar JSON. Python y Node.js tienen análisis JSON integrado.

310 

311### Uso de ventana de contexto

312 

313Muestra el modelo actual y el uso de la ventana de contexto con una barra de progreso visual. Cada script lee JSON desde stdin, extrae el campo `used_percentage` y construye una barra de 10 caracteres donde los bloques rellenos (▓) representan el uso:

314 

315<Frame>

316 <img src="https://mintcdn.com/claude-code/nibzesLaJVh4ydOq/images/statusline-context-window-usage.png?fit=max&auto=format&n=nibzesLaJVh4ydOq&q=85&s=15b58ab3602f036939145dde3165c6f7" alt="Una línea de estado que muestra el nombre del modelo y una barra de progreso con porcentaje" width="448" height="152" data-path="images/statusline-context-window-usage.png" />

317</Frame>

318 

319<CodeGroup>

320 ```bash Bash theme={null}

321 #!/bin/bash

322 # Read all of stdin into a variable

323 input=$(cat)

324 

325 # Extract fields with jq, "// 0" provides fallback for null

326 MODEL=$(echo "$input" | jq -r '.model.display_name')

327 PCT=$(echo "$input" | jq -r '.context_window.used_percentage // 0' | cut -d. -f1)

328 

329 # Build progress bar: printf -v creates a run of spaces, then

330 # ${var// /▓} replaces each space with a block character

331 BAR_WIDTH=10

332 FILLED=$((PCT * BAR_WIDTH / 100))

333 EMPTY=$((BAR_WIDTH - FILLED))

334 BAR=""

335 [ "$FILLED" -gt 0 ] && printf -v FILL "%${FILLED}s" && BAR="${FILL// /▓}"

336 [ "$EMPTY" -gt 0 ] && printf -v PAD "%${EMPTY}s" && BAR="${BAR}${PAD// /░}"

337 

338 echo "[$MODEL] $BAR $PCT%"

339 ```

340 

341 ```python Python theme={null}

342 #!/usr/bin/env python3

343 import json, sys

344 

345 # json.load reads and parses stdin in one step

346 data = json.load(sys.stdin)

347 model = data['model']['display_name']

348 # "or 0" handles null values

349 pct = int(data.get('context_window', {}).get('used_percentage', 0) or 0)

350 

351 # String multiplication builds the bar

352 filled = pct * 10 // 100

353 bar = '▓' * filled + '░' * (10 - filled)

354 

355 print(f"[{model}] {bar} {pct}%")

356 ```

357 

358 ```javascript Node.js theme={null}

359 #!/usr/bin/env node

360 // Node.js reads stdin asynchronously with events

361 let input = '';

362 process.stdin.on('data', chunk => input += chunk);

363 process.stdin.on('end', () => {

364 const data = JSON.parse(input);

365 const model = data.model.display_name;

366 // Optional chaining (?.) safely handles null fields

367 const pct = Math.floor(data.context_window?.used_percentage || 0);

368 

369 // String.repeat() builds the bar

370 const filled = Math.floor(pct * 10 / 100);

371 const bar = '▓'.repeat(filled) + '░'.repeat(10 - filled);

372 

373 console.log(`[${model}] ${bar} ${pct}%`);

374 });

375 ```

376</CodeGroup>

377 

378### Estado de git con colores

379 

380Muestra la rama de git con indicadores codificados por colores para archivos preparados y modificados. Este script usa [códigos de escape ANSI](https://en.wikipedia.org/wiki/ANSI_escape_code#Colors) para colores de terminal: `\033[32m` es verde, `\033[33m` es amarillo, y `\033[0m` restablece al predeterminado.

381 

382<Frame>

383 <img src="https://mintcdn.com/claude-code/nibzesLaJVh4ydOq/images/statusline-git-context.png?fit=max&auto=format&n=nibzesLaJVh4ydOq&q=85&s=e656f34f90d1d9a1d0e220988914345f" alt="Una línea de estado que muestra modelo, directorio, rama de git e indicadores codificados por colores para archivos preparados y modificados" width="742" height="178" data-path="images/statusline-git-context.png" />

384</Frame>

385 

386Cada script verifica si el directorio actual es un repositorio de git, cuenta archivos preparados y modificados, y muestra indicadores codificados por colores:

387 

388<CodeGroup>

389 ```bash Bash theme={null}

390 #!/bin/bash

391 input=$(cat)

392 

393 MODEL=$(echo "$input" | jq -r '.model.display_name')

394 DIR=$(echo "$input" | jq -r '.workspace.current_dir')

395 

396 GREEN='\033[32m'

397 YELLOW='\033[33m'

398 RESET='\033[0m'

399 

400 if git rev-parse --git-dir > /dev/null 2>&1; then

401 BRANCH=$(git branch --show-current 2>/dev/null)

402 STAGED=$(git diff --cached --numstat 2>/dev/null | wc -l | tr -d ' ')

403 MODIFIED=$(git diff --numstat 2>/dev/null | wc -l | tr -d ' ')

404 

405 GIT_STATUS=""

406 [ "$STAGED" -gt 0 ] && GIT_STATUS="${GREEN}+${STAGED}${RESET}"

407 [ "$MODIFIED" -gt 0 ] && GIT_STATUS="${GIT_STATUS}${YELLOW}~${MODIFIED}${RESET}"

408 

409 echo -e "[$MODEL] 📁 ${DIR##*/} | 🌿 $BRANCH $GIT_STATUS"

410 else

411 echo "[$MODEL] 📁 ${DIR##*/}"

412 fi

413 ```

414 

415 ```python Python theme={null}

416 #!/usr/bin/env python3

417 import json, sys, subprocess, os

418 

419 data = json.load(sys.stdin)

420 model = data['model']['display_name']

421 directory = os.path.basename(data['workspace']['current_dir'])

422 

423 GREEN, YELLOW, RESET = '\033[32m', '\033[33m', '\033[0m'

424 

425 try:

426 subprocess.check_output(['git', 'rev-parse', '--git-dir'], stderr=subprocess.DEVNULL)

427 branch = subprocess.check_output(['git', 'branch', '--show-current'], text=True).strip()

428 staged_output = subprocess.check_output(['git', 'diff', '--cached', '--numstat'], text=True).strip()

429 modified_output = subprocess.check_output(['git', 'diff', '--numstat'], text=True).strip()

430 staged = len(staged_output.split('\n')) if staged_output else 0

431 modified = len(modified_output.split('\n')) if modified_output else 0

432 

433 git_status = f"{GREEN}+{staged}{RESET}" if staged else ""

434 git_status += f"{YELLOW}~{modified}{RESET}" if modified else ""

435 

436 print(f"[{model}] 📁 {directory} | 🌿 {branch} {git_status}")

437 except:

438 print(f"[{model}] 📁 {directory}")

439 ```

440 

441 ```javascript Node.js theme={null}

442 #!/usr/bin/env node

443 const { execSync } = require('child_process');

444 const path = require('path');

445 

446 let input = '';

447 process.stdin.on('data', chunk => input += chunk);

448 process.stdin.on('end', () => {

449 const data = JSON.parse(input);

450 const model = data.model.display_name;

451 const dir = path.basename(data.workspace.current_dir);

452 

453 const GREEN = '\x1b[32m', YELLOW = '\x1b[33m', RESET = '\x1b[0m';

454 

455 try {

456 execSync('git rev-parse --git-dir', { stdio: 'ignore' });

457 const branch = execSync('git branch --show-current', { encoding: 'utf8' }).trim();

458 const staged = execSync('git diff --cached --numstat', { encoding: 'utf8' }).trim().split('\n').filter(Boolean).length;

459 const modified = execSync('git diff --numstat', { encoding: 'utf8' }).trim().split('\n').filter(Boolean).length;

460 

461 let gitStatus = staged ? `${GREEN}+${staged}${RESET}` : '';

462 gitStatus += modified ? `${YELLOW}~${modified}${RESET}` : '';

463 

464 console.log(`[${model}] 📁 ${dir} | 🌿 ${branch} ${gitStatus}`);

465 } catch {

466 console.log(`[${model}] 📁 ${dir}`);

467 }

468 });

469 ```

470</CodeGroup>

471 

472### Seguimiento de costos y duración

473 

474Rastrea los costos de API de tu sesión y el tiempo transcurrido. El campo `cost.total_cost_usd` acumula el costo estimado de todas las llamadas a API en la sesión actual. El campo `cost.total_duration_ms` mide el tiempo total transcurrido desde que comenzó la sesión, mientras que `cost.total_api_duration_ms` rastrea solo el tiempo dedicado a esperar respuestas de API.

475 

476Cada script formatea el costo como moneda y convierte milisegundos a minutos y segundos:

477 

478<Frame>

479 <img src="https://mintcdn.com/claude-code/nibzesLaJVh4ydOq/images/statusline-cost-tracking.png?fit=max&auto=format&n=nibzesLaJVh4ydOq&q=85&s=e3444a51fe6f3440c134bd5f1f08ad29" alt="Una línea de estado que muestra el nombre del modelo, costo de sesión y duración" width="588" height="180" data-path="images/statusline-cost-tracking.png" />

480</Frame>

481 

482<CodeGroup>

483 ```bash Bash theme={null}

484 #!/bin/bash

485 input=$(cat)

486 

487 MODEL=$(echo "$input" | jq -r '.model.display_name')

488 COST=$(echo "$input" | jq -r '.cost.total_cost_usd // 0')

489 DURATION_MS=$(echo "$input" | jq -r '.cost.total_duration_ms // 0')

490 

491 COST_FMT=$(printf '$%.2f' "$COST")

492 DURATION_SEC=$((DURATION_MS / 1000))

493 MINS=$((DURATION_SEC / 60))

494 SECS=$((DURATION_SEC % 60))

495 

496 echo "[$MODEL] 💰 $COST_FMT | ⏱️ ${MINS}m ${SECS}s"

497 ```

498 

499 ```python Python theme={null}

500 #!/usr/bin/env python3

501 import json, sys

502 

503 data = json.load(sys.stdin)

504 model = data['model']['display_name']

505 cost = data.get('cost', {}).get('total_cost_usd', 0) or 0

506 duration_ms = data.get('cost', {}).get('total_duration_ms', 0) or 0

507 

508 duration_sec = duration_ms // 1000

509 mins, secs = duration_sec // 60, duration_sec % 60

510 

511 print(f"[{model}] 💰 ${cost:.2f} | ⏱️ {mins}m {secs}s")

512 ```

513 

514 ```javascript Node.js theme={null}

515 #!/usr/bin/env node

516 let input = '';

517 process.stdin.on('data', chunk => input += chunk);

518 process.stdin.on('end', () => {

519 const data = JSON.parse(input);

520 const model = data.model.display_name;

521 const cost = data.cost?.total_cost_usd || 0;

522 const durationMs = data.cost?.total_duration_ms || 0;

523 

524 const durationSec = Math.floor(durationMs / 1000);

525 const mins = Math.floor(durationSec / 60);

526 const secs = durationSec % 60;

527 

528 console.log(`[${model}] 💰 $${cost.toFixed(2)} | ⏱️ ${mins}m ${secs}s`);

529 });

530 ```

531</CodeGroup>

532 

533### Mostrar múltiples líneas

534 

535Tu script puede generar múltiples líneas para crear una pantalla más rica. Cada declaración `echo` produce una fila separada en el área de estado.

536 

537<Frame>

538 <img src="https://mintcdn.com/claude-code/nibzesLaJVh4ydOq/images/statusline-multiline.png?fit=max&auto=format&n=nibzesLaJVh4ydOq&q=85&s=60f11387658acc9ff75158ae85f2ac87" alt="Una línea de estado de múltiples líneas que muestra el nombre del modelo, directorio, rama de git en la primera línea, y una barra de progreso de uso de contexto con costo y duración en la segunda línea" width="776" height="212" data-path="images/statusline-multiline.png" />

539</Frame>

540 

541Este ejemplo combina varias técnicas: colores basados en umbrales (verde por debajo del 70%, amarillo 70-89%, rojo 90%+), una barra de progreso e información de rama de git. Cada declaración `print` o `echo` crea una fila separada:

542 

543<CodeGroup>

544 ```bash Bash theme={null}

545 #!/bin/bash

546 input=$(cat)

547 

548 MODEL=$(echo "$input" | jq -r '.model.display_name')

549 DIR=$(echo "$input" | jq -r '.workspace.current_dir')

550 COST=$(echo "$input" | jq -r '.cost.total_cost_usd // 0')

551 PCT=$(echo "$input" | jq -r '.context_window.used_percentage // 0' | cut -d. -f1)

552 DURATION_MS=$(echo "$input" | jq -r '.cost.total_duration_ms // 0')

553 

554 CYAN='\033[36m'; GREEN='\033[32m'; YELLOW='\033[33m'; RED='\033[31m'; RESET='\033[0m'

555 

556 # Pick bar color based on context usage

557 if [ "$PCT" -ge 90 ]; then BAR_COLOR="$RED"

558 elif [ "$PCT" -ge 70 ]; then BAR_COLOR="$YELLOW"

559 else BAR_COLOR="$GREEN"; fi

560 

561 FILLED=$((PCT / 10)); EMPTY=$((10 - FILLED))

562 printf -v FILL "%${FILLED}s"; printf -v PAD "%${EMPTY}s"

563 BAR="${FILL// /█}${PAD// /░}"

564 

565 MINS=$((DURATION_MS / 60000)); SECS=$(((DURATION_MS % 60000) / 1000))

566 

567 BRANCH=""

568 git rev-parse --git-dir > /dev/null 2>&1 && BRANCH=" | 🌿 $(git branch --show-current 2>/dev/null)"

569 

570 echo -e "${CYAN}[$MODEL]${RESET} 📁 ${DIR##*/}$BRANCH"

571 COST_FMT=$(printf '$%.2f' "$COST")

572 echo -e "${BAR_COLOR}${BAR}${RESET} ${PCT}% | ${YELLOW}${COST_FMT}${RESET} | ⏱️ ${MINS}m ${SECS}s"

573 ```

574 

575 ```python Python theme={null}

576 #!/usr/bin/env python3

577 import json, sys, subprocess, os

578 

579 data = json.load(sys.stdin)

580 model = data['model']['display_name']

581 directory = os.path.basename(data['workspace']['current_dir'])

582 cost = data.get('cost', {}).get('total_cost_usd', 0) or 0

583 pct = int(data.get('context_window', {}).get('used_percentage', 0) or 0)

584 duration_ms = data.get('cost', {}).get('total_duration_ms', 0) or 0

585 

586 CYAN, GREEN, YELLOW, RED, RESET = '\033[36m', '\033[32m', '\033[33m', '\033[31m', '\033[0m'

587 

588 bar_color = RED if pct >= 90 else YELLOW if pct >= 70 else GREEN

589 filled = pct // 10

590 bar = '█' * filled + '░' * (10 - filled)

591 

592 mins, secs = duration_ms // 60000, (duration_ms % 60000) // 1000

593 

594 try:

595 branch = subprocess.check_output(['git', 'branch', '--show-current'], text=True, stderr=subprocess.DEVNULL).strip()

596 branch = f" | 🌿 {branch}" if branch else ""

597 except:

598 branch = ""

599 

600 print(f"{CYAN}[{model}]{RESET} 📁 {directory}{branch}")

601 print(f"{bar_color}{bar}{RESET} {pct}% | {YELLOW}${cost:.2f}{RESET} | ⏱️ {mins}m {secs}s")

602 ```

603 

604 ```javascript Node.js theme={null}

605 #!/usr/bin/env node

606 const { execSync } = require('child_process');

607 const path = require('path');

608 

609 let input = '';

610 process.stdin.on('data', chunk => input += chunk);

611 process.stdin.on('end', () => {

612 const data = JSON.parse(input);

613 const model = data.model.display_name;

614 const dir = path.basename(data.workspace.current_dir);

615 const cost = data.cost?.total_cost_usd || 0;

616 const pct = Math.floor(data.context_window?.used_percentage || 0);

617 const durationMs = data.cost?.total_duration_ms || 0;

618 

619 const CYAN = '\x1b[36m', GREEN = '\x1b[32m', YELLOW = '\x1b[33m', RED = '\x1b[31m', RESET = '\x1b[0m';

620 

621 const barColor = pct >= 90 ? RED : pct >= 70 ? YELLOW : GREEN;

622 const filled = Math.floor(pct / 10);

623 const bar = '█'.repeat(filled) + '░'.repeat(10 - filled);

624 

625 const mins = Math.floor(durationMs / 60000);

626 const secs = Math.floor((durationMs % 60000) / 1000);

627 

628 let branch = '';

629 try {

630 branch = execSync('git branch --show-current', { encoding: 'utf8', stdio: ['pipe', 'pipe', 'ignore'] }).trim();

631 branch = branch ? ` | 🌿 ${branch}` : '';

632 } catch {}

633 

634 console.log(`${CYAN}[${model}]${RESET} 📁 ${dir}${branch}`);

635 console.log(`${barColor}${bar}${RESET} ${pct}% | ${YELLOW}$${cost.toFixed(2)}${RESET} | ⏱️ ${mins}m ${secs}s`);

636 });

637 ```

638</CodeGroup>

639 

640### Enlaces clickeables

641 

642Este ejemplo crea un enlace clickeable a tu repositorio de GitHub. Lee la URL remota de git, convierte el formato SSH a HTTPS con `sed`, y envuelve el nombre del repositorio en códigos de escape OSC 8. Mantén presionado Cmd (macOS) o Ctrl (Windows/Linux) y haz clic para abrir el enlace en tu navegador.

643 

644<Frame>

645 <img src="https://mintcdn.com/claude-code/nibzesLaJVh4ydOq/images/statusline-links.png?fit=max&auto=format&n=nibzesLaJVh4ydOq&q=85&s=4bcc6e7deb7cf52f41ab85a219b52661" alt="Una línea de estado que muestra un enlace clickeable a un repositorio de GitHub" width="726" height="198" data-path="images/statusline-links.png" />

646</Frame>

647 

648Cada script obtiene la URL remota de git, convierte el formato SSH a HTTPS, y envuelve el nombre del repositorio en códigos de escape OSC 8. La versión de Bash usa `printf '%b'` que interpreta escapes de barra invertida de manera más confiable que `echo -e` en diferentes shells:

649 

650<CodeGroup>

651 ```bash Bash theme={null}

652 #!/bin/bash

653 input=$(cat)

654 

655 MODEL=$(echo "$input" | jq -r '.model.display_name')

656 

657 # Convert git SSH URL to HTTPS

658 REMOTE=$(git remote get-url origin 2>/dev/null | sed 's/git@github.com:/https:\/\/github.com\//' | sed 's/\.git$//')

659 

660 if [ -n "$REMOTE" ]; then

661 REPO_NAME=$(basename "$REMOTE")

662 # OSC 8 format: \e]8;;URL\a then TEXT then \e]8;;\a

663 # printf %b interprets escape sequences reliably across shells

664 printf '%b' "[$MODEL] 🔗 \e]8;;${REMOTE}\a${REPO_NAME}\e]8;;\a\n"

665 else

666 echo "[$MODEL]"

667 fi

668 ```

669 

670 ```python Python theme={null}

671 #!/usr/bin/env python3

672 import json, sys, subprocess, re, os

673 

674 data = json.load(sys.stdin)

675 model = data['model']['display_name']

676 

677 # Get git remote URL

678 try:

679 remote = subprocess.check_output(

680 ['git', 'remote', 'get-url', 'origin'],

681 stderr=subprocess.DEVNULL, text=True

682 ).strip()

683 # Convert SSH to HTTPS format

684 remote = re.sub(r'^git@github\.com:', 'https://github.com/', remote)

685 remote = re.sub(r'\.git$', '', remote)

686 repo_name = os.path.basename(remote)

687 # OSC 8 escape sequences

688 link = f"\033]8;;{remote}\a{repo_name}\033]8;;\a"

689 print(f"[{model}] 🔗 {link}")

690 except:

691 print(f"[{model}]")

692 ```

693 

694 ```javascript Node.js theme={null}

695 #!/usr/bin/env node

696 const { execSync } = require('child_process');

697 const path = require('path');

698 

699 let input = '';

700 process.stdin.on('data', chunk => input += chunk);

701 process.stdin.on('end', () => {

702 const data = JSON.parse(input);

703 const model = data.model.display_name;

704 

705 try {

706 let remote = execSync('git remote get-url origin', { encoding: 'utf8', stdio: ['pipe', 'pipe', 'ignore'] }).trim();

707 // Convert SSH to HTTPS format

708 remote = remote.replace(/^git@github\.com:/, 'https://github.com/').replace(/\.git$/, '');

709 const repoName = path.basename(remote);

710 // OSC 8 escape sequences

711 const link = `\x1b]8;;${remote}\x07${repoName}\x1b]8;;\x07`;

712 console.log(`[${model}] 🔗 ${link}`);

713 } catch {

714 console.log(`[${model}]`);

715 }

716 });

717 ```

718</CodeGroup>

719 

720### Uso de límite de velocidad

721 

722Muestra el uso del límite de velocidad de suscripción de Claude.ai en la línea de estado. El objeto `rate_limits` contiene `five_hour` (ventana móvil de 5 horas) y `seven_day` (ventanas semanales). Cada ventana proporciona `used_percentage` (0-100) y `resets_at` (segundos de época Unix cuando se reinicia la ventana).

723 

724Este campo solo está presente para suscriptores de Claude.ai (Pro/Max) después de la primera respuesta de API. Cada script maneja el campo ausente con elegancia:

725 

726<CodeGroup>

727 ```bash Bash theme={null}

728 #!/bin/bash

729 input=$(cat)

730 

731 MODEL=$(echo "$input" | jq -r '.model.display_name')

732 # "// empty" produces no output when rate_limits is absent

733 FIVE_H=$(echo "$input" | jq -r '.rate_limits.five_hour.used_percentage // empty')

734 WEEK=$(echo "$input" | jq -r '.rate_limits.seven_day.used_percentage // empty')

735 

736 LIMITS=""

737 [ -n "$FIVE_H" ] && LIMITS="5h: $(printf '%.0f' "$FIVE_H")%"

738 [ -n "$WEEK" ] && LIMITS="${LIMITS:+$LIMITS }7d: $(printf '%.0f' "$WEEK")%"

739 

740 [ -n "$LIMITS" ] && echo "[$MODEL] | $LIMITS" || echo "[$MODEL]"

741 ```

742 

743 ```python Python theme={null}

744 #!/usr/bin/env python3

745 import json, sys

746 

747 data = json.load(sys.stdin)

748 model = data['model']['display_name']

749 

750 parts = []

751 rate = data.get('rate_limits', {})

752 five_h = rate.get('five_hour', {}).get('used_percentage')

753 week = rate.get('seven_day', {}).get('used_percentage')

754 

755 if five_h is not None:

756 parts.append(f"5h: {five_h:.0f}%")

757 if week is not None:

758 parts.append(f"7d: {week:.0f}%")

759 

760 if parts:

761 print(f"[{model}] | {' '.join(parts)}")

762 else:

763 print(f"[{model}]")

764 ```

765 

766 ```javascript Node.js theme={null}

767 #!/usr/bin/env node

768 let input = '';

769 process.stdin.on('data', chunk => input += chunk);

770 process.stdin.on('end', () => {

771 const data = JSON.parse(input);

772 const model = data.model.display_name;

773 

774 const parts = [];

775 const fiveH = data.rate_limits?.five_hour?.used_percentage;

776 const week = data.rate_limits?.seven_day?.used_percentage;

777 

778 if (fiveH != null) parts.push(`5h: ${Math.round(fiveH)}%`);

779 if (week != null) parts.push(`7d: ${Math.round(week)}%`);

780 

781 console.log(parts.length ? `[${model}] | ${parts.join(' ')}` : `[${model}]`);

782 });

783 ```

784</CodeGroup>

785 

786### Cachear operaciones costosas

787 

788Tu script de línea de estado se ejecuta frecuentemente durante sesiones activas. Comandos como `git status` o `git diff` pueden ser lentos, especialmente en repositorios grandes. Este ejemplo cachea información de git en un archivo temporal y solo la actualiza cada 5 segundos.

789 

790El nombre del archivo de caché debe ser estable en las invocaciones de línea de estado dentro de una sesión, pero único en sesiones para que las sesiones concurrentes en diferentes repositorios no lean el estado de git cacheado de cada una. Los identificadores basados en procesos como `$$`, `os.getpid()`, o `process.pid` cambian en cada invocación y anulan el caché. Usa el `session_id` de la entrada JSON en su lugar: es estable durante la vida útil de una sesión y único por sesión.

791 

792Cada script verifica si el archivo de caché falta o es más antiguo que 5 segundos antes de ejecutar comandos de git:

793 

794<CodeGroup>

795 ```bash Bash theme={null}

796 #!/bin/bash

797 input=$(cat)

798 

799 MODEL=$(echo "$input" | jq -r '.model.display_name')

800 DIR=$(echo "$input" | jq -r '.workspace.current_dir')

801 SESSION_ID=$(echo "$input" | jq -r '.session_id')

802 

803 CACHE_FILE="/tmp/statusline-git-cache-$SESSION_ID"

804 CACHE_MAX_AGE=5 # seconds

805 

806 cache_is_stale() {

807 [ ! -f "$CACHE_FILE" ] || \

808 # stat -f %m is macOS, stat -c %Y is Linux

809 [ $(($(date +%s) - $(stat -f %m "$CACHE_FILE" 2>/dev/null || stat -c %Y "$CACHE_FILE" 2>/dev/null || echo 0))) -gt $CACHE_MAX_AGE ]

810 }

811 

812 if cache_is_stale; then

813 if git rev-parse --git-dir > /dev/null 2>&1; then

814 BRANCH=$(git branch --show-current 2>/dev/null)

815 STAGED=$(git diff --cached --numstat 2>/dev/null | wc -l | tr -d ' ')

816 MODIFIED=$(git diff --numstat 2>/dev/null | wc -l | tr -d ' ')

817 echo "$BRANCH|$STAGED|$MODIFIED" > "$CACHE_FILE"

818 else

819 echo "||" > "$CACHE_FILE"

820 fi

821 fi

822 

823 IFS='|' read -r BRANCH STAGED MODIFIED < "$CACHE_FILE"

824 

825 if [ -n "$BRANCH" ]; then

826 echo "[$MODEL] 📁 ${DIR##*/} | 🌿 $BRANCH +$STAGED ~$MODIFIED"

827 else

828 echo "[$MODEL] 📁 ${DIR##*/}"

829 fi

830 ```

831 

832 ```python Python theme={null}

833 #!/usr/bin/env python3

834 import json, sys, subprocess, os, time

835 

836 data = json.load(sys.stdin)

837 model = data['model']['display_name']

838 directory = os.path.basename(data['workspace']['current_dir'])

839 session_id = data['session_id']

840 

841 CACHE_FILE = f"/tmp/statusline-git-cache-{session_id}"

842 CACHE_MAX_AGE = 5 # seconds

843 

844 def cache_is_stale():

845 if not os.path.exists(CACHE_FILE):

846 return True

847 return time.time() - os.path.getmtime(CACHE_FILE) > CACHE_MAX_AGE

848 

849 if cache_is_stale():

850 try:

851 subprocess.check_output(['git', 'rev-parse', '--git-dir'], stderr=subprocess.DEVNULL)

852 branch = subprocess.check_output(['git', 'branch', '--show-current'], text=True).strip()

853 staged = subprocess.check_output(['git', 'diff', '--cached', '--numstat'], text=True).strip()

854 modified = subprocess.check_output(['git', 'diff', '--numstat'], text=True).strip()

855 staged_count = len(staged.split('\n')) if staged else 0

856 modified_count = len(modified.split('\n')) if modified else 0

857 with open(CACHE_FILE, 'w') as f:

858 f.write(f"{branch}|{staged_count}|{modified_count}")

859 except:

860 with open(CACHE_FILE, 'w') as f:

861 f.write("||")

862 

863 with open(CACHE_FILE) as f:

864 branch, staged, modified = f.read().strip().split('|')

865 

866 if branch:

867 print(f"[{model}] 📁 {directory} | 🌿 {branch} +{staged} ~{modified}")

868 else:

869 print(f"[{model}] 📁 {directory}")

870 ```

871 

872 ```javascript Node.js theme={null}

873 #!/usr/bin/env node

874 const { execSync } = require('child_process');

875 const fs = require('fs');

876 const path = require('path');

877 

878 let input = '';

879 process.stdin.on('data', chunk => input += chunk);

880 process.stdin.on('end', () => {

881 const data = JSON.parse(input);

882 const model = data.model.display_name;

883 const dir = path.basename(data.workspace.current_dir);

884 const sessionId = data.session_id;

885 

886 const CACHE_FILE = `/tmp/statusline-git-cache-${sessionId}`;

887 const CACHE_MAX_AGE = 5; // seconds

888 

889 const cacheIsStale = () => {

890 if (!fs.existsSync(CACHE_FILE)) return true;

891 return (Date.now() / 1000) - fs.statSync(CACHE_FILE).mtimeMs / 1000 > CACHE_MAX_AGE;

892 };

893 

894 if (cacheIsStale()) {

895 try {

896 execSync('git rev-parse --git-dir', { stdio: 'ignore' });

897 const branch = execSync('git branch --show-current', { encoding: 'utf8' }).trim();

898 const staged = execSync('git diff --cached --numstat', { encoding: 'utf8' }).trim().split('\n').filter(Boolean).length;

899 const modified = execSync('git diff --numstat', { encoding: 'utf8' }).trim().split('\n').filter(Boolean).length;

900 fs.writeFileSync(CACHE_FILE, `${branch}|${staged}|${modified}`);

901 } catch {

902 fs.writeFileSync(CACHE_FILE, '||');

903 }

904 }

905 

906 const [branch, staged, modified] = fs.readFileSync(CACHE_FILE, 'utf8').trim().split('|');

907 

908 if (branch) {

909 console.log(`[${model}] 📁 ${dir} | 🌿 ${branch} +${staged} ~${modified}`);

910 } else {

911 console.log(`[${model}] 📁 ${dir}`);

912 }

913 });

914 ```

915</CodeGroup>

916 

917### Configuración de Windows

918 

919En Windows, Claude Code ejecuta comandos de línea de estado a través de Git Bash cuando Git Bash está instalado, o a través de PowerShell cuando Git Bash está ausente. Para ejecutar un script de PowerShell como tu línea de estado, invócalo mediante `powershell`; esto funciona desde cualquier shell:

920 

921<CodeGroup>

922 ```json settings.json theme={null}

923 {

924 "statusLine": {

925 "type": "command",

926 "command": "powershell -NoProfile -File C:/Users/username/.claude/statusline.ps1"

927 }

928 }

929 ```

930 

931 ```powershell statusline.ps1 theme={null}

932 $input_json = $input | Out-String | ConvertFrom-Json

933 $cwd = $input_json.cwd

934 $model = $input_json.model.display_name

935 $used = $input_json.context_window.used_percentage

936 $dirname = Split-Path $cwd -Leaf

937 

938 if ($used) {

939 Write-Host "$dirname [$model] ctx: $used%"

940 } else {

941 Write-Host "$dirname [$model]"

942 }

943 ```

944</CodeGroup>

945 

946O, cuando Git Bash está instalado, ejecuta un script de Bash directamente:

947 

948<CodeGroup>

949 ```json settings.json theme={null}

950 {

951 "statusLine": {

952 "type": "command",

953 "command": "~/.claude/statusline.sh"

954 }

955 }

956 ```

957 

958 ```bash statusline.sh theme={null}

959 #!/usr/bin/env bash

960 input=$(cat)

961 cwd=$(echo "$input" | grep -o '"cwd":"[^"]*"' | cut -d'"' -f4)

962 model=$(echo "$input" | grep -o '"display_name":"[^"]*"' | cut -d'"' -f4)

963 dirname="${cwd##*[/\\]}"

964 echo "$dirname [$model]"

965 ```

966</CodeGroup>

967 

968## Líneas de estado de subagentes

969 

970La configuración `subagentStatusLine` renderiza un cuerpo de fila personalizado para cada [subagente](/es/sub-agents) mostrado en el panel de agentes debajo del prompt. Úsalo para reemplazar la fila predeterminada `name · description · token count` con tu propio formato.

971 

972```json theme={null}

973{

974 "subagentStatusLine": {

975 "type": "command",

976 "command": "~/.claude/subagent-statusline.sh"

977 }

978}

979```

980 

981El comando se ejecuta una vez por tick de actualización con todas las filas de subagentes visibles pasadas como un único objeto JSON en stdin. La entrada incluye los [campos de hook base](/es/hooks#common-input-fields) más `columns` (el ancho de fila utilizable) y un array `tasks`, donde cada tarea tiene `id`, `name`, `type`, `status`, `description`, `label`, `startTime`, `tokenCount`, `tokenSamples`, y `cwd`.

982 

983Escribe una línea JSON a stdout por cada fila que desees anular, en la forma `{"id": "<task id>", "content": "<row body>"}`. La cadena `content` se renderiza tal cual, incluidos colores ANSI e hipervínculos OSC 8. Omite el `id` de una tarea para mantener el renderizado predeterminado para esa fila; emite una cadena `content` vacía para ocultarla.

984 

985Las mismas puertas de confianza y `disableAllHooks` que se aplican a `statusLine` se aplican aquí. Los plugins pueden enviar una `subagentStatusLine` predeterminada en su [`settings.json`](/es/plugins-reference#standard-plugin-layout).

986 

987## Consejos

988 

989* **Prueba con entrada simulada**: `echo '{"model":{"display_name":"Opus"},"workspace":{"current_dir":"/home/user/project"},"context_window":{"used_percentage":25},"session_id":"test-session-abc"}' | ./statusline.sh`

990* **Mantén la salida corta**: la barra de estado tiene un ancho limitado, por lo que la salida larga puede truncarse o ajustarse de manera incómoda

991* **Cachea operaciones lentas**: tu script se ejecuta frecuentemente durante sesiones activas, por lo que comandos como `git status` pueden causar retrasos. Consulta el [ejemplo de caché](#cache-expensive-operations) para saber cómo manejar esto.

992 

993Proyectos comunitarios como [ccstatusline](https://github.com/sirmalloc/ccstatusline) y [starship-claude](https://github.com/martinemde/starship-claude) proporcionan configuraciones preconstruidas con temas y características adicionales.

994 

995## Solución de problemas

996 

997**La línea de estado no aparece**

998 

999* Verifica que tu script sea ejecutable: `chmod +x ~/.claude/statusline.sh`

1000* Comprueba que tu script genere salida a stdout, no stderr

1001* Ejecuta tu script manualmente para verificar que produce salida

1002* Si `disableAllHooks` está establecido en `true` en tu configuración, la línea de estado también está deshabilitada. Elimina esta configuración o establécela en `false` para volver a habilitarla.

1003* Ejecuta `claude --debug` para registrar el código de salida y stderr de la primera invocación de línea de estado en una sesión

1004* Pídele a Claude que lea tu archivo de configuración y ejecute el comando `statusLine` directamente para exponer errores

1005 

1006**La línea de estado muestra `--` o valores vacíos**

1007 

1008* Los campos pueden ser `null` antes de que se complete la primera respuesta de API

1009* Maneja valores nulos en tu script con valores predeterminados de respaldo como `// 0` en jq

1010* Reinicia Claude Code si los valores permanecen vacíos después de múltiples mensajes

1011 

1012**El porcentaje de contexto muestra valores inesperados**

1013 

1014* Usa `used_percentage` para un estado de contexto preciso en lugar de totales acumulativos

1015* Los `total_input_tokens` y `total_output_tokens` son acumulativos en toda la sesión y pueden exceder el tamaño de la ventana de contexto

1016* El porcentaje de contexto puede diferir de la salida `/context` debido a cuándo se calcula cada uno

1017 

1018**Los enlaces OSC 8 no son clickeables**

1019 

1020* Verifica que tu terminal admita hipervínculos OSC 8 (iTerm2, Kitty, WezTerm)

1021 

1022* Terminal.app no admite enlaces clickeables

1023 

1024* Si el texto del enlace aparece pero no es clickeable, Claude Code puede no haber detectado soporte de hipervínculos en tu terminal. Esto afecta comúnmente a Windows Terminal y otros emuladores no en la lista de detección automática. Establece la variable de entorno `FORCE_HYPERLINK` para anular la detección antes de lanzar Claude Code:

1025 

1026 ```bash theme={null}

1027 FORCE_HYPERLINK=1 claude

1028 ```

1029 

1030 En PowerShell, establece la variable en la sesión actual primero:

1031 

1032 ```powershell theme={null}

1033 $env:FORCE_HYPERLINK = "1"; claude

1034 ```

1035 

1036* Las sesiones SSH y tmux pueden eliminar secuencias OSC dependiendo de la configuración

1037 

1038* Si las secuencias de escape aparecen como texto literal como `\e]8;;`, usa `printf '%b'` en lugar de `echo -e` para un manejo más confiable de escapes

1039 

1040**Problemas de visualización con secuencias de escape**

1041 

1042* Las secuencias de escape complejas (colores ANSI, enlaces OSC 8) pueden ocasionalmente causar salida garbled si se superponen con otras actualizaciones de la interfaz

1043* Si ves texto corrupto, intenta simplificar tu script a salida de texto plano

1044* Las líneas de estado de múltiples líneas con códigos de escape son más propensas a problemas de renderizado que el texto plano de una sola línea

1045 

1046**Confianza del espacio de trabajo requerida**

1047 

1048* El comando de línea de estado solo se ejecuta si has aceptado el diálogo de confianza del espacio de trabajo para el directorio actual. Debido a que `statusLine` ejecuta un comando de shell, requiere la misma aceptación de confianza que hooks y otras configuraciones que ejecutan shell.

1049* Si la confianza no se acepta, verás la notificación `statusline skipped · restart to fix` en lugar de tu salida de línea de estado. Reinicia Claude Code y acepta el mensaje de confianza para habilitarlo.

1050 

1051**Errores de script o bloqueos**

1052 

1053* Los scripts que salen con códigos distintos de cero o no producen salida hacen que la línea de estado se quede en blanco

1054* Los scripts lentos bloquean la línea de estado de actualizar hasta que se completen. Mantén los scripts rápidos para evitar salida obsoleta.

1055* Si una nueva actualización se activa mientras un script lento se está ejecutando, el script en vuelo se cancela

1056* Prueba tu script de forma independiente con entrada simulada antes de configurarlo

1057 

1058**Las notificaciones comparten la fila de la línea de estado**

1059 

1060* Las notificaciones del sistema como errores de servidor MCP y actualizaciones automáticas se muestran en el lado derecho de la misma fila que tu línea de estado. Las notificaciones transitorias como la advertencia de contexto bajo también ciclan a través de esta área.

1061* Habilitar el modo verbose agrega un contador de tokens a esta área

1062* En terminales estrechas, estas notificaciones pueden truncar tu salida de línea de estado

sub-agents.md +1011 −0 created

Details

1> ## Documentation Index

2> Fetch the complete documentation index at: https://code.claude.com/docs/llms.txt

3> Use this file to discover all available pages before exploring further.

4 

5# Crear subagentes personalizados

6 

7> Cree y utilice subagentes de IA especializados en Claude Code para flujos de trabajo específicos de tareas y una mejor gestión del contexto.

8 

9Los subagentes son asistentes de IA especializados que manejan tipos específicos de tareas. Utilice uno cuando una tarea secundaria inundaría su conversación principal con resultados de búsqueda, registros o contenidos de archivos que no volverá a consultar: el subagente realiza ese trabajo en su propio contexto y devuelve solo el resumen. Defina un subagente personalizado cuando siga generando el mismo tipo de trabajador con las mismas instrucciones.

10 

11Cada subagente se ejecuta en su propia ventana de contexto con un mensaje del sistema personalizado, acceso a herramientas específicas y permisos independientes. Cuando Claude encuentra una tarea que coincide con la descripción de un subagente, delega en ese subagente, que trabaja de forma independiente y devuelve resultados. Para ver el ahorro de contexto en la práctica, la [visualización de la ventana de contexto](/es/context-window) muestra un recorrido por una sesión donde un subagente maneja la investigación en su propia ventana separada.

12 

13<Note>

14 Si necesita múltiples agentes trabajando en paralelo y comunicándose entre sí, consulte [equipos de agentes](/es/agent-teams) en su lugar. Los subagentes funcionan dentro de una única sesión; los equipos de agentes se coordinan entre sesiones separadas.

15</Note>

16 

17Los subagentes le ayudan a:

18 

19* **Preservar contexto** manteniendo la exploración e implementación fuera de su conversación principal

20* **Aplicar restricciones** limitando qué herramientas puede usar un subagente

21* **Reutilizar configuraciones** en proyectos con subagentes a nivel de usuario

22* **Especializar comportamiento** con mensajes del sistema enfocados para dominios específicos

23* **Controlar costos** enrutando tareas a modelos más rápidos y económicos como Haiku

24 

25Claude utiliza la descripción de cada subagente para decidir cuándo delegar tareas. Cuando crea un subagente, escriba una descripción clara para que Claude sepa cuándo usarlo.

26 

27Claude Code incluye varios subagentes integrados como **Explore**, **Plan** y **general-purpose**. También puede crear subagentes personalizados para manejar tareas específicas. Esta página cubre:

28 

29* [Subagentes integrados](#built-in-subagents)

30* [Cómo crear los suyos](#quickstart-create-your-first-subagent)

31* [Opciones de configuración completas](#configure-subagents)

32* [Patrones para trabajar con subagentes](#work-with-subagents)

33* [Subagentes bifurcados](#fork-the-current-conversation)

34* [Subagentes de ejemplo](#example-subagents)

35 

36## Subagentes integrados

37 

38Claude Code incluye subagentes integrados que Claude utiliza automáticamente cuando es apropiado. Cada uno hereda los permisos de la conversación principal con restricciones de herramientas adicionales.

39 

40<Tabs>

41 <Tab title="Explore">

42 Un agente rápido y de solo lectura optimizado para buscar y analizar bases de código.

43 

44 * **Modelo**: Haiku (rápido, baja latencia)

45 * **Herramientas**: Herramientas de solo lectura (acceso denegado a herramientas Write y Edit)

46 * **Propósito**: Descubrimiento de archivos, búsqueda de código, exploración de base de código

47 

48 Claude delega en Explore cuando necesita buscar o entender una base de código sin hacer cambios. Esto mantiene los resultados de exploración fuera del contexto de su conversación principal.

49 

50 Al invocar Explore, Claude especifica un nivel de minuciosidad: **quick** para búsquedas dirigidas, **medium** para exploración equilibrada, o **very thorough** para análisis exhaustivo.

51 </Tab>

52 

53 <Tab title="Plan">

54 Un agente de investigación utilizado durante [plan mode](/es/common-workflows#use-plan-mode-for-safe-code-analysis) para recopilar contexto antes de presentar un plan.

55 

56 * **Modelo**: Hereda de la conversación principal

57 * **Herramientas**: Herramientas de solo lectura (acceso denegado a herramientas Write y Edit)

58 * **Propósito**: Investigación de base de código para planificación

59 

60 Cuando está en plan mode y Claude necesita entender su base de código, delega la investigación al subagente Plan. Esto evita el anidamiento infinito (los subagentes no pueden generar otros subagentes) mientras sigue recopilando el contexto necesario.

61 </Tab>

62 

63 <Tab title="General-purpose">

64 Un agente capaz para tareas complejas de múltiples pasos que requieren tanto exploración como acción.

65 

66 * **Modelo**: Hereda de la conversación principal

67 * **Herramientas**: Todas las herramientas

68 * **Propósito**: Investigación compleja, operaciones de múltiples pasos, modificaciones de código

69 

70 Claude delega en general-purpose cuando la tarea requiere tanto exploración como modificación, razonamiento complejo para interpretar resultados, o múltiples pasos dependientes.

71 </Tab>

72 

73 <Tab title="Other">

74 Claude Code incluye agentes auxiliares adicionales para tareas específicas. Estos se invocan típicamente automáticamente, por lo que no necesita usarlos directamente.

75 

76 | Agente | Modelo | Cuándo Claude lo usa |

77 | :---------------- | :----- | :-------------------------------------------------------------- |

78 | statusline-setup | Sonnet | Cuando ejecuta `/statusline` para configurar su línea de estado |

79 | Claude Code Guide | Haiku | Cuando hace preguntas sobre características de Claude Code |

80 </Tab>

81</Tabs>

82 

83Más allá de estos subagentes integrados, puede crear los suyos propios con mensajes personalizados, restricciones de herramientas, modos de permisos, hooks y skills. Las siguientes secciones muestran cómo comenzar y personalizar subagentes.

84 

85## Inicio rápido: crear su primer subagente

86 

87Los subagentes se definen en archivos Markdown con frontmatter YAML. Puede [crearlos manualmente](#write-subagent-files) o usar el comando `/agents`.

88 

89Este tutorial lo guía a través de la creación de un subagente a nivel de usuario con el comando `/agents`. El subagente revisa código y sugiere mejoras para la base de código.

90 

91<Steps>

92 <Step title="Abrir la interfaz de subagentes">

93 En Claude Code, ejecute:

94 

95 ```text theme={null}

96 /agents

97 ```

98 </Step>

99 

100 <Step title="Elegir una ubicación">

101 Cambie a la pestaña **Library**, seleccione **Create new agent**, luego elija **Personal**. Esto guarda el subagente en `~/.claude/agents/` para que esté disponible en todos sus proyectos.

102 </Step>

103 

104 <Step title="Generar con Claude">

105 Seleccione **Generate with Claude**. Cuando se le solicite, describa el subagente:

106 

107 ```text theme={null}

108 A code improvement agent that scans files and suggests improvements

109 for readability, performance, and best practices. It should explain

110 each issue, show the current code, and provide an improved version.

111 ```

112 

113 Claude genera el identificador, descripción y mensaje del sistema para usted.

114 </Step>

115 

116 <Step title="Seleccionar herramientas">

117 Para un revisor de solo lectura, deseleccione todo excepto **Read-only tools**. Si mantiene todas las herramientas seleccionadas, el subagente hereda todas las herramientas disponibles para la conversación principal.

118 </Step>

119 

120 <Step title="Seleccionar modelo">

121 Elija qué modelo usa el subagente. Para este agente de ejemplo, seleccione **Sonnet**, que equilibra capacidad y velocidad para analizar patrones de código.

122 </Step>

123 

124 <Step title="Elegir un color">

125 Elija un color de fondo para el subagente. Esto le ayuda a identificar qué subagente se está ejecutando en la interfaz de usuario.

126 </Step>

127 

128 <Step title="Configurar memoria">

129 Seleccione **User scope** para dar al subagente un [directorio de memoria persistente](#enable-persistent-memory) en `~/.claude/agent-memory/`. El subagente usa esto para acumular insights entre conversaciones, como patrones de base de código y problemas recurrentes. Seleccione **None** si no desea que el subagente persista aprendizajes.

130 </Step>

131 

132 <Step title="Guardar e intentarlo">

133 Revise el resumen de configuración. Presione `s` o `Enter` para guardar, o presione `e` para guardar y editar el archivo en su editor. El subagente está disponible inmediatamente. Intente:

134 

135 ```text theme={null}

136 Use the code-improver agent to suggest improvements in this project

137 ```

138 

139 Claude delega en su nuevo subagente, que escanea la base de código y devuelve sugerencias de mejora.

140 </Step>

141</Steps>

142 

143Ahora tiene un subagente que puede usar en cualquier proyecto en su máquina para analizar bases de código y sugerir mejoras.

144 

145También puede crear subagentes manualmente como archivos Markdown, definirlos mediante banderas CLI, o distribuirlos a través de plugins. Las siguientes secciones cubren todas las opciones de configuración.

146 

147## Configurar subagentes

148 

149### Usar el comando /agents

150 

151El comando `/agents` abre una interfaz con pestañas para administrar subagentes. La pestaña **Running** muestra subagentes activos y le permite abrirlos o detenerlos. La pestaña **Library** le permite:

152 

153* Ver todos los subagentes disponibles (integrados, usuario, proyecto y plugin)

154* Crear nuevos subagentes con configuración guiada o generación de Claude

155* Editar la configuración de subagentes existentes y el acceso a herramientas

156* Eliminar subagentes personalizados

157* Ver qué subagentes están activos cuando existen duplicados

158 

159Esta es la forma recomendada de crear y administrar subagentes. Para creación manual o automatización, también puede agregar archivos de subagentes directamente.

160 

161Para enumerar todos los subagentes configurados desde la línea de comandos sin iniciar una sesión interactiva, ejecute `claude agents`. Esto muestra agentes agrupados por fuente e indica cuáles se anulan por definiciones de mayor prioridad.

162 

163### Elegir el alcance del subagente

164 

165Los subagentes son archivos Markdown con frontmatter YAML. Guárdelos en diferentes ubicaciones según el alcance. Cuando múltiples subagentes comparten el mismo nombre, la ubicación de mayor prioridad gana.

166 

167| Ubicación | Alcance | Prioridad | Cómo crear |

168| :------------------------------ | :------------------------------ | :----------- | :------------------------------------------------------------------ |

169| Configuración administrada | Toda la organización | 1 (más alta) | Implementado a través de [configuración administrada](/es/settings) |

170| Bandera CLI `--agents` | Sesión actual | 2 | Pasar JSON al lanzar Claude Code |

171| `.claude/agents/` | Proyecto actual | 3 | Interactivo o manual |

172| `~/.claude/agents/` | Todos sus proyectos | 4 | Interactivo o manual |

173| Directorio `agents/` del plugin | Donde el plugin está habilitado | 5 (más baja) | Instalado con [plugins](/es/plugins) |

174 

175**Los subagentes de proyecto** (`.claude/agents/`) son ideales para subagentes específicos de una base de código. Verifíquelos en control de versiones para que su equipo pueda usarlos y mejorarlos colaborativamente.

176 

177Los subagentes se descubren caminando hacia arriba desde el directorio de trabajo actual. Los directorios agregados con `--add-dir` [otorgan acceso a archivos solamente](/es/permissions#additional-directories-grant-file-access-not-configuration) y no se escanean para subagentes. Para compartir subagentes entre proyectos, use `~/.claude/agents/` o un [plugin](/es/plugins).

178 

179**Los subagentes de usuario** (`~/.claude/agents/`) son subagentes personales disponibles en todos sus proyectos.

180 

181**Los subagentes definidos por CLI** se pasan como JSON al lanzar Claude Code. Existen solo para esa sesión y no se guardan en disco, lo que los hace útiles para pruebas rápidas o scripts de automatización. Puede definir múltiples subagentes en una única llamada `--agents`:

182 

183```bash theme={null}

184claude --agents '{

185 "code-reviewer": {

186 "description": "Expert code reviewer. Use proactively after code changes.",

187 "prompt": "You are a senior code reviewer. Focus on code quality, security, and best practices.",

188 "tools": ["Read", "Grep", "Glob", "Bash"],

189 "model": "sonnet"

190 },

191 "debugger": {

192 "description": "Debugging specialist for errors and test failures.",

193 "prompt": "You are an expert debugger. Analyze errors, identify root causes, and provide fixes."

194 }

195}'

196```

197 

198La bandera `--agents` acepta JSON con los mismos campos de [frontmatter](#supported-frontmatter-fields) que los subagentes basados en archivos: `description`, `prompt`, `tools`, `disallowedTools`, `model`, `permissionMode`, `mcpServers`, `hooks`, `maxTurns`, `skills`, `initialPrompt`, `memory`, `effort`, `background`, `isolation` y `color`. Use `prompt` para el mensaje del sistema, equivalente al cuerpo markdown en subagentes basados en archivos.

199 

200**Los subagentes administrados** son implementados por administradores de la organización. Coloque archivos markdown en `.claude/agents/` dentro del [directorio de configuración administrada](/es/settings#settings-files), usando el mismo formato de frontmatter que los subagentes de proyecto y usuario. Las definiciones administradas tienen precedencia sobre los subagentes de proyecto y usuario con el mismo nombre.

201 

202**Los subagentes de plugin** provienen de [plugins](/es/plugins) que ha instalado. Aparecen en `/agents` junto a sus subagentes personalizados. Consulte la [referencia de componentes de plugin](/es/plugins-reference#agents) para obtener detalles sobre la creación de subagentes de plugin.

203 

204<Note>

205 Por razones de seguridad, los subagentes de plugin no soportan los campos de frontmatter `hooks`, `mcpServers`, o `permissionMode`. Estos campos se ignoran al cargar agentes desde un plugin. Si los necesita, copie el archivo del agente en `.claude/agents/` o `~/.claude/agents/`. También puede agregar reglas a [`permissions.allow`](/es/settings#permission-settings) en `settings.json` o `settings.local.json`, pero estas reglas se aplican a toda la sesión, no solo al subagente del plugin.

206</Note>

207 

208Las definiciones de subagentes de cualquiera de estos alcances también están disponibles para [equipos de agentes](/es/agent-teams#use-subagent-definitions-for-teammates): al generar un compañero de equipo, puede hacer referencia a un tipo de subagente y el compañero hereda sus `tools` y `model`, con el cuerpo de la definición anexado al mensaje del sistema del compañero como instrucciones adicionales. Consulte [equipos de agentes](/es/agent-teams#use-subagent-definitions-for-teammates) para ver qué campos de frontmatter se aplican en esa ruta.

209 

210### Escribir archivos de subagentes

211 

212Los archivos de subagentes usan frontmatter YAML para configuración, seguido del mensaje del sistema en Markdown:

213 

214<Note>

215 Los subagentes se cargan al inicio de la sesión. Si crea un subagente agregando manualmente un archivo, reinicie su sesión o use `/agents` para cargarlo inmediatamente.

216</Note>

217 

218```markdown theme={null}

219---

220name: code-reviewer

221description: Reviews code for quality and best practices

222tools: Read, Glob, Grep

223model: sonnet

224---

225 

226You are a code reviewer. When invoked, analyze the code and provide

227specific, actionable feedback on quality, security, and best practices.

228```

229 

230El frontmatter define los metadatos y la configuración del subagente. El cuerpo se convierte en el mensaje del sistema que guía el comportamiento del subagente. Los subagentes reciben solo este mensaje del sistema (más detalles básicos del entorno como el directorio de trabajo), no el mensaje del sistema completo de Claude Code.

231 

232Un subagente comienza en el directorio de trabajo actual de la conversación principal. Dentro de un subagente, los comandos `cd` no persisten entre llamadas de herramientas Bash o PowerShell y no afectan el directorio de trabajo de la conversación principal. Para dar al subagente una copia aislada del repositorio en su lugar, establezca [`isolation: worktree`](#supported-frontmatter-fields).

233 

234#### Campos de frontmatter soportados

235 

236Los siguientes campos se pueden usar en el frontmatter YAML. Solo `name` y `description` son requeridos.

237 

238| Campo | Requerido | Descripción |

239| :---------------- | :-------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

240| `name` | Sí | Identificador único usando letras minúsculas y guiones |

241| `description` | Sí | Cuándo Claude debe delegar en este subagente |

242| `tools` | No | [Herramientas](#available-tools) que el subagente puede usar. Hereda todas las herramientas si se omite |

243| `disallowedTools` | No | Herramientas a denegar, eliminadas de la lista heredada o especificada |

244| `model` | No | [Modelo](#choose-a-model) a usar: `sonnet`, `opus`, `haiku`, un ID de modelo completo (por ejemplo, `claude-opus-4-7`), o `inherit`. Por defecto es `inherit` |

245| `permissionMode` | No | [Modo de permiso](#permission-modes): `default`, `acceptEdits`, `auto`, `dontAsk`, `bypassPermissions`, o `plan`. Se ignora para [subagentes de plugin](#choose-the-subagent-scope) |

246| `maxTurns` | No | Número máximo de turnos de agente antes de que el subagente se detenga |

247| `skills` | No | [Skills](/es/skills) a cargar en el contexto del subagente al inicio. El contenido completo de la skill se inyecta, no solo se pone disponible para invocación. Los subagentes no heredan skills de la conversación principal |

248| `mcpServers` | No | [Servidores MCP](/es/mcp) disponibles para este subagente. Cada entrada es un nombre de servidor que hace referencia a un servidor ya configurado (por ejemplo, `"slack"`) o una definición en línea con el nombre del servidor como clave y una [configuración completa del servidor MCP](/es/mcp#installing-mcp-servers) como valor. Se ignora para [subagentes de plugin](#choose-the-subagent-scope) |

249| `hooks` | No | [Hooks de ciclo de vida](#define-hooks-for-subagents) limitados a este subagente. Se ignora para [subagentes de plugin](#choose-the-subagent-scope) |

250| `memory` | No | [Alcance de memoria persistente](#enable-persistent-memory): `user`, `project`, o `local`. Habilita aprendizaje entre sesiones |

251| `background` | No | Establecer en `true` para ejecutar siempre este subagente como una [tarea de fondo](#run-subagents-in-foreground-or-background). Por defecto: `false` |

252| `effort` | No | Nivel de esfuerzo cuando este subagente está activo. Anula el nivel de esfuerzo de la sesión. Por defecto: hereda de la sesión. Opciones: `low`, `medium`, `high`, `xhigh`, `max`; los niveles disponibles dependen del modelo |

253| `isolation` | No | Establecer en `worktree` para ejecutar el subagente en un [git worktree](/es/common-workflows#run-parallel-claude-code-sessions-with-git-worktrees) temporal, dándole una copia aislada del repositorio. El worktree se limpia automáticamente si el subagente no realiza cambios |

254| `color` | No | Color de visualización para el subagente en la lista de tareas y transcripción. Acepta `red`, `blue`, `green`, `yellow`, `purple`, `orange`, `pink`, o `cyan` |

255| `initialPrompt` | No | Se envía automáticamente como el primer turno de usuario cuando este agente se ejecuta como el agente de sesión principal (a través de `--agent` o la configuración `agent`). Se procesan [comandos](/es/commands) y [skills](/es/skills). Se antepone a cualquier mensaje proporcionado por el usuario |

256 

257### Elegir un modelo

258 

259El campo `model` controla qué [modelo de IA](/es/model-config) usa el subagente:

260 

261* **Alias de modelo**: Use uno de los alias disponibles: `sonnet`, `opus`, o `haiku`

262* **ID de modelo completo**: Use un ID de modelo completo como `claude-opus-4-7` o `claude-sonnet-4-6`. Acepta los mismos valores que la bandera `--model`

263* **inherit**: Use el mismo modelo que la conversación principal

264* **Omitido**: Si no se especifica, por defecto es `inherit` (usa el mismo modelo que la conversación principal)

265 

266Cuando Claude invoca un subagente, también puede pasar un parámetro `model` para esa invocación específica. Claude Code resuelve el modelo del subagente en este orden:

267 

2681. La variable de entorno [`CLAUDE_CODE_SUBAGENT_MODEL`](/es/model-config#environment-variables), si está establecida

2692. El parámetro `model` por invocación

2703. El frontmatter `model` de la definición del subagente

2714. El modelo de la conversación principal

272 

273### Controlar capacidades de subagentes

274 

275Puede controlar qué pueden hacer los subagentes a través del acceso a herramientas, modos de permisos y reglas condicionales.

276 

277#### Herramientas disponibles

278 

279Los subagentes pueden usar cualquiera de las [herramientas internas](/es/tools-reference) de Claude Code. Por defecto, los subagentes heredan todas las herramientas de la conversación principal, incluidas las herramientas MCP.

280 

281Para restringir herramientas, use el campo `tools` (lista blanca) o el campo `disallowedTools` (lista negra). Este ejemplo usa `tools` para permitir exclusivamente Read, Grep, Glob y Bash. El subagente no puede editar archivos, escribir archivos, o usar ninguna herramienta MCP:

282 

283```yaml theme={null}

284---

285name: safe-researcher

286description: Research agent with restricted capabilities

287tools: Read, Grep, Glob, Bash

288---

289```

290 

291Este ejemplo usa `disallowedTools` para heredar todas las herramientas de la conversación principal excepto Write y Edit. El subagente mantiene Bash, herramientas MCP y todo lo demás:

292 

293```yaml theme={null}

294---

295name: no-writes

296description: Inherits every tool except file writes

297disallowedTools: Write, Edit

298---

299```

300 

301Si ambos se establecen, `disallowedTools` se aplica primero, luego `tools` se resuelve contra el grupo restante. Una herramienta listada en ambos se elimina.

302 

303#### Restringir qué subagentes pueden ser generados

304 

305Cuando un agente se ejecuta como el hilo principal con `claude --agent`, puede generar subagentes usando la herramienta Agent. Para restringir qué tipos de subagentes puede generar, use la sintaxis `Agent(agent_type)` en el campo `tools`.

306 

307<Note>En la versión 2.1.63, la herramienta Task fue renombrada a Agent. Las referencias existentes a `Task(...)` en configuraciones y definiciones de agentes aún funcionan como alias.</Note>

308 

309```yaml theme={null}

310---

311name: coordinator

312description: Coordinates work across specialized agents

313tools: Agent(worker, researcher), Read, Bash

314---

315```

316 

317Esta es una lista blanca: solo los subagentes `worker` y `researcher` pueden ser generados. Si el agente intenta generar cualquier otro tipo, la solicitud falla y el agente solo ve los tipos permitidos en su mensaje. Para bloquear agentes específicos mientras se permiten todos los demás, use [`permissions.deny`](#disable-specific-subagents) en su lugar.

318 

319Para permitir generar cualquier subagente sin restricciones, use `Agent` sin paréntesis:

320 

321```yaml theme={null}

322tools: Agent, Read, Bash

323```

324 

325Si `Agent` se omite completamente de la lista `tools`, el agente no puede generar ningún subagente. Esta restricción solo se aplica a agentes que se ejecutan como el hilo principal con `claude --agent`. Los subagentes no pueden generar otros subagentes, por lo que `Agent(agent_type)` no tiene efecto en definiciones de subagentes.

326 

327#### Alcance de servidores MCP a un subagente

328 

329Use el campo `mcpServers` para dar a un subagente acceso a servidores [MCP](/es/mcp) que no están disponibles en la conversación principal. Los servidores en línea definidos aquí se conectan cuando el subagente comienza y se desconectan cuando termina. Las referencias de cadena comparten la conexión de la sesión principal.

330 

331<Note>

332 El campo `mcpServers` se aplica en ambos contextos donde un archivo de agente puede ejecutarse:

333 

334 * Como un subagente, generado a través de la herramienta Agent o una @-mención

335 * Como la sesión principal, lanzada con [`--agent`](#invoke-subagents-explicitly) o la configuración `agent`

336 

337 Cuando el agente es la sesión principal, las definiciones de servidor en línea se conectan al inicio junto con servidores de [`.mcp.json`](/es/mcp) y archivos de configuración.

338</Note>

339 

340Cada entrada en la lista es una definición de servidor en línea o una cadena que hace referencia a un servidor MCP ya configurado en su sesión:

341 

342```yaml theme={null}

343---

344name: browser-tester

345description: Tests features in a real browser using Playwright

346mcpServers:

347 # Inline definition: scoped to this subagent only

348 - playwright:

349 type: stdio

350 command: npx

351 args: ["-y", "@playwright/mcp@latest"]

352 # Reference by name: reuses an already-configured server

353 - github

354---

355 

356Use the Playwright tools to navigate, screenshot, and interact with pages.

357```

358 

359Las definiciones en línea usan el mismo esquema que las entradas del servidor `.mcp.json` (`stdio`, `http`, `sse`, `ws`), con clave del nombre del servidor.

360 

361Para mantener un servidor MCP fuera de la conversación principal por completo y evitar que sus descripciones de herramientas consuman contexto allí, defínalo en línea aquí en lugar de en `.mcp.json`. El subagente obtiene las herramientas; la conversación principal no.

362 

363#### Modos de permiso

364 

365El campo `permissionMode` controla cómo el subagente maneja solicitudes de permiso. Los subagentes heredan el contexto de permiso de la conversación principal y pueden anular el modo, excepto cuando el modo principal tiene precedencia como se describe a continuación.

366 

367| Modo | Comportamiento |

368| :------------------ | :------------------------------------------------------------------------------------------------------------------------------------------------------- |

369| `default` | Verificación de permiso estándar con solicitudes |

370| `acceptEdits` | Aceptar automáticamente ediciones de archivo y comandos comunes del sistema de archivos para rutas en el directorio de trabajo o `additionalDirectories` |

371| `auto` | [Modo auto](/es/permission-modes#eliminate-prompts-with-auto-mode): un clasificador de IA evalúa cada llamada de herramienta |

372| `dontAsk` | Denegar automáticamente solicitudes de permiso (las herramientas explícitamente permitidas aún funcionan) |

373| `bypassPermissions` | Omitir solicitudes de permiso |

374| `plan` | Modo plan (exploración de solo lectura) |

375 

376<Warning>

377 Use `bypassPermissions` con cuidado. Omite solicitudes de permiso, permitiendo que el subagente ejecute operaciones sin aprobación, incluidas escrituras en `.git`, `.claude`, `.vscode`, `.idea` y `.husky`. Las eliminaciones de directorio raíz y directorio de inicio como `rm -rf /` aún solicitan confirmación como un cortacircuitos. Consulte [modos de permiso](/es/permission-modes#skip-all-checks-with-bypasspermissions-mode) para detalles.

378</Warning>

379 

380Si el principal usa `bypassPermissions` o `acceptEdits`, esto tiene precedencia y no puede ser anulado. Si el principal usa [modo auto](/es/permission-modes#eliminate-prompts-with-auto-mode), el subagente hereda modo auto y cualquier `permissionMode` en su frontmatter se ignora: el clasificador evalúa las llamadas de herramientas del subagente con las mismas reglas de bloqueo y permiso que la sesión principal.

381 

382#### Precargar skills en subagentes

383 

384Use el campo `skills` para inyectar contenido de skill en el contexto de un subagente al inicio. Esto da al subagente conocimiento de dominio sin requerir que descubra y cargue skills durante la ejecución.

385 

386```yaml theme={null}

387---

388name: api-developer

389description: Implement API endpoints following team conventions

390skills:

391 - api-conventions

392 - error-handling-patterns

393---

394 

395Implement API endpoints. Follow the conventions and patterns from the preloaded skills.

396```

397 

398El contenido completo de cada skill se inyecta en el contexto del subagente, no solo se pone disponible para invocación. Los subagentes no heredan skills de la conversación principal; debe enumerarlas explícitamente.

399 

400No puede precargar skills que establezcan [`disable-model-invocation: true`](/es/skills#control-who-invokes-a-skill), ya que la precarga se extrae del mismo conjunto de skills que Claude puede invocar. Si una skill listada falta o está deshabilitada, Claude Code la omite y registra una advertencia en el registro de depuración.

401 

402<Note>

403 Esto es lo inverso de [ejecutar una skill en un subagente](/es/skills#run-skills-in-a-subagent). Con `skills` en un subagente, el subagente controla el mensaje del sistema y carga contenido de skill. Con `context: fork` en una skill, el contenido de la skill se inyecta en el agente que especifique. Ambos usan el mismo sistema subyacente.

404</Note>

405 

406#### Habilitar memoria persistente

407 

408El campo `memory` da al subagente un directorio persistente que sobrevive entre conversaciones. El subagente usa este directorio para acumular conocimiento con el tiempo, como patrones de base de código, insights de depuración y decisiones arquitectónicas.

409 

410```yaml theme={null}

411---

412name: code-reviewer

413description: Reviews code for quality and best practices

414memory: user

415---

416 

417You are a code reviewer. As you review code, update your agent memory with

418patterns, conventions, and recurring issues you discover.

419```

420 

421Elija un alcance basado en qué tan ampliamente debe aplicarse la memoria:

422 

423| Alcance | Ubicación | Usar cuando |

424| :-------- | :-------------------------------------------- | :----------------------------------------------------------------------------------------------------------- |

425| `user` | `~/.claude/agent-memory/<name-of-agent>/` | el subagente debe recordar aprendizajes en todos los proyectos |

426| `project` | `.claude/agent-memory/<name-of-agent>/` | el conocimiento del subagente es específico del proyecto y compartible a través de control de versiones |

427| `local` | `.claude/agent-memory-local/<name-of-agent>/` | el conocimiento del subagente es específico del proyecto pero no debe ser verificado en control de versiones |

428 

429Cuando la memoria está habilitada:

430 

431* El mensaje del sistema del subagente incluye instrucciones para leer y escribir en el directorio de memoria.

432* El mensaje del sistema del subagente también incluye las primeras 200 líneas o 25KB de `MEMORY.md` en el directorio de memoria, lo que sea menor, con instrucciones para curar `MEMORY.md` si excede ese límite.

433* Las herramientas Read, Write y Edit se habilitan automáticamente para que el subagente pueda administrar sus archivos de memoria.

434 

435##### Consejos de memoria persistente

436 

437* `project` es el alcance predeterminado recomendado. Hace que el conocimiento del subagente sea compartible a través de control de versiones. Use `user` cuando el conocimiento del subagente es ampliamente aplicable en proyectos, o `local` cuando el conocimiento no debe ser verificado en control de versiones.

438* Pida al subagente que consulte su memoria antes de comenzar el trabajo: "Review this PR, and check your memory for patterns you've seen before."

439* Pida al subagente que actualice su memoria después de completar una tarea: "Now that you're done, save what you learned to your memory." Con el tiempo, esto construye una base de conocimiento que hace que el subagente sea más efectivo.

440* Incluya instrucciones de memoria directamente en el archivo markdown del subagente para que mantenga proactivamente su propia base de conocimiento:

441 

442 ```markdown theme={null}

443 Update your agent memory as you discover codepaths, patterns, library

444 locations, and key architectural decisions. This builds up institutional

445 knowledge across conversations. Write concise notes about what you found

446 and where.

447 ```

448 

449#### Reglas condicionales con hooks

450 

451Para un control más dinámico sobre el uso de herramientas, use hooks `PreToolUse` para validar operaciones antes de que se ejecuten. Esto es útil cuando necesita permitir algunas operaciones de una herramienta mientras bloquea otras.

452 

453Este ejemplo crea un subagente que solo permite consultas de base de datos de solo lectura. El hook `PreToolUse` ejecuta el script especificado en `command` antes de que se ejecute cada comando Bash:

454 

455```yaml theme={null}

456---

457name: db-reader

458description: Execute read-only database queries

459tools: Bash

460hooks:

461 PreToolUse:

462 - matcher: "Bash"

463 hooks:

464 - type: command

465 command: "./scripts/validate-readonly-query.sh"

466---

467```

468 

469Claude Code [pasa la entrada del hook como JSON](/es/hooks#pretooluse-input) a través de stdin a comandos de hook. El script de validación lee este JSON, extrae el comando Bash y [sale con código 2](/es/hooks#exit-code-2-behavior-per-event) para bloquear operaciones de escritura:

470 

471```bash theme={null}

472#!/bin/bash

473# ./scripts/validate-readonly-query.sh

474 

475INPUT=$(cat)

476COMMAND=$(echo "$INPUT" | jq -r '.tool_input.command // empty')

477 

478# Block SQL write operations (case-insensitive)

479if echo "$COMMAND" | grep -iE '\b(INSERT|UPDATE|DELETE|DROP|CREATE|ALTER|TRUNCATE)\b' > /dev/null; then

480 echo "Blocked: Only SELECT queries are allowed" >&2

481 exit 2

482fi

483 

484exit 0

485```

486 

487Consulte [Hook input](/es/hooks#pretooluse-input) para el esquema de entrada completo y [códigos de salida](/es/hooks#exit-code-output) para cómo los códigos de salida afectan el comportamiento.

488 

489#### Deshabilitar subagentes específicos

490 

491Puede evitar que Claude use subagentes específicos agregándolos a la matriz `deny` en su [configuración](/es/settings#permission-settings). Use el formato `Agent(subagent-name)` donde `subagent-name` coincida con el campo name del subagente.

492 

493```json theme={null}

494{

495 "permissions": {

496 "deny": ["Agent(Explore)", "Agent(my-custom-agent)"]

497 }

498}

499```

500 

501Esto funciona para subagentes integrados y personalizados. También puede usar la bandera CLI `--disallowedTools`:

502 

503```bash theme={null}

504claude --disallowedTools "Agent(Explore)"

505```

506 

507Consulte la [documentación de Permisos](/es/permissions#tool-specific-permission-rules) para más detalles sobre reglas de permisos.

508 

509### Definir hooks para subagentes

510 

511Los subagentes pueden definir [hooks](/es/hooks) que se ejecutan durante el ciclo de vida del subagente. Hay dos formas de configurar hooks:

512 

5131. **En el frontmatter del subagente**: Defina hooks que se ejecuten solo mientras ese subagente está activo

5142. **En `settings.json`**: Defina hooks que se ejecuten en la sesión principal cuando los subagentes comienzan o se detienen

515 

516#### Hooks en frontmatter de subagentes

517 

518Defina hooks directamente en el archivo markdown del subagente. Estos hooks solo se ejecutan mientras ese subagente específico está activo y se limpian cuando termina.

519 

520<Note>

521 Los hooks de frontmatter se disparan cuando el agente se genera como un subagente a través de la herramienta Agent o una @-mención, y cuando el agente se ejecuta como la sesión principal a través de [`--agent`](#invoke-subagents-explicitly) o la configuración `agent`. En el caso de sesión principal, se ejecutan junto con cualquier hook definido en [`settings.json`](/es/hooks).

522</Note>

523 

524Se soportan todos los [eventos de hook](/es/hooks#hook-events). Los eventos más comunes para subagentes son:

525 

526| Evento | Entrada del matcher | Cuándo se dispara |

527| :------------ | :-------------------- | :------------------------------------------------------------------------------- |

528| `PreToolUse` | Nombre de herramienta | Antes de que el subagente use una herramienta |

529| `PostToolUse` | Nombre de herramienta | Después de que el subagente usa una herramienta |

530| `Stop` | (ninguno) | Cuando el subagente termina (convertido a `SubagentStop` en tiempo de ejecución) |

531 

532Este ejemplo valida comandos Bash con el hook `PreToolUse` y ejecuta un linter después de ediciones de archivo con `PostToolUse`:

533 

534```yaml theme={null}

535---

536name: code-reviewer

537description: Review code changes with automatic linting

538hooks:

539 PreToolUse:

540 - matcher: "Bash"

541 hooks:

542 - type: command

543 command: "./scripts/validate-command.sh $TOOL_INPUT"

544 PostToolUse:

545 - matcher: "Edit|Write"

546 hooks:

547 - type: command

548 command: "./scripts/run-linter.sh"

549---

550```

551 

552Cuando el agente se invoca como un subagente, los hooks `Stop` en frontmatter se convierten automáticamente a eventos `SubagentStop`.

553 

554#### Hooks a nivel de proyecto para eventos de subagentes

555 

556Configure hooks en `settings.json` que respondan a eventos de ciclo de vida de subagentes en la sesión principal.

557 

558| Evento | Entrada del matcher | Cuándo se dispara |

559| :-------------- | :----------------------- | :---------------------------------------- |

560| `SubagentStart` | Nombre de tipo de agente | Cuando un subagente comienza la ejecución |

561| `SubagentStop` | Nombre de tipo de agente | Cuando un subagente se completa |

562 

563Ambos eventos soportan matchers para dirigirse a tipos de agentes específicos por nombre. Este ejemplo ejecuta un script de configuración solo cuando el subagente `db-agent` comienza, y un script de limpieza cuando cualquier subagente se detiene:

564 

565```json theme={null}

566{

567 "hooks": {

568 "SubagentStart": [

569 {

570 "matcher": "db-agent",

571 "hooks": [

572 { "type": "command", "command": "./scripts/setup-db-connection.sh" }

573 ]

574 }

575 ],

576 "SubagentStop": [

577 {

578 "hooks": [

579 { "type": "command", "command": "./scripts/cleanup-db-connection.sh" }

580 ]

581 }

582 ]

583 }

584}

585```

586 

587Consulte [Hooks](/es/hooks) para el formato de configuración de hook completo.

588 

589## Trabajar con subagentes

590 

591### Entender delegación automática

592 

593Claude delega automáticamente tareas basadas en la descripción de la tarea en su solicitud, el campo `description` en configuraciones de subagentes y el contexto actual. Para alentar delegación proactiva, incluya frases como "use proactively" en el campo description de su subagente.

594 

595### Invocar subagentes explícitamente

596 

597Cuando la delegación automática no es suficiente, puede solicitar un subagente usted mismo. Tres patrones escalan desde una sugerencia única a un valor predeterminado de sesión completa:

598 

599* **Lenguaje natural**: nombre el subagente en su solicitud; Claude decide si delegar

600* **@-mention**: garantiza que el subagente se ejecute para una tarea

601* **Sesión completa**: toda la sesión usa el mensaje del sistema del subagente, restricciones de herramientas y modelo a través de la bandera `--agent` o la configuración `agent`

602 

603Para lenguaje natural, no hay sintaxis especial. Nombre el subagente y Claude típicamente delega:

604 

605```text theme={null}

606Use the test-runner subagent to fix failing tests

607Have the code-reviewer subagent look at my recent changes

608```

609 

610**@-mention el subagente.** Escriba `@` y elija el subagente del typeahead, de la misma manera que @-menciona archivos. Esto asegura que ese subagente específico se ejecute en lugar de dejar la opción a Claude:

611 

612```text theme={null}

613@"code-reviewer (agent)" look at the auth changes

614```

615 

616Su mensaje completo aún va a Claude, que escribe el mensaje de tarea del subagente basado en lo que pidió. El @-mention controla qué subagente Claude invoca, no qué mensaje recibe.

617 

618Los subagentes proporcionados por un [plugin](/es/plugins) habilitado aparecen en el typeahead como `<plugin-name>:<agent-name>`. Los subagentes de fondo nombrados actualmente en ejecución en la sesión también aparecen en el typeahead, mostrando su estado junto al nombre. También puede escribir la mención manualmente sin usar el selector: `@agent-<name>` para subagentes locales, o `@agent-<plugin-name>:<agent-name>` para subagentes de plugin.

619 

620**Ejecute toda la sesión como un subagente.** Pase [`--agent <name>`](/es/cli-reference) para iniciar una sesión donde el hilo principal en sí toma el mensaje del sistema del subagente, restricciones de herramientas y modelo:

621 

622```bash theme={null}

623claude --agent code-reviewer

624```

625 

626El mensaje del sistema del subagente reemplaza completamente el mensaje del sistema predeterminado de Claude Code, de la misma manera que [`--system-prompt`](/es/cli-reference) lo hace. Los archivos `CLAUDE.md` y la memoria del proyecto aún se cargan a través del flujo de mensajes normal. El nombre del agente aparece como `@<name>` en el encabezado de inicio para que pueda confirmar que está activo.

627 

628Esto funciona con subagentes integrados y personalizados, y la opción persiste cuando reanuda la sesión.

629 

630Para un subagente proporcionado por plugin, pase el nombre con alcance: `claude --agent <plugin-name>:<agent-name>`.

631 

632Para hacerlo el predeterminado para cada sesión en un proyecto, establezca `agent` en `.claude/settings.json`:

633 

634```json theme={null}

635{

636 "agent": "code-reviewer"

637}

638```

639 

640La bandera CLI anula la configuración si ambas están presentes.

641 

642### Ejecutar subagentes en primer plano o fondo

643 

644Los subagentes pueden ejecutarse en primer plano (bloqueante) o fondo (concurrente):

645 

646* **Subagentes en primer plano** bloquean la conversación principal hasta completarse. Las solicitudes de permiso y preguntas aclaratorias (como [`AskUserQuestion`](/es/tools-reference)) se le pasan a usted.

647* **Subagentes en fondo** se ejecutan concurrentemente mientras continúa trabajando. Antes de lanzar, Claude Code solicita permisos de herramientas que el subagente necesitará, asegurando que tenga las aprobaciones necesarias por adelantado. Una vez en ejecución, el subagente hereda estos permisos y deniega automáticamente cualquier cosa no preaprobada. Si un subagente en fondo necesita hacer preguntas aclaratorias, esa llamada de herramienta falla pero el subagente continúa.

648 

649Si un subagente en fondo falla debido a permisos faltantes, puede iniciar un nuevo subagente en primer plano con la misma tarea para reintentar con solicitudes interactivas.

650 

651Claude decide si ejecutar subagentes en primer plano o fondo basado en la tarea. También puede:

652 

653* Pedir a Claude que "run this in the background"

654* Presionar **Ctrl+B** para poner en fondo una tarea en ejecución

655 

656Para deshabilitar toda la funcionalidad de tareas en fondo, establezca la variable de entorno `CLAUDE_CODE_DISABLE_BACKGROUND_TASKS` en `1`. Consulte [Variables de entorno](/es/env-vars).

657 

658Cuando [fork mode](#fork-the-current-conversation) está habilitado, cada generación de subagente se ejecuta en el fondo independientemente del campo `background`. Los forks aún muestran solicitudes de permiso en su terminal a medida que ocurren en lugar de preaprobación; los subagentes nombrados siguen el flujo de preaprobación anterior.

659 

660### Patrones comunes

661 

662#### Aislar operaciones de alto volumen

663 

664Uno de los usos más efectivos para subagentes es aislar operaciones que producen grandes cantidades de salida. Ejecutar pruebas, obtener documentación o procesar archivos de registro puede consumir contexto significativo. Al delegar estos a un subagente, la salida detallada permanece en el contexto del subagente mientras solo el resumen relevante regresa a su conversación principal.

665 

666```text theme={null}

667Use a subagent to run the test suite and report only the failing tests with their error messages

668```

669 

670#### Ejecutar investigación en paralelo

671 

672Para investigaciones independientes, genere múltiples subagentes para trabajar simultáneamente:

673 

674```text theme={null}

675Research the authentication, database, and API modules in parallel using separate subagents

676```

677 

678Cada subagente explora su área independientemente, luego Claude sintetiza los hallazgos. Esto funciona mejor cuando las rutas de investigación no dependen una de la otra.

679 

680<Warning>

681 Cuando los subagentes se completan, sus resultados regresan a su conversación principal. Ejecutar muchos subagentes que cada uno devuelve resultados detallados puede consumir contexto significativo.

682</Warning>

683 

684Para tareas que necesitan paralelismo sostenido o exceden su ventana de contexto, [equipos de agentes](/es/agent-teams) dan a cada trabajador su propio contexto independiente.

685 

686#### Encadenar subagentes

687 

688Para flujos de trabajo de múltiples pasos, pida a Claude que use subagentes en secuencia. Cada subagente completa su tarea y devuelve resultados a Claude, que luego pasa contexto relevante al siguiente subagente.

689 

690```text theme={null}

691Use the code-reviewer subagent to find performance issues, then use the optimizer subagent to fix them

692```

693 

694### Elegir entre subagentes y conversación principal

695 

696Use la **conversación principal** cuando:

697 

698* La tarea necesita ida y vuelta frecuente o refinamiento iterativo

699* Múltiples fases comparten contexto significativo (planificación → implementación → prueba)

700* Está haciendo un cambio rápido y dirigido

701* La latencia importa. Los subagentes comienzan frescos y pueden necesitar tiempo para recopilar contexto

702 

703Use **subagentes** cuando:

704 

705* La tarea produce salida detallada que no necesita en su contexto principal

706* Desea aplicar restricciones de herramientas específicas o permisos

707* El trabajo es autónomo y puede devolver un resumen

708 

709Considere [Skills](/es/skills) en su lugar cuando desee mensajes reutilizables o flujos de trabajo que se ejecuten en el contexto de conversación principal en lugar de contexto de subagente aislado.

710 

711Para una pregunta rápida sobre algo ya en su conversación, use [`/btw`](/es/interactive-mode#side-questions-with-%2Fbtw) en lugar de un subagente. Ve su contexto completo pero no tiene acceso a herramientas, y la respuesta se descarta en lugar de agregarse al historial.

712 

713<Note>

714 Los subagentes no pueden generar otros subagentes. Si su flujo de trabajo requiere delegación anidada, use [Skills](/es/skills) o [encadene subagentes](#chain-subagents) desde la conversación principal.

715</Note>

716 

717### Administrar contexto de subagentes

718 

719#### Reanudar subagentes

720 

721Cada invocación de subagente crea una nueva instancia con contexto fresco. Para continuar el trabajo de un subagente existente en lugar de comenzar de nuevo, pida a Claude que lo reanude.

722 

723Los subagentes reanudados retienen su historial de conversación completo, incluidas todas las llamadas de herramientas anteriores, resultados y razonamiento. El subagente continúa exactamente donde se detuvo en lugar de comenzar de nuevo.

724 

725Cuando un subagente se completa, Claude recibe su ID de agente. Claude usa la herramienta `SendMessage` con el ID del agente como campo `to` para reanudarlo. La herramienta `SendMessage` solo está disponible cuando [equipos de agentes](/es/agent-teams) están habilitados a través de `CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS=1`.

726 

727Para reanudar un subagente, pida a Claude que continúe el trabajo anterior:

728 

729```text theme={null}

730Use the code-reviewer subagent to review the authentication module

731[Agent completes]

732 

733Continue that code review and now analyze the authorization logic

734[Claude resumes the subagent with full context from previous conversation]

735```

736 

737Si un subagente detenido recibe un `SendMessage`, se reanuda automáticamente en el fondo sin requerir una nueva invocación de `Agent`.

738 

739También puede pedir a Claude el ID del agente si desea referenciarlo explícitamente, o encontrar IDs en los archivos de transcripción en `~/.claude/projects/{project}/{sessionId}/subagents/`. Cada transcripción se almacena como `agent-{agentId}.jsonl`.

740 

741Las transcripciones de subagentes persisten independientemente de la conversación principal:

742 

743* **Compactación de conversación principal**: Cuando la conversación principal se compacta, las transcripciones de subagentes no se ven afectadas. Se almacenan en archivos separados.

744* **Persistencia de sesión**: Las transcripciones de subagentes persisten dentro de su sesión. Puede [reanudar un subagente](#resume-subagents) después de reiniciar Claude Code reanudando la misma sesión.

745* **Limpieza automática**: Las transcripciones se limpian basadas en la configuración `cleanupPeriodDays` (por defecto: 30 días).

746 

747#### Auto-compactación

748 

749Los subagentes soportan compactación automática usando la misma lógica que la conversación principal. Por defecto, la auto-compactación se dispara aproximadamente al 95% de capacidad. Para disparar compactación más temprano, establezca `CLAUDE_AUTOCOMPACT_PCT_OVERRIDE` en un porcentaje más bajo (por ejemplo, `50`). Consulte [variables de entorno](/es/env-vars) para detalles.

750 

751Los eventos de compactación se registran en archivos de transcripción de subagentes:

752 

753```json theme={null}

754{

755 "type": "system",

756 "subtype": "compact_boundary",

757 "compactMetadata": {

758 "trigger": "auto",

759 "preTokens": 167189

760 }

761}

762```

763 

764El valor `preTokens` muestra cuántos tokens se usaron antes de que ocurriera la compactación.

765 

766## Bifurcar la conversación actual

767 

768<Note>

769 Los subagentes bifurcados son experimentales y requieren Claude Code v2.1.117 o posterior. El comportamiento y la configuración pueden cambiar en futuras versiones. Habilítelos estableciendo la variable de entorno [`CLAUDE_CODE_FORK_SUBAGENT`](/es/env-vars) en `1`. La variable se respeta en modo interactivo y a través del SDK o `claude -p`.

770</Note>

771 

772Un fork es un subagente que hereda toda la conversación hasta ahora en lugar de comenzar de nuevo. Esto elimina el aislamiento de entrada que los subagentes de otra manera proporcionan: un fork ve el mismo mensaje del sistema, herramientas, modelo e historial de mensajes que la sesión principal, para que pueda entregarle una tarea secundaria sin re-explicar la situación. Las propias llamadas de herramientas del fork aún permanecen fuera de su conversación y solo su resultado final regresa, por lo que su ventana de contexto principal permanece limpia. Use un fork cuando un subagente nombrado necesitaría demasiado contexto para ser útil, o cuando desee probar varios enfoques en paralelo desde el mismo punto de partida.

773 

774Habilitar fork mode cambia Claude Code de tres maneras:

775 

776* Claude genera un fork siempre que de otra manera usaría el subagente [general-purpose](#built-in-subagents). Los subagentes nombrados como Explore aún se generan como antes.

777* Cada generación de subagente se ejecuta en el [fondo](#run-subagents-in-foreground-or-background), ya sea un fork o un subagente nombrado. Establezca `CLAUDE_CODE_DISABLE_BACKGROUND_TASKS` en `1` para mantener los spawns síncronos.

778* El comando `/fork` genera un fork en lugar de actuar como un alias para [`/branch`](/es/commands).

779 

780Puede iniciar un fork usted mismo con `/fork` seguido de una directiva. Claude Code nombra el fork a partir de las primeras palabras de la directiva. El siguiente ejemplo bifurca la conversación para redactar casos de prueba mientras continúa con la implementación en la sesión principal:

781 

782```text theme={null}

783/fork draft unit tests for the parser changes so far

784```

785 

786El fork aparece en un panel debajo de su solicitud y se ejecuta en el fondo mientras continúa trabajando. Cuando termina, su resultado llega como un mensaje en su conversación principal. La siguiente sección cubre los controles del panel para observar y dirigir forks mientras se ejecutan.

787 

788### Observar y dirigir forks en ejecución

789 

790Los forks en ejecución aparecen en un panel debajo de la entrada de solicitud, con una fila para la sesión principal y una para cada fork. Use estas teclas para interactuar con el panel:

791 

792| Tecla | Acción |

793| :-------- | :------------------------------------------------------------------------------ |

794| `↑` / `↓` | Moverse entre filas |

795| `Enter` | Abrir la transcripción del fork seleccionado y enviarle mensajes de seguimiento |

796| `x` | Descartar un fork terminado o detener uno en ejecución |

797| `Esc` | Devolver el enfoque a la entrada de solicitud |

798 

799### Cómo los forks difieren de los subagentes nombrados

800 

801Un fork hereda todo lo que la sesión principal tiene en el momento en que se genera. Un subagente nombrado comienza desde su propia definición.

802 

803| | Fork | Subagente nombrado |

804| :--------------------------------- | :-------------------------------------- | :---------------------------------------------------------------------------------------------------------------- |

805| Contexto | Historial de conversación completo | Contexto fresco con la solicitud que pasa |

806| Mensaje del sistema y herramientas | Igual que la sesión principal | Del [archivo de definición](#write-subagent-files) del subagente |

807| Modelo | Igual que la sesión principal | Del campo `model` del subagente |

808| Permisos | Las solicitudes aparecen en su terminal | [Preaprobados](#run-subagents-in-foreground-or-background) antes del lanzamiento, luego denegados automáticamente |

809| Caché de solicitud | Compartido con la sesión principal | Caché separado |

810 

811Porque el mensaje del sistema del fork y las definiciones de herramientas son idénticas al principal, su primera solicitud reutiliza la caché de solicitud del principal. Esto hace que bifurcar sea más económico que generar un subagente fresco para tareas que necesitan el mismo contexto.

812 

813Cuando Claude genera un fork a través de la herramienta Agent, puede pasar `isolation: "worktree"` para que las ediciones de archivo del fork se escriban en un git worktree separado en lugar de su checkout.

814 

815### Limitaciones

816 

817Establecer `CLAUDE_CODE_FORK_SUBAGENT=1` habilita fork mode en sesiones interactivas, [modo no interactivo](/es/headless), y el Agent SDK. Un fork no puede generar más forks.

818 

819## Subagentes de ejemplo

820 

821Estos ejemplos demuestran patrones efectivos para construir subagentes. Úselos como puntos de partida, o genere una versión personalizada con Claude.

822 

823<Tip>

824 **Mejores prácticas:**

825 

826 * **Diseñe subagentes enfocados:** cada subagente debe sobresalir en una tarea específica

827 * **Escriba descripciones detalladas:** Claude usa la descripción para decidir cuándo delegar

828 * **Limite el acceso a herramientas:** otorgue solo permisos necesarios para seguridad y enfoque

829 * **Verifique en control de versiones:** comparta subagentes de proyecto con su equipo

830</Tip>

831 

832### Revisor de código

833 

834Un subagente de solo lectura que revisa código sin modificarlo. Este ejemplo muestra cómo diseñar un subagente enfocado con acceso limitado a herramientas (sin Edit o Write) y un mensaje detallado que especifica exactamente qué buscar y cómo formatear la salida.

835 

836```markdown theme={null}

837---

838name: code-reviewer

839description: Expert code review specialist. Proactively reviews code for quality, security, and maintainability. Use immediately after writing or modifying code.

840tools: Read, Grep, Glob, Bash

841model: inherit

842---

843 

844You are a senior code reviewer ensuring high standards of code quality and security.

845 

846When invoked:

8471. Run git diff to see recent changes

8482. Focus on modified files

8493. Begin review immediately

850 

851Review checklist:

852- Code is clear and readable

853- Functions and variables are well-named

854- No duplicated code

855- Proper error handling

856- No exposed secrets or API keys

857- Input validation implemented

858- Good test coverage

859- Performance considerations addressed

860 

861Provide feedback organized by priority:

862- Critical issues (must fix)

863- Warnings (should fix)

864- Suggestions (consider improving)

865 

866Include specific examples of how to fix issues.

867```

868 

869### Depurador

870 

871Un subagente que puede analizar y corregir problemas. A diferencia del revisor de código, este incluye Edit porque corregir errores requiere modificar código. El mensaje proporciona un flujo de trabajo claro desde diagnóstico hasta verificación.

872 

873```markdown theme={null}

874---

875name: debugger

876description: Debugging specialist for errors, test failures, and unexpected behavior. Use proactively when encountering any issues.

877tools: Read, Edit, Bash, Grep, Glob

878---

879 

880You are an expert debugger specializing in root cause analysis.

881 

882When invoked:

8831. Capture error message and stack trace

8842. Identify reproduction steps

8853. Isolate the failure location

8864. Implement minimal fix

8875. Verify solution works

888 

889Debugging process:

890- Analyze error messages and logs

891- Check recent code changes

892- Form and test hypotheses

893- Add strategic debug logging

894- Inspect variable states

895 

896For each issue, provide:

897- Root cause explanation

898- Evidence supporting the diagnosis

899- Specific code fix

900- Testing approach

901- Prevention recommendations

902 

903Focus on fixing the underlying issue, not the symptoms.

904```

905 

906### Científico de datos

907 

908Un subagente específico de dominio para trabajo de análisis de datos. Este ejemplo muestra cómo crear subagentes para flujos de trabajo especializados fuera de tareas de codificación típicas. Establece explícitamente `model: sonnet` para análisis más capaz.

909 

910```markdown theme={null}

911---

912name: data-scientist

913description: Data analysis expert for SQL queries, BigQuery operations, and data insights. Use proactively for data analysis tasks and queries.

914tools: Bash, Read, Write

915model: sonnet

916---

917 

918You are a data scientist specializing in SQL and BigQuery analysis.

919 

920When invoked:

9211. Understand the data analysis requirement

9222. Write efficient SQL queries

9233. Use BigQuery command line tools (bq) when appropriate

9244. Analyze and summarize results

9255. Present findings clearly

926 

927Key practices:

928- Write optimized SQL queries with proper filters

929- Use appropriate aggregations and joins

930- Include comments explaining complex logic

931- Format results for readability

932- Provide data-driven recommendations

933 

934For each analysis:

935- Explain the query approach

936- Document any assumptions

937- Highlight key findings

938- Suggest next steps based on data

939 

940Always ensure queries are efficient and cost-effective.

941```

942 

943### Validador de consultas de base de datos

944 

945Un subagente que permite acceso a Bash pero valida comandos para permitir solo consultas SQL de solo lectura. Este ejemplo muestra cómo usar hooks `PreToolUse` para validación condicional cuando necesita control más fino que el campo `tools` proporciona.

946 

947```markdown theme={null}

948---

949name: db-reader

950description: Execute read-only database queries. Use when analyzing data or generating reports.

951tools: Bash

952hooks:

953 PreToolUse:

954 - matcher: "Bash"

955 hooks:

956 - type: command

957 command: "./scripts/validate-readonly-query.sh"

958---

959 

960You are a database analyst with read-only access. Execute SELECT queries to answer questions about the data.

961 

962When asked to analyze data:

9631. Identify which tables contain the relevant data

9642. Write efficient SELECT queries with appropriate filters

9653. Present results clearly with context

966 

967You cannot modify data. If asked to INSERT, UPDATE, DELETE, or modify schema, explain that you only have read access.

968```

969 

970Claude Code [pasa la entrada del hook como JSON](/es/hooks#pretooluse-input) a través de stdin a comandos de hook. El script de validación lee este JSON, extrae el comando siendo ejecutado, y lo verifica contra una lista de operaciones de escritura SQL. Si se detecta una operación de escritura, el script [sale con código 2](/es/hooks#exit-code-2-behavior-per-event) para bloquear la ejecución y devuelve un mensaje de error a Claude a través de stderr.

971 

972Cree el script de validación en cualquier lugar en su proyecto. La ruta debe coincidir con el campo `command` en su configuración de hook:

973 

974```bash theme={null}

975#!/bin/bash

976# Blocks SQL write operations, allows SELECT queries

977 

978# Read JSON input from stdin

979INPUT=$(cat)

980 

981# Extract the command field from tool_input using jq

982COMMAND=$(echo "$INPUT" | jq -r '.tool_input.command // empty')

983 

984if [ -z "$COMMAND" ]; then

985 exit 0

986fi

987 

988# Block write operations (case-insensitive)

989if echo "$COMMAND" | grep -iE '\b(INSERT|UPDATE|DELETE|DROP|CREATE|ALTER|TRUNCATE|REPLACE|MERGE)\b' > /dev/null; then

990 echo "Blocked: Write operations not allowed. Use SELECT queries only." >&2

991 exit 2

992fi

993 

994exit 0

995```

996 

997Haga el script ejecutable:

998 

999```bash theme={null}

1000chmod +x ./scripts/validate-readonly-query.sh

1001```

1002 

1003El hook recibe JSON a través de stdin con el comando Bash en `tool_input.command`. El código de salida 2 bloquea la operación y alimenta el mensaje de error de vuelta a Claude. Consulte [Hooks](/es/hooks#exit-code-output) para detalles sobre códigos de salida y [Hook input](/es/hooks#pretooluse-input) para el esquema de entrada completo.

1004 

1005## Próximos pasos

1006 

1007Ahora que entiende subagentes, explore estas características relacionadas:

1008 

1009* [Distribuir subagentes con plugins](/es/plugins) para compartir subagentes entre equipos o proyectos

1010* [Ejecutar Claude Code programáticamente](/es/headless) con el Agent SDK para CI/CD y automatización

1011* [Usar servidores MCP](/es/mcp) para dar a los subagentes acceso a herramientas y datos externos

terminal-config.md +307 −0 created

Details

1> ## Documentation Index

2> Fetch the complete documentation index at: https://code.claude.com/docs/llms.txt

3> Use this file to discover all available pages before exploring further.

4 

5# Configura tu terminal para Claude Code

6 

7> Corrige Shift+Enter para saltos de línea, obtén una campana de terminal cuando Claude termine, configura tmux, haz coincidir el tema de color y habilita el modo Vim en la CLI de Claude Code.

8 

9Claude Code funciona en cualquier terminal sin configuración. Esta página es para cuando algo específico no se comporta como esperas. Encuentra tu síntoma a continuación. Si todo ya se siente bien, no necesitas esta página.

10 

11* [Shift+Enter envía en lugar de insertar un salto de línea](#enter-multiline-prompts)

12* [Los atajos de tecla Option no funcionan en macOS](#enable-option-key-shortcuts-on-macos)

13* [Sin sonido ni alerta cuando Claude termina](#get-a-terminal-bell-or-notification)

14* [Ejecutas Claude Code dentro de tmux](#configure-tmux)

15* [La pantalla parpadea o el desplazamiento salta](#switch-to-fullscreen-rendering)

16* [Quieres teclas Vim en el indicador](#edit-prompts-with-vim-keybindings)

17 

18Esta página trata sobre lograr que tu terminal envíe las señales correctas a Claude Code. Para cambiar qué teclas responde Claude Code, consulta [atajos de teclado](/es/keybindings) en su lugar.

19 

20## Ingresa indicadores multilínea

21 

22Presionar Enter envía tu mensaje. Para agregar un salto de línea sin enviar, presiona Ctrl+J, o escribe `\` y luego presiona Enter. Ambos funcionan en cada terminal sin configuración.

23 

24En la mayoría de terminales también puedes presionar Shift+Enter, pero el soporte varía según el emulador de terminal:

25 

26| Terminal | Shift+Enter para salto de línea |

27| :-------------------------------------------------------------------------------- | :------------------------------------------ |

28| Ghostty, Kitty, iTerm2, WezTerm, Warp, Apple Terminal | Funciona sin configuración |

29| VS Code, Cursor, Windsurf, Alacritty, Zed | Ejecuta `/terminal-setup` una vez |

30| Windows Terminal, gnome-terminal, IDEs de JetBrains como PyCharm y Android Studio | No disponible; usa Ctrl+J o `\` luego Enter |

31 

32Para VS Code, Cursor, Windsurf, Alacritty y Zed, `/terminal-setup` escribe Shift+Enter y otros atajos de teclado en el archivo de configuración de la terminal. En VS Code, Cursor y Windsurf también establece `terminal.integrated.mouseWheelScrollSensitivity` en la configuración del editor para un desplazamiento más suave en [modo pantalla completa](/es/fullscreen). Los enlaces existentes y la configuración se dejan en su lugar; si ve un mensaje como `VSCode terminal Shift+Enter key binding already configured`, no se realizó ningún cambio. Ejecuta `/terminal-setup` directamente en la terminal del host en lugar de dentro de tmux o screen, ya que necesita escribir en la configuración de la terminal del host.

33 

34Si estás ejecutando dentro de tmux, Shift+Enter también requiere la [configuración de tmux a continuación](#configure-tmux) incluso cuando la terminal externa la soporta.

35 

36Para vincular salto de línea a una tecla diferente, o para intercambiar el comportamiento de modo que Enter inserte un salto de línea y Shift+Enter envíe, mapea las acciones `chat:newline` y `chat:submit` en tu [archivo de atajos de teclado](/es/keybindings).

37 

38## Habilita atajos de tecla Option en macOS

39 

40Algunos atajos de Claude Code usan la tecla Option, como Option+Enter para un salto de línea u Option+P para cambiar modelos. En macOS, la mayoría de terminales no envían Option como modificador por defecto, por lo que estos atajos no hacen nada hasta que lo habilites. La configuración de terminal para esto generalmente se etiqueta como "Use Option as Meta Key"; Meta es el nombre histórico de Unix para la tecla ahora etiquetada como Option o Alt.

41 

42<Tabs>

43 <Tab title="Apple Terminal">

44 Abre Configuración → Perfiles → Teclado y marca "Use Option as Meta Key".

45 

46 Si aceptaste el indicador de primera ejecución de Claude Code que ofrecía "Option+Enter para saltos de línea y campana visual", esto ya está hecho. Ese indicador ejecuta `/terminal-setup` para ti, que habilita Option como Meta y cambia la campana de audio a un destello de pantalla visual en tu perfil de Apple Terminal.

47 </Tab>

48 

49 <Tab title="iTerm2">

50 Abre Configuración → Perfiles → Teclas → General y establece la tecla Option Izquierda y la tecla Option Derecha en "Esc+".

51 

52 Ejecutar `/terminal-setup` en iTerm2 habilita "Applications in terminal may access clipboard" en Configuración → General → Selection para que el comando `/copy` pueda escribir en tu portapapeles del sistema. El comando detecta iTerm2 incluso cuando se ejecuta desde dentro de tmux. Reinicia iTerm2 para que el cambio surta efecto.

53 </Tab>

54 

55 <Tab title="VS Code">

56 Agrega `"terminal.integrated.macOptionIsMeta": true` a tu configuración de VS Code.

57 </Tab>

58</Tabs>

59 

60Para Ghostty, Kitty y otras terminales, busca una configuración de Option-as-Alt u Option-as-Meta en el archivo de configuración de la terminal.

61 

62## Obtén una campana de terminal o notificación

63 

64Cuando Claude termina una tarea o se pausa para un indicador de permiso, dispara un evento de notificación. Mostrar esto como una campana de terminal o notificación de escritorio te permite cambiar a otro trabajo mientras se ejecuta una tarea larga.

65 

66Por defecto, Claude Code envía una notificación de escritorio solo en Ghostty, Kitty e iTerm2. En otras terminales, establezca [`preferredNotifChannel`](/es/settings#available-settings) en `"terminal_bell"` para sonar la campana de terminal en su lugar, o configure un [gancho de Notificación](#play-a-sound-with-a-notification-hook) para un sonido personalizado o comando.

67 

68La notificación de escritorio llega a su máquina local a través de SSH, por lo que una sesión remota aún puede alertarle. Ghostty y Kitty la reenvían a su centro de notificaciones del SO sin configuración adicional. iTerm2 requiere que habilite el reenvío:

69 

70<Steps>

71 <Step title="Abra la configuración de notificaciones de iTerm2">

72 Vaya a Configuración → Perfiles → Terminal.

73 </Step>

74 

75 <Step title="Habilite alertas">

76 Marque "Notification Center Alerts", luego haga clic en "Filter Alerts" y habilite "Send escape sequence-generated alerts".

77 </Step>

78</Steps>

79 

80Si las notificaciones aún no aparecen, confirme que su aplicación de terminal tenga permiso de notificación en su configuración del SO, y si está ejecutando dentro de tmux, [habilite passthrough](#configure-tmux).

81 

82### Reproduzca un sonido con un gancho de Notificación

83 

84En cualquier terminal puede configurar un [gancho de Notificación](/es/hooks-guide#get-notified-when-claude-needs-input) para reproducir un sonido o ejecutar un comando personalizado cuando Claude necesite su atención. Los ganchos se ejecutan junto con la notificación de escritorio en lugar de reemplazarla, por lo que las terminales que no reciben una notificación de escritorio, como Warp o la terminal integrada de VS Code, pueden usar un gancho o establecer `preferredNotifChannel` en `"terminal_bell"` en su lugar.

85 

86El ejemplo a continuación reproduce un sonido del sistema en macOS. La guía vinculada tiene comandos de notificación de escritorio para macOS, Linux y Windows.

87 

88```json ~/.claude/settings.json theme={null}

89{

90 "hooks": {

91 "Notification": [

92 {

93 "hooks": [{ "type": "command", "command": "afplay /System/Library/Sounds/Glass.aiff" }]

94 }

95 ]

96 }

97}

98```

99 

100## Configura tmux

101 

102Cuando Claude Code se ejecuta dentro de tmux, dos cosas se rompen por defecto: Shift+Enter envía en lugar de insertar un salto de línea, y las notificaciones de escritorio y la [barra de progreso](/es/settings#available-settings) nunca llegan a la terminal externa. Agrega estas líneas a `~/.tmux.conf`, luego ejecuta `tmux source-file ~/.tmux.conf` para aplicarlas al servidor en ejecución:

103 

104```bash ~/.tmux.conf theme={null}

105set -g allow-passthrough on

106set -s extended-keys on

107set -as terminal-features 'xterm*:extkeys'

108```

109 

110La línea `allow-passthrough` permite que las notificaciones y actualizaciones de progreso lleguen a iTerm2, Ghostty o Kitty en lugar de ser tragadas por tmux. Las líneas `extended-keys` permiten que tmux distinga Shift+Enter de Enter simple para que el atajo de salto de línea funcione.

111 

112## Haz coincidir el tema de color

113 

114Usa el comando `/theme`, o el selector de tema en `/config`, para elegir un tema de Claude Code que coincida con tu terminal. Seleccionar la opción auto detecta el fondo claro u oscuro de tu terminal, por lo que el tema sigue los cambios de apariencia del SO siempre que tu terminal lo haga. Claude Code no controla el esquema de color de la terminal, que se establece por la aplicación de terminal.

115 

116Para personalizar lo que aparece en la parte inferior de la interfaz, configura una [línea de estado personalizada](/es/statusline) que muestre el modelo actual, directorio de trabajo, rama de git u otro contexto.

117 

118### Crea un tema personalizado

119 

120<Note>

121 Los temas personalizados requieren Claude Code v2.1.118 o posterior.

122</Note>

123 

124Además de los preajustes integrados, `/theme` enumera cualquier tema personalizado que hayas definido y cualquier tema contribuido por los [plugins](/es/plugins-reference#themes) instalados. Selecciona **Nuevo tema personalizado…** al final de la lista para crear uno de forma interactiva: nombras el tema y luego seleccionas tokens de color individuales para anular. Presiona `Ctrl+E` mientras un tema personalizado está resaltado para editarlo.

125 

126Cada tema personalizado es un archivo JSON en `~/.claude/themes/`. El nombre de archivo sin la extensión `.json` es el slug del tema, y seleccionar el tema almacena `custom:<slug>` como tu preferencia de tema. El archivo tiene tres campos opcionales:

127 

128| Campo | Tipo | Descripción |

129| :---------- | :----- | :------------------------------------------------------------------------------------------------------------------------------------------------------------ |

130| `name` | string | Etiqueta de visualización mostrada en `/theme`. Por defecto es el slug del nombre de archivo |

131| `base` | string | Preajuste integrado desde el que comienza el tema: `dark`, `light`, `dark-daltonized`, `light-daltonized`, `dark-ansi`, o `light-ansi`. Por defecto es `dark` |

132| `overrides` | object | Mapa de nombres de tokens de color a valores de color. Los tokens no enumerados aquí se transfieren al preajuste base |

133 

134Los valores de color aceptan `#rrggbb`, `#rgb`, `rgb(r,g,b)`, `ansi256(n)`, o `ansi:<name>` donde `<name>` es uno de los 16 nombres de color ANSI estándar como `red` o `cyanBright`. Los tokens desconocidos y los valores de color inválidos se ignoran, por lo que un error tipográfico no puede romper la representación.

135 

136El siguiente ejemplo define un tema que mantiene el preajuste oscuro pero recolora el acento del prompt, el texto de error y el texto de éxito:

137 

138```json ~/.claude/themes/dracula.json theme={null}

139{

140 "name": "Dracula",

141 "base": "dark",

142 "overrides": {

143 "claude": "#bd93f9",

144 "error": "#ff5555",

145 "success": "#50fa7b"

146 }

147}

148```

149 

150Claude Code observa `~/.claude/themes/` y recarga cuando un archivo cambia, por lo que las ediciones realizadas en tu editor se aplican a una sesión en ejecución sin necesidad de reiniciar.

151 

152La referencia a continuación cubre los tokens que puede establecer en `overrides`. El editor interactivo en `/theme` muestra los mismos tokens con una vista previa en vivo, además de algunos acentos de propósito único como colores de pantalla de incorporación que se omiten aquí.

153 

154<Accordion title="Referencia de tokens de color">

155 El siguiente ejemplo combina tokens de varios de los grupos a continuación: el acento de marca, el borde del modo plan, los fondos de diff y el fondo del mensaje de pantalla completa.

156 

157 ```json ~/.claude/themes/midnight.json theme={null}

158 {

159 "name": "Midnight",

160 "base": "dark",

161 "overrides": {

162 "claude": "#a78bfa",

163 "planMode": "#38bdf8",

164 "diffAdded": "#14532d",

165 "diffRemoved": "#7f1d1d",

166 "userMessageBackground": "#1e1b4b"

167 }

168 }

169 ```

170 

171 #### Colores de texto y acento

172 

173 Controla el acento de marca principal y los matices de texto de primer plano utilizados en toda la interfaz.

174 

175 | Token | Controla |

176 | :------------ | :------------------------------------------------------------------------------- |

177 | `claude` | Acento de marca principal, utilizado para el spinner y la etiqueta del asistente |

178 | `text` | Texto de primer plano predeterminado |

179 | `inverseText` | Texto dibujado sobre un fondo de color, como insignias de estado |

180 | `inactive` | Texto secundario como sugerencias, marcas de tiempo y elementos deshabilitados |

181 | `subtle` | Bordes tenues y texto secundario de énfasis reducido |

182 | `suggestion` | Sugerencias de autocompletado y resaltado de selección en selectores |

183 | `permission` | Bordes de diálogo, incluidas solicitudes de permiso y selectores |

184 | `remember` | Indicadores de memoria y `CLAUDE.md` |

185 

186 #### Colores de estado

187 

188 Señala estados de éxito, fallo y advertencia en mensajes e indicadores.

189 

190 | Token | Controla |

191 | :-------- | :------------------------------------------------------------ |

192 | `success` | Mensajes de éxito y comprobaciones aprobadas |

193 | `error` | Mensajes de error y fallos |

194 | `warning` | Advertencias, mensajes de precaución y el borde del modo auto |

195 | `merged` | Estado de solicitud de extracción fusionada |

196 

197 #### Cuadro de entrada e indicadores de modo

198 

199 Establece el color del borde del cuadro de entrada y el acento mostrado mientras un modo de permiso o indicador está activo.

200 

201 | Token | Controla |

202 | :------------- | :--------------------------------------------------------------- |

203 | `promptBorder` | Borde del cuadro de entrada en el modo de permiso predeterminado |

204 | `planMode` | Acento y borde del modo plan |

205 | `autoAccept` | Acento y borde del modo aceptar ediciones |

206 | `bashBorder` | Borde del cuadro de entrada al ingresar un comando de shell `!` |

207 | `ide` | Indicador de conexión IDE |

208 | `fastMode` | Indicador del modo rápido |

209 

210 #### Representación de diff

211 

212 Colorea el código añadido y eliminado en ediciones y revisiones de archivos.

213 

214 | Token | Controla |

215 | :------------------ | :--------------------------------------------------------- |

216 | `diffAdded` | Fondo de líneas añadidas |

217 | `diffRemoved` | Fondo de líneas eliminadas |

218 | `diffAddedDimmed` | Fondo de contexto sin cambios cerca de líneas añadidas |

219 | `diffRemovedDimmed` | Fondo de contexto sin cambios cerca de líneas eliminadas |

220 | `diffAddedWord` | Resaltado a nivel de palabra dentro de una línea añadida |

221 | `diffRemovedWord` | Resaltado a nivel de palabra dentro de una línea eliminada |

222 

223 #### Modo de pantalla completa

224 

225 Se aplica solo en [modo de representación de pantalla completa](/es/fullscreen), donde los mensajes tienen un relleno de fondo.

226 

227 | Token | Controla |

228 | :--------------------------- | :----------------------------------------------------------------------------- |

229 | `userMessageBackground` | Fondo detrás de tus mensajes en la transcripción |

230 | `userMessageBackgroundHover` | Fondo detrás de un mensaje mientras está desplazado o expandido |

231 | `messageActionsBackground` | Fondo detrás del mensaje seleccionado cuando la barra de acciones está abierta |

232 | `bashMessageBackgroundColor` | Fondo detrás de entradas de comando de shell `!` en la transcripción |

233 | `memoryBackgroundColor` | Fondo detrás de entradas de memoria `#` en la transcripción |

234 | `selectionBg` | Fondo del texto seleccionado con el ratón |

235 

236 #### Medidor de uso y etiquetas de altavoz

237 

238 Ajusta la barra mostrada en la vista `/usage` y las etiquetas que distinguen tus mensajes de los de Claude.

239 

240 | Token | Controla |

241 | :----------------- | :---------------------------------------------------------- |

242 | `rate_limit_fill` | Porción llena del medidor de uso |

243 | `rate_limit_empty` | Porción vacía del medidor de uso |

244 | `briefLabelYou` | Color de la etiqueta `You` en tus mensajes |

245 | `briefLabelClaude` | Color de la etiqueta `Claude` en los mensajes del asistente |

246 

247 #### Variantes de shimmer y colores de subagentes

248 

249 Varios tokens tienen una variante de shimmer emparejada que proporciona el color más claro utilizado en el gradiente animado del spinner. Anula el shimmer junto con su token base si la animación se ve desajustada.

250 

251 * `claude` y `claudeShimmer`

252 * `warning` y `warningShimmer`

253 * `permission` y `permissionShimmer`

254 * `promptBorder` y `promptBorderShimmer`

255 * `inactive` e `inactiveShimmer`

256 * `fastMode` y `fastModeShimmer`

257 

258 Cada [subagente](/es/sub-agents) y tarea paralela se muestra en uno de ocho colores nombrados para que puedas distinguirlos en la transcripción. Los nombres de los tokens siguen el patrón `<color>_FOR_SUBAGENTS_ONLY`, donde `<color>` es `red`, `blue`, `green`, `yellow`, `purple`, `orange`, `pink`, o `cyan`. Anula estos para cambiar el aspecto de cada color nombrado. Por ejemplo, un subagente con `color: blue` en su definición se dibuja usando el valor `blue_FOR_SUBAGENTS_ONLY`.

259 

260 Las palabras clave [`ultrathink`](/es/model-config#use-ultrathink-for-one-off-deep-reasoning) y [`ultraplan`](/es/ultraplan) en la entrada del prompt se representan con un gradiente arcoíris de siete colores. Los nombres de los tokens siguen el patrón `rainbow_<color>` y `rainbow_<color>_shimmer`, donde `<color>` es `red`, `orange`, `yellow`, `green`, `blue`, `indigo`, o `violet`.

261</Accordion>

262 

263## Cambia a renderizado a pantalla completa

264 

265Si la pantalla parpadea o la posición de desplazamiento salta mientras Claude está trabajando, cambia al [modo de renderizado a pantalla completa](/es/fullscreen). Dibuja en una pantalla separada que la terminal reserva para aplicaciones a pantalla completa en lugar de agregar a tu desplazamiento normal, lo que mantiene el uso de memoria plano y agrega soporte de ratón para desplazamiento y selección. En este modo desplazas con el ratón o PageUp dentro de Claude Code en lugar de con el desplazamiento nativo de tu terminal; consulta la [página de pantalla completa](/es/fullscreen#search-and-review-the-conversation) para saber cómo buscar y copiar.

266 

267Ejecuta `/tui fullscreen` para cambiar en la sesión actual con tu conversación intacta. Para hacerlo el predeterminado, establece la variable de entorno `CLAUDE_CODE_NO_FLICKER` antes de iniciar Claude Code:

268 

269<CodeGroup>

270 ```bash Bash and Zsh theme={null}

271 CLAUDE_CODE_NO_FLICKER=1 claude

272 ```

273 

274 ```powershell PowerShell theme={null}

275 $env:CLAUDE_CODE_NO_FLICKER = "1"; claude

276 ```

277 

278 ```json ~/.claude/settings.json theme={null}

279 {

280 "env": {

281 "CLAUDE_CODE_NO_FLICKER": "1"

282 }

283 }

284 ```

285</CodeGroup>

286 

287## Pega contenido grande

288 

289Cuando pegas más de 10,000 caracteres en el indicador, Claude Code colapsa la entrada a un marcador de posición `[Pasted text]` para que la caja de entrada siga siendo utilizable. El contenido completo aún se envía a Claude cuando envías.

290 

291La terminal integrada de VS Code puede soltar caracteres de pegados muy grandes antes de que lleguen a Claude Code, así que prefiere flujos de trabajo basados en archivos allí. Para entradas muy grandes como archivos completos o registros largos, escribe el contenido en un archivo y pide a Claude que lo lea en lugar de pegar. Esto mantiene la transcripción de conversación legible y permite que Claude haga referencia al archivo por ruta en turnos posteriores.

292 

293## Edita indicadores con atajos de teclado Vim

294 

295Claude Code incluye un modo de edición de estilo Vim para la entrada del indicador. Habilítalo a través de `/config` → Editor mode, o estableciendo [`editorMode`](/es/settings#available-settings) en `"vim"` en `~/.claude/settings.json`. Establece Editor mode de nuevo en `normal` para desactivarlo.

296 

297El modo Vim soporta un subconjunto de movimientos y operadores de modo NORMAL y VISUAL, como navegación `hjkl`, selección `v`/`V`, y `d`/`c`/`y` con objetos de texto. Consulta la [referencia del modo editor Vim](/es/interactive-mode#vim-editor-mode) para la tabla de teclas completa. Los movimientos Vim no son remapeables a través del archivo de atajos de teclado.

298 

299Presionar Enter aún envía tu indicador en modo INSERT, a diferencia del Vim estándar. Usa `o` u `O` en modo NORMAL, o Ctrl+J, para insertar un salto de línea en su lugar.

300 

301## Recursos relacionados

302 

303* [Modo interactivo](/es/interactive-mode): referencia completa de atajos de teclado y tabla de teclas Vim

304* [Atajos de teclado](/es/keybindings): remapea cualquier atajo de Claude Code, incluyendo Enter y Shift+Enter

305* [Renderizado a pantalla completa](/es/fullscreen): detalles sobre desplazamiento, búsqueda y copia en modo pantalla completa

306* [Guía de ganchos](/es/hooks-guide): más ejemplos de ganchos de Notificación para Linux y Windows

307* [Solución de problemas](/es/troubleshooting): correcciones para problemas fuera de la configuración de terminal

third-party-integrations.md +262 −0 created

Details

1> ## Documentation Index

2> Fetch the complete documentation index at: https://code.claude.com/docs/llms.txt

3> Use this file to discover all available pages before exploring further.

4 

5# Descripción general de implementación empresarial

6 

7> Aprenda cómo Claude Code puede integrarse con varios servicios de terceros e infraestructura para cumplir con los requisitos de implementación empresarial.

8 

9Las organizaciones pueden implementar Claude Code directamente a través de Anthropic o a través de un proveedor de nube. Esta página le ayuda a elegir la configuración correcta.

10 

11## Comparar opciones de implementación

12 

13Para la mayoría de las organizaciones, Claude for Teams o Claude for Enterprise proporciona la mejor experiencia. Los miembros del equipo obtienen acceso tanto a Claude Code como a Claude en la web con una única suscripción, facturación centralizada y sin necesidad de configuración de infraestructura.

14 

15**Claude for Teams** es de autoservicio e incluye características de colaboración, herramientas de administración y gestión de facturación. Mejor para equipos más pequeños que necesitan comenzar rápidamente.

16 

17**Claude for Enterprise** añade SSO y captura de dominio, permisos basados en roles, acceso a API de cumplimiento y configuración de políticas administradas para implementar configuraciones de Claude Code en toda la organización. Mejor para organizaciones más grandes con requisitos de seguridad y cumplimiento.

18 

19Obtenga más información sobre [planes de equipo](https://support.claude.com/es/articles/9266767-what-is-the-team-plan) y [planes empresariales](https://support.claude.com/es/articles/9797531-what-is-the-enterprise-plan).

20 

21Si su organización tiene requisitos de infraestructura específicos, compare las opciones a continuación:

22 

23<table>

24 <thead>

25 <tr>

26 <th>Característica</th>

27 <th>Claude for Teams/Enterprise</th>

28 <th>Anthropic Console</th>

29 <th>Amazon Bedrock</th>

30 <th>Google Vertex AI</th>

31 <th>Microsoft Foundry</th>

32 </tr>

33 </thead>

34 

35 <tbody>

36 <tr>

37 <td>Mejor para</td>

38 <td>La mayoría de las organizaciones (recomendado)</td>

39 <td>Desarrolladores individuales</td>

40 <td>Implementaciones nativas de AWS</td>

41 <td>Implementaciones nativas de GCP</td>

42 <td>Implementaciones nativas de Azure</td>

43 </tr>

44 

45 <tr>

46 <td>Facturación</td>

47 <td><strong>Teams:</strong> \$150/puesto (Premium) con PAYG disponible<br /><strong>Enterprise:</strong> <a href="https://claude.com/contact-sales?utm_source=claude_code&utm_medium=docs&utm_content=third_party_enterprise">Contactar ventas</a></td>

48 <td>PAYG</td>

49 <td>PAYG a través de AWS</td>

50 <td>PAYG a través de GCP</td>

51 <td>PAYG a través de Azure</td>

52 </tr>

53 

54 <tr>

55 <td>Regiones</td>

56 <td>[Países](https://www.anthropic.com/supported-countries) admitidos</td>

57 <td>[Países](https://www.anthropic.com/supported-countries) admitidos</td>

58 <td>Múltiples [regiones](https://docs.aws.amazon.com/bedrock/latest/userguide/models-regions.html) de AWS</td>

59 <td>Múltiples [regiones](https://cloud.google.com/vertex-ai/generative-ai/docs/learn/locations) de GCP</td>

60 <td>Múltiples [regiones](https://azure.microsoft.com/en-us/explore/global-infrastructure/products-by-region/) de Azure</td>

61 </tr>

62 

63 <tr>

64 <td>Prompt caching</td>

65 <td>Habilitado de forma predeterminada</td>

66 <td>Habilitado de forma predeterminada</td>

67 <td>Habilitado de forma predeterminada</td>

68 <td>Habilitado de forma predeterminada</td>

69 <td>Habilitado de forma predeterminada</td>

70 </tr>

71 

72 <tr>

73 <td>Autenticación</td>

74 <td>Claude.ai SSO o correo electrónico</td>

75 <td>Clave API</td>

76 <td>Clave API o credenciales de AWS</td>

77 <td>Credenciales de GCP</td>

78 <td>Clave API o Microsoft Entra ID</td>

79 </tr>

80 

81 <tr>

82 <td>Seguimiento de costos</td>

83 <td>Panel de uso</td>

84 <td>Panel de uso</td>

85 <td>AWS Cost Explorer</td>

86 <td>Facturación de GCP</td>

87 <td>Gestión de costos de Azure</td>

88 </tr>

89 

90 <tr>

91 <td>Incluye Claude en la web</td>

92 <td>Sí</td>

93 <td>No</td>

94 <td>No</td>

95 <td>No</td>

96 <td>No</td>

97 </tr>

98 

99 <tr>

100 <td>Características empresariales</td>

101 <td>Gestión de equipos, SSO, monitoreo de uso</td>

102 <td>Ninguno</td>

103 <td>Políticas de IAM, CloudTrail</td>

104 <td>Roles de IAM, registros de auditoría en la nube</td>

105 <td>Políticas RBAC, Azure Monitor</td>

106 </tr>

107 </tbody>

108</table>

109 

110Seleccione una opción de implementación para ver las instrucciones de configuración:

111 

112* [Claude for Teams o Enterprise](/es/authentication#claude-for-teams-or-enterprise)

113* [Anthropic Console](/es/authentication#claude-console-authentication)

114* [Amazon Bedrock](/es/amazon-bedrock)

115* [Google Vertex AI](/es/google-vertex-ai)

116* [Microsoft Foundry](/es/microsoft-foundry)

117 

118## Configurar proxies y gateways

119 

120La mayoría de las organizaciones pueden usar un proveedor de nube directamente sin configuración adicional. Sin embargo, es posible que deba configurar un proxy corporativo o una puerta de enlace LLM si su organización tiene requisitos específicos de red o gestión. Estas son configuraciones diferentes que se pueden usar juntas:

121 

122* **Proxy corporativo**: Enruta el tráfico a través de un proxy HTTP/HTTPS. Úselo si su organización requiere que todo el tráfico saliente pase a través de un servidor proxy para monitoreo de seguridad, cumplimiento o aplicación de políticas de red. Configure con las variables de entorno `HTTPS_PROXY` o `HTTP_PROXY`. Obtenga más información en [Configuración de red empresarial](/es/network-config).

123* **LLM Gateway**: Un servicio que se sitúa entre Claude Code y el proveedor de nube para manejar la autenticación y el enrutamiento. Úselo si necesita seguimiento de uso centralizado entre equipos, limitación de velocidad personalizada o presupuestos, o gestión de autenticación centralizada. Configure con las variables de entorno `ANTHROPIC_BASE_URL`, `ANTHROPIC_BEDROCK_BASE_URL`, o `ANTHROPIC_VERTEX_BASE_URL`. Obtenga más información en [Configuración de puerta de enlace LLM](/es/llm-gateway).

124 

125Los siguientes ejemplos muestran las variables de entorno a establecer en su shell o perfil de shell (`.bashrc`, `.zshrc`). Consulte [Configuración](/es/settings) para otros métodos de configuración.

126 

127### Amazon Bedrock

128 

129<Tabs>

130 <Tab title="Proxy corporativo">

131 Enrute el tráfico de Bedrock a través de su proxy corporativo estableciendo las siguientes [variables de entorno](/es/env-vars):

132 

133 ```bash theme={null}

134 # Habilitar Bedrock

135 export CLAUDE_CODE_USE_BEDROCK=1

136 export AWS_REGION=us-east-1

137 

138 # Configurar proxy corporativo

139 export HTTPS_PROXY='https://proxy.example.com:8080'

140 ```

141 </Tab>

142 

143 <Tab title="LLM Gateway">

144 Enrute el tráfico de Bedrock a través de su puerta de enlace LLM estableciendo las siguientes [variables de entorno](/es/env-vars):

145 

146 ```bash theme={null}

147 # Habilitar Bedrock

148 export CLAUDE_CODE_USE_BEDROCK=1

149 

150 # Configurar puerta de enlace LLM

151 export ANTHROPIC_BEDROCK_BASE_URL='https://your-llm-gateway.com/bedrock'

152 export CLAUDE_CODE_SKIP_BEDROCK_AUTH=1 # Si la puerta de enlace maneja la autenticación de AWS

153 ```

154 </Tab>

155</Tabs>

156 

157### Microsoft Foundry

158 

159<Tabs>

160 <Tab title="Proxy corporativo">

161 Enrute el tráfico de Foundry a través de su proxy corporativo estableciendo las siguientes [variables de entorno](/es/env-vars):

162 

163 ```bash theme={null}

164 # Habilitar Microsoft Foundry

165 export CLAUDE_CODE_USE_FOUNDRY=1

166 export ANTHROPIC_FOUNDRY_RESOURCE=your-resource

167 export ANTHROPIC_FOUNDRY_API_KEY=your-api-key # O omitir para autenticación de Entra ID

168 

169 # Configurar proxy corporativo

170 export HTTPS_PROXY='https://proxy.example.com:8080'

171 ```

172 </Tab>

173 

174 <Tab title="LLM Gateway">

175 Enrute el tráfico de Foundry a través de su puerta de enlace LLM estableciendo las siguientes [variables de entorno](/es/env-vars):

176 

177 ```bash theme={null}

178 # Habilitar Microsoft Foundry

179 export CLAUDE_CODE_USE_FOUNDRY=1

180 

181 # Configurar puerta de enlace LLM

182 export ANTHROPIC_FOUNDRY_BASE_URL='https://your-llm-gateway.com'

183 export CLAUDE_CODE_SKIP_FOUNDRY_AUTH=1 # Si la puerta de enlace maneja la autenticación de Azure

184 ```

185 </Tab>

186</Tabs>

187 

188### Google Vertex AI

189 

190<Tabs>

191 <Tab title="Proxy corporativo">

192 Enrute el tráfico de Vertex AI a través de su proxy corporativo estableciendo las siguientes [variables de entorno](/es/env-vars):

193 

194 ```bash theme={null}

195 # Habilitar Vertex

196 export CLAUDE_CODE_USE_VERTEX=1

197 export CLOUD_ML_REGION=us-east5

198 export ANTHROPIC_VERTEX_PROJECT_ID=your-project-id

199 

200 # Configurar proxy corporativo

201 export HTTPS_PROXY='https://proxy.example.com:8080'

202 ```

203 </Tab>

204 

205 <Tab title="LLM Gateway">

206 Enrute el tráfico de Vertex AI a través de su puerta de enlace LLM estableciendo las siguientes [variables de entorno](/es/env-vars):

207 

208 ```bash theme={null}

209 # Habilitar Vertex

210 export CLAUDE_CODE_USE_VERTEX=1

211 

212 # Configurar puerta de enlace LLM

213 export ANTHROPIC_VERTEX_BASE_URL='https://your-llm-gateway.com/vertex'

214 export CLAUDE_CODE_SKIP_VERTEX_AUTH=1 # Si la puerta de enlace maneja la autenticación de GCP

215 ```

216 </Tab>

217</Tabs>

218 

219<Tip>

220 Use `/status` en Claude Code para verificar que su configuración de proxy y puerta de enlace se aplica correctamente.

221</Tip>

222 

223## Mejores prácticas para organizaciones

224 

225### Invertir en documentación y memoria

226 

227Le recomendamos encarecidamente que invierta en documentación para que Claude Code comprenda su base de código. Las organizaciones pueden implementar archivos CLAUDE.md en múltiples niveles:

228 

229* **En toda la organización**: Implemente en directorios del sistema como `/Library/Application Support/ClaudeCode/CLAUDE.md` (macOS) para estándares de toda la empresa

230* **A nivel de repositorio**: Cree archivos `CLAUDE.md` en las raíces de los repositorios que contengan arquitectura del proyecto, comandos de compilación y directrices de contribución. Verifíquelos en el control de fuente para que todos los usuarios se beneficien

231 

232Obtenga más información en [Memoria y archivos CLAUDE.md](/es/memory).

233 

234### Simplificar la implementación

235 

236Si tiene un entorno de desarrollo personalizado, encontramos que crear una forma de "un clic" para instalar Claude Code es clave para aumentar la adopción en toda una organización.

237 

238### Comenzar con uso guiado

239 

240Anime a los nuevos usuarios a probar Claude Code para preguntas sobre la base de código, o en correcciones de errores más pequeñas o solicitudes de características. Pida a Claude Code que haga un plan. Verifique las sugerencias de Claude y proporcione comentarios si se desvía. Con el tiempo, a medida que los usuarios comprendan mejor este nuevo paradigma, serán más efectivos permitiendo que Claude Code se ejecute de manera más agencial.

241 

242### Fijar versiones de modelo para proveedores de nube

243 

244Si implementa a través de [Bedrock](/es/amazon-bedrock), [Vertex AI](/es/google-vertex-ai), o [Foundry](/es/microsoft-foundry), fije versiones de modelo específicas usando `ANTHROPIC_DEFAULT_OPUS_MODEL`, `ANTHROPIC_DEFAULT_SONNET_MODEL`, y `ANTHROPIC_DEFAULT_HAIKU_MODEL`. Sin fijar, los alias de Claude Code se resuelven a la versión más reciente, lo que puede romper a los usuarios cuando Anthropic lanza un nuevo modelo que aún no está habilitado en su cuenta. Consulte [Configuración de modelo](/es/model-config#pin-models-for-third-party-deployments) para obtener detalles.

245 

246### Configurar políticas de seguridad

247 

248Los equipos de seguridad pueden configurar permisos administrados para lo que Claude Code puede y no puede hacer, que no pueden ser sobrescritos por la configuración local. [Obtenga más información](/es/security).

249 

250### Aprovechar MCP para integraciones

251 

252MCP es una excelente manera de dar a Claude Code más información, como conectarse a sistemas de gestión de tickets o registros de errores. Recomendamos que un equipo central configure servidores MCP y verifique una configuración `.mcp.json` en la base de código para que todos los usuarios se beneficien. [Obtenga más información](/es/mcp).

253 

254En Anthropic, confiamos en Claude Code para potenciar el desarrollo en todas las bases de código de Anthropic. Esperamos que disfrute usando Claude Code tanto como nosotros.

255 

256## Próximos pasos

257 

258Una vez que haya elegido una opción de implementación y configurado el acceso para su equipo:

259 

2601. **Implementar en su equipo**: Comparta instrucciones de instalación y haga que los miembros del equipo [instalen Claude Code](/es/setup) y se autentiquen con sus credenciales.

2612. **Configurar configuración compartida**: Cree un [archivo CLAUDE.md](/es/memory) en sus repositorios para ayudar a Claude Code a comprender su base de código y estándares de codificación.

2623. **Configurar permisos**: Revise [configuración de seguridad](/es/security) para definir qué Claude Code puede y no puede hacer en su entorno.

tools-reference.md +148 −0 created

Details

1> ## Documentation Index

2> Fetch the complete documentation index at: https://code.claude.com/docs/llms.txt

3> Use this file to discover all available pages before exploring further.

4 

5# Referencia de herramientas

6 

7> Referencia completa de las herramientas que Claude Code puede utilizar, incluidos los requisitos de permisos.

8 

9Claude Code tiene acceso a un conjunto de herramientas integradas que le ayudan a entender y modificar su base de código. Los nombres de herramientas son las cadenas exactas que utiliza en [reglas de permisos](/es/permissions#tool-specific-permission-rules), [listas de herramientas de subagents](/es/sub-agents) y [coincidencias de hooks](/es/hooks). Para desactivar una herramienta completamente, agregue su nombre al array `deny` en su [configuración de permisos](/es/permissions#tool-specific-permission-rules).

10 

11Para agregar herramientas personalizadas, conecte un [servidor MCP](/es/mcp). Para extender Claude con flujos de trabajo basados en prompts reutilizables, escriba una [skill](/es/skills), que se ejecuta a través de la herramienta `Skill` existente en lugar de agregar una nueva entrada de herramienta.

12 

13| Herramienta | Descripción | Permiso requerido |

14| :--------------------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :---------------- |

15| `Agent` | Genera un [subagent](/es/sub-agents) con su propia ventana de contexto para manejar una tarea | No |

16| `AskUserQuestion` | Hace preguntas de opción múltiple para recopilar requisitos o aclarar ambigüedades | No |

17| `Bash` | Ejecuta comandos de shell en su entorno. Consulte [comportamiento de la herramienta Bash](#bash-tool-behavior) | Sí |

18| `CronCreate` | Programa una solicitud recurrente o única dentro de la sesión actual. Las tareas tienen alcance de sesión y se restauran en `--resume` o `--continue` si no han expirado. Consulte [tareas programadas](/es/scheduled-tasks) | No |

19| `CronDelete` | Cancela una tarea programada por ID | No |

20| `CronList` | Lista todas las tareas programadas en la sesión | No |

21| `Edit` | Realiza ediciones dirigidas a archivos específicos | Sí |

22| `EnterPlanMode` | Cambia a Plan Mode para diseñar un enfoque antes de codificar | No |

23| `EnterWorktree` | Crea un [git worktree](/es/common-workflows#run-parallel-claude-code-sessions-with-git-worktrees) aislado y cambia a él. Pase un `path` para cambiar a un worktree existente del repositorio actual en lugar de crear uno nuevo. No disponible para subagents | No |

24| `ExitPlanMode` | Presenta un plan para aprobación y sale de Plan Mode | Sí |

25| `ExitWorktree` | Sale de una sesión de worktree y regresa al directorio original. No disponible para subagents | No |

26| `Glob` | Encuentra archivos basados en coincidencia de patrones | No |

27| `Grep` | Busca patrones en el contenido de archivos | No |

28| `ListMcpResourcesTool` | Lista recursos expuestos por [servidores MCP](/es/mcp) conectados | No |

29| `LSP` | Inteligencia de código a través de servidores de lenguaje: saltar a definiciones, encontrar referencias, reportar errores de tipo y advertencias. Consulte [comportamiento de la herramienta LSP](#lsp-tool-behavior) | No |

30| `Monitor` | Ejecuta un comando en segundo plano y devuelve cada línea de salida a Claude, para que pueda reaccionar a entradas de registro, cambios de archivos, o estado sondeado a mitad de la conversación. Consulte [herramienta Monitor](#monitor-tool) | Sí |

31| `NotebookEdit` | Modifica celdas de cuadernos Jupyter | Sí |

32| `PowerShell` | Ejecuta comandos de PowerShell de forma nativa. Consulte [herramienta PowerShell](#powershell-tool) para disponibilidad | Sí |

33| `Read` | Lee el contenido de archivos | No |

34| `ReadMcpResourceTool` | Lee un recurso MCP específico por URI | No |

35| `SendMessage` | Envía un mensaje a un miembro del [equipo de agentes](/es/agent-teams), o [reanuda un subagent](/es/sub-agents#resume-subagents) por su ID de agente. Los subagents detenidos se reanudan automáticamente en segundo plano. Solo disponible cuando `CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS=1` está establecido | No |

36| `Skill` | Ejecuta una [skill](/es/skills#control-who-invokes-a-skill) dentro de la conversación principal | Sí |

37| `TaskCreate` | Crea una nueva tarea en la lista de tareas | No |

38| `TaskGet` | Recupera detalles completos para una tarea específica | No |

39| `TaskList` | Lista todas las tareas con su estado actual | No |

40| `TaskOutput` | (Obsoleto) Recupera la salida de una tarea de fondo. Prefiera `Read` en la ruta del archivo de salida de la tarea | No |

41| `TaskStop` | Mata una tarea de fondo en ejecución por ID | No |

42| `TaskUpdate` | Actualiza el estado de la tarea, dependencias, detalles, o elimina tareas | No |

43| `TeamCreate` | Crea un [equipo de agentes](/es/agent-teams) con múltiples compañeros de equipo. Solo disponible cuando `CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS=1` está establecido | No |

44| `TeamDelete` | Disuelve un equipo de agentes y limpia los procesos de compañeros de equipo. Solo disponible cuando `CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS=1` está establecido | No |

45| `TodoWrite` | Gestiona la lista de verificación de tareas de la sesión. Disponible en modo no interactivo y el [Agent SDK](/es/headless); las sesiones interactivas utilizan TaskCreate, TaskGet, TaskList y TaskUpdate en su lugar | No |

46| `ToolSearch` | Busca y carga herramientas diferidas cuando [búsqueda de herramientas](/es/mcp#scale-with-mcp-tool-search) está habilitada | No |

47| `WebFetch` | Obtiene contenido de una URL especificada | Sí |

48| `WebSearch` | Realiza búsquedas web | Sí |

49| `Write` | Crea o sobrescribe archivos | Sí |

50 

51Las reglas de permisos se pueden configurar usando `/permissions` o en [configuración de permisos](/es/settings#available-settings). Consulte también [Reglas de permisos específicas de herramientas](/es/permissions#tool-specific-permission-rules).

52 

53## Comportamiento de la herramienta Bash

54 

55La herramienta Bash ejecuta cada comando en un proceso separado con el siguiente comportamiento de persistencia:

56 

57* Cuando Claude ejecuta `cd` en la sesión principal, el nuevo directorio de trabajo se mantiene en comandos Bash posteriores siempre que permanezca dentro del directorio del proyecto o un [directorio de trabajo adicional](/es/permissions#working-directories) que agregó con `--add-dir`, `/add-dir`, o `additionalDirectories` en la configuración. Las sesiones de subagents nunca mantienen cambios de directorio de trabajo.

58 * Si `cd` cae fuera de esos directorios, Claude Code se reinicia al directorio del proyecto y añade `Shell cwd was reset to <dir>` al resultado de la herramienta.

59 * Para desactivar este mantenimiento para que cada comando Bash comience en el directorio del proyecto, establezca `CLAUDE_BASH_MAINTAIN_PROJECT_WORKING_DIR=1`.

60* Las variables de entorno no persisten. Un `export` en un comando no estará disponible en el siguiente.

61 

62Active su entorno virtualenv o conda antes de lanzar Claude Code. Para hacer que las variables de entorno persistan entre comandos Bash, establezca [`CLAUDE_ENV_FILE`](/es/env-vars) en un script de shell antes de lanzar Claude Code, o use un [hook SessionStart](/es/hooks#persist-environment-variables) para poblarlo dinámicamente.

63 

64## Comportamiento de la herramienta LSP

65 

66La herramienta LSP proporciona a Claude inteligencia de código desde un servidor de lenguaje en ejecución. Después de cada edición de archivo, reporta automáticamente errores de tipo y advertencias para que Claude pueda corregir problemas sin un paso de compilación separado. Claude también puede llamarlo directamente para navegar por el código:

67 

68* Saltar a la definición de un símbolo

69* Encontrar todas las referencias a un símbolo

70* Obtener información de tipo en una posición

71* Listar símbolos en un archivo o espacio de trabajo

72* Encontrar implementaciones de una interfaz

73* Rastrear jerarquías de llamadas

74 

75La herramienta está inactiva hasta que instale un [plugin de inteligencia de código](/es/discover-plugins#code-intelligence) para su lenguaje. El plugin agrupa la configuración del servidor de lenguaje, e instala el binario del servidor por separado.

76 

77## Herramienta Monitor

78 

79<Note>

80 La herramienta Monitor requiere Claude Code v2.1.98 o posterior.

81</Note>

82 

83La herramienta Monitor permite que Claude observe algo en segundo plano y reaccione cuando cambia, sin pausar la conversación. Pida a Claude que:

84 

85* Siga un archivo de registro y marque errores a medida que aparecen

86* Sondee una PR o trabajo de CI y reporte cuando su estado cambia

87* Observe un directorio para cambios de archivos

88* Rastrear la salida de cualquier script de larga duración que señale

89 

90Claude escribe un pequeño script para la observación, lo ejecuta en segundo plano, y recibe cada línea de salida a medida que llega. Continúa trabajando en la misma sesión y Claude interviene cuando llega un evento. Detenga un monitor pidiendo a Claude que lo cancele o terminando la sesión.

91 

92Monitor utiliza las mismas [reglas de permisos que Bash](/es/permissions#tool-specific-permission-rules), por lo que los patrones `allow` y `deny` que tiene establecidos para Bash se aplican aquí también. No está disponible en Amazon Bedrock, Google Vertex AI, o Microsoft Foundry. Tampoco está disponible cuando `DISABLE_TELEMETRY` o `CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC` está establecido.

93 

94Los plugins pueden declarar monitores que se inician automáticamente cuando el plugin está activo, en lugar de pedirle a Claude que los inicie. Consulte [monitores de plugins](/es/plugins-reference#monitors).

95 

96## Herramienta PowerShell

97 

98La herramienta PowerShell permite que Claude ejecute comandos de PowerShell de forma nativa. En Windows, esto significa que los comandos se ejecutan en PowerShell en lugar de enrutarse a través de Git Bash. En Windows sin Git Bash, la herramienta se habilita automáticamente. En Windows con Git Bash instalado, la herramienta se está implementando progresivamente. En Linux, macOS y WSL, la herramienta es opcional.

99 

100### Habilitar la herramienta PowerShell

101 

102Establezca `CLAUDE_CODE_USE_POWERSHELL_TOOL=1` en su entorno o en `settings.json`:

103 

104```json theme={null}

105{

106 "env": {

107 "CLAUDE_CODE_USE_POWERSHELL_TOOL": "1"

108 }

109}

110```

111 

112En Windows, establezca la variable a `0` para optar por no participar en la implementación. En Linux, macOS y WSL, la herramienta requiere PowerShell 7 o posterior: instale `pwsh` y asegúrese de que esté en su `PATH`.

113 

114En Windows, Claude Code detecta automáticamente `pwsh.exe` para PowerShell 7+ con una alternativa a `powershell.exe` para PowerShell 5.1. Cuando la herramienta está habilitada, Claude trata PowerShell como el shell principal. La herramienta Bash permanece disponible para scripts POSIX cuando Git Bash está instalado.

115 

116### Selección de shell en configuración, hooks y skills

117 

118Tres configuraciones adicionales controlan dónde se usa PowerShell:

119 

120* `"defaultShell": "powershell"` en [`settings.json`](/es/settings#available-settings): enruta comandos interactivos `!` a través de PowerShell. Requiere que la herramienta PowerShell esté habilitada.

121* `"shell": "powershell"` en [hooks de comando](/es/hooks#command-hook-fields) individuales: ejecuta ese hook en PowerShell. Los hooks generan PowerShell directamente, por lo que esto funciona independientemente de `CLAUDE_CODE_USE_POWERSHELL_TOOL`.

122* `shell: powershell` en [frontmatter de skill](/es/skills#frontmatter-reference): ejecuta bloques `` !`command` `` en PowerShell. Requiere que la herramienta PowerShell esté habilitada.

123 

124El mismo comportamiento de reinicio del directorio de trabajo de la sesión principal descrito en la sección de la herramienta Bash se aplica a los comandos de PowerShell, incluida la variable de entorno `CLAUDE_BASH_MAINTAIN_PROJECT_WORKING_DIR`.

125 

126### Limitaciones de vista previa

127 

128La herramienta PowerShell tiene las siguientes limitaciones conocidas durante la vista previa:

129 

130* Los perfiles de PowerShell no se cargan

131* En Windows, el sandboxing no es compatible

132 

133## Verificar qué herramientas están disponibles

134 

135Su conjunto exacto de herramientas depende de su proveedor, plataforma y configuración. Para verificar qué está cargado en una sesión en ejecución, pregúntele a Claude directamente:

136 

137```text theme={null}

138¿Qué herramientas tienes disponibles?

139```

140 

141Claude proporciona un resumen conversacional. Para nombres exactos de herramientas MCP, ejecute `/mcp`.

142 

143## Véase también

144 

145* [Servidores MCP](/es/mcp): agregue herramientas personalizadas conectando servidores externos

146* [Permisos](/es/permissions): sistema de permisos, sintaxis de reglas y patrones específicos de herramientas

147* [Subagents](/es/sub-agents): configure el acceso a herramientas para subagents

148* [Hooks](/es/hooks-guide): ejecute comandos personalizados antes o después de la ejecución de herramientas

troubleshoot-install.md +803 −0 created

Details

1> ## Documentation Index

2> Fetch the complete documentation index at: https://code.claude.com/docs/llms.txt

3> Use this file to discover all available pages before exploring further.

4 

5# Solucionar problemas de instalación e inicio de sesión

6 

7> Corrija errores de comando no encontrado, PATH, permisos, red y autenticación al instalar o iniciar sesión en Claude Code.

8 

9Si la instalación falla o no puede iniciar sesión, encuentre su error a continuación. Para problemas en tiempo de ejecución después de que Claude Code esté funcionando, consulte [Solución de problemas](/es/troubleshooting). Para problemas de configuración como configuraciones que no se aplican o hooks que no se disparan, consulte [Depurar su configuración](/es/debug-your-config).

10 

11## Encuentre su error

12 

13Haga coincidir el mensaje de error o síntoma que está viendo con una solución:

14 

15| Lo que ve | Solución |

16| :--------------------------------------------------------------------------------------------------- | :--------------------------------------------------------------------------------------------------------------------- |

17| `command not found: claude` o `'claude' is not recognized` | [Corrija su PATH](#command-not-found-claude-after-installation) |

18| `syntax error near unexpected token '<'` | [El script de instalación devuelve HTML](#install-script-returns-html-instead-of-a-shell-script) |

19| `curl: (56) Failure writing output to destination` | [Verifique la conectividad o use un instalador alternativo](#curl-56-failure-writing-output-to-destination) |

20| `Killed` durante la instalación en Linux | [Agregue espacio de intercambio para servidores con poca memoria](#install-killed-on-low-memory-linux-servers) |

21| `TLS connect error` o `SSL/TLS secure channel` | [Actualice los certificados CA](#tls-or-ssl-connection-errors) |

22| `Failed to fetch version` o no puede alcanzar el servidor de descarga | [Verifique la configuración de red y proxy](#check-network-connectivity) |

23| `irm is not recognized` o `&& is not valid` | [Use el comando correcto para su shell](#wrong-install-command-on-windows) |

24| `'bash' is not recognized as the name of a cmdlet` | [Use el comando del instalador de Windows](#wrong-install-command-on-windows) |

25| `Claude Code on Windows requires either Git for Windows (for bash) or PowerShell` | [Instale un shell](#claude-code-on-windows-requires-either-git-for-windows-for-bash-or-powershell) |

26| `Claude Code does not support 32-bit Windows` | [Abra Windows PowerShell, no la entrada x86](#claude-code-does-not-support-32-bit-windows) |

27| `The process cannot access the file ... because it is being used by another process` | [Borre la carpeta de descargas e intente de nuevo](#the-process-cannot-access-the-file-during-windows-install) |

28| `Error loading shared library` | [Variante binaria incorrecta para su sistema](#linux-musl-or-glibc-binary-mismatch) |

29| `Illegal instruction` | [Desajuste de arquitectura o conjunto de instrucciones de CPU](#illegal-instruction) |

30| `cannot execute binary file: Exec format error` en WSL | [Regresión binaria nativa de WSL1](#exec-format-error-on-wsl1) |

31| El instalador de PowerShell se completa pero `claude` no se encuentra o muestra una versión anterior | [Reinicie su terminal y verifique PATH](#verify-your-path) |

32| `dyld: cannot load`, `dyld: Symbol not found`, o `Abort trap` en macOS | [Incompatibilidad binaria](#dyld-cannot-load-on-macos) |

33| `Invoke-Expression: Missing argument in parameter list` | [El script de instalación devuelve HTML](#install-script-returns-html-instead-of-a-shell-script) |

34| `App unavailable in region` | Claude Code no está disponible en su país. Consulte [países admitidos](https://www.anthropic.com/supported-countries). |

35| `unable to get local issuer certificate` | [Configure certificados CA corporativos](#tls-or-ssl-connection-errors) |

36| `OAuth error` o `403 Forbidden` | [Corrija la autenticación](#login-and-authentication) |

37| `Could not load the default credentials` o `Could not load credentials from any providers` | [Credenciales de Bedrock, Vertex o Foundry](#bedrock-vertex-or-foundry-credentials-not-loading) |

38| `ChainedTokenCredential authentication failed` o `CredentialUnavailableError` | [Credenciales de Bedrock, Vertex o Foundry](#bedrock-vertex-or-foundry-credentials-not-loading) |

39| `API Error: 500`, `529 Overloaded`, `429`, u otros errores 4xx y 5xx no listados arriba | Consulte la [referencia de errores](/es/errors) |

40 

41Si su problema no está listado, trabaje a través de las verificaciones de diagnóstico a continuación para reducir la causa.

42 

43<Tip>

44 Si prefiere omitir la terminal por completo, la [aplicación de escritorio Claude Code](/es/desktop-quickstart) le permite instalar y usar Claude Code a través de una interfaz gráfica. Descárguela para [macOS](https://claude.ai/api/desktop/darwin/universal/dmg/latest/redirect?utm_source=claude_code\&utm_medium=docs) o [Windows](https://claude.com/download?utm_source=claude_code\&utm_medium=docs) y comience a codificar sin ninguna configuración de línea de comandos.

45</Tip>

46 

47## Ejecute verificaciones de diagnóstico

48 

49### Verifique la conectividad de red

50 

51El instalador descarga desde `downloads.claude.ai`. Verifique que pueda alcanzarlo:

52 

53```bash theme={null}

54curl -sI https://downloads.claude.ai/claude-code-releases/latest

55```

56 

57Una línea `HTTP/2 200` significa que alcanzó el servidor. Si no ve salida, `Could not resolve host`, o un tiempo de espera de conexión, su red está bloqueando la conexión. Las causas comunes incluyen:

58 

59* Firewalls corporativos o proxies bloqueando `downloads.claude.ai`

60* Restricciones de red regional: intente una VPN o red alternativa

61* Problemas de TLS/SSL: actualice los certificados CA de su sistema, o verifique si `HTTPS_PROXY` está configurado

62 

63Si está detrás de un proxy corporativo, establezca `HTTPS_PROXY` y `HTTP_PROXY` en la dirección de su proxy antes de instalar. Pregunte a su equipo de TI por la URL del proxy si no la conoce, o verifique la configuración del proxy de su navegador.

64 

65Este ejemplo establece ambas variables de proxy, luego ejecuta el instalador a través de su proxy:

66 

67<Tabs>

68 <Tab title="macOS/Linux">

69 ```bash theme={null}

70 export HTTP_PROXY=http://proxy.example.com:8080

71 export HTTPS_PROXY=http://proxy.example.com:8080

72 curl -fsSL https://claude.ai/install.sh | bash

73 ```

74 </Tab>

75 

76 <Tab title="Windows PowerShell">

77 ```powershell theme={null}

78 $env:HTTP_PROXY = 'http://proxy.example.com:8080'

79 $env:HTTPS_PROXY = 'http://proxy.example.com:8080'

80 irm https://claude.ai/install.ps1 | iex

81 ```

82 </Tab>

83</Tabs>

84 

85### Verifique su PATH

86 

87Si la instalación fue exitosa pero obtiene un error `command not found` o `not recognized` al ejecutar `claude`, el directorio de instalación no está en su PATH. Su shell busca programas en directorios listados en PATH, y el instalador coloca `claude` en `~/.local/bin/claude` en macOS/Linux o `%USERPROFILE%\.local\bin\claude.exe` en Windows.

88 

89Verifique si el directorio de instalación está en su PATH listando sus entradas de PATH y filtrando por `local/bin`:

90 

91<Tabs>

92 <Tab title="macOS/Linux">

93 ```bash theme={null}

94 echo $PATH | tr ':' '\n' | grep -Fx "$HOME/.local/bin"

95 ```

96 

97 Si esto imprime `/Users/you/.local/bin` o `/home/you/.local/bin`, el directorio está en su PATH y puede saltar a [Verifique instalaciones conflictivas](#check-for-conflicting-installations). Si no hay salida, agréguelo a su configuración de shell.

98 

99 Para Zsh, el predeterminado en macOS:

100 

101 ```bash theme={null}

102 echo 'export PATH="$HOME/.local/bin:$PATH"' >> ~/.zshrc

103 source ~/.zshrc

104 ```

105 

106 Para Bash, el predeterminado en la mayoría de distribuciones de Linux:

107 

108 ```bash theme={null}

109 echo 'export PATH="$HOME/.local/bin:$PATH"' >> ~/.bashrc

110 source ~/.bashrc

111 ```

112 

113 Alternativamente, cierre y vuelva a abrir su terminal.

114 

115 Para otros shells como fish o Nushell, agregue `~/.local/bin` a su PATH usando la sintaxis de configuración propia de su shell, luego reinicie su terminal.

116 

117 Verifique que la corrección funcionó:

118 

119 ```bash theme={null}

120 claude --version

121 ```

122 </Tab>

123 

124 <Tab title="Windows PowerShell">

125 ```powershell theme={null}

126 $env:PATH -split ';' | Select-String '\.local\\bin'

127 ```

128 

129 Si no hay salida, agregue el directorio de instalación a su PATH de usuario:

130 

131 ```powershell theme={null}

132 $currentPath = [Environment]::GetEnvironmentVariable('PATH', 'User')

133 [Environment]::SetEnvironmentVariable('PATH', "$currentPath;$env:USERPROFILE\.local\bin", 'User')

134 ```

135 

136 Reinicie su terminal para que el cambio surta efecto.

137 

138 Verifique que la corrección funcionó:

139 

140 ```powershell theme={null}

141 claude --version

142 ```

143 </Tab>

144 

145 <Tab title="Windows CMD">

146 ```batch theme={null}

147 echo %PATH% | findstr /i "local\bin"

148 ```

149 

150 Si no hay salida, abra Configuración del sistema, vaya a Variables de entorno, y agregue `%USERPROFILE%\.local\bin` a su variable PATH de usuario. Reinicie su terminal.

151 

152 Verifique que la corrección funcionó:

153 

154 ```batch theme={null}

155 claude --version

156 ```

157 </Tab>

158</Tabs>

159 

160### Verifique instalaciones conflictivas

161 

162Múltiples instalaciones de Claude Code pueden causar desajustes de versión o comportamiento inesperado. Verifique qué está instalado:

163 

164<Tabs>

165 <Tab title="macOS/Linux">

166 Liste todos los binarios `claude` encontrados en su PATH:

167 

168 ```bash theme={null}

169 which -a claude

170 ```

171 

172 Si esto no imprime nada, ningún `claude` está en su PATH aún. Vuelva a [Verifique su PATH](#verify-your-path).

173 

174 Verifique las tres ubicaciones de donde puede venir un binario `claude`. `~/.local/bin/claude` es el instalador nativo, `~/.claude/local/` es una instalación npm local heredada creada por versiones anteriores de Claude Code, y la lista npm global muestra una instalación `-g`:

175 

176 ```bash theme={null}

177 ls -la ~/.local/bin/claude

178 ```

179 

180 ```bash theme={null}

181 ls -la ~/.claude/local/

182 ```

183 

184 ```bash theme={null}

185 npm -g ls @anthropic-ai/claude-code 2>/dev/null

186 ```

187 </Tab>

188 

189 <Tab title="Windows PowerShell">

190 Liste todos los binarios `claude` encontrados en su PATH:

191 

192 ```powershell theme={null}

193 where.exe claude

194 ```

195 

196 Verifique si el instalador nativo colocó un binario:

197 

198 ```powershell theme={null}

199 Test-Path "$env:USERPROFILE\.local\bin\claude.exe"

200 ```

201 </Tab>

202</Tabs>

203 

204Si encuentra múltiples instalaciones, mantenga solo una. La instalación nativa en `~/.local/bin/claude` en macOS/Linux o `%USERPROFILE%\.local\bin\claude.exe` en Windows es recomendada. Elimine las extras:

205 

206Desinstale una instalación npm global:

207 

208```bash theme={null}

209npm uninstall -g @anthropic-ai/claude-code

210```

211 

212Elimine la instalación npm local heredada:

213 

214```bash theme={null}

215rm -rf ~/.claude/local

216```

217 

218En Windows, use PowerShell:

219 

220```powershell theme={null}

221Remove-Item -Recurse -Force "$env:USERPROFILE\.claude\local"

222```

223 

224Elimine una instalación de Homebrew en macOS. Si instaló el cask `claude-code@latest`, sustituya ese nombre:

225 

226```bash theme={null}

227brew uninstall --cask claude-code

228```

229 

230Elimine una instalación de WinGet en Windows:

231 

232```powershell theme={null}

233winget uninstall Anthropic.ClaudeCode

234```

235 

236### Verifique permisos de directorio

237 

238El instalador necesita acceso de escritura a `~/.local/bin/` y `~/.claude/` en macOS y Linux. En Windows la ubicación de instalación está bajo `%USERPROFILE%`, que es escribible por su usuario de forma predeterminada, por lo que esta sección rara vez se aplica allí.

239 

240Verifique si los directorios son escribibles:

241 

242```bash theme={null}

243test -w ~/.local/bin && echo "writable" || echo "not writable"

244test -w ~/.claude && echo "writable" || echo "not writable"

245```

246 

247Si algún directorio no es escribible, cree el directorio de instalación y establezca su usuario como propietario:

248 

249```bash theme={null}

250sudo mkdir -p ~/.local/bin

251sudo chown -R $(whoami) ~/.local

252```

253 

254### Verifique que el binario funciona

255 

256Si `claude --version` imprime una versión pero `claude` se bloquea o cuelga al iniciar, ejecute estas verificaciones para reducir la causa. Si `claude --version` dice comando no encontrado, vaya a [Verifique su PATH](#verify-your-path) primero; los comandos a continuación asumen que `claude` está en su PATH.

257 

258Confirme que el binario existe y es ejecutable:

259 

260```bash theme={null}

261ls -la "$(command -v claude)"

262```

263 

264En Windows, use PowerShell:

265 

266```powershell theme={null}

267Get-Command claude | Select-Object Source

268```

269 

270En Linux, verifique bibliotecas compartidas faltantes. Si `ldd` muestra bibliotecas faltantes, es posible que deba instalar paquetes del sistema. En Alpine Linux y otras distribuciones basadas en musl, consulte [Configuración de Alpine Linux](/es/setup#alpine-linux-and-musl-based-distributions).

271 

272```bash theme={null}

273ldd "$(command -v claude)" | grep "not found"

274```

275 

276Confirme que el binario puede ejecutarse:

277 

278```bash theme={null}

279claude --version

280```

281 

282## Problemas comunes de instalación

283 

284Estos son los problemas de instalación más frecuentes y sus soluciones.

285 

286### El script de instalación devuelve HTML en lugar de un script de shell

287 

288Al ejecutar el comando de instalación, puede ver uno de estos errores:

289 

290```text theme={null}

291bash: line 1: syntax error near unexpected token `<'

292bash: line 1: `<!DOCTYPE html>'

293```

294 

295En PowerShell, el mismo problema aparece como:

296 

297```text theme={null}

298Invoke-Expression: Missing argument in parameter list.

299```

300 

301Esto significa que la URL de instalación devolvió una página HTML en lugar del script de instalación. Si la página HTML dice "App unavailable in region", Claude Code no está disponible en su país. Consulte [países admitidos](https://www.anthropic.com/supported-countries).

302 

303De lo contrario, esto puede ocurrir debido a problemas de red, enrutamiento regional o una interrupción temporal del servicio.

304 

305**Soluciones:**

306 

3071. **Use un método de instalación alternativo**:

308 

309 En macOS, instale a través de Homebrew:

310 

311 ```bash theme={null}

312 brew install --cask claude-code

313 ```

314 

315 En Windows, instale a través de WinGet:

316 

317 ```powershell theme={null}

318 winget install Anthropic.ClaudeCode

319 ```

320 

3212. **Reinténtelo después de unos minutos**: el problema suele ser temporal. Espere e intente el comando original nuevamente.

322 

323### `command not found: claude` después de la instalación

324 

325La instalación finalizó pero `claude` no funciona. El error exacto varía según la plataforma:

326 

327| Plataforma | Mensaje de error |

328| :---------- | :--------------------------------------------------------------------- |

329| macOS | `zsh: command not found: claude` |

330| Linux | `bash: claude: command not found` |

331| Windows CMD | `'claude' is not recognized as an internal or external command` |

332| PowerShell | `claude : The term 'claude' is not recognized as the name of a cmdlet` |

333 

334Esto significa que el directorio de instalación no está en la ruta de búsqueda de su shell. Consulte [Verifique su PATH](#verify-your-path) para la corrección en cada plataforma.

335 

336### `curl: (56) Failure writing output to destination`

337 

338El comando `curl ... | bash` descarga el script y lo canaliza a Bash para su ejecución. Este error significa que la conexión se interrumpió antes de que el script terminara de descargarse. Las causas comunes incluyen interrupciones de red, la descarga siendo bloqueada a mitad de camino, o límites de recursos del sistema.

339 

340**Soluciones:**

341 

3421. **Verifique la estabilidad de la red**: Los binarios de Claude Code se alojan en `downloads.claude.ai`. Pruebe que pueda alcanzarlo:

343 ```bash theme={null}

344 curl -sI https://downloads.claude.ai/claude-code-releases/latest

345 ```

346 Una línea `HTTP/2 200` significa que alcanzó el servidor y el fallo original probablemente fue intermitente; reintente el comando de instalación. Si ve `Could not resolve host` o un tiempo de espera de conexión, su red está bloqueando la descarga.

347 

3482. **Intente un método de instalación alternativo**:

349 

350 En macOS:

351 

352 ```bash theme={null}

353 brew install --cask claude-code

354 ```

355 

356 En Windows:

357 

358 ```powershell theme={null}

359 winget install Anthropic.ClaudeCode

360 ```

361 

362### Errores de conexión TLS o SSL

363 

364Errores como `curl: (35) TLS connect error`, `schannel: next InitializeSecurityContext failed`, o el `Could not establish trust relationship for the SSL/TLS secure channel` de PowerShell indican fallos de protocolo de enlace TLS.

365 

366**Soluciones:**

367 

3681. **Actualice sus certificados CA del sistema**:

369 

370 En Ubuntu/Debian:

371 

372 ```bash theme={null}

373 sudo apt-get update && sudo apt-get install ca-certificates

374 ```

375 

376 En macOS, el curl del sistema usa el almacén de confianza de Keychain; actualizar macOS en sí actualiza los certificados raíz.

377 

3782. **En Windows, habilite TLS 1.2** en PowerShell antes de ejecutar el instalador:

379 ```powershell theme={null}

380 [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12

381 irm https://claude.ai/install.ps1 | iex

382 ```

383 

3843. **Verifique la interferencia de proxy o firewall**: los proxies corporativos que realizan inspección TLS pueden causar estos errores, incluidos `unable to get local issuer certificate` y `SELF_SIGNED_CERT_IN_CHAIN`. Para el paso de instalación, apunte curl a su paquete CA corporativo con `--cacert`:

385 ```bash theme={null}

386 curl --cacert /path/to/corporate-ca.pem -fsSL https://claude.ai/install.sh | bash

387 ```

388 Para Claude Code en sí una vez instalado, establezca `NODE_EXTRA_CA_CERTS` para que las solicitudes de API confíen en el mismo paquete:

389 ```bash theme={null}

390 export NODE_EXTRA_CA_CERTS=/path/to/corporate-ca.pem

391 ```

392 Pregunte a su equipo de TI por el archivo de certificado si no lo tiene. También puede intentar en una conexión directa para confirmar que el proxy es la causa.

393 

3944. **En Windows, omita las verificaciones de revocación de certificados** si ve `CRYPT_E_NO_REVOCATION_CHECK (0x80092012)` o `CRYPT_E_REVOCATION_OFFLINE (0x80092013)`. Estos significan que curl alcanzó el servidor pero su red bloquea la búsqueda de revocación de certificados, que es común detrás de firewalls corporativos. Agregue `--ssl-revoke-best-effort` al comando de instalación:

395 ```batch theme={null}

396 curl --ssl-revoke-best-effort -fsSL https://claude.ai/install.cmd -o install.cmd && install.cmd && del install.cmd

397 ```

398 Alternativamente, instale con `winget install Anthropic.ClaudeCode`, que evita curl por completo.

399 

400### `Failed to fetch version from downloads.claude.ai`

401 

402El instalador no pudo alcanzar el servidor de descarga. Esto típicamente significa que `downloads.claude.ai` está bloqueado en su red.

403 

404**Soluciones:**

405 

4061. **Pruebe la conectividad directamente**:

407 ```bash theme={null}

408 curl -sI https://downloads.claude.ai/claude-code-releases/latest

409 ```

410 

4112. **Si está detrás de un proxy**, establezca `HTTPS_PROXY` para que el instalador pueda enrutarse a través de él. Consulte [configuración de proxy](/es/network-config#proxy-configuration) para detalles.

412 ```bash theme={null}

413 export HTTPS_PROXY=http://proxy.example.com:8080

414 curl -fsSL https://claude.ai/install.sh | bash

415 ```

416 

4173. **Si está en una red restringida**, intente una red diferente o VPN, o use un método de instalación alternativo:

418 

419 En macOS:

420 

421 ```bash theme={null}

422 brew install --cask claude-code

423 ```

424 

425 En Windows:

426 

427 ```powershell theme={null}

428 winget install Anthropic.ClaudeCode

429 ```

430 

431### Comando de instalación incorrecto en Windows

432 

433Si ve `'irm' is not recognized`, `The token '&&' is not valid`, o `'bash' is not recognized as the name of a cmdlet`, copió el comando de instalación para un shell o sistema operativo diferente.

434 

435* **`irm` no reconocido**: está en CMD, no en PowerShell. Tiene dos opciones:

436 

437 Abra PowerShell buscando "PowerShell" en el menú Inicio, luego ejecute el comando de instalación original:

438 

439 ```powershell theme={null}

440 irm https://claude.ai/install.ps1 | iex

441 ```

442 

443 O permanezca en CMD y use el instalador de CMD en su lugar:

444 

445 ```batch theme={null}

446 curl -fsSL https://claude.ai/install.cmd -o install.cmd && install.cmd && del install.cmd

447 ```

448 

449* **`&&` no válido**: está en PowerShell pero ejecutó el comando del instalador de CMD. Use el instalador de PowerShell:

450 ```powershell theme={null}

451 irm https://claude.ai/install.ps1 | iex

452 ```

453 

454* **`bash` no reconocido**: ejecutó el instalador de macOS/Linux en Windows. Use el instalador de PowerShell en su lugar:

455 ```powershell theme={null}

456 irm https://claude.ai/install.ps1 | iex

457 ```

458 

459### `The process cannot access the file` durante la instalación en Windows

460 

461Si el instalador de PowerShell falla con `Failed to download binary: The process cannot access the file ... because it is being used by another process`, el instalador no pudo escribir en `%USERPROFILE%\.claude\downloads`. Esto generalmente significa que un intento de instalación anterior aún se está ejecutando, o el software antivirus está escaneando un binario descargado parcialmente en esa carpeta.

462 

463Cierre cualquier otra ventana de PowerShell ejecutando el instalador y espere a que los escaneos de antivirus liberen el archivo. Luego elimine la carpeta de descargas y ejecute el instalador nuevamente:

464 

465```powershell theme={null}

466Remove-Item -Recurse -Force "$env:USERPROFILE\.claude\downloads"

467irm https://claude.ai/install.ps1 | iex

468```

469 

470### La instalación se cuelga en servidores Linux con poca memoria

471 

472Si ve `Killed` durante la instalación en un VPS o instancia en la nube:

473 

474```text theme={null}

475Setting up Claude Code...

476Installing Claude Code native build latest...

477bash: line 142: 34803 Killed "$binary_path" install ${TARGET:+"$TARGET"}

478```

479 

480El asesino de OOM de Linux terminó el proceso porque el sistema se quedó sin memoria. Claude Code requiere al menos 4 GB de RAM disponible.

481 

482**Soluciones:**

483 

4841. **Agregue espacio de intercambio** si su servidor tiene RAM limitada. El intercambio usa espacio en disco como memoria de desbordamiento, permitiendo que la instalación se complete incluso con RAM física baja.

485 

486 Cree un archivo de intercambio de 2 GB y habilítelo:

487 

488 ```bash theme={null}

489 sudo fallocate -l 2G /swapfile

490 sudo chmod 600 /swapfile

491 sudo mkswap /swapfile

492 sudo swapon /swapfile

493 ```

494 

495 Luego reintente la instalación:

496 

497 ```bash theme={null}

498 curl -fsSL https://claude.ai/install.sh | bash

499 ```

500 

5012. **Cierre otros procesos** para liberar memoria antes de instalar.

502 

5033. **Use una instancia más grande** si es posible. Claude Code requiere al menos 4 GB de RAM.

504 

505### La instalación se cuelga en Docker

506 

507Al instalar Claude Code en un contenedor Docker, instalar como root en `/` puede causar cuelgues.

508 

509**Soluciones:**

510 

5111. **Establezca un directorio de trabajo** antes de ejecutar el instalador. Cuando se ejecuta desde `/`, el instalador escanea todo el sistema de archivos, lo que causa un uso excesivo de memoria. Establecer `WORKDIR` limita el escaneo a un directorio pequeño:

512 ```dockerfile theme={null}

513 WORKDIR /tmp

514 RUN curl -fsSL https://claude.ai/install.sh | bash

515 ```

516 

5172. **Aumente los límites de memoria de Docker** si usa Docker Desktop:

518 ```bash theme={null}

519 docker build --memory=4g .

520 ```

521 

522### Claude Desktop anula el comando `claude` en Windows

523 

524Si instaló una versión anterior de Claude Desktop, puede registrar un `Claude.exe` en el directorio `WindowsApps` que toma prioridad de PATH sobre Claude Code CLI. Ejecutar `claude` abre la aplicación de escritorio en lugar de la CLI.

525 

526Actualice Claude Desktop a la versión más reciente para corregir este problema.

527 

528### Claude Code en Windows requiere Git para Windows (para bash) o PowerShell

529 

530Claude Code en Windows nativo necesita al menos un shell: [Git para Windows](https://git-scm.com/downloads/win) para Bash, o PowerShell. Cuando ninguno se encuentra, este error aparece al inicio. Si solo se encuentra PowerShell, Claude Code usa la herramienta PowerShell en lugar de Bash.

531 

532**Si ninguno está instalado**, instale uno:

533 

534* Git para Windows: descargue desde [git-scm.com/downloads/win](https://git-scm.com/downloads/win). Durante la configuración, seleccione "Add to PATH." Reinicie su terminal después de instalar.

535* PowerShell 7: descargue desde [aka.ms/powershell](https://aka.ms/powershell).

536 

537**Si Git ya está instalado** pero Claude Code no puede encontrarlo, establezca la ruta en su [archivo settings.json](/es/settings):

538 

539```json theme={null}

540{

541 "env": {

542 "CLAUDE_CODE_GIT_BASH_PATH": "C:\\Program Files\\Git\\bin\\bash.exe"

543 }

544}

545```

546 

547Si su Git está instalado en otro lugar, encuentre la ruta ejecutando `where.exe git` en PowerShell y use la ruta `bin\bash.exe` de ese directorio.

548 

549### Claude Code no admite Windows de 32 bits

550 

551Windows incluye dos entradas de PowerShell en el menú Inicio: `Windows PowerShell` y `Windows PowerShell (x86)`. La entrada x86 se ejecuta como un proceso de 32 bits y desencadena este error incluso en una máquina de 64 bits. Para verificar en qué caso está, ejecute esto en la misma ventana que produjo el error:

552 

553```powershell theme={null}

554[Environment]::Is64BitOperatingSystem

555```

556 

557Si esto imprime `True`, su sistema operativo está bien. Cierre la ventana, abra `Windows PowerShell` sin el sufijo x86, y ejecute el comando de instalación nuevamente.

558 

559Si esto imprime `False`, está en una edición de Windows de 32 bits. Claude Code requiere un sistema operativo de 64 bits. Consulte los [requisitos del sistema](/es/setup#system-requirements).

560 

561### Desajuste binario musl o glibc de Linux

562 

563Si ve errores sobre bibliotecas compartidas faltantes como `libstdc++.so.6` o `libgcc_s.so.1` después de la instalación, el instalador puede haber descargado la variante binaria incorrecta para su sistema.

564 

565```text theme={null}

566Error loading shared library libstdc++.so.6: No such file or directory

567```

568 

569Esto puede ocurrir en sistemas basados en glibc que tienen paquetes de compilación cruzada musl instalados, causando que el instalador detecte incorrectamente el sistema como musl.

570 

571**Soluciones:**

572 

5731. **Verifique qué libc usa su sistema**:

574 ```bash theme={null}

575 ldd --version 2>&1 | head -1

576 ```

577 La salida que menciona `GNU libc` o `GLIBC` significa glibc. La salida que menciona `musl` significa musl.

578 

5792. **Si está en glibc pero obtuvo el binario musl**, elimine la instalación y reinstale. También puede descargar manualmente el binario correcto usando el manifiesto en `https://downloads.claude.ai/claude-code-releases/{VERSION}/manifest.json`. Presente un [problema de GitHub](https://github.com/anthropics/claude-code/issues) con la salida de `ldd --version` y `ls /lib/libc.musl*`.

580 

5813. **Si realmente está en musl**, como Alpine Linux, instale los paquetes requeridos:

582 ```bash theme={null}

583 apk add libgcc libstdc++ ripgrep

584 ```

585 

586### `Illegal instruction`

587 

588Si ejecutar `claude` o el instalador imprime `Illegal instruction`, el binario nativo usa instrucciones de CPU que su procesador no admite. Hay dos causas distintas.

589 

590**Desajuste de arquitectura.** El instalador descargó el binario incorrecto, por ejemplo x86 en un servidor ARM. Verifique con `uname -m` en macOS o Linux, o `$env:PROCESSOR_ARCHITECTURE` en PowerShell. Si el resultado no coincide con el binario que recibió, [presente un problema de GitHub](https://github.com/anthropics/claude-code/issues) con la salida.

591 

592**Conjunto de instrucciones AVX faltante.** Si su arquitectura es correcta pero aún ve `Illegal instruction`, su CPU probablemente carece de AVX u otra instrucción que requiere el binario. Esto afecta aproximadamente a procesadores Intel y AMD anteriores a 2013, y máquinas virtuales donde el hipervisor no pasa AVX al invitado.

593 

594En un VPS o VM, ejecute `grep -m1 -ow avx /proc/cpuinfo`; un resultado vacío significa que AVX no está disponible para el invitado.

595 

596No hay solución de binario nativo; siga el [problema #50384](https://github.com/anthropics/claude-code/issues/50384) para el estado, e incluya su modelo de CPU de `grep -m1 "model name" /proc/cpuinfo` en Linux o `sysctl -n machdep.cpu.brand_string` en macOS al reportar.

597 

598Los métodos de instalación alternativos descargan el mismo binario nativo y no resolverán ninguna de las causas.

599 

600### `dyld: cannot load` en macOS

601 

602Si ve `dyld: cannot load`, `dyld: Symbol not found`, o `Abort trap: 6` durante la instalación, el binario es incompatible con su versión de macOS o hardware.

603 

604```text theme={null}

605dyld: cannot load 'claude-2.1.42-darwin-x64' (load command 0x80000034 is unknown)

606Abort trap: 6

607```

608 

609Un error `Symbol not found` que hace referencia a `libicucore` también indica que su versión de macOS es más antigua que la que admite el binario:

610 

611```text theme={null}

612dyld: Symbol not found: _ubrk_clone

613 Referenced from: claude-darwin-x64 (which was built for Mac OS X 13.0)

614 Expected in: /usr/lib/libicucore.A.dylib

615```

616 

617**Soluciones:**

618 

6191. **Verifique su versión de macOS**: Claude Code requiere macOS 13.0 o posterior. Abra el menú Apple y seleccione Acerca de esta Mac para verificar su versión.

620 

6212. **Actualice macOS** si está en una versión anterior. El binario usa comandos de carga y bibliotecas del sistema que las versiones anteriores de macOS no admiten. Los métodos de instalación alternativos como Homebrew descargan el mismo binario y no resolverán este error.

622 

623### `Exec format error` en WSL1

624 

625Si ejecutar `claude` en WSL imprime `cannot execute binary file: Exec format error`, está en WSL1 y está experimentando una regresión binaria nativa conocida rastreada en el [problema #38788](https://github.com/anthropics/claude-code/issues/38788). Los encabezados del programa del binario cambiaron de una manera que el cargador de WSL1 no puede manejar.

626 

627La corrección más limpia es convertir su distribución a WSL2 desde PowerShell:

628 

629```powershell theme={null}

630wsl --set-version <DistroName> 2

631```

632 

633Si necesita permanecer en WSL1, invoque el binario a través del enlazador dinámico. Agregue esta función a `~/.bashrc` dentro de WSL, reemplazando la ruta si su directorio de inicio es diferente:

634 

635```bash theme={null}

636claude() {

637 /lib64/ld-linux-x86-64.so.2 "$(readlink -f "$HOME/.local/bin/claude")" "$@"

638}

639```

640 

641Luego ejecute `source ~/.bashrc` e intente `claude` nuevamente.

642 

643### Errores de instalación de npm en WSL

644 

645Estos problemas se aplican si instaló Claude Code con `npm install -g` dentro de WSL. Si usó el [instalador nativo](/es/setup), omita esta sección.

646 

647**Problemas de detección de SO o plataforma.** Si npm reporta un desajuste de plataforma durante la instalación, WSL probablemente está recogiendo el `npm` de Windows. Ejecute `npm config set os linux` primero, luego instale con `npm install -g @anthropic-ai/claude-code --force`. No use `sudo`.

648 

649**`exec: node: not found` al ejecutar `claude`.** Su entorno WSL probablemente está usando la instalación de Node.js de Windows. Confirme con `which npm` y `which node`: las rutas que comienzan con `/mnt/c/` son binarios de Windows, mientras que las rutas de Linux comienzan con `/usr/`. Para corregir esto, instale Node a través del administrador de paquetes de su distribución de Linux o a través de [`nvm`](https://github.com/nvm-sh/nvm).

650 

651**Conflictos de versión de nvm.** Si tiene nvm instalado tanto en WSL como en Windows, cambiar versiones de Node en WSL puede romper porque WSL importa el PATH de Windows de forma predeterminada y el nvm de Windows toma prioridad. La causa más común es que nvm no está cargado en su shell. Agregue el cargador de nvm a `~/.bashrc` o `~/.zshrc`:

652 

653```bash theme={null}

654export NVM_DIR="$HOME/.nvm"

655[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"

656[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion"

657```

658 

659O cárguelo en su sesión actual:

660 

661```bash theme={null}

662source ~/.nvm/nvm.sh

663```

664 

665Si nvm está cargado pero las rutas de Windows aún toman prioridad, anteponga explícitamente su ruta de Node de Linux:

666 

667```bash theme={null}

668export PATH="$HOME/.nvm/versions/node/$(node -v)/bin:$PATH"

669```

670 

671<Warning>

672 Evite deshabilitar la importación de PATH de Windows a través de `appendWindowsPath = false` ya que esto rompe la capacidad de llamar ejecutables de Windows desde WSL. De manera similar, evite desinstalar Node.js de Windows si lo usa para desarrollo de Windows.

673</Warning>

674 

675### Errores de permisos durante la instalación

676 

677Si el instalador nativo falla con errores de permisos, el directorio de destino puede no ser escribible. Consulte [Verifique permisos de directorio](#check-directory-permissions).

678 

679Si instaló previamente con npm y está experimentando errores de permisos específicos de npm, cambie al instalador nativo:

680 

681```bash theme={null}

682curl -fsSL https://claude.ai/install.sh | bash

683```

684 

685### Binario nativo no encontrado después de la instalación de npm

686 

687El paquete npm `@anthropic-ai/claude-code` obtiene el binario nativo a través de una dependencia opcional por plataforma como `@anthropic-ai/claude-code-darwin-arm64`. Si ejecutar `claude` después de instalar imprime `Could not find native binary package "@anthropic-ai/claude-code-<platform>"`, verifique las siguientes causas:

688 

689* **Las dependencias opcionales están deshabilitadas.** Elimine `--omit=optional` de su comando de instalación de npm, `--no-optional` de pnpm, o `--ignore-optional` de yarn, y verifique que `.npmrc` no establezca `optional=false`. Luego reinstale. El binario nativo se entrega solo como una dependencia opcional, por lo que no hay alternativa de JavaScript si se omite.

690* **Plataforma no admitida.** Los binarios precompilados se publican para `darwin-arm64`, `darwin-x64`, `linux-x64`, `linux-arm64`, `linux-x64-musl`, `linux-arm64-musl`, `win32-x64`, y `win32-arm64`. Claude Code no envía un binario para otras plataformas; consulte los [requisitos del sistema](/es/setup#system-requirements).

691* **El espejo npm corporativo carece de los paquetes de plataforma.** Asegúrese de que su registro refleje los ocho paquetes `@anthropic-ai/claude-code-*` de plataforma además del paquete meta.

692 

693Instalar con `--ignore-scripts` no desencadena este error. El paso de postinstalación que vincula el binario en su lugar se omite, por lo que Claude Code recurre a un contenedor que localiza e inicia el binario de plataforma en cada lanzamiento. Esto funciona pero se inicia más lentamente; reinstale con scripts habilitados para ejecución directa.

694 

695## Inicio de sesión y autenticación

696 

697Estas secciones abordan fallos de inicio de sesión, errores de OAuth y problemas de tokens.

698 

699### Reinicie su inicio de sesión

700 

701Cuando el inicio de sesión falla y la causa no es obvia, una reautenticación limpia resuelve la mayoría de los casos:

702 

7031. Ejecute `/logout` para cerrar sesión completamente

7042. Cierre Claude Code

7053. Reinicie con `claude` y complete el proceso de autenticación nuevamente

706 

707Si el navegador no se abre automáticamente durante el inicio de sesión, presione `c` para copiar la URL de OAuth a su portapapeles, luego péguelo en un navegador manualmente. Esto también funciona cuando la URL se envuelve en varias líneas en una terminal estrecha o SSH y no se puede hacer clic directamente.

708 

709### Error de OAuth: Código inválido

710 

711Si ve `OAuth error: Invalid code. Please make sure the full code was copied`, el código de inicio de sesión expiró o fue truncado durante la copia y pegado.

712 

713**Soluciones:**

714 

715* Presione Intro para reintentar y complete el inicio de sesión rápidamente después de que se abra el navegador

716* Escriba `c` para copiar la URL completa si el navegador no se abre automáticamente

717* Si usa una sesión remota/SSH, el navegador puede abrirse en la máquina incorrecta. Copie la URL mostrada en la terminal y ábrala en su navegador local en su lugar.

718 

719### 403 Forbidden después del inicio de sesión

720 

721Si ve `API Error: 403 {"error":{"type":"forbidden","message":"Request not allowed"}}` después de iniciar sesión:

722 

723* **Usuarios de Claude Pro/Max**: verifique que su suscripción esté activa en [claude.ai/settings](https://claude.ai/settings)

724* **Usuarios de Anthropic Console**: confirme que su cuenta tiene el rol "Claude Code" o "Developer". Los administradores asignan esto en Anthropic Console bajo Settings → Members.

725* **Detrás de un proxy**: los proxies corporativos pueden interferir con las solicitudes de API. Consulte [configuración de red](/es/network-config) para la configuración de proxy.

726 

727### Esta organización ha sido deshabilitada con una suscripción activa

728 

729Si ve `API Error: 400 ... "This organization has been disabled"` a pesar de tener una suscripción activa de Claude, una variable de entorno `ANTHROPIC_API_KEY` está anulando su suscripción. Esto comúnmente ocurre cuando una clave API antigua de un empleador anterior o proyecto anterior aún está configurada en su perfil de shell.

730 

731Cuando `ANTHROPIC_API_KEY` está presente y lo ha aprobado, Claude Code usa esa clave en lugar de las credenciales de OAuth de su suscripción. En modo no interactivo con la bandera `-p`, la clave siempre se usa cuando está presente. Consulte [precedencia de autenticación](/es/authentication#authentication-precedence) para el orden de resolución completo.

732 

733Para usar su suscripción en su lugar, desestablezca la variable de entorno y elimínela de su perfil de shell:

734 

735```bash theme={null}

736unset ANTHROPIC_API_KEY

737claude

738```

739 

740Verifique `~/.zshrc`, `~/.bashrc`, o `~/.profile` para líneas `export ANTHROPIC_API_KEY=...` y elimínelas para hacer el cambio permanente. En Windows, verifique su perfil de PowerShell en `$PROFILE` y sus variables de entorno de usuario para `ANTHROPIC_API_KEY`. Ejecute `/status` dentro de Claude Code para confirmar qué método de autenticación está activo.

741 

742### El inicio de sesión de OAuth falla en WSL2, SSH o contenedores

743 

744Cuando Claude Code se ejecuta en WSL2, en una máquina remota a través de SSH, o dentro de un contenedor, el navegador generalmente se abre en un host diferente y su redirección no puede alcanzar el servidor de devolución de llamada local de Claude Code. Después de que inicie sesión, el navegador muestra un código de inicio de sesión en lugar de redirigirse automáticamente. Pegue ese código en la terminal en el indicador `Paste code here if prompted` para completar el inicio de sesión.

745 

746Si el navegador no se abre en absoluto desde WSL2, establezca la variable de entorno `BROWSER` en la ruta de su navegador de Windows:

747 

748```bash theme={null}

749export BROWSER="/mnt/c/Program Files/Google/Chrome/Application/chrome.exe"

750claude

751```

752 

753Alternativamente, presione `c` en el indicador de inicio de sesión interactivo para copiar la URL de OAuth, o copie la URL que `claude auth login` imprime, y ábrala en un navegador en su máquina local.

754 

755Si pegar el código en el indicador interactivo no hace nada, el enlace de pegado de su terminal probablemente no está llegando al campo de entrada. Intente el atajo de pegado alternativo de su terminal, a menudo clic derecho o Shift+Insert en Windows Terminal, o use `claude auth login` en su lugar, que lee el código pegado desde la entrada estándar:

756 

757```bash theme={null}

758claude auth login

759```

760 

761Esta alternativa también se aplica en Windows nativo o cualquier terminal donde pegar en el indicador interactivo falla.

762 

763### No ha iniciado sesión o el token ha expirado

764 

765Si Claude Code le solicita que inicie sesión nuevamente después de una sesión, su token de OAuth puede haber expirado.

766 

767Ejecute `/login` para reautenticarse. Si esto ocurre frecuentemente, verifique que su reloj del sistema sea preciso, ya que la validación de tokens depende de marcas de tiempo correctas.

768 

769En macOS, el inicio de sesión también puede fallar cuando Keychain está bloqueado o su contraseña está fuera de sincronización con su contraseña de cuenta, lo que impide que Claude Code guarde credenciales. Ejecute `claude doctor` para verificar el acceso a Keychain. Para desbloquear Keychain manualmente, ejecute `security unlock-keychain ~/Library/Keychains/login.keychain-db`. Si desbloquear no ayuda, abra Keychain Access, seleccione el keychain `login`, y elija Edit > Change Password for Keychain "login" para resincronizarlo con su contraseña de cuenta.

770 

771### Las credenciales de Bedrock, Vertex o Foundry no se cargan

772 

773Si configuró Claude Code para usar un proveedor en la nube y ve `Could not load credentials from any providers` en Bedrock, `Could not load the default credentials` en Vertex, o `ChainedTokenCredential authentication failed` en Foundry, su CLI del proveedor en la nube probablemente no está autenticado en el shell actual.

774 

775Para Bedrock, confirme que sus credenciales de AWS son válidas:

776 

777```bash theme={null}

778aws sts get-caller-identity

779```

780 

781Para Vertex AI, confirme que `ANTHROPIC_VERTEX_PROJECT_ID` y `CLOUD_ML_REGION` están configurados en su shell, luego establezca credenciales predeterminadas de aplicación:

782 

783```bash theme={null}

784gcloud auth application-default login

785```

786 

787Para Microsoft Foundry, confirme que `ANTHROPIC_FOUNDRY_API_KEY` está configurado, o inicie sesión con la CLI de Azure para que la cadena de credenciales predeterminada pueda encontrar su cuenta:

788 

789```bash theme={null}

790az login

791```

792 

793Si las credenciales funcionan en su terminal pero no en la extensión de VS Code o JetBrains, el proceso del IDE probablemente no heredó su entorno de shell. Establezca las variables de entorno del proveedor en la configuración propia del IDE, o inicie el IDE desde una terminal donde ya estén exportadas.

794 

795Consulte [Amazon Bedrock](/es/amazon-bedrock), [Google Vertex AI](/es/google-vertex-ai), o [Microsoft Foundry](/es/microsoft-foundry) para la configuración completa del proveedor.

796 

797## Aún atrapado

798 

799Si ninguno de los anteriores resuelve su problema:

800 

8011. Verifique el [repositorio de GitHub](https://github.com/anthropics/claude-code/issues) para problemas conocidos, o abra uno nuevo con su sistema operativo, el comando de instalación que ejecutó, y la salida de error completa

8022. Si `claude --version` funciona pero algo más está mal, ejecute `claude doctor` para un informe de diagnóstico automatizado

8033. Si puede iniciar una sesión, use `/feedback` dentro de Claude Code para reportar el problema

troubleshooting.md +121 −0 created

Details

1> ## Documentation Index

2> Fetch the complete documentation index at: https://code.claude.com/docs/llms.txt

3> Use this file to discover all available pages before exploring further.

4 

5# Solución de problemas

6 

7> Corrige el alto uso de CPU o memoria, cuelgues, thrashing de auto-compact, y problemas de búsqueda en Claude Code, y encuentra la página correcta para otros problemas.

8 

9Esta página cubre problemas de rendimiento, estabilidad y búsqueda una vez que Claude Code está en ejecución. Para otros problemas, comienza con la página que coincida con dónde estés atrapado:

10 

11| Síntoma | Ir a |

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) |

14| Bucles de inicio de sesión, errores de OAuth, `403 Forbidden`, "organización deshabilitada", credenciales de Bedrock/Vertex/Foundry | [Solucionar problemas de instalación e inicio de sesión](/es/troubleshoot-install#login-and-authentication) |

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

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

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

18| 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| Plugin de JetBrains o IDE no detectado | [Integración de JetBrains](/es/jetbrains#troubleshooting) |

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

21 

22Si 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, servidores MCP, y uso de contexto. Si `claude` no inicia en absoluto, ejecuta `claude doctor` desde tu shell en su lugar.

23 

24## Rendimiento y estabilidad

25 

26Estas secciones cubren problemas relacionados con el uso de recursos, capacidad de respuesta, y comportamiento de búsqueda.

27 

28### Alto uso de CPU o memoria

29 

30Claude Code está diseñado para funcionar con la mayoría de entornos de desarrollo, pero puede consumir recursos significativos al procesar bases de código grandes. Si estás experimentando problemas de rendimiento:

31 

321. Usa `/compact` regularmente para reducir el tamaño del contexto

332. Cierra y reinicia Claude Code entre tareas principales

343. Considera añadir directorios de compilación grandes a tu archivo `.gitignore`

35 

36Si el uso de memoria se mantiene alto después de estos pasos, ejecuta `/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 tu directorio de inicio.

37 

38El 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, abre el archivo `.heapsnapshot` en Chrome DevTools bajo Memory → Load. Adjunta ambos archivos al reportar un problema de memoria en [GitHub](https://github.com/anthropics/claude-code/issues).

39 

40### Auto-compaction se detiene con un error de thrashing

41 

42Si ves `Autocompact is thrashing: the context refilled to the limit...`, la compactación automática fue exitosa pero un archivo o salida de herramienta rellenó inmediatamente la ventana de contexto varias veces seguidas. Claude Code deja de reintentar para evitar desperdiciar llamadas de API en un bucle que no está haciendo progreso.

43 

44Para recuperarse:

45 

461. Pide 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

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

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

494. Ejecuta `/clear` si la conversación anterior ya no es necesaria

50 

51### El comando se cuelga o congela

52 

53Si Claude Code parece no responder:

54 

551. Presiona Ctrl+C para intentar cancelar la operación actual

562. Si no responde, es posible que necesites cerrar la terminal y reiniciar

57 

58Reiniciar no pierde tu conversación. Ejecuta `claude --resume` en el mismo directorio para retomar la sesión.

59 

60### Problemas de búsqueda y descubrimiento

61 

62Si la herramienta Search, menciones `@file`, agentes personalizados, o skills personalizados no encuentran archivos, el binario `ripgrep` incluido puede no ejecutarse en tu sistema. Instala el paquete `ripgrep` de tu plataforma e indica a Claude Code que lo use en su lugar:

63 

64<Tabs>

65 <Tab title="macOS">

66 ```bash theme={null}

67 brew install ripgrep

68 ```

69 </Tab>

70 

71 <Tab title="Ubuntu/Debian">

72 ```bash theme={null}

73 sudo apt install ripgrep

74 ```

75 </Tab>

76 

77 <Tab title="Alpine">

78 ```bash theme={null}

79 apk add ripgrep

80 ```

81 </Tab>

82 

83 <Tab title="Arch">

84 ```bash theme={null}

85 pacman -S ripgrep

86 ```

87 </Tab>

88 

89 <Tab title="Windows">

90 ```powershell theme={null}

91 winget install BurntSushi.ripgrep.MSVC

92 ```

93 </Tab>

94</Tabs>

95 

96Luego establece `USE_BUILTIN_RIPGREP=0` en tu [entorno](/es/env-vars).

97 

98### Resultados de búsqueda lentos o incompletos en WSL

99 

100Las penalizaciones de rendimiento de lectura de disco al [trabajar entre sistemas de archivos en WSL](https://learn.microsoft.com/en-us/windows/wsl/filesystems) pueden resultar en menos coincidencias de las esperadas al usar Claude Code en WSL. La búsqueda aún funciona, pero devuelve menos resultados que en un sistema de archivos nativo.

101 

102<Note>

103 `/doctor` mostrará Search como OK en este caso.

104</Note>

105 

106**Soluciones:**

107 

1081. **Envía búsquedas más específicas**: reduce el número de archivos buscados especificando directorios o tipos de archivo: "Search for JWT validation logic in the auth-service package" o "Find use of md5 hash in JS files".

109 

1102. **Mueve el proyecto al sistema de archivos de Linux**: si es posible, asegúrate de que tu proyecto esté ubicado en el sistema de archivos de Linux (`/home/`) en lugar del sistema de archivos de Windows (`/mnt/c/`).

111 

1123. **Usa Windows nativo en su lugar**: considera ejecutar Claude Code nativamente en Windows en lugar de a través de WSL, para mejor rendimiento del sistema de archivos.

113 

114## Obtén más ayuda

115 

116Si estás experimentando problemas no cubiertos aquí:

117 

1181. Ejecuta `/doctor` para verificar la salud de la instalación, validez de la configuración, configuración de MCP, y uso de contexto en un solo paso

1192. Usa el comando `/feedback` dentro de Claude Code para reportar problemas directamente a Anthropic

1203. Verifica el [repositorio de GitHub](https://github.com/anthropics/claude-code) para problemas conocidos

1214. Pregunta a Claude directamente sobre sus capacidades y características. Claude tiene acceso integrado a su documentación.

ultraplan.md +84 −0 created

Details

1> ## Documentation Index

2> Fetch the complete documentation index at: https://code.claude.com/docs/llms.txt

3> Use this file to discover all available pages before exploring further.

4 

5# Planificar en la nube con ultraplan

6 

7> Inicie un plan desde su CLI, redáctelo en Claude Code en la web, luego ejecútelo de forma remota o de vuelta en su terminal

8 

9<Note>

10 Ultraplan está en vista previa de investigación y requiere Claude Code v2.1.91 o posterior. El comportamiento y las capacidades pueden cambiar según los comentarios.

11</Note>

12 

13Ultraplan entrega una tarea de planificación desde su CLI local a una sesión de [Claude Code en la web](/es/claude-code-on-the-web) que se ejecuta en [modo plan](/es/permission-modes#analyze-before-you-edit-with-plan-mode). Claude redacta el plan en la nube mientras usted continúa trabajando en su terminal. Cuando el plan esté listo, lo abre en su navegador para comentar sobre secciones específicas, solicitar revisiones y elegir dónde ejecutarlo.

14 

15Esto es útil cuando desea una superficie de revisión más completa que la que ofrece el terminal:

16 

17* **Comentarios dirigidos**: comente sobre secciones individuales del plan en lugar de responder a todo

18* **Redacción sin intervención**: el plan se genera de forma remota, por lo que su terminal permanece libre para otro trabajo

19* **Ejecución flexible**: apruebe el plan para ejecutarlo en la web y abra una solicitud de extracción, o envíelo de vuelta a su terminal

20 

21Ultraplan requiere una cuenta de [Claude Code en la web](/es/claude-code-on-the-web) y un repositorio de GitHub. Debido a que se ejecuta en la infraestructura en la nube de Anthropic, no está disponible cuando se utiliza Amazon Bedrock, Google Cloud Vertex AI o Microsoft Foundry. La sesión en la nube se ejecuta en el [entorno en la nube](/es/claude-code-on-the-web#the-cloud-environment) predeterminado de su cuenta. Si aún no tiene un entorno en la nube, ultraplan crea uno automáticamente cuando se inicia por primera vez.

22 

23## Inicie ultraplan desde la CLI

24 

25Desde su sesión de CLI local, puede iniciar ultraplan de tres formas:

26 

27* **Comando**: ejecute `/ultraplan` seguido de su indicación

28* **Palabra clave**: incluya la palabra `ultraplan` en cualquier lugar de un indicación normal

29* **Desde un plan local**: cuando Claude termina un plan local y muestra el diálogo de aprobación, elija **No, refinar con Ultraplan en Claude Code en la web** para enviar el borrador a la nube para una iteración adicional

30 

31Por ejemplo, para planificar una migración de servicio con el comando:

32 

33```

34/ultraplan migrate the auth service from sessions to JWTs

35```

36 

37Las rutas de comando y palabra clave abren un diálogo de confirmación antes de iniciar. La ruta del plan local omite este diálogo porque esa selección ya sirve como confirmación. Si [Remote Control](/es/remote-control) está activo, se desconecta cuando ultraplan se inicia porque ambas características ocupan la interfaz claude.ai/code y solo una puede estar conectada a la vez.

38 

39Después de que se inicia la sesión en la nube, el indicador de entrada de indicación de su CLI muestra un indicador de estado mientras la sesión remota funciona:

40 

41| Estado | Significado |

42| :----------------------------- | :----------------------------------------------------------------------------- |

43| `◇ ultraplan` | Claude está investigando su base de código y redactando el plan |

44| `◇ ultraplan needs your input` | Claude tiene una pregunta aclaratoria; abra el enlace de sesión para responder |

45| `◆ ultraplan ready` | El plan está listo para revisar en su navegador |

46 

47Ejecute `/tasks` y seleccione la entrada ultraplan para abrir una vista de detalle con el enlace de sesión, la actividad del agente y una acción **Stop ultraplan**. Detener archiva la sesión en la nube y borra el indicador; nada se guarda en su terminal.

48 

49## Revise y revise el plan en su navegador

50 

51Cuando el estado cambia a `◆ ultraplan ready`, abra el enlace de sesión para ver el plan en claude.ai. El plan aparece en una vista de revisión dedicada:

52 

53* **Comentarios en línea**: resalte cualquier pasaje y deje un comentario para que Claude lo aborde

54* **Reacciones de emoji**: reaccione a una sección para señalar aprobación o preocupación sin escribir un comentario completo

55* **Barra lateral de esquema**: salte entre secciones del plan

56 

57Cuando le pide a Claude que aborde sus comentarios, revisa el plan y presenta un borrador actualizado. Puede iterar tantas veces como sea necesario antes de elegir dónde ejecutar.

58 

59## Elija dónde ejecutar

60 

61Cuando el plan se vea bien, elige desde el navegador si Claude lo implementa en la misma sesión en la nube o lo envía de vuelta a su terminal en espera.

62 

63### Ejecutar en la web

64 

65Seleccione **Approve Claude's plan and start coding** en su navegador para que Claude lo implemente en la misma sesión de Claude Code en la web. Su terminal muestra una confirmación, el indicador de estado se borra y el trabajo continúa en la nube. Cuando la implementación finaliza, [revise los cambios](/es/claude-code-on-the-web#review-changes) y cree una solicitud de extracción desde la interfaz web.

66 

67### Envíe el plan de vuelta a su terminal

68 

69Seleccione **Approve plan and teleport back to terminal** en su navegador para implementar el plan localmente con acceso completo a su entorno. Esta opción aparece cuando la sesión se inició desde su CLI y el terminal aún está sondeando. La sesión web se archiva para que no continúe funcionando en paralelo.

70 

71Su terminal muestra el plan en un diálogo titulado **Ultraplan approved** con tres opciones:

72 

73* **Implement here**: inyecte el plan en su conversación actual y continúe desde donde lo dejó

74* **Start new session**: borre la conversación actual y comience de nuevo solo con el plan como contexto

75* **Cancel**: guarde el plan en un archivo sin ejecutarlo; Claude imprime la ruta del archivo para que pueda volver a él más tarde

76 

77Si inicia una nueva sesión, Claude imprime un comando `claude --resume` en la parte superior para que pueda volver a su conversación anterior más tarde.

78 

79## Recursos relacionados

80 

81* [Claude Code en la web](/es/claude-code-on-the-web): la infraestructura en la nube en la que se ejecuta ultraplan

82* [Modo plan](/es/permission-modes#analyze-before-you-edit-with-plan-mode): cómo funciona la planificación en una sesión local

83* [Buscar errores con ultrareview](/es/ultrareview): la contraparte de revisión de código de ultraplan para detectar problemas antes de la fusión

84* [Remote Control](/es/remote-control): use la interfaz claude.ai/code con una sesión que se ejecuta en su propia máquina

ultrareview.md +108 −0 created

Details

1> ## Documentation Index

2> Fetch the complete documentation index at: https://code.claude.com/docs/llms.txt

3> Use this file to discover all available pages before exploring further.

4 

5# Encuentra errores con ultrareview

6 

7> Ejecuta una revisión de código profunda y multiagente en la nube con /ultrareview para encontrar y verificar errores antes de fusionar.

8 

9<Note>

10 Ultrareview es una característica de vista previa de investigación disponible en Claude Code v2.1.86 y posterior. La característica, los precios y la disponibilidad pueden cambiar según los comentarios.

11</Note>

12 

13Ultrareview es una revisión de código profunda que se ejecuta en Claude Code en la infraestructura web. Cuando ejecutas `/ultrareview`, Claude Code lanza una flota de agentes revisores en un sandbox remoto para encontrar errores en tu rama o solicitud de extracción.

14 

15En comparación con una `/review` local, ultrareview ofrece:

16 

17* **Mayor señal**: cada hallazgo reportado se reproduce y verifica de forma independiente, por lo que los resultados se centran en errores reales en lugar de sugerencias de estilo

18* **Cobertura más amplia**: muchos agentes revisores exploran el cambio en paralelo, lo que expone problemas que una revisión de un solo paso podría perder

19* **Sin uso de recursos locales**: la revisión se ejecuta completamente en un sandbox remoto, por lo que tu terminal permanece libre para otro trabajo mientras se ejecuta

20 

21Ultrareview requiere autenticación con una cuenta de Claude.ai porque se ejecuta en Claude Code en la infraestructura web. Si has iniciado sesión solo con una clave API, ejecuta `/login` y autentica con Claude.ai primero. Ultrareview no está disponible cuando se usa Claude Code con Amazon Bedrock, Google Cloud Vertex AI o Microsoft Foundry, y no está disponible para organizaciones que han habilitado Zero Data Retention.

22 

23## Ejecuta ultrareview desde la CLI

24 

25Inicia una revisión desde cualquier repositorio git en la CLI de Claude Code.

26 

27```text theme={null}

28/ultrareview

29```

30 

31Sin argumentos, ultrareview revisa la diferencia entre tu rama actual y la rama predeterminada, incluidos los cambios sin confirmar y preparados en tu árbol de trabajo. Claude Code agrupa el estado del repositorio y lo carga en un sandbox remoto para la revisión.

32 

33Para revisar una solicitud de extracción de GitHub en su lugar, pasa el número de PR.

34 

35```text theme={null}

36/ultrareview 1234

37```

38 

39En modo PR, el sandbox remoto clona la solicitud de extracción directamente desde GitHub en lugar de agrupar tu árbol de trabajo local. El modo PR requiere un remoto `github.com` en el repositorio.

40 

41<Tip>

42 Si tu repositorio es demasiado grande para agrupar, Claude Code te solicita que uses el modo PR en su lugar. Envía tu rama y abre un PR borrador, luego ejecuta `/ultrareview <PR-number>`.

43</Tip>

44 

45Antes de lanzar, Claude Code muestra un diálogo de confirmación con el alcance de la revisión (incluido el recuento de archivos y líneas cuando se revisa una rama), tus ejecuciones gratuitas restantes y el costo estimado. Después de confirmar, la revisión continúa en segundo plano y puedes seguir usando tu sesión. El comando se ejecuta solo cuando lo invocas con `/ultrareview`; Claude no inicia un ultrareview por su cuenta.

46 

47## Precios y ejecuciones gratuitas

48 

49Ultrareview es una característica premium que se factura contra el uso adicional en lugar del uso incluido en tu plan.

50 

51| Plan | Ejecuciones gratuitas incluidas | Después de ejecuciones gratuitas |

52| ----------------- | -------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------- |

53| Pro | 3 ejecuciones gratuitas hasta el 5 de mayo de 2026 | facturado como [uso adicional](https://support.claude.com/es/articles/12429409-extra-usage-for-paid-claude-plans) |

54| Max | 3 ejecuciones gratuitas hasta el 5 de mayo de 2026 | facturado como [uso adicional](https://support.claude.com/es/articles/12429409-extra-usage-for-paid-claude-plans) |

55| Team y Enterprise | ninguno | facturado como [uso adicional](https://support.claude.com/es/articles/12429409-extra-usage-for-paid-claude-plans) |

56 

57Los suscriptores de Pro y Max reciben tres ejecuciones gratuitas de ultrareview para probar la característica. Estas tres ejecuciones son una asignación única por cuenta, no se renuevan y vencen el 5 de mayo de 2026. Después de usar las tres, o después de que finalice el período de ejecuciones gratuitas, cada revisión se factura al uso adicional y típicamente cuesta entre $5 y $20 dependiendo del tamaño del cambio. Una ejecución se cuenta una vez que la sesión remota comienza, por lo que una revisión que detengas temprano o que no se complete correctamente sigue utilizando una ejecución gratuita. Para una revisión pagada, el uso adicional se factura solo por la porción que se ejecutó.

58 

59Debido a que ultrareview siempre se factura como uso adicional fuera de las ejecuciones gratuitas, tu cuenta u organización debe tener el uso adicional habilitado antes de poder lanzar una revisión pagada. Si el uso adicional no está habilitado, Claude Code bloquea el lanzamiento y te vincula a la configuración de facturación donde puedes activarlo. También puedes ejecutar `/extra-usage` para verificar o cambiar tu configuración actual.

60 

61## Rastrear una revisión en ejecución

62 

63Una revisión típicamente toma de 5 a 10 minutos. La revisión se ejecuta como una tarea de fondo, por lo que puedes seguir trabajando en tu sesión, iniciar otros comandos o cerrar la terminal completamente.

64 

65Usa `/tasks` para ver revisiones en ejecución y completadas, abre la vista de detalle para una revisión o detén una revisión que está en progreso. Detener una revisión archiva la sesión en la nube, y los hallazgos parciales no se devuelven. Cuando la revisión finaliza, los hallazgos verificados aparecen como una notificación en tu sesión. Cada hallazgo incluye la ubicación del archivo y una explicación del problema para que puedas pedirle a Claude que lo corrija directamente.

66 

67## Ejecuta ultrareview de forma no interactiva

68 

69Usa el subcomando `claude ultrareview` para iniciar un ultrareview desde CI o un script sin una sesión interactiva. El subcomando lanza la misma revisión que `/ultrareview`, se bloquea hasta que finalice la revisión remota, imprime los hallazgos en stdout y sale con código 0 en caso de éxito o 1 en caso de fallo.

70 

71```bash theme={null}

72claude ultrareview

73claude ultrareview 1234

74claude ultrareview origin/main

75```

76 

77Sin argumentos, el subcomando revisa la diferencia entre su rama actual y la rama predeterminada. Pase un número de PR para revisar una solicitud de extracción, o pase una rama base para revisar la diferencia contra esa rama en su lugar. Invocar el subcomando cuenta como consentimiento para el aviso de facturación y términos que muestra el comando interactivo.

78 

79Los mensajes de progreso y la URL de sesión en vivo van a stderr para que stdout permanezca analizable. Use estas banderas para controlar la salida y el tiempo de espera:

80 

81| Bandera | Descripción |

82| --------------------- | ------------------------------------------------------------------------------------ |

83| `--json` | Imprime la carga útil `bugs.json` sin procesar en lugar de los hallazgos formateados |

84| `--timeout <minutes>` | Minutos máximos para esperar a que finalice la revisión. Por defecto es 30 |

85 

86Ejecutar `claude ultrareview` requiere la misma autenticación y configuración de uso adicional que `/ultrareview`. El subcomando sale con código 0 cuando la revisión se completa con o sin hallazgos, código 1 cuando la revisión falla al lanzarse, la sesión remota genera un error o el tiempo de espera se agota, y código 130 cuando se interrumpe con Ctrl-C. La revisión remota continúa ejecutándose si interrumpe el subcomando; siga la URL de sesión impresa en stderr para verla en el navegador.

87 

88Para revisiones automáticas en solicitudes de extracción de GitHub, [Code Review](/es/code-review) se integra directamente con su repositorio e publica hallazgos como comentarios de PR en línea sin un paso de CLI.

89 

90## Cómo ultrareview se compara con /review

91 

92Ambos comandos revisan código, pero se dirigen a diferentes etapas de tu flujo de trabajo.

93 

94| | `/review` | `/ultrareview` |

95| ----------- | ---------------------------------------- | ------------------------------------------------------------------------------------- |

96| Se ejecuta | localmente en tu sesión | remotamente en un sandbox en la nube |

97| Profundidad | revisión de un solo paso | flota multiagente con verificación independiente |

98| Duración | segundos a pocos minutos | aproximadamente 5 a 10 minutos |

99| Costo | cuenta hacia el uso normal | ejecuciones gratuitas, luego aproximadamente $5 a $20 por revisión como uso adicional |

100| Mejor para | retroalimentación rápida mientras iteras | confianza previa a la fusión en cambios sustanciales |

101 

102Usa `/review` para retroalimentación rápida mientras trabajas. Usa `/ultrareview` antes de fusionar un cambio sustancial cuando deseas una pasada más profunda que detecte problemas que una revisión única podría perder.

103 

104## Recursos relacionados

105 

106* [Claude Code en la web](/es/claude-code-on-the-web): aprende cómo funcionan las sesiones remotas y los sandboxes en la nube

107* [Planifica cambios complejos con ultraplan](/es/ultraplan): la contraparte de planificación de ultrareview para trabajo de diseño inicial

108* [Gestiona costos de manera efectiva](/es/costs): rastrear el uso y establecer límites de gasto

voice-dictation.md +191 −0 created

Details

1> ## Documentation Index

2> Fetch the complete documentation index at: https://code.claude.com/docs/llms.txt

3> Use this file to discover all available pages before exploring further.

4 

5# Dictado de voz

6 

7> Hable sus indicaciones en la CLI de Claude Code con dictado de voz de mantener para grabar o tocar para grabar.

8 

9Hable sus indicaciones en lugar de escribirlas en la CLI de Claude Code. Su voz se transcribe en vivo en la entrada de indicaciones, por lo que puede mezclar voz y escritura en el mismo mensaje. Habilite el dictado con `/voice`, luego mantenga presionada una tecla mientras habla o toque una vez para comenzar y nuevamente para enviar.

10 

11<Note>

12 El dictado de voz requiere Claude Code v2.1.69 o posterior. El modo de toque requiere v2.1.116 o posterior. Verifique su versión con `claude --version`.

13</Note>

14 

15## Requisitos

16 

17El dictado de voz transmite su audio grabado a los servidores de Anthropic para su transcripción. El audio no se procesa localmente. El servicio de voz a texto solo está disponible cuando se autentica con una cuenta de Claude.ai, y no está disponible cuando Claude Code está configurado para usar una clave de API de Anthropic directamente, Amazon Bedrock, Google Vertex AI o Microsoft Foundry. La transcripción no consume mensajes de Claude ni tokens y no cuenta hacia los límites mostrados en `/usage`. Consulte [uso de datos](/es/data-usage) para ver cómo Anthropic maneja sus datos.

18 

19El dictado de voz también necesita acceso local al micrófono, por lo que no funciona en entornos remotos como [Claude Code en la web](/es/claude-code-on-the-web) o sesiones SSH. En WSL, el dictado de voz requiere WSLg para acceso de audio, que se incluye con WSL2 en Windows 11. En Windows 10 o WSL1, ejecute Claude Code en Windows nativo en su lugar.

20 

21La grabación de audio utiliza un módulo nativo integrado en macOS, Linux y Windows. En Linux, si el módulo nativo no puede cargarse, Claude Code vuelve a `arecord` de ALSA utils o `rec` de SoX. Si ninguno está disponible, `/voice` imprime un comando de instalación para su gestor de paquetes.

22 

23La [extensión de VS Code](/es/vs-code) de Claude Code también admite dictado de voz con el mismo requisito de cuenta de Claude.ai. No está disponible en sesiones remotas de VS Code, incluidas SSH, Dev Containers y Codespaces, porque el micrófono está en su máquina local y la extensión se ejecuta en el host remoto.

24 

25## Habilitar dictado de voz

26 

27Ejecute `/voice` para habilitar el dictado. La primera vez que lo habilite, Claude Code ejecuta una verificación de micrófono. En macOS, esto activa la solicitud de permiso de micrófono del sistema para su terminal si nunca se le ha otorgado.

28 

29```

30/voice

31Voice mode enabled (hold). Hold Space to record. Dictation language: en (/config to change).

32```

33 

34`/voice` acepta un argumento de modo opcional:

35 

36| Comando | Efecto |

37| :------------ | :------------------------------------------------------- |

38| `/voice` | Alternar activado o desactivado, mantener el modo actual |

39| `/voice hold` | Habilitar en [modo de mantener](#hold-to-record) |

40| `/voice tap` | Habilitar en [modo de toque](#tap-to-record-and-send) |

41| `/voice off` | Desactivar |

42 

43El dictado de voz persiste entre sesiones. Configúrelo directamente en su [archivo de configuración de usuario](/es/settings) en lugar de ejecutar `/voice`:

44 

45```json theme={null}

46{

47 "voice": {

48 "enabled": true,

49 "mode": "tap"

50 }

51}

52```

53 

54Mientras el dictado de voz está habilitado, el pie de página de entrada muestra una sugerencia `hold Space to speak` cuando la indicación está vacía. El texto de la sugerencia es el mismo en ambos modos, y no aparece si tiene una [línea de estado personalizada](/es/statusline) configurada.

55 

56La transcripción se ajusta para vocabulario de codificación en ambos modos. Los términos de desarrollo comunes como `regex`, `OAuth`, `JSON` y `localhost` se reconocen correctamente, y el nombre del proyecto actual y el nombre de la rama de git se agregan automáticamente como sugerencias de reconocimiento.

57 

58## Mantener para grabar

59 

60El modo de mantener es pulsar para hablar: la grabación se ejecuta mientras mantiene la tecla presionada y se detiene cuando la suelta. Este es el modo predeterminado.

61 

62Mantenga presionada la `Barra espaciadora` para comenzar a grabar. Claude Code detecta una tecla mantenida observando eventos rápidos de repetición de teclas desde su terminal, por lo que hay un breve calentamiento antes de que comience la grabación. El pie de página muestra `keep holding…` durante el calentamiento, luego cambia a una forma de onda en vivo una vez que la grabación está activa.

63 

64Los primeros caracteres de repetición de tecla escriben en la entrada durante el calentamiento y se eliminan automáticamente cuando se activa la grabación. Un único toque de `Barra espaciadora` aún escribe un espacio, ya que la detección de mantener solo se activa en repetición rápida.

65 

66<Tip>

67 Para omitir el calentamiento, cambie al [modo de toque](#tap-to-record-and-send) con `/voice tap`, o [reenlace a una combinación de modificador](#rebind-the-dictation-key) como `meta+k`. Las combinaciones de modificadores comienzan a grabar en la primera pulsación de tecla.

68</Tip>

69 

70Su voz aparece en la indicación mientras habla, atenuada hasta que se finaliza la transcripción. Suelte la `Barra espaciadora` para detener la grabación y finalizar el texto. La transcripción se inserta en la posición del cursor y el cursor permanece al final del texto insertado, por lo que puede mezclar escritura y dictado en cualquier orden. Mantenga presionada la `Barra espaciadora` nuevamente para agregar otra grabación, o mueva el cursor primero para insertar voz en otro lugar de la indicación:

71 

72```

73> refactor the auth middleware to ▮

74 # hold Space, speak "use the new token validation helper"

75> refactor the auth middleware to use the new token validation helper▮

76```

77 

78De forma predeterminada, soltar la tecla inserta la transcripción y espera a que presione `Enter`. Establezca `"autoSubmit": true` en el objeto de configuración `voice` para enviar la indicación automáticamente cuando suelte la tecla, siempre que la transcripción tenga al menos tres palabras.

79 

80## Tocar para grabar y enviar

81 

82El modo de toque alterna la grabación con una sola pulsación de tecla: toque una vez para comenzar, hable, luego toque nuevamente para enviar la indicación. No hay calentamiento y no necesita mantener la tecla presionada.

83 

84Habilite el modo de toque con `/voice tap`. Con la entrada de indicación vacía, toque la `Barra espaciadora` para comenzar a grabar. El pie de página muestra una forma de onda en vivo mientras se graba. Toque la `Barra espaciadora` nuevamente para detener. Claude Code inserta la transcripción y envía la indicación automáticamente cuando la transcripción tiene al menos tres palabras. Las transcripciones más cortas se insertan pero no se envían, por lo que un toque accidental no envía una palabra extraviada.

85 

86El primer toque solo comienza a grabar cuando la entrada de indicación está vacía, por lo que aún puede escribir espacios normalmente mientras compone un mensaje. El segundo toque detiene la grabación independientemente del contenido de entrada. La grabación también se detiene automáticamente después de 15 segundos de silencio o dos minutos en total.

87 

88## Cambiar el idioma del dictado

89 

90El dictado de voz utiliza la misma [configuración de `language`](/es/settings) que controla el idioma de respuesta de Claude. Si esa configuración está vacía, el dictado predeterminado es inglés. En la extensión de VS Code, si `language` está vacío, el dictado utiliza la configuración `accessibility.voice.speechLanguage` de VS Code antes de predeterminar al inglés.

91 

92<Accordion title="Idiomas de dictado admitidos">

93 | Idioma | Código |

94 | :-------- | :----- |

95 | Checo | `cs` |

96 | Danés | `da` |

97 | Holandés | `nl` |

98 | Inglés | `en` |

99 | Francés | `fr` |

100 | Alemán | `de` |

101 | Griego | `el` |

102 | Hindi | `hi` |

103 | Indonesio | `id` |

104 | Italiano | `it` |

105 | Japonés | `ja` |

106 | Coreano | `ko` |

107 | Noruego | `no` |

108 | Polaco | `pl` |

109 | Portugués | `pt` |

110 | Ruso | `ru` |

111 | Español | `es` |

112 | Sueco | `sv` |

113 | Turco | `tr` |

114 | Ucraniano | `uk` |

115</Accordion>

116 

117Establezca el idioma en `/config` o directamente en la configuración. Puede usar el [código de idioma BCP 47](https://en.wikipedia.org/wiki/IETF_language_tag) o el nombre del idioma:

118 

119```json theme={null}

120{

121 "language": "japanese"

122}

123```

124 

125Si su configuración de `language` no está en la lista admitida, `/voice` le advierte al habilitar y vuelve al inglés para el dictado. Las respuestas de texto de Claude no se ven afectadas por esta alternativa.

126 

127## Reenlazar la tecla de dictado

128 

129La tecla de dictado está vinculada a `voice:pushToTalk` en el contexto `Chat` y predeterminada a `Space`. El mismo enlace controla los modos de mantener y tocar. Reenlácelo en [`~/.claude/keybindings.json`](/es/keybindings):

130 

131```json theme={null}

132{

133 "bindings": [

134 {

135 "context": "Chat",

136 "bindings": {

137 "meta+k": "voice:pushToTalk",

138 "space": null

139 }

140 }

141 ]

142}

143```

144 

145Establecer `"space": null` elimina el enlace predeterminado. Omítalo si desea que ambas teclas estén activas.

146 

147En modo de mantener, evite enlazar una tecla de letra simple como `v` ya que la detección de mantener se basa en la repetición de teclas y la letra se escribe en la indicación durante el calentamiento. Use `Space`, o use una combinación de modificador como `meta+k` para comenzar a grabar en la primera pulsación de tecla sin calentamiento. El modo de toque no tiene calentamiento, por lo que la mayoría de las teclas funcionan.

148 

149Algunas teclas no se entregan a las aplicaciones de terminal y no se pueden enlazar en absoluto. Por ejemplo, `Caps Lock` muestra un error si intenta enlazarlo. Consulte [personalizar atajos de teclado](/es/keybindings) para la sintaxis completa de enlace de teclas y la lista de atajos reservados.

150 

151## Solución de problemas

152 

153Problemas comunes cuando el dictado de voz no se activa o no graba:

154 

155* **`Voice mode requires a Claude.ai account`**: está autenticado con una clave de API o un proveedor de terceros. Ejecute `/login` para iniciar sesión con una cuenta de Claude.ai.

156* **`Microphone access is denied`**: otorgue permiso de micrófono a su terminal en la configuración del sistema. En macOS, vaya a Configuración del Sistema → Privacidad y Seguridad → Micrófono y habilite su aplicación de terminal, luego ejecute `/voice` nuevamente. En Windows, vaya a Configuración → Privacidad y seguridad → Micrófono y active el acceso al micrófono para aplicaciones de escritorio, luego ejecute `/voice` nuevamente. Si su terminal no aparece en la configuración de macOS, consulte [Terminal no aparece en la configuración de micrófono de macOS](#terminal-not-listed-in-macos-microphone-settings).

157* **`No audio recording tool found` en Linux**: el módulo de audio nativo no pudo cargarse y no hay alternativa instalada. Instale SoX con el comando que se muestra en el mensaje de error, por ejemplo `sudo apt-get install sox`.

158* **Nada sucede al mantener presionada la `Barra espaciadora` en modo de mantener**: observe la entrada de indicación mientras mantiene presionada. Si los espacios siguen acumulándose, el dictado de voz probablemente esté desactivado; ejecute `/voice hold` para habilitarlo. Si solo aparecen uno o dos espacios y luego nada, el dictado de voz está activado pero la detección de mantener no se activa. La detección de mantener requiere que su terminal envíe eventos de repetición de teclas, por lo que no puede detectar una tecla mantenida si la repetición de teclas está deshabilitada a nivel del sistema operativo. Cambie al modo de toque con `/voice tap` para evitar el requisito de repetición de teclas.

159* **Tocar la `Barra espaciadora` escribe un espacio en lugar de grabar en modo de toque**: el primer toque solo comienza a grabar cuando la entrada de indicación está vacía. Borre la entrada primero, o verifique que esté en modo de toque ejecutando `/voice tap`.

160* **`No audio detected from microphone`**: la grabación comenzó pero capturó silencio. Confirme que el dispositivo de entrada correcto está configurado como predeterminado del sistema y que su nivel de entrada no está silenciado ni cerca de cero. En Windows, abra Configuración → Sistema → Sonido → Entrada y seleccione su micrófono. En macOS, abra Configuración del Sistema → Sonido → Entrada.

161* **`No speech detected`**: el audio llegó al servicio de transcripción pero no se reconocieron palabras. Hable más cerca del micrófono, reduzca el ruido de fondo y confirme que su [idioma de dictado](#change-the-dictation-language) coincida con el idioma que está hablando.

162* **La transcripción es confusa o en el idioma incorrecto**: el dictado predeterminado es inglés. Si está dictando en otro idioma, configúrelo en `/config` primero. Consulte [Cambiar el idioma del dictado](#change-the-dictation-language).

163 

164### Terminal no aparece en la configuración de micrófono de macOS

165 

166Si su aplicación de terminal no aparece en Configuración del Sistema → Privacidad y Seguridad → Micrófono, no hay alternancia que pueda habilitar. Restablezca el estado de permiso para su terminal para que la siguiente ejecución de `/voice` active una solicitud de permiso de macOS nueva.

167 

168<Steps>

169 <Step title="Restablecer el permiso de micrófono para su terminal">

170 Ejecute `tccutil reset Microphone <bundle-id>`, reemplazando `<bundle-id>` con el identificador de su terminal: `com.apple.Terminal` para la Terminal integrada, o `com.googlecode.iterm2` para iTerm2. Para otras terminales, busque el identificador con `osascript -e 'id of app "AppName"'`.

171 

172 <Warning>

173 Puede ejecutar `tccutil reset Microphone` sin un ID de paquete, pero revoca el acceso al micrófono de todas las aplicaciones en su Mac, incluidas aplicaciones como Zoom o Slack. Cada aplicación deberá volver a solicitar acceso en el próximo uso, así que no lo ejecute durante una llamada activa.

174 </Warning>

175 </Step>

176 

177 <Step title="Salir y relanzar su terminal">

178 macOS no volverá a solicitar un proceso que ya se está ejecutando. Salga de la aplicación de terminal con Cmd+Q, no solo cierre sus ventanas, luego ábrala nuevamente.

179 </Step>

180 

181 <Step title="Activar una solicitud nueva">

182 Inicie Claude Code y ejecute `/voice`. macOS solicita acceso al micrófono; permítalo.

183 </Step>

184</Steps>

185 

186## Ver también

187 

188* [Personalizar atajos de teclado](/es/keybindings): reenlace `voice:pushToTalk` y otras acciones de teclado de CLI

189* [Configurar configuración](/es/settings): referencia completa para `voice`, `language` y otras claves de configuración

190* [Modo interactivo](/es/interactive-mode): atajos de teclado, modos de entrada y controles de sesión

191* [Comandos](/es/commands): referencia para `/voice`, `/config` y todos los demás comandos

vs-code.md +511 −0 created

Details

1> ## Documentation Index

2> Fetch the complete documentation index at: https://code.claude.com/docs/llms.txt

3> Use this file to discover all available pages before exploring further.

4 

5# Usar Claude Code en VS Code

6 

7> Instala y configura la extensión Claude Code para VS Code. Obtén asistencia de codificación con IA con diffs en línea, menciones @, revisión de planes y atajos de teclado.

8 

9<img src="https://mintcdn.com/claude-code/-YhHHmtSxwr7W8gy/images/vs-code-extension-interface.jpg?fit=max&auto=format&n=-YhHHmtSxwr7W8gy&q=85&s=300652d5678c63905e6b0ea9e50835f8" alt="Editor de VS Code con el panel de extensión Claude Code abierto en el lado derecho, mostrando una conversación con Claude" width="2500" height="1155" data-path="images/vs-code-extension-interface.jpg" />

10 

11La extensión de VS Code proporciona una interfaz gráfica nativa para Claude Code, integrada directamente en tu IDE. Esta es la forma recomendada de usar Claude Code en VS Code.

12 

13Con la extensión, puedes revisar y editar los planes de Claude antes de aceptarlos, aceptar automáticamente ediciones a medida que se realizan, mencionar archivos con rangos de líneas específicas de tu selección, acceder al historial de conversaciones y abrir múltiples conversaciones en pestañas o ventanas separadas.

14 

15## Requisitos previos

16 

17Antes de instalar, asegúrate de tener:

18 

19* VS Code 1.98.0 o superior

20* Una cuenta de Anthropic (iniciarás sesión cuando abras la extensión por primera vez). Si estás utilizando un proveedor de terceros como Amazon Bedrock o Google Vertex AI, consulta [Usar proveedores de terceros](#usar-proveedores-de-terceros) en su lugar.

21 

22<Tip>

23 La extensión incluye la CLI (interfaz de línea de comandos), a la que puedes acceder desde la terminal integrada de VS Code para funciones avanzadas. Consulta [Extensión de VS Code frente a CLI de Claude Code](#extensión-de-vs-code-frente-a-cli-de-claude-code) para obtener más detalles.

24</Tip>

25 

26## Instalar la extensión

27 

28Haz clic en el enlace de tu IDE para instalar directamente:

29 

30* [Instalar para VS Code](vscode:extension/anthropic.claude-code)

31* [Instalar para Cursor](cursor:extension/anthropic.claude-code)

32 

33O en VS Code, presiona `Cmd+Shift+X` (Mac) o `Ctrl+Shift+X` (Windows/Linux) para abrir la vista Extensiones, busca "Claude Code" y haz clic en **Instalar**.

34 

35<Note>Si la extensión no aparece después de la instalación, reinicia VS Code o ejecuta "Developer: Reload Window" desde la Paleta de comandos.</Note>

36 

37## Comenzar

38 

39Una vez instalada, puedes comenzar a usar Claude Code a través de la interfaz de VS Code:

40 

41<Steps>

42 <Step title="Abrir el panel de Claude Code">

43 En todo VS Code, el icono Spark indica Claude Code: <img src="https://mintcdn.com/claude-code/c5r9_6tjPMzFdDDT/images/vs-code-spark-icon.svg?fit=max&auto=format&n=c5r9_6tjPMzFdDDT&q=85&s=3ca45e00deadec8c8f4b4f807da94505" alt="Icono Spark" style={{display: "inline", height: "0.85em", verticalAlign: "middle"}} width="16" height="16" data-path="images/vs-code-spark-icon.svg" />

44 

45 La forma más rápida de abrir Claude es hacer clic en el icono Spark en la **Barra de herramientas del editor** (esquina superior derecha del editor). El icono solo aparece cuando tienes un archivo abierto.

46 

47 <img src="https://mintcdn.com/claude-code/mfM-EyoZGnQv8JTc/images/vs-code-editor-icon.png?fit=max&auto=format&n=mfM-EyoZGnQv8JTc&q=85&s=eb4540325d94664c51776dbbfec4cf02" alt="Editor de VS Code mostrando el icono Spark en la Barra de herramientas del editor" width="2796" height="734" data-path="images/vs-code-editor-icon.png" />

48 

49 Otras formas de abrir Claude Code:

50 

51 * **Barra de actividades**: haz clic en el icono Spark en la barra lateral izquierda para abrir la lista de sesiones. Haz clic en cualquier sesión para abrirla como una pestaña de editor completa, o inicia una nueva. Este icono siempre es visible en la Barra de actividades.

52 * **Paleta de comandos**: `Cmd+Shift+P` (Mac) o `Ctrl+Shift+P` (Windows/Linux), escribe "Claude Code" y selecciona una opción como "Abrir en Nueva Pestaña"

53 * **Barra de estado**: haz clic en **✱ Claude Code** en la esquina inferior derecha de la ventana. Esto funciona incluso cuando no hay ningún archivo abierto.

54 

55 Puedes arrastrar el panel de Claude para reposicionarlo en cualquier lugar de VS Code. Consulta [Personalizar tu flujo de trabajo](#personalizar-tu-flujo-de-trabajo) para obtener más detalles.

56 </Step>

57 

58 <Step title="Iniciar sesión">

59 La primera vez que abres el panel, aparece una pantalla de inicio de sesión. Haz clic en **Iniciar sesión** y completa la autorización en tu navegador.

60 

61 Si ves **No iniciado sesión · Por favor ejecuta /login** más tarde, la extensión reabre la pantalla de inicio de sesión automáticamente. Si no aparece, recarga la ventana desde la Paleta de comandos con **Developer: Reload Window**.

62 

63 Si tienes `ANTHROPIC_API_KEY` configurada en tu shell pero aún ves el mensaje de inicio de sesión, VS Code puede no haber heredado tu entorno de shell. Lanza VS Code desde una terminal con `code .` para que herede tus variables de entorno, o inicia sesión con tu cuenta de Claude en su lugar.

64 

65 Después de iniciar sesión, aparece una lista de verificación **Aprender Claude Code**. Trabaja en cada elemento haciendo clic en **Mostrarme**, o descártalo con la X. Para reabrirlo más tarde, desmarque **Ocultar incorporación** en la configuración de VS Code en Extensiones → Claude Code.

66 </Step>

67 

68 <Step title="Enviar un mensaje">

69 Pide a Claude que te ayude con tu código o archivos, ya sea explicando cómo funciona algo, depurando un problema o realizando cambios.

70 

71 <Tip>Claude ve automáticamente tu texto seleccionado. Presiona `Option+K` (Mac) / `Alt+K` (Windows/Linux) para también insertar una referencia de mención @ (como `@file.ts#5-10`) en tu mensaje.</Tip>

72 

73 Aquí hay un ejemplo de cómo hacer una pregunta sobre una línea particular en un archivo:

74 

75 <img src="https://mintcdn.com/claude-code/FVYz38sRY-VuoGHA/images/vs-code-send-prompt.png?fit=max&auto=format&n=FVYz38sRY-VuoGHA&q=85&s=ede3ed8d8d5f940e01c5de636d009cfd" alt="Editor de VS Code con las líneas 2-3 seleccionadas en un archivo Python, y el panel de Claude Code mostrando una pregunta sobre esas líneas con una referencia de mención @" width="3288" height="1876" data-path="images/vs-code-send-prompt.png" />

76 </Step>

77 

78 <Step title="Revisar cambios">

79 Cuando Claude quiere editar un archivo, muestra una comparación lado a lado del original y los cambios propuestos, luego solicita permiso. Puedes aceptar, rechazar o decirle a Claude qué hacer en su lugar. Si editas el contenido propuesto directamente en la vista de diff antes de aceptar, Claude es informado de que lo modificaste para que no asuma que el archivo coincide con su propuesta original.

80 

81 <img src="https://mintcdn.com/claude-code/FVYz38sRY-VuoGHA/images/vs-code-edits.png?fit=max&auto=format&n=FVYz38sRY-VuoGHA&q=85&s=e005f9b41c541c5c7c59c082f7c4841c" alt="VS Code mostrando un diff de los cambios propuestos por Claude con un mensaje de permiso preguntando si realizar la edición" width="3292" height="1876" data-path="images/vs-code-edits.png" />

82 </Step>

83</Steps>

84 

85Para más ideas sobre lo que puedes hacer con Claude Code, consulta [Flujos de trabajo comunes](/es/common-workflows).

86 

87<Tip>

88 Ejecuta "Claude Code: Open Walkthrough" desde la Paleta de comandos para un tour guiado de los conceptos básicos.

89</Tip>

90 

91## Usar el cuadro de mensaje

92 

93El cuadro de mensaje admite varias características:

94 

95* **Modos de permiso**: haz clic en el indicador de modo en la parte inferior del cuadro de mensaje para cambiar de modo. En modo normal, Claude solicita permiso antes de cada acción. En Plan Mode, Claude describe lo que hará y espera aprobación antes de realizar cambios. VS Code abre automáticamente el plan como un documento markdown completo donde puedes agregar comentarios en línea para dar retroalimentación antes de que Claude comience. En modo de aceptación automática, Claude realiza ediciones sin preguntar. Establece el valor predeterminado en la configuración de VS Code en `claudeCode.initialPermissionMode`.

96* **Menú de comandos**: haz clic en `/` o escribe `/` para abrir el menú de comandos. Las opciones incluyen adjuntar archivos, cambiar modelos, alternar pensamiento extendido, ver uso del plan (`/usage`) e iniciar una sesión de [Control remoto](/es/remote-control) (`/remote-control`). La sección Personalizar proporciona acceso a MCP servers, hooks, memoria, permisos y plugins. Los elementos con un icono de terminal se abren en la terminal integrada.

97* **Indicador de contexto**: el cuadro de mensaje muestra cuánto de la ventana de contexto de Claude estás utilizando. Claude se compacta automáticamente cuando es necesario, o puedes ejecutar `/compact` manualmente.

98* **Pensamiento extendido**: permite que Claude dedique más tiempo a razonar sobre problemas complejos. Actívalo a través del menú de comandos (`/`). El razonamiento de Claude aparece en la conversación como bloques contraídos: haz clic en un bloque para leerlo, o presiona `Ctrl+O` para expandir o contraer cada bloque de pensamiento en la sesión. Consulta [Pensamiento extendido](/es/common-workflows#usar-pensamiento-extendido-thinking-mode) para obtener más detalles.

99* **Entrada multilínea**: presiona `Shift+Enter` para agregar una nueva línea sin enviar. Esto también funciona en la entrada de texto libre "Otro" de los diálogos de preguntas.

100 

101### Referenciar archivos y carpetas

102 

103Usa menciones @ para dar a Claude contexto sobre archivos o carpetas específicas. Cuando escribes `@` seguido de un nombre de archivo o carpeta, Claude lee ese contenido y puede responder preguntas sobre él o realizar cambios en él. Claude Code admite coincidencia difusa, por lo que puedes escribir nombres parciales para encontrar lo que necesitas:

104 

105```text theme={null}

106> Explain the logic in @auth (fuzzy matches auth.js, AuthService.ts, etc.)

107> What's in @src/components/ (include a trailing slash for folders)

108```

109 

110Para archivos PDF grandes, puedes pedirle a Claude que lea páginas específicas en lugar del archivo completo: una sola página, un rango como páginas 1-10, o un rango abierto como página 3 en adelante.

111 

112Cuando seleccionas texto en el editor, Claude puede ver tu código resaltado automáticamente. El pie de página del cuadro de mensaje muestra cuántas líneas están seleccionadas. Presiona `Option+K` (Mac) / `Alt+K` (Windows/Linux) para insertar una mención @ con la ruta del archivo y los números de línea (por ejemplo, `@app.ts#5-10`). Haz clic en el indicador de selección para alternar si Claude puede ver tu texto resaltado: el icono de barra diagonal significa que la selección está oculta para Claude.

113 

114También puedes mantener presionado `Shift` mientras arrastras archivos al cuadro de mensaje para agregarlos como adjuntos. Haz clic en la X en cualquier adjunto para eliminarlo del contexto.

115 

116### Reanudar conversaciones pasadas

117 

118Haz clic en el botón **Historial de sesiones** en la parte superior del panel de Claude Code para acceder a tu historial de conversaciones. Puedes buscar por palabra clave o examinar por tiempo (Hoy, Ayer, Últimos 7 días, etc.). Haz clic en cualquier conversación para reanudarla con el historial de mensajes completo. Las nuevas sesiones reciben títulos generados por IA basados en tu primer mensaje. Pasa el cursor sobre una sesión para revelar acciones de cambio de nombre y eliminación: cambia el nombre para darle un título descriptivo, o elimina para borrarlo de la lista. Para más información sobre cómo reanudar sesiones, consulta [Flujos de trabajo comunes](/es/common-workflows#reanudar-conversaciones-anteriores).

119 

120### Reanudar sesiones remotas desde Claude.ai

121 

122Si utilizas [Claude Code en la web](/es/claude-code-on-the-web), puedes reanudar esas sesiones remotas directamente en VS Code. Esto requiere iniciar sesión con **Claude.ai Subscription**, no Anthropic Console.

123 

124<Steps>

125 <Step title="Abrir historial de sesiones">

126 Haz clic en el botón **Historial de sesiones** en la parte superior del panel de Claude Code.

127 </Step>

128 

129 <Step title="Seleccionar la pestaña Remoto">

130 El diálogo muestra dos pestañas: Local y Remoto. Haz clic en **Remoto** para ver sesiones desde claude.ai.

131 </Step>

132 

133 <Step title="Seleccionar una sesión para reanudar">

134 Examina o busca tus sesiones remotas. Haz clic en cualquier sesión para descargarla y continuar la conversación localmente.

135 </Step>

136</Steps>

137 

138<Note>

139 Solo las sesiones web iniciadas con un repositorio de GitHub aparecen en la pestaña Remoto. Reanudar carga el historial de conversaciones localmente; los cambios no se sincronizan de vuelta a claude.ai.

140</Note>

141 

142## Personalizar tu flujo de trabajo

143 

144Una vez que estés en funcionamiento, puedes reposicionar el panel de Claude, ejecutar múltiples sesiones o cambiar al modo terminal.

145 

146### Elegir dónde vive Claude

147 

148Puedes arrastrar el panel de Claude para reposicionarlo en cualquier lugar de VS Code. Agarra la pestaña o barra de título del panel y arrástralo a:

149 

150* **Barra lateral secundaria**: el lado derecho de la ventana. Mantiene a Claude visible mientras codificas.

151* **Barra lateral principal**: la barra lateral izquierda con iconos para Explorador, Búsqueda, etc.

152* **Área del editor**: abre Claude como una pestaña junto a tus archivos. Útil para tareas secundarias.

153 

154<Tip>

155 Usa la barra lateral para tu sesión principal de Claude y abre pestañas adicionales para tareas secundarias. Claude recuerda tu ubicación preferida. El icono de lista de sesiones de la Barra de actividades es separado del panel de Claude: la lista de sesiones siempre es visible en la Barra de actividades, mientras que el icono del panel de Claude solo aparece allí cuando el panel está acoplado a la barra lateral izquierda.

156</Tip>

157 

158### Ejecutar múltiples conversaciones

159 

160Usa **Abrir en Nueva Pestaña** u **Abrir en Nueva Ventana** desde la Paleta de comandos para iniciar conversaciones adicionales. Cada conversación mantiene su propio historial y contexto, permitiéndote trabajar en diferentes tareas en paralelo.

161 

162Cuando usas pestañas, un pequeño punto de color en el icono spark indica el estado: azul significa que hay una solicitud de permiso pendiente, naranja significa que Claude terminó mientras la pestaña estaba oculta.

163 

164### Cambiar al modo terminal

165 

166De forma predeterminada, la extensión abre un panel de chat gráfico. Si prefieres la interfaz de estilo CLI, abre la [configuración Usar terminal](vscode://settings/claudeCode.useTerminal) y marca la casilla.

167 

168También puedes abrir la configuración de VS Code (`Cmd+,` en Mac o `Ctrl+,` en Windows/Linux), ir a Extensiones → Claude Code y marcar **Usar terminal**.

169 

170## Administrar plugins

171 

172La extensión de VS Code incluye una interfaz gráfica para instalar y administrar [plugins](/es/plugins). Escribe `/plugins` en el cuadro de mensaje para abrir la interfaz **Administrar plugins**.

173 

174### Instalar plugins

175 

176El diálogo de plugins muestra dos pestañas: **Plugins** y **Marketplaces**.

177 

178En la pestaña Plugins:

179 

180* Los **plugins instalados** aparecen en la parte superior con interruptores de alternancia para habilitarlos o deshabilitarlos

181* Los **plugins disponibles** de tus marketplaces configurados aparecen a continuación

182* Busca para filtrar plugins por nombre o descripción

183* Haz clic en **Instalar** en cualquier plugin disponible

184 

185Cuando instalas un plugin, elige el alcance de instalación:

186 

187* **Instalar para ti**: disponible en todos tus proyectos (alcance de usuario)

188* **Instalar para este proyecto**: compartido con colaboradores del proyecto (alcance del proyecto)

189* **Instalar localmente**: solo para ti, solo en este repositorio (alcance local)

190 

191### Administrar marketplaces

192 

193Cambia a la pestaña **Marketplaces** para agregar o eliminar fuentes de plugins:

194 

195* Ingresa un repositorio de GitHub, URL o ruta local para agregar un nuevo marketplace

196* Haz clic en el icono de actualización para actualizar la lista de plugins de un marketplace

197* Haz clic en el icono de papelera para eliminar un marketplace

198 

199Después de realizar cambios, un banner te solicita que reinicies Claude Code para aplicar las actualizaciones.

200 

201<Note>

202 La administración de plugins en VS Code utiliza los mismos comandos CLI bajo el capó. Los plugins y marketplaces que configuras en la extensión también están disponibles en la CLI, y viceversa.

203</Note>

204 

205Para más información sobre el sistema de plugins, consulta [Plugins](/es/plugins) y [Marketplaces de plugins](/es/plugin-marketplaces).

206 

207## Automatizar tareas del navegador con Chrome

208 

209Conecta Claude a tu navegador Chrome para probar aplicaciones web, depurar con registros de consola y automatizar flujos de trabajo del navegador sin salir de VS Code. Esto requiere la [extensión Claude in Chrome](https://chromewebstore.google.com/detail/claude/fcoeoabgfenejglbffodgkkbkcdhcgfn) versión 1.0.36 o superior.

210 

211Escribe `@browser` en el cuadro de mensaje seguido de lo que deseas que Claude haga:

212 

213```text theme={null}

214@browser go to localhost:3000 and check the console for errors

215```

216 

217También puedes abrir el menú de adjuntos para seleccionar herramientas específicas del navegador como abrir una nueva pestaña o leer contenido de la página.

218 

219Claude abre nuevas pestañas para tareas del navegador y comparte el estado de inicio de sesión de tu navegador, por lo que puedes acceder a cualquier sitio en el que ya hayas iniciado sesión.

220 

221Para instrucciones de configuración, la lista completa de capacidades y solución de problemas, consulta [Usar Claude Code con Chrome](/es/chrome).

222 

223## Comandos y atajos de teclado de VS Code

224 

225Abre la Paleta de comandos (`Cmd+Shift+P` en Mac o `Ctrl+Shift+P` en Windows/Linux) y escribe "Claude Code" para ver todos los comandos de VS Code disponibles para la extensión Claude Code.

226 

227Algunos atajos de teclado dependen de qué panel esté "enfocado" (recibiendo entrada de teclado). Cuando tu cursor está en un archivo de código, el editor está enfocado. Cuando tu cursor está en el cuadro de mensaje de Claude, Claude está enfocado. Usa `Cmd+Esc` / `Ctrl+Esc` para alternar entre ellos.

228 

229<Note>

230 Estos son comandos de VS Code para controlar la extensión. No todos los comandos integrados de Claude Code están disponibles en la extensión. Consulta [Extensión de VS Code frente a CLI de Claude Code](#extensión-de-vs-code-frente-a-cli-de-claude-code) para obtener más detalles.

231</Note>

232 

233| Comando | Atajo de teclado | Descripción |

234| -------------------------- | -------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------- |

235| Focus Input | `Cmd+Esc` (Mac) / `Ctrl+Esc` (Windows/Linux) | Alternar el enfoque entre el editor y Claude |

236| Open in Side Bar | - | Abrir Claude en la barra lateral izquierda |

237| Open in Terminal | - | Abrir Claude en modo terminal |

238| Open in New Tab | `Cmd+Shift+Esc` (Mac) / `Ctrl+Shift+Esc` (Windows/Linux) | Abrir una nueva conversación como una pestaña del editor |

239| Open in New Window | - | Abrir una nueva conversación en una ventana separada |

240| New Conversation | `Cmd+N` (Mac) / `Ctrl+N` (Windows/Linux) | Iniciar una nueva conversación. Requiere que Claude esté enfocado y `enableNewConversationShortcut` establecido en `true` |

241| Insert @-Mention Reference | `Option+K` (Mac) / `Alt+K` (Windows/Linux) | Insertar una referencia al archivo actual y selección (requiere que el editor esté enfocado) |

242| Show Logs | - | Ver registros de depuración de la extensión |

243| Logout | - | Cerrar sesión de tu cuenta de Anthropic |

244 

245### Lanzar una pestaña de VS Code desde otras herramientas

246 

247La extensión registra un controlador URI en `vscode://anthropic.claude-code/open`. Úsalo para abrir una nueva pestaña de Claude Code desde tu propia herramienta: un alias de shell, un marcador de navegador, o cualquier script que pueda abrir una URL. Si VS Code no está ejecutándose, abrir la URL lo lanza primero. Si VS Code ya está ejecutándose, la URL se abre en la ventana que está actualmente enfocada.

248 

249Invoca el controlador con el abridor de URL de tu sistema operativo.

250 

251<Tabs>

252 <Tab title="macOS">

253 ```bash theme={null}

254 open "vscode://anthropic.claude-code/open"

255 ```

256 </Tab>

257 

258 <Tab title="Linux">

259 ```bash theme={null}

260 xdg-open "vscode://anthropic.claude-code/open"

261 ```

262 </Tab>

263 

264 <Tab title="Windows">

265 En PowerShell:

266 

267 ```powershell theme={null}

268 Start-Process "vscode://anthropic.claude-code/open"

269 ```

270 

271 En `cmd.exe`, `start` trata su primer argumento entrecomillado como un título de ventana, así que pasa un título vacío antes de la URL:

272 

273 ```cmd theme={null}

274 start "" "vscode://anthropic.claude-code/open"

275 ```

276 </Tab>

277</Tabs>

278 

279El controlador acepta dos parámetros de consulta opcionales:

280 

281| Parámetro | Descripción |

282| --------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

283| `prompt` | Texto para rellenar previamente en el cuadro de mensaje. Debe estar codificado en URL. El mensaje se rellena previamente pero no se envía automáticamente. |

284| `session` | Un ID de sesión para reanudar en lugar de iniciar una nueva conversación. La sesión debe pertenecer al espacio de trabajo actualmente abierto en VS Code. Si la sesión no se encuentra, se inicia una conversación nueva. Si la sesión ya está abierta en una pestaña, esa pestaña se enfoca. Para capturar un ID de sesión mediante programación, consulta [Continuar conversaciones](/es/headless#continue-conversations). |

285 

286Por ejemplo, para abrir una pestaña rellenada previamente con "review my changes":

287 

288```text theme={null}

289vscode://anthropic.claude-code/open?prompt=review%20my%20changes

290```

291 

292Para lanzar una sesión de terminal en lugar de una pestaña de VS Code, usa el controlador `claude-cli://` de la CLI. Consulta [Lanzar sesiones desde enlaces](/es/deep-links).

293 

294## Configurar ajustes

295 

296La extensión tiene dos tipos de configuración:

297 

298* **Configuración de extensión** en VS Code: controla el comportamiento de la extensión dentro de VS Code. Abre con `Cmd+,` (Mac) o `Ctrl+,` (Windows/Linux), luego ve a Extensiones → Claude Code. También puedes escribir `/` y seleccionar **General Config** para abrir la configuración.

299* **Configuración de Claude Code** en `~/.claude/settings.json`: compartida entre la extensión y la CLI. Usa para comandos permitidos, variables de entorno, hooks y MCP servers. Consulta [Configuración](/es/settings) para obtener más detalles.

300 

301<Tip>

302 Agrega `"$schema": "https://json.schemastore.org/claude-code-settings.json"` a tu `settings.json` para obtener autocompletado y validación en línea para todos los ajustes disponibles directamente en VS Code.

303</Tip>

304 

305### Configuración de extensión

306 

307| Configuración | Predeterminado | Descripción |

308| --------------------------------- | -------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

309| `useTerminal` | `false` | Lanzar Claude en modo terminal en lugar de panel gráfico |

310| `initialPermissionMode` | `default` | Controla mensajes de aprobación para nuevas conversaciones: `default`, `plan`, `acceptEdits`, o `bypassPermissions`. Consulta [modos de permiso](/es/permission-modes). |

311| `preferredLocation` | `panel` | Dónde se abre Claude: `sidebar` (derecha) o `panel` (nueva pestaña) |

312| `autosave` | `true` | Guardar archivos automáticamente antes de que Claude los lea o escriba |

313| `useCtrlEnterToSend` | `false` | Usar Ctrl/Cmd+Enter en lugar de Enter para enviar mensajes |

314| `enableNewConversationShortcut` | `false` | Habilitar Cmd/Ctrl+N para iniciar una nueva conversación |

315| `hideOnboarding` | `false` | Ocultar la lista de verificación de incorporación (icono de gorro de graduación) |

316| `respectGitIgnore` | `true` | Excluir patrones de .gitignore de búsquedas de archivos |

317| `usePythonEnvironment` | `true` | Activar el entorno de Python del espacio de trabajo cuando se ejecuta Claude. Requiere la extensión de Python. |

318| `environmentVariables` | `[]` | Establecer variables de entorno para el proceso de Claude. Usa la configuración de Claude Code en su lugar para configuración compartida. |

319| `disableLoginPrompt` | `false` | Omitir mensajes de autenticación (para configuraciones de proveedores de terceros) |

320| `allowDangerouslySkipPermissions` | `false` | Agrega [Modo Auto](/es/permission-modes#eliminate-prompts-with-auto-mode) y Bypass permissions a la selector de modo. Auto mode tiene [requisitos de plan, admin, modelo y proveedor](/es/permission-modes#eliminate-prompts-with-auto-mode), por lo que puede permanecer no disponible incluso con este toggle activado. Usa Bypass permissions solo en sandboxes sin acceso a Internet. |

321| `claudeProcessWrapper` | - | Ruta ejecutable utilizada para lanzar el proceso de Claude |

322 

323## Extensión de VS Code frente a CLI de Claude Code

324 

325Claude Code está disponible tanto como una extensión de VS Code (panel gráfico) como una CLI (interfaz de línea de comandos en la terminal). Algunas características solo están disponibles en la CLI. Si necesitas una característica solo de CLI, ejecuta `claude` en la terminal integrada de VS Code.

326 

327| Característica | CLI | Extensión de VS Code |

328| --------------------------- | --------------------- | ------------------------------------------------------------------------------------------------------------ |

329| Comandos y skills | [Todos](/es/commands) | Subconjunto (escribe `/` para ver disponibles) |

330| Configuración de MCP server | Sí | Parcial (agrega servidores a través de CLI; administra servidores existentes con `/mcp` en el panel de chat) |

331| Checkpoints | Sí | Sí |

332| Atajo bash `!` | Sí | No |

333| Autocompletado de pestañas | Sí | No |

334 

335### Retroceder con checkpoints

336 

337La extensión de VS Code admite checkpoints, que rastrean las ediciones de archivos de Claude y te permiten retroceder a un estado anterior. Pasa el cursor sobre cualquier mensaje para revelar el botón de retroceso, luego elige entre tres opciones:

338 

339* **Bifurcar conversación desde aquí**: iniciar una nueva rama de conversación desde este mensaje mientras mantienes todos los cambios de código intactos

340* **Retroceder código a aquí**: revertir cambios de archivo a este punto en la conversación mientras mantienes el historial de conversación completo

341* **Bifurcar conversación y retroceder código**: iniciar una nueva rama de conversación y revertir cambios de archivo a este punto

342 

343Para obtener detalles completos sobre cómo funcionan los checkpoints y sus limitaciones, consulta [Checkpointing](/es/checkpointing).

344 

345### Ejecutar CLI en VS Code

346 

347Para usar la CLI mientras permaneces en VS Code, abre la terminal integrada (`` Ctrl+` `` en Windows/Linux o `` Cmd+` `` en Mac) y ejecuta `claude`. La CLI se integra automáticamente con tu IDE para características como visualización de diffs y uso compartido de diagnósticos.

348 

349Si usas una terminal externa, ejecuta `/ide` dentro de Claude Code para conectarlo a VS Code.

350 

351### Cambiar entre extensión y CLI

352 

353La extensión y la CLI comparten el mismo historial de conversaciones. Para continuar una conversación de extensión en la CLI, ejecuta `claude --resume` en la terminal. Esto abre un selector interactivo donde puedes buscar y seleccionar tu conversación.

354 

355### Incluir salida de terminal en mensajes

356 

357Haz referencia a la salida de terminal en tus mensajes usando `@terminal:name` donde `name` es el título de la terminal. Esto permite que Claude vea la salida del comando, mensajes de error o registros sin copiar y pegar.

358 

359### Monitorear procesos en segundo plano

360 

361Cuando Claude ejecuta comandos de larga duración, la extensión muestra el progreso en la barra de estado. Sin embargo, la visibilidad de tareas en segundo plano es limitada en comparación con la CLI. Para mejor visibilidad, haz que Claude genere el comando para que puedas ejecutarlo en la terminal integrada de VS Code.

362 

363### Conectar a herramientas externas con MCP

364 

365Los servidores MCP (Model Context Protocol) dan a Claude acceso a herramientas externas, bases de datos y APIs.

366 

367Para agregar un servidor MCP, abre la terminal integrada (`` Ctrl+` `` o `` Cmd+` ``) y ejecuta `claude mcp add`. El ejemplo a continuación agrega el servidor MCP remoto de GitHub, que se autentica con un [token de acceso personal](https://github.com/settings/personal-access-tokens) pasado como encabezado:

368 

369```bash theme={null}

370claude mcp add --transport http github https://api.githubcopilot.com/mcp/ \

371 --header "Authorization: Bearer YOUR_GITHUB_PAT"

372```

373 

374Una vez configurado, pide a Claude que use las herramientas (por ejemplo, "Review PR #456").

375 

376Para administrar servidores MCP sin salir de VS Code, escribe `/mcp` en el panel de chat. El diálogo de administración de MCP te permite habilitar o deshabilitar servidores, reconectarse a un servidor y administrar la autenticación OAuth. Consulta la [documentación de MCP](/es/mcp) para servidores disponibles.

377 

378## Trabajar con git

379 

380Claude Code se integra con git para ayudarte con flujos de trabajo de control de versiones directamente en VS Code. Pide a Claude que confirme cambios, cree solicitudes de extracción o trabaje en diferentes ramas.

381 

382### Crear confirmaciones y solicitudes de extracción

383 

384Claude puede preparar cambios, escribir mensajes de confirmación y crear solicitudes de extracción basadas en tu trabajo:

385 

386```text theme={null}

387> commit my changes with a descriptive message

388> create a pr for this feature

389> summarize the changes I've made to the auth module

390```

391 

392Al crear solicitudes de extracción, Claude genera descripciones basadas en los cambios de código reales y puede agregar contexto sobre pruebas o decisiones de implementación.

393 

394### Usar git worktrees para tareas paralelas

395 

396Usa la bandera `--worktree` (`-w`) para iniciar Claude en un worktree aislado con sus propios archivos y rama:

397 

398```bash theme={null}

399claude --worktree feature-auth

400```

401 

402Cada worktree mantiene un estado de archivo independiente mientras comparte el historial de git. Esto evita que las instancias de Claude interfieran entre sí cuando trabajan en diferentes tareas. Para más detalles, consulta [Ejecutar sesiones paralelas de Claude Code con Git worktrees](/es/common-workflows#ejecutar-sesiones-paralelas-de-claude-code-con-git-worktrees).

403 

404## Usar proveedores de terceros

405 

406De forma predeterminada, Claude Code se conecta directamente a la API de Anthropic. Si tu organización utiliza Amazon Bedrock, Google Vertex AI o Microsoft Foundry para acceder a Claude, configura la extensión para usar tu proveedor en su lugar:

407 

408<Steps>

409 <Step title="Deshabilitar mensaje de inicio de sesión">

410 Abre la [configuración Deshabilitar mensaje de inicio de sesión](vscode://settings/claudeCode.disableLoginPrompt) y marca la casilla.

411 

412 También puedes abrir la configuración de VS Code (`Cmd+,` en Mac o `Ctrl+,` en Windows/Linux), buscar "Claude Code login" y marcar **Deshabilitar mensaje de inicio de sesión**.

413 </Step>

414 

415 <Step title="Configurar tu proveedor">

416 Sigue la guía de configuración para tu proveedor:

417 

418 * [Claude Code en Amazon Bedrock](/es/amazon-bedrock)

419 * [Claude Code en Google Vertex AI](/es/google-vertex-ai)

420 * [Claude Code en Microsoft Foundry](/es/microsoft-foundry)

421 

422 Estas guías cubren la configuración de tu proveedor en `~/.claude/settings.json`, lo que garantiza que tu configuración se comparta entre la extensión de VS Code y la CLI.

423 </Step>

424</Steps>

425 

426## Seguridad y privacidad

427 

428Tu código permanece privado. Claude Code procesa tu código para proporcionar asistencia pero no lo utiliza para entrenar modelos. Para obtener detalles sobre el manejo de datos y cómo optar por no participar en el registro, consulta [Datos y privacidad](/es/data-usage).

429 

430Con permisos de edición automática habilitados, Claude Code puede modificar archivos de configuración de VS Code (como `settings.json` o `tasks.json`) que VS Code puede ejecutar automáticamente. Para reducir el riesgo al trabajar con código no confiable:

431 

432* Habilita [Modo restringido de VS Code](https://code.visualstudio.com/docs/editor/workspace-trust#_restricted-mode) para espacios de trabajo no confiables

433* Usa el modo de aprobación manual en lugar de aceptación automática para ediciones

434* Revisa cuidadosamente los cambios antes de aceptarlos

435 

436### El servidor MCP IDE integrado

437 

438Cuando la extensión está activa, ejecuta un servidor MCP local al que la CLI se conecta automáticamente. Así es como la CLI abre diffs en el visor de diffs nativo de VS Code, lee tu selección actual para menciones `@` y, cuando estás trabajando en un notebook de Jupyter, le pide a VS Code que ejecute celdas.

439 

440El servidor se llama `ide` y está oculto de `/mcp` porque no hay nada que configurar. Sin embargo, si tu organización utiliza un hook `PreToolUse` para permitir herramientas MCP, necesitarás saber que existe.

441 

442**Transporte y autenticación.** El servidor se vincula a `127.0.0.1` en un puerto alto aleatorio y no es accesible desde otras máquinas. Cada activación de extensión genera un token de autenticación aleatorio nuevo que la CLI debe presentar para conectarse. El token se escribe en un archivo de bloqueo bajo `~/.claude/ide/` con permisos `0600` en un directorio `0700`, por lo que solo el usuario que ejecuta VS Code puede leerlo.

443 

444**Herramientas expuestas al modelo.** El servidor aloja una docena de herramientas, pero solo dos son visibles para el modelo. El resto son RPC internas que la CLI usa para su propia interfaz de usuario (abrir diffs, leer selecciones, guardar archivos) y se filtran antes de que la lista de herramientas llegue a Claude.

445 

446| Nombre de herramienta (como se ve en hooks) | Qué hace | ¿Escribe? |

447| ------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | --------- |

448| `mcp__ide__getDiagnostics` | Devuelve diagnósticos del servidor de lenguaje: los errores y advertencias en el panel Problemas de VS Code. Opcionalmente limitado a un archivo. | No |

449| `mcp__ide__executeCode` | Ejecuta código Python en el kernel del notebook de Jupyter activo. Consulta el flujo de confirmación a continuación. | Sí |

450 

451**La ejecución de Jupyter siempre pregunta primero.** `mcp__ide__executeCode` no puede ejecutar nada silenciosamente. En cada llamada, el código se inserta como una nueva celda al final del notebook activo, VS Code lo desplaza a la vista y una Quick Pick nativa te pregunta si **Ejecutar** o **Cancelar**. Cancelar (o descartar la selección con `Esc`) devuelve un error a Claude y nada se ejecuta. La herramienta también se niega rotundamente cuando no hay un notebook activo, cuando la extensión de Jupyter (`ms-toolsai.jupyter`) no está instalada, o cuando el kernel no es Python.

452 

453<Note>

454 La confirmación de Quick Pick es separada de los hooks `PreToolUse`. Una entrada de lista de permitidos para `mcp__ide__executeCode` permite que Claude *proponga* ejecutar una celda; la Quick Pick dentro de VS Code es lo que permite que *realmente* se ejecute.

455</Note>

456 

457<a id="troubleshooting" />

458 

459## Solucionar problemas comunes

460 

461### La extensión no se instala

462 

463* Asegúrate de tener una versión compatible de VS Code (1.98.0 o posterior)

464* Verifica que VS Code tenga permiso para instalar extensiones

465* Intenta instalar directamente desde [VS Code Marketplace](https://marketplace.visualstudio.com/items?itemName=anthropic.claude-code)

466 

467### El icono Spark no es visible

468 

469El icono Spark aparece en la **Barra de herramientas del editor** (esquina superior derecha del editor) cuando tienes un archivo abierto. Si no lo ves:

470 

4711. **Abre un archivo**: El icono requiere que un archivo esté abierto. Solo tener una carpeta abierta no es suficiente.

4722. **Verifica la versión de VS Code**: Requiere 1.98.0 o superior (Ayuda → Acerca de)

4733. **Reinicia VS Code**: Ejecuta "Developer: Reload Window" desde la Paleta de comandos

4744. **Deshabilita extensiones conflictivas**: Deshabilita temporalmente otras extensiones de IA (Cline, Continue, etc.)

4755. **Verifica la confianza del espacio de trabajo**: La extensión no funciona en Modo restringido

476 

477Alternativamente, haz clic en "✱ Claude Code" en la **Barra de estado** (esquina inferior derecha). Esto funciona incluso sin un archivo abierto. También puedes usar la **Paleta de comandos** (`Cmd+Shift+P` / `Ctrl+Shift+P`) y escribir "Claude Code".

478 

479### Claude Code nunca responde

480 

481Si Claude Code no responde a tus mensajes:

482 

4831. **Verifica tu conexión a Internet**: Asegúrate de tener una conexión a Internet estable

4842. **Inicia una nueva conversación**: Intenta iniciar una conversación nueva para ver si el problema persiste

4853. **Intenta la CLI**: Ejecuta `claude` desde la terminal para ver si obtienes mensajes de error más detallados

486 

487Si los problemas persisten, [presenta un problema en GitHub](https://github.com/anthropics/claude-code/issues) con detalles sobre el error.

488 

489## Desinstalar la extensión

490 

491Para desinstalar la extensión Claude Code:

492 

4931. Abre la vista Extensiones (`Cmd+Shift+X` en Mac o `Ctrl+Shift+X` en Windows/Linux)

4942. Busca "Claude Code"

4953. Haz clic en **Desinstalar**

496 

497Para también eliminar datos de extensión y restablecer toda la configuración:

498 

499```bash theme={null}

500rm -rf ~/.vscode/globalStorage/anthropic.claude-code

501```

502 

503Para obtener ayuda adicional, consulta la [guía de solución de problemas](/es/troubleshooting).

504 

505## Próximos pasos

506 

507Ahora que tienes Claude Code configurado en VS Code:

508 

509* [Explora flujos de trabajo comunes](/es/common-workflows) para aprovechar al máximo Claude Code

510* [Configura MCP servers](/es/mcp) para extender las capacidades de Claude con herramientas externas. Agrega servidores usando la CLI, luego adminístralos con `/mcp` en el panel de chat.

511* [Configura la configuración de Claude Code](/es/settings) para personalizar comandos permitidos, hooks y más. Esta configuración se comparte entre la extensión y la CLI.

web-quickstart.md +220 −0 created

Details

1> ## Documentation Index

2> Fetch the complete documentation index at: https://code.claude.com/docs/llms.txt

3> Use this file to discover all available pages before exploring further.

4 

5# Comienza con Claude Code en la web

6 

7> Ejecuta Claude Code en la nube desde tu navegador o teléfono. Conecta un repositorio de GitHub, envía una tarea y revisa el PR sin configuración local.

8 

9<Note>

10 Claude Code en la web está en vista previa de investigación para usuarios Pro, Max y Team, y para usuarios Enterprise con asientos premium o asientos de Chat + Claude Code.

11</Note>

12 

13Claude Code en la web se ejecuta en la infraestructura en la nube administrada por Anthropic en lugar de en tu máquina. Envía tareas desde [claude.ai/code](https://claude.ai/code) en tu navegador o en la aplicación móvil de Claude.

14 

15Necesitarás un repositorio de GitHub para [comenzar](#connect-github-and-create-an-environment). Claude lo clona en una máquina virtual aislada, realiza cambios e impulsa una rama para que la revises. Las sesiones persisten entre dispositivos, por lo que una tarea que comiences en tu portátil está lista para revisar desde tu teléfono más tarde.

16 

17Claude Code en la web funciona bien para:

18 

19* **Tareas paralelas**: ejecuta varias tareas independientes a la vez, cada una en su propia sesión y rama, sin necesidad de gestionar múltiples worktrees

20* **Repositorios que no tienes localmente**: Claude clona el repositorio nuevo en cada sesión, por lo que no necesitas tenerlo descargado

21* **Tareas que no necesitan dirección frecuente**: envía una tarea bien definida, haz otra cosa y revisa el resultado cuando Claude haya terminado

22* **Preguntas sobre código y exploración**: comprende una base de código o rastrea cómo se implementa una función sin una descarga local

23 

24Para trabajos que necesitan tu configuración local, herramientas o entorno, ejecutar Claude Code localmente o usar [Remote Control](/es/remote-control) es una mejor opción.

25 

26## Cómo se ejecutan las sesiones

27 

28Cuando envías una tarea:

29 

301. **Clonar y preparar**: tu repositorio se clona en una VM administrada por Anthropic, y tu [script de configuración](/es/claude-code-on-the-web#setup-scripts) se ejecuta si está configurado.

312. **Configurar red**: el acceso a internet se establece según el [nivel de acceso](/es/claude-code-on-the-web#access-levels) de tu entorno.

323. **Trabajar**: Claude analiza el código, realiza cambios, ejecuta pruebas y verifica su trabajo. Puedes observar y dirigir en todo momento, o alejarte y volver cuando haya terminado.

334. **Impulsar la rama**: cuando Claude alcanza un punto de parada, impulsa su rama a GitHub. Revisa el diff, deja comentarios en línea, crea un PR o envía otro mensaje para continuar.

34 

35La sesión no se cierra cuando se impulsa la rama. La creación de PR y ediciones adicionales ocurren dentro de la misma conversación.

36 

37## Compara formas de ejecutar Claude Code

38 

39Claude Code se comporta igual en todas partes. Lo que cambia es dónde se ejecuta el código y si tu configuración local está disponible. La aplicación Desktop ofrece sesiones locales y en la nube, por lo que las respuestas a continuación dependen de cuál elijas:

40 

41| | En la web | Remote Control | Terminal CLI | Aplicación Desktop |

42| :------------------------------------------- | :------------------------------------------------------------------------------------------------------------------------- | :------------------------------------------------- | :---------------- | :---------------------------- |

43| **El código se ejecuta en** | VM en la nube de Anthropic | Tu máquina | Tu máquina | Tu máquina o VM en la nube |

44| **Chateas desde** | claude.ai o aplicación móvil | claude.ai o aplicación móvil | Tu terminal | La interfaz de Desktop |

45| **Usa tu configuración local** | No, solo repositorio | Sí | Sí | Sí para local, no para nube |

46| **Requiere GitHub** | Sí, o [agrupa un repositorio local](/es/claude-code-on-the-web#send-local-repositories-without-github) mediante `--remote` | No | No | Solo para sesiones en la nube |

47| **Sigue ejecutándose si te desconectas** | Sí | Mientras la terminal permanezca abierta | No | Depende del tipo de sesión |

48| **[Modos de permiso](/es/permission-modes)** | Aceptar ediciones automáticamente, Plan | Preguntar, Aceptar ediciones automáticamente, Plan | Todos los modos | Depende del tipo de sesión |

49| **Acceso a la red** | Configurable por entorno | Red de tu máquina | Red de tu máquina | Depende del tipo de sesión |

50 

51Consulta los documentos de [inicio rápido de terminal](/es/quickstart), [aplicación Desktop](/es/desktop) o [Remote Control](/es/remote-control) para configurarlos.

52 

53## Conecta GitHub y crea un entorno

54 

55La configuración es un proceso único. Si ya usas la CLI de GitHub, puedes [hacer esto desde tu terminal](#connect-from-your-terminal) en lugar del navegador.

56 

57<Steps>

58 <Step title="Visita claude.ai/code">

59 Ve a [claude.ai/code](https://claude.ai/code) e inicia sesión con tu cuenta de Anthropic.

60 </Step>

61 

62 <Step title="Instala la aplicación Claude GitHub">

63 Después de iniciar sesión, claude.ai/code te solicita que conectes GitHub. Sigue el mensaje para instalar la aplicación Claude GitHub y otorgarle acceso a tus repositorios. Las sesiones en la nube funcionan con repositorios de GitHub existentes, por lo que para iniciar un nuevo proyecto, [crea un repositorio vacío en GitHub](https://github.com/new) primero.

64 </Step>

65 

66 <Step title="Crea tu entorno">

67 Después de conectar GitHub, se te pedirá que crees un entorno en la nube. El entorno controla qué acceso a la red tiene Claude durante las sesiones y qué se ejecuta cuando se crea una nueva sesión. Consulta [Herramientas instaladas](/es/claude-code-on-the-web#installed-tools) para ver qué está disponible sin ninguna configuración.

68 

69 El formulario tiene estos campos:

70 

71 * **Nombre**: una etiqueta de visualización. Útil cuando tienes múltiples entornos para diferentes proyectos o niveles de acceso.

72 * **Acceso a la red**: controla a qué puede acceder la sesión en internet. El valor predeterminado, `Trusted`, permite conexiones a [registros de paquetes comunes](/es/claude-code-on-the-web#default-allowed-domains) como npm, PyPI y RubyGems mientras bloquea el acceso general a internet.

73 * **Variables de entorno**: variables opcionales disponibles en cada sesión, en formato `.env`. No envuelvas los valores entre comillas, ya que las comillas se almacenan como parte del valor. Estas son visibles para cualquiera que pueda editar este entorno.

74 * **Script de configuración**: un script Bash opcional que se ejecuta antes de que se lance Claude Code. Úsalo para instalar herramientas del sistema que la VM en la nube no incluye, como `apt install -y gh`. El resultado se [almacena en caché](/es/claude-code-on-the-web#environment-caching), por lo que el script no se vuelve a ejecutar en cada sesión. Consulta [Scripts de configuración](/es/claude-code-on-the-web#setup-scripts) para ver ejemplos y consejos de depuración.

75 

76 Para un primer proyecto, deja los valores predeterminados y haz clic en **Crear entorno**. Puedes [editarlo más tarde o crear entornos adicionales](/es/claude-code-on-the-web#configure-your-environment) para diferentes proyectos.

77 </Step>

78</Steps>

79 

80### Conecta desde tu terminal

81 

82Si ya usas la CLI de GitHub (`gh`), puedes configurar Claude Code en la web sin abrir un navegador. Esto requiere la [CLI de Claude Code](/es/quickstart). `/web-setup` lee tu token local de `gh`, lo vincula a tu cuenta de Claude y crea un entorno en la nube predeterminado si no tienes uno.

83 

84<Note>

85 Las organizaciones con [Retención de datos cero](/es/zero-data-retention) habilitada no pueden usar `/web-setup` u otras características de sesión en la nube. Si la CLI de GitHub no está instalada o autenticada, `/web-setup` abre el flujo de incorporación del navegador en su lugar.

86</Note>

87 

88<Steps>

89 <Step title="Autentica con la CLI de GitHub">

90 En tu shell, autentica la CLI de GitHub si aún no lo has hecho:

91 

92 ```bash theme={null}

93 gh auth login

94 ```

95 </Step>

96 

97 <Step title="Inicia sesión en Claude">

98 En la CLI de Claude Code, ejecuta `/login` para iniciar sesión con tu cuenta de claude.ai. Omite este paso si ya has iniciado sesión.

99 </Step>

100 

101 <Step title="Ejecuta /web-setup">

102 En la CLI de Claude Code, ejecuta:

103 

104 ```text theme={null}

105 /web-setup

106 ```

107 

108 Esto sincroniza tu token de `gh` con tu cuenta de Claude. Si aún no tienes un entorno en la nube, `/web-setup` crea uno con acceso a red Trusted y sin script de configuración. Puedes [editar el entorno o agregar variables](/es/claude-code-on-the-web#configure-your-environment) después. Una vez que `/web-setup` se complete, puedes iniciar sesiones en la nube desde tu terminal con [`--remote`](/es/claude-code-on-the-web#from-terminal-to-web) o configurar tareas recurrentes con [`/schedule`](/es/routines).

109 </Step>

110</Steps>

111 

112## Inicia una tarea

113 

114Con GitHub conectado y un entorno creado, estás listo para enviar tareas.

115 

116<Steps>

117 <Step title="Selecciona un repositorio y rama">

118 Desde [claude.ai/code](https://claude.ai/code) o la pestaña Code en la aplicación móvil de Claude, haz clic en el selector de repositorio debajo del cuadro de entrada y elige un repositorio en el que Claude pueda trabajar. Cada repositorio muestra un selector de rama. Cámbialo para que Claude comience desde una rama de función en lugar de la predeterminada. Puedes agregar múltiples repositorios para trabajar en ellos en una sesión.

119 </Step>

120 

121 <Step title="Elige un modo de permiso">

122 El menú desplegable de modo junto a la entrada tiene como valor predeterminado **Aceptar ediciones automáticamente**, donde Claude realiza cambios e impulsa una rama sin detenerse para aprobación. Cambia a **Plan mode** si deseas que Claude proponga un enfoque y espere tu aprobación antes de editar archivos. Las sesiones en la nube no ofrecen permisos Ask, modo Auto o permisos Bypass. Consulta [Modos de permiso](/es/permission-modes) para la lista completa.

123 </Step>

124 

125 <Step title="Describe la tarea y envía">

126 Escribe una descripción de lo que deseas y presiona Enter. Sé específico:

127 

128 * Nombra el archivo o función: "Agregar un README con instrucciones de configuración" o "Corregir la prueba de autenticación fallida en `tests/test_auth.py`" es mejor que "corregir pruebas"

129 * Pega la salida de error si la tienes

130 * Describe el comportamiento esperado, no solo el síntoma

131 

132 Claude clona los repositorios, ejecuta tu script de configuración si está configurado e inicia el trabajo. Cada tarea obtiene su propia sesión y su propia rama, por lo que no necesitas esperar a que una termine antes de iniciar otra.

133 </Step>

134</Steps>

135 

136## Sesiones rellenadas previamente

137 

138Puedes rellenar previamente el mensaje, los repositorios y el entorno para una nueva sesión agregando parámetros de consulta a la URL de [claude.ai/code](https://claude.ai/code). Úsalo para crear integraciones como un botón en tu rastreador de problemas que abre Claude Code con la descripción del problema como mensaje.

139 

140| Parámetro | Descripción |

141| :------------- | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

142| `prompt` | Texto del mensaje para rellenar en el cuadro de entrada. También se acepta el alias `q`. |

143| `prompt_url` | URL para obtener el texto del mensaje, para mensajes demasiado largos para incrustar en una cadena de consulta. La URL debe permitir solicitudes de origen cruzado. Se ignora cuando `prompt` también está establecido. |

144| `repositories` | Lista separada por comas de slugs `owner/repo` para preseleccionar. También se acepta el alias `repo`. |

145| `environment` | Nombre o ID del [entorno](#connect-github-and-create-an-environment) para preseleccionar. |

146 

147Codifica en URL cada valor. El ejemplo a continuación abre el formulario con un mensaje y un repositorio ya seleccionados:

148 

149```text theme={null}

150https://claude.ai/code?prompt=Fix%20the%20login%20bug&repositories=acme/webapp

151```

152 

153## Revisa e itera

154 

155Cuando Claude termina, revisa los cambios, deja comentarios en líneas específicas y continúa hasta que el diff se vea bien.

156 

157<Steps>

158 <Step title="Abre la vista de diff">

159 Un indicador de diff muestra líneas agregadas y eliminadas en toda la sesión, por ejemplo `+42 -18`. Selecciónalo para abrir la vista de diff, con una lista de archivos a la izquierda y cambios a la derecha.

160 </Step>

161 

162 <Step title="Deja comentarios en línea">

163 Selecciona cualquier línea en el diff, escribe tu comentario y presiona Enter. Los comentarios se colan hasta que envíes tu siguiente mensaje, luego se agrupan con él. Claude ve "en `src/auth.ts:47`, no captures el error aquí" junto a tu instrucción principal, por lo que no tienes que describir dónde está el problema.

164 </Step>

165 

166 <Step title="Crea una solicitud de extracción">

167 Cuando el diff se vea bien, selecciona **Crear PR** en la parte superior de la vista de diff. Puedes abrirlo como un PR completo, un borrador, o ir a la página de composición de GitHub con un título y descripción generados.

168 </Step>

169 

170 <Step title="Continúa iterando después del PR">

171 La sesión permanece activa después de que se crea el PR. Pega la salida de falla de CI o comentarios del revisor en el chat y pide a Claude que los aborde. Para que Claude monitoree el PR automáticamente, consulta [Corregir automáticamente solicitudes de extracción](/es/claude-code-on-the-web#auto-fix-pull-requests).

172 </Step>

173</Steps>

174 

175## Soluciona problemas de configuración

176 

177### No aparecen repositorios después de conectar GitHub

178 

179La aplicación Claude GitHub necesita acceso explícito a cada repositorio que desees usar. En github.com, abre **Configuración → Aplicaciones → Claude → Configurar** y verifica que tu repositorio esté listado en **Acceso a repositorios**. Los repositorios privados necesitan la misma autorización que los públicos.

180 

181### La página solo muestra un botón de inicio de sesión de GitHub

182 

183Las sesiones en la nube requieren una cuenta de GitHub conectada. Conecta a través del flujo del navegador anterior, o ejecuta `/web-setup` desde tu terminal si usas la CLI de GitHub. Si prefieres no conectar GitHub en absoluto, consulta [Remote Control](/es/remote-control) para ejecutar Claude Code en tu propia máquina y monitorearlo desde la web.

184 

185### "No disponible para la organización seleccionada"

186 

187Las organizaciones Enterprise pueden necesitar que un administrador habilite Claude Code en la web. Contacta a tu equipo de cuenta de Anthropic.

188 

189### `/web-setup` devuelve "Comando desconocido"

190 

191`/web-setup` se ejecuta dentro de la CLI de Claude Code, no en tu shell. Inicia `claude` primero, luego escribe `/web-setup` en el mensaje.

192 

193Si lo escribiste dentro de Claude Code y aún ves el error, tu CLI es anterior a v2.1.80 o estás autenticado con una clave API o proveedor de terceros en lugar de una suscripción de claude.ai. Ejecuta `claude update`, luego `/login` para iniciar sesión con tu cuenta de claude.ai.

194 

195### "No se pudo crear un entorno en la nube" o "No hay entorno en la nube disponible" al usar `--remote` o ultraplan

196 

197Las características de sesión remota crean un entorno en la nube predeterminado automáticamente si no tienes uno. Si ves "No se pudo crear un entorno en la nube", la creación automática falló. {/* max-version: 2.1.100 */}Si ves "No hay entorno en la nube disponible", tu CLI es anterior a la creación automática. En cualquier caso, ejecuta `/web-setup` en la CLI de Claude Code para crear uno manualmente, o visita [claude.ai/code](https://claude.ai/code) y sigue el paso **Crea tu entorno** anterior.

198 

199### El script de configuración falló

200 

201El script de configuración salió con un estado distinto de cero, lo que bloquea el inicio de la sesión. Las causas comunes son:

202 

203* Una instalación de paquete falló porque el registro no está en tu [nivel de acceso a la red](/es/claude-code-on-the-web#access-levels). `Trusted` cubre la mayoría de los administradores de paquetes; `None` los bloquea todos.

204* El script hace referencia a un archivo o ruta que no existe en un clon nuevo.

205* Un comando que funciona localmente necesita una invocación diferente en Ubuntu.

206 

207Para depurar, agrega `set -x` en la parte superior del script para ver qué comando falló. Para comandos no críticos, agrega `|| true` para que no bloqueen el inicio de la sesión.

208 

209### La sesión sigue ejecutándose después de cerrar la pestaña

210 

211Esto es por diseño. Cerrar la pestaña o navegar lejos no detiene la sesión. Continúa ejecutándose en segundo plano hasta que Claude termine la tarea actual, luego se queda inactiva. Desde la barra lateral, puedes [archivar una sesión](/es/claude-code-on-the-web#archive-sessions) para ocultarla de tu lista, o [eliminarla](/es/claude-code-on-the-web#delete-sessions) para eliminarla permanentemente.

212 

213## Próximos pasos

214 

215Ahora que puedes enviar y revisar tareas, estas páginas cubren lo que viene después: iniciar sesiones en la nube desde tu terminal, programar trabajo recurrente y dar a Claude instrucciones permanentes.

216 

217* [Usa Claude Code en la web](/es/claude-code-on-the-web): la referencia completa, incluyendo teletransportar sesiones a tu terminal, scripts de configuración, variables de entorno y configuración de red

218* [Routines](/es/routines): automatiza el trabajo en un horario, mediante llamada API o en respuesta a eventos de GitHub

219* [CLAUDE.md](/es/memory): da a Claude instrucciones y contexto persistentes que se cargan al inicio de cada sesión

220* Instala la aplicación móvil de Claude para [iOS](https://apps.apple.com/us/app/claude-by-anthropic/id6473753684) o [Android](https://play.google.com/store/apps/details?id=com.anthropic.claude) para monitorear sesiones desde tu teléfono. Desde la CLI de Claude Code, `/mobile` muestra un código QR.

whats-new.md +49 −0 created

Details

1> ## Documentation Index

2> Fetch the complete documentation index at: https://code.claude.com/docs/llms.txt

3> Use this file to discover all available pages before exploring further.

4 

5# Novedades

6 

7> Un resumen semanal de las características notables de Claude Code, con fragmentos de código, demostraciones y contexto sobre por qué importan.

8 

9El resumen semanal para desarrolladores destaca las características más propensas a cambiar la forma en que trabaja. Cada entrada incluye código ejecutable, una breve demostración y un enlace a la documentación completa. Para cada corrección de errores y mejora menor, consulte el [registro de cambios](/es/changelog).

10 

11<Update label="Week 17" description="April 20–24, 2026" tags={["v2.1.114–v2.1.119"]}>

12 **`/ultrareview`** se abre como una vista previa de investigación pública: una flota de agentes cazadores de errores se ejecuta en la nube y los hallazgos llegan automáticamente a su CLI o Desktop.

13 

14 También esta semana: **session recap** le muestra qué sucedió mientras una terminal no estaba enfocada; **custom themes** le permite crear y enviar paletas de colores desde `/theme` o un plugin; y **Claude Code en la web** recibe un rediseño con una nueva barra lateral de sesiones y diseño de arrastrar y soltar.

15 

16 [Lea el resumen de la Week 17 →](/es/whats-new/2026-w17)

17</Update>

18 

19<Update label="Week 16" description="April 13–17, 2026" tags={["v2.1.105–v2.1.113"]}>

20 **Claude Opus 4.7** llega como el nuevo predeterminado en Max y Team Premium, con un nuevo nivel de esfuerzo `xhigh` que es la configuración recomendada para la mayoría del trabajo de codificación y un control deslizante interactivo `/effort` para ajustarlo.

21 

22 También esta semana: **Routines** en Claude Code en la web disparan agentes en la nube con plantillas desde una programación, evento de GitHub o llamada API; `/ultrareview` ejecuta revisión de código multiagente paralela en la nube; `/usage` muestra qué está impulsando sus límites; y la CLI se traslada a binarios nativos.

23 

24 [Lea el resumen de la Week 16 →](/es/whats-new/2026-w16)

25</Update>

26 

27<Update label="Week 15" description="April 6–10, 2026" tags={["v2.1.92–v2.1.101"]}>

28 **Ultraplan** entra en vista previa temprana: redacte un plan en la nube desde su CLI, revíselo y comente en un editor web, luego ejecútelo de forma remota o extráigalo localmente. La primera ejecución ahora crea automáticamente un entorno en la nube para usted.

29 

30 También esta semana: la herramienta **Monitor** transmite eventos de fondo a la conversación para que Claude pueda monitorear registros y reaccionar en vivo, `/loop` se autoajusta cuando omite el intervalo, `/team-onboarding` empaqueta su configuración en una guía reproducible, y `/autofix-pr` activa la corrección automática de PR desde su terminal.

31 

32 [Lea el resumen de la Week 15 →](/es/whats-new/2026-w15)

33</Update>

34 

35<Update label="Week 14" description="March 30 – April 3, 2026" tags={["v2.1.86–v2.1.91"]}>

36 **Computer use** llega a la CLI en vista previa de investigación: Claude puede abrir aplicaciones nativas, hacer clic en la interfaz de usuario y verificar cambios desde su terminal. Lo mejor para cerrar el ciclo en cosas que solo una GUI puede verificar.

37 

38 También esta semana: lecciones interactivas `/powerup`, renderizado de pantalla alternativa sin parpadeos, una anulación de tamaño de resultado MCP por herramienta de hasta 500K, y ejecutables de plugin en la `PATH` de la herramienta Bash.

39 

40 [Lea el resumen de la Week 14 →](/es/whats-new/2026-w14)

41</Update>

42 

43<Update label="Week 13" description="March 23–27, 2026" tags={["v2.1.83–v2.1.85"]}>

44 **Auto mode** llega en vista previa de investigación: un clasificador maneja sus solicitudes de permiso para que las acciones seguras se ejecuten sin interrupción y las arriesgadas se bloqueen. El término medio entre aprobar todo y `--dangerously-skip-permissions`.

45 

46 También esta semana: uso de computadora en la aplicación Desktop, corrección automática de PR en Web, búsqueda de transcripción con `/`, una herramienta PowerShell nativa para Windows, y hooks `if` condicionales.

47 

48 [Lea el resumen de la Week 13 →](/es/whats-new/2026-w13)

49</Update>

whats-new/2026-w16.md +135 −0 created

Details

1> ## Documentation Index

2> Fetch the complete documentation index at: https://code.claude.com/docs/llms.txt

3> Use this file to discover all available pages before exploring further.

4 

5# Semana 16 · 13–17 de abril de 2026

6 

7> Claude Opus 4.7 con el nuevo nivel de esfuerzo xhigh, Routines en Claude Code en la web, /ultrareview revisión de código en la nube, un desglose de /usage que muestra qué está impulsando sus límites, y binarios nativos reemplazando el JavaScript empaquetado.

8 

9<div className="digest-meta">

10 <span>Releases <a href="/docs/es/changelog#2-1-105">v2.1.105 → v2.1.113</a></span>

11 <span>5 características · 13–17 de abril</span>

12</div>

13 

14<div className="digest-feature">

15 <div className="digest-feature-header">

16 <span className="digest-feature-title">Claude Opus 4.7</span>

17 <span className="digest-feature-pill">nuevo modelo</span>

18 </div>

19 

20 <p className="digest-feature-lede">El modelo de codificación más potente de Anthropic ahora es el predeterminado en Max y Team Premium, y está disponible en todas partes desde <code>/model</code>. Añade un nuevo nivel de esfuerzo <code>xhigh</code> que se sitúa entre <code>high</code> y <code>max</code>: los mejores resultados para la mayoría de tareas de codificación y agentes, aplicado como predeterminado la primera vez que cambia a 4.7. <code>/effort</code> ahora abre un control deslizante interactivo con teclas de flecha cuando lo llama sin argumentos, para que pueda equilibrar la inteligencia contra la velocidad sin recordar los nombres de los niveles.</p>

21 

22 <p className="digest-feature-try">Cambie modelo y esfuerzo en un solo paso:</p>

23 

24 ```text Claude Code theme={null}

25 > /model opus

26 > /effort xhigh

27 ```

28 

29 <a className="digest-feature-link" href="/docs/es/model-config#adjust-effort-level">Configuración de modelo: niveles de esfuerzo</a>

30</div>

31 

32<div className="digest-feature">

33 <div className="digest-feature-header">

34 <span className="digest-feature-title">Routines</span>

35 <span className="digest-feature-pill">web</span>

36 </div>

37 

38 <p className="digest-feature-lede">Agentes en la nube con plantilla que se activan según un cronograma, un evento de GitHub o una llamada API. Defina una rutina una vez en Claude Code en la web con un prompt, los repositorios que puede tocar y los conectores que necesita, luego deje que PR-opened, release-published o su propio webhook la active sin que su máquina esté en funcionamiento. El selector de activación ahora cubre eventos de GitHub con filtros opcionales y proporciona a cada rutina un endpoint <code>/fire</code> con token para sistemas externos.</p>

39 

40 <Frame>

41 <img className="w-full" src="https://mintcdn.com/claude-code/FTi4SBJ9YRs7d-5X/images/whats-new/routines.png?fit=max&auto=format&n=FTi4SBJ9YRs7d-5X&q=85&s=2ba818ea9280c549511cb48b9b4d1dc5" alt="Creación de una rutina en Claude Code en la web con activadores de cronograma, evento de GitHub y API" width="1440" height="810" data-path="images/whats-new/routines.png" />

42 </Frame>

43 

44 <p className="digest-feature-try">Cree una desde la interfaz web, o genere un andamiaje desde su terminal:</p>

45 

46 ```text Claude Code theme={null}

47 > /schedule daily PR review at 9am

48 ```

49 

50 <a className="digest-feature-link" href="/docs/es/routines">Guía de Routines</a>

51</div>

52 

53<div className="digest-feature">

54 <div className="digest-feature-header">

55 <span className="digest-feature-title">/usage breakdown</span>

56 <span className="digest-feature-pill">CLI</span>

57 </div>

58 

59 <p className="digest-feature-lede">Mayor visibilidad sobre dónde va su uso de Claude Code. <code>/usage</code> ahora muestra qué está impulsando sus límites: sesiones paralelas, subagentes, fallos de caché y contexto largo, cada uno con un porcentaje de sus últimas 24 horas y un consejo para optimizarlo. Presione <code>d</code> o <code>w</code> para cambiar entre vistas de día y semana.</p>

60 

61 <Frame>

62 <img className="w-full" src="https://mintcdn.com/claude-code/FTi4SBJ9YRs7d-5X/images/whats-new/usage.png?fit=max&auto=format&n=FTi4SBJ9YRs7d-5X&q=85&s=792a4b43cbef4e2931974831f076bca6" alt="El comando /usage mostrando un desglose de qué está contribuyendo al uso de límites" width="1204" height="1182" data-path="images/whats-new/usage.png" />

63 </Frame>

64 

65 <p className="digest-feature-try">Ejecútelo en cualquier momento:</p>

66 

67 ```text Claude Code theme={null}

68 > /usage

69 ```

70 

71 <a className="digest-feature-link" href="/docs/es/commands">Referencia de comandos</a>

72</div>

73 

74<div className="digest-feature">

75 <div className="digest-feature-header">

76 <span className="digest-feature-title">/ultrareview</span>

77 <span className="digest-feature-pill">v2.1.111</span>

78 </div>

79 

80 <p className="digest-feature-lede">Revisión de código integral en la nube. Ultrareview expande su rama en múltiples revisores paralelos en Claude Code en la web, ejecuta una pasada de crítica adversarial sobre cada hallazgo y devuelve un informe de hallazgos verificados mientras su terminal permanece libre. Llámelo sin argumentos para revisar su rama actual, o pase un número de PR para obtener y revisar ese PR. El diálogo de lanzamiento ahora muestra un diffstat para que sepa qué está subiendo antes de confirmar.</p>

81 

82 <p className="digest-feature-try">Revise la rama en la que se encuentra:</p>

83 

84 ```text Claude Code theme={null}

85 > /ultrareview

86 ```

87 

88 <p className="digest-feature-try">O apúntelo a un PR:</p>

89 

90 ```text Claude Code theme={null}

91 > /ultrareview 1234

92 ```

93 

94 <a className="digest-feature-link" href="/docs/es/ultrareview">Guía de Ultrareview</a>

95</div>

96 

97<div className="digest-feature">

98 <div className="digest-feature-header">

99 <span className="digest-feature-title">Binarios nativos</span>

100 <span className="digest-feature-pill">v2.1.113</span>

101 </div>

102 

103 <p className="digest-feature-lede">El CLI <code>claude</code> ahora genera un binario nativo por plataforma en lugar de JavaScript empaquetado, por lo que el comando <code>claude</code> instalado ya no invoca Node. El paquete npm extrae el binario correcto a través de una dependencia opcional como <code>@anthropic-ai/claude-code-darwin-arm64</code>, por lo que su comando de instalación no cambia. El instalador independiente ya envió este binario; npm ahora lo iguala.</p>

104 

105 <p className="digest-feature-try">Actualice y verifique qué está ejecutando:</p>

106 

107 ```bash theme={null}

108 claude update

109 claude --version

110 ```

111 

112 <a className="digest-feature-link" href="/docs/es/setup">Guía de configuración</a>

113</div>

114 

115<div className="digest-wins">

116 <p className="digest-wins-title">Otros logros</p>

117 

118 <div className="digest-wins-grid">

119 <div><a href="/docs/es/permission-modes#eliminate-prompts-with-auto-mode">Modo automático</a> ahora está disponible para suscriptores de Max en Opus 4.7, y la bandera <code>--enable-auto-mode</code> ya no es necesaria</div>

120 <div><a href="/docs/es/interactive-mode#session-recap">Resumen de sesión</a> muestra un resumen de una línea de lo que sucedió mientras estaba fuera; ejecute <code>/recap</code> bajo demanda o desactívelo desde <code>/config</code></div>

121 <div>Nuevo comando <code>/tui</code> y configuración <code>tui</code> cambian entre renderizado clásico y sin parpadeos a mitad de la conversación; la vista de enfoque se movió de <code>Ctrl+O</code> a su propio comando <code>/focus</code></div>

122 <div>Herramienta de notificación push: con <a href="/docs/es/remote-control">Control remoto</a> conectado y "Enviar cuando Claude lo decida" habilitado, Claude puede hacer ping a su teléfono cuando lo necesita</div>

123 <div>Los plugins pueden enviar observadores de fondo a través de una clave de manifiesto de nivel superior <code>monitors</code> que se arma automáticamente al inicio de la sesión o en la invocación de habilidades</div>

124 <div>Opción "Automático (coincidir terminal)" en <code>/theme</code> sigue el modo oscuro/claro de su terminal</div>

125 <div><code>/fewer-permission-prompts</code> escanea sus transcripciones en busca de llamadas comunes de Bash y MCP de solo lectura y propone una lista de permitidos para <code>.claude/settings.json</code></div>

126 <div>Claude ahora puede descubrir y ejecutar comandos integrados como <code>/init</code>, <code>/review</code> y <code>/security-review</code> a través de la herramienta Skill</div>

127 <div>Los hooks <code>PreCompact</code> pueden bloquear la compactación saliendo con código 2 o devolviendo <code>{"{"}"decision":"block"{"}"}</code></div>

128 <div><code>ENABLE\_PROMPT\_CACHING\_1H</code> opta por la clave API, Bedrock, Vertex y usuarios de Foundry en TTL de caché de prompt de 1 hora</div>

129 <div>La configuración <code>sandbox.network.deniedDomains</code> extrae dominios específicos de un comodín <code>allowedDomains</code> más amplio</div>

130 <div><code>/undo</code> ahora es un alias para <code>/rewind</code>, y <code>/proactive</code> es un alias para <code>/loop</code></div>

131 <div>Permisos de Bash endurecidos: las reglas de denegación ahora coinciden a través de envoltorios <code>env</code>/<code>sudo</code>/<code>watch</code>, y las reglas de permitir <code>Bash(find:\*)</code> ya no aprueban automáticamente <code>-exec</code> o <code>-delete</code></div>

132 </div>

133</div>

134 

135[Registro de cambios completo para v2.1.105–v2.1.113 →](/es/changelog#2-1-105)

whats-new/2026-w17.md +113 −0 created

Details

1> ## Documentation Index

2> Fetch the complete documentation index at: https://code.claude.com/docs/llms.txt

3> Use this file to discover all available pages before exploring further.

4 

5# Semana 17 · 20–24 de abril de 2026

6 

7> /ultrareview abre como vista previa de investigación, recapitulaciones automáticas de sesión cuando regresa a una terminal, temas de color personalizados que puede crear e implementar en plugins, y un Claude Code rediseñado en la web.

8 

9<div className="digest-meta">

10 <span>Lanzamientos <a href="/docs/es/changelog#2-1-114">v2.1.114 → v2.1.119</a></span>

11 <span>4 características · 20–24 de abril</span>

12</div>

13 

14<div className="digest-feature">

15 <div className="digest-feature-header">

16 <span className="digest-feature-title">/ultrareview</span>

17 <span className="digest-feature-pill">research preview</span>

18 </div>

19 

20 <p className="digest-feature-lede">Ahora en vista previa de investigación pública. Ultrareview ejecuta una flota de agentes cazadores de errores en la nube contra su rama o una PR, y los hallazgos se devuelven automáticamente en la CLI o Desktop. Ejecútelo antes de fusionar cambios críticos como autenticación o migraciones de datos.</p>

21 

22 <Frame>

23 <video autoPlay muted loop playsInline className="w-full" src="https://mintcdn.com/claude-code/FTi4SBJ9YRs7d-5X/images/whats-new/ultrareview.mp4?fit=max&auto=format&n=FTi4SBJ9YRs7d-5X&q=85&s=0fb1271365d38f414ad155aeb8edb08e" data-path="images/whats-new/ultrareview.mp4" />

24 </Frame>

25 

26 <p className="digest-feature-try">Revise la rama en la que se encuentra:</p>

27 

28 ```text Claude Code theme={null}

29 > /ultrareview

30 ```

31 

32 <p className="digest-feature-try">O apúntelo a una PR:</p>

33 

34 ```text Claude Code theme={null}

35 > /ultrareview 1234

36 ```

37 

38 <a className="digest-feature-link" href="/docs/es/ultrareview">Guía de Ultrareview</a>

39</div>

40 

41<div className="digest-feature">

42 <div className="digest-feature-header">

43 <span className="digest-feature-title">Session recap</span>

44 <span className="digest-feature-pill">CLI</span>

45 </div>

46 

47 <p className="digest-feature-lede">Cambie el enfoque lejos de una sesión y regrese a un resumen de una línea de lo que sucedió mientras estaba ausente. Útil para mantener el flujo mientras ejecuta varias sesiones de Claude simultáneamente.</p>

48 

49 <Frame>

50 <video autoPlay muted loop playsInline className="w-full" src="https://mintcdn.com/claude-code/FTi4SBJ9YRs7d-5X/images/whats-new/session-recap.mp4?fit=max&auto=format&n=FTi4SBJ9YRs7d-5X&q=85&s=0a8db1470bd0161a47efeb2f322af76f" data-path="images/whats-new/session-recap.mp4" />

51 </Frame>

52 

53 <p className="digest-feature-try">Genere un resumen bajo demanda o desactive el automático desde <code>/config</code>:</p>

54 

55 ```text Claude Code theme={null}

56 > /recap

57 ```

58 

59 <a className="digest-feature-link" href="/docs/es/interactive-mode#session-recap">Modo interactivo: session recap</a>

60</div>

61 

62<div className="digest-feature">

63 <div className="digest-feature-header">

64 <span className="digest-feature-title">Custom themes</span>

65 <span className="digest-feature-pill">v2.1.118</span>

66 </div>

67 

68 <p className="digest-feature-lede">Cree y cambie entre temas de color nombrados desde <code>/theme</code>, o edite manualmente archivos JSON en <code>\~/.claude/themes/</code>. Cada tema elige un preset base e invalida solo los tokens que le importan. Los plugins también pueden enviar temas.</p>

69 

70 <p className="digest-feature-try">Abra el selector de temas y cree uno nuevo:</p>

71 

72 ```text Claude Code theme={null}

73 > /theme

74 ```

75 

76 <a className="digest-feature-link" href="/docs/es/terminal-config#create-a-custom-theme">Configuración de terminal: crear un tema personalizado</a>

77</div>

78 

79<div className="digest-feature">

80 <div className="digest-feature-header">

81 <span className="digest-feature-title">Claude Code on the web</span>

82 <span className="digest-feature-pill">web</span>

83 </div>

84 

85 <p className="digest-feature-lede">Un nuevo aspecto para <a href="https://claude.ai/code">claude.ai/code</a> que coincide con la aplicación de escritorio rediseñada: barra lateral de sesiones, diseño de arrastrar y soltar, y una vista de rutinas actualizada. Las partes clave se reconstruyeron para respuestas más rápidas y una experiencia más confiable.</p>

86 

87 <Frame>

88 <img className="w-full" src="https://mintcdn.com/claude-code/FTi4SBJ9YRs7d-5X/images/whats-new/web-redesign.jpeg?fit=max&auto=format&n=FTi4SBJ9YRs7d-5X&q=85&s=a2aca1b49e295b7337f5779038db8e2c" alt="Descripción general del rediseño de Claude Code en la web: nueva interfaz de usuario, velocidad y confiabilidad, trabajo en web, móvil y CLI" width="1602" height="1610" data-path="images/whats-new/web-redesign.jpeg" />

89 </Frame>

90 

91 <a className="digest-feature-link" href="/docs/es/claude-code-on-the-web">Claude Code en la web</a>

92</div>

93 

94<div className="digest-wins">

95 <p className="digest-wins-title">Otros logros</p>

96 

97 <div className="digest-wins-grid">

98 <div><a href="/docs/es/interactive-mode#vim-editor-mode">Modo visual de Vim</a>: presione <code>v</code> para selección de caracteres o <code>V</code> para selección de líneas en la entrada del prompt, con operadores y retroalimentación visual</div>

99 <div>Los hooks ahora pueden llamar directamente a herramientas MCP a través de <a href="/docs/es/hooks#mcp-tool-hook-fields"><code>type: "mcp\_tool"</code></a>, por lo que un hook puede acceder a un servidor ya conectado sin generar un proceso</div>

100 <div><code>/cost</code> y <code>/stats</code> se fusionan en <a href="/docs/es/commands"><code>/usage</code></a>; los nombres antiguos aún funcionan como atajos de escritura que abren la pestaña relevante</div>

101 <div>Los cambios de <code>/config</code> (tema, modo de editor, verbose y similares) ahora persisten en <code>\~/.claude/settings.json</code> y siguen la misma precedencia de proyecto/local/política que otras <a href="/docs/es/settings">configuraciones</a></div>

102 <div>Los <a href="/docs/es/sub-agents#fork-the-current-conversation">subagentes bifurcados</a> se pueden habilitar en compilaciones externas con <code>CLAUDE\_CODE\_FORK\_SUBAGENT=1</code>: una bifurcación hereda su contexto de conversación completo en lugar de comenzar de nuevo</div>

103 <div>El <a href="/docs/es/model-config#adjust-effort-level">nivel de esfuerzo</a> predeterminado para suscriptores Pro y Max en Opus 4.6 y Sonnet 4.6 es ahora <code>high</code> (era <code>medium</code>)</div>

104 <div>Las compilaciones nativas de macOS y Linux reemplazan las herramientas <code>Glob</code> y <code>Grep</code> con <code>bfs</code> y <code>ugrep</code> integrados disponibles a través de Bash, para búsquedas más rápidas sin un viaje de herramienta separado</div>

105 <div><code>--from-pr</code> ahora acepta URLs de solicitud de fusión de GitLab, solicitud de extracción de Bitbucket y PR de GitHub Enterprise además de github.com</div>

106 <div>Modo automático: incluya <code>"\$defaults"</code> en <a href="/docs/es/auto-mode-config"><code>autoMode.allow</code>, <code>soft\_deny</code>, o <code>environment</code></a> para agregar reglas personalizadas junto con la lista integrada en lugar de reemplazarla</div>

107 <div>El nuevo comando <a href="/docs/es/plugin-dependencies#tag-plugin-releases-for-version-resolution"><code>claude plugin tag</code></a> crea etiquetas git de lanzamiento para plugins con validación de versión</div>

108 <div>Las sesiones de Opus 4.7 ahora se calculan contra la ventana de contexto nativa de 1M del modelo, corrigiendo porcentajes inflados de <code>/context</code> y autocompactación prematura</div>

109 <div><code>/resume</code> en sesiones grandes es hasta un 67% más rápido y ahora ofrece resumir sesiones grandes y obsoletas antes de releerlas</div>

110 </div>

111</div>

112 

113[Registro de cambios completo para v2.1.114–v2.1.119 →](/es/changelog#2-1-114)

zero-data-retention.md +66 −0 created

Details

1> ## Documentation Index

2> Fetch the complete documentation index at: https://code.claude.com/docs/llms.txt

3> Use this file to discover all available pages before exploring further.

4 

5# Retención cero de datos

6 

7> Obtenga información sobre la Retención Cero de Datos (ZDR) para Claude Code en Claude for Enterprise, incluido el alcance, las características deshabilitadas y cómo solicitar la habilitación.

8 

9La Retención Cero de Datos (ZDR) está disponible para Claude Code cuando se utiliza a través de Claude for Enterprise. Cuando ZDR está habilitado, los prompts y las respuestas del modelo generadas durante las sesiones de Claude Code se procesan en tiempo real y no se almacenan por Anthropic después de que se devuelve la respuesta, excepto cuando es necesario para cumplir con la ley o combatir el uso indebido.

10 

11ZDR en Claude for Enterprise proporciona a los clientes empresariales la capacidad de usar Claude Code con retención cero de datos y acceso a capacidades administrativas:

12 

13* Controles de costos por usuario

14* Panel de [Analytics](/es/analytics)

15* [Configuración administrada por servidor](/es/server-managed-settings)

16* Registros de auditoría

17 

18ZDR para Claude Code en Claude for Enterprise se aplica solo a la plataforma directa de Anthropic. Para implementaciones de Claude en Amazon Bedrock, Google Vertex AI o Microsoft Foundry, consulte las políticas de retención de datos de esas plataformas.

19 

20## Alcance de ZDR

21 

22ZDR cubre la inferencia de Claude Code en Claude for Enterprise.

23 

24<Warning>

25 ZDR se habilita por organización. Cada nueva organización requiere que ZDR sea habilitado por separado por su equipo de cuenta de Anthropic. ZDR no se aplica automáticamente a las nuevas organizaciones creadas bajo la misma cuenta. Póngase en contacto con su equipo de cuenta para habilitar ZDR para cualquier nueva organización.

26</Warning>

27 

28### Qué cubre ZDR

29 

30ZDR cubre las llamadas de inferencia del modelo realizadas a través de Claude Code en Claude for Enterprise. Cuando utiliza Claude Code en su terminal, los prompts que envía y las respuestas que genera Claude no se retienen por Anthropic. Esto se aplica independientemente de qué modelo de Claude se utilice.

31 

32### Qué no cubre ZDR

33 

34ZDR no se extiende a lo siguiente, incluso para organizaciones con ZDR habilitado. Estas características siguen [políticas estándar de retención de datos](/es/data-usage#data-retention):

35 

36| Característica | Detalles |

37| ------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |

38| Chat en claude.ai | Las conversaciones de chat a través de la interfaz web de Claude for Enterprise no están cubiertas por ZDR. |

39| Cowork | Las sesiones de Cowork no están cubiertas por ZDR. |

40| Claude Code Analytics | No almacena prompts o respuestas del modelo, pero recopila metadatos de productividad como correos electrónicos de cuenta y estadísticas de uso. Las métricas de contribución no están disponibles para organizaciones ZDR; el [panel de analytics](/es/analytics) muestra solo métricas de uso. |

41| Gestión de usuarios y asientos | Los datos administrativos como correos electrónicos de cuenta y asignaciones de asientos se retienen bajo políticas estándar. |

42| Integraciones de terceros | Los datos procesados por herramientas de terceros, MCP servers u otras integraciones externas no están cubiertos por ZDR. Revise las prácticas de manejo de datos de esos servicios de forma independiente. |

43 

44## Características deshabilitadas bajo ZDR

45 

46Cuando ZDR está habilitado para una organización de Claude Code en Claude for Enterprise, ciertas características que requieren almacenar prompts o completaciones se deshabilitan automáticamente a nivel de backend:

47 

48| Característica | Razón |

49| --------------------------------------------------------------------------- | ------------------------------------------------------------------------------ |

50| [Claude Code en la Web](/es/claude-code-on-the-web) | Requiere almacenamiento del lado del servidor del historial de conversaciones. |

51| [Sesiones remotas](/es/desktop#remote-sessions) desde la aplicación Desktop | Requiere datos de sesión persistentes que incluyen prompts y completaciones. |

52| Envío de comentarios (`/feedback`) | Enviar comentarios envía datos de conversación a Anthropic. |

53 

54Estas características se bloquean en el backend independientemente de la visualización del lado del cliente. Si ve una característica deshabilitada en la terminal de Claude Code durante el inicio, intentar usarla devuelve un error indicando que las políticas de la organización no permiten esa acción.

55 

56Las características futuras también pueden deshabilitarse si requieren almacenar prompts o completaciones.

57 

58## Retención de datos para violaciones de políticas

59 

60Incluso con ZDR habilitado, Anthropic puede retener datos cuando sea requerido por ley o para abordar violaciones de la Política de Uso. Si una sesión se marca por una violación de política, Anthropic puede retener las entradas y salidas asociadas hasta 2 años, consistente con la política estándar de ZDR de Anthropic.

61 

62## Solicitar ZDR

63 

64Para solicitar ZDR para Claude Code en Claude for Enterprise, [póngase en contacto con ventas](https://www.anthropic.com/contact-sales?utm_source=claude_code\&utm_medium=docs\&utm_content=zero_data_retention_request) o su equipo de cuenta de Anthropic. Su equipo de cuenta presentará la solicitud internamente, y Anthropic revisará y habilitará ZDR en su organización después de confirmar la elegibilidad. Todas las acciones de habilitación se registran en auditoría.

65 

66Si actualmente está utilizando ZDR para Claude Code a través de claves API de pago por uso, puede hacer la transición a Claude for Enterprise para obtener acceso a características administrativas mientras mantiene ZDR para Claude Code. Póngase en contacto con su equipo de cuenta para coordinar la migración.