SpyBara
Go Premium

Documentation 2026-11-12 23:02 UTC to 2026-11-13 23:02 UTC

66 files changed +796 −455. View all changes and history on the product overview
2026
Sat 14 03:01 Fri 13 23:02 Thu 12 23:02 Wed 11 22:59 Tue 10 21:57 Mon 9 23:02 Sun 8 22:58 Sat 7 23:58 Fri 6 23:01 Thu 5 23:03 Wed 4 23:59 Tue 3 23:58 Mon 2 23:57 Sun 1 23:57
Details

117 --network none \117 --network none \

118 --memory 2g \118 --memory 2g \

119 --cpus 2 \119 --cpus 2 \

120 --pids-limit 100 \120 --pids-limit 600 \

121 --user 1000:1000 \121 --user 1000:1000 \

122 -v /path/to/code:/workspace:ro \122 -v /path/to/code:/workspace:ro \

123 -v /var/run/proxy.sock:/var/run/proxy.sock:ro \123 -v /var/run/proxy.sock:/var/run/proxy.sock:ro \


135| `--tmpfs /tmp:...` | Proporciona un directorio temporal escribible que se borra cuando el contenedor se detiene |135| `--tmpfs /tmp:...` | Proporciona un directorio temporal escribible que se borra cuando el contenedor se detiene |

136| `--network none` | Aísla el contenedor de las redes externas |136| `--network none` | Aísla el contenedor de las redes externas |

137| `--memory 2g` | Limita el uso de memoria para prevenir agotamiento de recursos |137| `--memory 2g` | Limita el uso de memoria para prevenir agotamiento de recursos |

138| `--pids-limit 100` | Limita el recuento de procesos para prevenir fork bombs |138| `--pids-limit 600` | Limita los procesos y subprocesos para prevenir fork bombs |

139| `--user 1000:1000` | Se ejecuta como un usuario no root |139| `--user 1000:1000` | Se ejecuta como un usuario no root |

140| `-v ...:/workspace:ro` | Monta código solo lectura para que el agente pueda analizarlo pero no modificarlo. **Evite montar directorios de host sensibles como `~/.ssh`, `~/.aws`, o `~/.config`** |140| `-v ...:/workspace:ro` | Monta código solo lectura para que el agente pueda analizarlo pero no modificarlo. **Evite montar directorios de host sensibles como `~/.ssh`, `~/.aws`, o `~/.config`** |

141| `-v .../proxy.sock:...` | Monta un socket Unix conectado a un proxy ejecutándose fuera del contenedor (ver a continuación) |141| `-v .../proxy.sock:...` | Monta un socket Unix conectado a un proxy ejecutándose fuera del contenedor (ver a continuación) |

Details

104| `options` | [`Options`](#options) | Objeto de configuración opcional. Igual que el parámetro `options` para `query()` |104| `options` | [`Options`](#options) | Objeto de configuración opcional. Igual que el parámetro `options` para `query()` |

105| `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 |105| `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 |

106 106 

107Los [hooks de comando](https://code.claude.com/docs/es/hooks.md#command-hook-fields) [SessionStart](https://code.claude.com/docs/es/hooks.md#sessionstart) y [Setup](https://code.claude.com/docs/es/hooks.md#setup) lentos obtienen tiempo adicional solo cuando `initializeTimeoutMs` no está establecido:

108 

109* **Si lo dejas sin establecer:** el tiempo que estos hooks pasan ejecutándose no cuenta para el valor predeterminado de 60 segundos, hasta 10 minutos en total, por lo que la inicialización puede tardar 11 minutos como máximo.

110* **Si estableces un valor, incluido `60000`:** ese valor es el límite, incluso mientras se ejecuta un hook.

111 

112El tiempo adicional requiere TypeScript Agent SDK v0.3.304 o posterior.

113 

107#### Devuelve114#### Devuelve

108 115 

109Devuelve una `Promise<`[`WarmQuery`](#warmquery)`>` que se resuelve una vez que el subproceso se ha generado y ha completado su protocolo de inicialización.116Devuelve una `Promise<`[`WarmQuery`](#warmquery)`>` que se resuelve una vez que el subproceso se ha generado y ha completado su protocolo de inicialización.


128 135 

129### `prewarm()`136### `prewarm()`

130 137 

131*Alfa.* Inicia un proceso de Claude Code como repuesto antes de saber qué sesión servirá, para que puedas vincularlo a una sesión más tarde con [`claim()`](#spareprocess). Úsalo en una aplicación que se inicia antes de que el usuario elija una carpeta. Requiere TypeScript Agent SDK v0.3.282 o posterior.138*Alfa.* Inicia un proceso de Claude Code como repuesto antes de saber qué sesión servirá, para que puedas vincularlo a una sesión más tarde con [`claim()`](#spareprocess). Requiere TypeScript Agent SDK v0.3.282 o posterior.

132 139 

133`prewarm()` completa el mismo protocolo de inicialización que [`startup()`](#startup), con el proceso esperando en `options.cwd` cuando lo estableces y, de lo contrario, en un directorio temporal privado dentro de tu directorio de configuración de Claude Code. El directorio de trabajo de la sesión, sus hooks `SessionStart`, sus servidores MCP de stdio, y su contexto de CLAUDE.md y git esperan a la reclamación. Un repuesto ocupa aproximadamente de 230 a 260 MB de memoria mientras espera. Si tu [`spawnClaudeCodeProcess`](#options) ejecuta Claude Code en otra máquina o en un contenedor, establece `options.cwd` en un directorio que exista allí para que el repuesto espere en él.140Usa `prewarm()` cuando tu aplicación se inicia antes de que el usuario elija una carpeta.

134 141 

135```typescript theme={null}142```typescript theme={null}

136function prewarm(params?: {143function prewarm(params?: {


139}): Promise<SpareProcess>;146}): Promise<SpareProcess>;

140```147```

141 148 

142`options` e `initializeTimeoutMs` significan lo mismo que para `startup()`, excepto que `options.cwd` establece solo el directorio en el que el repuesto espera. La promesa se resuelve con un [`SpareProcess`](#spareprocess) una vez que el proceso ha completado su protocolo de inicialización. `prewarm()` lanza una excepción si `options` establece `resume`, `continue` o `forkSession`, porque un repuesto aún no tiene sesión. Todo lo que una reclamación no puede establecer, como `mcpServers`, `hooks`, `canUseTool`, `settingSources`, `systemPrompt` y `plugins`, queda fijo durante la vida útil del repuesto, así que mantén un repuesto por cada conjunto distinto de esas opciones y precalienta de nuevo cuando cambien.149#### Parámetros

150 

151| Parámetro | Tipo | Descripción |

152| :- | :- | :- |

153| `options` | [`Options`](#options) | Objeto de configuración opcional, del mismo tipo que acepta `startup()` |

154| `initializeTimeoutMs` | `number` | Tiempo máximo en milisegundos para esperar la inicialización del repuesto. Por defecto es `60000`. Si la inicialización no se completa a tiempo, la promesa se rechaza con un error de tiempo de espera |

155 

156`prewarm()` cuenta el tiempo empleado en los hooks [Setup](https://code.claude.com/docs/es/hooks.md#setup) para `initializeTimeoutMs`, incluso cuando lo dejas sin establecer. Para dar más tiempo a los hooks Setup lentos, establece un valor más largo.

157 

158#### Devuelve

159 

160Devuelve una `Promise<`[`SpareProcess`](#spareprocess)`>` que se resuelve una vez que el repuesto está listo para reclamarse.

161 

162La promesa se rechaza si pides `resume`, `continue` o `forkSession` en `options`, porque un repuesto aún no tiene sesión.

163 

164#### Cómo funciona un repuesto

165 

166* **Dónde espera un repuesto:** en un directorio temporal privado dentro de tu directorio de configuración de Claude Code, o en `options.cwd` si lo estableces en `prewarm()`.

167* **Si tu [`spawnClaudeCodeProcess`](#options) ejecuta Claude Code en otra máquina o en un contenedor:** pasa a `prewarm()` un `options.cwd` que exista allí, porque el directorio temporal predeterminado se crea en tu máquina.

168* **Memoria:** cada repuesto usa aproximadamente de 230 a 260 MB mientras espera.

169* **Lo que no ocurre hasta que llamas a `claim()`:**

170 * Moverse al directorio de trabajo que pasas a `claim()`

171 * Ejecutar los hooks SessionStart

172 * Iniciar los servidores MCP de stdio

173 * Cargar CLAUDE.md y el contexto de git

174* **Lo que una reclamación no puede cambiar:** opciones como `mcpServers`, `hooks`, `canUseTool`, `settingSources` y `plugins` conservan sus valores de `prewarm()`. [`SpareProcess`](#spareprocess) enumera lo que una reclamación puede establecer.

175* **Si las sesiones necesitan valores distintos para estas opciones:** mantén un repuesto separado para cada conjunto de valores.

143 176 

144#### Ejemplo177#### Ejemplo

145 178 

agent-view.md +5 −3

Details

8 8 

9La vista de agentes, abierta con `claude agents`, es una pantalla para todas sus sesiones en segundo plano: qué se está ejecutando, qué necesita su entrada y qué está hecho. Distribuya nuevas sesiones, observe su estado de un vistazo en lugar de desplazarse por transcripciones, e intervenga solo cuando una lo necesite. Cada sesión en segundo plano es una conversación completa de Claude Code que sigue ejecutándose sin una terminal conectada, por lo que puede abrirla, responder y marcharse cuando quiera.9La vista de agentes, abierta con `claude agents`, es una pantalla para todas sus sesiones en segundo plano: qué se está ejecutando, qué necesita su entrada y qué está hecho. Distribuya nuevas sesiones, observe su estado de un vistazo en lugar de desplazarse por transcripciones, e intervenga solo cuando una lo necesite. Cada sesión en segundo plano es una conversación completa de Claude Code que sigue ejecutándose sin una terminal conectada, por lo que puede abrirla, responder y marcharse cuando quiera.

10 10 

11![Vista de agentes en una terminal. Una línea en la parte superior cuenta las sesiones que esperan entrada, las que están trabajando y las completadas. Cuatro sesiones se agrupan bajo Necesita entrada, Trabajando y Completado. Cada fila muestra el nombre de la sesión, su estado más reciente o pregunta, y una hora. En la parte inferior hay una entrada para describir una nueva tarea y una fila de sugerencias de teclado.](https://mintcdn.com/claude-code/HDAmBwgbrZVk0pOt/images/agent-view-light.png?fit=max\&auto=format\&n=HDAmBwgbrZVk0pOt\&q=85\&s=d6905012bee31f3e6b3920b09c05dd02)11![Vista de agentes en una terminal. Una línea en la parte superior cuenta las sesiones que esperan entrada, las que están trabajando y las completadas. Cuatro sesiones se agrupan bajo Necesita entrada, Trabajando y Completado. Cada fila muestra el nombre de la sesión, su estado más reciente o pregunta, y una hora. En la parte inferior hay una entrada para describir una nueva tarea y una fila de sugerencias de teclado.](https://mintcdn.com/claude-code/v_J840yKc6uuKDX_/images/agent-view-light.png?fit=max\&auto=format\&n=v_J840yKc6uuKDX_\&q=85\&s=bd95fda83ea66ca8b2e0e7b68f8cb29e)

12 12 

13Utilice la vista de agentes cuando tenga varias tareas independientes en las que Claude pueda trabajar sin que usted observe cada paso. Distribuya una corrección de errores, una revisión de solicitud de extracción y una investigación de prueba inestable como tres filas, continúe trabajando en otra ventana y verifique cuando una fila muestre que la necesita o tenga un resultado.13Utilice la vista de agentes cuando tenga varias tareas independientes en las que Claude pueda trabajar sin que usted observe cada paso. Distribuya una corrección de errores, una revisión de solicitud de extracción y una investigación de prueba inestable como tres filas, continúe trabajando en otra ventana y verifique cuando una fila muestre que la necesita o tenga un resultado.

14 14 


628 628 

629* La vista de agentes lo elimina, incluidos los cambios sin commit, así que primero haz commit de lo que quieras conservar.629* La vista de agentes lo elimina, incluidos los cambios sin commit, así que primero haz commit de lo que quieras conservar.

630* `claude rm` lo conserva, junto con la fila de la sesión, cuando tiene cambios sin commit.630* `claude rm` lo conserva, junto con la fila de la sesión, cuando tiene cambios sin commit.

631* Ni la vista de agentes ni `claude rm` eliminan un worktree que otra sesión en ejecución está usando o ha bloqueado, y volver a eliminar no cambia eso. Claude Code conserva el worktree y la sesión, e indica el directorio conservado y el motivo; en la vista de agentes, la fila de la sesión muestra `not deleted`. Cierra la otra sesión y luego vuelve a eliminar.631* Ni la vista de agentes ni `claude rm` eliminan un worktree que otra sesión en ejecución está usando o ha bloqueado, y volver a eliminar no cambia eso. Claude Code conserva el worktree y la sesión, e indica el directorio conservado y el motivo; en la vista de agentes, la fila de la sesión muestra `not removed`. Cierra la otra sesión y luego vuelve a eliminar.

632* Cuando eliminas una sesión cuyo worktree tiene commits que Claude Code no puede confirmar que estén guardados en otro lugar, Claude Code conserva el worktree y la sesión, y el mensaje indica la rama del worktree y cuántos commits no tienen push. El mensaje también ofrece las dos formas de continuar: hacer push de los commits, o volver a eliminar para descartarlos.632* Cuando eliminas una sesión cuyo worktree tiene commits que Claude Code no puede confirmar que estén guardados en otro lugar, Claude Code conserva el worktree y la sesión, y el mensaje indica la rama del worktree y cuántos commits no tienen push. El mensaje también ofrece las dos formas de continuar: hacer push de los commits, o volver a eliminar para descartarlos.

633 633 

634 Los commits que están en un remoto no bloquean la eliminación. Tampoco los commits en la copia local de la rama predeterminada de tu remoto `origin`, siempre que esa rama esté extraída en tu checkout principal, es decir, el propio directorio del repositorio y no un worktree.634 Los commits que están en un remoto no bloquean la eliminación. Tampoco los commits en la copia local de la rama predeterminada de tu remoto `origin`, siempre que esa rama esté extraída en tu checkout principal, es decir, el propio directorio del repositorio y no un worktree.


935Apagar o reiniciar tu máquina detiene las sesiones en segundo plano en ejecución. Una sesión que estaba esperando tu entrada permanece bajo `Needs input` cuando regresas. Para cualquier otra sesión en ejecución, lo que muestra la vista de agentes depende de cuánto tiempo hace que avanzó por última vez:935Apagar o reiniciar tu máquina detiene las sesiones en segundo plano en ejecución. Una sesión que estaba esperando tu entrada permanece bajo `Needs input` cuando regresas. Para cualquier otra sesión en ejecución, lo que muestra la vista de agentes depende de cuánto tiempo hace que avanzó por última vez:

936 936 

937* Dentro de las 48 horas, la sesión se muestra como fallida. Conéctate o responde a ella y se reiniciará desde su conversación guardada. Para retomar el trabajo interrumpido, envíale una respuesta pidiéndole que continúe.937* Dentro de las 48 horas, la sesión se muestra como fallida. Conéctate o responde a ella y se reiniciará desde su conversación guardada. Para retomar el trabajo interrumpido, envíale una respuesta pidiéndole que continúe.

938* Pasadas 48 horas, como después de que la máquina estuvo apagada durante días, la sesión se muestra como detenida con `ended while the background service was off`. Presiona `Enter` en la fila y el pie de página muestra `Press enter again to resume this session (it ended while the background service was off), or ctrl+x to delete it.` Presiona `Enter` en la misma fila nuevamente para reanudar su conversación guardada. Una respuesta, o `claude attach <id>`, la reanuda sin esa solicitud del pie de página.938* Pasadas 48 horas, como después de que la máquina estuvo apagada durante días, la sesión se muestra como detenida con `ended while the background service was off`.

939 

940 Presiona `Enter` en la fila y el pie de página muestra `Press enter again to resume this session (it ended while the background service was off), or ctrl+x to remove it.` Presiona `Enter` en la misma fila nuevamente para reanudar su conversación guardada. Una respuesta, o `claude attach <id>`, la reanuda sin esa solicitud del pie de página.

939 941 

940Cuando la [limpieza de transcripciones](https://code.claude.com/docs/es/settings-reference.md#cleanupperioddays) ha eliminado la conversación guardada de una sesión detenida, Claude Code se niega a abrir la fila: el mensaje dice que no hay nada que reanudar. `claude rm <id>` elimina la fila, excepto en los [casos en que se conserva](#what-deleting-a-session-removes) descritos anteriormente, y `claude respawn <id>` ejecuta su prompt original nuevamente. Consulta [La conversación guardada de esta sesión ya no está en el disco](https://code.claude.com/docs/es/errors.md#this-sessions-saved-conversation-is-no-longer-on-disk).942Cuando la [limpieza de transcripciones](https://code.claude.com/docs/es/settings-reference.md#cleanupperioddays) ha eliminado la conversación guardada de una sesión detenida, Claude Code se niega a abrir la fila: el mensaje dice que no hay nada que reanudar. `claude rm <id>` elimina la fila, excepto en los [casos en que se conserva](#what-deleting-a-session-removes) descritos anteriormente, y `claude respawn <id>` ejecuta su prompt original nuevamente. Consulta [La conversación guardada de esta sesión ya no está en el disco](https://code.claude.com/docs/es/errors.md#this-sessions-saved-conversation-is-no-longer-on-disk).

941 943 

Details

349 349 

350### Cuando un modelo se deshabilita durante la sesión350### Cuando un modelo se deshabilita durante la sesión

351 351 

352Si tu cuenta pierde acceso al modelo con el que se ejecuta tu sesión, por ejemplo porque un administrador lo deshabilita en tu cuenta de Amazon Bedrock, Claude Code cambia la sesión a otro modelo en lugar de fallar en cada solicitud, y muestra `Switched to <fallback> because <model> is not available`. Intenta los mismos modelos que el respaldo de inicio: primero versiones anteriores del mismo nivel y, para una sesión de Opus sin ninguna versión de Opus disponible, el modelo Sonnet predeterminado.352Cuando Amazon Bedrock rechaza el modelo de tu sesión por no estar disponible para tu cuenta, Claude Code cambia tu sesión a otro modelo y puedes seguir trabajando. Verás un mensaje que comienza con `Switched to <fallback> because <model> is not available`. Esto ocurre, por ejemplo, cuando un administrador deshabilita el modelo o cuando el modelo más nuevo aún no está disponible para tu cuenta.

353 353 

354El cambio se aplica solo a un nivel que no hayas fijado, la misma condición que el respaldo de inicio. Una sesión con una versión específica que elegiste, o con un [ARN de perfil de inferencia de aplicación](#map-each-model-version-to-an-inference-profile), mantiene su modelo y, sin una cadena de modelos de respaldo, la solicitud falla. En [modo automático](https://code.claude.com/docs/es/permission-modes.md#enable-auto-mode-on-bedrock-agent-platform-or-foundry), Claude Code cambia solo a un modelo que el modo automático admite en Amazon Bedrock. Si ninguno de esos modelos está disponible tampoco, la solicitud falla con [AWS authentication failed](https://code.claude.com/docs/es/errors.md#aws-authentication-failed) y una sugerencia para habilitar el modelo.354Si configuraste una [cadena de modelos de respaldo](https://code.claude.com/docs/es/model-config.md#fallback-model-chains), Claude Code cambia en su lugar al respaldo que configuraste. Sin una cadena, la solicitud falla en casos como estos:

355 355 

356Una [cadena de modelos de respaldo](https://code.claude.com/docs/es/model-config.md#fallback-model-chains) que configures reemplaza el cambio de nivel: ante estos rechazos, Claude Code cambia en su lugar al respaldo que configuraste. Para que las solicitudes rechazadas fallen en lugar de cambiar, establece [`CLAUDE_CODE_DISABLE_MODEL_ACCESS_FALLBACK=1`](https://code.claude.com/docs/es/env-vars). Una cadena de respaldo que hayas configurado sigue cambiando ante estos rechazos; elimina también la cadena si quieres que todas las solicitudes rechazadas fallen.356* Tu sesión usa un modelo fijado, una versión específica que elegiste o un [ARN de perfil de inferencia de aplicación](#map-each-model-version-to-an-inference-profile)

357* Ninguno de los [modelos que Claude Code intenta](#startup-model-checks) está disponible. En [modo automático](https://code.claude.com/docs/es/permission-modes.md#enable-auto-mode-on-bedrock-agent-platform-or-foundry), Claude Code cambia solo a un modelo que el modo automático admite en Amazon Bedrock.

358 

359Para seguir trabajando, ejecuta `/model` en la sesión y presiona `s` sobre un modelo que tu cuenta pueda usar, lo que deja tu predeterminado sin cambios. Un `403` se muestra como [AWS authentication failed](https://code.claude.com/docs/es/errors.md#aws-authentication-failed).

360 

361Para que las solicitudes rechazadas fallen en lugar de cambiar, establece [`CLAUDE_CODE_DISABLE_MODEL_ACCESS_FALLBACK=1`](https://code.claude.com/docs/es/env-vars). Si configuraste una cadena de modelos de respaldo, elimínala también, ya que Claude Code sigue cambiando a ese respaldo.

357 362 

358## Prefijos de perfil de inferencia entre regiones363## Prefijos de perfil de inferencia entre regiones

359 364 

Details

222 222 

223Cada uno es una matriz de descripciones en prosa, leídas como reglas en lenguaje natural. Para bloqueos estrictos basados en patrones de herramientas que se ejecutan antes del clasificador, usa [`permissions.deny`](https://code.claude.com/docs/es/permissions).223Cada uno es una matriz de descripciones en prosa, leídas como reglas en lenguaje natural. Para bloqueos estrictos basados en patrones de herramientas que se ejecutan antes del clasificador, usa [`permissions.deny`](https://code.claude.com/docs/es/permissions).

224 224 

225> [!NOTE]

226>

227> En una sesión de [Code Mode](https://code.claude.com/docs/es/code-mode.md#permission-checks), el clasificador aplica `hard_deny` y `soft_deny` cuando revisa el código de Claude, y no a cada llamada a herramienta que hace el código. Las reglas `permissions.deny` se aplican a cada llamada.

228 

225Dentro del clasificador, la precedencia funciona en cuatro niveles:229Dentro del clasificador, la precedencia funciona en cuatro niveles:

226 230 

227* Las reglas `hard_deny` bloquean incondicionalmente. La intención del usuario y las excepciones `allow` no se aplican.231* Las reglas `hard_deny` bloquean incondicionalmente. La intención del usuario y las excepciones `allow` no se aplican.


283 287 

284De forma predeterminada, las reglas estrechas de Bash y PowerShell como `Bash(npm test)` permanecen en vigor en modo automático. Claude Code las resuelve antes de que se ejecute el clasificador, a menos que el comando lleve [dominios permitidos por comando](https://code.claude.com/docs/es/sandboxing.md#per-command-allowed-domains-in-auto-mode). Claude Code suspende solo las reglas amplias que otorgan ejecución de código arbitrario, como `Bash(*)` o intérpretes con comodines, junto con cada regla que nombra [`Monitor`](https://code.claude.com/docs/es/tools-reference#monitor-tool), porque los comandos Monitor se ejecutan a través del shell. Esto significa que una regla estrecha aún puede dejar pasar un argumento destructivo sin que el clasificador lo vea, por ejemplo una ruta de script o bandera que el prefijo de la regla no anticipó.288De forma predeterminada, las reglas estrechas de Bash y PowerShell como `Bash(npm test)` permanecen en vigor en modo automático. Claude Code las resuelve antes de que se ejecute el clasificador, a menos que el comando lleve [dominios permitidos por comando](https://code.claude.com/docs/es/sandboxing.md#per-command-allowed-domains-in-auto-mode). Claude Code suspende solo las reglas amplias que otorgan ejecución de código arbitrario, como `Bash(*)` o intérpretes con comodines, junto con cada regla que nombra [`Monitor`](https://code.claude.com/docs/es/tools-reference#monitor-tool), porque los comandos Monitor se ejecutan a través del shell. Esto significa que una regla estrecha aún puede dejar pasar un argumento destructivo sin que el clasificador lo vea, por ejemplo una ruta de script o bandera que el prefijo de la regla no anticipó.

285 289 

286Establezca `autoMode.classifyAllShell` en `true` para suspender cada regla de permiso de Bash y PowerShell mientras el modo automático está activo, de modo que el clasificador evalúe cada comando de shell independientemente de su lista de permisos, excepto [eliminaciones de rutas críticas](https://code.claude.com/docs/es/permission-modes.md#critical-paths).290Establece `autoMode.classifyAllShell` en `true` para suspender cada regla de permiso de Bash y PowerShell mientras el modo automático está activo, de modo que el clasificador evalúe cada comando de shell independientemente de tu lista de permisos, excepto [eliminaciones de rutas críticas](https://code.claude.com/docs/es/permission-modes.md#critical-paths). En una sesión de [Code Mode](https://code.claude.com/docs/es/code-mode.md#permission-checks), el clasificador revisa el código que ejecuta los comandos, incluso con este ajuste activado.

287 291 

288```json theme={null}292```json theme={null}

289{293{

Details

315 {315 {

316 "matcher": "Edit|Write",316 "matcher": "Edit|Write",

317 "hooks": [317 "hooks": [

318 { "type": "command", "command": "npx prettier --write --ignore-unknown \"$(jq -r '.tool_input.file_path')\"" }318 { "type": "command", "command": "f=$(jq -r '.tool_input.file_path') && npx prettier --write --ignore-unknown \"$f\"" }

319 ]319 ]

320 }320 }

321 ]321 ]

Details

74| PostgreSQL 11 o posterior | Respalda el flujo de inicio de sesión de dispositivo y los contadores de rate limit. Funciona un servicio administrado de PostgreSQL, incluido el nivel más pequeño; consulta [qué bases de datos son compatibles](https://code.claude.com/docs/es/claude-apps-gateway-deploy.md#postgres). Con [límites de gasto](https://code.claude.com/docs/es/claude-apps-gateway-spend-limits.md), también almacena tablas duraderas de gasto, auditoría e identidad que deben respaldarse. Se recomienda TLS mediante `?sslmode=require`. PostgreSQL 11, 12 y 13 requieren Claude Code v2.1.290 o posterior en el servidor del gateway. El proyecto PostgreSQL ya no mantiene esas versiones, así que usa una más reciente cuando puedas. |74| PostgreSQL 11 o posterior | Respalda el flujo de inicio de sesión de dispositivo y los contadores de rate limit. Funciona un servicio administrado de PostgreSQL, incluido el nivel más pequeño; consulta [qué bases de datos son compatibles](https://code.claude.com/docs/es/claude-apps-gateway-deploy.md#postgres). Con [límites de gasto](https://code.claude.com/docs/es/claude-apps-gateway-spend-limits.md), también almacena tablas duraderas de gasto, auditoría e identidad que deben respaldarse. Se recomienda TLS mediante `?sslmode=require`. PostgreSQL 11, 12 y 13 requieren Claude Code v2.1.290 o posterior en el servidor del gateway. El proyecto PostgreSQL ya no mantiene esas versiones, así que usa una más reciente cuando puedas. |

75| Upstream de modelos | Credenciales de Amazon Bedrock, credenciales de Claude Platform on AWS, credenciales de Google Cloud, un recurso de Microsoft Foundry o una clave de API de Anthropic. Se admiten varios upstreams con conmutación por error. |75| Upstream de modelos | Credenciales de Amazon Bedrock, credenciales de Claude Platform on AWS, credenciales de Google Cloud, un recurso de Microsoft Foundry o una clave de API de Anthropic. Se admiten varios upstreams con conmutación por error. |

76| HTTPS | El gateway debe ser accesible mediante `https://` desde las laptops de los desarrolladores y desde cualquier navegador que se use para iniciar sesión; el gateway sirve la página de verificación de dispositivo en el mismo listener. Proporciona un certificado TLS mediante `listen.tls` o ejecútalo detrás de un ingress que termine TLS, y en ambos casos establece `listen.public_url` en el origen externo. En `/login`, Claude Code acepta un origen `http://` simple solo cuando el host del gateway es loopback: `localhost`, `127.0.0.1` o `::1`. |76| HTTPS | El gateway debe ser accesible mediante `https://` desde las laptops de los desarrolladores y desde cualquier navegador que se use para iniciar sesión; el gateway sirve la página de verificación de dispositivo en el mismo listener. Proporciona un certificado TLS mediante `listen.tls` o ejecútalo detrás de un ingress que termine TLS, y en ambos casos establece `listen.public_url` en el origen externo. En `/login`, Claude Code acepta un origen `http://` simple solo cuando el host del gateway es loopback: `localhost`, `127.0.0.1` o `::1`. |

77| Dirección de red privada | En `/login`, Claude Code requiere que el hostname o la dirección IP del gateway resuelva solo a direcciones privadas: RFC 1918, link-local, CGNAT `100.64.0.0/10`, IPv6 ULA `fc00::/7` o loopback. Para un gateway que alojas tú, se rechaza cualquier dirección pública fuera de un bloque que declares; consulta el [modelo de amenazas](https://code.claude.com/docs/es/claude-apps-gateway-deploy.md#threat-model-summary) en la guía de despliegue. Si las máquinas de los desarrolladores enrutan HTTPS a través de un proxy corporativo, el inicio de sesión también requiere que el host del proxy resuelva a direcciones privadas; si no es así, agrega el host del gateway a `NO_PROXY` para que la CLI se conecte directamente. Si tu red interna está numerada con espacio IPv4 público que pertenece a tu organización, [declara esos bloques](#allow-a-gateway-on-public-address-space-you-own) para que `/login` acepte un gateway ahí. |77| Dirección de red privada | En `/login`, Claude Code requiere que el hostname o la dirección IP del gateway resuelva solo a direcciones privadas: RFC 1918 y rangos link-local, CGNAT `100.64.0.0/10`, IPv6 ULA `fc00::/7` y loopback. Consulta el [modelo de amenazas](https://code.claude.com/docs/es/claude-apps-gateway-deploy.md#threat-model-summary). Si tu red interna está numerada con espacio IPv4 público que pertenece a tu organización, [declara esos bloques](#allow-a-gateway-on-public-address-space-you-own) para que `/login` acepte un gateway ahí. |

78| Entorno de ejecución Linux | El servidor del gateway solo se ejecuta en el binario nativo de Linux. macOS funciona para desarrollo local. Windows no es compatible como plataforma de servidor. |78| Entorno de ejecución Linux | El servidor del gateway solo se ejecuta en el binario nativo de Linux. macOS funciona para desarrollo local. Windows no es compatible como plataforma de servidor. |

79 79 

80Cuando `HTTPS_PROXY` o `HTTP_PROXY` se aplica al host del gateway, el inicio de sesión también requiere un proxy cuyo hostname resuelva a direcciones privadas o bien el host del gateway en `NO_PROXY` en las máquinas de los desarrolladores. Si esas máquinas también establecen `no_proxy`, agrega ahí también el host del gateway; de lo contrario, las solicitudes de modelos seguirán pasando por el proxy.

81 

80### Pasos82### Pasos

81 83 

82**1. Registra un cliente OAuth en tu IdP**84**1. Registra un cliente OAuth en tu IdP**

Details

16 16 

17## Estructura del archivo17## Estructura del archivo

18 18 

19Cinco secciones son [requeridas](#required-sections). Todas las demás secciones son [opcionales](#optional-sections), y una sección omitida toma sus valores predeterminados. Las claves desconocidas fallan al arrancar, por lo que un error tipográfico aparece como un error nombrado en lugar de una configuración silenciosamente ignorada.19Cinco secciones son [requeridas](#required-sections). Todas las demás secciones son [opcionales](#optional-sections), y una sección omitida toma sus valores predeterminados.

20 20 

21**Secciones requeridas:**21**Secciones requeridas:**

22 22 


519 519 

520Requiere un gateway que ejecute Claude Code v2.1.281 o posterior. [Atribución de costos en AWS](https://code.claude.com/docs/es/claude-apps-gateway-on-aws.md#cost-attribution) explica el rol de IAM y dónde muestra la facturación de AWS las sesiones.520Requiere un gateway que ejecute Claude Code v2.1.281 o posterior. [Atribución de costos en AWS](https://code.claude.com/docs/es/claude-apps-gateway-on-aws.md#cost-attribution) explica el rol de IAM y dónde muestra la facturación de AWS las sesiones.

521 521 

522> [!NOTE]

523>

524> Para la atribución por desarrollador, establece `assume_role` con `session_name` en todos los upstreams `bedrock` y [`mantle`](#amazon-bedrock-mantle-endpoint), excepto los que usan `aws_bearer_token`. Esos [no pueden usar `assume_role`](#bedrock-in-another-aws-account), por lo que sus solicitudes permanecen bajo una sola entidad principal.

525 

522```yaml theme={null}526```yaml theme={null}

523upstreams:527upstreams:

524 - provider: bedrock528 - provider: bedrock


535 539 

536El gateway también hace una llamada propia con este rol: el conteo de tokens de una solicitud que el cliente abandonó, para que los [límites de gasto](https://code.claude.com/docs/es/claude-apps-gateway-spend-limits.md) se mantengan precisos. Ese conteo y su [solicitud de respaldo de un token](#amazon-bedrock) se firman con la sesión compartida `claude-apps-gateway`, por lo que AWS atribuye el respaldo a `claude-apps-gateway` en lugar de al desarrollador.540El gateway también hace una llamada propia con este rol: el conteo de tokens de una solicitud que el cliente abandonó, para que los [límites de gasto](https://code.claude.com/docs/es/claude-apps-gateway-spend-limits.md) se mantengan precisos. Ese conteo y su [solicitud de respaldo de un token](#amazon-bedrock) se firman con la sesión compartida `claude-apps-gateway`, por lo que AWS atribuye el respaldo a `claude-apps-gateway` en lugar de al desarrollador.

537 541 

538Para una atribución estricta por desarrollador, establece `assume_role` con `session_name` en cada upstream de Bedrock que enumeres. Un upstream sin él firma las solicitudes que sirve con sus propias credenciales.

539 

540#### Endpoint Mantle de Amazon Bedrock542#### Endpoint Mantle de Amazon Bedrock

541 543 

542El proveedor `mantle` envía la inferencia al [endpoint Mantle](https://code.claude.com/docs/es/amazon-bedrock.md#use-the-mantle-endpoint) de Amazon Bedrock. Requiere Claude Code v2.1.283 o posterior en el servidor del gateway. Las versiones anteriores del gateway lo rechazan al arrancar, así que actualiza todas las réplicas antes de agregarlo.544El proveedor `mantle` envía la inferencia al [endpoint Mantle](https://code.claude.com/docs/es/amazon-bedrock.md#use-the-mantle-endpoint) de Amazon Bedrock. Requiere Claude Code v2.1.283 o posterior en el servidor del gateway. Las versiones anteriores del gateway lo rechazan al arrancar, así que actualiza todas las réplicas antes de agregarlo.


656 658 

657| Configuración | Cómo |659| Configuración | Cómo |

658| - | - |660| - | - |

659| RBAC | Otorga a la identidad del gateway `Azure AI User` o `Cognitive Services User` sobre el recurso de Microsoft Foundry |661| RBAC | Concede a la identidad del gateway el rol `Foundry User` o `Cognitive Services User` en el recurso de Microsoft Foundry |

660| Despliegues | Microsoft Foundry usa nombres de despliegue elegidos por el administrador, no IDs de modelo canónicos. Agrega un bloque [`models:`](#models) que asigne cada ID canónico a tu nombre de despliegue. |662| Despliegues | Microsoft Foundry usa nombres de despliegue elegidos por el administrador, no IDs de modelo canónicos. Agrega un bloque [`models:`](#models) que asigne cada ID canónico a tu nombre de despliegue. |

661| AKS (workload identity) | Federa una User-Assigned Managed Identity con el emisor de OIDC del clúster y vincúlala a la cuenta de servicio del gateway. `use_azure_ad: true` la recoge a través de `WorkloadIdentityCredential`. |663| AKS (workload identity) | Federa una User-Assigned Managed Identity con el emisor de OIDC del clúster y vincúlala a la cuenta de servicio del gateway. `use_azure_ad: true` la recoge a través de `WorkloadIdentityCredential`. |

662| ACI / App Service | Habilita la managed identity asignada por el sistema o por el usuario en el recurso. `use_azure_ad: true` la recoge. |664| ACI / App Service | Habilita la managed identity asignada por el sistema o por el usuario en el recurso. `use_azure_ad: true` la recoge. |


1001 1003 

1002Cada clave bajo `upstream_model` debe coincidir con el `name` de un upstream configurado, que de forma predeterminada es el nombre del proveedor. Una clave que no coincide con ningún upstream hace fallar el arranque, así que omite las líneas de los proveedores que no uses.1004Cada clave bajo `upstream_model` debe coincidir con el `name` de un upstream configurado, que de forma predeterminada es el nombre del proveedor. Una clave que no coincide con ningún upstream hace fallar el arranque, así que omite las líneas de los proveedores que no uses.

1003 1005 

1006Para permitir que los desarrolladores usen el alias `fable` con `auto_include_builtin_models: false`, agrega una entrada `claude-fable-5` a `models`. Ese es el ID al que se resuelve el [alias `fable`](https://code.claude.com/docs/es/model-config#fable-alias-resolution) para los desarrolladores con sesión iniciada en el gateway. Sin ella, sus mensajes fallan con un error que empieza por `API Error: 400 model claude-fable-5 is not in the operator's model allowlist`.

1007 

1004### `managed`1008### `managed`

1005 1009 

1006El bloque `managed` define políticas de acceso basadas en roles según los grupos del IdP o el dominio de correo electrónico. Las políticas se evalúan en orden; de forma predeterminada se selecciona la primera coincidencia, que luego se combina sobre la base general `match: {}`. Un usuario que coincide con dos políticas de rol obtiene solo la primera, por lo que las reglas de denegación de la segunda política no se aplican a menos que [apliques todas las políticas coincidentes](#apply-every-matching-policy). Las políticas se sirven por usuario en `GET /managed/settings` con caché ETag/304.1010El bloque `managed` define políticas de acceso basadas en roles según los grupos del IdP o el dominio de correo electrónico. Las políticas se evalúan en orden; de forma predeterminada se selecciona la primera coincidencia, que luego se combina sobre la base general `match: {}`. Un usuario que coincide con dos políticas de rol obtiene solo la primera, por lo que las reglas de denegación de la segunda política no se aplican a menos que [apliques todas las políticas coincidentes](#apply-every-matching-policy). Las políticas se sirven por usuario en `GET /managed/settings` con caché ETag/304.


1025Una captura general `match: {}`, que por convención se coloca al final, se trata como una capa base. Todas las demás políticas heredan de la captura general cualquier clave que no establezcan, por lo que las entradas por rol solo necesitan enumerar lo que difiere del valor predeterminado de la organización. Las reglas de fusión dependen del tipo de clave:1029Una captura general `match: {}`, que por convención se coloca al final, se trata como una capa base. Todas las demás políticas heredan de la captura general cualquier clave que no establezcan, por lo que las entradas por rol solo necesitan enumerar lo que difiere del valor predeterminado de la organización. Las reglas de fusión dependen del tipo de clave:

1026 1030 

1027* **Listas de permitidos**: `availableModels` y `permissions.allow`. La lista de una política específica reemplaza por completo la de la base.1031* **Listas de permitidos**: `availableModels` y `permissions.allow`. La lista de una política específica reemplaza por completo la de la base.

1028* **Listas de denegación y arrays de hooks**: `permissions.deny`, `permissions.ask`, `disabledMcpjsonServers`, `deniedMcpServers`, `blockedMarketplaces`, `deniedModels` y cada array de tipo de evento de `hooks`. Estas toman la unión de la base y la política, de modo que una denegación o un hook de auditoría de toda la organización no se pueda descartar accidentalmente con una sobrescritura por rol.1032* **Listas de denegación y arrays de hooks**: toman la unión de la base y la política:

1033 * `permissions.deny` y `permissions.ask`

1034 * `disabledMcpjsonServers` y `deniedMcpServers`

1035 * `blockedMarketplaces` y `deniedModels`

1036 * Los arrays de tipos de evento de `hooks`

1029* **Claves de tipo registro**: `env`, `modelOverrides` y `skillOverrides`. Estas se fusionan superficialmente, por lo que un bloque `env` por rol sobrescribe las claves que establece y hereda el resto de la base.1037* **Claves de tipo registro**: `env`, `modelOverrides` y `skillOverrides`. Estas se fusionan superficialmente, por lo que un bloque `env` por rol sobrescribe las claves que establece y hereda el resto de la base.

1030 1038 

1031`availableModels` también se aplica del lado del servidor en `/v1/messages`, por lo que un modelo denegado devuelve `400` independientemente de lo que envíe el cliente. Una lista vacía deniega todos los modelos. La comprobación también cubre el modelo con el que empieza una sesión antes de que el desarrollador elija uno, así que [inicia las sesiones en un modelo que la política permita](#start-sessions-on-a-model-the-policy-allows).1039`availableModels` también se aplica del lado del servidor en `/v1/messages`, por lo que un modelo denegado devuelve `400` independientemente de lo que envíe el cliente. Una lista vacía deniega todos los modelos. La comprobación también cubre el modelo con el que empieza una sesión antes de que el desarrollador elija uno, así que [inicia las sesiones en un modelo que la política permita](#start-sessions-on-a-model-the-policy-allows).


1277 1285 

1278Para desactivar el contexto de 1M, establece [`CLAUDE_CODE_DISABLE_1M_CONTEXT: "1"`](https://code.claude.com/docs/es/model-config#extended-context) en el mismo bloque `env`. Claude Code trata entonces todos los modelos como si tuvieran una ventana de 200K. En las sesiones interactivas, cada desarrollador aprueba esta variable en el [diálogo de aprobación](#what-goes-in-cli) antes de que surta efecto.1286Para desactivar el contexto de 1M, establece [`CLAUDE_CODE_DISABLE_1M_CONTEXT: "1"`](https://code.claude.com/docs/es/model-config#extended-context) en el mismo bloque `env`. Claude Code trata entonces todos los modelos como si tuvieran una ventana de 200K. En las sesiones interactivas, cada desarrollador aprueba esta variable en el [diálogo de aprobación](#what-goes-in-cli) antes de que surta efecto.

1279 1287 

1288> [!NOTE]

1289>

1290> Claude Code no lee el `upstream_model` de un alias para dimensionar su ventana de contexto. Para dar la ventana de su modelo a un alias de `models` que Claude Code no reconoce, consulta [Corregir la ventana para un gateway o un ID de modelo personalizado](https://code.claude.com/docs/es/model-config.md#correct-the-window-for-a-gateway-or-custom-model-id).

1291 

1280#### Caché de prompts de una hora1292#### Caché de prompts de una hora

1281 1293 

1282Para solicitar el [TTL de la caché de prompts](https://code.claude.com/docs/es/prompt-caching.md#cache-lifetime) de una hora en lugar de los cinco minutos predeterminados, agrega estas claves al [bloque `code`, `cli` o `settings`](#choose-cli-or-code) existente de una política y reinicia el gateway. Las claves necesitan Claude Code v2.1.242 o posterior en el servidor del gateway y en los clientes.1294Para solicitar el [TTL de la caché de prompts](https://code.claude.com/docs/es/prompt-caching.md#cache-lifetime) de una hora en lugar de los cinco minutos predeterminados, agrega estas claves al [bloque `code`, `cli` o `settings`](#choose-cli-or-code) existente de una política y reinicia el gateway. Las claves necesitan Claude Code v2.1.242 o posterior en el servidor del gateway y en los clientes.


1379 1391 

1380##### Qué rechaza el gateway al arrancar1392##### Qué rechaza el gateway al arrancar

1381 1393 

1382El gateway valida cada bloque `desktop` al arrancar con el mismo esquema de configuración que usa Claude Desktop, por lo que un error aparece al iniciar el gateway como un mensaje que nombra la clave, en lugar de llegar a cada escritorio conectado. El gateway falla al arrancar cuando un bloque contiene:1394El gateway falla al arrancar cuando un bloque `desktop` contiene:

1383 1395 

1384* Una clave desconocida1396* Una clave reconocida cuyo valor Claude Desktop rechazaría o descartaría silenciosamente, como un valor vacío.

1385* Una clave reconocida cuyo valor Claude Desktop rechazaría o descartaría silenciosamente, como un valor vacío o una subclave mal escrita dentro de una entrada anidada. Antes de v2.1.260, el gateway descartaba silenciosamente un campo mal escrito dentro de un objeto anidado de una entrada `managedMcpServers` u `orgPluginSettings` en lugar de fallar al arrancar.

1386* Una clave que el propio gateway calcula: la conexión de inferencia, la lista de modelos y la retransmisión OTLP. Configúralas mediante [`upstreams`](#upstreams), [`models`](#models) y el `forward_to` de la sección [`telemetry`](#telemetry).1397* Una clave que el propio gateway calcula: la conexión de inferencia, la lista de modelos y la retransmisión OTLP. Configúralas mediante [`upstreams`](#upstreams), [`models`](#models) y el `forward_to` de la sección [`telemetry`](#telemetry).

1387* Un alias heredado de una clave actual. En el error de arranque, el gateway nombra la clave canónica que debes escribir.1398* Un alias heredado de una clave actual. En el error de arranque, el gateway nombra la clave canónica que debes escribir.

1399* Desde v2.1.300, cualquier clave cuyo nombre empiece por `selfHosted`, como las claves de un host de sesiones autoalojado. Elimina estas claves antes de actualizar el gateway a v2.1.300 o posterior.

1388 1400 

1389Si usas un valor o una forma de entrada obsoletos, como una entrada `managedMcpServers` sin `transport`, el gateway arranca y registra una advertencia que nombra el reemplazo.1401Si usas un valor o una forma de entrada obsoletos, como una entrada `managedMcpServers` sin `transport`, el gateway arranca y registra una advertencia que nombra el reemplazo.

1390 1402 

1391Antes de v2.1.232, el gateway aceptaba una lista fija de 11 claves de activación de funciones, como `chatTabEnabled` y `disableAutoUpdates`, y rechazaba todas las demás claves al arrancar. Antes de v2.1.227, el gateway también rechazaba `chatTabEnabled` y `chatAdvancedFileAnalysisEnabled` al arrancar.1403Antes de v2.1.232, el gateway aceptaba una lista fija de 11 claves de activación de funciones, como `chatTabEnabled` y `disableAutoUpdates`, y rechazaba todas las demás claves al arrancar. Antes de v2.1.227, el gateway también rechazaba `chatTabEnabled` y `chatAdvancedFileAnalysisEnabled` al arrancar.

1392 1404 

1405##### Claves que el gateway no conoce

1406 

1407En un gateway que ejecuta Claude Code v2.1.295 o posterior, la mayoría de las claves de una versión más nueva de Claude Desktop no requieren actualizar el gateway. En v2.1.321 o posterior, tampoco lo requieren la mayoría de las subclaves nuevas dentro de una clave conocida.

1408 

1409Algunas claves y valores siguen fallando al arrancar, como estos:

1410 

1411* Una nueva opción en la lista fija de valores de una clave conocida.

1412* Un probable error tipográfico de una clave que puedes establecer en un bloque `desktop`, como `disable_auto_updates` en lugar de `disableAutoUpdates`. El error sugiere un nombre.

1413 

1414En cada caso, si el nombre o el valor existe en una versión más nueva de Claude Desktop, [actualiza el gateway](https://code.claude.com/docs/es/claude-apps-gateway-deploy.md#upgrades) a la versión más reciente. De lo contrario, corrígelo o elimínalo. Para averiguarlo antes de desplegar, [prueba la política](#test-a-policy-before-deployment).

1415 

1393##### Claves que necesitan una versión posterior del gateway o de Claude Desktop1416##### Claves que necesitan una versión posterior del gateway o de Claude Desktop

1394 1417 

1395El gateway valida un bloque `desktop` con el esquema incluido en su versión instalada, igual que hace con el bloque `cli`. Para entregar un ajuste introducido por una versión más reciente de Claude Desktop, actualiza primero el gateway. Por ejemplo, `userPluginMarketplacesEnabled` y `userPluginUploadsEnabled` necesitan Claude Code v2.1.260 o posterior en el servidor del gateway y Claude Desktop 1.37937.0 o posterior en las máquinas de los miembros.1418`userPluginMarketplacesEnabled` y `userPluginUploadsEnabled` necesitan Claude Code v2.1.260 o posterior en el servidor del gateway y Claude Desktop 1.37937.0 o posterior en las máquinas de los miembros.

1396 1419 

1397`blockReadsOutsideWorkingDirectories`, `disableBypassPermissionsMode`, `configRecheckIntervalMinutes` y `sshClientPath` necesitan Claude Code v2.1.281 o posterior en el servidor del gateway. Lo mismo ocurre con el valor `required` de `microsoftAuthBroker` y el campo `continuousAccessEvaluation` de una entrada `managedMcpServers` de Microsoft 365. Las versiones de Claude Desktop anteriores al valor `required` lo leen como `disabled`, así que establece `required` solo después de que el Claude Desktop de todos los miembros lo admita. La [referencia de configuración administrada](https://claude.com/docs/third-party/claude-desktop/configuration) de Claude Desktop indica la versión que lee por primera vez cada clave.1420`blockReadsOutsideWorkingDirectories`, `disableBypassPermissionsMode`, `configRecheckIntervalMinutes` y `sshClientPath` necesitan Claude Code v2.1.281 o posterior en el servidor del gateway. Lo mismo ocurre con el valor `required` de `microsoftAuthBroker` y el campo `continuousAccessEvaluation` de una entrada `managedMcpServers` de Microsoft 365. Las versiones de Claude Desktop anteriores al valor `required` lo leen como `disabled`, así que establece `required` solo después de que el Claude Desktop de todos los miembros lo admita. La [referencia de configuración administrada](https://claude.com/docs/third-party/claude-desktop/configuration) de Claude Desktop indica la versión que lee por primera vez cada clave.

1398 1421 

Details

92 92 

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

94 94 

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

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

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

98 98 

Details

189 189 

190```190```

191Sent to cloud session.191Sent to cloud session.

192Session ID: session_01DiUkqY2kzbUbDmW1w96rfi192Session ID: session_01HJKLMNOPQRSTUVWXYZ

193View: https://claude.ai/code/session_01DiUkqY2kzbUbDmW1w96rfi?from=cli&m=0193View: https://claude.ai/code/session_01HJKLMNOPQRSTUVWXYZ?from=cli&m=0

194```194```

195 195 

196Pase `--output-format json` para un resultado legible por máquina: `{ok, session_id, url}` en caso de éxito, o `{ok: false, session_id, error}` cuando el envío falla, por ejemplo cuando falta la sesión o está archivada. Los errores de configuración, como un proveedor no compatible o una política de organización deshabilitada, se imprimen en stderr sin JSON. `--output-format stream-json` no es compatible con `--cloud <session-id>`.196Pase `--output-format json` para un resultado legible por máquina: `{ok, session_id, url}` en caso de éxito, o `{ok: false, session_id, error}` cuando el envío falla, por ejemplo cuando falta la sesión o está archivada. Los errores de configuración, como un proveedor no compatible o una política de organización deshabilitada, se imprimen en stderr sin JSON. `--output-format stream-json` no es compatible con `--cloud <session-id>`.

Details

274 274 

275El hilo se ejecuta en [modo automático](https://code.claude.com/docs/es/permission-modes.md#eliminate-prompts-with-auto-mode), por lo que Claude ejecuta comandos y edita archivos en esa carpeta sin pedirle cada vez. Si el modo automático no está disponible o está desactivado en Claude Code de esa computadora, el hilo se ejecuta sin él, y cualquier aviso de permiso que genere espera su respuesta en el hilo, como [Desbloquear un hilo esperando aprobación](#unblock-a-thread-waiting-on-approval) describe.275El hilo se ejecuta en [modo automático](https://code.claude.com/docs/es/permission-modes.md#eliminate-prompts-with-auto-mode), por lo que Claude ejecuta comandos y edita archivos en esa carpeta sin pedirle cada vez. Si el modo automático no está disponible o está desactivado en Claude Code de esa computadora, el hilo se ejecuta sin él, y cualquier aviso de permiso que genere espera su respuesta en el hilo, como [Desbloquear un hilo esperando aprobación](#unblock-a-thread-waiting-on-approval) describe.

276 276 

277Para ejecutar el hilo en otro modo, inicia `claude remote-control` con [`--settings`](https://code.claude.com/docs/es/remote-control#start-a-remote-control-session). Luego [`permissions.defaultMode`](https://code.claude.com/docs/es/permission-modes#start-in-a-different-mode), en ese archivo o en la configuración de esa computadora, puede elegir otro modo.

278 

277Mientras el hilo se ejecuta, un icono de portátil en su encabezado muestra si tu computadora está conectada. Haz clic en él para ver qué carpeta está usando el hilo o para desactivar la conexión. El hilo se pausa mientras esa computadora está en reposo, y se detiene si la aplicación de escritorio o `claude remote-control` se cierra.279Mientras el hilo se ejecuta, un icono de portátil en su encabezado muestra si tu computadora está conectada. Haz clic en él para ver qué carpeta está usando el hilo o para desactivar la conexión. El hilo se pausa mientras esa computadora está en reposo, y se detiene si la aplicación de escritorio o `claude remote-control` se cierra.

278 280 

279* **Para volver a poner en marcha el hilo**: consulta [Lost contact with your folder](#lost-contact-with-your-folder)281* **Para volver a poner en marcha el hilo**: consulta [Lost contact with your folder](#lost-contact-with-your-folder)

code-mode.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# Ejecuta llamadas a herramientas desde código con Code Mode

6 

7> Prueba Code Mode, una función experimental en la que Claude escribe JavaScript que realiza varias llamadas a herramientas en un solo paso.

8 

9Code Mode cambia la forma en que Claude usa sus [herramientas](https://code.claude.com/docs/es/tools-reference.md). Sin Code Mode, Claude solicita llamadas a herramientas como Bash, Read o Edit directamente y lee cada resultado antes de decidir qué hacer a continuación. Con Code Mode, Claude escribe un fragmento de JavaScript que realiza las llamadas a herramientas, y Claude Code ejecuta ese código en tu sesión.

10 

11> [!NOTE]

12>

13> Code Mode es experimental y está desactivado de forma predeterminada. Puede cambiar o eliminarse en cualquier versión. Para compartir comentarios, ejecuta `/feedback`.

14 

15## Cómo funciona Code Mode

16 

17En una sesión de Code Mode, sigues describiendo tu tarea en un prompt, y Claude escribe JavaScript para llevarla a cabo. Un solo fragmento de código puede ejecutar comandos en paralelo, usar un resultado en la siguiente llamada y devolver la parte de la salida que Claude necesita leer.

18 

19Por ejemplo, si le pides a Claude que aumente un límite de reintentos, Claude podría escribir este código para encontrar el archivo, editarlo y ejecutar las pruebas. La última línea devuelve a Claude la ruta del archivo y la salida de las pruebas:

20 

21```javascript theme={null}

22const files = await $`rg -l "function retryPolicy" src`.text();

23const target = files.trim().split("\n")[0];

24await edit(target, "maxAttempts: 3", "maxAttempts: 5");

25({ edited: target, tests: $`npm test -- retryPolicy`.nothrow() });

26```

27 

28En la conversación, ves las llamadas a herramientas, como el diff de la edición, y no el código. Para leer el código, presiona `Ctrl+O` para abrir el [visor de transcripciones](https://code.claude.com/docs/es/interactive-mode.md#transcript-viewer). Cada fragmento de código aparece ahí como una fila **Code** contraída, con una indicación de cómo expandirla.

29 

30### Cuándo usar Code Mode

31 

32Prueba Code Mode en tareas que requieren muchas llamadas a herramientas relacionadas, como:

33 

34* Un cambio que se repite en muchos archivos

35* Una búsqueda cuyos resultados necesitan filtrarse antes de que Claude los lea

36* Varios comandos independientes que pueden ejecutarse al mismo tiempo

37 

38### Limitaciones de Code Mode

39 

40Antes de activar Code Mode, comprueba que puedes aceptar estas limitaciones:

41 

42* **Reanudación**: solo puedes reanudar una sesión de Code Mode en la terminal, con Code Mode activado

43* **Modo automático**: el clasificador del modo automático [revisa el código, no cada llamada a herramienta](#permission-checks)

44* **Código de larga duración**: a menos que [el código pueda ejecutarse en segundo plano](#long-running-code), esperas a que termine, y se detiene después de diez minutos

45* **Hooks**: puedes ver [llamadas a herramientas rechazadas](#tool-call-refused-by-a-hook) cuando un hook `PreToolUse` no puede ejecutarse o se agota su tiempo de espera, y [salida de código bloqueada](#code-output-withheld-by-a-hook) por un hook `UserPromptSubmit`

46* **Funciones no disponibles**: no puedes usar [Remote Control](https://code.claude.com/docs/es/remote-control.md), [Claude in Chrome](https://code.claude.com/docs/es/chrome.md) ni [computer use](https://code.claude.com/docs/es/computer-use.md)

47* **Mover la sesión**: no puedes mover la sesión a la aplicación de escritorio ni convertirla en una [sesión en segundo plano](https://code.claude.com/docs/es/agent-view.md), y `/fork` no puede iniciar una copia en segundo plano

48 

49## Requisitos

50 

51* **Versión**: Claude Code v2.1.323 o posterior, en cualquiera de los dos [canales de versiones](https://code.claude.com/docs/es/setup.md#configure-release-channel). Una versión anterior se inicia sin Code Mode, con o sin el motivo `it isn't open to your account yet`

52* **Cuenta**: una suscripción a Claude o una cuenta de Console. No puedes usar Code Mode a través de un gateway, Amazon Bedrock, Claude Platform on AWS, Agent Platform de Google Cloud ni Microsoft Foundry

53* **Organización**: tu organización no usa la [configuración HIPAA](https://code.claude.com/docs/es/hipaa-setup.md) ni la [retención cero de datos](https://code.claude.com/docs/es/zero-data-retention.md)

54* **Modelo**: Claude Opus 5.5, Sonnet 5.5, Haiku 5.5 o Fable 5.2

55* **Superficie**: una sesión interactiva de `claude` en una terminal. Code Mode no funciona con `-p`, el Agent SDK, el panel de VS Code, la aplicación de escritorio ni las sesiones en la nube

56* **Instalación**: la [compilación nativa](https://code.claude.com/docs/es/setup.md) de Claude Code

57* **Windows**: [Git for Windows](https://git-scm.com/downloads/win) está instalado

58 

59Tampoco puedes iniciar Code Mode con algunos ajustes activados, como un asistente de clave de API, equipos de agentes, exportación de OpenTelemetry o `DISABLE_TELEMETRY`. Para ver la solución de cada uno, consulta [Code Mode no se inicia](#code-mode-doesnt-start).

60 

61## Prueba Code Mode

62 

63Activa Code Mode, dale una tarea a Claude y revisa el código que Claude escribió.

64 

65**1. Comprueba tu versión**

66 

67Ejecuta `claude --version`. Si la versión es anterior a v2.1.323, ejecuta `claude update`. Si estás en el canal `stable` y la actualización no llega a v2.1.323, espera a que `stable` se ponga al día o [cambia a `latest`](https://code.claude.com/docs/es/setup#configure-release-channel).

68 

69**2. Inicia Claude Code con Code Mode activado**

70 

71Establece la variable de entorno [`CLAUDE_CODE_EXPERIMENTAL_CODE_MODE`](https://code.claude.com/docs/es/env-vars#variables) en `1`. Para probar Code Mode, establécela en tu shell. Para activar Code Mode en cada sesión nueva, establécela en tu configuración de usuario.

72 

73> [tab] macOS, Linux, WSL

74>

75> ```bash theme={null}

76> CLAUDE_CODE_EXPERIMENTAL_CODE_MODE=1 claude

77> ```

78 

79> [tab] Windows PowerShell

80>

81> ```powershell theme={null}

82> $env:CLAUDE_CODE_EXPERIMENTAL_CODE_MODE = "1"

83> claude

84> ```

85 

86> [tab] settings.json

87>

88> Guarda este bloque `env` en `~/.claude/settings.json` e inicia `claude`:

89>

90> ```json theme={null}

91> {

92> "env": {

93> "CLAUDE_CODE_EXPERIMENTAL_CODE_MODE": "1"

94> }

95> }

96> ```

97>

98> Claude Code [ignora esta variable en los archivos de configuración de un proyecto](https://code.claude.com/docs/es/settings-reference.md#variables-claude-code-ignores-in-env), por lo que un repositorio que clones no puede activar Code Mode por ti.

99 

100**3. Confirma que quieres Code Mode**

101 

102Claude Code te pide que confirmes antes de tu primera sesión de Code Mode. Selecciona **Yes, turn on Code Mode**. Claude Code se reinicia y muestra esta línea cerca de la parte superior de la sesión:

103 

104```text theme={null}

105Code Mode (experimental) is on · this session can be resumed only with Code Mode on

106```

107 

108Si ves una línea diferente o ninguna, consulta [Code Mode no se inicia](#code-mode-doesnt-start).

109 

110**4. Dale a Claude una tarea con muchas llamadas a herramientas**

111 

112En un proyecto que conozcas, envía un prompt como este:

113 

114```text theme={null}

115Read every Markdown file in this project and list the links that point to local files that don't exist.

116```

117 

118**5. Lee el código que escribió Claude**

119 

120Presiona `Ctrl+O` y expande una fila **Code** para ver el JavaScript detrás de las llamadas a herramientas. Presiona `Ctrl+O` de nuevo para volver a la conversación.

121 

122> [!WARNING]

123>

124> Para reanudar una sesión de Code Mode más tarde, mantén `CLAUDE_CODE_EXPERIMENTAL_CODE_MODE` establecida en `1` cuando ejecutes `claude --continue` o `claude --resume`. Con Code Mode desactivado, Claude Code se niega a reanudar la sesión. Las sesiones que iniciaste sin Code Mode se reanudan sin Code Mode, incluso con la variable establecida.

125 

126### Desactiva Code Mode

127 

128Elimina `CLAUDE_CODE_EXPERIMENTAL_CODE_MODE` de tu shell y de `~/.claude/settings.json`, y luego inicia una sesión nueva. También puedes conservar la variable y cambiar su valor a `0` en cualquiera de los dos lugares. Con un `0` en un lugar, Code Mode permanece desactivado aunque establezcas `1` en el otro.

129 

130### Bloquea Code Mode para tu organización

131 

132Agrega `CLAUDE_CODE_EXPERIMENTAL_CODE_MODE` con el valor `0` a tu [configuración administrada](https://code.claude.com/docs/es/managed-settings.md) para que nadie en tu organización pueda usar Code Mode:

133 

134```json theme={null}

135{

136 "env": {

137 "CLAUDE_CODE_EXPERIMENTAL_CODE_MODE": "0"

138 }

139}

140```

141 

142Los usuarios que estén en una sesión de Code Mode permanecen en ella hasta que salgan o reinicien Claude Code. Después de eso, tus usuarios inician sin Code Mode y no pueden reanudar sus sesiones de Code Mode mientras el `0` esté establecido. No puedes activar Code Mode para tus usuarios desde la configuración administrada.

143 

144## Permisos y código de larga duración

145 

146Tu modo de permisos decide cómo se revisa el código de Claude y si puedes hablar con Claude mientras el código se ejecuta.

147 

148### Comprobaciones de permisos

149 

150Cada llamada a herramienta que realiza el código de Claude pasa por tus [reglas de permisos](https://code.claude.com/docs/es/permissions.md) `deny` y `ask` y tus [hooks `PreToolUse`](https://code.claude.com/docs/es/hooks#pretooluse). No necesitas cambiar una regla ni un matcher para una herramienta como `Bash`. Además de las reglas y los hooks, un clasificador revisa el código en el modo automático, y tú respondes a las solicitudes en los modos que preguntan:

151 

152* **[Modo automático](https://code.claude.com/docs/es/permission-modes.md#eliminate-prompts-with-auto-mode)**: el clasificador revisa cada fragmento de código antes de que se ejecute, no cada llamada a herramienta. No ve los valores calculados en tiempo de ejecución, como una ruta tomada de la salida de una búsqueda, así que mantén reglas o hooks para las llamadas que debas controlar. Aun así, se te puede [pedir confirmación cuando se inicia código nuevo mientras se ejecuta código anterior](#permission-prompt-with-a-countdown)

153* **Otros [modos de permisos](https://code.claude.com/docs/es/permission-modes.md)**: el código se inicia sin revisión, y se te pide confirmación para cada llamada a herramienta que te la pediría en ese modo

154 

155Para revisar el código en sí, escribe un hook `PreToolUse` que coincida con `REPL`, la herramienta que ejecuta el código de Claude, y lee el JavaScript de `tool_input.code`.

156 

157> [!WARNING]

158>

159> Las reglas de Bash coinciden con el texto del comando, por lo que Claude puede ejecutar un comando denegado [en una forma que la regla no detecta](https://code.claude.com/docs/es/permissions.md#bash-rule-limits), con o sin Code Mode. Para límites que no dependen del texto del comando, consulta [sandboxing](https://code.claude.com/docs/es/sandboxing.md).

160 

161### Código de larga duración

162 

163Mientras el código ejecuta una compilación o una prueba larga, Claude espera a que termine o lo deja continuar en segundo plano:

164 

165* **Esperando**: Claude responde después de que el código termina, y el código se detiene después de diez minutos, incluido el tiempo que pasas en las solicitudes de permiso

166* **Segundo plano**: puedes seguir hablando con Claude, y el código puede ejecutarse hasta dos horas

167 

168Para código en segundo plano, inicia tu sesión en el modo automático o en el modo `bypassPermissions`. Si Claude sigue esperando, comprueba tu modo actual y cómo iniciaste la sesión:

169 

170* **Cambiaste a otro modo**: presiona `Shift+Tab` hasta volver al modo en el que iniciaste

171* **Iniciaste en otro modo, o elegiste la sesión de la lista de `claude --resume`**: si [el modo automático está disponible](https://code.claude.com/docs/es/permission-modes.md#eliminate-prompts-with-auto-mode) para ti, sal y luego ejecuta `claude --continue --permission-mode auto` con Code Mode activado

172* **Pasaste nombres de herramientas a `--tools`**: vuelve a iniciar en el modo automático sin ese flag

173 

174## Solución de problemas

175 

176### Code Mode no se inicia

177 

178`Code Mode (experimental) isn't available` cerca de la parte superior de la sesión significa que Claude Code se inició sin Code Mode. El motivo aparece en la misma línea, y `/status` también lo muestra. Busca el motivo en esta tabla, haz el cambio e inicia una sesión nueva. Para un motivo que no aparezca en la lista, revisa los [requisitos](#requirements).

179 

180| El motivo incluye | Qué hacer |

181| :- | :- |

182| `it isn't open to your account yet` | Si tu versión es anterior a v2.1.323, [actualiza](#try-code-mode). De lo contrario, comprueba tu conexión de red y vuelve a iniciar. Si el motivo persiste, vuelve a intentarlo otro día |

183| `it only works with the Anthropic API` | Elimina los ajustes que enrutan las solicitudes a través de un proveedor de nube, un gateway o un `ANTHROPIC_BASE_URL` personalizado |

184| `it doesn't work with an API key helper` | Elimina `apiKeyHelper`, `ANTHROPIC_AUTH_TOKEN` y cualquier encabezado `Authorization` o `X-Api-Key` en `ANTHROPIC_CUSTOM_HEADERS`. Luego inicia sesión o establece `ANTHROPIC_API_KEY` |

185| `it only works with Opus 5.5, Sonnet 5.5 and later models` | Inicia con un [modelo compatible](#requirements), por ejemplo con `--model opus`. Haiku 5.5 y Fable 5.2 también funcionan |

186| `it doesn't work in background jobs` | Inicia en primer plano, sin `--remote-control` |

187| `it needs settings that Claude Code downloads from Anthropic` | Elimina la variable que [desactiva la obtención de feature flags](https://code.claude.com/docs/es/env-vars.md#features-that-need-feature-flag-fetching), como `DISABLE_TELEMETRY` |

188| `OpenTelemetry is on` | Elimina `CLAUDE_CODE_ENABLE_TELEMETRY` y `ENABLE_BETA_TRACING_DETAILED` si puedes trabajar sin la [exportación de OpenTelemetry](https://code.claude.com/docs/es/monitoring-usage.md) |

189| `it doesn't yet work with an installed mod` | Desactiva el [mod](https://code.claude.com/docs/es/plugins/mods/overview.md) que revisa las llamadas a herramientas |

190| `it can't be used together with agent teams yet` | Elimina `CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS` |

191| `this launch's tool options` | Inicia sin `--restricted`, agrega `REPL` a `--tools` y elimina `REPL` de `--disallowedTools` y de tus reglas `deny` |

192| `couldn't save your answer` | Haz que `~/.claude.json` tenga permisos de escritura |

193| `your organization's settings don't allow it` | Pregunta a tu administrador por el [ajuste administrado](#block-code-mode-for-your-organization) |

194 

195Si no ves ninguna línea sobre Code Mode, ejecuta `claude --version`. Si tu versión es anterior a v2.1.323, actualiza. Luego comprueba que `CLAUDE_CODE_EXPERIMENTAL_CODE_MODE` sea `1` en tu shell o en tu configuración de usuario, y elimina cualquier `0` de ahí y de cualquier archivo de `--settings`.

196 

197### Solicitud de permiso con cuenta regresiva

198 

199Cuando Claude inicia más código en el modo automático mientras el código anterior aún se está ejecutando, el código anterior pierde la revisión del clasificador. Claude Code entonces te pregunta por las llamadas restantes del código anterior que necesitarían una revisión. Sin un IDE conectado, la solicitud muestra una cuenta regresiva:

200 

201```text theme={null}

202Claude Code will automatically block this request in 1:59, to avoid holding up an unattended session

203```

204 

205Responde antes de que termine la cuenta regresiva. De lo contrario, esa llamada se rechaza, y las llamadas posteriores que mostrarían una cuenta regresiva se rechazan sin solicitud. Para volver a ver las solicitudes, envía un mensaje a Claude.

206 

207### Llamada a herramienta rechazada por un hook

208 

209Si Claude informa de una llamada a herramienta rechazada, pídele el texto del error. Estos errores significan que un hook `PreToolUse` no dio una decisión, lo que rechaza la llamada incluso cuando [`onFailure`](https://code.claude.com/docs/es/hooks#block-the-action-when-a-hook-fails) no está establecido:

210 

211* **`the hook failed`**: en una llamada desde el código de Claude, tu hook no pudo iniciarse, fue terminado, salió con 126, 127 o un código superior a 128, o devolvió un error HTTP o una salida no válida. Corrige el hook

212* **`the hook did not finish`**: se agotó el tiempo de espera de tu hook en una llamada desde el código de Claude, o en cualquier otra llamada a herramienta una vez que Claude ha ejecutado código en la sesión. Aumenta el [`timeout`](https://code.claude.com/docs/es/hooks#common-fields) del hook

213 

214Para permitir que las llamadas continúen cuando un hook `command` o `http` falla o se agota su tiempo de espera, establece `"onFailure": "continue"` en él. Si un hook `command` sale con un código común como 1, la llamada continúa, a menos que establezcas `"onFailure": "block"`.

215 

216### Salida de código retenida por un hook

217 

218Si Claude informa del motivo de bloqueo de un hook donde esperabas la salida del código de Claude, revisa tus hooks [`UserPromptSubmit`](https://code.claude.com/docs/es/hooks#userpromptsubmit). Cuando [el código puede ejecutarse en segundo plano](#long-running-code), los hooks `command`, `http` y `mcp_tool` en ese evento también se ejecutan sobre la salida del código. Para dejar pasar la salida, cambia el hook para que no bloquee cuando `source` en su entrada sea `poll_event`.

219 

220## Recursos relacionados

221 

222* [Modos de permisos](https://code.claude.com/docs/es/permission-modes.md): compara el modo automático con los modos que te piden confirmación

223* [Referencia de hooks](https://code.claude.com/docs/es/hooks.md): escribe hooks `PreToolUse` y `UserPromptSubmit`

224* [Configuración administrada](https://code.claude.com/docs/es/managed-settings.md): aplica una configuración en toda una organización

commands.md +3 −5

Details

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

36 36 

37* **[Skill](https://code.claude.com/docs/es/skills.md#bundled-skills)**: un skill incluido. Funciona como los skills que escribes tú mismo: un prompt que se le entrega a Claude.37* **[Skill](https://code.claude.com/docs/es/skills.md#bundled-skills)**: un skill incluido. Funciona como los skills que escribes tú mismo: un prompt que se le entrega a Claude.

38 * `/verify` solo se ejecuta cuando lo invocas.

39* **[Workflow](https://code.claude.com/docs/es/workflows.md#bundled-workflows)**: un [flujo de trabajo dinámico](https://code.claude.com/docs/es/workflows.md) incluido que distribuye el trabajo entre muchos subagentes y se ejecuta en segundo plano.38* **[Workflow](https://code.claude.com/docs/es/workflows.md#bundled-workflows)**: un [flujo de trabajo dinámico](https://code.claude.com/docs/es/workflows.md) incluido que distribuye el trabajo entre muchos subagentes y se ejecuta en segundo plano.

40 * `/deep-research` solo se ejecuta cuando lo invocas.

41 39 

42Para agregar tus propios comandos, consulta [skills](https://code.claude.com/docs/es/skills.md).40Para agregar tus propios comandos, consulta [skills](https://code.claude.com/docs/es/skills.md).

43 41 


149| `/stats` | Alias de `/usage`. Se abre en la pestaña Stats |147| `/stats` | Alias de `/usage`. Se abre en la pestaña Stats |

150| `/status` | Abre la interfaz de Configuración en la pestaña Status, que muestra la versión, el modelo, la cuenta y la conectividad. Una fila `Session kind` indica `background job · attached` o `background job · unattended` en una [sesión en segundo plano](https://code.claude.com/docs/es/agent-view.md), según si hay una terminal adjunta, e `interactive` en cualquier otra sesión. Antes de v2.1.221, `/status` no mostraba esta fila. Funciona mientras Claude está respondiendo |148| `/status` | Abre la interfaz de Configuración en la pestaña Status, que muestra la versión, el modelo, la cuenta y la conectividad. Una fila `Session kind` indica `background job · attached` o `background job · unattended` en una [sesión en segundo plano](https://code.claude.com/docs/es/agent-view.md), según si hay una terminal adjunta, e `interactive` en cualquier otra sesión. Antes de v2.1.221, `/status` no mostraba esta fila. Funciona mientras Claude está respondiendo |

151| `/statusline` | Configura la [línea de estado](https://code.claude.com/docs/es/statusline.md) de Claude Code. Describe lo que quieres, o ejecútalo sin argumentos para configurarla automáticamente a partir del prompt de tu shell |149| `/statusline` | Configura la [línea de estado](https://code.claude.com/docs/es/statusline.md) de Claude Code. Describe lo que quieres, o ejecútalo sin argumentos para configurarla automáticamente a partir del prompt de tu shell |

152| `/stickers` | Pide stickers de Claude Code |150| `/stickers` | Comprueba la disponibilidad de stickers de Claude Code |

153| `/stop` | Detiene la [sesión en segundo plano](https://code.claude.com/docs/es/agent-view.md) a la que estás adjunto, o aquella a la que lo envías como [respuesta desde el vistazo](https://code.claude.com/docs/es/agent-view.md#peek-and-reply); se conservan la transcripción y cualquier worktree. Para separarte sin detenerla, usa `/exit` o presiona `←` |151| `/stop` | Detiene la [sesión en segundo plano](https://code.claude.com/docs/es/agent-view.md) a la que estás adjunto, o aquella a la que lo envías como [respuesta desde el vistazo](https://code.claude.com/docs/es/agent-view.md#peek-and-reply); se conservan la transcripción y cualquier worktree. Para separarte sin detenerla, usa `/exit` o presiona `←` |

154| `/subtask <task>` | Inicia un [subagente bifurcado](https://code.claude.com/docs/es/sub-agents.md#fork-the-current-conversation): un subagente en segundo plano que hereda la conversación completa y trabaja en la tarea mientras tú sigues trabajando. Su resultado vuelve a esta conversación cuando termina. Para copiar la conversación en una sesión en segundo plano separada, usa `/fork` en su lugar. Cuando la [vista de agentes está desactivada](https://code.claude.com/docs/es/agent-view.md#turn-off-agent-view), `/subtask` no está disponible y `/fork` inicia en su lugar el subagente bifurcado |152| `/subtask <task>` | Inicia un [subagente bifurcado](https://code.claude.com/docs/es/sub-agents.md#fork-the-current-conversation): un subagente en segundo plano que hereda la conversación completa y trabaja en la tarea mientras tú sigues trabajando. Su resultado vuelve a esta conversación cuando termina. Para copiar la conversación en una sesión en segundo plano separada, usa `/fork` en su lugar. Cuando la [vista de agentes está desactivada](https://code.claude.com/docs/es/agent-view.md#turn-off-agent-view), `/subtask` no está disponible y `/fork` inicia en su lugar el subagente bifurcado |

155| `/tasks` | Consulta y administra el trabajo en segundo plano de la sesión actual, incluidos los subagentes que ya terminaron. También disponible como `/bashes` |153| `/tasks` | Consulta y administra el trabajo en segundo plano de la sesión actual, incluidos los subagentes que ya terminaron. También disponible como `/bashes` |


161| `/ultraplan <prompt>` | Eliminado. Usa el [modo plan](https://code.claude.com/docs/es/permission-modes.md#analyze-before-you-edit-with-plan-mode) en su lugar. Anteriormente enviaba una tarea de planificación a una [sesión en la nube](https://code.claude.com/docs/es/claude-code-on-the-web.md) para revisarla en tu navegador |159| `/ultraplan <prompt>` | Eliminado. Usa el [modo plan](https://code.claude.com/docs/es/permission-modes.md#analyze-before-you-edit-with-plan-mode) en su lugar. Anteriormente enviaba una tarea de planificación a una [sesión en la nube](https://code.claude.com/docs/es/claude-code-on-the-web.md) para revisarla en tu navegador |

162| `/ultrareview [PR or branch]` | Ejecuta una revisión de código profunda y multiagente en un sandbox en la nube con [ultrareview](https://code.claude.com/docs/es/ultrareview.md). Pasa una referencia de PR para revisar ese pull request, o una rama base o un commit para cambiar la base de comparación. La invocación preferida es `/code-review ultra`, y `/ultrareview` es un alias. Incluye 3 ejecuciones gratuitas en Pro, Max y Ultra; después requiere [créditos de uso](https://support.claude.com/en/articles/12429409-extra-usage-for-paid-claude-plans) |160| `/ultrareview [PR or branch]` | Ejecuta una revisión de código profunda y multiagente en un sandbox en la nube con [ultrareview](https://code.claude.com/docs/es/ultrareview.md). Pasa una referencia de PR para revisar ese pull request, o una rama base o un commit para cambiar la base de comparación. La invocación preferida es `/code-review ultra`, y `/ultrareview` es un alias. Incluye 3 ejecuciones gratuitas en Pro, Max y Ultra; después requiere [créditos de uso](https://support.claude.com/en/articles/12429409-extra-usage-for-paid-claude-plans) |

163| `/update-config [request]` | **[Skill](https://code.claude.com/docs/es/skills.md#bundled-skills).** Describe un cambio de configuración, como permitir un comando, establecer una variable de entorno o agregar un [hook](https://code.claude.com/docs/es/hooks.md), y Claude edita el archivo [`settings.json`](https://code.claude.com/docs/es/settings) correspondiente. Para opciones como el tema y el modelo, usa `/config` en su lugar |161| `/update-config [request]` | **[Skill](https://code.claude.com/docs/es/skills.md#bundled-skills).** Describe un cambio de configuración, como permitir un comando, establecer una variable de entorno o agregar un [hook](https://code.claude.com/docs/es/hooks.md), y Claude edita el archivo [`settings.json`](https://code.claude.com/docs/es/settings) correspondiente. Para opciones como el tema y el modelo, usa `/config` en su lugar |

164| `/upgrade` | Abre la página de mejora de plan en tu navegador para cambiar a un nivel de plan superior. Cuando el navegador no se abre, el comando muestra una solicitud de inicio de sesión sin imprimir la URL |162| `/upgrade` | Abre la página de mejora de plan en tu navegador para cambiar a un nivel de plan superior. Cuando ningún navegador puede abrir la página, por ejemplo a través de SSH, el comando imprime la URL de la página encima de su solicitud de inicio de sesión. Imprimir la URL requiere Claude Code v2.1.323 o posterior |

165| `/usage` | Muestra el costo de la sesión, los límites de uso del plan y las estadísticas de actividad. En un plan Pro, Max, Ultra, Team o Enterprise, incluye un [desglose de lo que cuenta para los límites de tu plan](https://code.claude.com/docs/es/costs.md#plan-usage-breakdown). Detrás de un gateway de Claude apps que registra el gasto, muestra [tu gasto a través del gateway](https://code.claude.com/docs/es/claude-apps-gateway-spend-limits.md#usage-warnings-in-claude-code). `/cost` y `/stats` son alias |163| `/usage` | Muestra el costo de la sesión, los límites de uso del plan y las estadísticas de actividad. En un plan Pro, Max, Ultra, Team o Enterprise, incluye un [desglose de lo que cuenta para los límites de tu plan](https://code.claude.com/docs/es/costs.md#plan-usage-breakdown). Detrás de un gateway de Claude apps que registra el gasto, muestra [tu gasto a través del gateway](https://code.claude.com/docs/es/claude-apps-gateway-spend-limits.md#usage-warnings-in-claude-code). `/cost` y `/stats` son alias |

166| `/usage-credits` | Configura créditos de uso, o solicítalos a tu administrador, cuando alcanzas un límite. Abre tu [configuración de facturación de créditos de uso](https://code.claude.com/docs/es/costs.md#add-usage-credits-to-your-subscription) en el navegador, excepto que los miembros de Team y Enterprise sin acceso a facturación envían en su lugar una solicitud de créditos de uso a su administrador desde la CLI, después de confirmar en un diálogo que la solicitud notifica a sus administradores. Cuando ningún navegador puede abrir la página de facturación, por ejemplo a través de SSH, el comando imprime en su lugar la URL que debes visitar; esto requiere Claude Code v2.1.205 o posterior, y las versiones anteriores no mostraban nada en ese caso. Anteriormente `/extra-usage` |164| `/usage-credits` | Configura créditos de uso, o solicítalos a tu administrador, cuando alcanzas un límite. Abre tu [configuración de facturación de créditos de uso](https://code.claude.com/docs/es/costs.md#add-usage-credits-to-your-subscription) en el navegador. Los miembros de Team y Enterprise sin acceso a facturación envían en su lugar una solicitud de créditos de uso a su administrador desde la CLI. En una terminal donde ningún navegador puede abrir la página, por ejemplo a través de SSH, el comando imprime la URL. Imprimirla requiere Claude Code v2.1.205 o posterior. Anteriormente `/extra-usage` |

167| `/verify` | **[Skill](https://code.claude.com/docs/es/skills.md#bundled-skills).** Confirma que un cambio de código hace lo que debe compilando la app de tu proyecto, ejecutándola y observando el resultado, en lugar de depender de pruebas o comprobaciones de tipos. Consulta [Ejecutar y verificar tu app](https://code.claude.com/docs/es/skills.md#run-and-verify-your-app) |165| `/verify` | **[Skill](https://code.claude.com/docs/es/skills.md#bundled-skills).** Confirma que un cambio de código hace lo que debe compilando la app de tu proyecto, ejecutándola y observando el resultado, en lugar de depender de pruebas o comprobaciones de tipos. Consulta [Ejecutar y verificar tu app](https://code.claude.com/docs/es/skills.md#run-and-verify-your-app) |

168| `/vim` | Se eliminó en v2.1.92. Para alternar entre los modos de edición Vim y Normal, usa `/config` → Editor mode |166| `/vim` | Se eliminó en v2.1.92. Para alternar entre los modos de edición Vim y Normal, usa `/config` → Editor mode |

169| `/voice [hold\|tap\|off]` | Activa o desactiva el [dictado por voz](https://code.claude.com/docs/es/voice-dictation.md), o habilítalo en un modo específico. Requiere una cuenta de Claude.ai |167| `/voice [hold\|tap\|off]` | Activa o desactiva el [dictado por voz](https://code.claude.com/docs/es/voice-dictation.md), o habilítalo en un modo específico. Requiere una cuenta de Claude.ai |

desktop.md +0 −4

Details

2261 2261 

2262La aplicación Desktop carga servidores MCP de `claude_desktop_config.json` en sesiones de la pestaña Code local, junto con servidores de `~/.claude.json` y `.mcp.json`. Un servidor que definas en `claude_desktop_config.json` está disponible tanto en la superficie de chat de Desktop como en sesiones de la pestaña Code local.2262La aplicación Desktop carga servidores MCP de `claude_desktop_config.json` en sesiones de la pestaña Code local, junto con servidores de `~/.claude.json` y `.mcp.json`. Un servidor que definas en `claude_desktop_config.json` está disponible tanto en la superficie de chat de Desktop como en sesiones de la pestaña Code local.

2263 2263 

2264Si defines el mismo nombre de servidor en `claude_desktop_config.json` y en `~/.claude.json` o `.mcp.json`, la pestaña Code en sesiones locales se conecta una vez y usa la definición de `claude_desktop_config.json`.

2265 

2266La aplicación también reentrega servidores stdio de `~/.claude.json` a la CLI integrada en sesiones locales. Cuando el nivel superior de `~/.claude.json` (alcance de usuario) y `.mcp.json` definen el mismo nombre de servidor stdio, la pestaña Code usa la definición de `~/.claude.json`, apartándose de la [jerarquía de alcance](https://code.claude.com/docs/es/mcp.md#scope-hierarchy-and-precedence) de la CLI.

2267 

2268> [!NOTE]2264> [!NOTE]

2269>2265>

2270> La CLI independiente no lee `claude_desktop_config.json`. En macOS y WSL, ejecuta `claude mcp add-from-claude-desktop` para copiar esos servidores en `~/.claude.json`. Consulta [Importar servidores MCP desde Claude Desktop](https://code.claude.com/docs/es/mcp.md#import-mcp-servers-from-claude-desktop) para el flujo de importación y las opciones de alcance.2266> La CLI independiente no lee `claude_desktop_config.json`. En macOS y WSL, ejecuta `claude mcp add-from-claude-desktop` para copiar esos servidores en `~/.claude.json`. Consulta [Importar servidores MCP desde Claude Desktop](https://code.claude.com/docs/es/mcp.md#import-mcp-servers-from-claude-desktop) para el flujo de importación y las opciones de alcance.

Details

71 71 

72Lanza **Claude** desde tu lanzador de aplicaciones, o ejecuta `claude-desktop` desde una terminal, e inicia sesión con tu cuenta de Anthropic.72Lanza **Claude** desde tu lanzador de aplicaciones, o ejecuta `claude-desktop` desde una terminal, e inicia sesión con tu cuenta de Anthropic.

73 73 

74La aplicación de Linux inicia sesión de la misma manera que en macOS y Windows: con una suscripción a claude.ai, o a través del SSO de tu organización. Para la autenticación con clave de API, usa la [CLI](https://code.claude.com/docs/es/quickstart.md). Para usar Desktop con Amazon Bedrock, Agent Platform de Google Cloud, Microsoft Foundry o un gateway de LLM en su lugar, consulta [Claude Desktop en 3P](https://claude.com/docs/third-party/claude-desktop/overview). Para servidores proxy y autoridades de certificación personalizadas en esos despliegues, consulta [configuración de red](https://code.claude.com/docs/es/network-config.md).74La aplicación de Linux inicia sesión de la misma manera que en macOS y Windows: con una suscripción a claude.ai, o a través del SSO de tu organización. Para usar Desktop con una clave de API de Claude, Amazon Bedrock, Agent Platform de Google Cloud, Microsoft Foundry o un gateway de LLM en su lugar, consulta [Claude Desktop en 3P](https://claude.com/docs/third-party/claude-desktop/overview). Para servidores proxy y autoridades de certificación personalizadas en esos despliegues, consulta [configuración de red](https://code.claude.com/docs/es/network-config.md).

75 75 

76### Instalar desde un archivo descargado76### Instalar desde un archivo descargado

77 77 

Details

83 83 

84**8. Elige el modo de permisos y el modelo**84**8. Elige el modo de permisos y el modelo**

85 85 

86En la barra de herramientas del cuadro de instrucciones, selecciona un [modo de permisos](#permissions-for-scheduled-tasks) y un modelo. Si no los cambias, las ejecuciones usan tu configuración de Claude Code y el modelo predeterminado.86En la barra de herramientas del cuadro de instrucciones, selecciona un [modo de permisos](#permissions-for-scheduled-tasks) y un modelo.

87 

88* **Modo de permisos**: si no lo cambias, las ejecuciones usan tu configuración de Claude Code.

89* **Modelo**: si el menú de modelos muestra **Default · Set by admin** y no eliges otro modelo, las ejecuciones usan el modelo que tu organización estableció en la [configuración administrada](https://code.claude.com/docs/es/managed-settings.md). Una [ejecución de recuperación](#missed-runs) que se inicia al abrir la aplicación puede usar en su lugar el [modelo predeterminado en tiempo de ejecución para tu cuenta](https://code.claude.com/docs/es/model-config.md#default-model-setting).

87 90 

88**9. Crea la tarea**91**9. Crea la tarea**

89 92 

90Haz clic en **Create**. Si aún no has confiado en la carpeta, Desktop te pide que confíes en ella en este momento. Se abre la página de detalles de la tarea.93Haz clic en **Create**. Si aún no has confiado en la carpeta, Desktop te pide que confíes en ella en este momento. Se abre la página de detalles de la tarea.

91 94 

95Para ver qué modelo representa **Default · Set by admin**, haz clic en **Run now** en la página de detalles para ejecutar la tarea de inmediato. Luego [abre la sesión de la ejecución](#find-a-runs-session), donde la fila debajo del cuadro del prompt muestra el nombre del modelo.

96 

92En la página de detalles, haz clic en el ícono de lápiz para abrir el [formulario **Edit**](#manage-scheduled-tasks). Ahí puedes cambiar la **Description** que Desktop completó a partir de tus instrucciones, seleccionar **Worktree** o cambiar la programación a **Manual** o **Custom**.97En la página de detalles, haz clic en el ícono de lápiz para abrir el [formulario **Edit**](#manage-scheduled-tasks). Ahí puedes cambiar la **Description** que Desktop completó a partir de tus instrucciones, seleccionar **Worktree** o cambiar la programación a **Manual** o **Custom**.

93 98 

94También puedes crear una tarea describiendo lo que deseas en cualquier sesión. Por ejemplo, "configura una revisión de código diaria que se ejecute cada mañana a las 9am" crea una tarea recurrente. Una solicitud como "recuérdame mañana a las 3pm que verifique el deploy" crea una tarea única que se desactiva después de ejecutarse.99También puedes crear una tarea describiendo lo que deseas en cualquier sesión. Por ejemplo, "configura una revisión de código diaria que se ejecute cada mañana a las 9am" crea una tarea recurrente. Una solicitud como "recuérdame mañana a las 3pm que verifique el deploy" crea una tarea única que se desactiva después de ejecutarse.


181 186 

182Para permitir que una tarea cambie su propia programación o prompt con la herramienta MCP `update_scheduled_task`, haz clic en **Run now** y aprueba la llamada cada vez.187Para permitir que una tarea cambie su propia programación o prompt con la herramienta MCP `update_scheduled_task`, haz clic en **Run now** y aprueba la llamada cada vez.

183 188 

184Para editar el prompt de una tarea en disco, abra `~/.claude/scheduled-tasks/<task-name>/SKILL.md` (o bajo [`CLAUDE_CONFIG_DIR`](https://code.claude.com/docs/es/env-vars) si está configurado). El archivo utiliza frontmatter YAML para `name` y `description`, con el prompt como cuerpo. Los cambios surten efecto en la próxima ejecución. La programación, carpeta, modelo y estado habilitado no están en este archivo: cámbielos a través del formulario Edit o pídale a Claude.189Para editar el prompt de una tarea en disco, abre `~/.claude/scheduled-tasks/<task-name>/SKILL.md` (o bajo [`CLAUDE_CONFIG_DIR`](https://code.claude.com/docs/es/env-vars) si está configurado). El archivo utiliza frontmatter YAML para `name` y `description`, con el prompt como cuerpo. Los cambios surten efecto en la próxima ejecución. La programación, la carpeta y el estado habilitado no están en este archivo: cámbialos a través del formulario Edit o pídeselo a Claude.

185 190 

186## Recursos relacionados191## Recursos relacionados

187 192 

env-vars.md +7 −3

Details

211| `CLAUDE_CODE_AUTO_CONNECT_IDE` | Sobrescribe la [conexión automática con el IDE](https://code.claude.com/docs/es/vs-code.md). De forma predeterminada, Claude Code se conecta automáticamente cuando se inicia dentro de la terminal integrada de un IDE compatible. Establécela en `false` para evitarlo. Establécela en `true` para forzar un intento de conexión cuando falla la detección automática, por ejemplo cuando tmux oculta la terminal principal. Tiene precedencia sobre el ajuste de configuración global [`autoConnectIde`](https://code.claude.com/docs/es/settings-reference#autoconnectide) |211| `CLAUDE_CODE_AUTO_CONNECT_IDE` | Sobrescribe la [conexión automática con el IDE](https://code.claude.com/docs/es/vs-code.md). De forma predeterminada, Claude Code se conecta automáticamente cuando se inicia dentro de la terminal integrada de un IDE compatible. Establécela en `false` para evitarlo. Establécela en `true` para forzar un intento de conexión cuando falla la detección automática, por ejemplo cuando tmux oculta la terminal principal. Tiene precedencia sobre el ajuste de configuración global [`autoConnectIde`](https://code.claude.com/docs/es/settings-reference#autoconnectide) |

212| `CLAUDE_CODE_AUTO_MODE_MODEL` | Establece el modelo para las solicitudes del clasificador que Claude Code envía en el [modo automático](https://code.claude.com/docs/es/permission-modes.md#eliminate-prompts-with-auto-mode). Usa un ID de modelo completo como `claude-sonnet-4-6`. Para los casos en que Claude Code la ignora, consulta [Elegir el modelo del clasificador](https://code.claude.com/docs/es/permission-modes.md#choose-the-classifier-model). Requiere Claude Code v2.1.302 o posterior |212| `CLAUDE_CODE_AUTO_MODE_MODEL` | Establece el modelo para las solicitudes del clasificador que Claude Code envía en el [modo automático](https://code.claude.com/docs/es/permission-modes.md#eliminate-prompts-with-auto-mode). Usa un ID de modelo completo como `claude-sonnet-4-6`. Para los casos en que Claude Code la ignora, consulta [Elegir el modelo del clasificador](https://code.claude.com/docs/es/permission-modes.md#choose-the-classifier-model). Requiere Claude Code v2.1.302 o posterior |

213| `CLAUDE_CODE_AUTO_MODE_SERVER` | Controla si Claude Code pide al servidor que [revise las acciones del modo automático](https://code.claude.com/docs/es/permission-modes.md#server-side-classifier-review). Establécela en `0` para usar en su lugar las propias solicitudes de clasificador de Claude Code. En una conexión directa a la API de Anthropic, requiere v2.1.281 o posterior. La sección enlazada indica qué sesiones consultan al servidor cuando la variable no está establecida, y desde qué versión. Requiere Claude Code v2.1.271 o posterior |213| `CLAUDE_CODE_AUTO_MODE_SERVER` | Controla si Claude Code pide al servidor que [revise las acciones del modo automático](https://code.claude.com/docs/es/permission-modes.md#server-side-classifier-review). Establécela en `0` para usar en su lugar las propias solicitudes de clasificador de Claude Code. En una conexión directa a la API de Anthropic, requiere v2.1.281 o posterior. La sección enlazada indica qué sesiones consultan al servidor cuando la variable no está establecida, y desde qué versión. Requiere Claude Code v2.1.271 o posterior |

214| `CLAUDE_CODE_AUTOMOUNT_ROOTS` | Carpetas raíz de automontaje que Claude Code debe omitir cuando busca, en las carpetas por encima de tu directorio de trabajo, archivos como `CLAUDE.md`, skills y `.mcp.json`. Establécela cuando esas búsquedas tengan que esperar a tu automontador. Separa varias rutas con `:` en Unix o `;` en Windows, e indica cada una como una ruta absoluta que no contenga ningún enlace simbólico. Requiere Claude Code v2.1.323 o posterior |

214| `CLAUDE_CODE_AWS_CHAIN_RESOLVE_TIMEOUT_MS` | Tiempo en milisegundos que Claude Code espera a que la cadena predeterminada de proveedores de credenciales de AWS produzca credenciales antes de que la solicitud falle con [`AWS default-chain credential resolve timed out`](https://code.claude.com/docs/es/errors#aws-default-chain-credential-resolve-timed-out) (predeterminado: `60000`). Auméntalo cuando un paso de tu cadena legítimamente necesite más tiempo, como un inicio de sesión SSO basado en navegador con MFA a través de un wrapper como `aws-vault`. Se aplica en Amazon Bedrock, [Claude Platform on AWS](https://code.claude.com/docs/es/claude-platform-on-aws.md) y el [endpoint de Mantle](https://code.claude.com/docs/es/amazon-bedrock.md#use-the-mantle-endpoint). Consulta [almacenamiento en caché de credenciales y tiempo de espera de resolución](https://code.claude.com/docs/es/amazon-bedrock.md#credential-caching-and-resolution-timeout). Requiere Claude Code v2.1.207 o posterior |215| `CLAUDE_CODE_AWS_CHAIN_RESOLVE_TIMEOUT_MS` | Tiempo en milisegundos que Claude Code espera a que la cadena predeterminada de proveedores de credenciales de AWS produzca credenciales antes de que la solicitud falle con [`AWS default-chain credential resolve timed out`](https://code.claude.com/docs/es/errors#aws-default-chain-credential-resolve-timed-out) (predeterminado: `60000`). Auméntalo cuando un paso de tu cadena legítimamente necesite más tiempo, como un inicio de sesión SSO basado en navegador con MFA a través de un wrapper como `aws-vault`. Se aplica en Amazon Bedrock, [Claude Platform on AWS](https://code.claude.com/docs/es/claude-platform-on-aws.md) y el [endpoint de Mantle](https://code.claude.com/docs/es/amazon-bedrock.md#use-the-mantle-endpoint). Consulta [almacenamiento en caché de credenciales y tiempo de espera de resolución](https://code.claude.com/docs/es/amazon-bedrock.md#credential-caching-and-resolution-timeout). Requiere Claude Code v2.1.207 o posterior |

215| `CLAUDE_CODE_BASH_EDIT_DIFF` | Establécela en `0` para desactivar el [diff de los archivos que cambiaron mientras se ejecutaba un comando de Bash](https://code.claude.com/docs/es/hooks.md#bash), o en `1` para registrarlo en todos los modos de permisos. Tiene precedencia sobre el ajuste [`bashEditDiffEnabled`](https://code.claude.com/docs/es/settings-reference#basheditdiffenabled). Requiere Claude Code v2.1.269 o posterior |216| `CLAUDE_CODE_BASH_EDIT_DIFF` | Establécela en `0` para desactivar el [diff de los archivos que cambiaron mientras se ejecutaba un comando de Bash](https://code.claude.com/docs/es/hooks.md#bash), o en `1` para registrarlo en todos los modos de permisos. Tiene precedencia sobre el ajuste [`bashEditDiffEnabled`](https://code.claude.com/docs/es/settings-reference#basheditdiffenabled). Requiere Claude Code v2.1.269 o posterior |

216| `CLAUDE_CODE_BG_TASKS_REPORT_RUNNING` | Establécela en `0` para que una sesión no interactiva informe un estado inactivo a su host al final de cada turno, incluso mientras aún se ejecuta trabajo en segundo plano. De forma predeterminada, la sesión sigue informando un estado de ejecución después del final del turno mientras el trabajo en segundo plano, como un agente en segundo plano o una ejecución de un [flujo de trabajo](https://code.claude.com/docs/es/workflows.md), sigue activo. Esto evita que un host que vigila el estado, como una lista de sesiones remotas, anuncie que Claude espera tu respuesta en medio del trabajo. Los comandos de shell en segundo plano, como un servidor de desarrollo, no mantienen el estado de ejecución. El estado de ejecución predeterminado y la exclusión con `0` requieren Claude Code v2.1.269 o posterior; en versiones anteriores, establece `1` para mantener el estado de ejecución |217| `CLAUDE_CODE_BG_TASKS_REPORT_RUNNING` | Establécela en `0` para que una sesión no interactiva informe un estado inactivo a su host al final de cada turno, incluso mientras aún se ejecuta trabajo en segundo plano. De forma predeterminada, la sesión sigue informando un estado de ejecución después del final del turno mientras el trabajo en segundo plano, como un agente en segundo plano o una ejecución de un [flujo de trabajo](https://code.claude.com/docs/es/workflows.md), sigue activo. Esto evita que un host que vigila el estado, como una lista de sesiones remotas, anuncie que Claude espera tu respuesta en medio del trabajo. Los comandos de shell en segundo plano, como un servidor de desarrollo, no mantienen el estado de ejecución. El estado de ejecución predeterminado y la exclusión con `0` requieren Claude Code v2.1.269 o posterior; en versiones anteriores, establece `1` para mantener el estado de ejecución |


298| `CLAUDE_CODE_EVEN_MORE_DANGEROUSLY_SKIP_PERMISSIONS` | Establécela en `1` para [ejecutar comandos `rm` peligrosos sin solicitud](https://code.claude.com/docs/es/permission-modes#turn-off-the-critical-path-removal-prompt-in-bypasspermissions-mode) en el modo `bypassPermissions`, lo que elimina una solicitud de seguridad para los borrados destructivos. La sección enlazada indica dónde no tiene efecto. [Establécela en el entorno que inicia Claude Code](#set-variables-in-your-shell), porque Claude Code [la ignora en un bloque `env` de la configuración](https://code.claude.com/docs/es/settings-reference#variables-claude-code-ignores-in-env). Requiere Claude Code v2.1.311 o posterior |299| `CLAUDE_CODE_EVEN_MORE_DANGEROUSLY_SKIP_PERMISSIONS` | Establécela en `1` para [ejecutar comandos `rm` peligrosos sin solicitud](https://code.claude.com/docs/es/permission-modes#turn-off-the-critical-path-removal-prompt-in-bypasspermissions-mode) en el modo `bypassPermissions`, lo que elimina una solicitud de seguridad para los borrados destructivos. La sección enlazada indica dónde no tiene efecto. [Establécela en el entorno que inicia Claude Code](#set-variables-in-your-shell), porque Claude Code [la ignora en un bloque `env` de la configuración](https://code.claude.com/docs/es/settings-reference#variables-claude-code-ignores-in-env). Requiere Claude Code v2.1.311 o posterior |

299| `CLAUDE_CODE_EXIT_AFTER_STOP_DELAY` | Tiempo en milisegundos que se espera después de que el bucle de consultas queda inactivo antes de salir automáticamente. Útil para flujos de trabajo automatizados y scripts que usan el modo SDK |300| `CLAUDE_CODE_EXIT_AFTER_STOP_DELAY` | Tiempo en milisegundos que se espera después de que el bucle de consultas queda inactivo antes de salir automáticamente. Útil para flujos de trabajo automatizados y scripts que usan el modo SDK |

300| `CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS` | Establécela en `1` para habilitar los [equipos de agentes](https://code.claude.com/docs/es/agent-teams.md). Los equipos de agentes son experimentales y están deshabilitados de forma predeterminada |301| `CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS` | Establécela en `1` para habilitar los [equipos de agentes](https://code.claude.com/docs/es/agent-teams.md). Los equipos de agentes son experimentales y están deshabilitados de forma predeterminada |

302| `CLAUDE_CODE_EXPERIMENTAL_CODE_MODE` | Establécela en `1` para iniciar las sesiones en [Code Mode](https://code.claude.com/docs/es/code-mode.md), una función experimental. Establécela en `0` para mantenerlo desactivado, o en la configuración administrada para [bloquearlo para una organización](https://code.claude.com/docs/es/code-mode.md#block-code-mode-for-your-organization). La variable [no cuenta en todos los archivos de configuración](https://code.claude.com/docs/es/settings-reference.md#variables-claude-code-ignores-in-env). Consulta los [requisitos de versión y de cuenta](https://code.claude.com/docs/es/code-mode.md#requirements) |

301| `CLAUDE_CODE_EXTRA_BODY` | Objeto JSON que se combina en el nivel superior de los cuerpos de las solicitudes al modelo, excepto en algunas solicitudes fuera de la conversación, como las comprobaciones de `/model`. Útil para pasar parámetros específicos del proveedor que Claude Code no expone directamente. Un valor exportado en tu shell también se aplica a las [sesiones en segundo plano](https://code.claude.com/docs/es/agent-view.md) que inicias con `claude agents` o `--bg`. Antes de v2.1.206, las sesiones en segundo plano ignoraban un valor exportado en el shell y usaban la copia que hubiera heredado el proceso supervisor en segundo plano |303| `CLAUDE_CODE_EXTRA_BODY` | Objeto JSON que se combina en el nivel superior de los cuerpos de las solicitudes al modelo, excepto en algunas solicitudes fuera de la conversación, como las comprobaciones de `/model`. Útil para pasar parámetros específicos del proveedor que Claude Code no expone directamente. Un valor exportado en tu shell también se aplica a las [sesiones en segundo plano](https://code.claude.com/docs/es/agent-view.md) que inicias con `claude agents` o `--bg`. Antes de v2.1.206, las sesiones en segundo plano ignoraban un valor exportado en el shell y usaban la copia que hubiera heredado el proceso supervisor en segundo plano |

302| `CLAUDE_CODE_FILE_READ_MAX_OUTPUT_TOKENS` | Sobrescribe el límite de tokens predeterminado para la [lectura de archivos](https://code.claude.com/docs/es/tools-reference.md#large-files), que es de 25,000 tokens. Útil cuando necesitas leer archivos más grandes completos. Una lectura que Claude hace con el parámetro `allow_large` puede superar este límite cuando la ventana de contexto tiene espacio |304| `CLAUDE_CODE_FILE_READ_MAX_OUTPUT_TOKENS` | Sobrescribe el límite de tokens predeterminado para la [lectura de archivos](https://code.claude.com/docs/es/tools-reference.md#large-files), que es de 25,000 tokens. Útil cuando necesitas leer archivos más grandes completos. Una lectura que Claude hace con el parámetro `allow_large` puede superar este límite cuando la ventana de contexto tiene espacio |

303| `CLAUDE_CODE_FORCE_SESSION_PERSISTENCE` | Establécela en `1` para forzar la persistencia de la transcripción, el historial de prompts y el registro en `claude agents` incluso cuando este `claude` se haya iniciado desde dentro de otra sesión de Claude Code. Úsala cuando un valor heredado de `CLAUDE_CODE_CHILD_SESSION`, por ejemplo de una sesión de `screen` o de un lanzador en segundo plano iniciado por primera vez por la herramienta Bash de Claude Code, haga que una sesión genuina de nivel superior se clasifique erróneamente como anidada. A partir de la v2.1.178, Claude Code detecta automáticamente el caso de tmux e ignora el marcador heredado, por lo que tmux ya no necesita esta variable. También se respeta en la v2.1.169 y anteriores; no tiene efecto en la v2.1.170 ni en la v2.1.171, donde se eliminó la detección de sesiones anidadas que sobrescribe |305| `CLAUDE_CODE_FORCE_SESSION_PERSISTENCE` | Establécela en `1` para forzar la persistencia de la transcripción, el historial de prompts y el registro en `claude agents` incluso cuando este `claude` se haya iniciado desde dentro de otra sesión de Claude Code. Úsala cuando un valor heredado de `CLAUDE_CODE_CHILD_SESSION`, por ejemplo de una sesión de `screen` o de un lanzador en segundo plano iniciado por primera vez por la herramienta Bash de Claude Code, haga que una sesión genuina de nivel superior se clasifique erróneamente como anidada. A partir de la v2.1.178, Claude Code detecta automáticamente el caso de tmux e ignora el marcador heredado, por lo que tmux ya no necesita esta variable. También se respeta en la v2.1.169 y anteriores; no tiene efecto en la v2.1.170 ni en la v2.1.171, donde se eliminó la detección de sesiones anidadas que sobrescribe |


348| `CLAUDE_CODE_OTEL_FLUSH_TIMEOUT_MS` | Tiempo de espera en milisegundos para vaciar los spans de OpenTelemetry pendientes (predeterminado: 5000). Consulta [Monitoreo](https://code.claude.com/docs/es/monitoring-usage.md) |350| `CLAUDE_CODE_OTEL_FLUSH_TIMEOUT_MS` | Tiempo de espera en milisegundos para vaciar los spans de OpenTelemetry pendientes (predeterminado: 5000). Consulta [Monitoreo](https://code.claude.com/docs/es/monitoring-usage.md) |

349| `CLAUDE_CODE_OTEL_HEADERS_HELPER_DEBOUNCE_MS` | Intervalo para actualizar los encabezados dinámicos de OpenTelemetry en milisegundos (predeterminado: 1740000 / 29 minutos). Consulta [Encabezados dinámicos](https://code.claude.com/docs/es/monitoring-usage.md#dynamic-headers) |351| `CLAUDE_CODE_OTEL_HEADERS_HELPER_DEBOUNCE_MS` | Intervalo para actualizar los encabezados dinámicos de OpenTelemetry en milisegundos (predeterminado: 1740000 / 29 minutos). Consulta [Encabezados dinámicos](https://code.claude.com/docs/es/monitoring-usage.md#dynamic-headers) |

350| `CLAUDE_CODE_OTEL_SHUTDOWN_TIMEOUT_MS` | Tiempo de espera en milisegundos para que el exportador de OpenTelemetry termine al apagarse (predeterminado: 2000). Auméntalo si se pierden métricas al salir. Consulta [Monitoreo](https://code.claude.com/docs/es/monitoring-usage.md) |352| `CLAUDE_CODE_OTEL_SHUTDOWN_TIMEOUT_MS` | Tiempo de espera en milisegundos para que el exportador de OpenTelemetry termine al apagarse (predeterminado: 2000). Auméntalo si se pierden métricas al salir. Consulta [Monitoreo](https://code.claude.com/docs/es/monitoring-usage.md) |

351| `CLAUDE_CODE_OVERLOADED_RETRY_BASE_DELAY_MS` | Retraso inicial en milisegundos, en lugar del predeterminado de 500, del backoff exponencial entre los [reintentos automáticos](https://code.claude.com/docs/es/errors.md#tune-retry-behavior) de una solicitud que la API rechaza con un error `529` de sobrecarga. Auméntalo para repartir los reintentos en un intervalo más largo cuando la API está al límite de su capacidad. Indica milisegundos enteros de 500 a 32000 con dígitos simples; Claude Code trata cualquier otro valor como no establecido. No tiene efecto cuando `CLAUDE_CODE_RETRY_WATCHDOG` está establecida en `1`, ni cuando la solicitud rechazada se envió en [modo rápido](https://code.claude.com/docs/es/fast-mode.md#handle-rate-limits). Requiere Claude Code v2.1.292 o posterior |353| `CLAUDE_CODE_OVERLOADED_RETRY_BASE_DELAY_MS` | Retraso inicial en milisegundos del backoff entre reintentos de una solicitud que la API rechaza con un error `529` de sobrecarga (predeterminado: 500). Auméntalo para repartir los reintentos en un intervalo más largo cuando la API está al límite de su capacidad. Indica milisegundos enteros de 500 a 32000 en dígitos simples; Claude Code trata cualquier otro valor como no establecido. Consulta [cuándo no tiene efecto](https://code.claude.com/docs/es/errors.md#tune-retry-behavior). Requiere Claude Code v2.1.292 o posterior |

352| `CLAUDE_CODE_OVERLOADED_RETRY_MAX_DELAY_MS` | Techo en milisegundos, en lugar del valor predeterminado de 32000, del backoff exponencial entre los [reintentos automáticos](https://code.claude.com/docs/es/errors.md#tune-retry-behavior) de una solicitud que la API rechaza con un error `529` de sobrecarga. Auméntalo para que los reintentos posteriores se sigan espaciando cuando la API está al límite de su capacidad. Indica milisegundos enteros de 32000 a 64000 en dígitos simples; Claude Code trata cualquier otro valor como no establecido. No tiene efecto cuando `CLAUDE_CODE_RETRY_WATCHDOG` está establecida en `1`, ni cuando la solicitud rechazada se envió en [modo rápido](https://code.claude.com/docs/es/fast-mode.md#handle-rate-limits). Requiere Claude Code v2.1.296 o posterior |354| `CLAUDE_CODE_OVERLOADED_RETRY_MAX_DELAY_MS` | Tope en milisegundos del backoff entre reintentos de una solicitud que la API rechaza con un error `529` de sobrecarga (predeterminado: 32000). Auméntalo para que los reintentos posteriores sigan espaciándose. Indica milisegundos enteros de 32000 a 300000 en dígitos simples; Claude Code trata cualquier otro valor como no establecido. Los valores superiores a 64000 requieren v2.1.323 o posterior. Consulta [cuándo no tiene efecto](https://code.claude.com/docs/es/errors.md#tune-retry-behavior). Requiere Claude Code v2.1.296 o posterior |

353| `CLAUDE_CODE_PACKAGE_MANAGER_AUTO_UPDATE` | Establécela en `1` para permitir que Claude Code ejecute en segundo plano el comando de actualización de tu gestor de paquetes cuando haya una nueva versión disponible. Se aplica a las instalaciones con Homebrew y WinGet. Los demás gestores de paquetes siguen mostrando el comando de actualización sin ejecutarlo. Consulta [Actualizaciones automáticas](https://code.claude.com/docs/es/setup.md#auto-updates) |355| `CLAUDE_CODE_PACKAGE_MANAGER_AUTO_UPDATE` | Establécela en `1` para permitir que Claude Code ejecute en segundo plano el comando de actualización de tu gestor de paquetes cuando haya una nueva versión disponible. Se aplica a las instalaciones con Homebrew y WinGet. Los demás gestores de paquetes siguen mostrando el comando de actualización sin ejecutarlo. Consulta [Actualizaciones automáticas](https://code.claude.com/docs/es/setup.md#auto-updates) |

354| `CLAUDE_CODE_PERFORCE_MODE` | Establécela en `1` para habilitar la protección contra escritura compatible con Perforce. Cuando se establece, Edit, Write y NotebookEdit fallan con una indicación de `p4 edit <file>` si el archivo de destino no tiene el bit de escritura del propietario, que Perforce borra en los archivos sincronizados hasta que `p4 edit` los abre. Esto impide que Claude Code eluda el seguimiento de cambios de Perforce |356| `CLAUDE_CODE_PERFORCE_MODE` | Establécela en `1` para habilitar la protección contra escritura compatible con Perforce. Cuando se establece, Edit, Write y NotebookEdit fallan con una indicación de `p4 edit <file>` si el archivo de destino no tiene el bit de escritura del propietario, que Perforce borra en los archivos sincronizados hasta que `p4 edit` los abre. Esto impide que Claude Code eluda el seguimiento de cambios de Perforce |

355| `CLAUDE_CODE_PLUGIN_CACHE_DIR` | Sobrescribe el directorio raíz de los plugins. A pesar del nombre, establece el directorio padre, no la caché en sí: los marketplaces y la caché de plugins se encuentran en subdirectorios de esta ruta. El valor predeterminado es `~/.claude/plugins` |357| `CLAUDE_CODE_PLUGIN_CACHE_DIR` | Sobrescribe el directorio raíz de los plugins. A pesar del nombre, establece el directorio padre, no la caché en sí: los marketplaces y la caché de plugins se encuentran en subdirectorios de esta ruta. El valor predeterminado es `~/.claude/plugins` |


370| `CLAUDE_CODE_REMOTE` | Se establece automáticamente en `true` cuando Claude Code se ejecuta como una [sesión en la nube](https://code.claude.com/docs/es/claude-code-on-the-web.md). Léela desde un hook o un script de configuración para detectar si estás en una sesión en la nube |372| `CLAUDE_CODE_REMOTE` | Se establece automáticamente en `true` cuando Claude Code se ejecuta como una [sesión en la nube](https://code.claude.com/docs/es/claude-code-on-the-web.md). Léela desde un hook o un script de configuración para detectar si estás en una sesión en la nube |

371| `CLAUDE_CODE_REMOTE_SESSION_ID` | Se establece automáticamente en las [sesiones en la nube](https://code.claude.com/docs/es/claude-code-on-the-web.md) con el ID de la sesión actual. Léela para construir un enlace de vuelta a la transcripción de la sesión. Consulta [Enlazar la salida de vuelta a la sesión](https://code.claude.com/docs/es/cloud-environments.md#link-output-back-to-the-session) |373| `CLAUDE_CODE_REMOTE_SESSION_ID` | Se establece automáticamente en las [sesiones en la nube](https://code.claude.com/docs/es/claude-code-on-the-web.md) con el ID de la sesión actual. Léela para construir un enlace de vuelta a la transcripción de la sesión. Consulta [Enlazar la salida de vuelta a la sesión](https://code.claude.com/docs/es/cloud-environments.md#link-output-back-to-the-session) |

372| `CLAUDE_CODE_RESTRICTED` | Establécela en `1` para iniciar la sesión en modo restringido, lo mismo que pasar [`--restricted`](https://code.claude.com/docs/es/cli-reference#cli-flags). Claude Code ignora esta variable en el bloque `env` de un archivo de configuración. Requiere Claude Code v2.1.248 o posterior |374| `CLAUDE_CODE_RESTRICTED` | Establécela en `1` para iniciar la sesión en modo restringido, lo mismo que pasar [`--restricted`](https://code.claude.com/docs/es/cli-reference#cli-flags). Claude Code ignora esta variable en el bloque `env` de un archivo de configuración. Requiere Claude Code v2.1.248 o posterior |

375| `CLAUDE_CODE_RESUME_HINT_COMMAND` | En un script contenedor que inicia Claude Code, establécela en el nombre que escribes para ejecutar el contenedor, como `mytool`. Así, una sesión local imprime `mytool --resume <session-id>` al salir en lugar de `claude --resume <session-id>`. Claude Code ignora un nombre que no coincide con `^\w[\w-]*$`. También ignora la variable en el bloque `env` de un archivo de configuración. Requiere Claude Code v2.1.323 o posterior |

373| `CLAUDE_CODE_RESUME_INTERRUPTED_TURN` | Establécela en `1` para reanudar automáticamente si la sesión anterior terminó a mitad de un turno. Se usa en el modo SDK para que el modelo continúe sin que el SDK tenga que volver a enviar el prompt. Para desactivarla, elimina la variable o establécela en `0`. Para el panel de chat de VS Code, consulta [Continuar conversaciones después de recargar](https://code.claude.com/docs/es/vs-code.md#continue-conversations-after-a-reload) |376| `CLAUDE_CODE_RESUME_INTERRUPTED_TURN` | Establécela en `1` para reanudar automáticamente si la sesión anterior terminó a mitad de un turno. Se usa en el modo SDK para que el modelo continúe sin que el SDK tenga que volver a enviar el prompt. Para desactivarla, elimina la variable o establécela en `0`. Para el panel de chat de VS Code, consulta [Continuar conversaciones después de recargar](https://code.claude.com/docs/es/vs-code.md#continue-conversations-after-a-reload) |

374| `CLAUDE_CODE_RESUME_INTERRUPTED_TURN_MAX_AGE_MS` | Antigüedad máxima en milisegundos del último mensaje de la transcripción para que una sesión que terminó a mitad de un turno continúe automáticamente al reanudarse. Cuando el último mensaje es más antiguo que este límite, Claude Code omite la reanudación automática de `CLAUDE_CODE_RESUME_INTERRUPTED_TURN` y su mensaje de continuación `CLAUDE_CODE_RESUME_PROMPT`, y la sesión se inicia inactiva para que continúes de forma explícita. Sin establecer o con `0` no hay límite, salvo que algunos turnos solo se reanudan dentro de las seis horas posteriores a su último mensaje, como uno que terminó con un error de la API. Un valor positivo limita todos los turnos, incluidos esos; un valor negativo o no numérico aplica un límite de una hora. Los scripts que inician agentes de larga duración pueden establecerla para que un reinicio sobre una transcripción antigua no vuelva a ejecutar un prompt obsoleto. Claude Code establece por sí mismo un límite de una hora cuando reinicia una sesión de la [vista de agentes](https://code.claude.com/docs/es/agent-view.md) que falló y que heredó su conversación de una sesión interactiva. Requiere Claude Code v2.1.211 o posterior |377| `CLAUDE_CODE_RESUME_INTERRUPTED_TURN_MAX_AGE_MS` | Antigüedad máxima en milisegundos del último mensaje de la transcripción para que una sesión que terminó a mitad de un turno continúe automáticamente al reanudarse. Cuando el último mensaje es más antiguo que este límite, Claude Code omite la reanudación automática de `CLAUDE_CODE_RESUME_INTERRUPTED_TURN` y su mensaje de continuación `CLAUDE_CODE_RESUME_PROMPT`, y la sesión se inicia inactiva para que continúes de forma explícita. Sin establecer o con `0` no hay límite, salvo que algunos turnos solo se reanudan dentro de las seis horas posteriores a su último mensaje, como uno que terminó con un error de la API. Un valor positivo limita todos los turnos, incluidos esos; un valor negativo o no numérico aplica un límite de una hora. Los scripts que inician agentes de larga duración pueden establecerla para que un reinicio sobre una transcripción antigua no vuelva a ejecutar un prompt obsoleto. Claude Code establece por sí mismo un límite de una hora cuando reinicia una sesión de la [vista de agentes](https://code.claude.com/docs/es/agent-view.md) que falló y que heredó su conversación de una sesión interactiva. Requiere Claude Code v2.1.211 o posterior |

375| `CLAUDE_CODE_RESUME_PROMPT` | Sobrescribe el mensaje de continuación que Claude Code envía a Claude cuando `CLAUDE_CODE_RESUME_INTERRUPTED_TURN` continúa un turno interrumpido en lugar de volver a enviar su prompt, o cuando reanudas una [llamada a herramienta diferida](https://code.claude.com/docs/es/hooks.md#defer-a-tool-call-for-later) con `-p`. El valor predeterminado es `Continue from where you left off.`. Una cadena vacía usa el valor predeterminado |378| `CLAUDE_CODE_RESUME_PROMPT` | Sobrescribe el mensaje de continuación que Claude Code envía a Claude cuando `CLAUDE_CODE_RESUME_INTERRUPTED_TURN` continúa un turno interrumpido en lugar de volver a enviar su prompt, o cuando reanudas una [llamada a herramienta diferida](https://code.claude.com/docs/es/hooks.md#defer-a-tool-call-for-later) con `-p`. El valor predeterminado es `Continue from where you left off.`. Una cadena vacía usa el valor predeterminado |


405| `CLAUDE_CODE_SUBPROCESS_ENV_SCRUB` | Establécela en `1` para eliminar las credenciales de los entornos de los subprocesos que inicia Claude Code, como los comandos de Bash, los hooks y los servidores MCP stdio. La limpieza reconoce una credencial por el nombre de su variable o por su valor, y deja en su lugar los tokens de GitHub y la configuración del proxy. Consulta [Qué elimina la limpieza del entorno de los subprocesos](#what-the-subprocess-environment-scrub-removes). `claude-code-action` la establece automáticamente cuando se configura `allowed_non_write_users` |408| `CLAUDE_CODE_SUBPROCESS_ENV_SCRUB` | Establécela en `1` para eliminar las credenciales de los entornos de los subprocesos que inicia Claude Code, como los comandos de Bash, los hooks y los servidores MCP stdio. La limpieza reconoce una credencial por el nombre de su variable o por su valor, y deja en su lugar los tokens de GitHub y la configuración del proxy. Consulta [Qué elimina la limpieza del entorno de los subprocesos](#what-the-subprocess-environment-scrub-removes). `claude-code-action` la establece automáticamente cuando se configura `allowed_non_write_users` |

406| `CLAUDE_CODE_SYNC_PLUGIN_INSTALL` | Establécela en `1` en modo no interactivo (el flag `-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 es posible que no estén disponibles en el primer turno. Combínala con `CLAUDE_CODE_SYNC_PLUGIN_INSTALL_TIMEOUT_MS` para limitar la espera |409| `CLAUDE_CODE_SYNC_PLUGIN_INSTALL` | Establécela en `1` en modo no interactivo (el flag `-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 es posible que no estén disponibles en el primer turno. Combínala con `CLAUDE_CODE_SYNC_PLUGIN_INSTALL_TIMEOUT_MS` para limitar la espera |

407| `CLAUDE_CODE_SYNC_PLUGIN_INSTALL_TIMEOUT_MS` | Tiempo de espera en milisegundos para la instalación síncrona de plugins. Cuando se supera, Claude Code continúa sin plugins y registra un error. Sin valor predeterminado: sin esta variable, la instalación síncrona espera hasta completarse |410| `CLAUDE_CODE_SYNC_PLUGIN_INSTALL_TIMEOUT_MS` | Tiempo de espera en milisegundos para la instalación síncrona de plugins. Cuando se supera, Claude Code continúa sin plugins y registra un error. Sin valor predeterminado: sin esta variable, la instalación síncrona espera hasta completarse |

408| `CLAUDE_CODE_SYNC_SKILLS` | Establécela en `1` en modo no interactivo con el flag `-p` para que Claude Code descargue en esa ejecución los skills habilitados para tu cuenta de claude.ai y espere la lista de ellos, hasta `CLAUDE_CODE_SYNC_SKILLS_WAIT_TIMEOUT_MS`, antes de ejecutar la primera consulta. Requiere autenticación de claude.ai. Las sesiones de terminal en las que inicias sesión con tu cuenta de claude.ai [sincronizan estos skills](https://code.claude.com/docs/es/skills.md#where-synced-skills-load) sin esta variable, así que establécela solo cuando una ejecución con `-p` necesite tus skills actuales en su primera consulta |411| `CLAUDE_CODE_SYNC_SKILLS` | Establécela en `1` para que Claude Code descargue los skills habilitados para tu cuenta de claude.ai. En modo no interactivo con el flag `-p`, Claude Code también espera hasta `CLAUDE_CODE_SYNC_SKILLS_WAIT_TIMEOUT_MS` la lista de skills antes de ejecutar la primera consulta. Requiere autenticación con claude.ai. Las sesiones de terminal en las que inicias sesión con tu cuenta de claude.ai [sincronizan estos skills](https://code.claude.com/docs/es/skills.md#where-synced-skills-load) sin esta variable. En una sesión interactiva, la variable requiere v2.1.323 o posterior |

409| `CLAUDE_CODE_SYNC_SKILLS_INSTALL_TIMEOUT_MS` | Tiempo de espera en milisegundos para la resincronización de skills que se ejecuta a mitad de la sesión cuando una aplicación creada con el [Agent SDK](https://code.claude.com/docs/es/agent-sdk/typescript.md#query-object) recarga los skills (predeterminado: 30000). Cuando se supera, la recarga continúa con los skills que hayan llegado, y las descargas restantes terminan en segundo plano |412| `CLAUDE_CODE_SYNC_SKILLS_INSTALL_TIMEOUT_MS` | Tiempo de espera en milisegundos para la resincronización de skills que se ejecuta a mitad de la sesión cuando una aplicación creada con el [Agent SDK](https://code.claude.com/docs/es/agent-sdk/typescript.md#query-object) recarga los skills (predeterminado: 30000). Cuando se supera, la recarga continúa con los skills que hayan llegado, y las descargas restantes terminan en segundo plano |

410| `CLAUDE_CODE_SYNC_SKILLS_WAIT_TIMEOUT_MS` | Tiempo de espera en milisegundos durante el cual la primera consulta espera la lista inicial de skills cuando `CLAUDE_CODE_SYNC_SKILLS` está establecida (predeterminado: 5000). Cuando se supera, la primera consulta se ejecuta con los skills que hayan llegado. Las descargas terminan en segundo plano en cualquier caso, y Claude espera la descarga de un skill cuando invoca ese skill |413| `CLAUDE_CODE_SYNC_SKILLS_WAIT_TIMEOUT_MS` | Tiempo de espera en milisegundos durante el cual la primera consulta espera la lista inicial de skills cuando `CLAUDE_CODE_SYNC_SKILLS` está establecida (predeterminado: 5000). Cuando se supera, la primera consulta se ejecuta con los skills que hayan llegado. Las descargas terminan en segundo plano en cualquier caso, y Claude espera la descarga de un skill cuando invoca ese skill |

411| `CLAUDE_CODE_SYNTAX_HIGHLIGHT` | Establécela en `false` para deshabilitar el resaltado de sintaxis en la salida de diff. Útil cuando los colores interfieren con la configuración de tu terminal. Para deshabilitar también el resaltado en los bloques de código y en las vistas previas de archivos, usa el ajuste [`syntaxHighlightingDisabled`](https://code.claude.com/docs/es/settings-reference#syntaxhighlightingdisabled) |414| `CLAUDE_CODE_SYNTAX_HIGHLIGHT` | Establécela en `false` para deshabilitar el resaltado de sintaxis en la salida de diff. Útil cuando los colores interfieren con la configuración de tu terminal. Para deshabilitar también el resaltado en los bloques de código y en las vistas previas de archivos, usa el ajuste [`syntaxHighlightingDisabled`](https://code.claude.com/docs/es/settings-reference#syntaxhighlightingdisabled) |


585* Activar el [mod You should know](https://code.claude.com/docs/es/interactive-mode.md#you-should-know-suggestions)588* Activar el [mod You should know](https://code.claude.com/docs/es/interactive-mode.md#you-should-know-suggestions)

586* Usar [la herramienta advisor](https://code.claude.com/docs/es/advisor.md#requirements), excepto en Claude Platform on AWS con Claude Code v2.1.300 o posterior589* Usar [la herramienta advisor](https://code.claude.com/docs/es/advisor.md#requirements), excepto en Claude Platform on AWS con Claude Code v2.1.300 o posterior

587* Usar [tareas de MCP](https://code.claude.com/docs/es/mcp.md#mcp-tasks-that-run-on-the-server)590* Usar [tareas de MCP](https://code.claude.com/docs/es/mcp.md#mcp-tasks-that-run-on-the-server)

591* Activar [Code Mode](https://code.claude.com/docs/es/code-mode.md#requirements)

588* Leer o responder [comentarios en un artefacto](https://code.claude.com/docs/es/artifacts.md#collect-comments-on-an-artifact)592* Leer o responder [comentarios en un artefacto](https://code.claude.com/docs/es/artifacts.md#collect-comments-on-an-artifact)

589* Hacer que Claude lea [el artefacto público de otra organización](https://code.claude.com/docs/es/artifacts.md#read-an-artifact-shared-with-you)593* Hacer que Claude lea [el artefacto público de otra organización](https://code.claude.com/docs/es/artifacts.md#read-an-artifact-shared-with-you)

590* Obtener la [herramienta PowerShell](https://code.claude.com/docs/es/tools-reference.md#powershell-tool) de forma predeterminada para cuentas de claude.ai y Console en Windows con Git Bash instalado; Claude Code enruta los comandos de shell a través de Git Bash a menos que establezcas `CLAUDE_CODE_USE_POWERSHELL_TOOL=1`. En Windows sin Git Bash, la herramienta permanece activada594* Obtener la [herramienta PowerShell](https://code.claude.com/docs/es/tools-reference.md#powershell-tool) de forma predeterminada para cuentas de claude.ai y Console en Windows con Git Bash instalado; Claude Code enruta los comandos de shell a través de Git Bash a menos que establezcas `CLAUDE_CODE_USE_POWERSHELL_TOOL=1`. En Windows sin Git Bash, la herramienta permanece activada

errors.md +201 −116

Details

122| `A request to MCP server "<name>" was sent without your stored credentials` | [Autenticación](#couldnt-read-the-stored-credentials-for-mcp-server) |122| `A request to MCP server "<name>" was sent without your stored credentials` | [Autenticación](#couldnt-read-the-stored-credentials-for-mcp-server) |

123| `This server's URL is missing or not a valid URL, so sign-in can't start` | [Autenticación](#mcp-server-url-is-missing-or-not-a-valid-url) |123| `This server's URL is missing or not a valid URL, so sign-in can't start` | [Autenticación](#mcp-server-url-is-missing-or-not-a-valid-url) |

124| `Issuer mismatch in authorization response (RFC 9207)` | [Autenticación](#issuer-mismatch-in-authorization-response) |124| `Issuer mismatch in authorization response (RFC 9207)` | [Autenticación](#issuer-mismatch-in-authorization-response) |

125| `Stopped an OAuth request` | [Autenticación](#stopped-an-oauth-request) |

125| `Refusing to send credentials to non-https token endpoint` / `<short-name> from the MCP SDK for <server-url>` | [Autenticación](#refusing-to-send-credentials-to-non-https-token-endpoint) |126| `Refusing to send credentials to non-https token endpoint` / `<short-name> from the MCP SDK for <server-url>` | [Autenticación](#refusing-to-send-credentials-to-non-https-token-endpoint) |

126| `Cloud gateway session expired — run /login to reconnect.` | [Autenticación](#cloud-gateway-session-expired) |127| `Cloud gateway session expired — run /login to reconnect.` | [Autenticación](#cloud-gateway-session-expired) |

127| `Cloud gateway <url> no longer accepts this session` | [Autenticación](#cloud-gateway-session-expired) |128| `Cloud gateway <url> no longer accepts this session` | [Autenticación](#cloud-gateway-session-expired) |


153| `403` con `GitHub GraphQL is not available from Claude Code sessions` en una sesión en la nube | [Proxy de GitHub](https://code.claude.com/docs/es/cloud-environments.md#github-proxy) |154| `403` con `GitHub GraphQL is not available from Claude Code sessions` en una sesión en la nube | [Proxy de GitHub](https://code.claude.com/docs/es/cloud-environments.md#github-proxy) |

154| `The cloud environments service returned an empty response` / `The cloud environments service returned a response in an unexpected format` | [Red](#the-cloud-environments-service-returned-an-empty-or-unexpected-response) |155| `The cloud environments service returned an empty response` / `The cloud environments service returned a response in an unexpected format` | [Red](#the-cloud-environments-service-returned-an-empty-or-unexpected-response) |

155| `Failed to fetch session from Sessions API: Failed to fetch session logs` | [Red](#failed-to-fetch-session-from-sessions-api) |156| `Failed to fetch session from Sessions API: Failed to fetch session logs` | [Red](#failed-to-fetch-session-from-sessions-api) |

157| `Couldn't load the history of cloud session` | [Red](#couldnt-load-the-history-of-cloud-session) |

156| `Couldn't reconnect to your Remote Control session` | [Red](#couldnt-reconnect-to-your-remote-control-session) |158| `Couldn't reconnect to your Remote Control session` | [Red](#couldnt-reconnect-to-your-remote-control-session) |

157| `N sessions ended while this machine was offline — the environment was cleaned up on the server and can't be resumed.` | [Red](#sessions-ended-while-this-machine-was-offline) |159| `N sessions ended while this machine was offline — the environment was cleaned up on the server and can't be resumed.` | [Red](#sessions-ended-while-this-machine-was-offline) |

158| `Couldn't share the transcript.` | [Red](#couldnt-share-the-transcript) |160| `Couldn't share the transcript.` | [Red](#couldnt-share-the-transcript) |


180| `PDF too large` / `PDF is password protected` / `pdftoppm is not installed` | [Errores de solicitud](#pdf-errors) |182| `PDF too large` / `PDF is password protected` / `pdftoppm is not installed` | [Errores de solicitud](#pdf-errors) |

181| `Extra inputs are not permitted` | [Errores de solicitud](#extra-inputs-are-not-permitted) |183| `Extra inputs are not permitted` | [Errores de solicitud](#extra-inputs-are-not-permitted) |

182| `API Error: 400 ... tools.N.custom.input_schema: JSON schema is invalid` / `Property keys should match pattern` | [Errores de solicitud](#tool-input-schema-is-invalid) |184| `API Error: 400 ... tools.N.custom.input_schema: JSON schema is invalid` / `Property keys should match pattern` | [Errores de solicitud](#tool-input-schema-is-invalid) |

185| `N tools left out` junto a un servidor en `/mcp` / `Claude wasn't given N tools because the Anthropic API would reject their input schemas` | [Herramientas con esquemas de entrada no válidos](https://code.claude.com/docs/es/mcp.md#tools-with-invalid-input-schemas) |

183| `Tool "mcp__<server>__<tool>" is not sent to Claude: its name has <N> characters and the API accepts at most 128` | [Errores de solicitud](#mcp-tool-name-over-128-characters) |186| `Tool "mcp__<server>__<tool>" is not sent to Claude: its name has <N> characters and the API accepts at most 128` | [Errores de solicitud](#mcp-tool-name-over-128-characters) |

184| `tools.N.custom.name: String should have at most 128 characters` | [Errores de solicitud](#mcp-tool-name-over-128-characters) |187| `tools.N.custom.name: String should have at most 128 characters` | [Errores de solicitud](#mcp-tool-name-over-128-characters) |

185| `tool_use.name: String should have at most 200 characters` | [Errores de solicitud](#tool-use-name-over-200-characters) |188| `tool_use.name: String should have at most 200 characters` | [Errores de solicitud](#tool-use-name-over-200-characters) |


251| `Ultrareview did not start` | [Errores de línea de comandos](#ultrareview-did-not-start) |254| `Ultrareview did not start` | [Errores de línea de comandos](#ultrareview-did-not-start) |

252| `Remote Control did not start: "<question>" got no answer` | [Errores de línea de comandos](#remote-control-did-not-start-got-no-answer) |255| `Remote Control did not start: "<question>" got no answer` | [Errores de línea de comandos](#remote-control-did-not-start-got-no-answer) |

253| `` `<flag>` before `remote-control` is not carried over to the sessions Remote Control starts `` | [Errores de línea de comandos](#not-carried-over-to-the-sessions-remote-control-starts) |256| `` `<flag>` before `remote-control` is not carried over to the sessions Remote Control starts `` | [Errores de línea de comandos](#not-carried-over-to-the-sessions-remote-control-starts) |

257| `Remote Control did not start, because sessions would skip part or all of the --settings file` | [Errores de línea de comandos](#remote-control-did-not-start-because-of-the-settings-file) |

258| `The settings file <file> has changed since Remote Control started, so this session did not start` | [Errores de línea de comandos](#settings-file-changed-since-remote-control-started) |

254| `--sandbox is not supported by claude remote-control` / `--no-sandbox is not supported by claude remote-control` | [Errores de línea de comandos](#sandbox-is-not-supported-by-claude-remote-control) |259| `--sandbox is not supported by claude remote-control` / `--no-sandbox is not supported by claude remote-control` | [Errores de línea de comandos](#sandbox-is-not-supported-by-claude-remote-control) |

255| `` `claude import` is not yet available in this build `` | [Errores de línea de comandos](#claude-import-is-not-yet-available-in-this-build) |260| `` `claude import` is not yet available in this build `` | [Errores de línea de comandos](#claude-import-is-not-yet-available-in-this-build) |

256| `Could not read Claude Code config` | [Errores de línea de comandos](#could-not-read-claude-code-config) |261| `Could not read Claude Code config` | [Errores de línea de comandos](#could-not-read-claude-code-config) |


268| `No available ports for OAuth redirect` | [Errores de línea de comandos](#no-available-ports-for-oauth-redirect) |273| `No available ports for OAuth redirect` | [Errores de línea de comandos](#no-available-ports-for-oauth-redirect) |

269| `Shell command failed for pattern "..."`, de `/security-review` o de cualquier skill que inyecte contexto dinámico | [Errores de línea de comandos](#security-review-fails-without-origin-head) |274| `Shell command failed for pattern "..."`, de `/security-review` o de cualquier skill que inyecte contexto dinámico | [Errores de línea de comandos](#security-review-fails-without-origin-head) |

270| `Shell command permission check failed for pattern "..."`, de un skill que inyecta contexto dinámico | [Errores de línea de comandos](#security-review-fails-without-origin-head) |275| `Shell command permission check failed for pattern "..."`, de un skill que inyecta contexto dinámico | [Errores de línea de comandos](#security-review-fails-without-origin-head) |

276| ``Couldn't run `<command>` for <name>. A file named HEAD or .git in this folder or one above it may not be yours``, desde un skill que inyecta contexto dinámico | [Comprobaciones de permisos en comandos inyectados](https://code.claude.com/docs/es/skills.md#permission-checks-on-injected-commands) |

271| ``Skill <name> requires bash (`shell: bash` in frontmatter) but Git Bash was not found`` | [Errores de línea de comandos](#security-review-fails-without-origin-head) |277| ``Skill <name> requires bash (`shell: bash` in frontmatter) but Git Bash was not found`` | [Errores de línea de comandos](#security-review-fails-without-origin-head) |

272| `No shell command in <name> was run, because the <tool> tool does not accept one of them` | [Errores de línea de comandos](#no-shell-command-was-run) |278| `No shell command in <name> was run, because the <tool> tool does not accept one of them` | [Errores de línea de comandos](#no-shell-command-was-run) |

273| `Input must be provided either through stdin or as a prompt argument when using --print` | [Errores de línea de comandos](#input-must-be-provided-when-using-print) |279| `Input must be provided either through stdin or as a prompt argument when using --print` | [Errores de línea de comandos](#input-must-be-provided-when-using-print) |


425| `Workspace not trusted.` al iniciar o reiniciar una sesión en segundo plano | [Errores de sesión en segundo plano](#workspace-not-trusted-when-dispatching-a-background-session) |431| `Workspace not trusted.` al iniciar o reiniciar una sesión en segundo plano | [Errores de sesión en segundo plano](#workspace-not-trusted-when-dispatching-a-background-session) |

426| `Claude Code is being updated by npm on this machine (still not runnable after 2 min, ...)` | [Errores de sesión en segundo plano](#eacces-when-starting-a-background-session) |432| `Claude Code is being updated by npm on this machine (still not runnable after 2 min, ...)` | [Errores de sesión en segundo plano](#eacces-when-starting-a-background-session) |

427| `Claude Code process exited with code N` | [Errores de contenedor e IDE](#claude-code-process-exited-with-code-n) |433| `Claude Code process exited with code N` | [Errores de contenedor e IDE](#claude-code-process-exited-with-code-n) |

434| `Subprocess initialization did not complete within 60000ms` | [Errores de wrappers e IDE](#subprocess-initialization-did-not-complete-within-60000ms) |

435| `Claude Code did not finish starting` | [Errores de wrappers e IDE](#subprocess-initialization-did-not-complete-within-60000ms) |

428| `The connection to Claude Code ended before this message completed` | [Errores de contenedor e IDE](#the-connection-to-claude-code-ended-before-this-message-completed) |436| `The connection to Claude Code ended before this message completed` | [Errores de contenedor e IDE](#the-connection-to-claude-code-ended-before-this-message-completed) |

429| `Could not locate the Claude CLI on PATH` | [Errores de contenedor e IDE](#could-not-locate-the-claude-cli-on-path) |437| `Could not locate the Claude CLI on PATH` | [Errores de contenedor e IDE](#could-not-locate-the-claude-cli-on-path) |

430| `The Claude Code program for this computer, the <build> build, could not be found` | [Errores del wrapper y del IDE](#the-claude-code-program-for-this-computer-could-not-be-found) |438| `The Claude Code program for this computer, the <build> build, could not be found` | [Errores del wrapper y del IDE](#the-claude-code-program-for-this-computer-could-not-be-found) |


560| `CLAUDE_CODE_RETRY_WATCHDOG_MAX_USAGE_LIMIT_WAIT_MS` | sin límite | Con `CLAUDE_CODE_RETRY_WATCHDOG` establecido, el tiempo máximo en milisegundos que una solicitud espera a que se restablezca el [límite de uso](#youve-hit-your-session-limit) de tu plan, como el límite de sesión o el semanal. Cuando el restablecimiento está más lejos que este límite, la solicitud falla de inmediato, a menos que los créditos de uso tengan margen o la API no haya podido comprobarlos. En esos casos se reintenta, y falla si se supera el límite antes de que tenga éxito. Requiere Claude Code v2.1.301 o posterior. |568| `CLAUDE_CODE_RETRY_WATCHDOG_MAX_USAGE_LIMIT_WAIT_MS` | sin límite | Con `CLAUDE_CODE_RETRY_WATCHDOG` establecido, el tiempo máximo en milisegundos que una solicitud espera a que se restablezca el [límite de uso](#youve-hit-your-session-limit) de tu plan, como el límite de sesión o el semanal. Cuando el restablecimiento está más lejos que este límite, la solicitud falla de inmediato, a menos que los créditos de uso tengan margen o la API no haya podido comprobarlos. En esos casos se reintenta, y falla si se supera el límite antes de que tenga éxito. Requiere Claude Code v2.1.301 o posterior. |

561| [`CLAUDE_CODE_RETRY_WATCHDOG_USAGE_LIMIT_RECHECK_MS`](https://code.claude.com/docs/es/env-vars) | sin establecer | Intervalo mínimo en milisegundos entre comprobaciones de si un [límite de uso](#youve-hit-your-session-limit) ya se levantó, mientras una solicitud espera a que ese límite se restablezca con `CLAUDE_CODE_RETRY_WATCHDOG` establecido. Cuando una comprobación encuentra que el límite se levantó, la solicitud se envía de inmediato. Indica solo dígitos, de `60000` a `10800000`. Si no está establecido o está fuera de ese rango, no se realizan comprobaciones. Para saber cuándo Claude Code omite estas comprobaciones, consulta la [referencia de variables de entorno](https://code.claude.com/docs/es/env-vars.md). Requiere Claude Code v2.1.305 o posterior. |569| [`CLAUDE_CODE_RETRY_WATCHDOG_USAGE_LIMIT_RECHECK_MS`](https://code.claude.com/docs/es/env-vars) | sin establecer | Intervalo mínimo en milisegundos entre comprobaciones de si un [límite de uso](#youve-hit-your-session-limit) ya se levantó, mientras una solicitud espera a que ese límite se restablezca con `CLAUDE_CODE_RETRY_WATCHDOG` establecido. Cuando una comprobación encuentra que el límite se levantó, la solicitud se envía de inmediato. Indica solo dígitos, de `60000` a `10800000`. Si no está establecido o está fuera de ese rango, no se realizan comprobaciones. Para saber cuándo Claude Code omite estas comprobaciones, consulta la [referencia de variables de entorno](https://code.claude.com/docs/es/env-vars.md). Requiere Claude Code v2.1.305 o posterior. |

562| [`CLAUDE_CODE_OVERLOADED_RETRY_BASE_DELAY_MS`](https://code.claude.com/docs/es/env-vars) | 500 | Retraso inicial en milisegundos del retroceso entre reintentos de una solicitud que la API rechaza con un error de sobrecarga `529`. Auméntalo, hasta 32000, para distribuir los reintentos en un período más largo cuando la API está al límite de su capacidad. No tiene efecto cuando `CLAUDE_CODE_RETRY_WATCHDOG` está establecido en `1`, ni cuando la solicitud rechazada se envió en [modo rápido](https://code.claude.com/docs/es/fast-mode.md#handle-rate-limits). Requiere Claude Code v2.1.292 o posterior. |570| [`CLAUDE_CODE_OVERLOADED_RETRY_BASE_DELAY_MS`](https://code.claude.com/docs/es/env-vars) | 500 | Retraso inicial en milisegundos del retroceso entre reintentos de una solicitud que la API rechaza con un error de sobrecarga `529`. Auméntalo, hasta 32000, para distribuir los reintentos en un período más largo cuando la API está al límite de su capacidad. No tiene efecto cuando `CLAUDE_CODE_RETRY_WATCHDOG` está establecido en `1`, ni cuando la solicitud rechazada se envió en [modo rápido](https://code.claude.com/docs/es/fast-mode.md#handle-rate-limits). Requiere Claude Code v2.1.292 o posterior. |

563| [`CLAUDE_CODE_OVERLOADED_RETRY_MAX_DELAY_MS`](https://code.claude.com/docs/es/env-vars) | 32000 | Límite máximo en milisegundos del retroceso entre reintentos de una solicitud que la API rechaza con un error de sobrecarga `529`. Auméntalo, hasta 64000, para que los reintentos posteriores sigan espaciándose cuando la API está al límite de su capacidad. No tiene efecto cuando `CLAUDE_CODE_RETRY_WATCHDOG` está establecido en `1`, ni cuando la solicitud rechazada se envió en [modo rápido](https://code.claude.com/docs/es/fast-mode.md#handle-rate-limits). Requiere Claude Code v2.1.296 o posterior. |571| [`CLAUDE_CODE_OVERLOADED_RETRY_MAX_DELAY_MS`](https://code.claude.com/docs/es/env-vars) | 32000 | Límite máximo en milisegundos del retroceso entre reintentos de una solicitud que la API rechaza con un error de sobrecarga `529`. Auméntalo, hasta 300000, para que los reintentos posteriores sigan espaciándose cuando la API está al límite de su capacidad. Los valores superiores a 64000 requieren v2.1.323 o posterior. No tiene efecto en los mismos casos que `CLAUDE_CODE_OVERLOADED_RETRY_BASE_DELAY_MS`. Requiere Claude Code v2.1.296 o posterior. |

564| [`API_TIMEOUT_MS`](https://code.claude.com/docs/es/env-vars) | 600000 | Tiempo en milisegundos que tiene cada intento de solicitud para recibir sus encabezados de respuesta. No limita cuánto dura una respuesta en streaming después de eso. Auméntalo para redes lentas o proxies. Para saber cómo limita el plazo del primer byte, consulta [No response from API](#no-response-from-api). |572| [`API_TIMEOUT_MS`](https://code.claude.com/docs/es/env-vars) | 600000 | Tiempo en milisegundos que tiene cada intento de solicitud para recibir sus encabezados de respuesta. No limita cuánto dura una respuesta en streaming después de eso. Auméntalo para redes lentas o proxies. Para saber cómo limita el plazo del primer byte, consulta [No response from API](#no-response-from-api). |

565| [`CLAUDE_CODE_NONSTREAMING_TIMEOUT_RETRIES`](https://code.claude.com/docs/es/env-vars) | sin establecer | Límite de reenvíos de una [solicitud sin streaming](#streaming-response-ended-before-any-complete-data-was-received) cuyo tiempo de espera se agota. Al alcanzar el límite, la solicitud falla. Una respuesta de Claude que tarda en generarse más que el tiempo de espera vuelve a agotar el tiempo de espera en cada reenvío, así que establece un número bajo, como `0`, para que falle antes. Para conocer el tiempo de espera de cada intento, consulta [Cuánto espera un intento sin streaming](#how-long-a-non-streaming-attempt-waits). Requiere Claude Code v2.1.285 o posterior. |573| [`CLAUDE_CODE_NONSTREAMING_TIMEOUT_RETRIES`](https://code.claude.com/docs/es/env-vars) | sin establecer | Límite de reenvíos de una [solicitud sin streaming](#streaming-response-ended-before-any-complete-data-was-received) cuyo tiempo de espera se agota. Al alcanzar el límite, la solicitud falla. Una respuesta de Claude que tarda en generarse más que el tiempo de espera vuelve a agotar el tiempo de espera en cada reenvío, así que establece un número bajo, como `0`, para que falle antes. Para conocer el tiempo de espera de cada intento, consulta [Cuánto espera un intento sin streaming](#how-long-a-non-streaming-attempt-waits). Requiere Claude Code v2.1.285 o posterior. |

566| [`CLAUDE_STREAM_FIRST_BYTE_TIMEOUT_MS`](https://code.claude.com/docs/es/env-vars) | sin establecer | Plazo en milisegundos para el primer byte de respuesta de una solicitud en streaming. Requiere Claude Code v2.1.242 o posterior. Para saber cómo elige Claude Code el plazo cuando esta variable no está establecida, consulta [No response from API](#no-response-from-api). |574| [`CLAUDE_STREAM_FIRST_BYTE_TIMEOUT_MS`](https://code.claude.com/docs/es/env-vars) | sin establecer | Plazo en milisegundos para el primer byte de respuesta de una solicitud en streaming. Requiere Claude Code v2.1.242 o posterior. Para saber cómo elige Claude Code el plazo cuando esta variable no está establecida, consulta [No response from API](#no-response-from-api). |


825Las llamadas posteriores en la misma respuesta de Claude pueden denegarse con este motivo:833Las llamadas posteriores en la misma respuesta de Claude pueden denegarse con este motivo:

826 834 

827```text theme={null}835```text theme={null}

828another call in this response was changed by a hook after auto mode reviewed it, or could not be confirmed unchanged836another call in this response was changed after auto mode reviewed it, or could not be confirmed unchanged

829```837```

830 838 

831Claude puede entonces volver a emitir cada llamada denegada para que el servidor la revise. Si se abre una solicitud de permiso, respóndela. No necesitas hacer nada más, a menos que Claude diga en su respuesta que el modo automático no pudo verificar la llamada. En ese caso, detén el cambio o aprueba la llamada tú mismo, y pídele a Claude que vuelva a intentar la llamada:839Claude puede entonces volver a emitir cada llamada denegada para que el servidor la revise. Si se abre una solicitud de permiso, respóndela. No necesitas hacer nada más, a menos que Claude diga en su respuesta que el modo automático no pudo verificar la llamada. En ese caso, detén el cambio o aprueba la llamada tú mismo, y pídele a Claude que vuelva a intentar la llamada:


978 986 

979### You've hit your monthly spend limit987### You've hit your monthly spend limit

980 988 

981El uso incluido en tu plan no puede cubrir esta solicitud, y los [créditos de uso](https://support.claude.com/en/articles/12429409-extra-usage-for-paid-claude-plans) que de otro modo la pagarían alcanzaron un límite de gasto. Eso sucede cuando se agotó una de las ventanas de uso de tu plan, o cuando la solicitud es de las que solo pagan los créditos de uso, como una solicitud a un modelo que [se factura con créditos de uso](https://code.claude.com/docs/es/model-config.md#fable-and-usage-credits). El mensaje indica de quién es el límite que te bloqueó. El texto después del `·` dice cómo conseguir que se aumente ese límite, y varía según tu plan y si gestionas la facturación:989El uso incluido en tu plan no puede cubrir esta solicitud, y los [créditos de uso](https://support.claude.com/en/articles/12429409-extra-usage-for-paid-claude-plans) que de otro modo la pagarían alcanzaron un límite de gasto. Tu plan no puede cubrir una solicitud cuando se agotó una de sus ventanas de uso, o cuando solo los créditos de uso pagan la solicitud. Un ejemplo es una solicitud a un modelo que [se factura con créditos de uso](https://code.claude.com/docs/es/model-config.md#fable-and-usage-credits).

990 

991Las palabras antes del `·` nombran el límite que te bloqueó, como el límite de gasto mensual de tu organización, y el texto después dice cómo conseguir que se aumente ese límite. En una sesión en la nube o con [Remote Control](https://code.claude.com/docs/es/remote-control.md), ese texto no incluye ninguna URL, y un mensaje sobre tu propio `monthly spend limit` no dice cómo aumentarlo. Otras sesiones muestran formas como estas:

982 992 

983```text theme={null}993```text theme={null}

984You've hit your monthly spend limit · raise it at https://claude.ai/settings/usage?from=cc_cli_limit_message994You've hit your monthly spend limit · raise it at https://claude.ai/settings/usage?from=cc_cli_limit_message


1822 1832 

1823Antes de la v2.1.232, Claude Code usaba el runtime v2 solo en un despliegue gradual o cuando definías `MCP_SDK_GENERATION=v2`.1833Antes de la v2.1.232, Claude Code usaba el runtime v2 solo en un despliegue gradual o cuando definías `MCP_SDK_GENERATION=v2`.

1824 1834 

1835### Stopped an OAuth request

1836 

1837Este mensaje significa que Claude Code detuvo una [solicitud OAuth para un servidor MCP](https://code.claude.com/docs/es/mcp.md#authenticate-with-remote-mcp-servers) porque un endpoint OAuth la redirigió. En ambas formas del mensaje, la primera dirección es la que envió la redirección:

1838 

1839```text theme={null}

1840Stopped an OAuth request, which can hold secrets: https://auth.example.com redirected it to https://other.example.com. Ask the owner of https://auth.example.com to remove that redirect.

1841Stopped an OAuth request: https://auth.example.com redirected it more than 5 times. Ask the owner of https://auth.example.com to fix those redirects.

1842```

1843 

1844**Qué hacer:**

1845 

1846* Pide a quien administre la primera dirección, como el operador del servidor MCP, que elimine o corrija la redirección. Luego vuelve a intentarlo desde `/mcp`.

1847 

1825### Se rechaza enviar credenciales a un endpoint de token que no es https1848### Se rechaza enviar credenciales a un endpoint de token que no es https

1826 1849 

1827En el [runtime v2](https://code.claude.com/docs/es/mcp.md#mcp-client-runtimes), Claude Code envía una solicitud de token de [OAuth de MCP](https://code.claude.com/docs/es/mcp.md#authenticate-with-remote-mcp-servers) solo a un endpoint de token servido por HTTPS o en `localhost`, `127.0.0.1` o `::1`. Este mensaje significa que el endpoint de token del servidor no es ninguna de esas opciones, así que Claude Code se detuvo antes de enviar la solicitud. Eso ocurre después del inicio de sesión en el navegador, así que el paso del navegador se completa primero, y de nuevo cada vez que Claude Code renueva el token del servidor.1850En el [runtime v2](https://code.claude.com/docs/es/mcp.md#mcp-client-runtimes), Claude Code envía una solicitud de token de [OAuth de MCP](https://code.claude.com/docs/es/mcp.md#authenticate-with-remote-mcp-servers) solo a un endpoint de token servido por HTTPS o en `localhost`, `127.0.0.1` o `::1`. Este mensaje significa que el endpoint de token del servidor no es ninguna de esas opciones, así que Claude Code se detuvo antes de enviar la solicitud. Eso ocurre después del inicio de sesión en el navegador, así que el paso del navegador se completa primero, y de nuevo cada vez que Claude Code renueva el token del servidor.


2207 2230 

2208### Host no permitido en una sesión en la nube2231### Host no permitido en una sesión en la nube

2209 2232 

2210La política de red del entorno bloqueó una solicitud HTTP saliente de una sesión en la nube o de una tarea programada en la nube.2233En una sesión en la nube o en una tarea programada en la nube, un `403` o un error de DNS como `ENOTFOUND` puede significar que el host solicitado no está en la [lista de permitidos del entorno en la nube](https://code.claude.com/docs/es/cloud-environments.md#access-levels). Para confirmarlo, compara el host con esa lista. Un `403` con este encabezado confirma el bloqueo, pero no todos los `403` de solicitudes bloqueadas lo incluyen:

2211 2234 

2212```text theme={null}2235```text theme={null}

2213HTTP 4032236HTTP 403


2290 2313 

2291Antes de v2.1.296, Claude Code no reintentaba una lectura fallida y, después de una, podía abrir la sesión con una conversación vacía e informar éxito en lugar de imprimir este mensaje.2314Antes de v2.1.296, Claude Code no reintentaba una lectura fallida y, después de una, podía abrir la sesión con una conversación vacía e informar éxito en lugar de imprimir este mensaje.

2292 2315 

2316### Couldn't load the history of cloud session

2317 

2318Este mensaje significa que Claude Code encontró la [sesión en la nube que pediste traer a tu terminal](https://code.claude.com/docs/es/claude-code-on-the-web.md#from-cloud-to-terminal), pero la solicitud de su historial de conversación devolvió que no se encontró:

2319 

2320```text theme={null}

2321Couldn't load the history of cloud session session_01HJKLMNOPQRSTUVWXYZ. Check it at https://claude.ai/code/session_01HJKLMNOPQRSTUVWXYZ?from=cli

2322```

2323 

2324**Qué hacer:**

2325 

2326* Abre el enlace del mensaje para revisar la sesión en tu navegador. Si se abre ahí y el mismo teleport vuelve a fallar de esta manera, [reporta el problema](#report-an-error).

2327 

2293### Couldn't reconnect to your Remote Control session2328### Couldn't reconnect to your Remote Control session

2294 2329 

2295```text theme={null}2330```text theme={null}


2565 2600 

2566Claude Code normalmente cambia el tamaño de las imágenes grandes de forma automática. Estos errores significan que la imagen no se pudo decodificar ni redimensionar para que cupiera dentro de los límites de la API.2601Claude Code normalmente cambia el tamaño de las imágenes grandes de forma automática. Estos errores significan que la imagen no se pudo decodificar ni redimensionar para que cupiera dentro de los límites de la API.

2567 2602 

2603El error que ves puede nombrar un límite de píxeles diferente, como `2576x2576px` donde estos ejemplos dicen `2000x2000px`.

2604 

2568**Qué hacer:**2605**Qué hacer:**

2569 2606 

2570* Si el mensaje te pide que conviertas la imagen, conviértela a PNG, JPEG, GIF o WebP y vuelve a adjuntarla. Claude Code puede verificar las dimensiones de estos formatos a partir del encabezado del archivo, sin decodificar la imagen.2607* Si el mensaje te pide que conviertas la imagen, conviértela a PNG, JPEG, GIF o WebP y vuelve a adjuntarla. Claude Code puede verificar las dimensiones de estos formatos a partir del encabezado del archivo, sin decodificar la imagen.


2873* **Un motivo escrito por un hook**: un hook PreModelSwitch proporcionó ese motivo cuando [denegó el cambio o pidió confirmación](https://code.claude.com/docs/es/hooks.md#premodelswitch-decision-control). Atiende lo que pide, o elige un modelo que tus hooks permitan.2910* **Un motivo escrito por un hook**: un hook PreModelSwitch proporcionó ese motivo cuando [denegó el cambio o pidió confirmación](https://code.claude.com/docs/es/hooks.md#premodelswitch-decision-control). Atiende lo que pide, o elige un modelo que tus hooks permitan.

2874* **`PreModelSwitch hook <name> did not respond before its timeout`**: un hook que no responde antes de que se agote su [tiempo de espera](https://code.claude.com/docs/es/hooks.md#timeouts) bloquea el cambio. Corrige el comando que se queda colgado o aumenta el `timeout` de ese hook, y luego vuelve a cambiar.2911* **`PreModelSwitch hook <name> did not respond before its timeout`**: un hook que no responde antes de que se agote su [tiempo de espera](https://code.claude.com/docs/es/hooks.md#timeouts) bloquea el cambio. Corrige el comando que se queda colgado o aumenta el `timeout` de ese hook, y luego vuelve a cambiar.

2875* **`confirmation required, and this session cannot ask`**: un hook respondió `ask` sin un motivo, y una solicitud de control no tiene forma de mostrar la solicitud de confirmación. Un comando `/model` en una [ejecución con `-p`](https://code.claude.com/docs/es/headless) reporta la misma condición con `(run /model interactively to confirm)` después del motivo. Haz el cambio desde una sesión interactiva, o cambia la decisión del hook para este modelo.2912* **`confirmation required, and this session cannot ask`**: un hook respondió `ask` sin un motivo, y una solicitud de control no tiene forma de mostrar la solicitud de confirmación. Un comando `/model` en una [ejecución con `-p`](https://code.claude.com/docs/es/headless) reporta la misma condición con `(run /model interactively to confirm)` después del motivo. Haz el cambio desde una sesión interactiva, o cambia la decisión del hook para este modelo.

2876* **`so organization-managed PreModelSwitch hooks could not be checked`**: Claude Code no pudo determinar qué hooks PreModelSwitch entregan los [plugins administrados](https://code.claude.com/docs/es/settings-reference.md#enabledplugins) de tu organización, por ejemplo porque un plugin administrado no se cargó. Uno de esos hooks podría bloquear el cambio, así que Claude Code lo rechaza en lugar de aplicarlo sin verificar. El principio del motivo indica qué falló. Claude Code vuelve a verificar en cada intento de cambio, por lo que un fallo que ya se resolvió deja de bloquear; si sigue fallando, ejecuta `claude --debug` y vuelve a cambiar para capturar los detalles, y luego corrige el plugin o pídele a tu administrador que lo corrija.2913* **`so organization-managed PreModelSwitch hooks could not be checked`**: Claude Code anterior a la v2.1.323 rechaza el cambio cuando no puede determinar qué hooks PreModelSwitch proporcionan tus [plugins administrados](https://code.claude.com/docs/es/settings-reference.md#enabledplugins). El texto antes de esta frase indica qué falló. Para detener el rechazo, actualiza Claude Code. Para que además se ejecuten los hooks de un plugin que falló, corrige el plugin o consulta a tu administrador. Para más detalles, inicia `claude --debug` en tu shell y cambia de modelo; luego lee el [registro de depuración](https://code.claude.com/docs/es/hooks.md#debug-hooks).

2877* **`a PreModelSwitch hook failed before answering`** o **`PreModelSwitch hooks were cancelled (the control stream closed) before answering`**: la ejecución del hook terminó sin un veredicto, y Claude Code no lo trata como una aprobación. Ejecuta `claude --debug` para ver qué falló y luego vuelve a cambiar.2914* **`a PreModelSwitch hook failed before answering`** o **`PreModelSwitch hooks were cancelled (the control stream closed) before answering`**: la ejecución del hook terminó sin un veredicto, y Claude Code no lo trata como una aprobación. Ejecuta `claude --debug` para ver qué falló y luego vuelve a cambiar.

2878 2915 

2879Antes de v2.1.260, el rechazo por plugins administrados decía `plugin hooks could not be loaded, so PreModelSwitch hooks could not be checked; see the debug log`. Claude Code reintentaba la carga del plugin una vez y luego rechazaba los cambios posteriores en la sesión, incluso cuando tu organización no administraba ningún plugin. En esas versiones, reinicia la sesión para volver a ejecutar la carga del plugin.2916Antes de v2.1.260, el rechazo por plugins administrados decía `plugin hooks could not be loaded, so PreModelSwitch hooks could not be checked; see the debug log`. Claude Code reintentaba la carga del plugin una vez y luego rechazaba los cambios posteriores en la sesión, incluso cuando tu organización no administraba ningún plugin. En esas versiones, reinicia la sesión para volver a ejecutar la carga del plugin.


3522Iniciaste [Remote Control](https://code.claude.com/docs/es/remote-control.md) con un flag global de `claude` antes del verbo `remote-control`, uno que restringiría o configuraría las sesiones que inicia Remote Control, como `--settings`, `--setting-sources`, `--permission-mode`, `--disallowed-tools` o `--mcp-config`. Un flag colocado antes del verbo nunca llega a esas sesiones. En su lugar, Claude Code se niega a iniciar y nombra el flag:3559Iniciaste [Remote Control](https://code.claude.com/docs/es/remote-control.md) con un flag global de `claude` antes del verbo `remote-control`, uno que restringiría o configuraría las sesiones que inicia Remote Control, como `--settings`, `--setting-sources`, `--permission-mode`, `--disallowed-tools` o `--mcp-config`. Un flag colocado antes del verbo nunca llega a esas sesiones. En su lugar, Claude Code se niega a iniciar y nombra el flag:

3523 3560 

3524```text theme={null}3561```text theme={null}

3525Error: `--settings` before `remote-control` is not carried over to the sessions Remote Control starts, so Remote Control refuses to start rather than drop it — remove it, and give Remote Control's own options after the verb (see `claude remote-control --help`).3562Error: `--settings` before `remote-control` is not carried over to the sessions Remote Control starts, so Remote Control refuses to start rather than drop it — remove it, and give Remote Control's own options after the verb (see `claude remote-control --help`). Pass settings with `claude remote-control --settings <file>`.

3526```3563```

3527 3564 

3528Claude Code no rechaza los flags globales que es inofensivo descartar, como `--verbose`, `--model`, o un `--session-id` o `--plugin-dir` inyectado por un wrapper: los ignora y Remote Control se inicia.3565Claude Code no rechaza los flags globales que es inofensivo descartar, como `--verbose`, `--model`, o un `--session-id` o `--plugin-dir` inyectado por un wrapper: los ignora y Remote Control se inicia.


3536 3573 

3537Antes de v2.1.248, `claude remote-control` no aceptaba sus propios flags cuando un flag global iba primero, y el comando fallaba con un error `unknown option`.3574Antes de v2.1.248, `claude remote-control` no aceptaba sus propios flags cuando un flag global iba primero, y el comando fallaba con un error `unknown option`.

3538 3575 

3576### Remote Control no se inició por el archivo de `--settings`

3577 

3578El archivo que pasaste a [`claude remote-control --settings`](https://code.claude.com/docs/es/remote-control#start-a-remote-control-session) tiene un problema:

3579 

3580```text theme={null}

3581Error: Remote Control did not start, because sessions would skip part or all of the --settings file ./rc-settings.json: Invalid or malformed JSON

3582```

3583 

3584**Qué hacer:**

3585 

3586* Corrige el problema que indica el mensaje y luego vuelve a ejecutar tu comando `claude remote-control`

3587 

3588### The settings file has changed since Remote Control started

3589 

3590Este mensaje en la terminal que ejecuta `claude remote-control` significa que las sesiones no se iniciarán a partir del archivo que pasaste a [`--settings`](https://code.claude.com/docs/es/remote-control#start-a-remote-control-session) tal como está ahora:

3591 

3592```text theme={null}

3593Session failed: Error: The settings file /path/to/settings.json has changed since Remote Control started, so this session did not start. Restart `claude remote-control` to use it as it is now.

3594```

3595 

3596**Qué hacer:**

3597 

3598* Para usar el archivo tal como está ahora, detén `claude remote-control` y vuelve a ejecutar el mismo comando. Para recuperar las sesiones que estaba atendiendo, consulta [Reanudar sesiones después de detener el servidor](https://code.claude.com/docs/es/remote-control.md#resume-sessions-after-stopping-the-server).

3599* Para conservar la configuración con la que se inició Remote Control, restaura el contenido del archivo tal como estaba y luego vuelve a ejecutar el comando si `claude remote-control` ha terminado

3600 

3539### `--sandbox` or `--no-sandbox` is not supported by claude remote-control3601### `--sandbox` or `--no-sandbox` is not supported by claude remote-control

3540 3602 

3541Este error significa que el comando que inicia tu servidor de [Remote Control](https://code.claude.com/docs/es/remote-control.md) pasa `--sandbox` o `--no-sandbox` después de `remote-control`, y `claude remote-control` no acepta ninguno de los dos flags. El servidor termina con el código 1 en lugar de iniciarse:3603Este error significa que el comando que inicia tu servidor de [Remote Control](https://code.claude.com/docs/es/remote-control.md) pasa `--sandbox` o `--no-sandbox` después de `remote-control`, y `claude remote-control` no acepta ninguno de los dos flags. El servidor termina con el código 1 en lugar de iniciarse:


3806 3868 

3807Hay cadenas similares que se activan antes de que el comando llegue a ejecutarse:3869Hay cadenas similares que se activan antes de que el comando llegue a ejecutarse:

3808 3870 

3809* `Shell command permission check failed for pattern "..."`: la comprobación de permisos del comando no lo permitió. [Comprobaciones de permisos en comandos inyectados](https://code.claude.com/docs/es/skills.md#permission-checks-on-injected-commands) explica qué resultados abortan en cada modo de permisos y cómo aprobar previamente un comando con `allowed-tools`3871* `Shell command permission check failed for pattern "..."`: la verificación de permisos del comando no lo permitió. Consulta [Verificaciones de permisos en comandos inyectados](https://code.claude.com/docs/es/skills.md#permission-checks-on-injected-commands) para ver qué resultados abortan en cada modo de permisos y cuándo `allowed-tools` aprueba previamente un comando

3810* ``Skill <name> requires bash (`shell: bash` in frontmatter) but Git Bash was not found``: el frontmatter del skill exige bash en una máquina que no lo tiene. Instala Git for Windows o cambia el frontmatter a `shell: powershell`. Consulta [Cómo se ejecutan los comandos inyectados](https://code.claude.com/docs/es/skills.md#how-injected-commands-run)3872* ``Skill <name> requires bash (`shell: bash` in frontmatter) but Git Bash was not found``: el frontmatter del skill exige bash en una máquina que no lo tiene. Instala Git for Windows o cambia el frontmatter a `shell: powershell`. Consulta [Cómo se ejecutan los comandos inyectados](https://code.claude.com/docs/es/skills.md#how-injected-commands-run)

3811 3873 

3812**Qué hacer:**3874**Qué hacer:**


3960 4022 

3961* **No pasaste una rama base**: Claude Code comparó contra la rama predeterminada del repositorio y sugiere pasar tu base explícitamente, como en el ejemplo anterior4023* **No pasaste una rama base**: Claude Code comparó contra la rama predeterminada del repositorio y sugiere pasar tu base explícitamente, como en el ejemplo anterior

3962* **Pasaste una rama base que ya estaba en tu clon**: la sugerencia dice ``Make sure <branch> exists locally or on origin (try `git fetch origin <branch>`)``4024* **Pasaste una rama base que ya estaba en tu clon**: la sugerencia dice ``Make sure <branch> exists locally or on origin (try `git fetch origin <branch>`)``

3963* **Pasaste una rama base que no estaba en tu clon**: Claude Code la obtuvo de origin antes de comparar. La sugerencia dice ``<branch> was fetched from origin but shares no history with HEAD. If another branch is your real base, pass it explicitly (`/code-review ultra <branch>`)``; cuando Claude Code no puede saber si tu clon es superficial, sugiere `git fetch --unshallow origin` en su lugar. Antes de v2.1.221, la sugerencia proponía `git fetch --unshallow origin` para cada rama base obtenida, y en un clon completo ese comando falla con `fatal: --unshallow on a complete repository does not make sense`.4025* **Pasaste una rama base que no estaba en tu clon**: Claude Code la obtuvo de origin antes de comparar. La sugerencia dice ``<branch> was fetched from origin but shares no history with HEAD. If another branch is your real base, pass it explicitly (`/code-review ultra <branch>`)``; cuando Claude Code no puede determinar si tu clon es superficial, sugiere `git fetch --unshallow origin` en su lugar. Antes de la v2.1.221, la sugerencia proponía `git fetch --unshallow origin` para toda rama base obtenida, y en un clon completo ese comando falla con `fatal: --unshallow on a complete repository does not make sense`.

3964 4026 

3965**Qué hacer:**4027**Qué hacer:**

3966 4028 


4333 4395 

4334## Errores de plugins4396## Errores de plugins

4335 4397 

4336Estos errores provienen de la configuración de [plugins](https://code.claude.com/docs/es/plugins/overview.md) y [marketplace](https://code.claude.com/docs/es/plugins/overview.md). Para problemas de plugins que no producen uno de los mensajes en esta página, como una URL de marketplace que no carga o un plugin que se instala pero no aparece, consulte [Solución de problemas de plugins](https://code.claude.com/docs/es/plugins/troubleshooting.md).4398Estos errores provienen de la configuración de [plugins](https://code.claude.com/docs/es/plugins/overview.md) y [marketplaces](https://code.claude.com/docs/es/plugins/overview.md). Para problemas de plugins que no producen uno de los mensajes de esta página, como una URL de marketplace que no carga o un plugin que se instala pero no aparece, consulta [Solución de problemas de plugins](https://code.claude.com/docs/es/plugins/troubleshooting.md).

4337 4399 

4338### plugin eval is currently in early access4400### plugin eval is currently in early access

4339 4401 

4340Ejecutó [`claude plugin eval`](https://code.claude.com/docs/es/plugin-evals) o `claude plugin eval init` y salió con código 1 con uno de estos mensajes antes de hacer nada:4402Ejecutaste [`claude plugin eval`](https://code.claude.com/docs/es/plugin-evals) o `claude plugin eval init` y terminó con código 1 mostrando uno de estos mensajes antes de hacer nada:

4341 4403 

4342```text theme={null}4404```text theme={null}

4343`plugin eval` is currently in early access4405`plugin eval` is currently in early access


4347`plugin eval` is currently unavailable4409`plugin eval` is currently unavailable

4348```4410```

4349 4411 

4350El primer mensaje significa que su compilación es anterior a v2.1.269, la primera versión donde el comando está disponible en general. El segundo significa que Anthropic ha desactivado el comando del lado del servidor; nada en su máquina lo vuelve a activar.4412El primer mensaje significa que tu compilación es anterior a la v2.1.269, la primera versión en la que el comando está disponible de forma general. El segundo significa que Anthropic desactivó el comando del lado del servidor; nada en tu máquina lo vuelve a activar.

4351 4413 

4352**Qué hacer:**4414**Qué hacer:**

4353 4415 

4354* Ejecute `claude --version`, luego `claude update`, y ejecute el comando nuevamente en una sesión nueva. Consulte los [requisitos para plugin evals](https://code.claude.com/docs/es/plugin-evals.md#requirements)4416* Ejecuta `claude --version`, luego `claude update`, y vuelve a ejecutar el comando en una sesión nueva. Consulta los [requisitos para las evaluaciones de plugins](https://code.claude.com/docs/es/plugin-evals.md#requirements)

4355* Si ve el segundo mensaje en una compilación actual, intente nuevamente más tarde después de otro `claude update`4417* Si ves el segundo mensaje en una compilación actual, vuelve a intentarlo más tarde después de otro `claude update`

4356 4418 

4357### Marketplace is registered from an untrusted source4419### Marketplace is registered from an untrusted source

4358 4420 

4359El marketplace está registrado bajo un nombre que está [reservado para marketplaces oficiales de Anthropic](https://code.claude.com/docs/es/plugins/marketplace-reference.md#marketplace-file), pero su fuente registrada no es un repositorio de GitHub de `anthropics`. Claude Code vuelve a verificar los nombres reservados cada vez que carga o actualiza un marketplace, por lo que el marketplace y los plugins instalados desde él dejan de cargarse. Antes de v2.1.205, una entrada registrada antes de que su nombre se reservara seguía cargándose.4421El marketplace está registrado con un nombre que está [reservado para los marketplaces oficiales de Anthropic](https://code.claude.com/docs/es/plugins/marketplace-reference.md#marketplace-file), pero su origen registrado no es un repositorio de GitHub de `anthropics`. Claude Code vuelve a comprobar los nombres reservados cada vez que carga o actualiza un marketplace, por lo que el marketplace y los plugins instalados desde él dejan de cargarse. Antes de la v2.1.205, una entrada registrada antes de que su nombre quedara reservado seguía cargándose.

4360 4422 

4361```text theme={null}4423```text theme={null}

4362Marketplace "claude-community" is registered from an untrusted source: The name 'claude-community' is reserved for official Anthropic marketplaces. Only repositories from 'github.com/anthropics/' can use this name. To fix it, remove the marketplace and re-add it from the official source.4424Marketplace "claude-community" is registered from an untrusted source: The name 'claude-community' is reserved for official Anthropic marketplaces. Only repositories from 'github.com/anthropics/' can use this name. To fix it, remove the marketplace and re-add it from the official source.

4363```4425```

4364 4426 

4365Para un marketplace cuya fuente no es un repositorio de GitHub o una URL de Git, como un directorio local, la oración del medio dice `can only be used with GitHub sources from the 'anthropics' organization` en su lugar. `claude plugin marketplace add` ejecuta la misma verificación y rechaza un nombre reservado con `Failed to add marketplace:` seguido de la misma oración de nombre reservado.4427Para un marketplace cuyo origen no es un repositorio de GitHub ni una URL de Git, como un directorio local, la oración del medio dice en cambio `can only be used with GitHub sources from the 'anthropics' organization`. `claude plugin marketplace add` ejecuta la misma comprobación y rechaza un nombre reservado con `Failed to add marketplace:` seguido de la misma oración sobre el nombre reservado.

4366 4428 

4367**Qué hacer:**4429**Qué hacer:**

4368 4430 

4369* Si el marketplace ya está registrado, ejecute `claude plugin marketplace remove <name>`, luego agréguelo nuevamente desde el repositorio oficial `github.com/anthropics`4431* Si el marketplace ya está registrado, ejecuta `claude plugin marketplace remove <name>` y luego agrégalo de nuevo desde el repositorio oficial `github.com/anthropics`

4370* Si publica un marketplace de terceros que utilizó el nombre antes de que se reservara, cámbielo de nombre y pida a los usuarios que lo vuelvan a agregar desde su fuente4432* Si publicas un marketplace de terceros que usaba el nombre antes de que quedara reservado, cámbiale el nombre y pide a los usuarios que lo vuelvan a agregar desde tu origen

4371* Consulte la lista de nombres reservados en [Marketplace schema](https://code.claude.com/docs/es/plugins/marketplace-reference.md#marketplace-file)4433* Consulta la lista de nombres reservados en [Esquema del marketplace](https://code.claude.com/docs/es/plugins/marketplace-reference.md#marketplace-file)

4372 4434 

4373### Marketplace name is another spelling of a reserved name4435### El nombre del marketplace es otra grafía de un nombre reservado

4374 4436 

4375El nombre del marketplace no es en sí mismo un nombre reservado, pero Claude Code lo trata como otra ortografía de uno. [Nombres reservados](https://code.claude.com/docs/es/plugins/marketplace-reference.md#reserved-name-spellings) enumera qué ortografías cuentan como un nombre reservado. Claude Code rechaza tal nombre cuando agrega el marketplace:4437El nombre del marketplace no es en sí un nombre reservado, pero Claude Code lo trata como otra grafía de uno. [Nombres reservados](https://code.claude.com/docs/es/plugins/marketplace-reference.md#reserved-name-spellings) enumera qué grafías cuentan como un nombre reservado. Claude Code rechaza ese nombre cuando agregas el marketplace:

4376 4438 

4377```text theme={null}4439```text theme={null}

4378Failed to add marketplace: "claude.code.plugins" is another spelling of "claude-code-plugins", a reserved marketplace name.4440Failed to add marketplace: "claude.code.plugins" is another spelling of "claude-code-plugins", a reserved marketplace name.

4379```4441```

4380 4442 

4381Cuando un marketplace ya está registrado bajo tal nombre, su entrada deja de cargarse, y `/plugin`, `claude plugin install`, y `claude plugin update` advierten:4443Cuando un marketplace ya está registrado con ese nombre, su entrada deja de cargarse, y `/plugin`, `claude plugin install` y `claude plugin update` advierten:

4382 4444 

4383```text wrap theme={null}4445```text wrap theme={null}

4384known_marketplaces.json has an entry named "claude.code.plugins", another spelling of the reserved marketplace name "claude-code-plugins", so it is ignored. Remove it with: claude plugin marketplace remove claude.code.plugins4446known_marketplaces.json has an entry named "claude.code.plugins", another spelling of the reserved marketplace name "claude-code-plugins", so it is ignored. Remove it with: claude plugin marketplace remove claude.code.plugins

4385```4447```

4386 4448 

4387Cuando el nombre requeriría entrecomillado de shell, la negativa en tiempo de adición dice `This marketplace's name is another spelling of "<reserved>", a reserved marketplace name. It is not exactly the reserved name it appears to be.`4449Cuando el nombre necesitaría comillas en el shell, el rechazo al agregarlo dice `This marketplace's name is another spelling of "<reserved>", a reserved marketplace name. It is not exactly the reserved name it appears to be.`

4388 4450 

4389**Qué hacer:**4451**Qué hacer:**

4390 4452 

4391* Cambie el nombre del marketplace a un nombre que no deletree un nombre reservado y agréguelo nuevamente4453* Cambia el nombre del marketplace por uno que no escriba un nombre reservado y agrégalo de nuevo

4392* Para la advertencia de entrada ignorada, ejecute el comando `claude plugin marketplace remove` que proporciona, o elimine la entrada de `~/.claude/plugins/known_marketplaces.json`4454* Para la advertencia de entrada ignorada, ejecuta el comando `claude plugin marketplace remove` que indica, o elimina la entrada de `~/.claude/plugins/known_marketplaces.json`

4393 4455 

4394### Claude Code refuses the marketplace name4456### Claude Code refuses the marketplace name

4395 4457 

4396Un marketplace registrado cuyo nombre [suplanta un marketplace oficial de Anthropic](https://code.claude.com/docs/es/plugins/marketplace-reference.md#reserved-names) según las reglas que esa sección enumera.4458El nombre de un marketplace registrado [suplanta a un marketplace oficial de Anthropic](https://code.claude.com/docs/es/plugins/marketplace-reference.md#reserved-names) según las reglas que enumera esa sección.

4397 4459 

4398Si un marketplace fue registrado bajo tal nombre antes de que la verificación lo bloqueara, el marketplace y los plugins instalados desde él dejan de cargarse, porque Claude Code verifica el nombre cada vez que lee el catálogo del marketplace. Cuando el nombre imita uno oficial, `claude plugin list` y la pestaña **Errors** de `/plugin` informan cada plugin afectado con un mensaje que comienza:4460Si un marketplace se registró con ese nombre antes de que la comprobación lo bloqueara, el marketplace y los plugins instalados desde él dejan de cargarse, porque Claude Code comprueba el nombre cada vez que lee el catálogo del marketplace. Cuando el nombre imita a uno oficial, `claude plugin list` y la pestaña **Errors** de `/plugin` informan cada plugin afectado con un mensaje que comienza así:

4399 4461 

4400```text theme={null}4462```text theme={null}

4401Claude Code refuses the marketplace name "anthropic-plugins-v2"4463Claude Code refuses the marketplace name "anthropic-plugins-v2"

4402```4464```

4403 4465 

4404Para un nombre que imita, el error del marketplace en sí dice `Claude Code refuses this marketplace's name: it looks like one of Anthropic's own` en su lugar. `claude plugin marketplace add` rechaza cualquier nombre que suplante con `Marketplace name impersonates an official Anthropic/Claude marketplace`.4466Para un nombre que imita a uno oficial, el error propio del marketplace dice en cambio `Claude Code refuses this marketplace's name: it looks like one of Anthropic's own`. `claude plugin marketplace add` rechaza cualquier nombre que suplante a uno oficial con `Marketplace name impersonates an official Anthropic/Claude marketplace`.

4405 4467 

4406Antes de v2.1.282, `claude plugin list` y `/plugin` informaban los plugins de un nombre que imita como fallidos al cargar también, sin nombrar el nombre del marketplace como la causa.4468Antes de la v2.1.282, `claude plugin list` y `/plugin` también informaban que los plugins de un nombre imitador no se habían podido cargar, sin señalar el nombre del marketplace como la causa.

4407 4469 

4408**Qué hacer:**4470**Qué hacer:**

4409 4471 

4410* Para conservar un marketplace que un archivo de configuración declara en línea con `"source": "settings"`, cámbiale el nombre antes de eliminar el nombre anterior, porque eliminar el marketplace también borra su entrada de tus archivos de configuración. Claude Code v2.1.292 o posterior enumera estos pasos en el mensaje:4472* Para conservar un marketplace que un archivo de configuración declara en línea con `"source": "settings"`, cámbiale el nombre antes de eliminar el nombre anterior, porque eliminar el marketplace también borra su entrada de tus archivos de configuración. Claude Code v2.1.292 o posterior enumera estos pasos en el mensaje:

4411 1. En cada archivo de configuración que incluya el marketplace en `extraKnownMarketplaces`, asigna a la clave de la entrada y a su `source.name` un mismo nombre nuevo en ASCII simple que no parezca oficial. Si un administrador agrega el marketplace mediante la configuración administrada de tu organización, el administrador realiza este paso4473 1. En cada archivo de configuración que incluya el marketplace en `extraKnownMarketplaces`, asigna a la clave de la entrada y a su `source.name` un mismo nombre nuevo en ASCII simple que no parezca uno oficial. Si un administrador agrega el marketplace mediante la configuración administrada de tu organización, el administrador se encarga de este paso

4412 2. Ejecuta `claude plugin marketplace remove <old-name>`, o elimina el nombre anterior en la pestaña **Marketplaces** de `/plugin`. Esto también desinstala sus plugins y elimina sus datos, opciones y secretos4474 2. Ejecuta `claude plugin marketplace remove <old-name>`, o elimina el nombre anterior en la pestaña **Marketplaces** de `/plugin`. Esto también desinstala sus plugins y borra sus datos, opciones y secretos

4413 3. Inicia Claude Code de nuevo, en la carpeta del proyecto si el archivo es un archivo de configuración de un proyecto. Luego instala los plugins desde el marketplace renombrado4475 3. Inicia Claude Code de nuevo, en la carpeta del proyecto si el archivo es el archivo de configuración de un proyecto. Luego instala los plugins desde el marketplace renombrado

4414* Para conservar cualquier otro marketplace, espera hasta que su mantenedor lo renombre y luego ejecuta `claude plugin marketplace update <name>`4476* Para conservar cualquier otro marketplace, espera a que su mantenedor le cambie el nombre y luego ejecuta `claude plugin marketplace update <name>`

4415* Para eliminar el marketplace, ejecuta `claude plugin marketplace remove <name>`. Esto también desinstala los plugins instalados desde el marketplace y elimina sus datos, opciones y secretos4477* Para eliminar el marketplace, ejecuta `claude plugin marketplace remove <name>`. Esto también desinstala los plugins instalados desde el marketplace y borra sus datos, opciones y secretos

4416* Si publica el marketplace, cámbielo de nombre en su `marketplace.json`; los usuarios luego actualizan el marketplace en lugar de eliminarlo4478* Si publicas el marketplace, cámbiale el nombre en tu `marketplace.json`; así los usuarios actualizan el marketplace en lugar de eliminarlo

4417 4479 

4418### Marketplace is already added from a different source4480### Marketplace is already added from a different source

4419 4481 

4420Indicaste una nueva fuente de marketplace con [`--marketplace <source>` en el comando de instalación](https://code.claude.com/docs/es/plugins/install#add-a-marketplace-and-install-in-one-command), en una sesión o desde tu shell. El catálogo que Claude Code obtuvo de esa fuente tiene el mismo nombre que un marketplace que ya agregaste desde una fuente diferente. Claude Code mantiene el marketplace existente en lugar de reemplazarlo, y el plugin no se instala.4482Indicaste un nuevo origen de marketplace con [`--marketplace <source>` en el comando de instalación](https://code.claude.com/docs/es/plugins/install#add-a-marketplace-and-install-in-one-command), en una sesión o desde tu shell. El catálogo que Claude Code obtuvo de ese origen tiene el mismo nombre que un marketplace que ya agregaste desde un origen diferente. Claude Code conserva el marketplace existente en lugar de reemplazarlo, y el plugin no se instala.

4421 4483 

4422```text theme={null}4484```text theme={null}

4423Marketplace "acme-tools" is already added from a different source (github:acme/plugins). To use this source instead, remove that marketplace first with /plugin marketplace remove acme-tools.4485Marketplace "acme-tools" is already added from a different source (github:acme/plugins). To use this source instead, remove that marketplace first with /plugin marketplace remove acme-tools.


4425 4487 

4426**Qué hacer:**4488**Qué hacer:**

4427 4489 

4428* Si el marketplace que ya agregó es el que desea, instale desde él por nombre: `/plugin install <plugin>@<name>`4490* Si el marketplace que ya agregaste es el que quieres, instala desde él por nombre: `/plugin install <plugin>@<name>`

4429* Para cambiar a la nueva fuente, ejecute `/plugin marketplace remove <name>`, luego reintente la instalación4491* Para cambiar al nuevo origen, ejecuta `/plugin marketplace remove <name>` y luego reintenta la instalación

4430 4492 

4431### Plugin command references user\_config in a shell command4493### Un comando de plugin hace referencia a user\_config en un comando de shell

4432 4494 

4433Un hook de plugin, [monitor](https://code.claude.com/docs/es/plugins/components.md#monitors), o comando MCP [`headersHelper`](https://code.claude.com/docs/es/mcp#use-dynamic-headers-for-custom-authentication) hace referencia a una [opción de plugin](https://code.claude.com/docs/es/plugins/manifest-reference.md#user-configuration) `${user_config.KEY}`, y la cadena sustituida se pasaría a un shell. Un valor configurado que contenga `$(...)`, comillas invertidas o `;` se ejecutaría como código allí, por lo que Claude Code se niega a iniciar el componente en lugar de sustituir el valor. La verificación se ejecuta en la plantilla de comando, por lo que el error aparece incluso cuando aún no se ha configurado ningún valor. Antes de v2.1.207, el valor se sustituía en el comando del shell.4495Un comando de hook, [monitor](https://code.claude.com/docs/es/plugins/components.md#monitors) o [`headersHelper`](https://code.claude.com/docs/es/mcp#use-dynamic-headers-for-custom-authentication) de MCP de un plugin hace referencia a una [opción del plugin](https://code.claude.com/docs/es/plugins/manifest-reference.md#user-configuration) `${user_config.KEY}`, y la cadena sustituida se pasaría a un shell. Un valor configurado que contenga `$(...)`, comillas invertidas o `;` se ejecutaría allí como código, así que Claude Code se niega a iniciar el componente en lugar de sustituir el valor. La comprobación se ejecuta sobre la plantilla del comando, por lo que el error aparece incluso cuando todavía no hay ningún valor configurado. Antes de la v2.1.207, el valor se sustituía en el comando de shell.

4434 4496 

4435La redacción depende de qué superficie hizo referencia a la opción. Un hook de forma de shell informa:4497La redacción depende de qué superficie hizo referencia a la opción. Un hook en forma de shell informa:

4436 4498 

4437```text theme={null}4499```text theme={null}

4438Hook from plugin formatter@acme-tools references ${user_config.*} in a shell-form command. The substituted value would be re-parsed by the shell. Use exec form instead — {"command": "<executable>", "args": ["${user_config.KEY}", ...]} — or read $CLAUDE_PLUGIN_OPTION_<KEY> from the hook's environment. Command: ./scripts/notify.sh ${user_config.webhook_url}4500Hook from plugin formatter@acme-tools references ${user_config.*} in a shell-form command. The substituted value would be re-parsed by the shell. Use exec form instead — {"command": "<executable>", "args": ["${user_config.KEY}", ...]} — or read $CLAUDE_PLUGIN_OPTION_<KEY> from the hook's environment. Command: ./scripts/notify.sh ${user_config.webhook_url}


4452 4514 

4453**Qué hacer:**4515**Qué hacer:**

4454 4516 

4455* Para un hook, agregue una matriz `args` para que se ejecute en [forma exec](https://code.claude.com/docs/es/hooks.md#exec-form-and-shell-form), donde cada `${user_config.KEY}` se convierte en un argumento sin shell en el medio. O elimine la referencia y lea la variable de entorno `$CLAUDE_PLUGIN_OPTION_<KEY>` dentro del script4517* Para un hook, agrega un arreglo `args` para que se ejecute en [forma exec](https://code.claude.com/docs/es/hooks.md#exec-form-and-shell-form), donde cada `${user_config.KEY}` se convierte en un argumento sin un shell de por medio. O quita la referencia y lee la variable de entorno `$CLAUDE_PLUGIN_OPTION_<KEY>` dentro del script

4456* Para un monitor, elimine la referencia y haga que el script del monitor lea el valor de un archivo de configuración4518* Para un monitor, quita la referencia y haz que el script del monitor lea el valor desde un archivo de configuración

4457* Para un `headersHelper`, mueva `${user_config.KEY}` al campo `headers` del servidor, que no se analiza con shell, o lea el valor dentro del script del helper4519* Para un `headersHelper`, mueve `${user_config.KEY}` al campo `headers` del servidor, que no es analizado por el shell, o lee el valor dentro del script auxiliar

4458 4520 

4459### Plugin archive integrity check failed4521### Plugin archive integrity check failed

4460 4522 

4461La entrada del marketplace del plugin utiliza una [fuente `archive`](https://code.claude.com/docs/es/plugins/marketplace-reference#archive-plugin-source) con un pin `sha256`, y el resumen del archivo descargado no coincide con el pin. Claude Code rechaza la instalación, por lo que nada cambia en la caché de plugins. La falta de coincidencia tiene tres causas posibles:4523La entrada del plugin en el marketplace usa un [origen `archive`](https://code.claude.com/docs/es/plugins/marketplace-reference#archive-plugin-source) con un valor fijado `sha256`, y el resumen del archivo descargado no coincide con ese valor. Claude Code rechaza la instalación, así que nada cambia en la caché de plugins. La discrepancia tiene tres causas posibles:

4462 4524 

4463* El archivo en la URL cambió después de que el autor calculó el pin4525* El archivo en la URL cambió después de que el autor calculó el valor fijado

4464* El autor ingresó el resumen incorrecto en la entrada del marketplace4526* El autor ingresó un resumen incorrecto en la entrada del marketplace

4465* La URL sirve un archivo diferente al que el autor fijó4527* La URL sirve un archivo distinto del que el autor fijó

4466 4528 

4467```text theme={null}4529```text theme={null}

4468Plugin archive integrity check failed for https://artifacts.example.com/claude-plugins/my-plugin.zip: expected sha256 6bfa50e3d2e00c052b46abe51fff89346ac803e45771f76dcf6df1ab74cca5e1, got ac52220c0914ef8ca6a602e4a7362f88d30fb021110f72a6d15b68c3fe7df2b7. The archive was not installed. Verify the sha256 in the marketplace entry, or that the URL serves the intended file.4530Plugin archive integrity check failed for https://artifacts.example.com/claude-plugins/my-plugin.zip: expected sha256 6bfa50e3d2e00c052b46abe51fff89346ac803e45771f76dcf6df1ab74cca5e1, got ac52220c0914ef8ca6a602e4a7362f88d30fb021110f72a6d15b68c3fe7df2b7. The archive was not installed. Verify the sha256 in the marketplace entry, or that the URL serves the intended file.


4470 4532 

4471**Qué hacer:**4533**Qué hacer:**

4472 4534 

4473* Si publica el plugin, recalcule el resumen del archivo exacto que sirve la URL, por ejemplo con `shasum -a 256 my-plugin.zip`, o `Get-FileHash -Algorithm SHA256 my-plugin.zip` en PowerShell, y actualice el `sha256` en la entrada del marketplace4535* Si publicas el plugin, vuelve a calcular el resumen del archivo exacto que sirve la URL, por ejemplo con `shasum -a 256 my-plugin.zip`, o `Get-FileHash -Algorithm SHA256 my-plugin.zip` en PowerShell, y actualiza el `sha256` en la entrada del marketplace

4474* Si instala el plugin, ejecute `/plugin marketplace update <name>` para actualizar el catálogo en caso de que la entrada se haya corregido, luego reintente la instalación4536* Si instalas el plugin, ejecuta `/plugin marketplace update <name>` para actualizar el catálogo por si la entrada se corrigió, y luego reintenta la instalación

4475* Si los resúmenes aún no coinciden después de una actualización, pregunte al propietario del marketplace qué archivo fijaron antes de instalar4537* Si los resúmenes siguen sin coincidir después de la actualización, pregunta al propietario del marketplace qué archivo fijó antes de instalar

4476 4538 

4477### Path escapes plugin directory4539### Path escapes plugin directory

4478 4540 

4479Una de las rutas de componentes del plugin conduce fuera del directorio del plugin o no se pudo confirmar que esté dentro de él, por lo que Claude Code descarta esa ruta y carga el resto del plugin. Para una ruta que el plugin declara en `plugin.json` o en su [entrada de marketplace](https://code.claude.com/docs/es/plugins/marketplace-reference.md#plugin-entries), el nombre del componente en el mensaje, como `commands` o `hooks`, indica el campo que declaró la ruta.4541Una de las rutas de componentes del plugin lleva fuera del directorio del plugin o no se pudo confirmar que esté dentro de él, así que Claude Code descarta esa ruta y carga el resto del plugin. Para una ruta que el plugin declara en `plugin.json` o en su [entrada del marketplace](https://code.claude.com/docs/es/plugins/marketplace-reference.md#plugin-entries), el nombre del componente en el mensaje, como `commands` o `hooks`, indica el campo que declaró la ruta.

4480 4542 

4481```text theme={null}4543```text theme={null}

4482commands path escapes plugin directory: ./../shared.md4544commands path escapes plugin directory: ./../shared.md


4484 4546 

4485En la salida del comando `claude plugin`, el mismo error dice `Path escapes plugin directory: ./../shared.md (commands)`.4547En la salida del comando `claude plugin`, el mismo error dice `Path escapes plugin directory: ./../shared.md (commands)`.

4486 4548 

4487Claude Code rechaza tanto una ruta que apunta fuera del plugin tal como está escrita, como `../shared-utils`, como un enlace simbólico que conduce fuera del plugin y no es uno que las [reglas de enlace simbólico del marketplace](https://code.claude.com/docs/es/plugins/host-marketplace.md#share-files-within-a-marketplace-with-symlinks) permitan. Para un enlace simbólico, el mensaje también dice dónde se resuelve la ruta:4549Claude Code rechaza tanto una ruta que apunta fuera del plugin tal como está escrita, como `../shared-utils`, como un enlace simbólico que lleva fuera del plugin y que no está permitido por las [reglas de enlaces simbólicos del marketplace](https://code.claude.com/docs/es/plugins/host-marketplace.md#share-files-within-a-marketplace-with-symlinks). Para un enlace simbólico, el mensaje también indica adónde se resuelve la ruta:

4488 4550 

4489```text theme={null}4551```text theme={null}

4490commands path escapes plugin directory: ./commands/deploy.md — it resolves to /home/user/shared/deploy.md, outside the plugin directory4552commands path escapes plugin directory: ./commands/deploy.md — it resolves to /home/user/shared/deploy.md, outside the plugin directory

4491```4553```

4492 4554 

4493Un mensaje que da la ruta completa de uno de los archivos propios de un plugin de marketplace, como `hooks/hooks.json`, significa que Claude Code omitió ese archivo. Eso ocurre cuando Claude Code no puede confirmar que el archivo está dentro del plugin o, para un plugin en un [marketplace local](https://code.claude.com/docs/es/plugins/loading.md#in-place-and-copied-plugins), dentro de ese marketplace. El mensaje informa cada uno de estos archivos bajo el nombre de componente indicado:4555Un mensaje que da la ruta completa de uno de los propios archivos de un plugin de marketplace, como `hooks/hooks.json`, significa que Claude Code omitió ese archivo. Cuando Claude Code no puede confirmar que el archivo está dentro del plugin, o dentro de su marketplace en el caso de un plugin en un [marketplace local](https://code.claude.com/docs/es/plugins/loading.md#in-place-and-copied-plugins), omite el archivo. El mensaje informa estos archivos con el nombre de componente indicado:

4494 4556 

4495* `hooks/hooks.json`: `hooks`4557* `hooks/hooks.json`: `hooks`

4496* `monitors/monitors.json`: `monitors`4558* `monitors/monitors.json`: `monitors`

4497* `settings.json`: `settings`

4498* `SKILL.md` en la raíz del plugin: `skills`4559* `SKILL.md` en la raíz del plugin: `skills`

4499 4560 

4500Por ejemplo, este mensaje corresponde a un `hooks/hooks.json` que se resuelve fuera tanto del plugin como de su marketplace local:4561Por ejemplo, este mensaje corresponde a un `hooks/hooks.json` que se resuelve fuera tanto del plugin como de su marketplace local:


4503hooks path escapes plugin directory: /home/user/my-marketplace/my-plugin/hooks/hooks.json — it resolves to /home/user/dotfiles/hooks.json, outside the plugin directory and its marketplace directory4564hooks path escapes plugin directory: /home/user/my-marketplace/my-plugin/hooks/hooks.json — it resolves to /home/user/dotfiles/hooks.json, outside the plugin directory and its marketplace directory

4504```4565```

4505 4566 

4506En macOS y Linux, Claude Code también rechaza una ruta de componente que contenga una barra invertida en cualquier lugar, incluso cuando la ruta permanece dentro del plugin. Un plugin cuyas rutas de componentes utilizan separadores de estilo Windows se carga en Windows y activa este rechazo en las otras plataformas:4567En macOS y Linux, Claude Code también rechaza una ruta de componente que contenga una barra invertida en cualquier parte, incluso cuando la ruta permanece dentro del plugin. Un plugin cuyas rutas de componentes usan separadores al estilo de Windows se carga en Windows y provoca este rechazo en las demás plataformas:

4507 4568 

4508```text theme={null}4569```text theme={null}

4509commands path escapes plugin directory: ./commands\deploy.md — its path contains a backslash, which is not resolved reliably on this platform4570commands path escapes plugin directory: ./commands\deploy.md — its path contains a backslash, which is not resolved reliably on this platform

4510```4571```

4511 4572 

4512Antes de v2.1.251, Claude Code cargaba una ruta `commands` declarada en una entrada de marketplace incluso cuando apuntaba fuera del directorio del plugin.4573Antes de la v2.1.251, Claude Code cargaba una ruta `commands` declarada en una entrada del marketplace incluso cuando apuntaba fuera del directorio del plugin.

4513 4574 

4514Antes de v2.1.257, la verificación de las rutas que declara el plugin solo miraba la forma en que estaba escrita la ruta, no adónde conducía un enlace simbólico.4575Antes de la v2.1.257, la comprobación de las rutas que declara el plugin solo miraba cómo estaba escrita la ruta, no adónde lleva un enlace simbólico.

4515 4576 

4516**Qué hacer:**4577**Qué hacer:**

4517 4578 

4518* Si instalaste el plugin y no lo mantienes, informa el mensaje a su autor4579* Si instalaste el plugin y no lo mantienes, informa el mensaje a su autor

4519* Para una ruta que declara el plugin, mueve el archivo referenciado dentro del directorio del plugin y haz que la ruta apunte a él con una ruta relativa `./`4580* Para una ruta que declara el plugin, mueve el archivo referenciado dentro del directorio del plugin y haz que la ruta apunte a él con una ruta relativa `./`

4520* Si la ruta, o una carpeta por encima de ella dentro del plugin, es un enlace simbólico que conduce fuera del plugin, reemplaza el enlace simbólico con una copia de aquello a lo que apunta4581* Si la ruta, o una carpeta superior a ella dentro del plugin, es un enlace simbólico que lleva fuera del plugin, reemplaza el enlace simbólico por una copia de aquello a lo que apunta

4521* Si el mensaje dice que una ruta que declara el plugin contiene una barra invertida, escribe la ruta con barras diagonales, por ejemplo `./commands/deploy.md`4582* Si el mensaje dice que una ruta que declara el plugin contiene una barra invertida, escribe la ruta con barras diagonales, por ejemplo `./commands/deploy.md`

4522* Si el mensaje termina con `EACCES`, restaura tu permiso de ejecución en cada directorio que conduce al archivo o carpeta que indica la ruta. Revisa los directorios por encima de la ruta y luego sigue cada enlace simbólico que encuentres y revisa los directorios que conducen a donde apunta. Para cualquier otro código de error, búscalo en las [causas y pasos para una ruta que no se pudo verificar](#path-could-not-be-checked).4583* Si el mensaje termina con `EACCES`, restablece tu permiso de ejecución en cada directorio que lleva al archivo o carpeta que indica la ruta. Revisa los directorios por encima de la ruta, luego sigue cada enlace simbólico que encuentres y revisa los directorios que llevan adonde apunta. Para cualquier otro código de error, búscalo en las [causas y pasos para una ruta que no se pudo comprobar](#path-could-not-be-checked).

4523* Para compartir archivos con otros plugins en el mismo marketplace, vincúlelos con un enlace simbólico dentro del directorio del plugin, siguiendo las [reglas de enlace simbólico](https://code.claude.com/docs/es/plugins/host-marketplace.md#share-files-within-a-marketplace-with-symlinks)4584* Para compartir archivos con otros plugins del mismo marketplace, vincúlalos con un enlace simbólico dentro del directorio del plugin, siguiendo las [reglas de enlaces simbólicos](https://code.claude.com/docs/es/plugins/host-marketplace.md#share-files-within-a-marketplace-with-symlinks)

4524 4585 

4525### Server file path not read4586### No se leyó la ruta del archivo de servidor

4526 4587 

4527El mensaje `path not read` significa que Claude Code no leyó un archivo de servidor MCP o LSP que nombra un plugin, debido a la ruta del archivo. El resto del plugin se carga, sin los servidores que define el archivo.4588El mensaje `path not read` significa que Claude Code no leyó un archivo de servidor MCP o LSP que un plugin indica, debido a la ruta del archivo. El resto del plugin se carga, sin los servidores que define el archivo.

4528 4589 

4529Una parte `..` cuenta incluso cuando la ruta permanece dentro del plugin, como en este ejemplo:4590Una parte `..` cuenta incluso cuando la ruta permanece dentro del plugin, como en este ejemplo:

4530 4591 


4535**Qué hacer:**4596**Qué hacer:**

4536 4597 

4537* Si instalaste el plugin y no lo mantienes, informa el mensaje a su autor4598* Si instalaste el plugin y no lo mantienes, informa el mensaje a su autor

4538* Si mantienes el plugin, conserva el archivo de servidor dentro del directorio del plugin. Nómbralo en el manifiesto o en la entrada de marketplace con una ruta que comience con `./` y no tenga `..`, por ejemplo `./servers/x.json`4599* Si mantienes el plugin, conserva el archivo de servidor dentro del directorio del plugin. Indícalo en el manifiesto o en la entrada del marketplace con una ruta que comience con `./` y no tenga `..`, por ejemplo `./servers/x.json`

4539* Para compartir un archivo de servidor entre plugins del mismo marketplace, vincula el archivo en cada plugin con un enlace simbólico, siguiendo las [reglas de enlaces simbólicos](https://code.claude.com/docs/es/plugins/host-marketplace.md#share-files-within-a-marketplace-with-symlinks)4600* Para compartir un archivo de servidor entre plugins del mismo marketplace, vincula el archivo en cada plugin con un enlace simbólico, siguiendo las [reglas de enlaces simbólicos](https://code.claude.com/docs/es/plugins/host-marketplace.md#share-files-within-a-marketplace-with-symlinks)

4540 4601 

4541### Plugin not loaded: its manifest was not read4602### Plugin not loaded: its manifest was not read

4542 4603 

4543Claude Code no pudo confirmar que el [manifiesto](https://code.claude.com/docs/es/plugins/manifest-reference.md) de un plugin de marketplace en `.claude-plugin/plugin.json` está dentro del plugin, por lo que no carga nada de ese plugin. Para un plugin en un [marketplace local](https://code.claude.com/docs/es/plugins/loading.md#in-place-and-copied-plugins), Claude Code tampoco pudo confirmar que el manifiesto está dentro de ese marketplace. El mensaje aparece en la pestaña **Errors** de `/plugin`, y el motivo al final indica lo que encontró Claude Code.4604Claude Code no pudo confirmar que el [manifiesto](https://code.claude.com/docs/es/plugins/manifest-reference.md) de un plugin de marketplace en `.claude-plugin/plugin.json` esté dentro del plugin, así que no carga nada de ese plugin. Para un plugin en un [marketplace local](https://code.claude.com/docs/es/plugins/loading.md#in-place-and-copied-plugins), Claude Code tampoco pudo confirmar que el manifiesto esté dentro de ese marketplace. El mensaje aparece en la pestaña **Errors** de `/plugin`, y el motivo al final indica lo que encontró Claude Code.

4544 4605 

4545Por ejemplo, este mensaje corresponde a un plugin en un marketplace local cuya carpeta `.claude-plugin` es un enlace simbólico que conduce fuera del marketplace:4606Por ejemplo, este mensaje corresponde a un plugin en un marketplace local cuya carpeta `.claude-plugin` es un enlace simbólico que lleva fuera del marketplace:

4546 4607 

4547```text theme={null}4608```text theme={null}

4548Plugin not loaded: its manifest /home/user/my-marketplace/my-plugin/.claude-plugin/plugin.json was not read, because it resolves to /home/user/dotfiles/my-plugin/.claude-plugin/plugin.json, outside the plugin directory and its marketplace directory4609Plugin not loaded: its manifest /home/user/my-marketplace/my-plugin/.claude-plugin/plugin.json was not read, because it resolves to /home/user/dotfiles/my-plugin/.claude-plugin/plugin.json, outside the plugin directory and its marketplace directory


4550 4611 

4551**Qué hacer:**4612**Qué hacer:**

4552 4613 

4553* Si el motivo termina con `EACCES`, restaura tu permiso de ejecución en cada directorio que conduce al manifiesto. Revisa los directorios por encima del manifiesto y luego sigue cada enlace simbólico que encuentres y revisa los directorios que conducen a donde apunta. Para cualquier otro código de error, búscalo en las [causas y pasos para una ruta que no se pudo verificar](#path-could-not-be-checked).4614* Si el motivo termina con `EACCES`, restablece tu permiso de ejecución en cada directorio que lleva al manifiesto. Revisa los directorios por encima del manifiesto, luego sigue cada enlace simbólico que encuentres y revisa los directorios que llevan adonde apunta. Para cualquier otro código de error, búscalo en las [causas y pasos para una ruta que no se pudo comprobar](#path-could-not-be-checked).

4554* Si mantienes el plugin y el motivo indica dónde se resuelve el manifiesto, la carpeta `.claude-plugin` o el propio `plugin.json` es un enlace simbólico que conduce allí. Reemplaza ese enlace con una copia de aquello a lo que apunta.4615* Si mantienes el plugin y el motivo indica adónde se resuelve el manifiesto, la carpeta `.claude-plugin` o el propio `plugin.json` es un enlace simbólico que lleva allí. Reemplaza ese enlace por una copia de aquello a lo que apunta.

4555* Si instalaste el plugin y no lo mantienes, informa el mensaje a su autor4616* Si instalaste el plugin y no lo mantienes, informa el mensaje a su autor

4556 4617 

4557### Path could not be checked4618### La ruta no se pudo comprobar

4558 4619 

4559Claude Code le preguntó al sistema operativo si existe una ruta de plugin y obtuvo un error que no sea "no encontrado", por lo que no carga lo que la ruta nombra. Cuánto del plugin se carga depende de qué ruta falló:4620Claude Code preguntó al sistema operativo si existe una ruta del plugin y obtuvo un error distinto de "no encontrado", así que no carga lo que indica la ruta. Cuánto del plugin se carga depende de qué ruta falló:

4560 4621 

4561* Una de las [ubicaciones de componentes predeterminadas](https://code.claude.com/docs/es/plugins/manifest-reference.md#standard-layout) de un plugin, como la carpeta `skills/`, el archivo `monitors/monitors.json`, o un [`SKILL.md` en la raíz del plugin](https://code.claude.com/docs/es/plugins/components#skills): los otros componentes del plugin aún se cargan4622* Una de las [ubicaciones predeterminadas de componentes](https://code.claude.com/docs/es/plugins/manifest-reference.md#standard-layout) de un plugin, como la carpeta `skills/`, el archivo `monitors/monitors.json` o un [`SKILL.md` en la raíz del plugin](https://code.claude.com/docs/es/plugins/components#skills): los demás componentes del plugin se siguen cargando

4562* El directorio del plugin en sí: nada de ese plugin se carga4623* El propio directorio del plugin: no se carga nada de ese plugin

4563 4624 

4564No ve este error para una ruta que no existe en absoluto. En `/plugin`, el error aparece bajo el plugin y nombra la ruta y el código que devolvió el sistema operativo:4625No ves este error para una ruta que no existe en absoluto. En `/plugin`, el error aparece bajo el plugin e indica la ruta y el código que devolvió el sistema operativo:

4565 4626 

4566```text theme={null}4627```text theme={null}

4567skills path could not be checked: /home/user/my-plugin/skills (ELOOP)4628skills path could not be checked: /home/user/my-plugin/skills (ELOOP)


4569 4630 

4570En `claude plugin list`, el mismo error dice `Path not found: /home/user/my-plugin/skills (skills, ELOOP)`.4631En `claude plugin list`, el mismo error dice `Path not found: /home/user/my-plugin/skills (skills, ELOOP)`.

4571 4632 

4572Las causas que producen este error incluyen:4633Entre las causas que producen este error están:

4573 4634 

4574* `ELOOP`: un enlace simbólico en la ruta apunta a sí mismo o forma un bucle4635* `ELOOP`: un enlace simbólico en la ruta apunta a sí mismo o forma un bucle

4575* `EIO` o `ESTALE`: la ruta está en un montaje de red que está roto o obsoleto4636* `EIO` o `ESTALE`: la ruta está en un montaje de red roto u obsoleto

4576* `EACCES`: uno de los directorios por encima de la ruta le niega permiso para atravesarlo4637* `EACCES`: uno de los directorios por encima de la ruta te niega el permiso para recorrerlo

4577 4638 

4578**Qué hacer:**4639**Qué hacer:**

4579 4640 

4580* Reemplace un enlace simbólico que apunta a sí mismo con una carpeta real, o elimínelo4641* Reemplaza un enlace simbólico que apunta a sí mismo por una carpeta real, o elimínalo

4581* Si la ruta está en un montaje de red, remonte el recurso compartido4642* Si la ruta está en un montaje de red, vuelve a montar el recurso compartido

4582* Si el código es `EACCES`, restaure su permiso de ejecución en los directorios por encima de la ruta4643* Si el código es `EACCES`, restablece tu permiso de ejecución en los directorios por encima de la ruta

4583* Ejecute `/reload-plugins` después de corregir la ruta, o reinicie Claude Code, para cargar el plugin o componente4644* Ejecuta `/reload-plugins` después de corregir la ruta, o reinicia Claude Code, para cargar el plugin o componente

4584 4645 

4585Antes de v2.1.265, Claude Code trataba una carpeta de componentes predeterminada que no podía verificar como ausente y cargaba el plugin sin ese componente, sin error.4646Antes de la v2.1.265, Claude Code trataba una carpeta de componente predeterminada que no podía comprobar como ausente y cargaba el plugin sin ese componente, sin mostrar ningún error.

4586 4647 

4587### Marketplace entry path does not stay inside the marketplace directory4648### La ruta de la entrada del marketplace no permanece dentro del directorio del marketplace

4588 4649 

4589La [entrada de marketplace](https://code.claude.com/docs/es/plugins/marketplace-reference.md#plugin-entries) del plugin declara una ruta de fuente que Claude Code no puede resolver a una ubicación dentro del directorio del marketplace en sí, por lo que el plugin no se instala ni se carga. La negativa cubre:4650La [entrada del marketplace](https://code.claude.com/docs/es/plugins/marketplace-reference.md#plugin-entries) del plugin declara una ruta de origen que Claude Code no puede resolver a una ubicación dentro del propio directorio del marketplace, así que el plugin no se instala ni se carga. El rechazo abarca:

4590 4651 

4591* Una ruta de entrada que es absoluta, sube fuera del marketplace con `..`, o está escrita como una ruta de red4652* Una ruta de entrada que es absoluta, sale del marketplace con `..` o está escrita como una ruta de red

4592* En macOS y Linux, una ruta de entrada que contiene una barra invertida en cualquier lugar después del `./` inicial4653* En macOS y Linux, una ruta de entrada que contiene una barra invertida en cualquier parte después del `./` inicial

4593* Una entrada en un marketplace obtenido de una fuente remota, como git o una URL, que alcanza su destino a través de un enlace simbólico que se resuelve fuera del directorio del marketplace4654* Una entrada en un marketplace obtenido desde un origen remoto, como git o una URL, que llega a su destino a través de un enlace simbólico que se resuelve fuera del directorio del marketplace

4594* Una entrada relativa en un marketplace agregado desde una URL directa a su `marketplace.json`: Claude Code descarga solo ese archivo, por lo que no existen archivos de plugin locales para que la ruta nombre. Consulte [Plugins with relative paths fail in URL-based marketplaces](https://code.claude.com/docs/es/plugins/troubleshooting.md#plugins-with-relative-paths-fail-in-url-based-marketplaces)4655* Una entrada relativa en un marketplace agregado desde una URL directa a su `marketplace.json`: Claude Code descarga solo ese archivo, así que no existen archivos locales del plugin que la ruta pueda indicar. Consulta [Los plugins con rutas relativas fallan en marketplaces basados en URL](https://code.claude.com/docs/es/plugins/troubleshooting.md#plugins-with-relative-paths-fail-in-url-based-marketplaces)

4595 4656 

4596`claude plugin install` informa la negativa así:4657`claude plugin install` informa el rechazo así:

4597 4658 

4598```text theme={null}4659```text theme={null}

4599Cannot install my-plugin@my-marketplace: its marketplace entry path does not stay inside the marketplace directory (an absolute, climbing, network-shaped, backslash-containing or link-traversing entry, an entry of a fetched marketplace that resolves or opens outside its tree — or a relative entry in a url-catalog marketplace, which has no local directory)4660Cannot install my-plugin@my-marketplace: its marketplace entry path does not stay inside the marketplace directory (an absolute, climbing, network-shaped, backslash-containing or link-traversing entry, an entry of a fetched marketplace that resolves or opens outside its tree — or a relative entry in a url-catalog marketplace, which has no local directory)

4600```4661```

4601 4662 

4602Cuando la entrada de un plugin ya instalado falla la misma verificación, `claude plugin list` muestra el plugin como `failed to load` con:4663Cuando la entrada de un plugin ya instalado no supera la misma comprobación, `claude plugin list` muestra el plugin como `failed to load` con:

4603 4664 

4604```text theme={null}4665```text theme={null}

4605Plugin source path refused: ./my-plugin does not stay inside its marketplace directory. Check that the marketplace entry has a plain relative path.4666Plugin source path refused: ./my-plugin does not stay inside its marketplace directory. Check that the marketplace entry has a plain relative path.


4607 4668 

4608**Qué hacer:**4669**Qué hacer:**

4609 4670 

4610* Si mantiene el marketplace, escriba la `source` de la entrada como una ruta relativa simple con barras diagonales, como `./plugins/my-plugin`, y mantenga cualquier enlace simbólico que cruce apuntado dentro del directorio del marketplace4671* Si mantienes el marketplace, escribe el `source` de la entrada como una ruta relativa simple con barras diagonales, como `./plugins/my-plugin`, y mantén cualquier enlace simbólico que atraviese apuntando dentro del directorio del marketplace

4611* Si agregó el marketplace desde una URL directa, las entradas relativas no pueden resolverse. Pida al autor del marketplace que use [otra fuente de plugin](https://code.claude.com/docs/es/plugins/marketplace-reference.md#plugin-sources), o agregue el marketplace desde su repositorio de git en su lugar4672* Si agregaste el marketplace desde una URL directa, las entradas relativas no se pueden resolver. Pide al autor del marketplace que use [otro origen de plugin](https://code.claude.com/docs/es/plugins/marketplace-reference.md#plugin-sources), o agrega el marketplace desde su repositorio git

4612 4673 

4613### Failed to load marketplace configuration4674### Failed to load marketplace configuration

4614 4675 

4615Claude Code mantiene los marketplaces de plugins que ha agregado en un archivo de registro en `~/.claude/plugins/known_marketplaces.json`. Un comando de plugin que necesita el registro, como `claude plugin install`, falla con uno de dos mensajes cuando Claude Code no puede usar el archivo:4676Claude Code guarda los marketplaces de plugins que agregaste en un archivo de registro en `~/.claude/plugins/known_marketplaces.json`. Un comando de plugin que necesita el registro, como `claude plugin install`, falla con uno de dos mensajes cuando Claude Code no puede usar el archivo:

4616 4677 

4617* `Failed to load marketplace configuration`: el archivo no es JSON válido, o no se puede leer. Un archivo vacío falla de esta manera también.4678* `Failed to load marketplace configuration`: el archivo existe, pero no es JSON válido o no se puede leer. Un archivo vacío también falla de esta manera.

4618* `Marketplace configuration file is corrupted`: el archivo es JSON válido pero su contenido no coincide con el esquema del registro.4679* `Marketplace configuration file is corrupted`: el archivo es JSON válido, pero su contenido no coincide con el esquema del registro.

4619 4680 

4620Con un archivo vacío, `claude plugin install` informa:4681Con un archivo vacío, `claude plugin install` informa:

4621 4682 


4623✘ Failed to install plugin "my-plugin": Failed to load marketplace configuration: JSON Parse error: Unexpected EOF4684✘ Failed to install plugin "my-plugin": Failed to load marketplace configuration: JSON Parse error: Unexpected EOF

4624```4685```

4625 4686 

4626Antes de v2.1.246, `claude plugin install` no informaba esta falla.4687Antes de la v2.1.246, `claude plugin install` no informaba este fallo.

4627 4688 

4628**Qué hacer:**4689**Qué hacer:**

4629 4690 

4630* Abra `~/.claude/plugins/known_marketplaces.json` y repare el JSON, o corrija las entradas que el mensaje nombra como no coincidentes con el esquema del registro4691* Abre `~/.claude/plugins/known_marketplaces.json` y repara el JSON, o corrige las entradas que el mensaje indica que no coinciden con el esquema del registro

4631* Si no puede repararlo, elimine el archivo o reemplace su contenido con `{}`, luego vuelva a agregar cada marketplace con `claude plugin marketplace add <source>`. Claude Code vuelve a registrar los marketplaces que su configuración de usuario o administrada declara en [`extraKnownMarketplaces`](https://code.claude.com/docs/es/settings-reference#extraknownmarketplaces) la próxima vez que lo inicie en una carpeta que haya confiado.4692* Si no puedes repararlo, elimina el archivo o reemplaza su contenido por `{}`, y luego vuelve a agregar cada marketplace con `claude plugin marketplace add <source>`. Claude Code vuelve a registrar los marketplaces que tu configuración de usuario o tu configuración administrada declaran en [`extraKnownMarketplaces`](https://code.claude.com/docs/es/settings-reference#extraknownmarketplaces) la próxima vez que lo inicies en una carpeta en la que hayas confiado.

4632 4693 

4633### Plugin is required by your organization4694### El plugin es obligatorio en tu organización

4634 4695 

4635Ejecutó `claude plugin disable`, o utilizó la pestaña **Installed** de `/plugin`, para desactivar un [plugin sincronizado desde claude.ai](https://code.claude.com/docs/es/plugins/loading.md#synced-plugins) que su organización marca como requerido:4696Ejecutaste `claude plugin disable`, o usaste la pestaña **Installed** de `/plugin`, para desactivar un [plugin sincronizado desde claude.ai](https://code.claude.com/docs/es/plugins/loading.md#synced-plugins) que tu organización marca como obligatorio:

4636 4697 

4637```text theme={null}4698```text theme={null}

4638Plugin "<name>@synced" is required by your organization and can't be disabled here. Contact your admin to change it.4699Plugin "<name>@synced" is required by your organization and can't be disabled here. Contact your admin to change it.

4639```4700```

4640 4701 

4641Claude Code no guarda nada y el plugin permanece habilitado.4702Claude Code no guarda nada y el plugin permanece activado.

4642 4703 

4643Cuando intenta desactivar un plugin del que depende un plugin requerido, Claude Code rechaza de la misma manera, con un mensaje que nombra el plugin requerido que lo necesita.4704Cuando intentas desactivar un plugin del que depende un plugin obligatorio, Claude Code lo rechaza de la misma manera, con un mensaje que indica el plugin obligatorio que lo necesita.

4644 4705 

4645**Qué hacer:**4706**Qué hacer:**

4646 4707 

4647* Pida a un administrador de su organización claude.ai que cambie el estado requerido del plugin en claude.ai4708* Pide a un administrador de tu organización de claude.ai que cambie el estado de obligatorio del plugin en claude.ai

4648 4709 

4649### Plugin was not uninstalled4710### El plugin no se desinstaló

4650 4711 

4651Ejecutó [`claude plugin uninstall`](https://code.claude.com/docs/es/plugins/cli-reference#plugin-uninstall), o eligió **Uninstall** en la pestaña **Installed** de `/plugin`, y la desinstalación se detuvo con un mensaje que comienza `"<plugin>" was not uninstalled:`. Si el texto después de ese dos puntos comienza con `installed_plugins.json` en lugar de nombrar un archivo de configuración, la causa es contenido en `installed_plugins.json` que esta versión de Claude Code no puede leer. Para esa forma, consulte [`installed_plugins.json` holds a record this version can't read](https://code.claude.com/docs/es/plugins/troubleshooting#installed-plugins-json-holds-a-record-this-version-cannot-read).4712Ejecutaste [`claude plugin uninstall`](https://code.claude.com/docs/es/plugins/cli-reference#plugin-uninstall), o elegiste **Uninstall** en la pestaña **Installed** de `/plugin`, y la desinstalación se detuvo con un mensaje que comienza con `"<plugin>" was not uninstalled:`. Si el texto después de esos dos puntos comienza con `installed_plugins.json` en lugar de indicar un archivo de configuración, la causa es contenido en `installed_plugins.json` que esta versión de Claude Code no puede leer. Para esa forma, consulta [`installed_plugins.json` contiene un registro que esta versión no puede leer](https://code.claude.com/docs/es/plugins/troubleshooting#installed-plugins-json-holds-a-record-this-version-cannot-read).

4652 4713 

4653Cuando Claude Code eliminó la entrada del plugin de `enabledPlugins` y leyó los archivos de configuración de ese ámbito nuevamente, ya sea el plugin seguía activado allí, o un archivo que podría activarlo no se pudo leer o verificar. Eliminar las opciones guardadas del plugin, secretos y datos mientras una entrada de configuración podría activarlo nuevamente los perdería, por lo que la desinstalación se detiene en su lugar: el plugin permanece instalado y nada que guardó se elimina.4714Cuando Claude Code eliminó la entrada del plugin de `enabledPlugins` y volvió a leer los archivos de configuración de ese alcance, o bien el plugin seguía activado allí, o bien un archivo que podía activarlo no se pudo leer ni comprobar. Borrar las opciones, los secretos y los datos guardados del plugin mientras una entrada de configuración podía volver a activarlo los haría perder, así que la desinstalación se detiene: el plugin sigue instalado y no se borra nada de lo que guardó.

4654 4715 

4655```text theme={null}4716```text theme={null}

4656✘ Failed to uninstall plugin "formatter": "formatter" was not uninstalled: it is still switched on in /home/user/project/.claude/settings.local.json, although the settings change reported no error. It is still installed. Take it out of "enabledPlugins" in that file yourself, then uninstall it again.4717✘ Failed to uninstall plugin "formatter": "formatter" was not uninstalled: it is still switched on in /home/user/project/.claude/settings.local.json, although the settings change reported no error. It is still installed. Take it out of "enabledPlugins" in that file yourself, then uninstall it again.

4657```4718```

4658 4719 

4659El medio del mensaje nombra el archivo y la causa:4720La parte central del mensaje indica el archivo y la causa:

4660 4721 

4661* `it is still switched on in <file>, although the settings change reported no error`: la escritura de configuración informó éxito pero la entrada aún está allí cuando se lee el archivo nuevamente4722* `it is still switched on in <file>, although the settings change reported no error`: la escritura de la configuración informó éxito, pero la entrada sigue ahí cuando se vuelve a leer el archivo

4662* `it is still switched on in <file>, and the settings change failed (<error>)`: el archivo no se pudo guardar, por la razón entre paréntesis4723* `it is still switched on in <file>, and the settings change failed (<error>)`: el archivo no se pudo guardar, por el motivo entre paréntesis

4663* `<file> is there and could not be read`: el archivo existe pero no se pudo leer como configuración, por ejemplo porque no es JSON válido, por lo que aún puede activar el plugin4724* `<file> is there and could not be read`: el archivo existe, pero no se pudo leer como configuración, por ejemplo porque no es JSON válido, así que todavía podría activar el plugin

4664* `<file> (not read: it is on a network path or is a link to one, or could not be checked)`: Claude Code no leyó el archivo de configuración del proyecto o local porque el archivo, o la carpeta `.claude` que lo contiene, es un enlace que conduce a una ubicación de red, o porque no pudo examinar esa ruta4725* `<file> (not read: it is on a network path or is a link to one, or could not be checked)`: Claude Code no leyó el archivo de configuración del proyecto o local porque el archivo, o la carpeta `.claude` que lo contiene, es un enlace que lleva a una ubicación de red, o porque no pudo examinar esa ruta

4665 4726 

4666`claude plugin uninstall` sale con código 1, y con `--json` el resultado lleva `failureCode: "settings_still_on"`. `/plugin` muestra el mismo mensaje.4727`claude plugin uninstall` termina con código 1, y con `--json` el resultado incluye `failureCode: "settings_still_on"`. `/plugin` muestra el mismo mensaje.

4667 4728 

4668**Qué hacer:**4729**Qué hacer:**

4669 4730 

4670* Siga la última oración del mensaje: repare o reemplace el archivo de configuración que nombra, o elimine la entrada del plugin de `enabledPlugins` en ese archivo usted mismo, luego ejecute la desinstalación nuevamente4731* Sigue la última oración del mensaje: repara o reemplaza el archivo de configuración que indica, o elimina tú mismo la entrada del plugin de `enabledPlugins` en ese archivo, y luego vuelve a ejecutar la desinstalación

4671 4732 

4672### Skipping connection (recent failure cached; retries automatically in 15 min, or edit the plugin config to retry now)4733### Skipping connection (recent failure cached; retries automatically in 15 min, or edit the plugin config to retry now)

4673 4734 

4674Este mensaje significa que Claude Code no inició un [servidor MCP stdio que proporciona un plugin](https://code.claude.com/docs/es/mcp.md#plugin-provided-mcp-servers), porque una conexión a ese servidor falló menos de 15 minutos antes:4735Este mensaje significa que Claude Code no inició un [servidor MCP proporcionado por un plugin](https://code.claude.com/docs/es/mcp.md#plugin-provided-mcp-servers) de tipo stdio, porque una conexión a ese servidor falló hace menos de 15 minutos:

4675 4736 

4676```text theme={null}4737```text theme={null}

4677Skipping connection (recent failure cached; retries automatically in 15 min, or edit the plugin config to retry now)4738Skipping connection (recent failure cached; retries automatically in 15 min, or edit the plugin config to retry now)


4686* **En una sesión interactiva**: ejecuta `/mcp`, selecciona el servidor y selecciona **Reconnect**4747* **En una sesión interactiva**: ejecuta `/mcp`, selecciona el servidor y selecciona **Reconnect**

4687* **En una aplicación de [Agent SDK](https://code.claude.com/docs/es/agent-sdk/overview.md)**: llama a [`reconnectMcpServer()`](https://code.claude.com/docs/es/agent-sdk/typescript#methods) en TypeScript o a [`ClaudeSDKClient.reconnect_mcp_server()`](https://code.claude.com/docs/es/agent-sdk/python#methods) en Python con el nombre del servidor4748* **En una aplicación de [Agent SDK](https://code.claude.com/docs/es/agent-sdk/overview.md)**: llama a [`reconnectMcpServer()`](https://code.claude.com/docs/es/agent-sdk/typescript#methods) en TypeScript o a [`ClaudeSDKClient.reconnect_mcp_server()`](https://code.claude.com/docs/es/agent-sdk/python#methods) en Python con el nombre del servidor

4688* **En `claude -p`**: inicia una sesión interactiva que cargue el mismo plugin, en la misma máquina y con la misma cuenta del sistema operativo y el mismo valor de [`CLAUDE_CONFIG_DIR`](https://code.claude.com/docs/es/env-vars) que tus ejecuciones. Vuelve a conectar el servidor allí desde `/mcp`. Una vez que se conecte, Claude Code intenta la conexión en tu próxima ejecución.4749* **En `claude -p`**: inicia una sesión interactiva que cargue el mismo plugin, en la misma máquina y con la misma cuenta del sistema operativo y el mismo valor de [`CLAUDE_CONFIG_DIR`](https://code.claude.com/docs/es/env-vars) que tus ejecuciones. Vuelve a conectar el servidor allí desde `/mcp`. Una vez que se conecte, Claude Code intenta la conexión en tu próxima ejecución.

4689* **Si estás desarrollando el plugin**: cambia `command`, `args` o `env` del servidor en el `.mcp.json` o `plugin.json` del plugin. Claude Code intenta la conexión en la próxima sesión o ejecución de `claude -p` que cargue la entrada modificada.4750* **Si estás desarrollando el plugin**: cambia el `command`, los `args` o el `env` del servidor en el `.mcp.json` o el `plugin.json` del plugin. Claude Code intenta la conexión en la siguiente sesión o ejecución de `claude -p` que cargue la entrada modificada.

4690 4751 

4691El mensaje reemplaza el error de la conexión fallida. Si el nuevo intento también falla, Claude Code informa el error de ese intento en lugar de este mensaje.4752El mensaje reemplaza el error de la conexión fallida. Si el nuevo intento también falla, Claude Code informa el error de ese intento en lugar de este mensaje.

4692 4753 


5481Abriste una [sesión en segundo plano](https://code.claude.com/docs/es/agent-view.md) que terminó mientras el servicio en segundo plano estaba apagado, y [la limpieza de transcripciones](https://code.claude.com/docs/es/settings-reference.md#cleanupperioddays) ha eliminado desde entonces su conversación guardada, por ejemplo después de que la máquina estuvo apagada durante semanas. Abrir una fila así normalmente [reanuda su conversación guardada](https://code.claude.com/docs/es/agent-view.md#sessions-show-as-failed-after-shutdown). Sin nada que reanudar, Claude Code se niega en lugar de volver a ejecutar el prompt original de la sesión sin preguntar:5542Abriste una [sesión en segundo plano](https://code.claude.com/docs/es/agent-view.md) que terminó mientras el servicio en segundo plano estaba apagado, y [la limpieza de transcripciones](https://code.claude.com/docs/es/settings-reference.md#cleanupperioddays) ha eliminado desde entonces su conversación guardada, por ejemplo después de que la máquina estuvo apagada durante semanas. Abrir una fila así normalmente [reanuda su conversación guardada](https://code.claude.com/docs/es/agent-view.md#sessions-show-as-failed-after-shutdown). Sin nada que reanudar, Claude Code se niega en lugar de volver a ejecutar el prompt original de la sesión sin preguntar:

5482 5543 

5483```text theme={null}5544```text theme={null}

5484This session's saved conversation is no longer on disk (it ended while the background service was off, and old transcripts are cleaned up), so there is nothing to resume. `claude rm 7c5dcf5d` deletes the row; `claude respawn 7c5dcf5d` runs its original prompt again instead.5545This session's saved conversation is no longer on disk (it ended while the background service was off, and old transcripts are cleaned up), so there is nothing to resume. `claude rm 7c5dcf5d` removes the row; `claude respawn 7c5dcf5d` runs its original prompt again instead.

5485```5546```

5486 5547 

5487`claude attach <id>` imprime este texto. En agent view, el pie de página es más corto y termina con `ctrl+x deletes the row`.5548`claude attach <id>` imprime este texto. En agent view, el pie de página es más corto y termina con `ctrl+x removes the row`.

5488 5549 

5489**Qué hacer:**5550**Qué hacer:**

5490 5551 


5503 push them and run 'claude rm 7c5dcf5d' again, or discard the worktree and its commits: claude rm 7c5dcf5d --discard-unpushed a1b2c3d000000000000000000000000000000000@0123456789abcdef0123456789abcdef5564 push them and run 'claude rm 7c5dcf5d' again, or discard the worktree and its commits: claude rm 7c5dcf5d --discard-unpushed a1b2c3d000000000000000000000000000000000@0123456789abcdef0123456789abcdef

5504```5565```

5505 5566 

5506Cuando Claude Code no puede resumir los commits, la línea de detalle dice `The worktree has unpushed commits` en su lugar. En [agent view](https://code.claude.com/docs/es/agent-view.md), la fila de la sesión muestra `not deleted` con la misma razón.5567Cuando Claude Code no puede resumir los commits, la línea de detalle dice `The worktree has unpushed commits` en su lugar. En [agent view](https://code.claude.com/docs/es/agent-view.md), la fila de la sesión muestra `not removed` con la misma razón.

5507 5568 

5508Los commits en un remoto no bloquean la eliminación. Tampoco los commits en la copia local de la rama predeterminada de tu remoto `origin`, siempre que esa rama esté activa en tu checkout principal, es decir, el propio directorio del repositorio en lugar de un worktree.5569Los commits en un remoto no bloquean la eliminación. Tampoco los commits en la copia local de la rama predeterminada de tu remoto `origin`, siempre que esa rama esté activa en tu checkout principal, es decir, el propio directorio del repositorio en lugar de un worktree.

5509 5570 


5780 5841 

5781Estos errores provienen del programa que inició Claude Code para usted, como una extensión de IDE o una aplicación del [Agent SDK](https://code.claude.com/docs/es/agent-sdk/overview.md), en lugar de provenir de Claude Code en sí.5842Estos errores provienen del programa que inició Claude Code para usted, como una extensión de IDE o una aplicación del [Agent SDK](https://code.claude.com/docs/es/agent-sdk/overview.md), en lugar de provenir de Claude Code en sí.

5782 5843 

5844### Subprocess initialization did not complete within 60000ms

5845 

5846Este error significa que un proceso de Claude Code que la [extensión de VS Code](https://code.claude.com/docs/es/vs-code.md) o una aplicación del Agent SDK inició no informó a tiempo que estaba listo. La extensión o la aplicación entonces lo detuvo. En una conversación de VS Code, el error comienza con `Claude Code did not finish starting`, por ejemplo:

5847 

5848```text theme={null}

5849Claude Code did not finish starting: it did not answer in time. The output logs ("View output logs") show how far it got. Slow plugins, MCP servers, hooks, disks or network can each cause this.

5850```

5851 

5852En los registros de salida de la extensión, en su pantalla de inicio de sesión y en una aplicación del Agent SDK, el error se lee de otra forma. Comienza con `Subprocess initialization did not complete within` y el límite de tiempo, y luego indica lo que Claude Code informó, por ejemplo:

5853 

5854```text theme={null}

5855Subprocess initialization did not complete within 60000ms. Claude Code did not answer the initialize request and reported no SessionStart or Setup hook running. Slow plugins, MCP servers, hooks that Claude Code does not report, disks or network can each cause this.

5856```

5857 

5858**Qué hacer:**

5859 

5860* Para volver a intentarlo en VS Code, envía un mensaje. Si el error apareció mientras iniciabas sesión, selecciona de nuevo el método de inicio de sesión.

5861* Para ver hasta dónde llegó Claude Code, haz clic en **View output logs** debajo del error de una conversación, o ejecuta **Claude Code: Show Logs** desde la Command Palette. Incluye las entradas alrededor de la línea `Subprocess initialization` al [informar el problema](https://github.com/anthropics/claude-code/issues).

5862* Para revisar tu red, consulta [Configuración de red](https://code.claude.com/docs/es/network-config.md). Si el mensaje te indica que revises tu inicio de sesión o autenticación, consulta [Inicio de sesión y autenticación](https://code.claude.com/docs/es/troubleshoot-install.md#login-and-authentication).

5863* Si el mensaje dice que los hooks [SessionStart](https://code.claude.com/docs/es/hooks.md#sessionstart) o [Setup](https://code.claude.com/docs/es/hooks.md#setup) no habían terminado, [comprueba cuánto tardan los tuyos](https://code.claude.com/docs/es/hooks.md#debug-hooks). En VS Code, los primeros 10 minutos en los que Claude Code informa que estos hooks se están ejecutando no cuentan para el límite de 60 segundos. Haz que un hook lento termine antes, reduce el [`timeout`](https://code.claude.com/docs/es/hooks#common-fields) de un hook no asíncrono o [elimina el hook](https://code.claude.com/docs/es/hooks.md#disable-or-remove-hooks).

5864* Si tu aplicación del Agent SDK llama a [`startup()`](https://code.claude.com/docs/es/agent-sdk/typescript#startup), establece `initializeTimeoutMs` con un valor suficiente para todo el inicio, o déjalo sin establecer para que no cuenten hasta 10 minutos de tiempo de hooks informado.

5865 

5866Antes de la extensión de VS Code v2.1.304 y del Agent SDK de TypeScript v0.3.304, todo el tiempo de los hooks contaba para el límite. Con el límite predeterminado, el mensaje contenía `Subprocess initialization did not complete within 60000ms — check authentication and network connectivity`. Si ves ese texto, actualiza la extensión o el SDK.

5867 

5783### El proceso de Claude Code salió con código N5868### El proceso de Claude Code salió con código N

5784 5869 

5785El proceso `claude` subyacente salió con un código distinto de cero. El código de salida por sí solo no indica qué falló: el error real está en la propia salida del proceso, que el wrapper añade cuando la capturó y de lo contrario mantiene en sus registros.5870El proceso `claude` subyacente salió con un código distinto de cero. El código de salida por sí solo no indica qué falló: el error real está en la propia salida del proceso, que el wrapper añade cuando la capturó y de lo contrario mantiene en sus registros.

Details

117 <td>✗</td>117 <td>✗</td>

118 </tr>118 </tr>

119 119 

120 <tr>

121 <td>[Code Mode](https://code.claude.com/docs/es/code-mode.md)</td>

122 <td>✓ (experimental, [se aplican requisitos](https://code.claude.com/docs/es/code-mode.md#requirements))</td>

123 <td>✓ (experimental, [se aplican requisitos](https://code.claude.com/docs/es/code-mode.md#requirements))</td>

124 <td>✗</td>

125 <td>✗</td>

126 <td>✗</td>

127 <td>✗</td>

128 </tr>

129 

120 <tr>130 <tr>

121 <td>[Mensajería entre sesiones](https://code.claude.com/docs/es/cross-session-messaging.md)</td>131 <td>[Mensajería entre sesiones](https://code.claude.com/docs/es/cross-session-messaging.md)</td>

122 <td>✓ <sup>[5](#fn5)</sup></td>132 <td>✓ <sup>[5](#fn5)</sup></td>


231 241 

232> [tab] Amazon Bedrock242> [tab] Amazon Bedrock

233>243>

234> **No disponible:** todas las [características que requieren una suscripción a Claude](#features-that-require-a-claude-subscription), más [búsqueda web](https://code.claude.com/docs/es/tools-reference.md#websearch-tool-behavior), [fast mode](https://code.claude.com/docs/es/fast-mode.md), [Advisor](https://code.claude.com/docs/es/advisor.md), [Channels](https://code.claude.com/docs/es/channels.md), el [panel de análisis](https://code.claude.com/docs/es/analytics.md), [configuración administrada por servidor](https://code.claude.com/docs/es/server-managed-settings.md) y los [comandos `/design-sync` e `/import`](https://code.claude.com/docs/es/commands#all-commands).244> **No disponible:** todas las [características que requieren una suscripción a Claude](#features-that-require-a-claude-subscription), más [búsqueda web](https://code.claude.com/docs/es/tools-reference.md#websearch-tool-behavior), [modo rápido](https://code.claude.com/docs/es/fast-mode.md), [Advisor](https://code.claude.com/docs/es/advisor.md), [Channels](https://code.claude.com/docs/es/channels.md), [Code Mode](https://code.claude.com/docs/es/code-mode.md), el [panel de análisis](https://code.claude.com/docs/es/analytics.md), [configuración administrada por servidor](https://code.claude.com/docs/es/server-managed-settings.md) y los [comandos `/design-sync` e `/import`](https://code.claude.com/docs/es/commands#all-commands).

235>245>

236> **Soporte parcial:**246> **Soporte parcial:**

237>247>


244 254 

245> [tab] Claude Platform en AWS255> [tab] Claude Platform en AWS

246>256>

247> **No disponible:** todas las [características que requieren una suscripción a Claude](#features-that-require-a-claude-subscription), más [modo rápido](https://code.claude.com/docs/es/fast-mode.md), [Channels](https://code.claude.com/docs/es/channels.md), [GitHub Actions](https://code.claude.com/docs/es/github-actions.md), el [panel de análisis](https://code.claude.com/docs/es/analytics.md), [configuración administrada por servidor](https://code.claude.com/docs/es/server-managed-settings.md) y los [comandos `/design-sync` e `/import`](https://code.claude.com/docs/es/commands#all-commands).257> **No disponible:** todas las [características que requieren una suscripción a Claude](#features-that-require-a-claude-subscription), más [modo rápido](https://code.claude.com/docs/es/fast-mode.md), [Channels](https://code.claude.com/docs/es/channels.md), [GitHub Actions](https://code.claude.com/docs/es/github-actions.md), [Code Mode](https://code.claude.com/docs/es/code-mode.md), el [panel de análisis](https://code.claude.com/docs/es/analytics.md), [configuración administrada por servidor](https://code.claude.com/docs/es/server-managed-settings.md) y los [comandos `/design-sync` e `/import`](https://code.claude.com/docs/es/commands#all-commands).

248>258>

249> **Disponible aquí, pero no en Amazon Bedrock:** [búsqueda web](https://code.claude.com/docs/es/tools-reference.md#websearch-tool-behavior), además de [Advisor](https://code.claude.com/docs/es/advisor.md) en Claude Code v2.1.300 o posterior.259> **Disponible aquí, pero no en Amazon Bedrock:** [búsqueda web](https://code.claude.com/docs/es/tools-reference.md#websearch-tool-behavior), además de [Advisor](https://code.claude.com/docs/es/advisor.md) en Claude Code v2.1.300 o posterior.

250>260>


256 266 

257> [tab] Google Cloud's Agent Platform267> [tab] Google Cloud's Agent Platform

258>268>

259> **No disponible:** todas las [características que requieren una suscripción a Claude](#features-that-require-a-claude-subscription), más [Advisor](https://code.claude.com/docs/es/advisor.md), [Channels](https://code.claude.com/docs/es/channels.md), el [panel de análisis](https://code.claude.com/docs/es/analytics.md), [configuración administrada por servidor](https://code.claude.com/docs/es/server-managed-settings.md) y los [comandos `/design-sync` e `/import`](https://code.claude.com/docs/es/commands#all-commands).269> **No disponible:** todas las [características que requieren una suscripción a Claude](#features-that-require-a-claude-subscription), más [Advisor](https://code.claude.com/docs/es/advisor.md), [Channels](https://code.claude.com/docs/es/channels.md), [Code Mode](https://code.claude.com/docs/es/code-mode.md), el [panel de análisis](https://code.claude.com/docs/es/analytics.md), [configuración administrada por servidor](https://code.claude.com/docs/es/server-managed-settings.md) y los [comandos `/design-sync` e `/import`](https://code.claude.com/docs/es/commands#all-commands).

260>270>

261> **Soporte parcial:**271> **Soporte parcial:**

262>272>


271 281 

272> [tab] Microsoft Foundry282> [tab] Microsoft Foundry

273>283>

274> **No disponible:** todas las [características que requieren una suscripción a Claude](#features-that-require-a-claude-subscription), más [fast mode](https://code.claude.com/docs/es/fast-mode.md), [Advisor](https://code.claude.com/docs/es/advisor.md), [Channels](https://code.claude.com/docs/es/channels.md), [GitLab CI/CD](https://code.claude.com/docs/es/gitlab-ci-cd.md), el [panel de análisis](https://code.claude.com/docs/es/analytics.md), [configuración administrada por servidor](https://code.claude.com/docs/es/server-managed-settings.md) y los [comandos `/design-sync` e `/import`](https://code.claude.com/docs/es/commands#all-commands).284> **No disponible:** todas las [características que requieren una suscripción a Claude](#features-that-require-a-claude-subscription), más [modo rápido](https://code.claude.com/docs/es/fast-mode.md), [Advisor](https://code.claude.com/docs/es/advisor.md), [Channels](https://code.claude.com/docs/es/channels.md), [GitLab CI/CD](https://code.claude.com/docs/es/gitlab-ci-cd.md), [Code Mode](https://code.claude.com/docs/es/code-mode.md), el [panel de análisis](https://code.claude.com/docs/es/analytics.md), [configuración administrada por servidor](https://code.claude.com/docs/es/server-managed-settings.md) y los [comandos `/design-sync` e `/import`](https://code.claude.com/docs/es/commands#all-commands).

275>285>

276> **Soporte parcial:**286> **Soporte parcial:**

277>287>

gateways.md +1 −1

Details

63* **Telemetría del cliente**: Claude Code desactiva su análisis de cliente vinculado a Anthropic cuando una sesión inicia sesión en una puerta de enlace de aplicaciones Claude. Para mantener la telemetría de inicio anterior al inicio de sesión también desactivada, entregue [`DISABLE_TELEMETRY`](https://code.claude.com/docs/es/managed-settings#turn-telemetry-off-for-your-organization) en la [configuración de cliente administrada](https://code.claude.com/docs/es/claude-apps-gateway-config.md#client-side-managed-settings) en cada dispositivo.63* **Telemetría del cliente**: Claude Code desactiva su análisis de cliente vinculado a Anthropic cuando una sesión inicia sesión en una puerta de enlace de aplicaciones Claude. Para mantener la telemetría de inicio anterior al inicio de sesión también desactivada, entregue [`DISABLE_TELEMETRY`](https://code.claude.com/docs/es/managed-settings#turn-telemetry-off-for-your-organization) en la [configuración de cliente administrada](https://code.claude.com/docs/es/claude-apps-gateway-config.md#client-side-managed-settings) en cada dispositivo.

64* **Telemetría del cliente en otras puertas de enlace**: si Claude Code envía la secuencia de telemetría del cliente opcional depende de su proveedor, y la [tabla de valores predeterminados de telemetría](https://code.claude.com/docs/es/data-usage.md#default-behaviors-by-api-provider) cubre cada caso.64* **Telemetría del cliente en otras puertas de enlace**: si Claude Code envía la secuencia de telemetría del cliente opcional depende de su proveedor, y la [tabla de valores predeterminados de telemetría](https://code.claude.com/docs/es/data-usage.md#default-behaviors-by-api-provider) cubre cada caso.

65* **Destinos de telemetría**: dónde Claude Code envía la telemetría de una sesión de puerta de enlace depende de cómo inició sesión la sesión, y [Lo que se aplica a los desarrolladores](https://code.claude.com/docs/es/claude-apps-gateway#whats-enforced-on-developers) dice dónde van las exportaciones de cada tipo de sesión.65* **Destinos de telemetría**: dónde Claude Code envía la telemetría de una sesión de puerta de enlace depende de cómo inició sesión la sesión, y [Lo que se aplica a los desarrolladores](https://code.claude.com/docs/es/claude-apps-gateway#whats-enforced-on-developers) dice dónde van las exportaciones de cada tipo de sesión.

66* **Proxies HTTP corporativos**: un `HTTPS_PROXY` se sitúa entre Claude Code y cada servidor con el que habla, incluida la puerta de enlace. Si su red requiere uno, [configure el proxy](https://code.claude.com/docs/es/network-config.md) además de la puerta de enlace. Para una puerta de enlace de aplicaciones Claude que usted aloja, [el inicio de sesión verifica que el host del proxy también esté en una red privada](https://code.claude.com/docs/es/claude-apps-gateway#prerequisites); si no es así, agregue el host de la puerta de enlace a `NO_PROXY` para que la CLI se conecte a él directamente.66* **Proxies HTTP corporativos**: Claude Code envía sus solicitudes, incluidas las dirigidas al gateway, a través del proxy definido en `HTTPS_PROXY`. Si tu red requiere un proxy, [configúralo](https://code.claude.com/docs/es/network-config.md). Si el proxy se aplica a un gateway de aplicaciones Claude que alojas tú, el [inicio de sesión](https://code.claude.com/docs/es/claude-apps-gateway#prerequisites) necesita que el nombre de host del proxy se resuelva a direcciones privadas, o que el host del gateway esté en `NO_PROXY`.

67 67 

68## Próximos pasos68## Próximos pasos

69 69 

Details

129| Administration | Lectura |129| Administration | Lectura |

130| Checks | Lectura y escritura |130| Checks | Lectura y escritura |

131| Contents | Lectura y escritura |131| Contents | Lectura y escritura |

132| Dependabot alerts | Lectura |

132| Discussions | Lectura y escritura |133| Discussions | Lectura y escritura |

133| Issues | Lectura y escritura |134| Issues | Lectura y escritura |

134| Members | Lectura |135| Members | Lectura |

Details

83>83>

84> Cree una aplicación de Microsoft Entra con una credencial federada para su repositorio, siguiendo la [guía de Microsoft para autenticarse desde GitHub Actions](https://learn.microsoft.com/en-us/azure/developer/github/connect-from-azure-openid-connect):84> Cree una aplicación de Microsoft Entra con una credencial federada para su repositorio, siguiendo la [guía de Microsoft para autenticarse desde GitHub Actions](https://learn.microsoft.com/en-us/azure/developer/github/connect-from-azure-openid-connect):

85>85>

86> * Registre una aplicación de Microsoft Entra y agregue una credencial de identidad federada que confíe en los tokens que GitHub emite a su repositorio. Una identidad administrada asignada por el usuario funciona en lugar de una aplicación. Ambas tienen el ID de cliente que anota a continuación86> * Registra una aplicación de Microsoft Entra y agrega una credencial de identidad federada que confíe en los tokens que GitHub emite a tu repositorio. Una identidad administrada asignada por el usuario funciona en lugar de una aplicación. Ambas tienen el ID de cliente que anotas a continuación

87> * Asigne a la aplicación el rol `Azure AI User` en su recurso de Foundry. Consulte [Configuración de RBAC de Azure](https://code.claude.com/docs/es/microsoft-foundry.md#azure-rbac-configuration) para un rol personalizado más estrecho87> * Asigna a la aplicación el rol `Foundry User` en tu recurso de Foundry. Consulta [Configuración de RBAC de Azure](https://code.claude.com/docs/es/microsoft-foundry.md#azure-rbac-configuration) para conocer el otro rol integrado y los roles personalizados

88>88>

89> Anote el ID de cliente de la aplicación, su ID de inquilino y su ID de suscripción. Los agregará como secretos en el siguiente paso.89> Anote el ID de cliente de la aplicación, su ID de inquilino y su ID de suscripción. Los agregará como secretos en el siguiente paso.

90 90 

Details

228 228 

229### Cuando un modelo se deshabilita durante la sesión229### Cuando un modelo se deshabilita durante la sesión

230 230 

231Si su proyecto pierde acceso al modelo en el que se ejecuta su sesión, por ejemplo porque un administrador lo deshabilita en [Model Garden](https://console.cloud.google.com/vertex-ai/model-garden), Claude Code cambia la sesión a otro modelo en lugar de fallar en cada solicitud, y muestra `Switched to <fallback> because <model> is not available`. Intenta los mismos modelos que el retroceso de inicio: versiones anteriores del mismo nivel primero y, para una sesión de Opus sin ninguna versión de Opus disponible, el modelo Sonnet predeterminado.231Cuando Agent Platform rechaza el modelo de tu sesión por no estar disponible en tu proyecto o región, Claude Code cambia tu sesión a otro modelo y puedes seguir trabajando. Verás un mensaje que comienza con `Switched to <fallback> because <model> is not available`. Esto ocurre, por ejemplo, cuando un administrador deshabilita el modelo en [Model Garden](https://console.cloud.google.com/vertex-ai/model-garden) o cuando no se ofrece en tu región.

232 232 

233El cambio se aplica solo a un nivel que no ha fijado, la misma condición que el retroceso de inicio. Una sesión en una versión específica que eligió mantiene su modelo y, sin una cadena de modelo de retroceso, la solicitud falla en su lugar. En [modo automático](https://code.claude.com/docs/es/permission-modes.md#enable-auto-mode-on-bedrock-agent-platform-or-foundry), Claude Code cambia solo a un modelo que el modo automático admite en Agent Platform. Si ninguno de esos modelos está disponible tampoco, la solicitud falla.233Si configuraste una [cadena de modelos de respaldo](https://code.claude.com/docs/es/model-config.md#fallback-model-chains), Claude Code cambia a tu respaldo configurado en su lugar. Sin una cadena, la solicitud falla en casos como estos:

234 234 

235Una [cadena de modelo de retroceso](https://code.claude.com/docs/es/model-config.md#fallback-model-chains) que configure reemplaza el cambio de nivel: en estos rechazos Claude Code cambia a su retroceso configurado en su lugar. Para que las solicitudes rechazadas fallen en lugar de cambiar, establezca [`CLAUDE_CODE_DISABLE_MODEL_ACCESS_FALLBACK=1`](https://code.claude.com/docs/es/env-vars). Una cadena de retroceso que configuró aún cambia en estos rechazos; elimine la cadena también si desea que cada solicitud rechazada falle.235* Tu sesión está en un modelo fijado o en una versión específica que elegiste

236* Ninguno de los [modelos que Claude Code intenta](#startup-model-checks) está disponible. En [modo automático](https://code.claude.com/docs/es/permission-modes.md#enable-auto-mode-on-bedrock-agent-platform-or-foundry), Claude Code solo cambia a un modelo que el modo automático admite en Agent Platform.

237 

238Para seguir trabajando, ejecuta `/model` en la sesión y presiona `s` sobre un modelo disponible en tu proyecto y región, lo cual deja tu valor predeterminado sin cambios.

239 

240Para que las solicitudes rechazadas fallen en lugar de cambiar, establece [`CLAUDE_CODE_DISABLE_MODEL_ACCESS_FALLBACK=1`](https://code.claude.com/docs/es/env-vars). Si configuraste una cadena de modelos de respaldo, elimínala también, porque Claude Code sigue cambiando a ese respaldo.

236 241 

237## Configuración de IAM242## Configuración de IAM

238 243 

hooks.md +22 −7

Details

257Los administradores pueden usar [`allowManagedHooksOnly`](https://code.claude.com/docs/es/settings-reference#allowmanagedhooksonly) en [configuración administrada](https://code.claude.com/docs/es/managed-settings.md) para restringir qué hooks se ejecutan:257Los administradores pueden usar [`allowManagedHooksOnly`](https://code.claude.com/docs/es/settings-reference#allowmanagedhooksonly) en [configuración administrada](https://code.claude.com/docs/es/managed-settings.md) para restringir qué hooks se ejecutan:

258 258 

259* Tus hooks de usuario, proyecto, local y plugin están bloqueados. Los hooks de plugins forzados a estar habilitados en la configuración administrada `enabledPlugins` están exentos259* Tus hooks de usuario, proyecto, local y plugin están bloqueados. Los hooks de plugins forzados a estar habilitados en la configuración administrada `enabledPlugins` están exentos

260* Claude Code también reduce tu configuración [`statusLine`](https://code.claude.com/docs/es/statusline), [`fileSuggestion`](https://code.claude.com/docs/es/settings-reference#filesuggestion) y [`subagentStatusLine`](https://code.claude.com/docs/es/statusline#subagent-status-lines) a la configuración administrada260* Claude Code también reduce tu configuración [`statusLine`](https://code.claude.com/docs/es/statusline) y [`fileSuggestion`](https://code.claude.com/docs/es/settings-reference#filesuggestion) a la configuración administrada

261* Claude Code también deshabilita plugins con una [fuente `command`](https://code.claude.com/docs/es/plugins/marketplace-reference#command-plugin-source), incluidos los plugins forzados a estar habilitados en la configuración administrada `enabledPlugins`, a menos que [`disableCommandPluginSources`](https://code.claude.com/docs/es/settings-reference#disablecommandpluginsources) esté explícitamente establecido en `false`. Las fuentes `command` requieren Claude Code v2.1.229 o posterior261* Claude Code también deshabilita plugins con una [fuente `command`](https://code.claude.com/docs/es/plugins/marketplace-reference#command-plugin-source), incluidos los plugins forzados a estar habilitados en la configuración administrada `enabledPlugins`, a menos que [`disableCommandPluginSources`](https://code.claude.com/docs/es/settings-reference#disablecommandpluginsources) esté explícitamente establecido en `false`. Las fuentes `command` requieren Claude Code v2.1.229 o posterior

262* Claude Code también bloquea los [comandos `headersHelper`](https://code.claude.com/docs/es/plugins/host-marketplace#authenticate-archive-downloads) del marketplace a menos que [`disableCommandPluginSources`](https://code.claude.com/docs/es/settings-reference#disablecommandpluginsources) esté explícitamente establecido en `false`, excepto para un marketplace que la propia configuración administrada declare262* Claude Code también bloquea los [comandos `headersHelper`](https://code.claude.com/docs/es/plugins/host-marketplace#authenticate-archive-downloads) del marketplace a menos que [`disableCommandPluginSources`](https://code.claude.com/docs/es/settings-reference#disablecommandpluginsources) esté explícitamente establecido en `false`, excepto para un marketplace que la propia configuración administrada declare

263 263 


505| `url` | sí | URL a la que enviar la solicitud POST |505| `url` | sí | URL a la que enviar la solicitud POST |

506| `headers` | no | Encabezados HTTP adicionales como pares clave-valor. Los valores soportan interpolación de variables de entorno usando sintaxis `$VAR_NAME` o `${VAR_NAME}`. Solo se resuelven las variables listadas en `allowedEnvVars` |506| `headers` | no | Encabezados HTTP adicionales como pares clave-valor. Los valores soportan interpolación de variables de entorno usando sintaxis `$VAR_NAME` o `${VAR_NAME}`. Solo se resuelven las variables listadas en `allowedEnvVars` |

507| `allowedEnvVars` | no | Lista de nombres de variables de entorno que pueden interpolarse en valores de encabezado. Las referencias a variables no listadas se reemplazan con cadenas vacías. Requerido para que funcione cualquier interpolación de variable de entorno |507| `allowedEnvVars` | no | Lista de nombres de variables de entorno que pueden interpolarse en valores de encabezado. Las referencias a variables no listadas se reemplazan con cadenas vacías. Requerido para que funcione cualquier interpolación de variable de entorno |

508| `onFailure` | no | Qué le sucede a la acción cuando el hook falla: `"continue"`, el valor por defecto, o `"block"`. Consulta [Bloquear la acción cuando un hook falla](#block-the-action-when-a-hook-fails). Requiere Claude Code v2.1.295 o posterior |508| `onFailure` | no | Si la acción que activó el hook sigue adelante cuando el hook falla: `"continue"` o `"block"`. Consulta [Bloquear la acción cuando un hook falla](#block-the-action-when-a-hook-fails) para `"block"` y para dejar el campo sin establecer. Requiere Claude Code v2.1.295 o posterior |

509 509 

510Claude 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 respuesta utiliza el mismo [formato de salida JSON](#json-output) que los hooks de comando.510Claude 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 respuesta utiliza el mismo [formato de salida JSON](#json-output) que los hooks de comando.

511 511 


901 901 

902En `PreToolUse`, un hook `command`, `http` o `mcp_tool` cuyo tiempo de espera se agota no bloquea la llamada a herramienta, excepto en los hooks [cuyo fallo bloquea la acción](#block-the-action-when-a-hook-fails). La llamada continúa a través del [flujo de permisos](https://code.claude.com/docs/es/permissions.md) normal, así que no cuentes con que un hook bloqueado actúe como control. Para bloquear la llamada cuando se agota el tiempo de espera de un hook `command` o `http`, establece [`onFailure: "block"`](#block-the-action-when-a-hook-fails). Un [hook de callback del Agent SDK](https://code.claude.com/docs/es/agent-sdk/hooks.md) que excede su tiempo de espera [bloquea la llamada a herramienta](#pretooluse).902En `PreToolUse`, un hook `command`, `http` o `mcp_tool` cuyo tiempo de espera se agota no bloquea la llamada a herramienta, excepto en los hooks [cuyo fallo bloquea la acción](#block-the-action-when-a-hook-fails). La llamada continúa a través del [flujo de permisos](https://code.claude.com/docs/es/permissions.md) normal, así que no cuentes con que un hook bloqueado actúe como control. Para bloquear la llamada cuando se agota el tiempo de espera de un hook `command` o `http`, establece [`onFailure: "block"`](#block-the-action-when-a-hook-fails). Un [hook de callback del Agent SDK](https://code.claude.com/docs/es/agent-sdk/hooks.md) que excede su tiempo de espera [bloquea la llamada a herramienta](#pretooluse).

903 903 

904> [!NOTE]

905>

906> Si usas Code Mode, los tiempos de espera en `PreToolUse` funcionan de otra manera. Consulta [Llamada a herramienta rechazada por un hook](https://code.claude.com/docs/es/code-mode.md#tool-call-refused-by-a-hook).

907 

904#### Hooks que inician un proceso en segundo plano908#### Hooks que inician un proceso en segundo plano

905 909 

906Un hook puede iniciar un programa de larga duración, como un servidor de desarrollo, y dejarlo en ejecución mientras la sesión continúa. En el script del hook o en el comando en [forma de shell](#exec-form-and-shell-form):910Un hook puede iniciar un programa de larga duración, como un servidor de desarrollo, y dejarlo en ejecución mientras la sesión continúa. En el script del hook o en el comando en [forma de shell](#exec-form-and-shell-form):


981* **Hooks `Stop`, `SubagentStop`, `TaskCompleted` y `TeammateIdle`**: el código de salida 2 en estos eventos hace que Claude siga trabajando, y Claude no puede reparar un hook que no se ejecuta985* **Hooks `Stop`, `SubagentStop`, `TaskCompleted` y `TeammateIdle`**: el código de salida 2 en estos eventos hace que Claude siga trabajando, y Claude no puede reparar un hook que no se ejecuta

982* **Hooks de comando en segundo plano**: hooks de comando que establecen [`async` o `asyncRewake`](#run-hooks-in-the-background)986* **Hooks de comando en segundo plano**: hooks de comando que establecen [`async` o `asyncRewake`](#run-hooks-in-the-background)

983 987 

988> [!NOTE]

989>

990> Si usas Code Mode, los fallos en `PreToolUse` funcionan de otra manera. Consulta [Llamada a herramienta rechazada por un hook](https://code.claude.com/docs/es/code-mode.md#tool-call-refused-by-a-hook).

991 

984#### Hooks fallidos en Windows sin Git Bash992#### Hooks fallidos en Windows sin Git Bash

985 993 

986Si el error de una llamada a herramienta bloqueada incluye este texto, un hook de comando `PreToolUse` o `PermissionRequest` falló o agotó su tiempo de espera y bloqueó la llamada:994Si el error de una llamada a herramienta bloqueada incluye este texto, un hook de comando `PreToolUse` o `PermissionRequest` falló o agotó su tiempo de espera y bloqueó la llamada:


1512* Se dispara una [tarea programada con alcance de sesión](https://code.claude.com/docs/es/scheduled-tasks.md), incluida una iteración de `/loop`1520* Se dispara una [tarea programada con alcance de sesión](https://code.claude.com/docs/es/scheduled-tasks.md), incluida una iteración de `/loop`

1513* Un [subagente en segundo plano](https://code.claude.com/docs/es/sub-agents.md#run-subagents-in-foreground-or-background) informa a la sesión que lo inició1521* Un [subagente en segundo plano](https://code.claude.com/docs/es/sub-agents.md#run-subagents-in-foreground-or-background) informa a la sesión que lo inició

1514* [Otra sesión envía un mensaje](https://code.claude.com/docs/es/cross-session-messaging.md) a tu conversación principal1522* [Otra sesión envía un mensaje](https://code.claude.com/docs/es/cross-session-messaging.md) a tu conversación principal

1523* La salida del código de Claude en una sesión de [Code Mode](https://code.claude.com/docs/es/code-mode.md#code-output-withheld-by-a-hook), para hooks `command`, `http` y `mcp_tool`, cuando el código puede ejecutarse en segundo plano

1515 1524 

1516Los hooks `UserPromptSubmit` tienen un tiempo de espera predeterminado de 30 segundos para los tipos `command`, `http` y `mcp_tool`, más corto que el valor predeterminado de 600 segundos para esos tipos en la mayoría de los demás eventos. Como este hook se ejecuta antes de cada prompt y bloquea el procesamiento del modelo hasta que termina, un hook atascado detiene la sesión. Si tu hook necesita más tiempo, establece el campo `timeout` en la entrada del hook.1525Los hooks `UserPromptSubmit` tienen un tiempo de espera predeterminado de 30 segundos para los tipos `command`, `http` y `mcp_tool`, más corto que el valor predeterminado de 600 segundos para esos tipos en la mayoría de los demás eventos. Como este hook se ejecuta antes de cada prompt y bloquea el procesamiento del modelo hasta que termina, un hook atascado detiene la sesión. Si tu hook necesita más tiempo, establece el campo `timeout` en la entrada del hook.

1517 1526 


1560| Campo | Descripción |1569| Campo | Descripción |

1561| :- | :- |1570| :- | :- |

1562| `decision` | `"block"` detiene el prompt antes de que llegue a Claude. Omítelo para permitir que el prompt continúe |1571| `decision` | `"block"` detiene el prompt antes de que llegue a Claude. Omítelo para permitir que el prompt continúe |

1563| `reason` | Se muestra al usuario cuando `decision` es `"block"`. No se agrega al contexto |1572| `reason` | Se muestra al usuario cuando `decision` es `"block"`. No se agrega al contexto, excepto cuando el hook bloquea la [salida de Code Mode](https://code.claude.com/docs/es/code-mode.md#code-output-withheld-by-a-hook) |

1564| `additionalContext` | Cadena que se agrega al contexto de Claude junto con el prompt enviado. Consulta [Agregar contexto para Claude](#add-context-for-claude) |1573| `additionalContext` | Cadena que se agrega al contexto de Claude junto con el prompt enviado. Consulta [Agregar contexto para Claude](#add-context-for-claude) |

1565| `sessionTitle` | Establece el título de la sesión. Úsalo para nombrar sesiones automáticamente según el contenido del prompt |1574| `sessionTitle` | Establece el título de la sesión. Úsalo para nombrar sesiones automáticamente según el contenido del prompt |

1566| `suppressOriginalPrompt` | Si es `true` cuando el hook bloquea el prompt, deja el texto del prompt fuera del mensaje de bloqueo. Consulta [Lo que deja un prompt bloqueado](#what-a-blocked-prompt-leaves-behind) |1575| `suppressOriginalPrompt` | Si es `true` cuando el hook bloquea el prompt, deja el texto del prompt fuera del mensaje de bloqueo. Consulta [Lo que deja un prompt bloqueado](#what-a-blocked-prompt-leaves-behind) |

1567 1576 

1568Un hook que bloquea saliendo con 2 se enruta igual que `reason`: el mensaje de bloqueo muestra el texto de stderr al usuario, y no se agrega al contexto.1577Si tu hook bloquea saliendo con código 2, su texto de stderr se trata igual que `reason`.

1569 1578 

1570```json theme={null}1579```json theme={null}

1571{1580{


3000 3009 

3001Se ejecuta cuando un archivo de configuración cambia durante una sesión. Úsalo para auditar cambios de configuración, aplicar políticas de seguridad o bloquear modificaciones no autorizadas en los archivos de configuración.3010Se ejecuta cuando un archivo de configuración cambia durante una sesión. Úsalo para auditar cambios de configuración, aplicar políticas de seguridad o bloquear modificaciones no autorizadas en los archivos de configuración.

3002 3011 

3003Claude Code ejecuta los hooks ConfigChange cuando cambia un archivo de configuración, un archivo de política administrada o un archivo de skill. Para la política administrada, los ejecuta solo cuando cambia `managed-settings.json` o un archivo en `managed-settings.d/`. Aplica la [configuración administrada por el servidor](https://code.claude.com/docs/es/server-managed-settings.md) y los cambios en las preferencias administradas de macOS o en la política del registro de Windows sin ejecutarlos. En WSL con [`wslInheritsWindowsSettings`](https://code.claude.com/docs/es/settings-reference#wslinheritswindowssettings), también aplica un archivo de configuración administrada del lado de Windows que haya cambiado, en su sondeo de políticas, sin ejecutarlos.3012Claude Code ejecuta los hooks ConfigChange cuando cambia un archivo de configuración, un archivo de política administrada o un archivo de skill. Para la política administrada, los ejecuta solo cuando cambia `managed-settings.json` o un archivo en `managed-settings.d/`.

3004 3013 

3005El matcher filtra según el origen de la configuración:3014El matcher filtra según el origen de la configuración:

3006 3015 


3012| `policy_settings` | Cambia `managed-settings.json` o un archivo en `managed-settings.d/` |3021| `policy_settings` | Cambia `managed-settings.json` o un archivo en `managed-settings.d/` |

3013| `skills` | Cambia un archivo de skill en `.claude/skills/` |3022| `skills` | Cambia un archivo de skill en `.claude/skills/` |

3014 3023 

3015Este ejemplo registra todos los cambios de configuración para auditorías de seguridad:3024Los cambios como estos surten efecto sin ejecutar los hooks:

3025 

3026* Las reglas y los ajustes que guardas con **Yes, and don't ask again**, `/permissions` o `/model`, en la sesión desde la que los guardaste. Si otra sesión abierta carga el mismo archivo, los hooks se ejecutan allí.

3027* Las actualizaciones de la [configuración administrada por el servidor](https://code.claude.com/docs/es/server-managed-settings.md), las preferencias administradas de macOS o la política del registro de Windows

3028* En WSL con [`wslInheritsWindowsSettings`](https://code.claude.com/docs/es/settings-reference#wslinheritswindowssettings), un archivo de configuración administrada del lado de Windows que haya cambiado, que Claude Code detecta en su sondeo de políticas

3029 

3030Este ejemplo registra los cambios de configuración para auditorías de seguridad:

3016 3031 

3017```json theme={null}3032```json theme={null}

3018{3033{


3335 "hooks": [3350 "hooks": [

3336 {3351 {

3337 "type": "command",3352 "type": "command",

3338 "command": "bash -c 'jq -r .worktree_path | xargs rm -rf'"3353 "command": "bash -c 'p=$(jq -er .worktree_path) && rm -rf -- \"$p\"'"

3339 }3354 }

3340 ]3355 ]

3341 }3356 }

hooks-guide.md +4 −4

Details

50 "PostToolUse": [50 "PostToolUse": [

51 {51 {

52 "matcher": "Edit|Write",52 "matcher": "Edit|Write",

53 "hooks": [{ "type": "command", "command": "jq -r '.tool_input.file_path' | xargs npx prettier --write" }]53 "hooks": [{ "type": "command", "command": "f=$(jq -r '.tool_input.file_path') && npx prettier --write --ignore-unknown \"$f\"" }]

54 }54 }

55 ],55 ],

56 "Notification": [56 "Notification": [


221 "hooks": [221 "hooks": [

222 {222 {

223 "type": "command",223 "type": "command",

224 "command": "jq -r '.tool_input.file_path' | xargs npx prettier --write"224 "command": "f=$(jq -r '.tool_input.file_path') && npx prettier --write --ignore-unknown \"$f\""

225 }225 }

226 ]226 ]

227 }227 }


336 336 

337Haz un seguimiento de cuándo cambian los archivos de configuración o de skills durante una sesión. El evento `ConfigChange` se dispara cuando un proceso externo o un editor modifica un archivo de configuración, para que puedas registrar los cambios por motivos de cumplimiento o bloquear modificaciones no autorizadas.337Haz un seguimiento de cuándo cambian los archivos de configuración o de skills durante una sesión. El evento `ConfigChange` se dispara cuando un proceso externo o un editor modifica un archivo de configuración, para que puedas registrar los cambios por motivos de cumplimiento o bloquear modificaciones no autorizadas.

338 338 

339Este ejemplo añade cada cambio a un registro de auditoría. Agrega esto a `~/.claude/settings.json`:339Este ejemplo añade cada evento a un registro de auditoría. Agrega esto a `~/.claude/settings.json`:

340 340 

341```json theme={null}341```json theme={null}

342{342{


925Tu endpoint responde con un cuerpo JSON en el mismo [formato de salida](https://code.claude.com/docs/es/hooks.md#json-output) que los hooks de comando, y Claude Code también verifica el código de estado de la respuesta:925Tu endpoint responde con un cuerpo JSON en el mismo [formato de salida](https://code.claude.com/docs/es/hooks.md#json-output) que los hooks de comando, y Claude Code también verifica el código de estado de la respuesta:

926 926 

927* **Estado 2xx**: para bloquear una llamada a herramienta, devuelve los campos `hookSpecificOutput` apropiados en el cuerpo.927* **Estado 2xx**: para bloquear una llamada a herramienta, devuelve los campos `hookSpecificOutput` apropiados en el cuerpo.

928* **Cualquier otro estado, o si la solicitud falla**: Claude Code informa un [error no bloqueante](https://code.claude.com/docs/es/hooks.md#exit-code-output) y permite que la acción continúe. Para que un endpoint que falla bloquee la acción, establece [`onFailure: "block"`](https://code.claude.com/docs/es/hooks#block-the-action-when-a-hook-fails) en el hook.928* **Cualquier otro estado, o si la solicitud falla**: Claude Code informa un [error no bloqueante](https://code.claude.com/docs/es/hooks.md#exit-code-output) y permite que la acción continúe, salvo que el hook sea uno [cuyo fallo bloquea la acción](https://code.claude.com/docs/es/hooks.md#block-the-action-when-a-hook-fails). Para que un endpoint que falla bloquee la acción, establece [`onFailure: "block"`](https://code.claude.com/docs/es/hooks#block-the-action-when-a-hook-fails) en el hook.

929 929 

930Los 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.930Los 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.

931 931 

Details

36| `Esc` | Interrumpir Claude o cerrar un diálogo | Detiene la respuesta actual o la llamada de herramienta a mitad de turno para que pueda redirigir. Claude mantiene el trabajo realizado hasta ahora. Si tiene [mensajes en cola](#queue-messages-while-claude-works), Claude Code los envía a continuación. Cuando un diálogo está abierto, `Esc` cierra el diálogo. Mientras un elemento de pie de página está seleccionado, como una fila en el [panel de subagentes](https://code.claude.com/docs/es/sub-agents.md#run-subagents-in-foreground-or-background) debajo del símbolo del sistema, `Esc` [lo deselecciona](https://code.claude.com/docs/es/keybindings.md#footer-actions) en lugar de interrumpir. En un aviso de permiso, `Esc` rechaza la acción, lo mismo que [**No** sin un comentario](https://code.claude.com/docs/es/permissions.md#add-a-comment-when-you-answer-a-permission-prompt) |36| `Esc` | Interrumpir Claude o cerrar un diálogo | Detiene la respuesta actual o la llamada de herramienta a mitad de turno para que pueda redirigir. Claude mantiene el trabajo realizado hasta ahora. Si tiene [mensajes en cola](#queue-messages-while-claude-works), Claude Code los envía a continuación. Cuando un diálogo está abierto, `Esc` cierra el diálogo. Mientras un elemento de pie de página está seleccionado, como una fila en el [panel de subagentes](https://code.claude.com/docs/es/sub-agents.md#run-subagents-in-foreground-or-background) debajo del símbolo del sistema, `Esc` [lo deselecciona](https://code.claude.com/docs/es/keybindings.md#footer-actions) en lugar de interrumpir. En un aviso de permiso, `Esc` rechaza la acción, lo mismo que [**No** sin un comentario](https://code.claude.com/docs/es/permissions.md#add-a-comment-when-you-answer-a-permission-prompt) |

37| `Esc` + `Esc` | Borrar borrador de entrada o rebobinar | Cuando la entrada del prompt contiene texto, doble `Esc` lo borra y guarda el borrador en el historial para que `Up` lo recupere. Cuando la entrada está vacía, doble `Esc` abre el [menú de rebobinado](https://code.claude.com/docs/es/checkpointing.md) para restaurar o resumir código y conversación desde un punto anterior |37| `Esc` + `Esc` | Borrar borrador de entrada o rebobinar | Cuando la entrada del prompt contiene texto, doble `Esc` lo borra y guarda el borrador en el historial para que `Up` lo recupere. Cuando la entrada está vacía, doble `Esc` abre el [menú de rebobinado](https://code.claude.com/docs/es/checkpointing.md) para restaurar o resumir código y conversación desde un punto anterior |

38| `Ctrl+Enter` o `Ctrl+X Ctrl+S` | Enviar mensajes en cola ahora | Envía sus [mensajes en cola](#queue-messages-while-claude-works) y su borrador con ellos de inmediato. [Cuando Claude Code envía lo que puso en cola](#when-claude-code-sends-what-you-queued) cubre lo que sucede con el turno en el que Claude está trabajando. En [modo shell](#shell-mode-with-prefix), la tecla solo pone en cola su comando. En terminales que no reportan teclas extendidas, `Ctrl+Enter` llega como `Enter` simple; `Ctrl+X Ctrl+S` funciona en cualquier terminal. Requiere Claude Code v2.1.275 o posterior |38| `Ctrl+Enter` o `Ctrl+X Ctrl+S` | Enviar mensajes en cola ahora | Envía sus [mensajes en cola](#queue-messages-while-claude-works) y su borrador con ellos de inmediato. [Cuando Claude Code envía lo que puso en cola](#when-claude-code-sends-what-you-queued) cubre lo que sucede con el turno en el que Claude está trabajando. En [modo shell](#shell-mode-with-prefix), la tecla solo pone en cola su comando. En terminales que no reportan teclas extendidas, `Ctrl+Enter` llega como `Enter` simple; `Ctrl+X Ctrl+S` funciona en cualquier terminal. Requiere Claude Code v2.1.275 o posterior |

39| `Shift+Tab`, o `Alt+M` en Windows cuando el tiempo de ejecución de Node o Bun no habilita el modo de entrada VT | Ciclar modos de permiso | Cicle a través de `default` (etiquetado como Manual en el indicador de modo), `acceptEdits`, `plan` y, cuando esté disponible, `bypassPermissions` y luego `auto`. Desde `auto`, la primera pulsación cambia a `default`. Consulte [modos de permiso](https://code.claude.com/docs/es/permission-modes.md). En un aviso de permiso de archivo, la misma tecla cierra un [campo de comentario](https://code.claude.com/docs/es/permissions.md#add-a-comment-when-you-answer-a-permission-prompt) abierto. Sin campo abierto, selecciona la opción que permite la acción para el resto de la sesión, cuando el aviso ofrece esa opción |39| `Shift+Tab`, o `Alt+M` en Windows cuando el tiempo de ejecución de Node o Bun no habilita el modo de entrada VT | Ciclar modos de permisos | Cicla a través de `default` (etiquetado como Manual en el indicador de modo), `acceptEdits` y `plan`, y luego `bypassPermissions` y `auto` cuando estén disponibles. Consulta [modos de permisos](https://code.claude.com/docs/es/permission-modes.md). En una solicitud de permiso de archivo, la misma tecla cierra un [campo de comentario](https://code.claude.com/docs/es/permissions.md#add-a-comment-when-you-answer-a-permission-prompt) abierto. Sin campo abierto, selecciona la opción que permite la acción para el resto de la sesión, cuando la solicitud ofrece esa opción. En la solicitud de aprobación del plan, aprueba el plan |

40| `Option+P` (macOS) o `Alt+P` (Windows/Linux) | Cambiar modelo | Cambie modelos sin borrar su símbolo del sistema |40| `Option+P` (macOS) o `Alt+P` (Windows/Linux) | Cambiar modelo | Cambie modelos sin borrar su símbolo del sistema |

41| `Option+T` (macOS) o `Alt+T` (Windows/Linux) | Alternar pensamiento extendido | Habilita o deshabilita el modo de pensamiento extendido. No tiene efecto en Opus 5.5, Sonnet 5.5, Haiku 5.5 o los modelos Fable, que siempre utilizan pensamiento extendido. Funciona en macOS sin configurar Option como Meta |41| `Option+T` (macOS) o `Alt+T` (Windows/Linux) | Alternar pensamiento extendido | Habilita o deshabilita el modo de pensamiento extendido. No tiene efecto en Opus 5.5, Sonnet 5.5, Haiku 5.5 o los modelos Fable, que siempre utilizan pensamiento extendido. Funciona en macOS sin configurar Option como Meta |

42| `Option+O` (macOS) o `Alt+O` (Windows/Linux) | Alternar modo rápido | Habilitar o deshabilitar [modo rápido](https://code.claude.com/docs/es/fast-mode.md) |42| `Option+O` (macOS) o `Alt+O` (Windows/Linux) | Alternar modo rápido | Habilitar o deshabilitar [modo rápido](https://code.claude.com/docs/es/fast-mode.md) |


81| :- | :- | :- |81| :- | :- | :- |

82| Escape rápido | `\` + `Enter` | Funciona en todas las terminales |82| Escape rápido | `\` + `Enter` | Funciona en todas las terminales |

83| Tecla Option | `Option+Enter` | Después de habilitar [Option como Meta](https://code.claude.com/docs/es/terminal-config.md#enable-option-key-shortcuts-on-macos) en macOS |83| Tecla Option | `Option+Enter` | Después de habilitar [Option como Meta](https://code.claude.com/docs/es/terminal-config.md#enable-option-key-shortcuts-on-macos) en macOS |

84| Shift+Enter | `Shift+Enter` | Nativo en iTerm2, WezTerm, Ghostty, Kitty, Warp, Apple Terminal, Windows Terminal. Para otras terminales, consulte [Ingresar símbolos del sistema multilínea](https://code.claude.com/docs/es/terminal-config.md#enter-multiline-prompts) |84| Shift+Enter | `Shift+Enter` | Nativo en iTerm2, WezTerm, Ghostty, Kitty, Warp, Windows Terminal. Para otras terminales, consulta [Ingresar prompts multilínea](https://code.claude.com/docs/es/terminal-config.md#enter-multiline-prompts) |

85| Secuencia de control | `Ctrl+J` | Funciona en cualquier terminal sin configuración |85| Secuencia de control | `Ctrl+J` | Funciona en cualquier terminal sin configuración |

86| Modo de pegado | Pegar directamente | Para bloques de código, registros |86| Modo de pegado | Pegar directamente | Para bloques de código, registros |

87 87 


137 137 

138Habilite la edición de estilo vim a través de `/config` → Editor mode.138Habilite la edición de estilo vim a través de `/config` → Editor mode.

139 139 

140Claude Code mantiene su modo vim y la posición del cursor cuando alterna el [visor de transcripción](#transcript-viewer) con `Ctrl+O` o abre y cierra un panel como `/config`. Si deja el prompt en modo NORMAL, sigue en modo NORMAL cuando regresa, con el cursor donde lo dejó.

141 

142### Cambio de modo140### Cambio de modo

143 141 

144| Comando | Acción | Desde el modo |142| Comando | Acción | Desde el modo |


302 * Presiona `Ctrl+C` para cancelar y restaurar tu entrada original300 * Presiona `Ctrl+C` para cancelar y restaurar tu entrada original

303 * Presiona `Backspace` con la búsqueda vacía para cancelar301 * Presiona `Backspace` con la búsqueda vacía para cancelar

304 302 

305Aceptar una coincidencia o cancelar la búsqueda surte efecto de inmediato, incluso mientras Claude Code todavía está cargando el historial.

306 

307Para encontrar un prompt anterior cuando solo recuerdas algo largo que pegaste en él, como un registro de errores, presiona `Ctrl+R` y escribe una palabra del contenido pegado. Requiere Claude Code v2.1.314 o posterior.303Para encontrar un prompt anterior cuando solo recuerdas algo largo que pegaste en él, como un registro de errores, presiona `Ctrl+R` y escribe una palabra del contenido pegado. Requiere Claude Code v2.1.314 o posterior.

308 304 

309## Comandos Bash en segundo plano305## Comandos Bash en segundo plano


600 596 

601### Qué subraya Claude Code597### Qué subraya Claude Code

602 598 

603Poco después de que deje de escribir, Claude Code subraya las palabras que el diccionario no conoce. Deja sola la palabra que aún está escribiendo hasta que se mueva más allá de ella, y nunca cambia su texto. También omite el texto que parece código:599Poco después de que dejes de escribir, Claude Code subraya las palabras que el diccionario no conoce. No toca la palabra que aún estás escribiendo hasta que pases a la siguiente. También omite el texto que parece código:

604 600 

605* Comandos como `/help`, menciones `@`, URLs, rutas de archivo, y banderas como `--verbose`601* Comandos como `/help`, menciones `@`, URLs, rutas de archivo, y banderas como `--verbose`

606* Palabras con dígitos, guiones bajos, o una letra mayúscula después de la primera, y texto entre comillas invertidas602* Palabras con dígitos, guiones bajos, o una letra mayúscula después de la primera, y texto entre comillas invertidas

keybindings.md +7 −2

Details

581 581 

582Claude Code vincula estos acordes predeterminados en el prefijo `ctrl+x`, por contexto:582Claude Code vincula estos acordes predeterminados en el prefijo `ctrl+x`, por contexto:

583 583 

584* `Chat`: `ctrl+x ctrl+k`, `ctrl+x ctrl+e`, `ctrl+x enter`, `ctrl+x ctrl+a`, `ctrl+x ctrl+s` y `ctrl+x tab`584* `Chat`: `ctrl+x ctrl+k`, `ctrl+x ctrl+e`, `ctrl+x enter`, `ctrl+x ctrl+a`, `ctrl+x ctrl+s`, `ctrl+x tab`, `ctrl+x ctrl+=`, `ctrl+x ctrl+-`, `ctrl+x ctrl+_`, `ctrl+x =` y `ctrl+x -`

585* `Task`: `ctrl+x ctrl+b`585* `Task`: `ctrl+x ctrl+b`

586* `DiffPanel`: `ctrl+x b`586* `DiffPanel`: `ctrl+x b`

587* `Pane`: `ctrl+x left`, `ctrl+x right`, `ctrl+x up`, `ctrl+x down` y `ctrl+x x`587* `Pane`: `ctrl+x left`, `ctrl+x right`, `ctrl+x up`, `ctrl+x down` y `ctrl+x x`


631 "ctrl+x ctrl+a": null,631 "ctrl+x ctrl+a": null,

632 "ctrl+x ctrl+s": null,632 "ctrl+x ctrl+s": null,

633 "ctrl+x tab": null,633 "ctrl+x tab": null,

634 "ctrl+x ctrl+=": null,

635 "ctrl+x ctrl+-": null,

636 "ctrl+x ctrl+_": null,

637 "ctrl+x =": null,

638 "ctrl+x -": null,

634 "ctrl+x": "chat:newline"639 "ctrl+x": "chat:newline"

635 }640 }

636 }641 }


716Claude Code valida sus atajos de teclado y escribe una advertencia en el registro de depuración para:721Claude Code valida sus atajos de teclado y escribe una advertencia en el registro de depuración para:

717 722 

718* Errores de análisis (JSON o estructura inválida)723* Errores de análisis (JSON o estructura inválida)

719* Modificadores mal escritos, como `ctl+k`. Claude Code descarta la parte que no reconoce y aplica la vinculación a la pulsación de tecla que permanece, `k` en este ejemplo.724* Modificadores mal escritos, como `ctl+k`. Claude Code ignora la vinculación completa. Corrige el modificador; en este ejemplo, a `ctrl+k`.

720* Un espacio junto a `+` en una cadena de tecla, como `ctrl+ k`. Claude Code interpreta la cadena como un [acorde](#chords) de `ctrl+` seguido de `k`. Ninguna pulsación de tecla coincide con `ctrl+` por sí sola, por lo que la vinculación nunca se activa. Elimina el espacio.725* Un espacio junto a `+` en una cadena de tecla, como `ctrl+ k`. Claude Code interpreta la cadena como un [acorde](#chords) de `ctrl+` seguido de `k`. Ninguna pulsación de tecla coincide con `ctrl+` por sí sola, por lo que la vinculación nunca se activa. Elimina el espacio.

721* Nombres de contexto inválidos726* Nombres de contexto inválidos

722* Valores de acción inválidos, como una acción que no es una cadena o `null`727* Valores de acción inválidos, como una acción que no es una cadena o `null`

llm-gateway.md +4 −0

Details

43 43 

44Para hacer que una puerta de enlace alcanzada a través de `ANTHROPIC_BASE_URL` sea el único destino que una máquina administrada pueda usar, establezca [`allowedProviders`](https://code.claude.com/docs/es/settings-reference#allowedproviders) en `["customEndpoint"]` en el mismo archivo de configuración administrada y coloque la `ANTHROPIC_BASE_URL` de la puerta de enlace en el bloque `env` de ese archivo. Claude Code entonces rechaza una sesión apuntada a cualquier otro lugar, incluyendo a Anthropic directamente o al proxy propio de un desarrollador, y acepta `ANTHROPIC_BASE_URL` solo con el valor que establezca allí. Para una puerta de enlace alcanzada a través de una variable de punto final específica del proveedor como `ANTHROPIC_BEDROCK_BASE_URL`, la entrada `allowedProviders` dice qué variable fijar. Requiere Claude Code v2.1.285 o posterior.44Para hacer que una puerta de enlace alcanzada a través de `ANTHROPIC_BASE_URL` sea el único destino que una máquina administrada pueda usar, establezca [`allowedProviders`](https://code.claude.com/docs/es/settings-reference#allowedproviders) en `["customEndpoint"]` en el mismo archivo de configuración administrada y coloque la `ANTHROPIC_BASE_URL` de la puerta de enlace en el bloque `env` de ese archivo. Claude Code entonces rechaza una sesión apuntada a cualquier otro lugar, incluyendo a Anthropic directamente o al proxy propio de un desarrollador, y acepta `ANTHROPIC_BASE_URL` solo con el valor que establezca allí. Para una puerta de enlace alcanzada a través de una variable de punto final específica del proveedor como `ANTHROPIC_BEDROCK_BASE_URL`, la entrada `allowedProviders` dice qué variable fijar. Requiere Claude Code v2.1.285 o posterior.

45 45 

46> [!NOTE]

47>

48> Con Desktop con la sesión iniciada en claude.ai, una sesión de Cowork en la máquina del usuario cuenta como [`"anthropic"`](https://code.claude.com/docs/es/settings-reference#allowedproviders). Si lo dejas fuera de esta lista en una política de MDM o en un archivo de configuración administrada, esa sesión se rechaza. Si lo incluyes, las sesiones enviadas directamente a Anthropic también pasan esta lista.

49 

46## Suscripciones y puertas de enlace50## Suscripciones y puertas de enlace

47 51 

48Mientras una [variable de credencial de puerta de enlace](https://code.claude.com/docs/es/llm-gateway-connect.md#set-the-credential-variable) o `apiKeyHelper` está activa, las solicitudes llevan esa credencial en lugar del inicio de sesión de suscripción de claude.ai de un desarrollador, y los límites de uso de la suscripción no se aplican a ellas. Claude Code mantiene un inicio de sesión de claude.ai guardado en la máquina pero no lo envía con esas solicitudes. Ese tráfico se factura por token a quien sea propietario de la credencial que la puerta de enlace reenvía, como la cuenta de Consola de Anthropic de su organización, o su cuenta de Amazon Bedrock, Agent Platform de Google Cloud o Foundry de Microsoft cuando la puerta de enlace enruta allí.52Mientras una [variable de credencial de puerta de enlace](https://code.claude.com/docs/es/llm-gateway-connect.md#set-the-credential-variable) o `apiKeyHelper` está activa, las solicitudes llevan esa credencial en lugar del inicio de sesión de suscripción de claude.ai de un desarrollador, y los límites de uso de la suscripción no se aplican a ellas. Claude Code mantiene un inicio de sesión de claude.ai guardado en la máquina pero no lo envía con esas solicitudes. Ese tráfico se factura por token a quien sea propietario de la credencial que la puerta de enlace reenvía, como la cuenta de Consola de Anthropic de su organización, o su cuenta de Amazon Bedrock, Agent Platform de Google Cloud o Foundry de Microsoft cuando la puerta de enlace enruta allí.

Details

156 156 

157### Conflictos con un inicio de sesión existente157### Conflictos con un inicio de sesión existente

158 158 

159Una variable de credencial de gateway tiene precedencia sobre un inicio de sesión de claude.ai guardado o una clave de Console. Con `ANTHROPIC_AUTH_TOKEN`, la variable tiene precedencia de inmediato. Con `ANTHROPIC_API_KEY`, se te solicita una vez en modo interactivo que apruebes la clave antes de que tome el control.159Tus solicitudes usan una variable de credencial del gateway en lugar de un inicio de sesión de claude.ai guardado. Con `ANTHROPIC_AUTH_TOKEN`, la variable tiene precedencia de inmediato. Con `ANTHROPIC_API_KEY`, se te solicita una vez en modo interactivo que apruebes la clave antes de que tome el control.

160 160 

161Ejecute `/status` para confirmar qué fuente de credencial está activa. Si el inicio muestra una advertencia de conflicto de autenticación que nombra dos fuentes, consulte la primera fila de la [tabla de solución de problemas](#troubleshoot-gateway-errors) para saber cuál descartar. Para borrar un inicio de sesión guardado para que solo permanezca la credencial de puerta de enlace, ejecute `/logout`.161Ejecute `/status` para confirmar qué fuente de credencial está activa. Si el inicio muestra una advertencia de conflicto de autenticación que nombra dos fuentes, consulte la primera fila de la [tabla de solución de problemas](#troubleshoot-gateway-errors) para saber cuál descartar. Para borrar un inicio de sesión guardado para que solo permanezca la credencial de puerta de enlace, ejecute `/logout`.

162 162 


506 506 

507| Error | Causa | Solución |507| Error | Causa | Solución |

508| :- | :- | :- |508| :- | :- | :- |

509| Una advertencia de inicio que nombra dos fuentes de credencial y termina en `auth may not work as expected`. Las versiones más antiguas muestran `Auth conflict: Both a token (SOURCE) and an API key (SOURCE) are set` en su lugar. | Una credencial de puerta de enlace y un inicio de sesión guardado están ambos activos; la variable se usa para solicitudes, pero el inicio de sesión obsoleto puede causar comportamiento de autenticación inesperado | Desestablezca la variable para usar el inicio de sesión guardado, o ejecute `/logout` para usar la credencial de puerta de enlace |509| Una advertencia de inicio que nombra dos fuentes de credenciales y termina en `auth may not work as expected`. Las versiones más antiguas muestran `Auth conflict: Both a token (SOURCE) and an API key (SOURCE) are set` en su lugar. | Una credencial del gateway y un inicio de sesión guardado están activos al mismo tiempo | Quita la variable para usar el inicio de sesión guardado, o ejecuta `/logout` para usar la credencial del gateway |

510| Errores `401` que nombran un token inválido o no reconocido | La credencial no es una que la puerta de enlace emitió, o está en un encabezado que la puerta de enlace no lee | Confirme que la variable coincida con su tipo de credencial en la [tabla de credencial](#set-the-credential-variable), y regenere la clave en la puerta de enlace si fue revocada |510| Errores `401` que nombran un token inválido o no reconocido | La credencial no es una que la puerta de enlace emitió, o está en un encabezado que la puerta de enlace no lee | Confirme que la variable coincida con su tipo de credencial en la [tabla de credencial](#set-the-credential-variable), y regenere la clave en la puerta de enlace si fue revocada |

511| `Your apiKeyHelper script is failing`, o `apiKeyHelper failed:` en stderr en modo no interactivo | El comando en la configuración [`apiKeyHelper`](https://code.claude.com/docs/es/settings-reference#apikeyhelper) no produjo una clave utilizable, por lo que las solicitudes llevan una clave de marcador de posición | Ejecute el comando directamente para ver por qué falla, y vuelva a autenticarse con su proveedor de credenciales si reporta una sesión expirada; consulte [la referencia de errores](https://code.claude.com/docs/es/errors.md#your-apikeyhelper-script-is-failing) |511| `Your apiKeyHelper script is failing`, o `apiKeyHelper failed:` en stderr en modo no interactivo | El comando en la configuración [`apiKeyHelper`](https://code.claude.com/docs/es/settings-reference#apikeyhelper) no produjo una clave utilizable, por lo que las solicitudes llevan una clave de marcador de posición | Ejecute el comando directamente para ver por qué falla, y vuelva a autenticarse con su proveedor de credenciales si reporta una sesión expirada; consulte [la referencia de errores](https://code.claude.com/docs/es/errors.md#your-apikeyhelper-script-is-failing) |

512| `Connection refused — a firewall or proxy may be blocking it (ConnectionRefused)` cuando nada responde en la dirección, o `Can't reach the API server — check your internet or DNS (ENOTFOUND)` cuando el nombre de host no se resuelve, a menudo después de una pausa silenciosa mientras Claude Code [reintenta con retroceso](https://code.claude.com/docs/es/errors.md#automatic-retries). El código entre paréntesis varía; [Unable to connect to API](https://code.claude.com/docs/es/errors.md#unable-to-connect-to-api) cubre los códigos y la redacción anterior | Nada respondió en la URL base: la dirección es incorrecta, o una VPN o firewall bloquea la ruta a la puerta de enlace | Ejecute la [prueba de curl anterior](#verify-the-connection), que falla inmediatamente con la misma causa, y confirme la URL y la ruta de red con su equipo de puerta de enlace |512| `Connection refused — a firewall or proxy may be blocking it (ConnectionRefused)` cuando nada responde en la dirección, o `Can't reach the API server — check your internet or DNS (ENOTFOUND)` cuando el nombre de host no se resuelve, a menudo después de una pausa silenciosa mientras Claude Code [reintenta con retroceso](https://code.claude.com/docs/es/errors.md#automatic-retries). El código entre paréntesis varía; [Unable to connect to API](https://code.claude.com/docs/es/errors.md#unable-to-connect-to-api) cubre los códigos y la redacción anterior | Nada respondió en la URL base: la dirección es incorrecta, o una VPN o firewall bloquea la ruta a la puerta de enlace | Ejecute la [prueba de curl anterior](#verify-the-connection), que falla inmediatamente con la misma causa, y confirme la URL y la ruta de red con su equipo de puerta de enlace |


520| `/fast` reporta `Fast mode unavailable due to network connectivity issues` mientras las solicitudes de inferencia funcionan | La verificación de disponibilidad del [modo rápido](https://code.claude.com/docs/es/fast-mode.md) va directamente a `api.anthropic.com` y no sigue `ANTHROPIC_BASE_URL`, por lo que, si el tráfico de salida directo está bloqueado, la verificación falla | Agrega `api.anthropic.com` a la lista de dominios permitidos si el tráfico de salida está bloqueado, o establece una variable de omisión. Consulta [usar el modo rápido detrás de proxies y gateways de LLM](https://code.claude.com/docs/es/fast-mode.md#use-fast-mode-behind-proxies-and-llm-gateways) |520| `/fast` reporta `Fast mode unavailable due to network connectivity issues` mientras las solicitudes de inferencia funcionan | La verificación de disponibilidad del [modo rápido](https://code.claude.com/docs/es/fast-mode.md) va directamente a `api.anthropic.com` y no sigue `ANTHROPIC_BASE_URL`, por lo que, si el tráfico de salida directo está bloqueado, la verificación falla | Agrega `api.anthropic.com` a la lista de dominios permitidos si el tráfico de salida está bloqueado, o establece una variable de omisión. Consulta [usar el modo rápido detrás de proxies y gateways de LLM](https://code.claude.com/docs/es/fast-mode.md#use-fast-mode-behind-proxies-and-llm-gateways) |

521| `/fast` reporta `Fast mode is currently unavailable` en una sesión que se autentica con una clave emitida por el gateway en `ANTHROPIC_API_KEY` | Mientras `ANTHROPIC_BASE_URL` apunta a tu gateway y la clave no tiene el formato de una clave de API de Anthropic, Claude Code no envía la verificación de disponibilidad del [modo rápido](https://code.claude.com/docs/es/fast-mode.md). Sin una verificación exitosa previa en caché, trata el modo rápido como no disponible | Establece `CLAUDE_CODE_SKIP_FAST_MODE_NETWORK_ERRORS=1`; consulta [usar el modo rápido detrás de proxies y gateways de LLM](https://code.claude.com/docs/es/fast-mode.md#use-fast-mode-behind-proxies-and-llm-gateways) |521| `/fast` reporta `Fast mode is currently unavailable` en una sesión que se autentica con una clave emitida por el gateway en `ANTHROPIC_API_KEY` | Mientras `ANTHROPIC_BASE_URL` apunta a tu gateway y la clave no tiene el formato de una clave de API de Anthropic, Claude Code no envía la verificación de disponibilidad del [modo rápido](https://code.claude.com/docs/es/fast-mode.md). Sin una verificación exitosa previa en caché, trata el modo rápido como no disponible | Establece `CLAUDE_CODE_SKIP_FAST_MODE_NETWORK_ERRORS=1`; consulta [usar el modo rápido detrás de proxies y gateways de LLM](https://code.claude.com/docs/es/fast-mode.md#use-fast-mode-behind-proxies-and-llm-gateways) |

522| `/fast` reporta `Fast mode has been disabled by your organization` en una sesión autenticada con `ANTHROPIC_AUTH_TOKEN`, aunque la organización tiene el modo rápido habilitado | La verificación de disponibilidad requiere un inicio de sesión en claude.ai o una clave de API; con solo un token bearer, Claude Code trata el modo rápido como deshabilitado sin enviar la verificación | Establece `CLAUDE_CODE_SKIP_FAST_MODE_ORG_CHECK=1`; consulta [usar el modo rápido detrás de proxies y gateways de LLM](https://code.claude.com/docs/es/fast-mode.md#use-fast-mode-behind-proxies-and-llm-gateways) |522| `/fast` reporta `Fast mode has been disabled by your organization` en una sesión autenticada con `ANTHROPIC_AUTH_TOKEN`, aunque la organización tiene el modo rápido habilitado | La verificación de disponibilidad requiere un inicio de sesión en claude.ai o una clave de API; con solo un token bearer, Claude Code trata el modo rápido como deshabilitado sin enviar la verificación | Establece `CLAUDE_CODE_SKIP_FAST_MODE_ORG_CHECK=1`; consulta [usar el modo rápido detrás de proxies y gateways de LLM](https://code.claude.com/docs/es/fast-mode.md#use-fast-mode-behind-proxies-and-llm-gateways) |

523| `/feedback` guarda un archivo local en una sesión que usa `ANTHROPIC_BASE_URL` | Detrás de un gateway, `ANTHROPIC_AUTH_TOKEN` y una clave que no tiene el formato de una clave de API de Anthropic no son credenciales de Anthropic. Sin una, Claude Code escribe el informe en un archivo local en `~/.claude/feedback-bundles/` en lugar de enviarlo | Envía el archivo a tu representante de cuenta de Anthropic o adjúntalo a una solicitud de soporte. Consulta [servicios de telemetría](https://code.claude.com/docs/es/data-usage.md#telemetry-services) |

523| Claude Code le pide que inicie sesión aunque la [prueba de curl](#verify-the-connection) tenga éxito | La CLI no tiene credencial propia: una URL base alcanzable no es una, y en una sesión interactiva un bloque `env` en el `.claude/settings.json` o `.claude/settings.local.json` de un proyecto se aplica solo después del asistente de primera ejecución y la [solicitud de confianza](https://code.claude.com/docs/es/permissions.md#what-runs-before-you-trust-a-folder) | Establezca `ANTHROPIC_AUTH_TOKEN` en algún lugar que Claude Code lea antes de la configuración de primera ejecución: una exportación de shell, el bloque `env` en `~/.claude/settings.json`, o configuración administrada |524| Claude Code le pide que inicie sesión aunque la [prueba de curl](#verify-the-connection) tenga éxito | La CLI no tiene credencial propia: una URL base alcanzable no es una, y en una sesión interactiva un bloque `env` en el `.claude/settings.json` o `.claude/settings.local.json` de un proyecto se aplica solo después del asistente de primera ejecución y la [solicitud de confianza](https://code.claude.com/docs/es/permissions.md#what-runs-before-you-trust-a-folder) | Establezca `ANTHROPIC_AUTH_TOKEN` en algún lugar que Claude Code lea antes de la configuración de primera ejecución: una exportación de shell, el bloque `env` en `~/.claude/settings.json`, o configuración administrada |

524| `ANTHROPIC_API_KEY` está establecido pero ignorado, sin solicitud | La clave necesita una aprobación única en sesiones interactivas, y una clave previamente rechazada se ignora sin preguntar de nuevo | Habilítela bajo `/config` con la opción `Use custom API key` |525| `ANTHROPIC_API_KEY` está establecido pero ignorado, sin solicitud | La clave necesita una aprobación única en sesiones interactivas, y una clave previamente rechazada se ignora sin preguntar de nuevo | Habilítela bajo `/config` con la opción `Use custom API key` |

525| `This machine's managed settings require a first-party login`, o [`Administrator policy requires a Cloud gateway sign-in`](https://code.claude.com/docs/es/errors#administrator-policy-requires-a-cloud-gateway-sign-in) cuando la configuración administrada establece `forceLoginMethod` en `"gateway"` o también establece `forceLoginGatewayUrl` | La configuración administrada incluye `forceLoginMethod` o `forceLoginOrgUUID`, que no pueden coexistir con `ANTHROPIC_API_KEY`, `ANTHROPIC_AUTH_TOKEN`, o `apiKeyHelper` | Su administrador debe eliminar `forceLoginMethod`, `forceLoginOrgUUID`, y `forceLoginGatewayUrl` de la configuración administrada para usar credenciales de puerta de enlace, o eliminar la credencial de puerta de enlace y usar el inicio de sesión que la configuración administrada requiere. Los dos no pueden combinarse |526| `This machine's managed settings require a first-party login`, o [`Administrator policy requires a Cloud gateway sign-in`](https://code.claude.com/docs/es/errors#administrator-policy-requires-a-cloud-gateway-sign-in) cuando la configuración administrada establece `forceLoginMethod` en `"gateway"` o también establece `forceLoginGatewayUrl` | La configuración administrada incluye `forceLoginMethod` o `forceLoginOrgUUID`, que no pueden coexistir con `ANTHROPIC_API_KEY`, `ANTHROPIC_AUTH_TOKEN`, o `apiKeyHelper` | Su administrador debe eliminar `forceLoginMethod`, `forceLoginOrgUUID`, y `forceLoginGatewayUrl` de la configuración administrada para usar credenciales de puerta de enlace, o eliminar la credencial de puerta de enlace y usar el inicio de sesión que la configuración administrada requiere. Los dos no pueden combinarse |

Details

142claude -p "Reply with one word: connected"142claude -p "Reply with one word: connected"

143```143```

144 144 

145**Punto de control**: el indicador devuelve una respuesta, y la solicitud aparece en el registro de la puerta de enlace como un `POST` a la ruta `/v1/messages` con estado `200`. Claude Code añade una cadena de consulta como `?beta=true`, así que coincida en la ruta, no en la URL completa. Dos mensajes de fallo apuntan en direcciones diferentes:145**Checkpoint**: el prompt devuelve una respuesta, y la solicitud aparece en el registro del gateway como un `POST` a la ruta `/v1/messages` con estado `200`. Claude Code añade una cadena de consulta como `?beta=true`, así que busca coincidencias con la ruta, no con la URL completa. Revisa el mensaje de fallo:

146 146 

147* `Not logged in`: verifique el registro de la puerta de enlace para distinguir las dos causas. Si está vacío, ninguna credencial alcanzó la sesión y ninguna solicitud salió de la máquina; vuelva a ejecutar las exportaciones en el shell que está probando. Si muestra una solicitud rechazada con `x-api-key` en el cuerpo `401`, la puerta de enlace espera claves en ese encabezado en su lugar; cambie a `ANTHROPIC_API_KEY`147* `Not logged in`: revisa el registro del gateway. Si está vacío, ninguna credencial llegó a la sesión y ninguna solicitud salió de la máquina; vuelve a ejecutar los exports en el shell desde el que estás probando. Si muestra un `401` del gateway que menciona `x-api-key`, el gateway espera las claves en ese encabezado; cambia a `ANTHROPIC_API_KEY`. Si muestra un `401` de `api.anthropic.com` o del endpoint de tu proveedor, corrige la credencial del proveedor que tiene el gateway

148* `Failed to authenticate. API Error: 401` significa que se envió una credencial y fue rechazada, y el registro de la puerta de enlace dice dónde: un `401` que nombra `api.anthropic.com` o el punto final de su proveedor significa que la puerta de enlace alcanzó el ascendente pero su credencial de proveedor fue rechazada, así que la clave de desarrollador funcionó y la credencial de proveedor que la puerta de enlace tiene es incorrecta o un marcador de posición148* `Failed to authenticate. API Error: 401` significa que se envió una credencial y fue rechazada, y el registro de la puerta de enlace dice dónde: un `401` que nombra `api.anthropic.com` o el punto final de su proveedor significa que la puerta de enlace alcanzó el ascendente pero su credencial de proveedor fue rechazada, así que la clave de desarrollador funcionó y la credencial de proveedor que la puerta de enlace tiene es incorrecta o un marcador de posición

149 149 

150Una URL base incorrecta o inaccesible produce un síntoma diferente: Claude Code [reintenta la conexión con retroceso](https://code.claude.com/docs/es/errors.md#automatic-retries) y puede quedarse sin salida durante varios minutos antes de reportar un error. Si el comando parece colgarse, verifique el registro de la puerta de enlace en lugar de esperar; ninguna solicitud que llegue significa que `ANTHROPIC_BASE_URL` no apunta a la puerta de enlace.150Una URL base incorrecta o inaccesible produce un síntoma diferente: Claude Code [reintenta la conexión con retroceso](https://code.claude.com/docs/es/errors.md#automatic-retries) y puede quedarse sin salida durante varios minutos antes de reportar un error. Si el comando parece colgarse, verifique el registro de la puerta de enlace en lugar de esperar; ninguna solicitud que llegue significa que `ANTHROPIC_BASE_URL` no apunta a la puerta de enlace.


247 247 

248Debería ver líneas `data:` llegar incrementalmente. La respuesta completa llegando de una vez después de una pausa significa que la puerta de enlace está almacenando en búfer, lo que detiene Claude Code; un `404` significa que el nombre del modelo no está enrutado. Repita por nombre de modelo.248Debería ver líneas `data:` llegar incrementalmente. La respuesta completa llegando de una vez después de una pausa significa que la puerta de enlace está almacenando en búfer, lo que detiene Claude Code; un `404` significa que el nombre del modelo no está enrutado. Repita por nombre de modelo.

249 249 

250Luego inicie `claude` y envíe un mensaje. Cada síntoma en este paso tiene una causa:250Luego inicia `claude`, envía un mensaje y compara lo que ves:

251 251 

252* Un indicador de inicio de sesión significa una brecha de credencial. Ejecute `/status` y abra la pestaña **Status**: cuando la línea `Setting sources` no incluye configuración administrada, la distribución no alcanzó la máquina; cuando lo hace, la credencial de desarrollador no fue entregada, así que establezca `ANTHROPIC_AUTH_TOKEN` o el `apiKeyHelper`252* Una pantalla de inicio de sesión, o `Not logged in` sin nada nuevo en el registro del gateway, significa que falta una credencial. Ejecuta `/status` y abre la pestaña **Status**: si la línea `Setting sources` no incluye la configuración administrada, la distribución no llegó a la máquina; si la incluye, la credencial de desarrollador no se entregó, así que establece `ANTHROPIC_AUTH_TOKEN` o el `apiKeyHelper`

253* Los errores `Failed to authenticate` significan que la puerta de enlace está rechazando solicitudes; su registro dice qué credencial falló. Un rechazo que la puerta de enlace registra a sí misma nombra la clave de desarrollador, mientras que un `401` de `api.anthropic.com` o el punto final de su proveedor significa que la credencial de proveedor que la puerta de enlace tiene fue rechazada253* `Please run /login · API Error: 401`, `Not logged in` o `Invalid API key` con un `401` en el registro del gateway: comprueba quién emitió el `401`. Corrige la clave de desarrollador o su encabezado si lo emitió el gateway, o la credencial del proveedor que tiene el gateway si provino de `api.anthropic.com` o del endpoint de tu proveedor

254* Es normal que aparezca una única solicitud de aprobación para la clave en el primer uso cuando el gateway espera las claves en el encabezado `x-api-key`, establecidas como `ANTHROPIC_API_KEY`254* Es normal que aparezca una única solicitud de aprobación para la clave en el primer uso cuando el gateway espera las claves en el encabezado `x-api-key`, establecidas como `ANTHROPIC_API_KEY`

255 255 

256Si su organización usa [modo rápido](https://code.claude.com/docs/es/fast-mode.md), ejecute `/fast` aquí también: la verificación de disponibilidad llama a `api.anthropic.com` directamente en lugar de seguir la URL base de la puerta de enlace, así que una sesión enrutada por puerta de enlace puede reportar modo rápido como no disponible o deshabilitado aunque la inferencia funcione. [Usar modo rápido detrás de proxies y puertas de enlace LLM](https://code.claude.com/docs/es/fast-mode.md#use-fast-mode-behind-proxies-and-llm-gateways) asigna cada mensaje a la variable que lo restaura, distribuida con [el resto de la configuración](#distribute-the-configuration).256Si su organización usa [modo rápido](https://code.claude.com/docs/es/fast-mode.md), ejecute `/fast` aquí también: la verificación de disponibilidad llama a `api.anthropic.com` directamente en lugar de seguir la URL base de la puerta de enlace, así que una sesión enrutada por puerta de enlace puede reportar modo rápido como no disponible o deshabilitado aunque la inferencia funcione. [Usar modo rápido detrás de proxies y puertas de enlace LLM](https://code.claude.com/docs/es/fast-mode.md#use-fast-mode-behind-proxies-and-llm-gateways) asigna cada mensaje a la variable que lo restaura, distribuida con [el resto de la configuración](#distribute-the-configuration).

mcp.md +0 −2

Details

835 835 

836Un servidor que su organización proporciona a través de la configuración administrada [`managedMcpServers`](https://code.claude.com/docs/es/managed-mcp#provide-servers-through-managed-settings) se clasifica por encima de todos estos, por lo que cuando uno de ellos lo duplica, Claude Code conecta la definición de la organización. Requiere Claude Code v2.1.259 o posterior.836Un servidor que su organización proporciona a través de la configuración administrada [`managedMcpServers`](https://code.claude.com/docs/es/managed-mcp#provide-servers-through-managed-settings) se clasifica por encima de todos estos, por lo que cuando uno de ellos lo duplica, Claude Code conecta la definición de la organización. Requiere Claude Code v2.1.259 o posterior.

837 837 

838Si abre una sesión local en la [pestaña Code de la aplicación de escritorio](https://code.claude.com/docs/es/desktop.md#mcp-servers-from-the-claude-desktop-chat-app) con el mismo nombre de servidor stdio en el nivel superior de `~/.claude.json` (alcance de usuario) y en `.mcp.json`, la pestaña Code usa la definición de `~/.claude.json`.

839 

840### Expansión de variables de entorno en `.mcp.json`838### Expansión de variables de entorno en `.mcp.json`

841 839 

842Claude 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.840Claude 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.

Details

147 147 

148## Configuración de RBAC de Azure148## Configuración de RBAC de Azure

149 149 

150Los roles predeterminados `Azure AI User` y `Cognitive Services User` incluyen todos los permisos necesarios para invocar modelos de Claude.150Si te autenticas con Microsoft Entra ID o con un token de portador emitido por este, asigna a tu identidad el rol `Foundry User` o `Cognitive Services User` en tu recurso de Foundry. Es posible que todavía veas `Foundry User` con su nombre anterior, `Azure AI User`.

151 151 

152Para permisos más restrictivos, cree un rol personalizado con lo siguiente:152Si estos roles no satisfacen tus necesidades, consulta la [documentación de RBAC de Microsoft Foundry](https://learn.microsoft.com/en-us/azure/foundry/concepts/rbac-foundry) para conocer los roles personalizados.

153 

154```json theme={null}

155{

156 "permissions": [

157 {

158 "dataActions": [

159 "Microsoft.CognitiveServices/accounts/providers/*"

160 ]

161 }

162 ]

163}

164```

165 

166Para 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).

167 153 

168## Ventana de contexto de 1M tokens154## Ventana de contexto de 1M tokens

169 155 

model-config.md +5 −3

Details

157 157 

158Cuando el modelo activo al inicio proviene de la configuración de proyecto o administrada en lugar de tu propia selección, el encabezado de inicio muestra qué archivo de configuración lo estableció. Ejecuta `/model` para sobrescribirlo; la configuración de proyecto o administrada se vuelve a aplicar en el próximo inicio. En plataformas que integran Claude Code y establecen [`CLAUDE_CODE_PROVIDER_MANAGED_BY_HOST`](https://code.claude.com/docs/es/env-vars), la configuración de modelo del host tiene precedencia sobre la configuración de modelo administrada, mientras que una lista de modelos permitidos `availableModels` administrada sigue vigente a menos que el host proporcione la suya; [Excepciones a la precedencia de la configuración administrada](https://code.claude.com/docs/es/settings.md#exceptions-to-managed-settings-precedence) indica qué claves y variables sobrescribe el host.158Cuando el modelo activo al inicio proviene de la configuración de proyecto o administrada en lugar de tu propia selección, el encabezado de inicio muestra qué archivo de configuración lo estableció. Ejecuta `/model` para sobrescribirlo; la configuración de proyecto o administrada se vuelve a aplicar en el próximo inicio. En plataformas que integran Claude Code y establecen [`CLAUDE_CODE_PROVIDER_MANAGED_BY_HOST`](https://code.claude.com/docs/es/env-vars), la configuración de modelo del host tiene precedencia sobre la configuración de modelo administrada, mientras que una lista de modelos permitidos `availableModels` administrada sigue vigente a menos que el host proporcione la suya; [Excepciones a la precedencia de la configuración administrada](https://code.claude.com/docs/es/settings.md#exceptions-to-managed-settings-precedence) indica qué claves y variables sobrescribe el host.

159 159 

160Si tú o tu organización configuran [hooks PreModelSwitch](https://code.claude.com/docs/es/hooks.md#premodelswitch), se ejecutan antes de que se aplique un cambio solicitado y pueden bloquearlo o pedirte que lo confirmes.160Si tú o tu organización configuran [hooks PreModelSwitch](https://code.claude.com/docs/es/hooks.md#premodelswitch), se ejecutan antes de que se aplique un cambio solicitado y pueden bloquearlo o pedirte que lo confirmes. Para averiguar por qué un hook bloqueó un cambio y qué hacer, consulta [Model switch was blocked by a PreModelSwitch hook](https://code.claude.com/docs/es/errors.md#model-switch-was-blocked-by-a-premodelswitch-hook).

161 161 

162Cuando Claude Code no puede determinar qué hooks PreModelSwitch entregan los [plugins administrados](https://code.claude.com/docs/es/settings-reference.md#enabledplugins) de tu organización, por ejemplo porque un plugin administrado no se cargó, rechaza el cambio en lugar de aplicarlo sin verificar, y vuelve a verificar en cada nuevo intento. Consulta [Model switch was blocked by a PreModelSwitch hook](https://code.claude.com/docs/es/errors.md#model-switch-was-blocked-by-a-premodelswitch-hook) para ver el mensaje y cómo recuperarte.162Si un [plugin administrado](https://code.claude.com/docs/es/settings-reference.md#enabledplugins) o sus hooks no se cargan, aún puedes cambiar de modelo. Los hooks PreModelSwitch del plugin no se ejecutan, por lo que un cambio que uno de ellos habría bloqueado puede aplicarse. Los demás hooks PreModelSwitch que sí se cargaron siguen ejecutándose y pueden bloquearlo. Si Claude Code anterior a v2.1.323 rechaza el cambio con `so organization-managed PreModelSwitch hooks could not be checked`, actualiza Claude Code.

163 

164Para ver qué falló, ejecuta `/plugin` en tu sesión y abre la [pestaña **Errors**](https://code.claude.com/docs/es/plugins/troubleshooting.md#failed-to-load-hooks-from-and-hooks-that-dont-fire). Si no aparece nada allí, inicia una nueva sesión con `claude --debug` desde tu shell y cambia a un modelo diferente; luego lee el [registro de depuración](https://code.claude.com/docs/es/hooks.md#debug-hooks). Después de corregir el plugin, o de que una [actualización del plugin](https://code.claude.com/docs/es/plugins/install.md#keep-plugins-updated) traiga a tu máquina la corrección de tu administrador, ejecuta `/reload-plugins` en tu sesión para que sus hooks se ejecuten.

163 165 

164Cuando cambias de modelo mediante el método `setModel()` del [Agent SDK](https://code.claude.com/docs/es/agent-sdk/overview.md), a través de una aplicación como la [aplicación de escritorio](https://code.claude.com/docs/es/desktop.md), o desde un dispositivo conectado mediante [Remote Control](https://code.claude.com/docs/es/remote-control.md), Claude Code verifica el valor al hacer el cambio:166Cuando cambias de modelo mediante el método `setModel()` del [Agent SDK](https://code.claude.com/docs/es/agent-sdk/overview.md), a través de una aplicación como la [aplicación de escritorio](https://code.claude.com/docs/es/desktop.md), o desde un dispositivo conectado mediante [Remote Control](https://code.claude.com/docs/es/remote-control.md), Claude Code verifica el valor al hacer el cambio:

165 167 


903 905 

904### Corregir la ventana para un gateway o ID de modelo personalizado906### Corregir la ventana para un gateway o ID de modelo personalizado

905 907 

906Cualquiera de estas advertencias de inicio significa que Claude Code no reconoce el ID de modelo de tu sesión, por lo que no puede determinar la ventana de contexto del modelo y asume 200K tokens:908Cualquiera de estas advertencias significa que Claude Code no reconoce el ID de modelo de tu sesión, por lo que no puede determinar la ventana de contexto del modelo y asume 200K tokens:

907 909 

908```text theme={null}910```text theme={null}

909⚠ Model "my-gateway-opus" isn't recognized · context assumed to be 200k tokens · ...911⚠ Model "my-gateway-opus" isn't recognized · context assumed to be 200k tokens · ...

Details

110| `CLAUDE_CODE_ENABLE_TELEMETRY` | Habilita la recopilación de telemetría (requerido) | `1` |110| `CLAUDE_CODE_ENABLE_TELEMETRY` | Habilita la recopilación de telemetría (requerido) | `1` |

111| `OTEL_METRICS_EXPORTER` | Tipos de exportador de métricas, separados por comas. Use `none` para deshabilitar | `console`, `otlp`, `prometheus`, `none` |111| `OTEL_METRICS_EXPORTER` | Tipos de exportador de métricas, separados por comas. Use `none` para deshabilitar | `console`, `otlp`, `prometheus`, `none` |

112| `OTEL_LOGS_EXPORTER` | Tipos de exportador de registros/eventos, separados por comas. Use `none` para deshabilitar | `console`, `otlp`, `none` |112| `OTEL_LOGS_EXPORTER` | Tipos de exportador de registros/eventos, separados por comas. Use `none` para deshabilitar | `console`, `otlp`, `none` |

113| `OTEL_EXPORTER_OTLP_PROTOCOL` | Protocolo para el exportador OTLP, se aplica a todas las señales. Claude Code no tiene protocolo predeterminado, así que establezca esto o la variable de protocolo específica de la señal para cada exportador `otlp` que habilite | `grpc`, `http/json`, `http/protobuf` |113| `OTEL_EXPORTER_OTLP_PROTOCOL` | Protocolo para el exportador OTLP, se aplica a todas las señales. El valor predeterminado es `http/protobuf` para un endpoint `http://` o `https://` válido. Para un endpoint gRPC como `http://localhost:4317`, establécelo en `grpc`. El valor predeterminado requiere Claude Code v2.1.323 o posterior | `grpc`, `http/json`, `http/protobuf` |

114| `OTEL_EXPORTER_OTLP_ENDPOINT` | Punto final del recopilador OTLP para todas las señales | `http://localhost:4317` |114| `OTEL_EXPORTER_OTLP_ENDPOINT` | Punto final del recopilador OTLP para todas las señales | `http://localhost:4317` |

115| `OTEL_EXPORTER_OTLP_METRICS_PROTOCOL` | Protocolo para métricas, anula la configuración general | `grpc`, `http/json`, `http/protobuf` |115| `OTEL_EXPORTER_OTLP_METRICS_PROTOCOL` | Protocolo para métricas, anula la configuración general | `grpc`, `http/json`, `http/protobuf` |

116| `OTEL_EXPORTER_OTLP_METRICS_ENDPOINT` | Punto final de métricas OTLP, anula la configuración general | `http://localhost:4318/v1/metrics` |116| `OTEL_EXPORTER_OTLP_METRICS_ENDPOINT` | Punto final de métricas OTLP, anula la configuración general | `http://localhost:4318/v1/metrics` |


431> * **Sin espacios permitidos**: los valores no pueden contener espacios. Por ejemplo, `user.organizationName=My Company` es inválido431> * **Sin espacios permitidos**: los valores no pueden contener espacios. Por ejemplo, `user.organizationName=My Company` es inválido

432> * **Formato**: debe ser pares clave=valor separados por comas: `key1=value1,key2=value2`432> * **Formato**: debe ser pares clave=valor separados por comas: `key1=value1,key2=value2`

433> * **Caracteres permitidos**: solo caracteres ASCII de EE.UU. excluyendo caracteres de control, espacios en blanco, comillas dobles, comas, puntos y comas y barras invertidas433> * **Caracteres permitidos**: solo caracteres ASCII de EE.UU. excluyendo caracteres de control, espacios en blanco, comillas dobles, comas, puntos y comas y barras invertidas

434> * **Caracteres especiales**: los caracteres fuera del rango permitido deben estar codificados en porcentaje434> * **Caracteres especiales**: los caracteres fuera del rango permitido deben estar codificados en porcentaje, y un `=` dentro de un valor debe escribirse como `%3D`

435>435>

436> Para un valor que necesitaría un espacio, use guiones bajos o camelCase en su lugar. Los siguientes ejemplos establecen `org.name` con cada forma:436> Para un valor que necesitaría un espacio, use guiones bajos o camelCase en su lugar. Los siguientes ejemplos establecen `org.name` con cada forma:

437>437>


475 475 

476* **Lo estableciste en la computadora que ejecuta Desktop**: Desktop no pasa a la sesión SSH un valor que establezcas ahí476* **Lo estableciste en la computadora que ejecuta Desktop**: Desktop no pasa a la sesión SSH un valor que establezcas ahí

477* **Lo exportaste en `/etc/profile` u otro archivo que solo leen los shells de inicio de sesión**: el nombre llega cuando ejecutas `claude` desde un shell de inicio de sesión, pero no en una sesión SSH de Desktop. Desktop no inicia Claude Code a través de un shell de inicio de sesión. En su lugar, establece la variable en `env` en el [archivo de configuración administrada](https://code.claude.com/docs/es/desktop.md#managed-settings) de la máquina remota.477* **Lo exportaste en `/etc/profile` u otro archivo que solo leen los shells de inicio de sesión**: el nombre llega cuando ejecutas `claude` desde un shell de inicio de sesión, pero no en una sesión SSH de Desktop. Desktop no inicia Claude Code a través de un shell de inicio de sesión. En su lugar, establece la variable en `env` en el [archivo de configuración administrada](https://code.claude.com/docs/es/desktop.md#managed-settings) de la máquina remota.

478* **Un valor contiene un espacio**: en ese caso, Claude Code no copia ninguna de las claves en los eventos ni en los puntos de datos, y no reporta ningún error. [Quita el espacio del valor](#multi-team-organization-support).478* **Un valor contiene un espacio**: en ese caso, Claude Code no copia ninguna de las claves en los eventos ni en los puntos de datos. Para ver qué valor tiene el espacio, ejecuta `/status` en una sesión en la máquina remota. [Quita el espacio del valor](#multi-team-organization-support).

479* **Algo más ya establece la variable**: en una sesión que inicia la aplicación de escritorio, una variable ya establecida en el entorno de lanzamiento [tiene precedencia sobre los archivos de configuración](https://code.claude.com/docs/es/settings-reference.md#how-env-values-interact-with-your-shell). El [registro de depuración](https://code.claude.com/docs/es/debug-your-config.md) nombra cada variable ignorada. Cuando un despliegue de Desktop de terceros [especifica un endpoint OTLP](#how-managed-settings-lock-the-otlp-destination) en el entorno que proporciona, ese entorno lleva el propio `OTEL_RESOURCE_ATTRIBUTES` de Desktop.479* **Algo más ya establece la variable**: en una sesión que inicia la aplicación de escritorio, una variable ya establecida en el entorno de lanzamiento [tiene precedencia sobre los archivos de configuración](https://code.claude.com/docs/es/settings-reference.md#how-env-values-interact-with-your-shell). El [registro de depuración](https://code.claude.com/docs/es/debug-your-config.md) nombra cada variable ignorada. Cuando un despliegue de Desktop de terceros [especifica un endpoint OTLP](#how-managed-settings-lock-the-otlp-destination) en el entorno que proporciona, ese entorno lleva el propio `OTEL_RESOURCE_ATTRIBUTES` de Desktop.

480 480 

481### Configuraciones de ejemplo481### Configuraciones de ejemplo

Details

304claude --permission-mode plan304claude --permission-mode plan

305```305```

306 306 

307Presiona `Shift+Tab` de nuevo para salir del modo plan sin aprobar un plan.307Sin ninguna solicitud de aprobación abierta, presiona `Shift+Tab` de nuevo para salir del modo plan. En la solicitud de aprobación, presiona primero `Esc`, ya que presionar `Shift+Tab` allí aprueba el plan.

308 308 

309### Revisa y aprueba un plan309### Revisa y aprueba un plan

310 310 


593> * Cuando Claude lee un [artefacto que hizo otra persona](https://code.claude.com/docs/es/artifacts.md#read-an-artifact-shared-with-you), se aplican los casos de aprobación que se enumeran en esa sección593> * Cuando Claude lee un [artefacto que hizo otra persona](https://code.claude.com/docs/es/artifacts.md#read-an-artifact-shared-with-you), se aplican los casos de aprobación que se enumeran en esa sección

594> * Una lectura desde una [ruta de red](https://code.claude.com/docs/es/permissions.md#network-paths) te pide permiso594> * Una lectura desde una [ruta de red](https://code.claude.com/docs/es/permissions.md#network-paths) te pide permiso

595> 3. Todo lo demás va al clasificador, salvo las [eliminaciones de rutas críticas](#critical-paths) con su manejo predeterminado. Las herramientas de conectores y las herramientas MCP con `requiresUserInteraction` que te piden permiso directamente en el paso 1 tampoco llegan nunca al clasificador, así que ni una aprobación exigida por la organización ni un paso de consentimiento se aprueban automáticamente595> 3. Todo lo demás va al clasificador, salvo las [eliminaciones de rutas críticas](#critical-paths) con su manejo predeterminado. Las herramientas de conectores y las herramientas MCP con `requiresUserInteraction` que te piden permiso directamente en el paso 1 tampoco llegan nunca al clasificador, así que ni una aprobación exigida por la organización ni un paso de consentimiento se aprueban automáticamente

596> * Con [Code Mode](https://code.claude.com/docs/es/code-mode.md#permission-checks) activado, el código de Claude va al clasificador una vez antes de ejecutarse, y las llamadas a herramientas que contiene no. Aún puedes bloquear una llamada con una regla `deny` o exigir una solicitud de permiso con una regla `ask`, pero Claude puede ejecutar comandos Bash en [formas con las que las reglas no coinciden](https://code.claude.com/docs/es/permissions.md#bash-rule-limits)

596> 4. Si el clasificador bloquea, Claude recibe el motivo. En la mayoría de las sesiones, el motivo nombra la regla con la que coincidió el clasificador, como `[Data Exfiltration]`, en lugar de dar una explicación escrita; consulta [Revisar denegaciones](https://code.claude.com/docs/es/auto-mode-config.md#review-denials)597> 4. Si el clasificador bloquea, Claude recibe el motivo. En la mayoría de las sesiones, el motivo nombra la regla con la que coincidió el clasificador, como `[Data Exfiltration]`, en lugar de dar una explicación escrita; consulta [Revisar denegaciones](https://code.claude.com/docs/es/auto-mode-config.md#review-denials)

597>598>

598> Un [mod](https://code.claude.com/docs/es/plugins/mods/overview.md) que instales y que maneje `tool.check` también puede aprobar una acción. Para los casos en los que su aprobación no supera tus reglas y hooks, consulta [Ampliar los permisos con hooks](https://code.claude.com/docs/es/permissions.md#precedence-among-rules-hooks-and-mods).599> Un [mod](https://code.claude.com/docs/es/plugins/mods/overview.md) que instales y que maneje `tool.check` también puede aprobar una acción. Para los casos en los que su aprobación no supera tus reglas y hooks, consulta [Ampliar los permisos con hooks](https://code.claude.com/docs/es/permissions.md#precedence-among-rules-hooks-and-mods).

permissions.md +1 −1

Details

784* Fuera de un repositorio, Claude Code asocia la confianza al directorio desde el que lo iniciaste, y la confianza cubre cualquier subdirectorio de ese directorio excepto un repositorio de git anidado dentro de él, como un clon. Cada subdirectorio cubierto cuenta entonces como una carpeta cuyo padre marcaste como confiable.784* Fuera de un repositorio, Claude Code asocia la confianza al directorio desde el que lo iniciaste, y la confianza cubre cualquier subdirectorio de ese directorio excepto un repositorio de git anidado dentro de él, como un clon. Cada subdirectorio cubierto cuenta entonces como una carpeta cuyo padre marcaste como confiable.

785* Cuando inicias en tu directorio home, Claude Code mantiene la confianza solo para la sesión actual y no la escribe en el disco; consulta la nota sobre [salvaguardas adicionales](https://code.claude.com/docs/es/security.md#additional-safeguards).785* Cuando inicias en tu directorio home, Claude Code mantiene la confianza solo para la sesión actual y no la escribe en el disco; consulta la nota sobre [salvaguardas adicionales](https://code.claude.com/docs/es/security.md#additional-safeguards).

786 786 

787Claude Code muestra el diálogo de confianza solo en sesiones interactivas. Una ejecución `claude -p` o una sesión del SDK nunca lo muestra, y confiar en una carpeta principal no cuenta para estas reglas, por lo que [Lo que se ejecuta antes de confiar en una carpeta](#what-runs-before-you-trust-a-folder) indica qué contenido del repositorio Claude Code aún utiliza en cada una de esas dos situaciones.787La extensión de VS Code solicita la misma confianza, en un diálogo titulado `Trust this folder in Claude Code?`, antes de iniciar una sesión. Claude Code muestra el diálogo de confianza en sesiones interactivas de terminal, pero no en sesiones `claude -p` ni del SDK. Confiar en una carpeta principal no cuenta para estas reglas. [Lo que se ejecuta antes de confiar en una carpeta](#what-runs-before-you-trust-a-folder) indica qué contenido del repositorio Claude Code aún utiliza en cada caso.

788 788 

789Antes de iniciar o reiniciar una [sesión en segundo plano](https://code.claude.com/docs/es/agent-view.md), Claude Code también verifica la confianza del espacio de trabajo para el directorio en el que se ejecuta la sesión. Si ejecutas `claude --bg` desde una terminal en un directorio en el que no has confiado, el diálogo de confianza aparece primero y la sesión comienza una vez que lo aceptas. Donde no puede aparecer ningún diálogo, como en un script, el comando sale con un error [`Workspace not trusted`](https://code.claude.com/docs/es/errors#workspace-not-trusted-when-dispatching-a-background-session) en su lugar.789Antes de iniciar o reiniciar una [sesión en segundo plano](https://code.claude.com/docs/es/agent-view.md), Claude Code también verifica la confianza del espacio de trabajo para el directorio en el que se ejecuta la sesión. Si ejecutas `claude --bg` desde una terminal en un directorio en el que no has confiado, el diálogo de confianza aparece primero y la sesión comienza una vez que lo aceptas. Donde no puede aparecer ningún diálogo, como en un script, el comando sale con un error [`Workspace not trusted`](https://code.claude.com/docs/es/errors#workspace-not-trusted-when-dispatching-a-background-session) en su lugar.

790 790 

Details

4 4 

5# Agregar componentes a un plugin5# Agregar componentes a un plugin

6 6 

7> Agrega skills, hooks, servidores MCP y todos los demás tipos de componentes a un plugin de Claude Code, con un ejemplo que valida cada uno.7> Agrega skills, hooks, servidores MCP y otros tipos de componentes a un plugin de Claude Code, con un ejemplo que valida cada uno.

8 8 

9Un plugin de Claude Code se construye a partir de componentes, como skills, agentes, hooks y servidores MCP. Cada componente tiene una carpeta predeterminada en el plugin, una clave de manifiesto opcional en `.claude-plugin/plugin.json` que reemplaza o se suma a esa carpeta, y un nombre que ve el usuario. Para la tabla de campos completa de cada clave, consulte la [referencia de manifiesto](https://code.claude.com/docs/es/plugins/manifest-reference.md#fields).9Un plugin de Claude Code se construye a partir de componentes, como skills, agentes, hooks y servidores MCP. Cada componente tiene una carpeta predeterminada en el plugin, una clave de manifiesto opcional en `.claude-plugin/plugin.json` que reemplaza o se suma a esa carpeta, y un nombre que ve el usuario. Para la tabla de campos completa de cada clave, consulte la [referencia de manifiesto](https://code.claude.com/docs/es/plugins/manifest-reference.md#fields).

10 10 


22 22 

23## Explorar el directorio del plugin23## Explorar el directorio del plugin

24 24 

25El explorador muestra un plugin de ejemplo, `my-plugin`, que tiene uno de cada tipo de componente en su ubicación predeterminada:25El explorador muestra un plugin de ejemplo, `my-plugin`, que tiene estos componentes en sus ubicaciones predeterminadas:

26 26 

27* Una skill de revisión y un comando `about`27* Una skill de revisión y un comando `about`

28* Un subagente de revisión de seguridad28* Un subagente de revisión de seguridad


31* Un estilo de salida y un tema de color31* Un estilo de salida y un tema de color

32* Un flujo de trabajo de auditoría de rutas32* Un flujo de trabajo de auditoría de rutas

33* Un ejecutable `hello-plugin`33* Un ejecutable `hello-plugin`

34* Configuración predeterminada

35* Un servidor MCP local y un servidor de lenguaje Go34* Un servidor MCP local y un servidor de lenguaje Go

36 35 

37Cada archivo es el ejemplo válido más pequeño de su formato, presente para mostrar la forma en lugar de ser útil: una skill o agente real lleva instrucciones completas y a menudo archivos de apoyo, y un hook o monitor real realiza trabajo real. Las secciones después del explorador utilizan los mismos archivos que sus ejemplos y enlazan a otros más completos. Seleccione un archivo o carpeta para leer para qué sirve, ver qué va en él y encontrar la sección que lo cubre.36Cada archivo es el ejemplo válido más pequeño de su formato, presente para mostrar la forma en lugar de ser útil: una skill o agente real lleva instrucciones completas y a menudo archivos de apoyo, y un hook o monitor real realiza trabajo real. Las secciones después del explorador utilizan los mismos archivos que sus ejemplos y enlazan a otros más completos. Seleccione un archivo o carpeta para leer para qué sirve, ver qué va en él y encontrar la sección que lo cubre.

38 37 

39What goes in a plugin38What goes in a plugin

40 39 

41This example plugin, `my-plugin`, has one of every kind of component, each in its default location. Select a file or folder to read what it’s for and see what goes in it.40This example plugin, `my-plugin`, has the components listed here, each in its default location. Select a file or folder to read what it’s for and see what goes in it.

42 41 

43Plugin directory42Plugin directory

44 43 


178npx prettier --write .177npx prettier --write .

179```178```

180 179 

181Un `settings.json` en la raíz del plugin contiene [configuración](https://code.claude.com/docs/es/settings-reference.md) que se aplica mientras el plugin está habilitado, para que un plugin pueda cambiar cómo se comporta la sesión y no solo agregar componentes. Solo dos claves tienen efecto desde un plugin, [`agent`](https://code.claude.com/docs/es/settings-reference#agent) y [`subagentStatusLine`](https://code.claude.com/docs/es/settings-reference#subagentstatusline); todas las demás claves se descartan. Consulte [Configuración predeterminada](#default-settings).

182 

183Este establece `agent`, que ejecuta el hilo principal de la sesión como el agente `security-reviewer` del plugin, para que el indicador del sistema de ese agente, las restricciones de herramientas y el modelo se apliquen a toda la sesión:

184 

185```json theme={null}

186{

187 "agent": "security-reviewer"

188}

189```

190 

191Un [servidor MCP](https://code.claude.com/docs/es/mcp.md) proporciona a Claude herramientas de un sistema externo. Declárelo en `.mcp.json` en la raíz del plugin. Este inicia un servidor local desde un script dentro del plugin y aparece en `/mcp` como `plugin:my-plugin:db`:180Un [servidor MCP](https://code.claude.com/docs/es/mcp.md) proporciona a Claude herramientas de un sistema externo. Declárelo en `.mcp.json` en la raíz del plugin. Este inicia un servidor local desde un script dentro del plugin y aparece en `/mcp` como `plugin:my-plugin:db`:

192 181 

193```json theme={null}182```json theme={null}


484 473 

485claude.ai y Cowork no instalan un plugin que tenga un directorio `bin/` de nivel superior, incluido uno que [distribuya a través de la configuración de la organización de claude.ai](https://claude.com/docs/plugins/org-sync#keep-executables-out-of-the-top-level-bin-directory).474claude.ai y Cowork no instalan un plugin que tenga un directorio `bin/` de nivel superior, incluido uno que [distribuya a través de la configuración de la organización de claude.ai](https://claude.com/docs/plugins/org-sync#keep-executables-out-of-the-top-level-bin-directory).

486 475 

487### Configuración predeterminada

488 

489Para establecer valores predeterminados que se apliquen mientras el plugin está habilitado, agregue un `settings.json` en la raíz del plugin, o coloque el mismo objeto en línea en la clave de manifiesto `settings`. Dos claves tienen efecto, `agent` y `subagentStatusLine`, y todas las demás claves se descartan.

490 

491Establezca `agent` para ejecutar uno de los agentes propios del plugin como el hilo principal:

492 

493```json settings.json theme={null}

494{

495 "agent": "security-reviewer"

496}

497```

498 

499Cargue el plugin e inicie una sesión. Claude entonces responde en la conversación principal con el indicador del sistema del agente `security-reviewer` y el modelo.

500 

501Para todo lo que controla la clave, consulte la [configuración `agent`](https://code.claude.com/docs/es/settings-reference#agent).

502 

503Cuando la misma clave se establece en más de un lugar, estas reglas deciden qué valor se aplica:

504 

505* **Archivo sobre manifiesto**: cuando ambos existen y `settings.json` establece al menos una clave admitida, `settings.json` se aplica y el `settings` del manifiesto se ignora

506* **Configuración del usuario sobre valores predeterminados del plugin**: en todas las fuentes de configuración, los valores predeterminados del plugin son la capa más baja, así que un `agent` propio del usuario en `~/.claude/settings.json` anula el suyo

507* **Dos plugins establecen la misma clave**: el valor del plugin cargado último se aplica, y `claude --debug` registra `overrides setting`

508 

509Para la forma `subagentStatusLine`, consulte [líneas de estado de subagente](https://code.claude.com/docs/es/statusline.md#subagent-status-lines).

510 

511### Temas y estilos de salida476### Temas y estilos de salida

512 477 

513Un plugin puede incluir temas de color y estilos de salida. Ambos aparecen en los mismos selectores que los del usuario. Para cualquiera de los dos, establecer la clave de manifiesto reemplaza el escaneo de carpeta.478Un plugin puede incluir temas de color y estilos de salida. Ambos aparecen en los mismos selectores que los del usuario. Para cualquiera de los dos, establecer la clave de manifiesto reemplaza el escaneo de carpeta.

Details

72* **`version`**: opcional. Configurarlo mantiene a los usuarios en esa versión hasta que la cambie; [Lanzar una nueva versión](https://code.claude.com/docs/es/plugins/host-marketplace.md#release-a-new-version) dice cuándo configurarla u omitirla.72* **`version`**: opcional. Configurarlo mantiene a los usuarios en esa versión hasta que la cambie; [Lanzar una nueva versión](https://code.claude.com/docs/es/plugins/host-marketplace.md#release-a-new-version) dice cuándo configurarla u omitirla.

73* **`author`**: a quién acreditar. `name` es requerido dentro de él; `email` y `url` son opcionales.73* **`author`**: a quién acreditar. `name` es requerido dentro de él; `email` y `url` son opcionales.

74 74 

75Todos los demás campos están en la [referencia del manifiesto](https://code.claude.com/docs/es/plugins/manifest-reference.md#fields).75Los demás campos están en la [referencia del manifiesto](https://code.claude.com/docs/es/plugins/manifest-reference.md#fields).

76 76 

77Solo `plugin.json` va dentro de `.claude-plugin/`. El skill que agrega a continuación va directamente bajo `my-first-plugin/`, junto a esa carpeta.77Solo `plugin.json` va dentro de `.claude-plugin/`. El skill que agrega a continuación va directamente bajo `my-first-plugin/`, junto a esa carpeta.

78 78 


344 "PostToolUse": [344 "PostToolUse": [

345 {345 {

346 "matcher": "Write|Edit",346 "matcher": "Write|Edit",

347 "hooks": [{ "type": "command", "command": "jq -r '.tool_input.file_path' | xargs npm run lint:fix" }]347 "hooks": [{ "type": "command", "command": "f=$(jq -r '.tool_input.file_path') && npm run lint:fix -- \"$f\"" }]

348 }348 }

349 ]349 ]

350 }350 }

Details

4 4 

5# Referencia del manifiesto de plugins5# Referencia del manifiesto de plugins

6 6 

7> Referencia completa de plugin.json: cada campo con su tipo y valor predeterminado, formas de ruta aceptadas, y los esquemas de userConfig y variables de entorno.7> Referencia completa de plugin.json: campos con tipos y valores predeterminados, formas de ruta aceptadas y los esquemas de userConfig y de variables de entorno.

8 8 

9Un manifiesto de plugin es el archivo `plugin.json` en el directorio `.claude-plugin/` de un plugin. Contiene los metadatos del plugin y los valores de [`userConfig`](#user-configuration) que Claude Code solicita al usuario. También declara cualquier componente que defina en línea o que mantenga fuera de su [ubicación predeterminada](#standard-layout).9Un manifiesto de plugin es el archivo `plugin.json` en el directorio `.claude-plugin/` de un plugin. Contiene los metadatos del plugin y los valores de [`userConfig`](#user-configuration) que Claude Code solicita al usuario. También declara cualquier componente que defina en línea o que mantenga fuera de su [ubicación predeterminada](#standard-layout).

10 10 


117 117 

118## Campos118## Campos

119 119 

120La tabla enumera las claves de nivel superior en `plugin.json`. `name` es la única clave obligatoria. Donde un nombre de campo es un enlace, la sección vinculada tiene sus reglas completas.120La tabla enumera las claves de nivel superior en `plugin.json`. `name` es la única clave obligatoria. Cuando el nombre de un campo es un enlace, la sección enlazada contiene sus reglas completas.

121 121 

122Para claves de componentes como `commands` y `hooks`, [Formas de ruta de componente](#component-path-forms) muestra cada forma aceptada con un ejemplo, y cada ruta sigue las [reglas de ruta](#path-rules) para el prefijo `./`, extensiones y contención.122Para claves de componentes como `commands` y `hooks`, [Formas de ruta de componente](#component-path-forms) muestra cada forma aceptada con un ejemplo, y cada ruta sigue las [reglas de ruta](#path-rules) para el prefijo `./`, extensiones y contención.

123 123 


141| [`termsOfServiceUrl`](#directory-listing-fields) | String | Enlace a los términos de servicio para el listado del plugin en el directorio de Anthropic. Claude Code no lo lee |141| [`termsOfServiceUrl`](#directory-listing-fields) | String | Enlace a los términos de servicio para el listado del plugin en el directorio de Anthropic. Claude Code no lo lee |

142| [`defaultEnabled`](#defaultenabled) | Boolean | Si el plugin comienza habilitado cuando el usuario no lo ha configurado. Por defecto es `true` |142| [`defaultEnabled`](#defaultenabled) | Boolean | Si el plugin comienza habilitado cuando el usuario no lo ha configurado. Por defecto es `true` |

143| [`dependencies`](#dependencies) | Array of strings or objects | Plugins que deben estar habilitados para que este funcione |143| [`dependencies`](#dependencies) | Array of strings or objects | Plugins que deben estar habilitados para que este funcione |

144| [`settings`](#settings) | Object | Configuración que Claude Code aplica mientras el plugin está habilitado. Solo `agent` y `subagentStatusLine` tienen efecto |

145| [`userConfig`](#user-configuration) | Object | Valores que Claude Code solicita al usuario cuando el plugin está habilitado |144| [`userConfig`](#user-configuration) | Object | Valores que Claude Code solicita al usuario cuando el plugin está habilitado |

146| `types` | Path | Un archivo `.d.ts` que declara los valores `$.state` y los sustantivos `$` de un [mod](https://code.claude.com/docs/es/plugins/mods/reference.md#files) |145| `types` | Path | Un archivo `.d.ts` que declara los valores `$.state` y los sustantivos `$` de un [mod](https://code.claude.com/docs/es/plugins/mods/reference.md#files) |

147| [`channels`](#channels) | Array of objects | Canales de mensajes que proporciona el plugin, cada uno vinculado a uno de sus servidores MCP |146| [`channels`](#channels) | Array of objects | Canales de mensajes que proporciona el plugin, cada uno vinculado a uno de sus servidores MCP |


211 210 

212Plugins que deben estar habilitados para que este funcione. Cada entrada es `"name"`, `"name@marketplace"`, o `{ "name": "...", "marketplace": "...", "version": "..." }`. Los nombres simples se resuelven contra el propio mercado de este plugin. Consulte [restricciones de dependencia](https://code.claude.com/docs/es/plugins/dependencies.md).211Plugins que deben estar habilitados para que este funcione. Cada entrada es `"name"`, `"name@marketplace"`, o `{ "name": "...", "marketplace": "...", "version": "..." }`. Los nombres simples se resuelven contra el propio mercado de este plugin. Consulte [restricciones de dependencia](https://code.claude.com/docs/es/plugins/dependencies.md).

213 212 

214### `settings`

215 

216Configuración que Claude Code aplica mientras el plugin está habilitado. Solo `agent` y `subagentStatusLine` tienen efecto; otras claves se descartan en la carga. Un `settings.json` en la raíz del plugin tiene precedencia sobre esta clave. Consulte [Configuración predeterminada](https://code.claude.com/docs/es/plugins/components.md#default-settings).

217 

218## Formas de ruta de componente213## Formas de ruta de componente

219 214 

220Cada clave de componente acepta una ruta relativa a la raíz del plugin. `hooks`, `mcpServers`, `lspServers` y `experimental.monitors` también aceptan configuración en línea, `commands` también acepta un objeto mapa, y `mcpServers` también acepta rutas de bundle MCP y URLs. Los ejemplos que siguen muestran cada forma aceptada una vez. Para qué hace cada componente en tiempo de ejecución, consulte [Componentes de plugins](https://code.claude.com/docs/es/plugins/components.md).215Cada clave de componente acepta una ruta relativa a la raíz del plugin. `hooks`, `mcpServers`, `lspServers` y `experimental.monitors` también aceptan configuración en línea, `commands` también acepta un objeto mapa, y `mcpServers` también acepta rutas de bundle MCP y URLs. Los ejemplos que siguen muestran cada forma aceptada una vez. Para qué hace cada componente en tiempo de ejecución, consulte [Componentes de plugins](https://code.claude.com/docs/es/plugins/components.md).


626| Temas | `themes/` | Archivos de tema JSON |621| Temas | `themes/` | Archivos de tema JSON |

627| Monitores | `monitors/monitors.json` | El array de monitores |622| Monitores | `monitors/monitors.json` | El array de monitores |

628| Ejecutables | `bin/` | Los archivos aquí están en el `PATH` de la herramienta Bash mientras el plugin está habilitado, por lo que Claude los ejecuta como comandos simples. claude.ai y Cowork no instalan un plugin que tenga este directorio, incluido uno que [distribuya a través de la configuración de la organización claude.ai](https://claude.com/docs/plugins/org-sync#keep-executables-out-of-the-top-level-bin-directory) |623| Ejecutables | `bin/` | Los archivos aquí están en el `PATH` de la herramienta Bash mientras el plugin está habilitado, por lo que Claude los ejecuta como comandos simples. claude.ai y Cowork no instalan un plugin que tenga este directorio, incluido uno que [distribuya a través de la configuración de la organización claude.ai](https://claude.com/docs/plugins/org-sync#keep-executables-out-of-the-top-level-bin-directory) |

629| Configuración | `settings.json` | Valores predeterminados `agent` y `subagentStatusLine` aplicados mientras el plugin está habilitado |

630 624 

631Un plugin que usa cada ubicación predeterminada, más una carpeta `scripts/` que sus hooks llaman, se distribuye así:625Un plugin que usa las ubicaciones predeterminadas, más una carpeta `scripts/` que sus hooks llaman, se distribuye así:

632 626 

633```text theme={null}627```text theme={null}

634deploy-tools/628deploy-tools/


655│ └── deploy-tool649│ └── deploy-tool

656├── scripts/650├── scripts/

657│ └── format.sh651│ └── format.sh

658├── settings.json

659├── .mcp.json652├── .mcp.json

660└── .lsp.json653└── .lsp.json

661```654```

Details

61 * La sesión se ejecuta con [credenciales de `/login`](https://code.claude.com/docs/es/authentication#authentication-precedence) de un plan Team o Enterprise61 * La sesión se ejecuta con [credenciales de `/login`](https://code.claude.com/docs/es/authentication#authentication-precedence) de un plan Team o Enterprise

62 62 

63 Un usuario que se autentica con una clave de API, o mediante Amazon Bedrock, Agent Platform de Google Cloud o Microsoft Foundry, obtiene la protección solo en una máquina que tenga configuración administrada o `managed-mcp.json`. Una sesión que se ejecuta con un [`CLAUDE_CODE_OAUTH_TOKEN`](https://code.claude.com/docs/es/authentication#generate-a-long-lived-token) de larga duración tampoco cuenta como ese inicio de sesión, incluso cuando hay un inicio de sesión de Team o Enterprise almacenado en la máquina.63 Un usuario que se autentica con una clave de API, o mediante Amazon Bedrock, Agent Platform de Google Cloud o Microsoft Foundry, obtiene la protección solo en una máquina que tenga configuración administrada o `managed-mcp.json`. Una sesión que se ejecuta con un [`CLAUDE_CODE_OAUTH_TOKEN`](https://code.claude.com/docs/es/authentication#generate-a-long-lived-token) de larga duración tampoco cuenta como ese inicio de sesión, incluso cuando hay un inicio de sesión de Team o Enterprise almacenado en la máquina.

64* **La protección resguarda lo que administras.** El mod de un usuario no puede cambiar lo que reciben o deciden tus hooks administrados, el prompt del sistema, tu `CLAUDE.md` administrado y otras instrucciones administradas, lo que cualquier mod lee como configuración, ni las herramientas y descripciones de tus servidores MCP administrados.64* **La protección resguarda lo que administras.** El mod de un usuario no puede cambiar lo que reciben o deciden tus hooks administrados, el prompt del sistema, ni tu `CLAUDE.md` administrado y otras instrucciones administradas. Tampoco puede cambiar lo que cualquier mod lee como configuración, ni las herramientas y descripciones de tus servidores MCP administrados una vez que se conectan.

65* **Fuera de lo que administras, el mod de un usuario actúa como ese usuario.** El mod conserva los permisos de ese usuario: aún puede leer y escribir archivos, iniciar procesos y hacer solicitudes de red. También puede reescribir llamadas a herramientas y prompts, denegar una llamada a herramienta y dibujar en la interfaz.65* **En la v2.1.323 o posterior, el mod de un usuario puede impedir que un servidor MCP administrado se conecte.** En la sesión de ese usuario, `/mcp` muestra el servidor como retenido por ese mod. Para evitarlo, [impide que se carguen los mods instalados por los usuarios](#stop-user-installed-mods-from-loading).

66* **Fuera de lo que administras, el mod de un usuario actúa como ese usuario.** El mod conserva los permisos de ese usuario: aún puede leer y escribir archivos, iniciar procesos y hacer solicitudes de red. También puede reescribir llamadas a herramientas y prompts, denegar una llamada a herramienta, agregar o quitar herramientas y dibujar en la interfaz.

66* **Las reglas de permisos y los hooks `PreToolUse` tienen precedencia sobre el mod de un usuario.** Con la protección cargada, de forma predeterminada el mod de un usuario no puede aprobar una llamada que rechaza una regla `deny` o para la que una regla `ask` pide confirmación, sin importar qué archivo de configuración contenga la regla. El mod tampoco puede aprobar una llamada que haya bloqueado cualquier hook `PreToolUse`.67* **Las reglas de permisos y los hooks `PreToolUse` tienen precedencia sobre el mod de un usuario.** Con la protección cargada, de forma predeterminada el mod de un usuario no puede aprobar una llamada que rechaza una regla `deny` o para la que una regla `ask` pide confirmación, sin importar qué archivo de configuración contenga la regla. El mod tampoco puede aprobar una llamada que haya bloqueado cualquier hook `PreToolUse`.

67 68 

68 Las reglas de permisos y los hooks `PreToolUse` se aplican a las llamadas a herramientas de Claude, no a las [llamadas `$.fs` y `$.process`](https://code.claude.com/docs/es/plugins/mods/api#reach-files-processes-and-the-network) de un mod. Con `Read(.env)` denegado, un mod aún puede leer ese archivo con `$.fs.read` o iniciar un programa que lo haga. Para limitar las propias llamadas `$.fs` y `$.process` de un mod, [impide que el mod se cargue](#stop-user-installed-mods-from-loading) o gestiónalas en un [mod de políticas](#enforce-a-policy-with-a-mod-of-your-own).69 Las reglas de permisos y los hooks `PreToolUse` se aplican a las llamadas a herramientas de Claude, no a las [llamadas `$.fs` y `$.process`](https://code.claude.com/docs/es/plugins/mods/api#reach-files-processes-and-the-network) de un mod. Con `Read(.env)` denegado, un mod aún puede leer ese archivo con `$.fs.read` o iniciar un programa que lo haga. Para limitar las propias llamadas `$.fs` y `$.process` de un mod, [impide que el mod se cargue](#stop-user-installed-mods-from-loading) o gestiónalas en un [mod de políticas](#enforce-a-policy-with-a-mod-of-your-own).


159Las líneas `hooks:` y `calls:` de la salida describen el código del mod:160Las líneas `hooks:` y `calls:` de la salida describen el código del mod:

160 161 

161```text theme={null}162```text theme={null}

162 ❯ ./register.js hooks: session.start, tool.call, ui.render{component=Pane}163 ❯ ./register.js hooks: session.start, tool.call, ui.render{component=Pane} (default matcher key: plugin)

163 ❯ ./register.js calls: $.fs.read, $.http.fetch, $.store.set, $.ui.open164 ❯ ./register.js calls: $.fs.read, $.http.fetch, $.store.set, $.ui.open

164```165```

165 166 

166La línea `hooks:` enumera los eventos que recibe el mod. La línea `calls:` enumera los métodos de la API de mods que llama su código. La [API de mods](https://code.claude.com/docs/es/plugins/mods/api.md), escrita como `$` en el código de un mod, es la forma en que un mod accede a archivos, procesos y la red. Claude Code se niega a cargar un mod que usa la API de mods de una forma que este comando no puede leer.167* **`hooks:`**: los eventos que recibe el mod. Una nota `default matcher key: plugin` significa que el hook que la precede [omite los controles y dibujos de otros mods](https://code.claude.com/docs/es/plugins/mods/events.md#hook-other-mods-drawings-and-controls).

168* **`calls:`**: los métodos de la API de mods que llama su código

167 169 

168Busca estos en la línea `calls:`:170La [API de mods](https://code.claude.com/docs/es/plugins/mods/api.md), escrita como `$` en el código de un mod, es la forma en que un mod accede a archivos, procesos y la red. Claude Code se niega a cargar un mod que usa la API de mods de una forma que este comando no puede leer.

171 

172No apruebes un mod que falle este comando, porque algunos fallos no impiden que se cargue. Ejecuta el comando en Claude Code v2.1.323 o posterior, donde una lista larga continúa en más líneas con la misma etiqueta, y lee cada línea `hooks:` y `calls:`. En las líneas `calls:`, busca estos:

169 173 

170| Llamada | Qué significa |174| Llamada | Qué significa |

171| :- | :- |175| :- | :- |


174| `$.http.fetch` | Realiza solicitudes de red |178| `$.http.fetch` | Realiza solicitudes de red |

175| `$.env.get`, `$.settings.read` | Lee variables de entorno y la configuración, que pueden contener claves de API. Una línea `env reads:` en la salida nombra cada variable. |179| `$.env.get`, `$.settings.read` | Lee variables de entorno y la configuración, que pueden contener claves de API. Una línea `env reads:` en la salida nombra cada variable. |

176| `$.env.set` | Establece una variable de entorno para Claude Code y para cada comando y servidor MCP que inicie después, lo que puede cambiar lo que ejecutan esos programas. Una línea `env writes:` nombra cada variable. |180| `$.env.set` | Establece una variable de entorno para Claude Code y para cada comando y servidor MCP que inicie después, lo que puede cambiar lo que ejecutan esos programas. Una línea `env writes:` nombra cada variable. |

177| `$.mcp.call` | Llama a una herramienta en un servidor MCP conectado, según las reglas de permisos de la sesión |181| `$.mcp.call` | Llama a una herramienta en un servidor MCP conectado, sin solicitud de permiso. Claude Code rechaza la llamada ante una regla de denegación o una regla de consulta administrada. También rechaza una llamada a una herramienta marcada con [`requiresUserInteraction`](https://code.claude.com/docs/es/mcp#require-approval-for-a-specific-tool), o a una que tu organización [configuró como `ask`](https://code.claude.com/docs/es/mcp#organization-controls-on-connector-tools) cuando ese ajuste llega a Claude Code. |

178| `$.model.complete` | Usa el plan o la clave de API del usuario para llamadas al modelo |182| `$.model.complete` | Usa el plan o la clave de API del usuario para llamadas al modelo |

179| `$.prompt.submit` | Envía un prompt y puede enviarlo como si fueran las propias palabras del usuario |183| `$.prompt.submit` | Envía un prompt y puede enviarlo como si fueran las propias palabras del usuario |

180| `$.session.send` | Envía un mensaje que lee el Claude de otra sesión, de un subagente o de un [compañero de equipo](https://code.claude.com/docs/es/agent-teams.md) |184| `$.session.send` | Envía un mensaje que lee el Claude de otra sesión, de un subagente o de un [compañero de equipo](https://code.claude.com/docs/es/agent-teams.md) |


316 320 

317Claude Code dispara un evento cada vez que está a punto de actuar, por ejemplo, ejecutar una herramienta, y lo pasa a cada mod por turnos. Un mod que cuenta como tuyo [se ejecuta antes que los mods de los usuarios](https://code.claude.com/docs/es/plugins/mods/events.md#the-order-mods-run-in) incluso cuando no lo enumeras en ningún lugar. Para establecer su posición, enumera su id en uno de dos ajustes. El id es el nombre del plugin, `@` y el nombre del marketplace, como `acme-guard@acme-tools`.321Claude Code dispara un evento cada vez que está a punto de actuar, por ejemplo, ejecutar una herramienta, y lo pasa a cada mod por turnos. Un mod que cuenta como tuyo [se ejecuta antes que los mods de los usuarios](https://code.claude.com/docs/es/plugins/mods/events.md#the-order-mods-run-in) incluso cuando no lo enumeras en ningún lugar. Para establecer su posición, enumera su id en uno de dos ajustes. El id es el nombre del plugin, `@` y el nombre del marketplace, como `acme-guard@acme-tools`.

318 322 

319* **`prependPlugins`**: tu mod ve cada evento antes que cualquier mod de usuario y cada resultado después. Puede cambiar el evento, rechazarlo u omitir los mods de los usuarios.323* **`prependPlugins`**: tu mod ve un evento antes que cualquier mod de usuario, y el resultado del evento después de ellos. Puede cambiar el evento, rechazarlo u omitir los mods de los usuarios. En la v2.1.323 o posterior, comprueba que tus hooks todavía [alcanzan los controles y dibujos de otros mods](https://code.claude.com/docs/es/plugins/mods/events.md#hook-other-mods-drawings-and-controls).

320* **`appendPlugins`**: tu mod se ejecuta después de todos los mods de los usuarios, por lo que solo ve los eventos que esos mods transmiten, en la forma en que los transmiten324* **`appendPlugins`**: tu mod se ejecuta después de todos los mods de los usuarios, por lo que solo ve los eventos que esos mods transmiten, en la forma en que los transmiten

321 325 

322Este ejemplo declara el marketplace `acme-tools` en `/opt/acme/claude-plugins`, habilita `acme-guard` desde él y ejecuta ese mod primero, con la protección integrada después:326Este ejemplo declara el marketplace `acme-tools` en `/opt/acme/claude-plugins`, habilita `acme-guard` desde él y ejecuta ese mod primero, con la protección integrada después:


359 363 

360Cada vez que otro mod está a punto de cargarse, tu mod recibe la lista que imprime `claude plugin validate`, en un evento llamado [`plugin.register`](https://code.claude.com/docs/es/plugins/mods/reference#other-mods). Un mod en `prependPlugins` puede leer esa lista y rechazar el mod. También puede [manejar cualquier llamada de la API de mods por nombre](https://code.claude.com/docs/es/plugins/mods/api.md#reach-files-processes-and-the-network) para registrar o rechazar esa llamada para todos los demás mods. El nombre es el método sin el `$.`, por lo que un hook en `fs.write` ve cada llamada a `$.fs.write`.364Cada vez que otro mod está a punto de cargarse, tu mod recibe la lista que imprime `claude plugin validate`, en un evento llamado [`plugin.register`](https://code.claude.com/docs/es/plugins/mods/reference#other-mods). Un mod en `prependPlugins` puede leer esa lista y rechazar el mod. También puede [manejar cualquier llamada de la API de mods por nombre](https://code.claude.com/docs/es/plugins/mods/api.md#reach-files-processes-and-the-network) para registrar o rechazar esa llamada para todos los demás mods. El nombre es el método sin el `$.`, por lo que un hook en `fs.write` ve cada llamada a `$.fs.write`.

361 365 

366> [!NOTE]

367>

368> En la v2.1.323 o posterior, un hook `ui.focus` necesita un matcher más amplio para recibir las llamadas a `$.ui.focus` de otros mods. Consulta [Engancha los dibujos y controles de otros mods](https://code.claude.com/docs/es/plugins/mods/events.md#hook-other-mods-drawings-and-controls).

369 

362Este mod de políticas rechaza cualquier mod de usuario cuyo propio código llame a `$.process.run` o `$.process.spawn`. También mantiene un registro de auditoría, escribiendo en el registro de depuración cada llamada a herramienta y cada archivo que escribe un mod. Como se ejecuta primero, el registro guarda lo que se solicitó, antes de que cualquier mod de usuario lo cambie. Guárdalo como `acme-guard/hooks/register.js`:370Este mod de políticas rechaza cualquier mod de usuario cuyo propio código llame a `$.process.run` o `$.process.spawn`. También mantiene un registro de auditoría, escribiendo en el registro de depuración cada llamada a herramienta y cada archivo que escribe un mod. Como se ejecuta primero, el registro guarda lo que se solicitó, antes de que cualquier mod de usuario lo cambie. Guárdalo como `acme-guard/hooks/register.js`:

363 371 

364```javascript acme-guard/hooks/register.js theme={null}372```javascript acme-guard/hooks/register.js theme={null}


403* **`e.tier`**: dónde se ejecutaría el mod, uno de `prepend`, `user`, `append` o `builtin`. Todo mod que instala una persona es `user`.411* **`e.tier`**: dónde se ejecutaría el mod, uno de `prepend`, `user`, `append` o `builtin`. Todo mod que instala una persona es `user`.

404* **`e.uses.calls`**: los métodos de la API de mods que llama el mod, cada uno escrito como `namespace.method`, por ejemplo `process.run`, sin el `$.` que imprime `claude plugin validate`412* **`e.uses.calls`**: los métodos de la API de mods que llama el mod, cada uno escrito como `namespace.method`, por ejemplo `process.run`, sin el `$.` que imprime `claude plugin validate`

405 413 

406Cuando un usuario instala un mod que llama a `$.process.run`, el mod no se carga, y su registro de depuración tiene una línea que termina con `refused by acme-guard:` y tu motivo. El rechazo también llega a la transcripción en una [sesión que recarga en caliente un directorio de plugin](https://code.claude.com/docs/es/plugins/mods/troubleshoot.md#find-out-why-a-mod-does-nothing). Para bloquear una llamada sin rechazar el mod completo, devuelve `{ deny: 'your reason' }` desde un hook en el nombre de esa llamada.414Cuando un usuario instala un mod que llama a `$.process.run`, el mod no se carga, y su registro de depuración tiene una línea que termina con `refused by acme-guard:` y tu motivo. El rechazo también llega a la transcripción en una [sesión que recarga en caliente un directorio de plugin](https://code.claude.com/docs/es/plugins/mods/troubleshoot.md#find-out-why-a-mod-does-nothing).

415 

416Para bloquear una llamada sin rechazar el mod completo, devuelve `{ deny: 'your reason' }` desde un hook en el nombre de esa llamada, después de [comprobar quién hizo la llamada](https://code.claude.com/docs/es/plugins/mods/reference.md#mods-api-calls).

407 417 

408Para enviar las líneas de auditoría a otro lugar que no sea el registro de depuración, llama a `$.http.fetch` desde los mismos hooks.418Para enviar las líneas de auditoría a otro lugar que no sea el registro de depuración, llama a `$.http.fetch` desde los mismos hooks.

409 419 

Details

21 21 

22Describe el mod que quieres en una sesión interactiva de Claude Code y Claude lo escribe. Claude trabaja a partir de un [skill](https://code.claude.com/docs/es/skills.md) integrado llamado `plugin-authoring`, que le indica dónde escribir el mod, qué eventos y métodos tiene tu versión y cómo se carga el mod. Claude puede cargar el skill cuando pides un mod, o puedes cargarlo tú mismo ejecutando `/plugin-authoring` en el prompt de Claude Code.22Describe el mod que quieres en una sesión interactiva de Claude Code y Claude lo escribe. Claude trabaja a partir de un [skill](https://code.claude.com/docs/es/skills.md) integrado llamado `plugin-authoring`, que le indica dónde escribir el mod, qué eventos y métodos tiene tu versión y cómo se carga el mod. Claude puede cargar el skill cuando pides un mod, o puedes cargarlo tú mismo ejecutando `/plugin-authoring` en el prompt de Claude Code.

23 23 

24En los [modos de permisos](https://code.claude.com/docs/es/permission-modes.md) `auto` y `bypassPermissions`, el mod puede ejecutarse cuando termina el turno. En los demás casos, se ejecuta una vez que lo apruebas, excepto en [sesiones donde un mod que escribe Claude no puede cargarse](#sessions-that-skip-the-approval).24En los [modos de permisos](https://code.claude.com/docs/es/permission-modes.md) `auto` y `bypassPermissions`, Claude Code [puede cargar el mod sin preguntarte](#sessions-that-skip-the-approval). Para que se te pregunte primero, inicia una nueva sesión en modo `default` o `acceptEdits`, o [cambia](https://code.claude.com/docs/es/permission-modes.md#switch-permission-modes) a cualquiera de esos modos antes de pedir el primer mod de la sesión. En [algunas sesiones](#sessions-that-cant-load), el mod no puede cargarse.

25 25 

26**1. Describe el mod**26**1. Describe el mod**

27 27 


33 33 

34**2. Aprueba el mod**34**2. Aprueba el mod**

35 35 

36Cuando Claude guarda el primer archivo, Claude Code pregunta si quieres habilitar la recarga en caliente para la sesión. La recarga en caliente ejecuta los mods que Claude escribe en esta sesión y aplica cada cambio posterior. Si no aparece ninguna pregunta, omite este paso.36Cuando Claude guarda el primer archivo, Claude Code pregunta si quieres habilitar la recarga en caliente para la sesión. La recarga en caliente ejecuta los mods que Claude escribe en esta sesión y aplica cada cambio posterior. No ves esta pregunta en una sesión que [carga mods nuevos sin preguntar](#sessions-that-skip-the-approval) o que [no puede cargarlos](#sessions-that-cant-load).

37 37 

38Elige una de estas respuestas:38Elige una de estas respuestas:

39 39 


57* **En una sesión que inicies**: en tu shell, ejecuta `claude --plugin-dir ~/mods/git-branch`57* **En una sesión que inicies**: en tu shell, ejecuta `claude --plugin-dir ~/mods/git-branch`

58* **Para otras personas**: [agrégalo a un marketplace](#share-your-mod) para que puedan instalarlo58* **Para otras personas**: [agrégalo a un marketplace](#share-your-mod) para que puedan instalarlo

59 59 

60### Sesiones que cargan un mod sin preguntar

61 

62Claude Code puede habilitar la recarga en caliente sin preguntar en los modos `auto` y `bypassPermissions`, y los mods se cargan cuando termina el turno.

63 

64Cuando reanudas una sesión, de forma interactiva o con `claude -p`, los mods que ya están en su carpeta de mods [pueden cargarse](#sessions-that-cant-load) sin preguntar. Para evitar que un mod se cargue cuando reanudas, elimina su directorio.

65 

60### Sesiones donde un mod que escribe Claude no puede cargarse66### Sesiones donde un mod que escribe Claude no puede cargarse

61 67 

62Un mod que escribe Claude se carga en un espacio de trabajo de confianza donde se permite ejecutar mods, después de que lo apruebas en los modos que lo solicitan. En estas sesiones no se carga:68Un mod que escribe Claude no se carga en estos casos, y Claude Code no pregunta si quieres cargarlo:

63 69 

64* **No hay nadie para aprobarlo**: la sesión no puede mostrarte una solicitud, como en una ejecución de `claude -p` fuera de los modos `auto` y `bypassPermissions`, o en el [modo `dontAsk`](https://code.claude.com/docs/es/permission-modes)70* **No hay nadie para aprobarlo**: la sesión está en [modo `dontAsk`](https://code.claude.com/docs/es/permission-modes), o es la ejecución de `claude -p` que escribe el mod, en modo `default` o `acceptEdits`, que no puede mostrarte la pregunta sobre la recarga en caliente.

65* **El espacio de trabajo no es de confianza**: no has aceptado la solicitud de confianza para el directorio71* **Una sesión interactiva donde el espacio de trabajo no es de confianza**: no has aceptado la solicitud de confianza para el directorio

66* **Los mods están deshabilitados**: iniciaste con `--safe-mode` o `--bare`, configuraste `disableAllHooks`, o la [configuración administrada de tu organización lo bloquea](https://code.claude.com/docs/es/plugins/mods/admin.md#choose-how-much-to-allow)72* **Los mods están deshabilitados**: iniciaste con `--safe-mode` o `--bare`, configuraste `disableAllHooks`, o la [configuración administrada de tu organización lo bloquea](https://code.claude.com/docs/es/plugins/mods/admin.md#choose-how-much-to-allow)

67 73 

68## Escribe un mod tú mismo74## Escribe un mod tú mismo


292 298 

293Revisa la línea `hooks:` para ver los eventos a los que se engancha tu módulo, cada uno con su filtro entre llaves, y `calls:` para ver cada método de la API de mods que llama. Si tu módulo lee o establece variables de entorno, busca también las líneas `env reads:` y `env writes:`, y `state reads:` y `state writes:` si usa [`$.state`](https://code.claude.com/docs/es/plugins/mods/interface#keep-state). También ves una línea por cada hook que puede rechazar una acción, como `gating hook without .catch: tool.call`, que indica si ese hook tiene un [controlador `.catch`](https://code.claude.com/docs/es/plugins/mods/events#handle-a-hook-that-fails).299Revisa la línea `hooks:` para ver los eventos a los que se engancha tu módulo, cada uno con su filtro entre llaves, y `calls:` para ver cada método de la API de mods que llama. Si tu módulo lee o establece variables de entorno, busca también las líneas `env reads:` y `env writes:`, y `state reads:` y `state writes:` si usa [`$.state`](https://code.claude.com/docs/es/plugins/mods/interface#keep-state). También ves una línea por cada hook que puede rechazar una acción, como `gating hook without .catch: tool.call`, que indica si ese hook tiene un [controlador `.catch`](https://code.claude.com/docs/es/plugins/mods/events#handle-a-hook-that-fails).

294 300 

295Si en la primera línea falta un evento que querías manejar, Claude Code tampoco llamará a ese hook. La causa habitual es un nombre de evento mal escrito, que el comando reporta como un error como `"tool.calls" is not an event`.301Si falta en las líneas `hooks:` un evento que querías manejar, Claude Code tampoco llamará a ese hook. La causa habitual es un nombre de evento mal escrito, que el comando reporta como un error como `"tool.calls" is not an event`.

296 302 

297Sigue estas reglas para que el análisis estático pueda encontrar cada hook y cada llamada:303Sigue estas reglas para que el análisis estático pueda encontrar cada hook y cada llamada:

298 304 

Details

91 91 

92Registra cada evento una sola vez por matcher. Si llamas a `on` dos veces para `session.start` sin matcher, el módulo no se carga y muestra `on("session.start") is registered twice without a matcher`. Pon todo lo que tu mod hace al inicio de la sesión en un solo hook.92Registra cada evento una sola vez por matcher. Si llamas a `on` dos veces para `session.start` sin matcher, el módulo no se carga y muestra `on("session.start") is registered twice without a matcher`. Pon todo lo que tu mod hace al inicio de la sesión en un solo hook.

93 93 

94#### Enganchar los dibujos y controles de otros mods

95 

96Para enganchar los controles, paneles o la fila sobre el prompt de otro mod, pasa un matcher con `plugin`. Usa el nombre del mod sin su marketplace, como en `{ plugin: 'other-mod' }`, o `{ plugin: '*' }` para todos los mods. Sin `plugin`, un hook en `ui.press`, `ui.input`, `ui.select` o `ui.focus` no se ejecuta para los controles de otros mods, y un hook de `ui.render` omite sus paneles y sus filas sobre el prompt.

97 

98Un hook en un comodín sin matcher, como `on('*', hook)` o `on('ui.*', hook)`, sigue ejecutándose para todos los mods. Un comodín con matcher también necesita `plugin`.

99 

100> [!NOTE]

101>

102> `{ plugin: '*' }` requiere Claude Code v2.1.323 o posterior. Antes de v2.1.323, un hook sin `plugin` se ejecutaba para todos los mods, y un hook con `{ plugin: '*' }` no se ejecutaba. Para coincidir con todos los mods en ambas versiones, usa `{ plugin: /./ }` en `ui.press`, `ui.input` y `ui.select`. Para `ui.focus` y `ui.render`, usa `on('ui.*', hook)` y comprueba el nombre del evento en `next.event`, como en `if (next.event !== 'ui.focus') return next(e)`.

103 

94## Engancha lo que Claude está haciendo104## Engancha lo que Claude está haciendo

95 105 

96Maneja estos eventos para ver o cambiar una llamada a herramienta, un prompt, un turno o una lectura de la configuración mientras ocurre. Para ver cada evento y lo que un hook puede devolver, consulta la [referencia de eventos](https://code.claude.com/docs/es/plugins/mods/reference.md#events).106Maneja estos eventos para ver o cambiar una llamada a herramienta, un prompt, un turno o una lectura de la configuración mientras ocurre. Para ver cada evento y lo que un hook puede devolver, consulta la [referencia de eventos](https://code.claude.com/docs/es/plugins/mods/reference.md#events).

Details

177 177 

178## Elige dónde dibujar178## Elige dónde dibujar

179 179 

180Un hook `ui.render` se ejecuta para cada punto de renderizado, a menos que lo restrinjas al punto en el que quieres dibujar. Para elegir el punto de renderizado, pasa un filtro, llamado [matcher](https://code.claude.com/docs/es/plugins/mods/events.md#filter-which-events-a-hook-handles), como segundo argumento de `on`. `{ component: 'Pane' }` ejecuta el hook solo para paneles. En el hook, `e.component` indica el punto, `e.surface` indica qué aplicación está dibujando y `e.props` contiene los datos propios del punto. Para un panel, `e.requestId` es el `id` con el que lo abriste.180Para elegir el punto de renderizado en el que dibuja un hook `ui.render`, pasa un filtro, llamado [matcher](https://code.claude.com/docs/es/plugins/mods/events.md#filter-which-events-a-hook-handles), como segundo argumento de `on`. `{ component: 'Pane' }` ejecuta el hook solo para paneles. En el hook, `e.component` indica el punto, `e.surface` indica qué aplicación está dibujando y `e.props` contiene los datos propios del punto. Para un panel, `e.requestId` es el `id` con el que lo abriste.

181 181 

182El panel y la franja están vacíos hasta que un mod los llena. Selecciona una pestaña para ver qué es cada uno y cómo dibujar en él:182El panel y la franja están vacíos hasta que un mod los llena. Selecciona una pestaña para ver qué es cada uno y cómo dibujar en él:

183 183 


191 191 

192> [tab] Franja encima del prompt192> [tab] Franja encima del prompt

193>193>

194> La franja es una tira directamente encima de la entrada del prompt. Siempre está ahí y todos los mods la comparten.194> La franja es una tira directamente encima de la entrada del prompt. Cada mod que dibuja ahí tiene su propia fila, y las filas se apilan desde arriba en el [orden en que se ejecutan los mods](https://code.claude.com/docs/es/plugins/mods/events.md#the-order-mods-run-in).

195>195>

196> Tu hook devuelve un árbol para mostrar algo en la franja, o `next(e)` para no mostrar nada. Un árbol reemplaza lo que los mods [posteriores al tuyo](https://code.claude.com/docs/es/plugins/mods/events.md#the-order-mods-run-in) dibujan ahí. Para conservar lo suyo, coloca el resultado de `await next(e)` entre los hijos de un [`Box`](#build-a-tree-from-elements) en tu árbol.196> Para dibujar la fila de tu mod, filtra por `{ component: 'AbovePrompt' }` y devuelve un [árbol](#build-a-tree-from-elements). Para no dibujar nada, devuelve `next(e)`.

197>197>

198> Para dibujar en la franja, filtra por `{ component: 'AbovePrompt' }`.198> Antes de v2.1.323, todos los mods compartían un solo dibujo en la franja, y tu árbol reemplazaba lo que dibujaban los mods posteriores al tuyo. Para admitir también esas versiones, coloca el resultado de `await next(e)` entre los hijos de un [`Box` que siga siendo válido](https://code.claude.com/docs/es/plugins/mods/troubleshoot#another-mods-band-shows-and-yours-doesnt). En v2.1.323 o posterior, ese hijo no dibuja las filas de otros mods.

199 199 

200Un mod también puede [colocar una fila propia en la transcripción](#place-a-row-in-the-transcript).200Un mod también puede [colocar una fila propia en la transcripción](#place-a-row-in-the-transcript).

201 201 


281 281 

282Mientras Claude trabaja, el spinner se anima como antes y `under the spinner` aparece debajo.282Mientras Claude trabaja, el spinner se anima como antes y `under the spinner` aparece debajo.

283 283 

284La solicitud de permiso no es un punto de renderizado, así que un mod no puede cambiar lo que muestra. El diálogo de preguntas, `AskUserQuestion`, sí lo es, así que un mod puede cambiarlo. Un árbol para el diálogo debe contener la referencia exactamente una vez, con tus elementos encima. De lo contrario, Claude Code dibuja su propio diálogo.284La solicitud de permiso no es un punto de renderizado, así que un mod no puede cambiar lo que muestra. El diálogo de preguntas, `AskUserQuestion`, sí lo es, así que un mod puede cambiar ese diálogo cuando Claude hace una pregunta. Un árbol para el diálogo debe contener la referencia exactamente una vez, con tus elementos encima. De lo contrario, Claude Code dibuja su propio diálogo.

285 285 

286### Abre un panel en el momento adecuado286### Abre un panel en el momento adecuado

287 287 

288Un panel solo aparece cuando tu mod lo abre. Cómo y cuándo lo abres determina si toma el foco del teclado, cuánto espacio solicita y si llega a mostrarse en una terminal estrecha.288Un panel solo aparece cuando tu mod lo abre. Cómo y cuándo lo abres determina si toma el foco del teclado, cuánto espacio solicita y si llega a mostrarse en una terminal estrecha.

289 289 

290Para abrir un panel, llama a [`$.ui.open`](https://code.claude.com/docs/es/plugins/mods/reference#mods-api-methods) con un `id` que elijas. El `id` es el nombre del panel: tu hook `ui.render` lo comprueba y lo vuelves a pasar para cerrar el panel.290Para abrir un panel, llama a [`$.ui.open`](https://code.claude.com/docs/es/plugins/mods/reference#mods-api-methods) con un `id` que elijas. El `id` es el nombre del panel: tu hook `ui.render` lo comprueba y lo vuelves a pasar para cerrar el panel. Si otro mod tiene abierto un panel con ese `id`, la llamada se rechaza.

291 291 

292```javascript theme={null}292```javascript theme={null}

293await $.ui.open({ id: 'hello-tabs', title: 'Hello tabs', focus: true })293await $.ui.open({ id: 'hello-tabs', title: 'Hello tabs', focus: true })


399 399 

400> [!NOTE]400> [!NOTE]

401>401>

402> `$.theme.set` y `$.theme.clear` reemplazan a `$.ui.backdrop`, que Claude Code v2.1.319 eliminó. Cambia `$.ui.backdrop({ id: 'your-backdrop' })` por `$.theme.set({ backdrop: { id: 'your-backdrop' } })`, y `$.ui.backdrop(undefined)` por `$.theme.clear()`, que quita el fondo de cualquier mod.402> `$.theme.set` y `$.theme.clear` reemplazan a `$.ui.backdrop`, que Claude Code v2.1.319 eliminó. Cambia `$.ui.backdrop({ id: 'your-backdrop' })` por una llamada a `$.theme.set` como la del ejemplo de esta sección, y `$.ui.backdrop(undefined)` por `$.theme.clear()`, que quita el fondo de cualquier mod.

403 403 

404Para poner un fondo detrás de la conversación en la aplicación Desktop o en la aplicación móvil, llama a [`$.theme.set`](https://code.claude.com/docs/es/plugins/mods/reference#mods-api-methods) con un `backdrop` y luego dibuja el fondo en el punto de renderizado [`Backdrop`](https://code.claude.com/docs/es/plugins/mods/reference#render-sites). Para quitar el fondo, llama a `$.theme.clear()`. La terminal no dibuja ningún fondo. `$.theme.set` y `$.theme.clear` requieren Claude Code v2.1.319 o posterior.404Para poner un fondo detrás de la conversación en la aplicación Desktop o en la aplicación móvil, llama a [`$.theme.set`](https://code.claude.com/docs/es/plugins/mods/reference#mods-api-methods) con un `backdrop` y luego dibuja el fondo en el punto de renderizado [`Backdrop`](https://code.claude.com/docs/es/plugins/mods/reference#render-sites). Para quitar el fondo, llama a `$.theme.clear()`. La terminal no dibuja ningún fondo. `$.theme.set` y `$.theme.clear` requieren Claude Code v2.1.319 o posterior.

405 405 

406Este mod establece un fondo cuando se inicia la sesión, dibuja el fondo y agrega un comando `/plain` que quita el fondo:406Este ejemplo requiere Claude Code v2.1.323 o posterior, así que primero [comprueba tu versión](https://code.claude.com/docs/es/plugins/mods/overview.md#turn-mods-on-or-off). El mod establece un fondo cuando se inicia la sesión, dibuja el fondo y agrega un comando `/plain` que quita el fondo:

407 407 

408```javascript theme={null}408```javascript theme={null}

409export function register(on) {409export function register(on) {

410 // Neither a reload of this mod nor --resume keeps the backdrop, so set it here410 // Neither a reload of this mod nor --resume keeps the backdrop, so set it here

411 on('session.start', async ($, e, next) => {411 on('session.start', async ($, e, next) => {

412 await $.theme.set({ backdrop: { id: 'night-sky', colorScheme: 'dark' } })412 await $.theme.set({ backdrop: { scene: 'night-sky' }, overrideColorScheme: 'dark' })

413 await $.command.register({ name: 'plain', description: 'Take the backdrop off' })413 await $.command.register({ name: 'plain', description: 'Take the backdrop off' })

414 return next(e)414 return next(e)

415 })415 })

416 416 

417 on('ui.render', { component: 'Backdrop' }, async ($, e, next) => {417 on('ui.render', { component: 'Backdrop' }, async ($, e, next) => {

418 // This hook runs for every mod's backdrop, and another mod can use the same id418 // This hook runs for every mod's backdrop, and another mod can use the same scene

419 if (e.props.plugin !== $.plugin.name || e.props.id !== 'night-sky') return next(e)419 if (e.props.plugin !== $.plugin.name || e.props.scene !== 'night-sky') return next(e)

420 const { Box, Text } = $.ui.resolve(e)420 const { Box, Text } = $.ui.resolve(e)

421 return Box({ backgroundColor: 'blue', children: [Text({ children: ['Night sky'] })] })421 return Box({ backgroundColor: 'blue', children: [Text({ children: ['Night sky'] })] })

422 })422 })


428}428}

429```429```

430 430 

431> [!NOTE]

432>

433> Antes de v2.1.323, escribe `id` en lugar de `scene` en la llamada a `$.theme.set` y en `e.props`, y mueve `overrideColorScheme` dentro de `backdrop` como `colorScheme`.

434 

431Para probar el ejemplo, coloca este código en un [mod](https://code.claude.com/docs/es/plugins/mods/create.md) e inicia una sesión en la aplicación Desktop o en la aplicación móvil. Para quitar el fondo, ejecuta `/plain` en el prompt de Claude Code. La transcripción muestra `the theme is cleared` después del nombre del mod, como en `night-sky: the theme is cleared` para un mod llamado `night-sky`.435Para probar el ejemplo, coloca este código en un [mod](https://code.claude.com/docs/es/plugins/mods/create.md) e inicia una sesión en la aplicación Desktop o en la aplicación móvil. Para quitar el fondo, ejecuta `/plain` en el prompt de Claude Code. La transcripción muestra `the theme is cleared` después del nombre del mod, como en `night-sky: the theme is cleared` para un mod llamado `night-sky`.

432 436 

433Comprueba qué acepta `backdrop`, qué te indica el resultado de la llamada y qué pueden cambiar otros mods:437Comprueba qué acepta `backdrop`, qué te indica el resultado de la llamada y qué pueden cambiar otros mods:

434 438 

435* **Los campos de `backdrop`**: `id`, un [nombre](https://code.claude.com/docs/es/plugins/mods/reference.md#limits) que eliges, es obligatorio, y los demás campos son opcionales. `colorScheme` es `'light'` o `'dark'` e indica si tu dibujo es claro u oscuro. Para `glass`, consulta [los tipos para tu compilación](https://code.claude.com/docs/es/plugins/mods/create.md#get-the-types-for-your-build).439* **Los campos de `backdrop`**: `scene` es un [nombre](https://code.claude.com/docs/es/plugins/mods/reference.md#limits) que eliges para un fondo que dibuja tu hook. Para los demás campos y `overrideColorScheme`, consulta [los tipos para tu compilación](https://code.claude.com/docs/es/plugins/mods/create.md#get-the-types-for-your-build).

436* **Si se dibuja el fondo**: `$.theme.set` se resuelve con `isDrawn: true` cuando una aplicación Desktop o móvil conectada a la sesión indica que dibuja fondos. De lo contrario, `isDrawn` es `false` y `reason` explica el motivo.440* **Si se dibuja el fondo**: `$.theme.set` se resuelve con `isDrawn: true` cuando una aplicación Desktop o móvil conectada a la sesión indica que dibuja fondos. De lo contrario, `isDrawn` es `false` y `reason` explica el motivo.

437* **Un fondo por sesión**: una llamada a `$.theme.set` reemplaza el fondo de la sesión y `$.theme.clear()` quita ese fondo, sin importar qué mod lo haya establecido. Llama a `$.theme.clear()` solo cuando el usuario lo pida.441* **Un fondo por sesión**: una llamada a `$.theme.set` reemplaza el fondo de la sesión y `$.theme.clear()` quita ese fondo, sin importar qué mod lo haya establecido. Llama a `$.theme.clear()` solo cuando el usuario lo pida.

438 442 


510>514>

511> Establece `rows` en 2 o más para tener [un campo que admita varias líneas](https://code.claude.com/docs/es/plugins/mods/gallery.md#input).515> Establece `rows` en 2 o más para tener [un campo que admita varias líneas](https://code.claude.com/docs/es/plugins/mods/gallery.md#input).

512 516 

513La [galería de interfaces](https://code.claude.com/docs/es/plugins/mods/gallery.md) tiene ejemplos y capturas de pantalla de la mayoría de los elementos. Esta tabla enumera todos los elementos:517La [galería de interfaces](https://code.claude.com/docs/es/plugins/mods/gallery.md) tiene ejemplos y capturas de pantalla de la mayoría de los elementos. Esta tabla enumera los elementos principales:

514 518 

515| Elemento | Qué dibuja | Dónde |519| Elemento | Qué dibuja | Dónde |

516| :- | :- | :- |520| :- | :- | :- |


606Las pruebas y otros mods identifican un control por su `key`:610Las pruebas y otros mods identifican un control por su `key`:

607 611 

608* **Pruebas**: una [prueba](https://code.claude.com/docs/es/plugins/mods/test.md#test-a-drawing) pulsa o escribe en un control por su `key`.612* **Pruebas**: una [prueba](https://code.claude.com/docs/es/plugins/mods/test.md#test-a-drawing) pulsa o escribe en un control por su `key`.

609* **Otros mods**: Claude Code dispara [`ui.press`, `ui.input` o `ui.select`](https://code.claude.com/docs/es/plugins/mods/reference#interface) con la `key` del control en `e.element` antes de ejecutar el callback del control. El hook de otro mod para ese evento ve lo que el usuario escribió en tu `Input` y puede cambiar ese texto o impedir que tu callback se ejecute. La API de mods no le da a ese mod ningún método para pulsar tus botones.613* **Otros mods**: Claude Code dispara [`ui.press`, `ui.input` o `ui.select`](https://code.claude.com/docs/es/plugins/mods/reference#interface) con la `key` del control en `e.element` antes de ejecutar el callback del control. El hook de otro mod también puede [ejecutarse para ese evento](https://code.claude.com/docs/es/plugins/mods/events.md#hook-other-mods-drawings-and-controls). Ese hook ve lo que el usuario escribió en tu `Input` y puede cambiar ese texto o impedir que tu callback se ejecute. La API de mods no le da a ese mod ningún método para pulsar tus botones.

610 614 

611Si un mensaje dice `needs a key` o `is drawn twice`, [encuentra la causa a partir de ese mensaje](https://code.claude.com/docs/es/plugins/mods/troubleshoot.md#needs-a-key).615Si un mensaje dice `needs a key` o `is drawn twice`, [encuentra la causa a partir de ese mensaje](https://code.claude.com/docs/es/plugins/mods/troubleshoot.md#needs-a-key).

612 616 

Details

208 208 

209### Llamadas a la API de mods209### Llamadas a la API de mods

210 210 

211Cada [método de la API de mods](#mods-api-methods) también es un evento, nombrado según su espacio de nombres y su método, como `fs.read`, `model.complete` o `ui.open`. Un hook sobre uno intercepta las llamadas de los mods que se ejecutan después de él, y puede devolver `next(e)`, `{ deny: reason }` o `{ value }`.211Cada [método de la API de mods](#mods-api-methods) también es un evento, nombrado según su espacio de nombres y su método, como `fs.read`, `model.complete` o `ui.open`. Un hook sobre uno puede devolver `next(e)`, `{ deny: reason }` o `{ value }`.

212 

213Algunos de estos eventos también se disparan para las acciones propias de Claude Code, así que comprueba si `next.origin.plugin` es `engine` antes de rechazar uno.

212 214 

213## Métodos de la API de mods215## Métodos de la API de mods

214 216 


249| :- | :- | :- | :- |251| :- | :- | :- | :- |

250| [`Pane`](https://code.claude.com/docs/es/plugins/mods/interface#pick-where-to-draw) | `title`, `isFocused`, `bodyColumns`, `placement`, `scroll`, `view` | El `id` del panel | Terminal, Desktop, VS Code |252| [`Pane`](https://code.claude.com/docs/es/plugins/mods/interface#pick-where-to-draw) | `title`, `isFocused`, `bodyColumns`, `placement`, `scroll`, `view` | El `id` del panel | Terminal, Desktop, VS Code |

251| [`AbovePrompt`](https://code.claude.com/docs/es/plugins/mods/interface#pick-where-to-draw) | `hasSurvey`, `isWorking`, `maxRows`, `bodyColumns`, `scroll`, `view` | Una instancia | Terminal, Desktop |253| [`AbovePrompt`](https://code.claude.com/docs/es/plugins/mods/interface#pick-where-to-draw) | `hasSurvey`, `isWorking`, `maxRows`, `bodyColumns`, `scroll`, `view` | Una instancia | Terminal, Desktop |

254| `AbovePromptList`, la pila de filas de `AbovePrompt` | `rows`, una lista con un `{ plugin, tree }` por cada fila de mod, además de las props de `AbovePrompt` | Una instancia | Terminal, Desktop. Requiere Claude Code v2.1.323 o posterior. |

252| [`Placed`](https://code.claude.com/docs/es/plugins/mods/interface#place-a-row-in-the-transcript) | `id`, `plugin`, `onScreen` | El `requestId` que devolvió `$.ui.place` | Terminal |255| [`Placed`](https://code.claude.com/docs/es/plugins/mods/interface#place-a-row-in-the-transcript) | `id`, `plugin`, `onScreen` | El `requestId` que devolvió `$.ui.place` | Terminal |

253| [`Backdrop`](https://code.claude.com/docs/es/plugins/mods/interface#put-a-backdrop-behind-the-conversation) | `id`, `plugin`, `glass`, `colorScheme` | `backdrop` | Superficies `desktop` y `mobile`. Tu hook se ejecuta cuando la app Desktop o la app móvil solicita dibujar un fondo. |256| [`Backdrop`](https://code.claude.com/docs/es/plugins/mods/interface#put-a-backdrop-behind-the-conversation) | `scene`, `plugin`, `glass`, `overrideColorScheme`. Antes de v2.1.323, `scene` era `id` y `overrideColorScheme` era `colorScheme`. | `backdrop` | Superficies `desktop` y `mobile`. Tu hook se ejecuta cuando la app Desktop o la app móvil solicita dibujar un fondo. |

254| `UserMessage` | `text`, `origin`, `isExpanded`, y `task` o `from` según el origen | El id de la fila dibujada | Terminal, Desktop, VS Code |257| `UserMessage` | `text`, `origin`, `isExpanded`, y `task` o `from` según el origen | El id de la fila dibujada | Terminal, Desktop, VS Code |

255| `AssistantMessage` | El texto de la respuesta | El id de la fila dibujada | Terminal, Desktop, VS Code |258| `AssistantMessage` | El texto de la respuesta | El id de la fila dibujada | Terminal, Desktop, VS Code |

256| `ToolUse`, `ToolResult`, `ToolGroup` | El nombre, la entrada y el resultado de la herramienta | El id de la llamada a herramienta | Terminal, Desktop, VS Code |259| `ToolUse`, `ToolResult`, `ToolGroup` | El nombre, la entrada y el resultado de la herramienta | El id de la llamada a herramienta | Terminal, Desktop, VS Code |


297* **`action`**: nombra una de las propias [acciones de atajos de teclado](https://code.claude.com/docs/es/keybindings.md) de Claude Code, y el atajo del usuario para ella presiona el botón cuando ese atajo es un acorde o una tecla con modificador300* **`action`**: nombra una de las propias [acciones de atajos de teclado](https://code.claude.com/docs/es/keybindings.md) de Claude Code, y el atajo del usuario para ella presiona el botón cuando ese atajo es un acorde o una tecla con modificador

298* **Hotkeys de dígito en la banda**: un `hotkey` de dígito en un botón de la banda también se activa cuando el usuario escribe solo ese dígito en un prompt vacío y hace una pausa301* **Hotkeys de dígito en la banda**: un `hotkey` de dígito en un botón de la banda también se activa cuando el usuario escribe solo ese dígito en un prompt vacío y hace una pausa

299* **Una banda contraída**: mientras la banda está [contraída](https://code.claude.com/docs/es/plugins/mods/interface.md#when-the-user-collapses-the-band), ni un atajo de `action` ni un hotkey presionan un botón en ella302* **Una banda contraída**: mientras la banda está [contraída](https://code.claude.com/docs/es/plugins/mods/interface.md#when-the-user-collapses-the-band), ni un atajo de `action` ni un hotkey presionan un botón en ella

300* **Dos botones con un mismo hotkey**: cuando dos botones de un mismo dibujo nombran el mismo `hotkey`, el último se queda con él303* **Dos botones con un mismo hotkey**: cuando dos de tus botones de un mismo dibujo nombran el mismo `hotkey`, el último se queda con él. Para el botón de otro mod con la misma tecla, consulta [Los hotkeys no hacen nada](https://code.claude.com/docs/es/plugins/mods/troubleshoot.md#hotkeys-do-nothing).

301* **`variant`**: `primary` o `secondary`, y cualquier otro valor lanza un error. En la terminal, un botón `primary` se dibuja con el color de acento a menos que sea `plain`.304* **`variant`**: `primary` o `secondary`, y cualquier otro valor lanza un error. En la terminal, un botón `primary` se dibuja con el color de acento a menos que sea `plain`.

302* **`role`**: `dismiss` marca un botón de cierre, y cualquier otro valor lanza un error. Haz el cierre en tu `onPress`. En una banda que contiene texto y una fila de botones, la aplicación de escritorio puede dibujar el primer botón `dismiss` de la fila como su propio control de cierre. La terminal dibuja el botón como lo haría sin `role`.305* **`role`**: `dismiss` marca un botón de cierre, y cualquier otro valor lanza un error. Haz el cierre en tu `onPress`. En una banda que contiene texto y una fila de botones, la aplicación de escritorio puede dibujar el primer botón `dismiss` de la fila como su propio control de cierre. La terminal dibuja el botón como lo haría sin `role`.

303 306 


401| Profundidad de anidamiento de un árbol | 32 niveles por debajo del elemento raíz |404| Profundidad de anidamiento de un árbol | 32 niveles por debajo del elemento raíz |

402| Elementos e hijos de texto en un árbol | 20,000 |405| Elementos e hijos de texto en un árbol | 20,000 |

403| Celdas de `Raster` en un árbol, las `columns` de cada `Raster` multiplicadas por sus `rows` | 262,144 |406| Celdas de `Raster` en un árbol, las `columns` de cada `Raster` multiplicadas por sus `rows` | 262,144 |

407| Las filas encima del prompt, apiladas | Los elementos, las celdas de `Raster` y los bytes de `Image` se suman entre todas las filas y se comparan con los límites de un árbol |

404| Bytes PNG o RGBA de todas las `Image` de un árbol | 2 MiB |408| Bytes PNG o RGBA de todas las `Image` de un árbol | 2 MiB |

405| `$.store` | 4 MiB de JSON en total |409| `$.store` | 4 MiB de JSON en total |

406| `$.session.messages()` | Las 4,096 entradas más recientes |410| `$.session.messages()` | Las 4,096 entradas más recientes |


412| Profundidad de anidamiento de un evento modificado que se pasa a `next`, fuera de los [hooks de generador asíncrono](#events) como uno en `turn.step` | 28,000 niveles. A partir de ahí, `next` se rechaza con un mensaje que termina en `nesting deeper than 28000 levels is not supported`. Requiere Claude Code v2.1.299 o posterior. |416| Profundidad de anidamiento de un evento modificado que se pasa a `next`, fuera de los [hooks de generador asíncrono](#events) como uno en `turn.step` | 28,000 niveles. A partir de ahí, `next` se rechaza con un mensaje que termina en `nesting deeper than 28000 levels is not supported`. Requiere Claude Code v2.1.299 o posterior. |

413| Profundidad de anidamiento del valor de retorno de un hook, fuera de `ui.render`, `ui.resolve` y los hooks de generador asíncrono | 28,000 niveles. A partir de ahí, se rechaza el resultado del hook, y [la notificación que lo informa](https://code.claude.com/docs/es/plugins/mods/troubleshoot.md#find-out-why-a-mod-does-nothing) incluye `nesting deeper than 28000 levels is not supported`. Requiere Claude Code v2.1.299 o posterior. |417| Profundidad de anidamiento del valor de retorno de un hook, fuera de `ui.render`, `ui.resolve` y los hooks de generador asíncrono | 28,000 niveles. A partir de ahí, se rechaza el resultado del hook, y [la notificación que lo informa](https://code.claude.com/docs/es/plugins/mods/troubleshoot.md#find-out-why-a-mod-does-nothing) incluye `nesting deeper than 28000 levels is not supported`. Requiere Claude Code v2.1.299 o posterior. |

414| Alcances, como funciones, bloques y bucles, anidados unos dentro de otros en un archivo de un módulo de hooks | 2,000 |418| Alcances, como funciones, bloques y bucles, anidados unos dentro de otros en un archivo de un módulo de hooks | 2,000 |

415| Nombres de comandos, herramientas, tipos de subagente y paneles, y el `id` de una fila colocada o de un fondo | Letras, dígitos, `_` y `-`, hasta 64 caracteres |419| Nombres de comandos, herramientas, tipos de subagente y paneles, el `id` de una fila colocada y la `scene` de un fondo | Letras, dígitos, `_` y `-`, hasta 64 caracteres |

416| Una prueba de `claude plugin test` | 5 segundos a menos que la prueba establezca `timeoutMs` |420| Una prueba de `claude plugin test` | 5 segundos a menos que la prueba establezca `timeoutMs` |

417 421 

418## Configuración y variables de entorno422## Configuración y variables de entorno

Details

139 on('ui.render', () => ({ type: 'Text', props: {}, children: ['drawn by Claude Code'] }))139 on('ui.render', () => ({ type: 'Text', props: {}, children: ['drawn by Claude Code'] }))

140 ```140 ```

141 141 

142 Con el stub registrado, el montaje tiene éxito, y `ui.find({ type: 'Text' })` devuelve ese elemento siempre que tu hook haya devuelto `next(e)`.142 Con el stub registrado, el montaje tiene éxito, y `ui.find({ type: 'Text' })` devuelve ese elemento siempre que tu hook haya devuelto `next(e)`. En v2.1.323 o posterior, para la banda, pasa el nombre de tu mod como segundo argumento a `on`, como en `{ plugin: 'my-mod' }`. Sin él, el stub no responde a tu `next(e)`.

143 143 

144* **Un stub para `turn.step` es un generador asíncrono**, y la prueba lee el flujo hasta su final para obtener el resultado:144* **Un stub para `turn.step` es un generador asíncrono**, y la prueba lee el flujo hasta su final para obtener el resultado:

145 145 


192| `$.session.id`, `$.agent.list` | `() => ({ value: 'abc123' })`, `() => ({ value: [] })` |192| `$.session.id`, `$.agent.list` | `() => ({ value: 'abc123' })`, `() => ({ value: [] })` |

193| `session.send` | `() => ({ isDelivered: true })`. `e.to` llega como una cadena incluso cuando tu mod pasó `{ sessionId }`. |193| `session.send` | `() => ({ isDelivered: true })`. `e.to` llega como una cadena incluso cuando tu mod pasó `{ sessionId }`. |

194| `session.receive` | `($, e) => ({ text: e.text })`. Dispáralo con `$.session.receive({ origin: { kind: 'peer-send-message' }, text })`. |194| `session.receive` | `($, e) => ({ text: e.text })`. Dispáralo con `$.session.receive({ origin: { kind: 'peer-send-message' }, text })`. |

195| `ui.render` | `() => ({ type: 'Text', props: {}, children: ['...'] })` |195| `ui.render` | `() => ({ type: 'Text', props: {}, children: ['...'] })`. Para la banda, consulta el matcher en [Seguir las reglas del kit de pruebas](#follow-the-test-kit’s-rules). |

196 196 

197### Comprobar un resultado con `expect`197### Comprobar un resultado con `expect`

198 198 

199El kit tiene estas aserciones, y la que elijas va después del valor que estás comprobando, como en `expect(answer.text).toBe('ok')`:199`expect` tiene su propio conjunto de aserciones, como `toEqual` y `toHaveLength`, que van después del valor que estás comprobando, como en `expect(answer.text).toBe('ok')`. Para ver la lista completa, busca `type Matchers` en `claude-code/index.d.ts` dentro de [los tipos para tu compilación](https://code.claude.com/docs/es/plugins/mods/create.md#get-the-types-for-your-build). Pon `.not` delante de la aserción para comprobar lo contrario. Para comprobar con qué se resuelve o se rechaza una promesa, pon `.resolves` o `.rejects` justo después de `expect(...)` y usa `await` en la línea, como en `await expect(promise).rejects.toThrow()`.

200 

201* **Igualdad**: `toBe` para el mismo valor u objeto, `toEqual` para la estructura, `toStrictEqual` para la estructura más los campos `undefined` y el prototipo, y `toMatchObject` para los campos que nombres

202* **Texto**: `toMatch`, que acepta una expresión regular o una subcadena, `toStartWith` y `toEndWith`

203* **Números**: `toBeGreaterThan`, `toBeGreaterThanOrEqual`, `toBeLessThan`, `toBeLessThanOrEqual`

204* **Contenido**: `toContain` para una subcadena o un miembro, `toContainEqual` para un miembro comparado por estructura, `toHaveLength` y `toHaveProperty`

205* **Presencia y tipo**: `toBeDefined`, `toBeUndefined`, `toBeNull`, `toBeTruthy`, `toBeFalsy`, `toBeNaN`, `toBeInstanceOf`

206* **Lanzamiento de excepciones**: `toThrow`, para una función que llama `expect`, o para una promesa que compruebas con `.rejects`

207 

208Pon `.not` delante de una aserción para comprobar lo contrario, y `.resolves` o `.rejects` para comprobar con qué se resuelve o rechaza una promesa.

209 200 

210Cuando un `expect` falla dentro de un stub o hook que pasaste a `on` como una función simple en lugar de un generador asíncrono, la prueba falla. El motor omite ese hook, y la salida del fallo lo nombra, como `in the test's store.set hook`.201Cuando un `expect` falla dentro de un stub o hook que pasaste a `on` como una función simple en lugar de un generador asíncrono, la prueba falla. El motor omite ese hook, y la salida del fallo lo nombra, como `in the test's store.set hook`.

211 202 

Details

223 223 

224### Se muestra la banda de otro mod y no la tuya224### Se muestra la banda de otro mod y no la tuya

225 225 

226Hay una sola banda encima del prompt, y todos los mods la comparten. Un mod que se ejecuta [antes que el tuyo](https://code.claude.com/docs/es/plugins/mods/events.md#the-order-mods-run-in) reemplaza tu banda cuando devuelve un árbol que no incluye el resultado de `next(e)`. Para mostrar ambas bandas, cambia el hook de ese mod, o pídele a su autor que lo haga:226Cada mod que dibuja encima del prompt tiene su propia fila, así que cuando falta la tuya mientras se muestra la de otro, revisa estas causas:

227 227 

228* **Conservar las bandas posteriores**: coloca el resultado de `await next(e)` entre los hijos de un `Box` en su árbol, como en la pestaña Banda encima del prompt de [Elegir dónde dibujar](https://code.claude.com/docs/es/plugins/mods/interface.md#pick-where-to-draw)228* **Tu árbol no pasa la validación**: [escribe un registro de depuración](#read-the-debug-log), busca en él [`ui.render hook skipped`](#a-pane-or-band-is-empty) o [`does not validate`](#ui-render-refused), y corrige lo que indica la línea.

229* **Mantener el árbol válido**: no le des a ese `Box`, ni a ningún `Box` que lo rodee, una prop `width`, `height`, `minWidth`, `minHeight`, `position`, `top`, `left`, `right`, `bottom`, `display` u `overflow`229* **Las filas juntas superan un límite**: [escribe un registro de depuración](#read-the-debug-log) y busca en él `past the limits of the band`. Las filas [comparten los límites de un solo árbol](https://code.claude.com/docs/es/plugins/mods/reference.md#limits), así que dibuja un árbol más pequeño, o pídeles a los autores de los otros mods que lo hagan.

230* **Otro mod oculta tu fila o dibuja encima de ella**: si el registro no tiene ninguna de estas líneas, [desactiva](https://code.claude.com/docs/es/plugins/mods/overview.md#turn-mods-on-or-off) los otros mods uno por uno. Si tu fila vuelve a aparecer, pídele al autor de ese mod que lo cambie.

230 231 

231Para encontrar ese mod, [escribe un registro de depuración](#read-the-debug-log) y busca en él `answered ui.render without next()`. Una línea como `other-mod (user) answered ui.render without next()` nombra un mod que devolvió su árbol sin llamar a `next(e)`. No nombra el [punto de renderizado](https://code.claude.com/docs/es/plugins/mods/reference.md#render-sites), así que también puede aparecer un mod que solo dibuja un panel. Un mod que llama a `next(e)` y descarta el resultado no genera ninguna línea, así que revisa también los hooks que se ejecutan antes del tuyo.232Antes de v2.1.323, todos los mods compartían un solo dibujo en la banda. Un mod que se ejecutaba [antes que el tuyo](https://code.claude.com/docs/es/plugins/mods/events.md#the-order-mods-run-in) reemplazaba tu dibujo cuando devolvía un árbol que no incluía el resultado de `next(e)`. Actualiza Claude Code, o pídele al autor de ese mod que haga estos cambios:

232 233 

233La banda de un mod también falta cuando el árbol que devolvió su propio hook no pasa la validación, y las bandas de los demás mods se mantienen. Para saber qué mod y por qué, [escribe un registro de depuración](#read-the-debug-log) y busca en él [`ui.render hook skipped`](#a-pane-or-band-is-empty).234* **Conservar los dibujos de los mods posteriores**: coloca el resultado de `await next(e)` entre los hijos de un `Box` en su árbol

235* **Mantener el árbol válido**: no le des a ese `Box`, ni a ningún `Box` que lo rodee, una prop `width`, `height`, `minWidth`, `minHeight`, `position`, `top`, `left`, `right`, `bottom`, `display` u `overflow`

234 236 

235### Un panel o una banda está vacío o muestra el contenido habitual de Claude Code237### Un panel o una banda está vacío o muestra el contenido habitual de Claude Code

236 238 


246 248 

247### Una línea de `ui.render` dice `refused`249### Una línea de `ui.render` dice `refused`

248 250 

249`ui.render (<site>) refused:`, o `ui.render (<site>): the chain settled on a tree that does not validate` en el [registro de depuración](#read-the-debug-log), significa que el [árbol](https://code.claude.com/docs/es/plugins/mods/interface.md#build-a-tree-from-elements) en ese punto de renderizado supera un [límite de tamaño](https://code.claude.com/docs/es/plugins/mods/reference.md#limits). Cualquiera de las dos líneas nombra el [punto de renderizado](https://code.claude.com/docs/es/plugins/mods/reference.md#render-sites) y luego el motivo, y el motivo nombra el límite.251`ui.render (<site>) refused:`, o `ui.render (<site>): the chain settled on a tree that does not validate` en el [registro de depuración](#read-the-debug-log), significa que el [árbol](https://code.claude.com/docs/es/plugins/mods/interface.md#build-a-tree-from-elements) en ese punto de renderizado supera un [límite de tamaño](https://code.claude.com/docs/es/plugins/mods/reference.md#limits). Cualquiera de las dos líneas nombra el [punto de renderizado](https://code.claude.com/docs/es/plugins/mods/reference.md#render-sites) y luego el motivo.

250 252 

251Cambia los mods que dibujan en ese punto de renderizado para que sus hooks [`ui.render`](https://code.claude.com/docs/es/plugins/mods/reference#interface) devuelvan árboles más pequeños, o pídeles a sus autores que lo hagan. Si la línea de la transcripción empieza con `hooks`, más de un mod cargado tiene un hook `ui.render` para ese punto de renderizado, así que revisa los árboles de cada uno de esos mods. Para varios mods cuyas bandas encima del prompt se anidan en un árbol de más de 32 niveles de profundidad, la línea dice:253Cambia los mods que dibujan en ese punto de renderizado para que sus hooks [`ui.render`](https://code.claude.com/docs/es/plugins/mods/reference#interface) devuelvan árboles más pequeños, o pídeles a sus autores que lo hagan. Si la línea de la transcripción empieza con `hooks`, más de un mod cargado tiene un hook `ui.render` para ese punto de renderizado, así que revisa los árboles de cada uno de esos mods. Para filas encima del prompt que juntas no caben en los límites de la banda, la línea dice:

252 254 

253```text theme={null}255```text theme={null}

254hooks: ui.render (AbovePrompt) refused: deeper than 32; nothing was drawn256hooks: ui.render (AbovePrompt) refused: a row past the limits of the band; nothing was drawn

255```257```

256 258 

259A pesar de ese final, las filas que sí caben se siguen dibujando.

260 

257Antes de v2.1.307, una línea `refused:` para cualquier punto de renderizado informaba de cualquier árbol que no pasara la validación, y para `Pane` y `AbovePrompt` terminaba con `; the engine drew its own`. En esas versiones, corrige lo que indica el motivo.261Antes de v2.1.307, una línea `refused:` para cualquier punto de renderizado informaba de cualquier árbol que no pasara la validación, y para `Pane` y `AbovePrompt` terminaba con `; the engine drew its own`. En esas versiones, corrige lo que indica el motivo.

258 262 

259### `needs a key`, `is drawn twice` o `key each once`263### `needs a key`, `is drawn twice` o `key each once`


307 311 

308### Los atajos de teclado no hacen nada312### Los atajos de teclado no hacen nada

309 313 

310Tu panel o banda no tiene el foco del teclado, tu botón está en una banda contraída, o el dibujo está en la extensión de VS Code, donde los botones no tienen atajos de teclado. Haz lo que corresponda:314Tu panel o banda no tiene el foco del teclado, tu botón está en una banda contraída, otro mod usa la misma tecla, o el dibujo está en la extensión de VS Code.

311 315 

312* **Sin foco del teclado**: presiona Ctrl+X y luego Tab o, en el [renderizado de pantalla completa](https://code.claude.com/docs/es/fullscreen.md), haz clic en el panel o la banda. Para que el panel tome el foco al abrirse, ábrelo con `focus: true` desde un comando.316* **Sin foco del teclado**: presiona Ctrl+X y luego Tab o, en el [renderizado de pantalla completa](https://code.claude.com/docs/es/fullscreen.md), haz clic en el panel o la banda. Para que el panel tome el foco al abrirse, ábrelo con `focus: true` desde un comando.

313* **El botón está en una banda contraída**: la banda muestra una fila atenuada que empieza con `▸ plugin panel hidden`. Presiona las teclas que indica la fila, Ctrl+X y luego Ctrl+A de forma predeterminada, para [expandirla](#plugin-panel-hidden).317* **El botón está en una banda contraída**: la banda muestra una fila atenuada que empieza con `▸ plugin panel hidden`. Presiona las teclas que indica la fila, Ctrl+X y luego Ctrl+A de forma predeterminada, para [expandirla](#plugin-panel-hidden).

314* **En la extensión de VS Code**: haz clic en el botón, o presiona Enter sobre él cuando tenga el foco318* **La fila de otro mod en la banda usa el mismo atajo de teclado**: en la terminal, la tecla no presiona ninguno de los dos botones. Para comprobarlo, [desactiva](https://code.claude.com/docs/es/plugins/mods/overview.md#turn-mods-on-or-off) los otros mods que dibujan filas, uno por uno, hasta que la tecla funcione. Cambia el `hotkey` de tu botón, o pídele al autor de ese mod que cambie el suyo.

319* **En la extensión de VS Code, donde los botones no tienen atajos de teclado**: haz clic en el botón, o presiona Enter sobre él cuando tenga el foco

315 320 

316### Un dibujo funciona en la terminal y no en la app de escritorio ni en VS Code321### Un dibujo funciona en la terminal y no en la app de escritorio ni en VS Code

317 322 

Details

36 36 

37![Diagram in two columns joined by five straight arrows. Left, the directory of a plugin named my-plugin, holding a manifest at .claude-plugin/plugin.json, skills/review/SKILL.md, agents/reviewer.md, hooks/hooks.json, .mcp.json, and other components. Right, what each file gives you in your session: the manifest sets the plugin name, my-plugin; the skill runs as /my-plugin:review; the agent file is a subagent Claude can delegate to; the hooks file holds hooks that run on lifecycle events; and .mcp.json adds an MCP server that gives Claude tools.](https://mintcdn.com/claude-code/2Q_GtOEovg5qaBem/images/plugin-directory.svg?fit=max\&auto=format\&n=2Q_GtOEovg5qaBem\&q=85\&s=f623b64e82713b830e48174f0a922888)37![Diagram in two columns joined by five straight arrows. Left, the directory of a plugin named my-plugin, holding a manifest at .claude-plugin/plugin.json, skills/review/SKILL.md, agents/reviewer.md, hooks/hooks.json, .mcp.json, and other components. Right, what each file gives you in your session: the manifest sets the plugin name, my-plugin; the skill runs as /my-plugin:review; the agent file is a subagent Claude can delegate to; the hooks file holds hooks that run on lifecycle events; and .mcp.json adds an MCP server that gives Claude tools.](https://mintcdn.com/claude-code/2Q_GtOEovg5qaBem/images/plugin-directory.svg?fit=max\&auto=format\&n=2Q_GtOEovg5qaBem\&q=85\&s=f623b64e82713b830e48174f0a922888)

38 38 

39Para cada tipo de componente que un plugin puede contener, con un ejemplo de cada uno, consulte [Componentes de plugins](https://code.claude.com/docs/es/plugins/components.md). Para ver dónde se encuentra cada pieza en el directorio de un plugin, utilice el [explorador de plugins](https://code.claude.com/docs/es/plugins/components.md#explore-the-plugin-directory) en esa página.39Para los tipos de componentes que un plugin puede contener, con un ejemplo de cada uno, consulta [Componentes de plugins](https://code.claude.com/docs/es/plugins/components.md). Para ver dónde se encuentra cada pieza en el directorio de un plugin, usa el [explorador de plugins](https://code.claude.com/docs/es/plugins/components.md#explore-the-plugin-directory) en esa página.

40 40 

41### Decidir si necesita un plugin41### Decidir si necesita un plugin

42 42 

Details

54 54 

55En su shell, agregue un marketplace local que enumere el plugin con `claude plugin marketplace add ./path-to-marketplace`, instale el plugin desde él e inicie una sesión para confirmar que se carga.55En su shell, agregue un marketplace local que enumere el plugin con `claude plugin marketplace add ./path-to-marketplace`, instale el plugin desde él e inicie una sesión para confirmar que se carga.

56 56 

57* Para el marketplace más pequeño que funciona, consulte [Crear un marketplace](https://code.claude.com/docs/es/plugins/create-marketplace.md).57* Para el marketplace más pequeño que funciona, consulta [Crear un marketplace](https://code.claude.com/docs/es/plugins/create-marketplace.md).

58* Para saber si una instalación carga su directorio de origen o una copia en caché, consulte [Plugins in-place y copiados](https://code.claude.com/docs/es/plugins/loading.md#in-place-and-copied-plugins).58* Para saber si una instalación carga tu directorio de origen o una copia en caché, consulta [Plugins in-place y copiados](https://code.claude.com/docs/es/plugins/loading.md#in-place-and-copied-plugins).

59 59 

60**5. Completar los metadatos que ven los usuarios**60**5. Completar los metadatos que ven los usuarios**

61 61 

62Establezca `description`, `author`, `homepage` y `repository` en `plugin.json`, y agregue un `README.md` en la raíz del plugin. `homepage` debe analizarse como una URL. La [referencia de manifiesto](https://code.claude.com/docs/es/plugins/manifest-reference.md#fields) enumera todos los campos.62Establece `description`, `author`, `homepage` y `repository` en `plugin.json`, y agrega un `README.md` en la raíz del plugin. `homepage` debe poder analizarse como una URL. Para saber qué acepta cada campo, consulta la [referencia de manifiesto](https://code.claude.com/docs/es/plugins/manifest-reference.md#fields).

63 63 

64**6. Ejecutar su suite de evaluación**64**6. Ejecutar tu suite de evaluación**

65 65 

66Si tiene una suite de evaluación, ejecute `claude plugin eval` en su shell. Ejecuta los casos de prueba del plugin y califica los resultados, lo que detecta regresiones cuando cambia el plugin. Consulte [Probar plugins con evaluaciones](https://code.claude.com/docs/es/plugin-evals.md).66Si tienes una suite de evaluación, ejecuta `claude plugin eval` en tu shell. Ejecuta los casos de prueba del plugin y califica los resultados, lo que detecta regresiones cuando cambias el plugin. Consulta [Probar plugins con evaluaciones](https://code.claude.com/docs/es/plugin-evals.md).

67 67 

68## Compartir un plugin sin un marketplace68## Compartir un plugin sin un marketplace

69 69 

Details

67> | `--capacity <N>` | Número máximo de sesiones concurrentes. El valor predeterminado es 32. No se puede usar con `--spawn=session`. |67> | `--capacity <N>` | Número máximo de sesiones concurrentes. El valor predeterminado es 32. No se puede usar con `--spawn=session`. |

68> | `--[no-]create-session-in-dir` | Pre-crear una sesión en el directorio actual cuando el servidor se inicia, para que tenga un lugar donde escribir inmediatamente. En modo `worktree` esta sesión permanece en el directorio actual mientras las sesiones bajo demanda obtienen worktrees aislados. Habilitado de forma predeterminada. Si pasa `--no-create-session-in-dir` para comenzar sin ninguno, Claude Code archiva las sesiones del servidor cuando lo detiene, por lo que no hay nada que [reanudar](#resume-sessions-after-stopping-the-server). |68> | `--[no-]create-session-in-dir` | Pre-crear una sesión en el directorio actual cuando el servidor se inicia, para que tenga un lugar donde escribir inmediatamente. En modo `worktree` esta sesión permanece en el directorio actual mientras las sesiones bajo demanda obtienen worktrees aislados. Habilitado de forma predeterminada. Si pasa `--no-create-session-in-dir` para comenzar sin ninguno, Claude Code archiva las sesiones del servidor cuando lo detiene, por lo que no hay nada que [reanudar](#resume-sessions-after-stopping-the-server). |

69> | `--permission-mode <mode>` | Establezca el [modo de permiso](https://code.claude.com/docs/es/permission-modes.md) inicial para las sesiones del servidor, como `acceptEdits`. Acepta `manual` como alias para `default`; un modo no reconocido detiene el servidor al inicio y enumera los modos válidos. |69> | `--permission-mode <mode>` | Establezca el [modo de permiso](https://code.claude.com/docs/es/permission-modes.md) inicial para las sesiones del servidor, como `acceptEdits`. Acepta `manual` como alias para `default`; un modo no reconocido detiene el servidor al inicio y enumera los modos válidos. |

70> | `--settings <file>` | Aplica un archivo de configuración JSON a las sesiones del servidor, con la misma [precedencia](https://code.claude.com/docs/es/settings.md#settings-precedence) que `claude --settings`. Indica una ruta de archivo, no una cadena JSON. Requiere Claude Code v2.1.321 o posterior. |

70> | `--chrome` / `--no-chrome` | Active o desactive la [integración de Chrome](https://code.claude.com/docs/es/chrome.md) en las sesiones que crea el servidor, para que Claude pueda usar Chrome en su máquina mientras trabaja desde otro dispositivo. Sin ninguna bandera, la sesión que el servidor pre-crea y cualquier sesión que inicie usted mismo desde claude.ai/code o la aplicación Claude comienzan con Chrome desactivado, incluso si [habilitó Chrome de forma predeterminada](https://code.claude.com/docs/es/chrome.md#enable-chrome-by-default). Una sesión que el servidor inicia para uno de sus hilos de [proyecto](https://code.claude.com/docs/es/claude-projects.md) sigue esa configuración en su lugar, excepto en modo `bypassPermissions`. Requiere Claude Code v2.1.273 o posterior. |71> | `--chrome` / `--no-chrome` | Active o desactive la [integración de Chrome](https://code.claude.com/docs/es/chrome.md) en las sesiones que crea el servidor, para que Claude pueda usar Chrome en su máquina mientras trabaja desde otro dispositivo. Sin ninguna bandera, la sesión que el servidor pre-crea y cualquier sesión que inicie usted mismo desde claude.ai/code o la aplicación Claude comienzan con Chrome desactivado, incluso si [habilitó Chrome de forma predeterminada](https://code.claude.com/docs/es/chrome.md#enable-chrome-by-default). Una sesión que el servidor inicia para uno de sus hilos de [proyecto](https://code.claude.com/docs/es/claude-projects.md) sigue esa configuración en su lugar, excepto en modo `bypassPermissions`. Requiere Claude Code v2.1.273 o posterior. |

71> | `-d`, `--debug[=<filter>]` | Active el registro de depuración para el servidor, opcionalmente filtrado por categoría. Pase un filtro solo en la forma `=`, como `--debug=api,hooks`. Requiere Claude Code v2.1.282 o posterior. |72> | `-d`, `--debug[=<filter>]` | Active el registro de depuración para el servidor, opcionalmente filtrado por categoría. Pase un filtro solo en la forma `=`, como `--debug=api,hooks`. Requiere Claude Code v2.1.282 o posterior. |

72> | `--debug-file <path>` | Escriba registros de depuración en el archivo dado. |73> | `--debug-file <path>` | Escriba registros de depuración en el archivo dado. |

73> | `--verbose` | Mostrar registros detallados de conexión y sesión. |74> | `--verbose` | Mostrar registros detallados de conexión y sesión. |

74> | `--sandbox`, `--no-sandbox` | Eliminados en v2.1.300. Si pasas cualquiera de los dos flags, el servidor [sale con un error](https://code.claude.com/docs/es/errors.md#sandbox-is-not-supported-by-claude-remote-control) en lugar de iniciarse. |75> | `--sandbox`, `--no-sandbox` | Eliminados en v2.1.300. Si pasas cualquiera de los dos flags, el servidor [sale con un error](https://code.claude.com/docs/es/errors.md#sandbox-is-not-supported-by-claude-remote-control) en lugar de iniciarse. |

75>76>

76> Si pasa una bandera global `claude` antes de `remote-control`, o un script contenedor agrega una, Claude Code no lleva la bandera a las sesiones que crea el servidor. Claude Code deja pasar la bandera solo cuando se sabe que dejarla no cambia lo que esas sesiones pueden hacer, como `--verbose` o `--model`. Para cualquier otra bandera, como `--settings`, Claude Code [se niega a iniciar](https://code.claude.com/docs/es/errors.md#not-carried-over-to-the-sessions-remote-control-starts) y nombra la bandera a eliminar.77> Si pasas un flag global de `claude` antes de `remote-control`, o un script contenedor agrega uno, Claude Code no traslada el flag a las sesiones que crea el servidor. El servidor aún se inicia con algunos flags, como `--verbose` o `--model`. Con cualquier otro flag, el servidor [no se inicia](https://code.claude.com/docs/es/errors.md#not-carried-over-to-the-sessions-remote-control-starts). Para pasar un archivo de configuración, coloca `--settings` después de `remote-control`.

77>78>

78> Para sandboxear las sesiones que crea el servidor, active [sandboxing](https://code.claude.com/docs/es/sandboxing.md) en un archivo de configuración.79> Para sandboxear las sesiones que crea el servidor, active [sandboxing](https://code.claude.com/docs/es/sandboxing.md) en un archivo de configuración.

79>80>


375* **Los diálogos reenviados caducan**: Claude Code mantiene abiertas las solicitudes de permiso y las preguntas de `AskUserQuestion` hasta que las respondes. Cuando Claude Code reenvía otro tipo de diálogo a la sesión remota, como el prompt de elección de modelo que se muestra después de un rechazo por seguridad, espera cinco minutos de forma predeterminada y luego cierra el diálogo y continúa con la opción predeterminada del diálogo, que no realiza ninguna acción. Configura [`dialogExpiry`](https://code.claude.com/docs/es/settings-reference#dialogexpiry) para ajustar o desactivar el plazo. Requiere Claude Code v2.1.224 o posterior.376* **Los diálogos reenviados caducan**: Claude Code mantiene abiertas las solicitudes de permiso y las preguntas de `AskUserQuestion` hasta que las respondes. Cuando Claude Code reenvía otro tipo de diálogo a la sesión remota, como el prompt de elección de modelo que se muestra después de un rechazo por seguridad, espera cinco minutos de forma predeterminada y luego cierra el diálogo y continúa con la opción predeterminada del diálogo, que no realiza ninguna acción. Configura [`dialogExpiry`](https://code.claude.com/docs/es/settings-reference#dialogexpiry) para ajustar o desactivar el plazo. Requiere Claude Code v2.1.224 o posterior.

376* **El prompt de consentimiento de créditos de uso de Fable no se reenvía**: Claude Code muestra el [prompt de consentimiento de créditos de uso de Fable](https://code.claude.com/docs/es/model-config.md#fable-and-usage-credits) que aparece a mitad de la sesión solo donde se ejecuta la sesión, no en tu dispositivo. Cuando la sesión se ejecuta en una terminal y nadie allí responde antes de que Claude Code cierre el prompt, el turno termina sin enviar la solicitud; consulta [The prompt to confirm went unanswered](https://code.claude.com/docs/es/errors.md#the-prompt-to-confirm-went-unanswered).377* **El prompt de consentimiento de créditos de uso de Fable no se reenvía**: Claude Code muestra el [prompt de consentimiento de créditos de uso de Fable](https://code.claude.com/docs/es/model-config.md#fable-and-usage-credits) que aparece a mitad de la sesión solo donde se ejecuta la sesión, no en tu dispositivo. Cuando la sesión se ejecuta en una terminal y nadie allí responde antes de que Claude Code cierre el prompt, el turno termina sin enviar la solicitud; consulta [The prompt to confirm went unanswered](https://code.claude.com/docs/es/errors.md#the-prompt-to-confirm-went-unanswered).

377* **Algunos comandos son solo locales**: los comandos que solo se ejecutan en la interfaz de la terminal, como `/plugin` o `/resume`, funcionan únicamente desde la CLI local, pases o no un argumento. `/claude-api` tampoco está disponible cuando lo escribes desde el móvil o la web. Claude aún puede [cargar ese skill por su cuenta](https://code.claude.com/docs/es/skills.md#work-on-claude-api-projects) allí. Los siguientes funcionan desde el móvil y la web:378* **Algunos comandos son solo locales**: los comandos que solo se ejecutan en la interfaz de la terminal, como `/plugin` o `/resume`, funcionan únicamente desde la CLI local, pases o no un argumento. `/claude-api` tampoco está disponible cuando lo escribes desde el móvil o la web. Claude aún puede [cargar ese skill por su cuenta](https://code.claude.com/docs/es/skills.md#work-on-claude-api-projects) allí. Los siguientes funcionan desde el móvil y la web:

378 * Comandos de salida de texto: `/compact`, `/clear`, `/context`, `/usage`, `/exit`, `/usage-credits`, `/recap` y `/reload-plugins`. `/usage-credits` imprime la URL de facturación en lugar de abrir un navegador. `/reload-plugins` solo funciona cuando la sesión se ejecuta en una terminal interactiva; una sesión sin ella lo rechaza.379 * Comandos de salida de texto: `/compact`, `/clear`, `/context`, `/usage`, `/exit`, `/usage-credits`, `/recap` y `/reload-plugins`. `/usage-credits` responde con texto, por ejemplo, dónde administrar los créditos de uso. `/reload-plugins` solo funciona cuando la sesión se ejecuta en una terminal interactiva; una sesión sin ella lo rechaza.

379 * `/model`, `/effort`, `/fast`, `/color` y `/rename`: pasa el valor como argumento, por ejemplo `/model sonnet` o `/effort high`. Desde el móvil y la web, `/model` y `/effort` toman el argumento en lugar del selector o el control deslizante de la terminal.380 * `/model`, `/effort`, `/fast`, `/color` y `/rename`: pasa el valor como argumento, por ejemplo `/model sonnet` o `/effort high`. Desde el móvil y la web, `/model` y `/effort` toman el argumento en lugar del selector o el control deslizante de la terminal.

380 * `/mcp`: desde la aplicación móvil, devuelve un resumen en texto del estado de los servidores en lugar de abrir el selector. En la web, `/mcp` por sí solo abre un directorio de [conectores de claude.ai](https://code.claude.com/docs/es/mcp.md#use-mcp-servers-from-claude-ai) en lugar de devolver el resumen. Los [subcomandos](https://code.claude.com/docs/es/commands.md#all-commands) `reconnect`, `enable` y `disable` funcionan desde ambos cuando la sesión se ejecuta en una terminal interactiva. `/mcp reconnect` sin nombre de servidor reintenta todos los servidores que fallaron o que necesitan autenticación. Para autorizar un conector de claude.ai sin el selector, consulta [Autorizar un conector de nuevo desde tu shell](#authorize-a-connector-again-from-your-shell).381 * `/mcp`: desde la aplicación móvil, devuelve un resumen en texto del estado de los servidores en lugar de abrir el selector. En la web, `/mcp` por sí solo abre un directorio de [conectores de claude.ai](https://code.claude.com/docs/es/mcp.md#use-mcp-servers-from-claude-ai) en lugar de devolver el resumen. Los [subcomandos](https://code.claude.com/docs/es/commands.md#all-commands) `reconnect`, `enable` y `disable` funcionan desde ambos cuando la sesión se ejecuta en una terminal interactiva. `/mcp reconnect` sin nombre de servidor reintenta todos los servidores que fallaron o que necesitan autenticación. Para autorizar un conector de claude.ai sin el selector, consulta [Autorizar un conector de nuevo desde tu shell](#authorize-a-connector-again-from-your-shell).

381 * `/config`: desde la aplicación móvil, pasa `key=value` para establecer un ajuste, o ejecútalo sin argumento para listar las claves que puedes establecer. En la web, `/config` abre en su lugar **Settings > Code** o **Settings > Claude Code**.382 * `/config`: desde la aplicación móvil, pasa `key=value` para establecer un ajuste, o ejecútalo sin argumento para listar las claves que puedes establecer. En la web, `/config` abre en su lugar **Settings > Code** o **Settings > Claude Code**.

routines.md +1 −1

Details

431 431 

432Cada tarea programada usa un [entorno en la nube](https://code.claude.com/docs/es/cloud-environments.md) que controla el acceso a la red, las variables de entorno y los scripts de configuración. La tarea hereda la política de red del entorno en cada ejecución.432Cada tarea programada usa un [entorno en la nube](https://code.claude.com/docs/es/cloud-environments.md) que controla el acceso a la red, las variables de entorno y los scripts de configuración. La tarea hereda la política de red del entorno en cada ejecución.

433 433 

434El entorno **Default** usa acceso **Limited** con **Allow package managers** marcado, por lo que sus ejecuciones llegan a la [lista de permitidos predeterminada](https://code.claude.com/docs/es/cloud-environments.md#default-allowed-domains). Una solicitud a un host bloqueado falla con `403` y `x-deny-reason: host_not_allowed`. El tráfico de los conectores MCP se enruta a través de los servidores de Anthropic, por lo que los conectores que agregas a la tarea funcionan sin agregar sus hosts a **Allowed domains**. Elimina los conectores que no necesites en [Conectores](#connectors).434El entorno **Default** usa acceso **Limited** con **Allow package managers** marcado, por lo que sus ejecuciones llegan a la [lista de permitidos predeterminada](https://code.claude.com/docs/es/cloud-environments.md#default-allowed-domains). Una solicitud a un host bloqueado falla con [un error como `403` o `ENOTFOUND`](https://code.claude.com/docs/es/errors#host-not-allowed-in-a-cloud-session). El tráfico de los conectores MCP se enruta a través de los servidores de Anthropic, por lo que los conectores que agregas a la tarea funcionan sin agregar sus hosts a **Allowed domains**. Elimina los conectores que no necesites en [Conectores](#connectors).

435 435 

436Para permitir dominios adicionales en uno de tus propios entornos, sigue estos pasos. Un [entorno compartido por la organización](https://code.claude.com/docs/es/cloud-environments.md#organization-shared-environments) se abre en modo de solo lectura aquí, por lo que un Owner cambia su acceso a la red desde la página **Cloud environments** en la [configuración de administración](https://claude.ai/admin-settings) en su lugar.436Para permitir dominios adicionales en uno de tus propios entornos, sigue estos pasos. Un [entorno compartido por la organización](https://code.claude.com/docs/es/cloud-environments.md#organization-shared-environments) se abre en modo de solo lectura aquí, por lo que un Owner cambia su acceso a la red desde la página **Cloud environments** en la [configuración de administración](https://claude.ai/admin-settings) en su lugar.

437 437 

sandboxing.md +5 −3

Details

276 276 

277Estas rutas se aplican a nivel del sistema operativo, por lo que todos los comandos que se ejecutan dentro del sandbox, incluidos sus procesos hijos, 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`.277Estas rutas se aplican a nivel del sistema operativo, por lo que todos los comandos que se ejecutan dentro del sandbox, incluidos sus procesos hijos, 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`.

278 278 

279En Linux y WSL2, una entrada para una ruta que todavía no existe no tiene efecto, así que crea la ruta primero.

280 

279Cuando defines el mismo arreglo de sistema de archivos en varios [alcances de configuración](https://code.claude.com/docs/es/settings.md#settings-precedence), Claude Code los combina, uniendo las rutas en lugar de reemplazar el arreglo de un alcance por el de otro. Claude Code deja una entrada fuera de la combinación cuando la cubre un bloqueo de [Evitar que los desarrolladores amplíen la política](#keep-developers-from-widening-the-policy).281Cuando defines el mismo arreglo de sistema de archivos en varios [alcances de configuración](https://code.claude.com/docs/es/settings.md#settings-precedence), Claude Code los combina, uniendo las rutas en lugar de reemplazar el arreglo de un alcance por el de otro. Claude Code deja una entrada fuera de la combinación cuando la cubre un bloqueo de [Evitar que los desarrolladores amplíen la política](#keep-developers-from-widening-the-policy).

280 282 

281Si excluyes una fuente con [`--setting-sources`](https://code.claude.com/docs/es/cli-reference) en la CLI o con [`settingSources`](https://code.claude.com/docs/es/agent-sdk/claude-code-features#control-filesystem-settings-with-settingsources) en el Agent SDK, Claude Code ignora sus entradas de `sandbox.filesystem`, sus reglas de permisos de `Edit` y sus reglas de denegación de `Read` al construir la configuración del sandbox. Requiere Claude Code v2.1.246 o posterior.283Si excluyes una fuente con [`--setting-sources`](https://code.claude.com/docs/es/cli-reference) en la CLI o con [`settingSources`](https://code.claude.com/docs/es/agent-sdk/claude-code-features#control-filesystem-settings-with-settingsources) en el Agent SDK, Claude Code ignora sus entradas de `sandbox.filesystem`, sus reglas de permisos de `Edit` y sus reglas de denegación de `Read` al construir la configuración del sandbox. Requiere Claude Code v2.1.246 o posterior.


376 378 

377Como desactivar el aislamiento del sistema de archivos amplía lo que pueden hacer los comandos en el sandbox, Claude Code respeta `filesystem.disabled` solo desde estas fuentes de configuración:379Como desactivar el aislamiento del sistema de archivos amplía lo que pueden hacer los comandos en el sandbox, Claude Code respeta `filesystem.disabled` solo desde estas fuentes de configuración:

378 380 

379* La configuración de usuario, la configuración administrada y el flag de CLI `--settings` pueden establecerlo. La configuración del proyecto en `.claude/settings.json` y `.claude/settings.local.json` no puede, así que un proyecto clonado no puede desactivar el aislamiento del sistema de archivos.381* La configuración de usuario, la configuración administrada y el flag de CLI `--settings` pueden establecerlo. La configuración del proyecto en `.claude/settings.json` y `.claude/settings.local.json` no puede establecerlo.

380* Cuando la configuración administrada configura `sandbox.filesystem` de cualquier forma, o incluye alguna entrada de `sandbox.credentials.files` con `"mode": "deny"`, solo la configuración administrada puede establecer la clave. Esto evita que los desarrolladores desactiven el aislamiento del sistema de archivos en ese despliegue; para desactivarlo para todos, establece `"disabled": true` en la configuración administrada.382* Cuando la configuración administrada configura `sandbox.filesystem` de cualquier forma, o incluye alguna entrada de `sandbox.credentials.files` con `"mode": "deny"`, solo la configuración administrada puede establecer la clave. Para desactivar el aislamiento del sistema de archivos para todos, establece `"disabled": true` en la configuración administrada.

381* Cuando [`CLAUDE_CODE_SUBPROCESS_ENV_SCRUB`](https://code.claude.com/docs/es/env-vars) está definida, Claude Code ignora `filesystem.disabled` desde cualquier fuente, incluida la configuración administrada, y mantiene activado el aislamiento del sistema de archivos.383* Cuando [`CLAUDE_CODE_SUBPROCESS_ENV_SCRUB`](https://code.claude.com/docs/es/env-vars) está definida, Claude Code ignora `filesystem.disabled` desde cualquier fuente, incluida la configuración administrada.

382 384 

383Una entrada `mask` [válida](https://code.claude.com/docs/es/settings-reference.md#invalid-credential-entries-in-managed-settings) no bloquea la clave, incluso cuando Claude Code [recurre a `deny`](#mask-credential-files) para ella al iniciar. Agrega una ruta que no se pueda enmascarar, como un directorio de credenciales, como una entrada `deny` explícita en la configuración administrada, lo que bloquea la clave.385Una entrada `mask` [válida](https://code.claude.com/docs/es/settings-reference.md#invalid-credential-entries-in-managed-settings) no bloquea la clave, incluso cuando Claude Code [recurre a `deny`](#mask-credential-files) para ella al iniciar. Agrega una ruta que no se pueda enmascarar, como un directorio de credenciales, como una entrada `deny` explícita en la configuración administrada, lo que bloquea la clave.

384 386 

Details

117 117 

118* **Oyente**: el oyente es un proxy directo en `127.0.0.1`. El runner inicia el oyente antes de registrarse con el plano de control, y sale al inicio si el oyente no puede iniciar.118* **Oyente**: el oyente es un proxy directo en `127.0.0.1`. El runner inicia el oyente antes de registrarse con el plano de control, y sale al inicio si el oyente no puede iniciar.

119* **Variables de proxy**: el runner reescribe cualquiera de `HTTPS_PROXY` e `HTTP_PROXY` que establezca para que apunte al oyente. Ese valor reescrito alcanza el runner en sí, sus hooks de ciclo de vida, y cada sesión que ejecuta.119* **Variables de proxy**: el runner reescribe cualquiera de `HTTPS_PROXY` e `HTTP_PROXY` que establezca para que apunte al oyente. Ese valor reescrito alcanza el runner en sí, sus hooks de ciclo de vida, y cada sesión que ejecuta.

120* **Rotación de token**: un token rotado entra en vigor sin un reinicio. Para cada conexión que el oyente abre a su proxy, el runner ejecuta su comando o lee su archivo nuevamente y agrega el resultado como el encabezado.120* **Rotación de token**: cuando rotas el token, las conexiones nuevas llevan el nuevo sin reiniciar el runner. Para cada conexión que el oyente abre a tu proxy, el runner ejecuta tu comando o lee tu archivo nuevamente y agrega el resultado como el encabezado. Una conexión que ya está abierta sigue siendo utilizable con el token anterior hasta que tu proxy la cierre o el runner salga.

121* **Entorno de sesión**: una sesión alcanza su proxy solo a través del oyente. En el entorno de cada sesión, el runner elimina `ALL_PROXY`, elimina cualquier ortografía de `HTTPS_PROXY` o `HTTP_PROXY` que no haya establecido, y fija `NO_PROXY` al valor propio del runner.121* **Entorno de sesión**: una sesión alcanza su proxy solo a través del oyente. En el entorno de cada sesión, el runner elimina `ALL_PROXY`, elimina cualquier ortografía de `HTTPS_PROXY` o `HTTP_PROXY` que no haya establecido, y fija `NO_PROXY` al valor propio del runner.

122* **Registros**: el runner nunca registra el valor del encabezado.122* **Registros**: el runner nunca registra el valor del encabezado.

123 123 


840 840 

841### Algunas sesiones no cuentan como inactivas841### Algunas sesiones no cuentan como inactivas

842 842 

843Una sesión que mantiene una tarea en segundo plano que sigue ejecutándose no cuenta como inactiva, por lo que `--release-idle-session-min` no liberará la ranura de esa sesión. Una sesión que espera una aprobación solicitada desde dentro de una llamada a herramienta en ejecución tampoco cuenta como inactiva. Establece `--kill-session-after-min` junto con él como un tope estricto.843Mientras una sesión no cuenta como inactiva, conserva su ranura más allá del límite de `--release-idle-session-min`, así que establece también `--kill-session-after-min`.

844 

845Una sesión cuenta como inactiva después de que termina su turno o mientras su turno espera a su usuario, pero no en casos como estos:

846 

847* Su turno terminó y no está esperando a su usuario, pero una tarea en segundo plano sigue ejecutándose

848* Su turno espera una aprobación que solicita una herramienta que no es MCP mientras esa herramienta se ejecuta

849* Su turno espera una [solicitud `elicitation/create`](https://code.claude.com/docs/es/mcp#respond-to-mcp-elicitation-requests) de un servidor MCP

844 850 

845`--kill-session-after-min` es un tope para sesiones descontroladas. En un runner en v2.1.260 o posterior, una sesión que alcanza el límite no se termina inmediatamente. El runner le da una ventana de gracia, 15 minutos por defecto, que puede cambiar con [`SELF_HOSTED_RUNNER_MAX_LIFETIME_GRACE_MS`](https://code.claude.com/docs/es/self-hosted-environments-reference#environment-variable-only-settings):851`--kill-session-after-min` es un tope para sesiones descontroladas. En un runner en v2.1.260 o posterior, una sesión que alcanza el límite no se termina inmediatamente. El runner le da una ventana de gracia, 15 minutos por defecto, que puede cambiar con [`SELF_HOSTED_RUNNER_MAX_LIFETIME_GRACE_MS`](https://code.claude.com/docs/es/self-hosted-environments-reference#environment-variable-only-settings):

846 852 

847* Si la sesión está esperando a su usuario, el runner la libera. Si su turno ha terminado y solo mantiene tareas de fondo, el runner espera hasta 60 segundos a que esas tareas terminen y luego la libera. La sesión se reanuda cuando su usuario envía su siguiente mensaje.853* Si la sesión está esperando a su usuario, el runner la libera. Si su turno ha terminado y solo mantiene tareas de fondo, el runner espera hasta 60 segundos a que esas tareas terminen y luego la libera. La sesión se reanuda cuando su usuario envía su siguiente mensaje.

848* Si un turno aún se está ejecutando, el runner espera a que el turno termine, o a que la sesión espere a su usuario, y luego la libera.854* Si un turno aún se está ejecutando, el runner espera a que el turno termine, o a que la sesión espere a su usuario, y luego la libera.

849* Si la sesión aún está en el runner cuando la ventana de gracia termina, el runner la termina, y se pierde el trabajo de cualquier turno en ejecución. Un turno esperando una aprobación solicitada desde dentro de una llamada de herramienta en ejecución es una forma en que una sesión supera la ventana.855* Si la sesión aún está en el runner cuando termina la ventana de gracia, el runner la termina, y se pierde el trabajo de cualquier turno en ejecución. Por ejemplo, una sesión puede permanecer en el runner hasta entonces si su turno espera una aprobación que solicita una herramienta que no es MCP mientras esa herramienta se ejecuta. Una sesión también puede permanecer ahí mientras su turno espera una solicitud `elicitation/create` de un servidor MCP.

850 856 

851Una sesión liberada se reanuda desde un clon nuevo, por lo que el trabajo al que no había hecho push se pierde de cualquier forma; consulta [Las sesiones reanudadas pierden el trabajo sin push](#resumed-sessions-lose-unpushed-work). Antes de v2.1.260, el runner terminaba cada sesión al llegar al límite, después de esperar como máximo la ventana de gracia a que terminara un turno en ejecución.857Una sesión liberada se reanuda desde un clon nuevo, por lo que el trabajo al que no había hecho push se pierde de cualquier forma; consulta [Las sesiones reanudadas pierden el trabajo sin push](#resumed-sessions-lose-unpushed-work). Antes de v2.1.260, el runner terminaba cada sesión al llegar al límite, después de esperar como máximo la ventana de gracia a que terminara un turno en ejecución.

852 858 

Details

252 252 

253Todas las demás claves en el bloque `env` en caché se aplican al inicio. Una vez que el servidor confirma la carga útil, y usted la aprueba si necesita [aprobación de seguridad](#security-approval-dialogs), las variables retenidas se aplican durante el resto de la sesión.253Todas las demás claves en el bloque `env` en caché se aplican al inicio. Una vez que el servidor confirma la carga útil, y usted la aprueba si necesita [aprobación de seguridad](#security-approval-dialogs), las variables retenidas se aplican durante el resto de la sesión.

254 254 

255Si su organización necesita un proxy para llegar a `api.anthropic.com`, la retención solo afecta al bloque `env` entregado por servidor en sí: un proxy establecido en un bloque `env` [administrado por endpoint](https://code.claude.com/docs/es/managed-settings.md#delivery-mechanisms) a través de MDM o `managed-settings.json`, en el entorno del shell, o en [configuración de usuario](https://code.claude.com/docs/es/settings.md#where-settings-live) llega a la búsqueda de configuración. La fuente administrada por endpoint requiere Claude Code v2.1.223 o posterior: el valor de proxy administrado por servidor en caché se retiene hasta que la búsqueda lo confirma, por lo que el valor administrado por endpoint se rellena por clave y llega a la búsqueda en sí. Antes de v2.1.223, use el entorno del shell o la configuración de usuario para que el proxy se aplique junto con una carga útil de servidor en caché. El primer lanzamiento no tiene caché, por lo que una fuente administrada por endpoint, el entorno del shell o la configuración de usuario sigue siendo necesaria para la búsqueda inicial.255Si la búsqueda necesita un proxy, establece `HTTPS_PROXY` en uno de estos:

256 

257* Un bloque `env` [administrado por endpoint](https://code.claude.com/docs/es/managed-settings.md#delivery-mechanisms) a través de MDM o `managed-settings.json`. Esta fuente requiere Claude Code v2.1.223 o posterior. Antes de v2.1.223, usa el entorno del shell o la configuración de usuario para que el proxy [se aplique junto con una carga útil de servidor en caché](#per-key-exceptions-across-managed-sources).

258* El entorno del shell

259* La [configuración de usuario](https://code.claude.com/docs/es/settings.md#where-settings-live)

260 

261Establece `HTTPS_PROXY` incluso si `ALL_PROXY` ya nombra el proxy.

256 262 

257Claude Code aplica la mayoría de las actualizaciones de configuración a sesiones en ejecución sin reinicio. Algunas actualizaciones se aplican solo en el siguiente lanzamiento, incluida la configuración del exportador OpenTelemetry, la clave `model` y la eliminación de una variable del bloque `env`.263Claude Code aplica la mayoría de las actualizaciones de configuración a sesiones en ejecución sin reinicio. Algunas actualizaciones se aplican solo en el siguiente lanzamiento, incluida la configuración del exportador OpenTelemetry, la clave `model` y la eliminación de una variable del bloque `env`.

258 264 

settings.md +1 −1

Details

177 177 

178Claude Code observa sus archivos de configuración y los recarga cuando cambian, por lo que aplica la mayoría de ediciones a la sesión en ejecución sin un reinicio, incluyendo ediciones a `permissions`, `hooks` y asistentes de credenciales como `apiKeyHelper`. Claude Code también carga un archivo de configuración que crea a mitad de sesión si su carpeta existía cuando la sesión comenzó. Para la carpeta `.claude/` del proyecto, carga el archivo incluso cuando crea la carpeta en la misma sesión.178Claude Code observa sus archivos de configuración y los recarga cuando cambian, por lo que aplica la mayoría de ediciones a la sesión en ejecución sin un reinicio, incluyendo ediciones a `permissions`, `hooks` y asistentes de credenciales como `apiKeyHelper`. Claude Code también carga un archivo de configuración que crea a mitad de sesión si su carpeta existía cuando la sesión comenzó. Para la carpeta `.claude/` del proyecto, carga el archivo incluso cuando crea la carpeta en la misma sesión.

179 179 

180La recarga cubre configuraciones de usuario, proyecto, local y administradas, y Claude Code ejecuta el [hook `ConfigChange`](https://code.claude.com/docs/es/hooks#configchange) para cada cambio de archivo de configuración que detecta, no para configuraciones administradas que llegan desde MDM o la consola de claude.ai. Las configuraciones administradas que llegan a través de MDM o de la consola de claude.ai alcanzan una sesión en ejecución en un cronograma en lugar de al guardar; la [tabla de entrega](https://code.claude.com/docs/es/managed-settings.md#choose-a-delivery-mechanism) lo da por fuente.180La recarga abarca la configuración de usuario, de proyecto, local y administrada. Claude Code ejecuta el [hook `ConfigChange`](https://code.claude.com/docs/es/hooks#configchange) para las ediciones directas de archivos de configuración, no para la configuración administrada que llega desde MDM o desde la consola de claude.ai. La configuración administrada que llega a través de MDM o desde la consola de claude.ai alcanza una sesión en ejecución según un cronograma y no al guardar; la [tabla de entrega](https://code.claude.com/docs/es/managed-settings.md#choose-a-delivery-mechanism) lo indica para cada origen.

181 181 

182Claude Code lee algunas claves solo una vez, al inicio de la sesión, por lo que una edición a una de ellas no alcanza la sesión en ejecución. Las claves del lado del administrador que también esperan un reinicio, como `requiredMinimumVersion`, se enumeran bajo [dónde y cuándo se aplica una política](https://code.claude.com/docs/es/managed-settings.md#where-and-when-a-policy-applies). Las que es más probable que edite a mitad de sesión:182Claude Code lee algunas claves solo una vez, al inicio de la sesión, por lo que una edición a una de ellas no alcanza la sesión en ejecución. Las claves del lado del administrador que también esperan un reinicio, como `requiredMinimumVersion`, se enumeran bajo [dónde y cuándo se aplica una política](https://code.claude.com/docs/es/managed-settings.md#where-and-when-a-policy-applies). Las que es más probable que edite a mitad de sesión:

183 183 

Details

235| [`strictPluginOnlyCustomization.mcp`](#strictpluginonlycustomization-mcp) | Bloquea los [servidores MCP](https://code.claude.com/docs/es/mcp.md) de fuentes de usuario y de proyecto | Plugins y skills | Managed |235| [`strictPluginOnlyCustomization.mcp`](#strictpluginonlycustomization-mcp) | Bloquea los [servidores MCP](https://code.claude.com/docs/es/mcp.md) de fuentes de usuario y de proyecto | Plugins y skills | Managed |

236| [`strictPluginOnlyCustomization.skills`](#strictpluginonlycustomization-skills) | Bloquea los [skills](https://code.claude.com/docs/es/skills.md) de fuentes de usuario y de proyecto | Plugins y skills | Managed |236| [`strictPluginOnlyCustomization.skills`](#strictpluginonlycustomization-skills) | Bloquea los [skills](https://code.claude.com/docs/es/skills.md) de fuentes de usuario y de proyecto | Plugins y skills | Managed |

237| [`subagentPromptCacheTtl`](#subagentpromptcachettl) | Elige la [duración de la caché de prompts](https://code.claude.com/docs/es/prompt-caching.md#cache-lifetime) para los subagentes y otras solicitudes fuera de la conversación principal | Modelo y respuestas | Any file |237| [`subagentPromptCacheTtl`](#subagentpromptcachettl) | Elige la [duración de la caché de prompts](https://code.claude.com/docs/es/prompt-caching.md#cache-lifetime) para los subagentes y otras solicitudes fuera de la conversación principal | Modelo y respuestas | Any file |

238| [`subagentStatusLine`](#subagentstatusline) | Reescribe filas de la visualización de tareas del [subagente](https://code.claude.com/docs/es/sub-agents.md) con tu propio comando | Interfaz y terminal | Any file |

239| [`switchModelsOnFlag`](#switchmodelsonflag) | Cambia de modelo automáticamente o haz una pausa cuando un [clasificador de seguridad](https://code.claude.com/docs/es/model-config.md#ask-before-switching) marca una solicitud | Modelo y respuestas | Any file |238| [`switchModelsOnFlag`](#switchmodelsonflag) | Cambia de modelo automáticamente o haz una pausa cuando un [clasificador de seguridad](https://code.claude.com/docs/es/model-config.md#ask-before-switching) marca una solicitud | Modelo y respuestas | Any file |

240| [`syncClaudeAiPlugins`](#syncclaudeaiplugins) | Deja de cargar los [plugins habilitados en tu cuenta de claude.ai](https://code.claude.com/docs/es/plugins/loading.md#synced-plugins) y deja de descargar nuevos | Plugins y skills | User, local, or managed |239| [`syncClaudeAiPlugins`](#syncclaudeaiplugins) | Deja de cargar los [plugins habilitados en tu cuenta de claude.ai](https://code.claude.com/docs/es/plugins/loading.md#synced-plugins) y deja de descargar nuevos | Plugins y skills | User, local, or managed |

241| [`syncClaudeAiSkills`](#syncclaudeaiskills) | Deja de cargar los [skills habilitados en tu cuenta de claude.ai](https://code.claude.com/docs/es/skills.md#how-synced-skills-behave) y deja de descargar nuevos | Plugins y skills | User, local, or managed |240| [`syncClaudeAiSkills`](#syncclaudeaiskills) | Deja de cargar los [skills habilitados en tu cuenta de claude.ai](https://code.claude.com/docs/es/skills.md#how-synced-skills-behave) y deja de descargar nuevos | Plugins y skills | User, local, or managed |


885}884}

886```885```

887 886 

888Consulta [Enrutar todos los comandos de shell a través del clasificador](https://code.claude.com/docs/es/auto-mode-config.md#route-all-shell-commands-through-the-classifier).887Esta clave funciona de forma diferente en una sesión de Code Mode. Consulta [Enrutar todos los comandos de shell a través del clasificador](https://code.claude.com/docs/es/auto-mode-config.md#route-all-shell-commands-through-the-classifier).

889 888 

890### `disableAutoMode`889### `disableAutoMode`

891 890 


1533}1532}

1534```1533```

1535 1534 

1535En Linux y WSL2, una entrada para una ruta que aún no existe no tiene efecto, así que crea la ruta primero.

1536 

1536Claude Code combina las entradas de `allowWrite` y las rutas de tus reglas de permisos allow `Edit(...)` de todos los alcances de configuración que carga la sesión, y deja fuera las de la configuración del repositorio mientras [`permissions.blockReadsOutsideWorkingDirectories`](#sandboxed-commands-under-the-block) está activado. Los [bloqueos de repositorio](https://code.claude.com/docs/es/sandboxing.md#repository-settings-under-an-admin-required-sandbox) también pueden dejar fuera las entradas de un repositorio. Una entrada `allowWrite` no puede levantar una [ruta protegida](https://code.claude.com/docs/es/sandboxing.md#protected-paths).1537Claude Code combina las entradas de `allowWrite` y las rutas de tus reglas de permisos allow `Edit(...)` de todos los alcances de configuración que carga la sesión, y deja fuera las de la configuración del repositorio mientras [`permissions.blockReadsOutsideWorkingDirectories`](#sandboxed-commands-under-the-block) está activado. Los [bloqueos de repositorio](https://code.claude.com/docs/es/sandboxing.md#repository-settings-under-an-admin-required-sandbox) también pueden dejar fuera las entradas de un repositorio. Una entrada `allowWrite` no puede levantar una [ruta protegida](https://code.claude.com/docs/es/sandboxing.md#protected-paths).

1537 1538 

1538### `sandbox.filesystem.denyWrite`1539### `sandbox.filesystem.denyWrite`


2453 2454 

2454#### Cómo interactúan los valores de `env` con su shell2455#### Cómo interactúan los valores de `env` con su shell

2455 2456 

2456* Un valor aquí sobrescribe la misma variable exportada en su shell, y cuando más de un archivo de configuración establece una variable, se aplica la [más alta precedencia](https://code.claude.com/docs/es/settings.md#settings-precedence). [Variables que Claude Code ignora en `env`](#variables-claude-code-ignores-in-env) enumera las excepciones para la configuración del proyecto y local.2457* Un valor aquí sobrescribe la misma variable exportada en tu shell, y cuando más de un archivo de configuración establece una variable, se aplica el de [mayor precedencia](https://code.claude.com/docs/es/settings.md#settings-precedence). [Variables que Claude Code ignora en `env`](#variables-claude-code-ignores-in-env) enumera las excepciones.

2457* Cuando la aplicación Claude Desktop o un [entorno autohospedado](https://code.claude.com/docs/es/self-hosted-environments) inicia la sesión, el entorno de lanzamiento que construye tiene prioridad en su lugar: Claude Code ignora un valor de `env` de cualquier archivo de configuración para una variable que el entorno de lanzamiento ya establece. El [registro de depuración](https://code.claude.com/docs/es/debug-your-config.md) nombra cada variable ignorada.2458* Cuando la aplicación Claude Desktop o un [entorno autohospedado](https://code.claude.com/docs/es/self-hosted-environments) inicia la sesión, el entorno de lanzamiento que construye tiene prioridad en su lugar: Claude Code ignora un valor de `env` de cualquier archivo de configuración para una variable que el entorno de lanzamiento ya establece. El [registro de depuración](https://code.claude.com/docs/es/debug-your-config.md) nombra cada variable ignorada.

2458* Para cancelar una exportación de shell, establezca la variable en `""`. Claude Code trata un valor vacío como sin establecer para la selección de proveedor, y los subprocesos heredan el valor vacío.2459* Para cancelar una exportación de shell, establezca la variable en `""`. Claude Code trata un valor vacío como sin establecer para la selección de proveedor, y los subprocesos heredan el valor vacío.

2459* `NO_COLOR` y `FORCE_COLOR` establecidos aquí llegan solo a los subprocesos. Para cambiar los colores de la interfaz propia de Claude Code, establézcalos en su shell antes de lanzar `claude`.2460* `NO_COLOR` y `FORCE_COLOR` establecidos aquí llegan solo a los subprocesos. Para cambiar los colores de la interfaz propia de Claude Code, establézcalos en su shell antes de lanzar `claude`.


2494 * [`CLAUDE_CODE_DISABLE_FILE_MENTIONS`](https://code.claude.com/docs/es/env-vars#variables), que impide que Claude Code expanda las menciones con `@` de archivos y directorios.2495 * [`CLAUDE_CODE_DISABLE_FILE_MENTIONS`](https://code.claude.com/docs/es/env-vars#variables), que impide que Claude Code expanda las menciones con `@` de archivos y directorios.

2495 2496 

2496 Antes de v2.1.251, la configuración del proyecto y local también podía establecer las variables de esta lista que eligen dónde Claude Code escribe sus archivos o que exportan contenido de la sesión, excepto `HOME` y `XDG_CONFIG_HOME`. Antes de v2.1.290, también podía establecer las variables de temporizador de diálogo y `CLAUDE_CODE_DISABLE_ATTACHMENTS`.2497 Antes de v2.1.251, la configuración del proyecto y local también podía establecer las variables de esta lista que eligen dónde Claude Code escribe sus archivos o que exportan contenido de la sesión, excepto `HOME` y `XDG_CONFIG_HOME`. Antes de v2.1.290, también podía establecer las variables de temporizador de diálogo y `CLAUDE_CODE_DISABLE_ATTACHMENTS`.

2498* Puedes activar [Code Mode](https://code.claude.com/docs/es/code-mode.md) con [`CLAUDE_CODE_EXPERIMENTAL_CODE_MODE`](https://code.claude.com/docs/es/env-vars#variables) desde tu shell, tu configuración de usuario o un archivo `--settings`, y no desde la configuración administrada, del proyecto o local. Con un `0` en cualquiera de los tres primeros o en la configuración administrada, Code Mode permanece desactivado independientemente de lo que establezcas en otro lugar. Cuando la configuración administrada contiene un `1`, establece tu propio `1` en la configuración de usuario, porque un `1` en tu shell se ignora

2497* Variables de identidad que los entornos de alojamiento de Claude Code poseen, como `CLAUDE_CODE_REMOTE` y `CLAUDE_CODE_ACCOUNT_UUID`, se ignoran de cada archivo.2499* Variables de identidad que los entornos de alojamiento de Claude Code poseen, como `CLAUDE_CODE_REMOTE` y `CLAUDE_CODE_ACCOUNT_UUID`, se ignoran de cada archivo.

2498* [`CLAUDE_CODE_MESSAGING_SOCKET` y `CLAUDE_CODE_MESSAGING_TOKEN`](https://code.claude.com/docs/es/env-vars#variables), que Claude Code exporta a sí mismo, se ignoran de cada archivo. Ignorar la variable de socket requiere Claude Code v2.1.224 o posterior, e ignorar el token requiere v2.1.228 o posterior.2500* [`CLAUDE_CODE_MESSAGING_SOCKET` y `CLAUDE_CODE_MESSAGING_TOKEN`](https://code.claude.com/docs/es/env-vars#variables), que Claude Code exporta a sí mismo, se ignoran de cada archivo. Ignorar la variable de socket requiere Claude Code v2.1.224 o posterior, e ignorar el token requiere v2.1.228 o posterior.

2499* [`CLAUDE_CODE_PROJECT_DIR_NAME`](https://code.claude.com/docs/es/sessions#name-the-project-directory-yourself), que Claude Code lee solo del entorno de lanzamiento, se ignora de cada archivo; requiere v2.1.234 o posterior.2501* [`CLAUDE_CODE_PROJECT_DIR_NAME`](https://code.claude.com/docs/es/sessions#name-the-project-directory-yourself), que Claude Code lee solo del entorno de lanzamiento, se ignora de cada archivo; requiere v2.1.234 o posterior.


3173 3175 

3174El ejemplo necesita tener [`jq`](https://jqlang.org/) instalado y se ejecuta en un shell. Para equivalentes en PowerShell y Git Bash, consulta [Configuración en Windows](https://code.claude.com/docs/es/statusline.md#windows-configuration); para la configuración completa, consulta [Configurar manualmente una línea de estado](https://code.claude.com/docs/es/statusline.md#manually-configure-a-status-line).3176El ejemplo necesita tener [`jq`](https://jqlang.org/) instalado y se ejecuta en un shell. Para equivalentes en PowerShell y Git Bash, consulta [Configuración en Windows](https://code.claude.com/docs/es/statusline.md#windows-configuration); para la configuración completa, consulta [Configurar manualmente una línea de estado](https://code.claude.com/docs/es/statusline.md#manually-configure-a-status-line).

3175 3177 

3176### `subagentStatusLine`

3177 

3178Cuando Claude ejecuta [subagentes](https://code.claude.com/docs/es/sub-agents.md), Claude Code los lista en una vista de tareas debajo del prompt, una fila por subagente que muestra `name · description · token count`. Esta clave te permite ejecutar tu propio comando para reescribir esas filas, por ejemplo para mostrar el uso de contexto de cada subagente como porcentaje. En cada actualización, Claude Code envía las filas visibles como un único objeto JSON por stdin, con un array `tasks` que contiene el `id`, `name`, `status`, `model`, `tokenCount` y más datos de cada subagente, y reemplaza la fila de cada `id` que devuelvas como una línea `{"id", "content"}`. Las filas que no devuelvas mantienen el renderizado predeterminado.

3179 

3180* **Alcance**: [`Any file`](#scopes). Cuando [`allowManagedHooksOnly`](#allowmanagedhooksonly) está activado, o [`disableAllHooks`](#disableallhooks) está establecido fuera de la configuración administrada, solo se ejecuta el valor de la configuración administrada.

3181* **Tipo**: objeto con `type` establecido en `"command"` y un string `command`

3182* **Predeterminado**: sin establecer, por lo que Claude Code renderiza las filas predeterminadas

3183 

3184```json settings.json theme={null}

3185{

3186 "subagentStatusLine": {

3187 "type": "command",

3188 "command": "jq -c '.tasks[] | {id, content: \"\\(.name): \\(.tokenCount) tokens\"}'"

3189 }

3190}

3191```

3192 

3193Consulta [Líneas de estado de subagentes](https://code.claude.com/docs/es/statusline.md#subagent-status-lines).

3194 

3195### `syntaxHighlightingDisabled`3178### `syntaxHighlightingDisabled`

3196 3179 

3197Claude Code colorea el código según el lenguaje en los diffs, bloques de código y vistas previas de archivos que muestra en la terminal, con su resaltador integrado. Establece esta clave en `true` para mostrarlos como texto plano en su lugar, por ejemplo si los colores chocan con el tema de tu terminal o ralentizan un lector de pantalla.3180Claude Code colorea el código según el lenguaje en los diffs, bloques de código y vistas previas de archivos que muestra en la terminal, con su resaltador integrado. Establece esta clave en `true` para mostrarlos como texto plano en su lugar, por ejemplo si los colores chocan con el tema de tu terminal o ralentizan un lector de pantalla.


3648* **Todo lo demás está bloqueado**: hooks de usuario, proyecto y locales, hooks y mods de otros plugins instalados, y hooks declarados en frontmatter de agente. [Los mods integrados en Claude Code](https://code.claude.com/docs/es/plugins/mods/overview.md#mods-built-into-claude-code) continúan ejecutándose. Para bloquear solo los mods de los usuarios, establece [`allowManagedModsOnly`](https://code.claude.com/docs/es/plugins/mods/admin#set-options-on-the-built-in-guard) en su lugar.3631* **Todo lo demás está bloqueado**: hooks de usuario, proyecto y locales, hooks y mods de otros plugins instalados, y hooks declarados en frontmatter de agente. [Los mods integrados en Claude Code](https://code.claude.com/docs/es/plugins/mods/overview.md#mods-built-into-claude-code) continúan ejecutándose. Para bloquear solo los mods de los usuarios, establece [`allowManagedModsOnly`](https://code.claude.com/docs/es/plugins/mods/admin#set-options-on-the-built-in-guard) en su lugar.

3649* **Los plugins con origen de comando están deshabilitados**: Claude Code también deshabilita plugins con un [origen `command`](https://code.claude.com/docs/es/plugins/marketplace-reference#command-plugin-source), incluidos plugins forzados a habilitarse en `enabledPlugins` administrado, a menos que establezcas [`disableCommandPluginSources`](#disablecommandpluginsources) explícitamente en `false`3632* **Los plugins con origen de comando están deshabilitados**: Claude Code también deshabilita plugins con un [origen `command`](https://code.claude.com/docs/es/plugins/marketplace-reference#command-plugin-source), incluidos plugins forzados a habilitarse en `enabledPlugins` administrado, a menos que establezcas [`disableCommandPluginSources`](#disablecommandpluginsources) explícitamente en `false`

3650* **Los comandos `headersHelper` del marketplace están bloqueados**: Claude Code también bloquea los comandos [`headersHelper`](https://code.claude.com/docs/es/plugins/host-marketplace#authenticate-archive-downloads) del marketplace a menos que [`disableCommandPluginSources`](#disablecommandpluginsources) esté explícitamente establecido en `false`, excepto para un marketplace que la configuración administrada declara. Requiere Claude Code v2.1.238 o posterior3633* **Los comandos `headersHelper` del marketplace están bloqueados**: Claude Code también bloquea los comandos [`headersHelper`](https://code.claude.com/docs/es/plugins/host-marketplace#authenticate-archive-downloads) del marketplace a menos que [`disableCommandPluginSources`](#disablecommandpluginsources) esté explícitamente establecido en `false`, excepto para un marketplace que la configuración administrada declara. Requiere Claude Code v2.1.238 o posterior

3651* **La línea de estado y la sugerencia de archivo se reducen a configuración administrada**: Claude Code lee [`statusLine`](https://code.claude.com/docs/es/statusline), [`fileSuggestion`](#filesuggestion) y [`subagentStatusLine`](https://code.claude.com/docs/es/statusline#subagent-status-lines) solo de configuración administrada, siguiendo las [puertas de línea de estado y sugerencia de archivo](#status-line-and-file-suggestion-gates)3634* **La línea de estado y la sugerencia de archivo se reducen a configuración administrada**: Claude Code lee [`statusLine`](https://code.claude.com/docs/es/statusline) y [`fileSuggestion`](#filesuggestion) solo de configuración administrada, siguiendo las [puertas de línea de estado y sugerencia de archivo](#status-line-and-file-suggestion-gates)

3652 3635 

3653El comando [`/goal`](https://code.claude.com/docs/es/goal) no puede ejecutarse mientras esta clave está establecida, porque depende de hooks.3636El comando [`/goal`](https://code.claude.com/docs/es/goal) no puede ejecutarse mientras esta clave está establecida, porque depende de hooks.

3654 3637 


3687 3670 

3688#### Puertas de línea de estado y sugerencia de archivo3671#### Puertas de línea de estado y sugerencia de archivo

3689 3672 

3690Claude Code toma dos decisiones para `statusLine`, `fileSuggestion` y `subagentStatusLine`, en este orden:3673Claude Code toma dos decisiones para `statusLine` y `fileSuggestion`, en este orden:

3691 3674 

3692* **Desactivado completamente**: cuando la configuración administrada establece `disableAllHooks`, o cuando la carpeta no es de confianza bajo la misma [regla de confianza del espacio de trabajo que los hooks en archivos de configuración](https://code.claude.com/docs/es/permissions.md#what-runs-before-you-trust-a-folder)3675* **Desactivado completamente**: cuando la configuración administrada establece `disableAllHooks`, o cuando la carpeta no es de confianza bajo la misma [regla de confianza del espacio de trabajo que los hooks en archivos de configuración](https://code.claude.com/docs/es/permissions.md#what-runs-before-you-trust-a-folder)

3693* **Reducido a configuración administrada**: cuando [`allowManagedHooksOnly`](#allowmanagedhooksonly) está establecido, cuando `disableAllHooks` es `true` fuera de la configuración administrada después de que se aplica la [precedencia de configuración](https://code.claude.com/docs/es/hooks.md#disable-or-remove-hooks), o cuando inicias Claude Code con `--safe-mode`3676* **Reducido a configuración administrada**: cuando [`allowManagedHooksOnly`](#allowmanagedhooksonly) está establecido, cuando `disableAllHooks` es `true` fuera de la configuración administrada después de que se aplica la [precedencia de configuración](https://code.claude.com/docs/es/hooks.md#disable-or-remove-hooks), o cuando inicias Claude Code con `--safe-mode`


4659 4642 

4660* **Alcance**: [`Cualquier archivo`](#scopes)4643* **Alcance**: [`Cualquier archivo`](#scopes)

4661* **Tipo**: cadena, el nombre de un agente integrado o personalizado4644* **Tipo**: cadena, el nombre de un agente integrado o personalizado

4662* **Predeterminado**: sin establecer, por lo que el hilo principal se ejecuta como el agente predeterminado de Claude Code4645* **Predeterminado**: sin establecer

4663* **Anulaciones por sesión**: `--agent` tiene prioridad sobre esta clave para una sesión4646* **Anulaciones por sesión**: `--agent` tiene prioridad sobre esta clave para una sesión

4664 4647 

4665```json settings.json theme={null}4648```json settings.json theme={null}


4668}4651}

4669```4652```

4670 4653 

4671El propio `settings.json` de un plugin también puede proporcionar esta clave; consulte [Envíe configuración predeterminada con su plugin](https://code.claude.com/docs/es/plugins/components.md#default-settings).

4672 

4673### `crossSessionInbound`4654### `crossSessionInbound`

4674 4655 

4675Elige qué hace esta sesión con [mensajes que llegan desde tus otras sesiones de Claude Code](https://code.claude.com/docs/es/cross-session-messaging.md#control-inbound-messages). Cuando no se aplica ningún valor, Claude Code decide por mensaje según las clases de modo de permisos de las dos sesiones.4656Elige qué hace esta sesión con [mensajes que llegan desde tus otras sesiones de Claude Code](https://code.claude.com/docs/es/cross-session-messaging.md#control-inbound-messages). Cuando no se aplica ningún valor, Claude Code decide por mensaje según las clases de modo de permisos de las dos sesiones.


5207 5188 

5208* **Alcance**: [`Managed`](#scopes). Una lista que establecen las propias fuentes de administración de la máquina, las políticas de MDM y los archivos de configuración administrada, se sigue aplicando cuando la configuración administrada por servidor también entrega una: en ese caso, una sesión solo puede usar los proveedores que están en ambas listas, de modo que una lista administrada por servidor puede restringir lo que la máquina permite, pero nunca ampliarlo. Qué `allowedProviders` de las fuentes de la máquina cuenta sigue [cómo Claude Code combina las fuentes administradas](https://code.claude.com/docs/es/managed-settings.md#how-claude-code-combines-managed-sources). Una lista entregada solo mediante la configuración administrada por servidor llega únicamente a las sesiones que [obtienen la configuración administrada por servidor](https://code.claude.com/docs/es/server-managed-settings.md#platform-availability).5189* **Alcance**: [`Managed`](#scopes). Una lista que establecen las propias fuentes de administración de la máquina, las políticas de MDM y los archivos de configuración administrada, se sigue aplicando cuando la configuración administrada por servidor también entrega una: en ese caso, una sesión solo puede usar los proveedores que están en ambas listas, de modo que una lista administrada por servidor puede restringir lo que la máquina permite, pero nunca ampliarlo. Qué `allowedProviders` de las fuentes de la máquina cuenta sigue [cómo Claude Code combina las fuentes administradas](https://code.claude.com/docs/es/managed-settings.md#how-claude-code-combines-managed-sources). Una lista entregada solo mediante la configuración administrada por servidor llega únicamente a las sesiones que [obtienen la configuración administrada por servidor](https://code.claude.com/docs/es/server-managed-settings.md#platform-availability).

5209* **Tipo**: array de cadenas, cada una de las siguientes:5190* **Tipo**: array de cadenas, cada una de las siguientes:

5210 * `"anthropic"`: la API de Anthropic en el propio host de Anthropic, mediante un inicio de sesión en claude.ai o Console o una clave de API. Combínalo con [`forceLoginMethod`](#forceloginmethod) o [`forceLoginOrgUUID`](#forceloginorguuid) para restringir también el inicio de sesión5191 * `"anthropic"`: la API de Anthropic en el propio host de Anthropic, mediante un inicio de sesión en claude.ai o Console o una clave de API. Combínalo con [`forceLoginMethod`](#forceloginmethod) o [`forceLoginOrgUUID`](#forceloginorguuid) para restringir también el inicio de sesión. Cowork de Desktop [en la máquina del usuario](https://code.claude.com/docs/es/managed-settings.md#where-and-when-a-policy-applies) cuenta como `"anthropic"` cuando ha iniciado sesión en claude.ai, por lo que, si `"anthropic"` no está en la lista de la máquina, Cowork [se rechaza al iniciar](https://code.claude.com/docs/es/errors.md#managed-settings-dont-allow-this-api-provider). Para permitir que Cowork se inicie, agrégalo, lo que también abre esta lista a las sesiones directas de Anthropic.

5211 * `"bedrock"`: [Amazon Bedrock](https://code.claude.com/docs/es/amazon-bedrock.md)5192 * `"bedrock"`: [Amazon Bedrock](https://code.claude.com/docs/es/amazon-bedrock.md)

5212 * `"vertex"`: [Agent Platform de Google Cloud](https://code.claude.com/docs/es/google-vertex-ai.md), antes Vertex AI5193 * `"vertex"`: [Agent Platform de Google Cloud](https://code.claude.com/docs/es/google-vertex-ai.md), antes Vertex AI

5213 * `"foundry"`: [Microsoft Foundry](https://code.claude.com/docs/es/microsoft-foundry.md)5194 * `"foundry"`: [Microsoft Foundry](https://code.claude.com/docs/es/microsoft-foundry.md)

setup.md +5 −23

Details

141 141 

142### Alpine Linux y distribuciones basadas en musl142### Alpine Linux y distribuciones basadas en musl

143 143 

144Instalar Claude Code en Alpine y otras distribuciones basadas en musl/uClibc requiere `bash` y `curl` para el comando de instalación, y `libgcc`, `libstdc++` y `ripgrep` en tiempo de ejecución. Alpine no incluye `bash` o `curl` de forma predeterminada, por lo que el comando de instalación documentado falla con un error `not found` hasta que los instale. Instale estos paquetes usando el gestor de paquetes de su distribución, luego establezca `USE_BUILTIN_RIPGREP=0`.144En Alpine y otras distribuciones basadas en musl, el [comando de instalación](#install-claude-code) requiere `bash` y `curl`, y Claude Code en sí requiere `bash` o `zsh`. Alpine no incluye `bash` ni `curl` de forma predeterminada, por lo que el comando de instalación documentado falla con un error `not found` hasta que los instales.

145 145 

146Este ejemplo instala los paquetes requeridos en Alpine:146Este ejemplo instala los paquetes requeridos en Alpine:

147 147 

148```bash theme={null}148```bash theme={null}

149apk add bash curl libgcc libstdc++ ripgrep149apk add bash curl

150```

151 

152En Alpine, `ripgrep` está en el repositorio de comunidad. Si `apk` informa que falta el paquete, agregue el repositorio de comunidad a `/etc/apk/repositories`, usando su versión de Alpine:

153 

154```bash theme={null}

155echo "https://dl-cdn.alpinelinux.org/alpine/v3.22/community" >> /etc/apk/repositories

156```

157 

158Ejecute `apk update` para actualizar el índice de paquetes e intente nuevamente el comando `apk add`.

159 

160Luego establezca `USE_BUILTIN_RIPGREP` en `0` en su archivo [`settings.json`](https://code.claude.com/docs/es/settings-reference#all-settings):

161 

162```json theme={null}

163{

164 "env": {

165 "USE_BUILTIN_RIPGREP": "0"

166 }

167}

168```150```

169 151 

170## Verificar su instalación152## Verificar su instalación


443> wget -O /etc/apk/keys/claude-code.rsa.pub \425> wget -O /etc/apk/keys/claude-code.rsa.pub \

444> https://downloads.claude.ai/keys/claude-code.rsa.pub426> https://downloads.claude.ai/keys/claude-code.rsa.pub

445> echo "https://downloads.claude.ai/claude-code/apk/stable" >> /etc/apk/repositories427> echo "https://downloads.claude.ai/claude-code/apk/stable" >> /etc/apk/repositories

446> apk add claude-code428> apk add bash claude-code

447> ```429> ```

448>430>

449> Para cambiar al canal `latest`, elimine la línea del repositorio `stable` y agregue el repositorio `latest`:431> Para cambiar al canal `latest`, elimine la línea del repositorio `stable` y agregue el repositorio `latest`:


463>445>

464> Si `npm --version` imprime una versión que empieza por `12` en tu shell, sigue [Corregir una instalación con npm 12](https://code.claude.com/docs/es/troubleshoot-install.md#fix-an-npm-12-install) en su lugar. No instales con `sudo`. Claude Code ejecuta npm sin `sudo` cuando se actualiza a sí mismo, así que una instalación que necesita `sudo` no puede actualizarse automáticamente.446> Si `npm --version` imprime una versión que empieza por `12` en tu shell, sigue [Corregir una instalación con npm 12](https://code.claude.com/docs/es/troubleshoot-install.md#fix-an-npm-12-install) en su lugar. No instales con `sudo`. Claude Code ejecuta npm sin `sudo` cuando se actualiza a sí mismo, así que una instalación que necesita `sudo` no puede actualizarse automáticamente.

465 447 

466También puedes instalar Claude Code como un paquete npm global. El paquete npm requiere [Node.js 22 o posterior](https://nodejs.org/en/download). En una versión anterior de Node.js, npm imprime una advertencia `EBADENGINE` durante la instalación en lugar de fallar; la instalación se completa y `claude` aún se ejecuta, ya que el paquete descarga un binario nativo que no utiliza tu Node.js en tiempo de ejecución.448También puedes instalar Claude Code como un paquete npm global. El paquete npm requiere [Node.js 22 o posterior](https://nodejs.org/en/download). En una versión anterior de Node.js, npm de forma predeterminada imprime una advertencia `EBADENGINE` y completa la instalación en lugar de fallar. El `claude` instalado aún se ejecuta, ya que el paquete descarga un binario nativo que no utiliza tu Node.js en tiempo de ejecución.

467 449 

468```bash theme={null}450```bash theme={null}

469npm install -g @anthropic-ai/claude-code451npm install -g @anthropic-ai/claude-code@latest

470```452```

471 453 

472El 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.454El 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.

skills.md +5 −1

Details

787 787 

788Los comandos inyectados nunca solicitan permiso mientras se renderiza la skill. Claude Code verifica cada uno contra sus [reglas de permisos](https://code.claude.com/docs/es/permissions.md) primero. Un comando que una regla de denegación coincide aborta la invocación con `Shell command permission check failed for pattern "..."`.788Los comandos inyectados nunca solicitan permiso mientras se renderiza la skill. Claude Code verifica cada uno contra sus [reglas de permisos](https://code.claude.com/docs/es/permissions.md) primero. Un comando que una regla de denegación coincide aborta la invocación con `Shell command permission check failed for pattern "..."`.

789 789 

790Fuera del [modo automático](https://code.claude.com/docs/es/permission-modes.md#eliminate-prompts-with-auto-mode), cuando la verificación de permisos de un comando devuelve algo distinto de permitir, Claude Code aborta la invocación con el mismo error. Esto incluye una regla que normalmente te pediría confirmación. Para evitar que un comando sin coincidencia aborte aquí, apruébalo previamente con [`allowed-tools`](#pre-approve-tools-for-a-skill). Si tu organización restringe las reglas de permisos a la configuración administrada, consulta [Cuando solo se aplican reglas de permisos administradas](#when-only-managed-permission-rules-apply). Las reglas de denegación y de solicitud siguen teniendo prioridad sobre `allowed-tools`. Consulta [Administrar permisos](https://code.claude.com/docs/es/permissions.md#manage-permissions).790Fuera del [modo automático](https://code.claude.com/docs/es/permission-modes.md#eliminate-prompts-with-auto-mode), cuando la verificación de permisos de un comando devuelve algo distinto de permitir, Claude Code aborta la invocación. Para evitar que un comando sin coincidencia aborte la invocación, apruébalo previamente con [`allowed-tools`](#pre-approve-tools-for-a-skill), dentro de estos límites:

791 

792* **Reglas de denegación y de solicitud**: un comando que coincide con alguna de ellas sigue abortando la invocación. Para encontrar la regla, consulta [Administrar permisos](https://code.claude.com/docs/es/permissions.md#manage-permissions).

793* **Reglas solo administradas**: si `/status` en la sesión enumera el skill bajo `allowed-tools ignored this session`, consulta [Cuando solo se aplican reglas de permisos administradas](#when-only-managed-permission-rules-apply).

794* **Carpetas de Git no verificadas**: donde un archivo `HEAD` o `.git` podría no ser tuyo, Claude Code ignora `allowed-tools` para un comando de Bash que contiene `git` o que Claude Code no puede analizar. Si confías en la carpeta, por ejemplo el worktree de tu propio repositorio bare, permite el comando con [`/permissions`](https://code.claude.com/docs/es/permissions#manage-permissions) en la sesión.

791 795 

792En modo automático, un comando que de otro modo necesitaría su aprobación no aborta la invocación. La skill se carga con una instrucción que le dice a Claude que ejecute el comando primero, y la llamada propia de Claude luego pasa por las [verificaciones habituales del modo automático](https://code.claude.com/docs/es/permission-modes.md#how-the-classifier-evaluates-actions). La invocación aún aborta en una [skill bifurcada](#run-skills-in-a-subagent) que establece `agent`, y en una sesión donde Claude no tiene la [herramienta de shell que ejecuta comandos inyectados](#how-injected-commands-run).796En modo automático, un comando que de otro modo necesitaría su aprobación no aborta la invocación. La skill se carga con una instrucción que le dice a Claude que ejecute el comando primero, y la llamada propia de Claude luego pasa por las [verificaciones habituales del modo automático](https://code.claude.com/docs/es/permission-modes.md#how-the-classifier-evaluates-actions). La invocación aún aborta en una [skill bifurcada](#run-skills-in-a-subagent) que establece `agent`, y en una sesión donde Claude no tiene la [herramienta de shell que ejecuta comandos inyectados](#how-injected-commands-run).

793 797 

statusline.md +0 −40

Details

1085echo "$dirname [$model]"1085echo "$dirname [$model]"

1086```1086```

1087 1087 

1088## Líneas de estado de subagentes

1089 

1090La configuración `subagentStatusLine` renderiza un cuerpo de fila personalizado para cada [subagente](https://code.claude.com/docs/es/sub-agents.md) mostrado en el panel de agentes debajo del prompt. Úsalo para reemplazar la fila predeterminada `name · description · token count` con tu propio formato.

1091 

1092```json theme={null}

1093{

1094 "subagentStatusLine": {

1095 "type": "command",

1096 "command": "~/.claude/subagent-statusline.sh"

1097 }

1098}

1099```

1100 

1101El comando se ejecuta una vez por tick de actualización y recibe todas las filas de subagentes visibles como un único objeto JSON en stdin. La entrada incluye los [campos de hook base](https://code.claude.com/docs/es/hooks.md#common-input-fields), un campo `columns` con el ancho de fila utilizable y un array `tasks` con una entrada por fila, descrito en [Campos de tarea](#task-fields).

1102 

1103Escribe 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.

1104 

1105Las mismas puertas de confianza, `disableAllHooks`, y [`allowManagedHooksOnly`](https://code.claude.com/docs/es/settings-reference#allowmanagedhooksonly) que se aplican a `statusLine` se aplican aquí. Los plugins pueden enviar una `subagentStatusLine` predeterminada en su [`settings.json`](https://code.claude.com/docs/es/plugins/manifest-reference#standard-layout), pero a diferencia de los hooks, los valores de plugins no se ejecutan bajo `allowManagedHooksOnly` incluso cuando el plugin está forzadamente habilitado en la configuración gestionada `enabledPlugins`.

1106 

1107### Campos de tarea

1108 

1109Cada entrada del array `tasks` describe una fila de subagente con los campos siguientes. Los campos marcados como opcionales se omiten cuando no tienen valor, así que contempla su ausencia en tu script.

1110 

1111| Campo | Tipo | Descripción |

1112| :- | :- | :- |

1113| `id` | string | Identificador de la tarea. Devuélvelo como `id` en la línea que escribas para esta fila |

1114| `name` | string, opcional | Nombre con el que [se dirige](https://code.claude.com/docs/es/sub-agents.md#subagent-names) al subagente, cuando tiene uno |

1115| `type` | string | Tipo de tarea: `local_agent` |

1116| `agentType` | string | Tipo de subagente con el que se ejecuta la tarea, como el integrado [`Explore`](https://code.claude.com/docs/es/sub-agents#built-in-subagents) o uno personalizado `code-reviewer`. Contiene el mismo valor que los hooks reciben como [`agent_type`](https://code.claude.com/docs/es/hooks#subagentstart). Requiere Claude Code v2.1.293 o posterior |

1117| `status` | string | Estado de la tarea, como `running`, `completed`, `failed` o `killed` |

1118| `description` | string | Descripción breve de la tarea, como la que Claude dio al generar el subagente |

1119| `label` | string | Resumen breve del progreso de la tarea cuando Claude Code tiene uno; de lo contrario, el mismo texto que `description` |

1120| `startTime` | number | Momento en que comenzó la tarea, en milisegundos desde la época Unix |

1121| `model` | string, opcional | ID del modelo resuelto en el que se ejecuta la tarea. Se omite hasta que el modelo se resuelve |

1122| `effort` | string o number, opcional | Esfuerzo de razonamiento establecido para el subagente en su [frontmatter de definición](https://code.claude.com/docs/es/sub-agents.md#supported-frontmatter-fields) o en la invocación individual: `low`, `medium`, `high`, `xhigh`, `max` o un presupuesto de tokens numérico. Es el valor configurado, y el esfuerzo que Claude Code aplica puede diferir cuando el modelo no admite ese nivel. Se omite cuando no se establece ningún esfuerzo |

1123| `contextWindowSize` | number, opcional | Ventana de contexto de `model` en tokens, calculada de la misma manera que [`context_window.context_window_size`](#context-window-fields) de la línea de estado principal, por lo que puedes renderizar un porcentaje por fila desde `tokenCount`. Se omite cuando se omite `model` |

1124| `tokenCount` | number | Recuento acumulado de tokens del subagente, la cifra que muestra la fila predeterminada |

1125| `tokenSamples` | array de numbers | Hasta las últimas 16 lecturas de `tokenCount`, una por tick de actualización, de la más antigua a la más reciente y terminando con la actual |

1126| `cwd` | string | Directorio de trabajo del subagente: su propio directorio cuando se ejecuta en uno, como un worktree aislado; de lo contrario, el directorio de trabajo de la sesión |

1127 

1128## Consejos1088## Consejos

1129 1089 

1130* **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`1090* **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`

Details

26 26 

27| Terminal | Shift+Enter para nueva línea |27| Terminal | Shift+Enter para nueva línea |

28| :- | :- |28| :- | :- |

29| Ghostty, Kitty, iTerm2, WezTerm, Warp, Apple Terminal, Windows Terminal | Funciona sin configuración |29| Ghostty, Kitty, iTerm2, WezTerm, Warp, Windows Terminal | Funciona sin configuración |

30| Otras terminales compatibles con el protocolo de teclado de kitty, como foot y Alacritty 0.16 o posterior | Funciona sin configuración. Requiere Claude Code v2.1.269 o posterior |30| Otras terminales compatibles con el protocolo de teclado de kitty, como foot y Alacritty 0.16 o posterior | Funciona sin configuración. Requiere Claude Code v2.1.269 o posterior |

31| VS Code, Cursor, Devin Desktop, Alacritty anterior a 0.16, Zed | Ejecuta `/terminal-setup` una vez |31| VS Code, Cursor, Devin Desktop, Alacritty anterior a 0.16, Zed | Ejecuta `/terminal-setup` una vez |

32| gnome-terminal, IDE de JetBrains como PyCharm y Android Studio | No disponible; usa Ctrl+J o `\` y luego Enter |32| gnome-terminal, IDE de JetBrains como PyCharm y Android Studio | No disponible; usa Ctrl+J o `\` y luego Enter |

Details

173 173 

174Para limitar cuáles de estas opciones de implementación puede usar una máquina administrada, establezca [`allowedProviders`](https://code.claude.com/docs/es/settings-reference#allowedproviders) en la configuración administrada. Por ejemplo, `["bedrock"]` permite Amazon Bedrock y nada más; una flota de Bedrock que también habilita el punto final de Mantle enumera `"mantle"` también. La entrada indica qué variables de punto final también necesitan un pin de `env` administrado. Requiere Claude Code v2.1.285 o posterior.174Para limitar cuáles de estas opciones de implementación puede usar una máquina administrada, establezca [`allowedProviders`](https://code.claude.com/docs/es/settings-reference#allowedproviders) en la configuración administrada. Por ejemplo, `["bedrock"]` permite Amazon Bedrock y nada más; una flota de Bedrock que también habilita el punto final de Mantle enumera `"mantle"` también. La entrada indica qué variables de punto final también necesitan un pin de `env` administrado. Requiere Claude Code v2.1.285 o posterior.

175 175 

176> [!NOTE]

177>

178> Con Desktop con sesión iniciada en claude.ai, una sesión de Cowork en la máquina del usuario cuenta como [`"anthropic"`](https://code.claude.com/docs/es/settings-reference#allowedproviders). Si lo omites de esta lista en una política de MDM o en un archivo de configuración administrada, esa sesión se rechaza. Si lo incluyes, las sesiones enviadas directamente a Anthropic también pasan esta lista.

179 

176### Usar MCP para integraciones180### Usar MCP para integraciones

177 181 

178MCP 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. Haz que un equipo central configure servidores MCP y agregue una configuración `.mcp.json` a la base de código para que todos los usuarios se beneficien. [Más información](https://code.claude.com/docs/es/mcp.md).182MCP 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. Haz que un equipo central configure servidores MCP y agregue una configuración `.mcp.json` a la base de código para que todos los usuarios se beneficien. [Más información](https://code.claude.com/docs/es/mcp.md).

Details

127 127 

128Claude utiliza `AskUserQuestion` para hacerte preguntas de opción múltiple cuando necesita una decisión o una aclaración. Responde seleccionando una opción, o escribe tu propio texto a través de la fila `Other` o el campo de notas.128Claude utiliza `AskUserQuestion` para hacerte preguntas de opción múltiple cuando necesita una decisión o una aclaración. Responde seleccionando una opción, o escribe tu propio texto a través de la fila `Other` o el campo de notas.

129 129 

130Cuando respondes escribiendo tu propio texto, Claude Code retransmite la respuesta con una redacción neutral para que Claude siga lo que escribiste, incluida una solicitud para esperar o explicar primero.

131 

132### Tiempo de espera de continuación automática de preguntas130### Tiempo de espera de continuación automática de preguntas

133 131 

134Las preguntas permanecen abiertas hasta que las respondas. Si quieres que una pregunta que dejas sin responder se cierre eventualmente y permita que Claude continúe sin ti, establece el ajuste [`askUserQuestionTimeout`](https://code.claude.com/docs/es/settings-reference#askuserquestiontimeout) en `60s`, `5m` o `10m`, ya sea en tu `settings.json` de usuario o desde la fila **Question auto-continue timeout** en `/config`.132Las preguntas permanecen abiertas hasta que las respondas. Si quieres que una pregunta que dejas sin responder se cierre eventualmente y permita que Claude continúe sin ti, establece el ajuste [`askUserQuestionTimeout`](https://code.claude.com/docs/es/settings-reference#askuserquestiontimeout) en `60s`, `5m` o `10m`, ya sea en tu `settings.json` de usuario o desde la fila **Question auto-continue timeout** en `/config`.


525 523 

526## Comportamiento de la herramienta Read524## Comportamiento de la herramienta Read

527 525 

528La herramienta Read toma una ruta de archivo y devuelve el contenido con números de línea. Claude recibe instrucciones para pasar siempre rutas absolutas.526La herramienta Read toma una ruta de archivo y devuelve el contenido con números de línea.

529 527 

530Leer un archivo vacío devuelve un aviso de que el archivo existe pero su contenido está vacío, y un `offset` más allá de la última línea devuelve un aviso que proporciona el recuento de líneas del archivo.528Leer un archivo vacío devuelve un aviso de que el archivo existe pero su contenido está vacío, y un `offset` más allá de la última línea devuelve un aviso que proporciona el recuento de líneas del archivo.

531 529 

Details

388> Get-Command claude | Select-Object Source388> Get-Command claude | Select-Object Source

389> ```389> ```

390 390 

391En Linux, verifica si faltan bibliotecas compartidas. Si `ldd` muestra bibliotecas faltantes, es posible que debas instalar paquetes del sistema. En Alpine Linux y otras distribuciones basadas en musl, consulta [Configuración de Alpine Linux](https://code.claude.com/docs/es/setup.md#alpine-linux-and-musl-based-distributions).391En Linux, verifica si faltan bibliotecas compartidas. Si `ldd` muestra bibliotecas faltantes, es posible que debas instalar paquetes del sistema. En Alpine Linux y otras distribuciones basadas en musl, consulta [Discrepancia de binario musl o glibc en Linux](#linux-musl-or-glibc-binary-mismatch).

392 392 

393```bash theme={null}393```bash theme={null}

394ldd "$(command -v claude)" | grep "not found"394ldd "$(command -v claude)" | grep "not found"


906 906 

907### Discrepancia de binario musl o glibc en Linux907### Discrepancia de binario musl o glibc en Linux

908 908 

909Si ves errores sobre bibliotecas compartidas faltantes como `libstdc++.so.6` o `libgcc_s.so.1` después de la instalación, es posible que el instalador haya descargado la variante de binario incorrecta para tu sistema.909Si ves errores sobre bibliotecas compartidas faltantes como `ld-linux-x86-64.so.2` o `ld-linux-aarch64.so.1` después de la instalación, es posible que el instalador haya descargado la variante de binario incorrecta para tu sistema.

910 910 

911```text theme={null}911```text theme={null}

912Error loading shared library libstdc++.so.6: No such file or directory912Error loading shared library ld-linux-x86-64.so.2: No such file or directory

913```913```

914 914 

915Esto puede ocurrir en sistemas basados en glibc que tienen instalados paquetes de compilación cruzada de musl, lo que hace que el instalador detecte incorrectamente el sistema como musl.

916 

917**Soluciones:**915**Soluciones:**

918 916 

9191. **Verifica qué libc usa tu sistema**:9171. **Verifica qué libc usa tu sistema**:


924 922 

9252. **Si estás en glibc pero obtuviste el binario musl**, elimina la instalación y reinstala. También puedes descargar manualmente el binario correcto usando el manifiesto en `https://downloads.claude.ai/claude-code-releases/{VERSION}/manifest.json`. Abre un [issue en GitHub](https://github.com/anthropics/claude-code/issues) con la salida de `ldd --version` y `ls /lib/libc.musl*`.9232. **Si estás en glibc pero obtuviste el binario musl**, elimina la instalación y reinstala. También puedes descargar manualmente el binario correcto usando el manifiesto en `https://downloads.claude.ai/claude-code-releases/{VERSION}/manifest.json`. Abre un [issue en GitHub](https://github.com/anthropics/claude-code/issues) con la salida de `ldd --version` y `ls /lib/libc.musl*`.

926 924 

9273. **Si realmente estás en musl**, como Alpine Linux, instala los paquetes requeridos:9253. **Si estás en musl pero obtuviste el binario glibc**, [elimina la instalación](https://code.claude.com/docs/es/setup.md#uninstall-claude-code). En Alpine Linux, primero instala los paquetes que indica [Configuración de Alpine Linux](https://code.claude.com/docs/es/setup.md#alpine-linux-and-musl-based-distributions). Luego ejecuta el [comando de instalación](https://code.claude.com/docs/es/setup.md#install-claude-code), que instala el binario musl.

928 ```bash theme={null}

929 apk add libgcc libstdc++ ripgrep

930 ```

931 En Alpine, `ripgrep` está en el repositorio community. Si `apk` reporta que falta el paquete, consulta [Configuración de Alpine Linux](https://code.claude.com/docs/es/setup.md#alpine-linux-and-musl-based-distributions).

932 926 

933### `Illegal instruction`927### `Illegal instruction`

934 928 


1001 995 

1002Estos problemas aplican si instalaste Claude Code con `npm install -g` dentro de WSL. Si usaste el [instalador nativo](https://code.claude.com/docs/es/setup.md), omite esta sección. En npm 12, instala como se describe en [Corregir una instalación con npm 12](#fix-an-npm-12-install).996Estos problemas aplican si instalaste Claude Code con `npm install -g` dentro de WSL. Si usaste el [instalador nativo](https://code.claude.com/docs/es/setup.md), omite esta sección. En npm 12, instala como se describe en [Corregir una instalación con npm 12](#fix-an-npm-12-install).

1003 997 

1004**Problemas de detección de SO o plataforma.** Si npm reporta una discrepancia de plataforma durante la instalación, probablemente WSL está tomando el `npm` de Windows. Ejecuta primero `npm config set os linux` y luego instala con `npm install -g @anthropic-ai/claude-code --force`. No uses `sudo`.998**Problemas de detección de SO o plataforma.** Si npm reporta una discrepancia de plataforma durante la instalación, ejecuta primero `npm config set os linux` y luego instala con `npm install -g @anthropic-ai/claude-code@latest --force`. No uses `sudo`.

1005 999 

1006**`exec: node: not found` al ejecutar `claude`.** Probablemente tu entorno WSL está usando la instalación de Node.js de Windows. Confírmalo 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 corregirlo, instala Node a través del administrador de paquetes de tu distribución de Linux o a través de [`nvm`](https://github.com/nvm-sh/nvm).1000**`exec: node: not found` al ejecutar `claude`.** Probablemente tu entorno WSL está usando la instalación de Node.js de Windows. Confírmalo 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 corregirlo, instala Node a través del administrador de paquetes de tu distribución de Linux o a través de [`nvm`](https://github.com/nvm-sh/nvm).

1007 1001 


1088 3. Reinstala:1082 3. Reinstala:

1089 1083 

1090 ```bash theme={null}1084 ```bash theme={null}

1091 npm install -g @anthropic-ai/claude-code1085 npm install -g @anthropic-ai/claude-code@latest

1092 ```1086 ```

1093 1087 

1094 Si este comando o el paso 1 fallan con `EACCES`, cambia al instalador nativo en lugar de volver a ejecutarlo con `sudo`. Claude Code ejecuta npm sin `sudo` cuando se actualiza a sí mismo, por lo que las actualizaciones automáticas fallarían de la misma manera.1088 Si este comando o el paso 1 fallan con `EACCES`, cambia al instalador nativo en lugar de volver a ejecutarlo con `sudo`. Claude Code ejecuta npm sin `sudo` cuando se actualiza a sí mismo, por lo que las actualizaciones automáticas fallarían de la misma manera.


1099 1093 

1100### Error `ENOTEMPTY` de npm durante una actualización o reinstalación1094### Error `ENOTEMPTY` de npm durante una actualización o reinstalación

1101 1095 

1102Cuando ejecutas `npm install -g @anthropic-ai/claude-code` sobre una instalación existente, npm puede fallar al mover a un lado el directorio del paquete antiguo:1096Cuando ejecutas `npm install -g @anthropic-ai/claude-code@latest` sobre una instalación existente, npm puede fallar al mover a un lado el directorio del paquete antiguo:

1103 1097 

1104```text theme={null}1098```text theme={null}

1105npm error code ENOTEMPTY1099npm error code ENOTEMPTY


1133Luego reinstala. En npm 12, sigue [Corregir una instalación con npm 12](#fix-an-npm-12-install). De lo contrario, ejecuta:1127Luego reinstala. En npm 12, sigue [Corregir una instalación con npm 12](#fix-an-npm-12-install). De lo contrario, ejecuta:

1134 1128 

1135```bash theme={null}1129```bash theme={null}

1136npm install -g @anthropic-ai/claude-code1130npm install -g @anthropic-ai/claude-code@latest

1137```1131```

1138 1132 

1139Confirma con `claude --version`, que imprime un número de versión como `2.1.211 (Claude Code)`.1133Confirma con `claude --version`, que imprime un número de versión como `2.1.211 (Claude Code)`.

Details

152> apk add ripgrep152> apk add ripgrep

153> ```153> ```

154>154>

155> `ripgrep` está en el repositorio de comunidad de Alpine. Si `apk` informa que el paquete falta, consulte [Configuración de Alpine Linux](https://code.claude.com/docs/es/setup.md#alpine-linux-and-musl-based-distributions).155> `ripgrep` está en el repositorio de comunidad de Alpine.

156 156 

157> [tab] Arch157> [tab] Arch

158>158>

vs-code.md +10 −0

Details

202 Los bloques de pensamiento que ya tienes siguen vacíos. En las respuestas posteriores a la recarga, haz clic en un bloque o presiona `Ctrl+O` para expandirlos todos.202 Los bloques de pensamiento que ya tienes siguen vacíos. En las respuestas posteriores a la recarga, haz clic en un bloque o presiona `Ctrl+O` para expandirlos todos.

203* **Entrada de varias líneas**: presiona `Shift+Enter` para agregar una nueva línea sin enviar. Esto también funciona en la entrada de texto libre "Other" de los cuadros de diálogo de preguntas.203* **Entrada de varias líneas**: presiona `Shift+Enter` para agregar una nueva línea sin enviar. Esto también funciona en la entrada de texto libre "Other" de los cuadros de diálogo de preguntas.

204 204 

205### Usar o desactivar los prompts sugeridos

206 

207Después de que Claude responde, el panel puede mostrar un prompt sugerido para el siguiente paso como texto gris en cursiva en el cuadro de prompt vacío. Cada sugerencia usa una [solicitud breve en segundo plano](https://code.claude.com/docs/es/interactive-mode.md#prompt-suggestions) que cuenta para los límites de uso de tu plan o para los costos de la API.

208 

209* **Usar la sugerencia**: presiona `Tab` para convertirla en texto editable y luego envíala. Presionar `Enter` antes de aceptarla no envía la sugerencia.

210* **Escribir tu propio prompt**: empieza a escribir, lo que oculta la sugerencia.

211 

212Para desactivar las sugerencias, establece [`promptSuggestionEnabled`](https://code.claude.com/docs/es/settings-reference#promptsuggestionenabled) en `false` en `~/.claude/settings.json`. Dejas de verlas en las conversaciones nuevas, o en las abiertas después de ejecutar **Developer: Reload Window** desde la paleta de comandos. Si estableciste [`CLAUDE_CODE_ENABLE_PROMPT_SUGGESTION`](https://code.claude.com/docs/es/env-vars) en `true`, cámbiala a `false` donde la estableciste; de lo contrario, seguirás viendo sugerencias.

213 

205### Hacer referencia a archivos y carpetas214### Hacer referencia a archivos y carpetas

206 215 

207Usa menciones con @ para darle a Claude contexto sobre archivos o carpetas específicos. Cuando escribes `@` seguido del nombre de un archivo o carpeta, Claude lee ese contenido y puede responder preguntas sobre él o hacerle cambios. Claude Code admite coincidencia aproximada, así que puedes escribir nombres parciales para encontrar lo que necesitas:216Usa menciones con @ para darle a Claude contexto sobre archivos o carpetas específicos. Cuando escribes `@` seguido del nombre de un archivo o carpeta, Claude lee ese contenido y puede responder preguntas sobre él o hacerle cambios. Claude Code admite coincidencia aproximada, así que puedes escribir nombres parciales para encontrar lo que necesitas:


936| `SSL certificate verification failed` o `Self-signed certificate detected` | [Errores de certificado SSL](https://code.claude.com/docs/es/errors.md#ssl-certificate-errors) |945| `SSL certificate verification failed` o `Self-signed certificate detected` | [Errores de certificado SSL](https://code.claude.com/docs/es/errors.md#ssl-certificate-errors) |

937| `Dictation error: WebSocket error:` seguido de un error de certificado como `unable to get local issuer certificate`, o `Remote server is not connected` en la pestaña Web | [El dictado o la pestaña Web fallan detrás de un proxy con inspección TLS](#dictation-or-the-web-tab-fails-behind-a-tls-inspecting-proxy) |946| `Dictation error: WebSocket error:` seguido de un error de certificado como `unable to get local issuer certificate`, o `Remote server is not connected` en la pestaña Web | [El dictado o la pestaña Web fallan detrás de un proxy con inspección TLS](#dictation-or-the-web-tab-fails-behind-a-tls-inspecting-proxy) |

938| `Claude Code process exited with code 1`, u otro código | [Claude Code process exited with code N](https://code.claude.com/docs/es/errors.md#claude-code-process-exited-with-code-n) |947| `Claude Code process exited with code 1`, u otro código | [Claude Code process exited with code N](https://code.claude.com/docs/es/errors.md#claude-code-process-exited-with-code-n) |

948| `Claude Code did not finish starting` o `Subprocess initialization did not complete within 60000ms` | [Subprocess initialization did not complete within 60000ms](https://code.claude.com/docs/es/errors.md#subprocess-initialization-did-not-complete-within-60000ms) |

939| `Could not locate the Claude CLI on PATH` | [Could not locate the Claude CLI on PATH](https://code.claude.com/docs/es/errors.md#could-not-locate-the-claude-cli-on-path) |949| `Could not locate the Claude CLI on PATH` | [Could not locate the Claude CLI on PATH](https://code.claude.com/docs/es/errors.md#could-not-locate-the-claude-cli-on-path) |

940| `The connection to Claude Code ended before this message completed` | [The connection to Claude Code ended before this message completed](https://code.claude.com/docs/es/errors.md#the-connection-to-claude-code-ended-before-this-message-completed) |950| `The connection to Claude Code ended before this message completed` | [The connection to Claude Code ended before this message completed](https://code.claude.com/docs/es/errors.md#the-connection-to-claude-code-ended-before-this-message-completed) |

941| `The Claude Code program for this computer, the <build> build, could not be found` | [The Claude Code program for this computer could not be found](https://code.claude.com/docs/es/errors.md#the-claude-code-program-for-this-computer-could-not-be-found) |951| `The Claude Code program for this computer, the <build> build, could not be found` | [The Claude Code program for this computer could not be found](https://code.claude.com/docs/es/errors.md#the-claude-code-program-for-this-computer-could-not-be-found) |

workflows.md +0 −2

Details

75| :- | :- |75| :- | :- |

76| `/deep-research <question>` | Distribuye búsquedas web sobre una pregunta desde varios ángulos, obtiene y contrasta las fuentes que encuentra, vota sobre cada afirmación y devuelve un informe con citas en el que se filtran las afirmaciones que no superaron el contraste. Requiere que la [herramienta WebSearch](https://code.claude.com/docs/es/tools-reference.md#websearch-tool-behavior) esté disponible |76| `/deep-research <question>` | Distribuye búsquedas web sobre una pregunta desde varios ángulos, obtiene y contrasta las fuentes que encuentra, vota sobre cada afirmación y devuelve un informe con citas en el que se filtran las afirmaciones que no superaron el contraste. Requiere que la [herramienta WebSearch](https://code.claude.com/docs/es/tools-reference.md#websearch-tool-behavior) esté disponible |

77 77 

78`/deep-research` solo se ejecuta cuando lo invocas.

79 

80Los [flujos de trabajo que guardas](#save-the-workflow-for-reuse) tú mismo se convierten en comandos de la misma manera y aparecen en el autocompletado de `/` junto a los incluidos.78Los [flujos de trabajo que guardas](#save-the-workflow-for-reuse) tú mismo se convierten en comandos de la misma manera y aparecen en el autocompletado de `/` junto a los incluidos.

81 79 

82### Observa la ejecución80### Observa la ejecución